C言語関係掲示板

過去ログ

No873 数値を入力させ対応した数のヒストグラムを出力する

[戻る] [ホームページ]
No.11302

うまく出力できません
投稿者---TOKI(2003/12/18 22:37:00)


数値を入力させ対応した数のヒストグラムを出力する問題なのですが、10807110116ならば0が3つ1が5つでa[0]=3*** a[1]=5 *****・・・の様に出力したいのですがうまくいきません。どうしたらよいかよかったら教えてください。
プログラムはこんな感じになっています。
#include <stdio.h>
#include <conio.h>
int main(void)
{
    int i, j, count, ch[10];
    count = 10;

    printf("10桁数字を入力してください:");
    for (i=0; i<10; i++) ch[i] = getche();
    for (i=0; i<10; i++){
        for (j=0; j<10; j++){
            if (j==ch[i]) count++;
            printf("%d =", j);
            for (count; count; count--) printf("%c\n", '*');
        }
    }

    return 0;
}



No.11305

Re:うまく出力できません
投稿者---○○猫(2003/12/19 00:10:26)


>数値を入力させ対応した数のヒストグラムを出力する問題なのですが、10807110116ならば0が3つ1が5つでa[0]=3*** a[1]=5 *****・・・の様に出力したいのですがうまくいきません。どうしたらよいかよかったら教えてください。


んと、

出力結果って、

10桁数字を入力してください:1080711011
0=***
1=*****
7=*
8=*

って感じかな・・・

まぁ、そのソースは、、、つけたすより書き直したほうがよいと思う。

getche()はchar型なので、文字として扱うこと。
んでもって、入力した10個の文字から0〜9の文字の数を数える。
それから数えた数だけ*を出力する。

これでできるはず。

No.11312

Re:うまく出力できません
投稿者---TOKI(2003/12/19 12:26:23)


返信ありがとうございます。
getche()はchar型だったのですか知らずに使っていました。
数字を文字と扱うというところからアスキーコードの番号を利用していくところまでは気がつくことできました。その先の肝心のところがダメでしたが・・
アスキーコードは文字の大きさを比べることができるぐらいだと思っていましたが今回のことで考えが改まりました。
色々学ぶことができて楽しかったです。ありがとうございました。

No.11307

Re:うまく出力できません
投稿者---shu(2003/12/19 03:13:21)
http://park6.wakwak.com/%7Enougaki/


000: #include <stdio.h>
001: #include <stdlib.h>
002: #include <ctype.h>
003: 
004: #define KETA 10
005: #define toDigit(c) ((c) - '0')
006: 
007: int main( void )
008: {
009:     char strNum[KETA + 1];
010:     int count[KETA] = {0};
011:     int i;
012:     
013:     printf("10桁数字を入力してください: ");
014:     fgets(strNum, KETA + 1, stdin);
015:     
016:     for (i = 0; i < KETA; i++) {
017:         if (isdigit(strNum[i])) {
018:             count[toDigit((strNum[i]))]++;
019:         }
020:         else {
021:             fputs("入力値が不正です。\n", stderr);
022:             exit(1);
023:         }
024:     }
025:     
026:     for (i = 0; i < KETA; i++) {
027:         printf("count[%d] = %2d: ", i, count[i]);
028:         while (count[i]--) { putchar('*'); }
029:         putchar('\n');
030:     }
031:     
032:     return 0;
033: }


こんなんでどうでしょう?

No.11311

Re:うまく出力できません
投稿者---TOKI(2003/12/19 12:11:56)


すごいです!動いた時には感動しました!

なるほどfgets()を使って数字を読み込むのですか。
数字を入力しても文字として文字列に格納されるので使い勝手がいいのかぁ。
*の出力にはforを使うものかと思ってましたがwhileで簡単に出来ると知れて勉強になりました。
ありがとうございました。