![]() |
|
Модераторы: Poseidon |
![]()
|
|
| NO_FATE |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Читаю сейчас книгу Керниган, Ричи. "Язык C" и возникли трудности с задачкой № 1.13. Вот ее текст:
1.13 Напишите программу для вывода гистограммы длин слов во входном потоке. Построить гистограмму с горизонтальными рядами довольно легко, а вот с вертикальными столбцами труднее. Ядро программы, которое собственно подсчитывает длины слов и складывает их в массив, я написала, там ничего сложного нет, а вот с выводом гистограммы не могу никак разобраться. Как ее вывести на экран (все работает исключительно в режиме командной строки, разумеется)?
Это сообщение отредактировал(а) NO_FATE - 17.11.2006, 17:06 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
касательно самого подсчёта:
переменной state присваиваются значения, но она нигде не читается если у нас есть гарантия того, что между словами всегда только один разделитель, то, в общем-то, можно обойтись и без неё но для того, чтобы правильно анализировать строки, где идут, например, два пробела подряд, стоит перед тем, как обрабатывать конец слова, проверить, равно ли state IN касательно построения диаграммы: её можно строить построчно, каждый символ в строке соответствует некоторой длине слова для того, чтобы узнать, рисовать ли на месте символа (x,y) звёздочку или пробел, достаточно посмотреть, находится ли он под верхней границей гистограммы, т.е. длина (x) > y -------------------- qqq |
|||
|
||||
| NO_FATE |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Чесно говоря, я все равно не совсем поняла как пишеться гистограмма, если не сложно, можете написать пример или закончить эту программку.
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
ну что-нибудь типа такого:
Добавлено @ 18:08 правда, в этом случае она получится перевёрнутая чтобы возрастание шло вверх, можно поменять y на max-1-y Это сообщение отредактировал(а) maxim1000 - 17.11.2006, 18:06 -------------------- qqq |
|||
|
||||
| NO_FATE |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Спасибо! доберусь домой посмотрю как и что!
Когда есть код в нем намного легче разбираться чем так |
|||
|
||||
| breaking |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 24.2.2007 Репутация: 1 Всего: 1 |
И куда же интересно "влепить" это условие в этом куске кода:
???? К примеру этот условный переход:
к нужному результату не приводит. |
||||||
|
|||||||
| breaking |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 24.2.2007 Репутация: 1 Всего: 1 |
Сразу замечу, что решил не создавать новую тему, т.к. моя задача весьма схожа с описанной выше. Итак, условие:
Для заданного текстового файла построить гистограмму распределения длин слов, которые он содержит. С учетом вышеизложенных рекомендаций я сделал задачу следующим образом:
Листинг gets.c:
И листинг gets.h:
Правда в коде есть парочка нюансов один из которых заключается в том, что насколько я понял, последний байт файла - EOF имее значение символа - 'я',(компилятор MS VC++ 6.0) поэтому на текст, в файле которого содержатся слова с этой буквой, будет построена неправильная гистограмма. Точнее говоря, она вообще не будет построена Второй нюанс заключается в том, что мне хотелось бы немного улучшить вывод гистограммы. Сейчас объясню, что я имею ввиду. Допустим у нас есть файл input.txt, содержащий следующий текст: An interactively controllable walking character using parametric motion graphs. После выполнения программы гистограмма будет построена следующим образом: * * *** * * * * 12345678910111213 Очевидно, что это не очень красиво и гораздо нагляднее смотрелось бы вот так: * * * * * * * * * 1 2 3 4 5 6 7 8 9 10 11 12 13 Тобишь, при построении вставить между числами пробелы. Однако как это реализовать я не знаю... Я пытался каким-либо образом изменить следующий участок кода:
Однако, к нужному результату это не привело. И ещё один момент, вообще на ваш взгляд, реально ли здесь сделать массив ndigit динамическим? В качестве завершения поста, хотелось бы заметить - может быть есть какие-либо альтернативные варианты решения этой задачи? Что если попробовать реализовать вместо звездочек реальные графические столбиковые диаграммы, пускай даже одноцветные, но естественно разной высоты?Или, ладно, пускай будут звездочки, но с более эффективным алгоритмом. |
||||||||
|
|||||||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |