C言語関係掲示板

過去ログ

No.351.横棒グラフを縦棒グラフに

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

横表示を縦表示に変える方法
投稿者---かぷ(2002/08/01 16:27:01)


1年間の月別平均気温を入力して、ヒストグラムを完成させる処理を考える
気温幅は0〜40度までしか入力されないものとして、2度につき*を1つ表示させる。
この問題で横表示で出力をすることはできたですが、縦表示で出力したいので
どなたかご教授お願いします。
 
横表示で作ったソースです
#include <stdio.h>
main()
{
        int tuki[13],i,a,n;
        printf("1月から12月までの気温データを入力\n");
        for(i=0;i<=11;i++){
                scanf("%d",&a);
                tuki[i]=a;
        }
        i++;
        tuki[i]='\0';
        i=0;
        while(i<12){
                printf("%2d |",i+1);
                for(n=0;n<tuki[i]/2;n++){
                        printf(" * ");
                }
                printf("\n");
                i++;
        }
}


この処理を縦で出力する問題です。


No.2264

Re:横表示を縦表示に変える方法
投稿者---ともじ(2002/08/01 20:23:26)


こんばんは。

>この問題で横表示で出力をすることはできたですが、縦表示で出力したいので
>どなたかご教授お願いします。

>i++;
>tuki[i]='\0';

は不要に思いましたが。

とりあえず、char型12×40の2次元配列を用意し、
>for(n=0;n<tuki[i]/2;n++){
> printf(" * ");
>}
の部分でprintfの代わりにその2次元配列に'*'を代入します。
データは手入力ですから、40度を超えないように制御してください。

12か月分のループを終了したら、
2次元配列の縦横を逆にして、putcharで'*'を出力します。
このとき、40度から逆に表示してください。
単純ですが、これでできるはずです。


No.2275

Re:横表示を縦表示に変える方法
投稿者---かぷ(2002/08/02 16:44:57)


ともじさん こんにちは 教えていただきありがとうございました。 考え方はわかりましたが、
今日一日やってみても作ることができませんでした。
2次元配列に格納して縦にする前に横で出力しようとしても
うまく出力できません。
もうお手上げです。
助けてください。

No.2276

Re:横表示を縦表示に変える方法
投稿者---Kaji(2002/08/02 17:33:44)


こんにちわ。

適当に作ってみました。
適当なので配列は使ってないですが
配列にしたほうが奇麗で読みやすいです。


#include <stdio.h>
main()
{
        char szTuki[][2] = {
                " 1", " 2", " 3", " 4", " 5", " 6",
                " 7", " 8", " 9", "10", "11", "12"
        };

        int tuki[13],i,a,n;
        printf("1月から12月までの気温データを入力\n");
        for(i=0;i<=11;i++){
                scanf("%d",&a);
                tuki[i]=a;
        }

        for(n=40;n>0;n-=2) {
                for(i=0;i<12;i++) {
                        if(tuki[i] >= n)
                                printf("*");
                        else
                                printf(" ");
                }
                printf("\n");
        }
        for(i=0;i<12;i++)
                printf("-");
        printf("\n");

        for(n=0;n<2;n++) {
                for(i=0;i<12;i++)
                        printf("%c", szTuki[i][n]);
                printf("\n");
        }
        printf("\n");

}



No.2279

Re:横表示を縦表示に変える方法
投稿者---ともじ(2002/08/02 20:26:53)


こんばんは。

2次元配列を使うのでデータ量が多いときにはお勧めできませんが、
ロジックは単純です。

#include <stdio.h>
#define MAX 20

int main(void)
{

        int tuki[12] = {4,6,9,12,18,21,24,28,22,16,11,6};
        int i, j, k;
        char gr[12][MAX];

        /* 2次元配列に温度分の'*'を格納 */      
        for (i = 0; i < 12; i++) {
                for (j = 0; j < tuki[i]/2 && j < MAX; j++)
                        gr[i][j] = '*';
                for (k = j; k < MAX; k++)
                        gr[i][k] = ' '; 
        }

        /* 2次元配列を縦横逆に表示 */
        for (i = MAX-1; i >= 0; i--) {
                for (j = 0; j < 12; j++) 
                        printf(" %c ", gr[j][i]);
                printf("\n");
        }
       
        return (0);
}


No.2306

Re:横表示を縦表示に変える方法
投稿者---かぷ(2002/08/05 11:04:13)


ともじさん、kajiさんどうもありがとうございました。
配列に格納するときの
for (k = j; k < MAX; k++)
   gr[i][k] = ' ';

この部分が思いつかずにずっと悩んでいました。
すっきりしました。
ほんとうにありがとうございました。