Answer the question
In order to leave comments, you need to log in
Kernighan, Ritchie: Exercise 1.13 Am I missing something?
Good afternoon!
Without water and dust, straight to the point:
Brian Kernighan and Dennis Ritchie, second edition, paragraph 1.6 (Arrays), at the end of two exercises, one of them, in fact, the question:
Exercise 1.13. Write a program that prints histograms of the lengths of input words. A histogram is easy to draw with horizontal bars. Drawing with vertical stripes is a more difficult task.
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF)
{
if(c == ' ' || c == '\t' || c == '\n')
{
putchar('\n');
while ((c = getchar()) == ' ' || (c = getchar()) == '\t' || (c = getchar()) == '\n')
{
putchar('\r'); //Для тех случаев, когда стоит нескоько пробелов, табуляций или новых строк подряд
//(Чтобы гиаграммма не росла вериткально, короче говоря, и была без разрывов)
}
}
putchar('-');
}
}
#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;
}
#include <stdio.h>
#define invischar 0 // непечатаемый символ
#define vischar 1 // печатаемый символ
#define maxwords 10 // количество слов ограничим десятью
int main(){
int i, biggest = 0, num = 0, prevch = vischar; // индексы, счетчики, флажки
int ch; // текущий символ
int nword[maxwords]; // массив с кол-вом эл-тов maxwords
for(i = 0; i < maxwords; ++i) // инициализация массива
nword[i] = 0;
i = 0;
while((ch = getchar()) != EOF){ // начало заполнения массива
if(ch == '\t' || ch == ' ' || ch == '\n')
prevch = invischar;
else{
if (nword[i] > 0 && prevch == invischar){ // пропустим первые непечатаемые
++i; // переход к следующему элементу
++num; // счетчик числа непустых элементов
}
prevch = vischar;
++nword[i];
if(nword[i] > biggest)
biggest = nword[i]; // наибольший элемент(ы) массива
}
} //конец заполнения массива
printf("%s\n", "Words length histogramm");
while(biggest > 0){
for(i = 0; i <= num; ++i)
if(nword[i] >= biggest)
putchar('I');
else
putchar(' ');
putchar('\n');
--biggest;
}
return(0);
}
Answer the question
In order to leave comments, you need to log in
The histogram of lengths shows the distribution of the number of encountered words from their length, i.e. you need to draw n stripes (from 1 to n where n is the maximum length of a word), each strip should have a number of divisions proportional to the number of words of a given length. Those. if there are twice as many 6-character words as 8-character words, then the 6-character word bar should be twice as long.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question