Пропустить навигацию.
Главная

Язык "С" и Linux. --- 1. Программа-мистика.

Аватар пользователя freemaster

Этим постом открываю цикл "Язык С и Linux". :)

По книге было задание: самому написать программу (консольную), которая будет рисовать вертикальную гистограмму из длин введенных слов. Я состряпал такую вот программу, она честно выполняет заданное (но ограничения: символов в слове до 20, а слов до 15 штук.)

#include <stdio.h>
int main()
{
 int c, s, i, nw, n, w;
 nw = 0;                    /*считает количество слов*/
 int symb[20];              /*считает кол-во символов в словах*/
 for (w=0; w<15; ++w)       /*обнуляет переменные массива*/
  symb[w] = 0;
 s = 1;
 while ((c = getchar()) != '*')
 {
  if (c == ' ' || c == '\n')
  {
   if(s == 1)
    ++nw;
   ++s;
  }
  else
  {
   s = 1;
   ++symb[nw];
  }
 }
 printf("\n\n***КОЛИЧЕСТВО БУКВ В СЛОВАХ***\n\n");
 printf("Символ| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n");
 for (n = 1; n<= 20; ++n)
 {
  printf("%2d      ", n);   /*возвращает номер символа в слове*/
  for (i=0; symb[i] <= 15; ++i)
  {
   if(symb[i] >= n)
    printf("| ");           /*рисует гистограмму*/
   else
    printf("  ");           /*или не рисует*/
  }
  putchar('\n');
 }
 return 0;
}

Если "просканировать" текст программы, можно заметить:
int symb[20]; /*считает кол-во символов в словах*/
почему, ведь слов должно быть 15!?
Потому что если тут изменить "20" на "15", то вот какой вывод:

freemaster@freePC:~/Документы/gcc$ ./a.out
qwerqwuriuwey  euiryweiury uiywi ru
weroier 
wer
*
 
 
***КОЛИЧЕСТВО БУКВ В СЛОВАХ***
 
Символ| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
 1      | | | | | |                   | | | 
 2      | | | | | |                   | | | 
 3      | | |   | |                   | | | 
 4      | | |   |                     | | | 
 5      | | |   |                     | | | 
 6      | |     |                     | | | 
 7      | |     |                     | |   
 8      | |                           | |   
 9      | |                           | |   
10      | |                           | |   
11      | |                           | |   
12      |                             | |   
13      |                             | |   
14                                    | |   
15                                    | |   
16                                      
17                                      
18                                      
19                                      
20                                      

В конце непонятно зачем появляется вот такая-вот дребедень!
Если здесь
int symb[20];
оставить 20, то все проходит ОК!

Думайте.... Лично я не врубаюсь почему так...

Re: Язык "С" и Linux. --- 1. Программа-мистика.

Александр...
Прошу прощения. Я не знаком с "С" - абсолютно. Когда - то встречал аналогичную задачу в "Basic"...
Но, вряд - ли тут присутствует мистика. Знаете, я бы озадачил "Google". Я, тоже когда-то ( с трудом вериться) был студентом, но тогда была ЭВМ "Минск 32", перфолента и время после полуночи для желающих реализовать свой реальный диплом и творческие возможности.

Re: Язык "С" и Linux. --- 1. Программа-мистика.

Просто не представляю как это сделать... Или не научился гуглить мож быть...