Приветствую Вас Гость | RSS

Язык программирования С

Пятница, 03.05.2024, 22:32
Главная » 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
4 lionsay  
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;
}

3 APPshnik  
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;
}

2 APPshnik  
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;
}

1 APPshnik  
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;}

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]