Вывести гистограммы длин вводимых слов - C (СИ)
Формулировка задачи:
Собственно задание:
Мутительное начало для меня. Помогите разобраться. Вылетает в segmentation fault.
Упражнение 1.13. Напишите программу, печатающую гистограммы длин вводимых слов. Гистограмму легко рисовать горизонтальными полосами. Рисование вертикальными полосами - более трудная задача.
#include <stdio.h> #include <ctype.h> #define IN 1 #define OUT 0 main () { int c, i, length, state, max, l; int wordl[15]; state = OUT; l = 0; max = 0; for (i = 0; i < 15; ++i) wordl[i] = 0; while ((c=getchar()) != EOF) if (isalpha(c)){ ++length; state = IN; } else if (state = IN) { state = OUT; ++wordl[length]; if (max < length) max = length; } for (i = 0; i < max; ++i) printf("%4d", i); for (i = 0; i < 15; ++i) { printf ("%d", i); while (l <= wordl[i]*4) { ++l; printf("#"); } } }
Решение задачи: «Вывести гистограммы длин вводимых слов»
textual
Листинг программы
#include <stdio.h> #include <conio.h> int main() { int word_leangth = 0; char c; int i; while((c = getchar()) != '\n') //читаем одну строку { if (c != ' ') //если символ не пробел word_leangth++; //+1 буковка в слове else //а вот если он пробел { for(i = 0; i < word_leangth; i++) //печатаем длину слова палочками горизонтальными printf("_"); printf("\n"); //переходим на след. строку word_leangth = 0; } } for(i = 0; i < word_leangth; i++) //печатаем длину посл. слова printf("_"); //просто оно не заканчивается пробелом, а зак. знаком конца строки printf("\nPress any kay to exit\n"); getch(); //это просто чтобы спокойно посмотреть результат и выйти по нажатию любой кнопки return 0; }
Объяснение кода листинга программы
- Ввод данных: считывание одной строки, используя функцию getchar(). Эта функция считывает один символ за раз, и она будет вызывать до тех пор, пока не встретит символ новой строки (\n).
- Переменная
word_leangth
инициализируется как 0. Она используется для отслеживания длины текущего слова. - Переменная
c
используется для хранения каждого считанного символа. - Переменная
i
используется в цикле for. - Если считанный символ не пробел, то увеличивается значение
word_leangth
. - Если считанный символ - пробел, то выполняется следующий блок кода:
a. Цикл for выполняется, пока значение
word_leangth
больше 0. b. Для каждой итерации цикла выводится горизонтальная линия из палочек, используя функцию printf(). c. Значениеword_leangth
сбрасывается обратно в 0 после вывода горизонтальной линии. - После окончания цикла while выводится горизонтальная линия из палочек для последнего слова, используя цикл for.
- Выводится сообщение
Press any key to exit
, чтобы пользователь мог выйти из программы, нажав любую клавишу. - Функция getch() используется для ожидания нажатия клавиши.
- Программа возвращает 0, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д