Главная » 2010 » Март » 12 » 1.6. Массивы. Упражнение 1.14.
20:03
1.6. Массивы. Упражнение 1.14.
Упражнение 1.14. Напишите программу для вывода гистограммы частот, с которыми встречаются во входном потоке различные символы.
Не очень хорошо сформулированное задание, написал программу, которая считает пять различных символов:
/* вывод гистограммы частот, с которыми встречаются во входном потоке различные символы */
#include "stdafx.h"
int main()
{
int c, j, i;
int characters[5]; // массив количества различных символов
for (i = 0; i < 5; ++i)
characters[i] = 0;
while ((c = getchar()) != EOF) {
if (c == '}' )
++characters[0];
if (c == '=' )
++characters[1];
if (c == '[' )
++characters[2];
if (c == '+' )
++characters[3];
if (c == ';' )
++characters[4];
}
/* выводим гистограмму частот */
printf("}\t=\t[\t+\t;\t\n" );
for (i = 0; i < 30; ++i)
for (j = 0; j < 5; ++j) {
if (i < characters[j])
printf("*\t" );
else printf(" \t" );
if (j == 4)
printf("\n" );
}
}
Результат выполнения:
Просмотров: 2827 |
Добавил: brainfrog
| Теги: гистограмма , программа , упражнение , входной поток
| Рейтинг: 0.0 /0
Всего комментариев: 4
Порядок вывода комментариев:
По умолчанию
Сначала новые
Сначала старые
0
Тоже вариант, ничего особенного, лишь красивая обертка + много символов + другие.
#include <stdio.h>
#define MAXLEN 9
int main(void)
{
int c, i, j, symbols_len[MAXLEN], big = 0;
for (i = 0; i < MAXLEN; ++i)
symbols_len
= 0; while ((c = getchar())!= EOF) if (c == ' ') ++symbols_len[0]; else if(c == '\t') ++symbols_len[1]; else if(c == '.') ++symbols_len[2]; else if(c == ',') ++symbols_len[3]; else if(c == ';') ++symbols_len[4]; else if(c == '\n') ++symbols_len[5]; else if(c >= '0' && c <= '9') ++symbols_len[6]; else if(c >= 'a' && c <= 'z') ++symbols_len[7]; else ++symbols_len[8]; for (i = 0; i < MAXLEN; ++i) { if (symbols_len > big) big = symbols_len; } printf("\n"); for (big; big > 0; --big) { printf("%2d |", big); for(j = 0; j < MAXLEN; ++j) { if (symbols_len < big) printf(" "); else printf(" *"); } printf("\n"); } printf(" +--------------------------------------------------|-----\n"); printf(" space tab dot comma ptcom nline digit char other\n"); return 0; }
0
Или вот еще вариант с указанием диапазонов, в которых необходимо считать символы. Тут выбраны диапазоны, включающие в себя знаки препинания, буквы русского и латинского алфавитов. #include <stdio.h> #define MIN1 32 #define MIN2 224 #define MAX1 175 #define MAX2 239 //32 - 175, 224 - 239 int main(void) { int c, i, n; int chast[MAX2]; for (i = MIN1; i < MAX2; ++i) chast = 0; while ((c = getchar()) != EOF) if (c >= MIN1 && c <= MAX2){ ++chast ; } for (i = MIN1; i <= MAX2; ++i){ if ((i >= MIN1 && i <= MAX1) || (i >= MIN2 && i <= MAX2)) printf("%c - ", i); for (n = 1; n <= chast; ++n){ if (n <= chast) printf("*"); } if ((i >= MIN1 && i <= MAX1) || (i >= MIN2 && i <= MAX2)) printf("\n"); } return 0; }
0
Блин, неудачно отправилось
#include <stdio.h>
int main(void)
{
int c, i, n;
int chast[123]; //массив со значениями количества символов
for (i = 0; i < 123; ++i) //обнуление всех элементов массива
chast
= 0; while ((c = getchar()) != EOF) //наполнение массива (считает буквы латинского алфавита) if (c >= 97 && c <= 122){ ++chast ; } for (i = 97; i <= 122; ++i){ //вывод горизонтальной гистограммы printf("%c - ", i); for (n = 1; n <= chast; ++n){ if (n <= chast
)
printf("*");
}
printf("\n");
}
return 0;
}
0
А у меня получился такой вариант:
#include<stdio.h>intmain(void){
intc,i,n;intchast[123];for(i=0;i<123;++i)chast
=0;while((c=getchar())!=EOF)if(c>=97&&c<=122){++chast ; } for(i=97;i<=122;++i){printf("%c-",i);for(n=1;n<=chast;++n){if(n<=chast
)printf("*");}
printf("\n");}
return0;}
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]