こんにちは。30代のプログラム初心者です。
C言語で一日毎の平均気温に合わせて、「*」印を下図のようなイメージで表示する棒グラフを作成したい(5℃なら*を5つ表示)のですが、丸1日試行錯誤してもうまくいきませんでした。
ちなみに配列kionには、一日毎の気温を格納しています。
int kion{5,4,3,・・・};
(℃)
10|
9|
8|
7|
6|
5| *
4| * *
3| * * *
2| * * * (以下省略)
1|_*_* *_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
0 1 2 3 4 5 6 7 8 9 10 11 12 ~(以下省略)
横のメモリの
_ _ _ _ _ _ _ _ _ _ _ _ _
0 1 2 3 4 5 6 7 ・・・
は、普通にprintfで表示させているのですが、
縦の
10|
9|
8|
7|
6|
5|
の表示がうまくいきません。
二次元配列を使っているのですが、やりかたが悪いんだと思います。
アドバイスを頂ければありがたいです。よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
こんな感じでどうでしょう?
for (i = 10; i > 0; i--){
// 気温iのメモリ表示
printf("%dl", i);
// グラフ表示
for (j = 0; j < 10; j++){
if (kion[j] >= i){
printf("*");
}
else{
printf(" ");
}
}
// 改行
printf("\n");
}
一応、グラフまで表示できるようにしました。
ただし、このままでは、気温や日数の桁数が変わるとグラフががたがたになると思います。
質問者様がプログラミングの自己学習されているという判断でよいのでしょうか?
後は自力できれいな表示ができるようにがんばってください。
No.3
- 回答日時:
グラフ本体を表示するコードは #2 さんが書かれていますので,
左側の目盛と縦線 ('l' (エル) はやめた方がいいですよ(笑)) を出力するヒントだけ.
・縦目盛の最大桁数が事前にわかっている場合
仮に3桁とすると,
int y; // 縦目盛の値
printf("%3d|", y);
・縦目盛の最大桁数が事前にわかっていない場合
(1) 表示するすべての縦目盛の値から,それらの最大桁数を求める.
個々の値yの桁数を調べるには,sprintf() を使ってyの値を文字列に変換し,
strlen() でその長さを求めればよい.
(2) 縦目盛りの最大桁数を maxWidth とすると,次のようにすれば目盛の値yを
maxWidth 文字分の幅 (右詰め) で出力できる.
int maxWidth; // 縦目盛りの最大桁数
int y; // 縦目盛の値
printf("%*d|", maxWidth, y);
詳しくは,マニュアルの printf,sprintf,strlen の説明を読んでください.
No.1
- 回答日時:
質問の意図がよくわかりません。
現在どのような出力になっていて、どうしたいのかを
はっきりと書いて頂ければ、的確なアドバイスができると思います。
また、「やりかたが悪い」と書かれても、そもそも
どういうやりかたをしているのかわからないので、
処理の概要 または ソースコードを書いていただけると助かります。
どうも済みませんでした。
縦軸に表示するところからやっていたのですが、それすらできません。
まず二次元配列の1列目・1行目から1列目・10行目までに10から1の数字を置き、2列目の全ての行に区切りとしての「l(エル)」を置こうと思い、このようにしてみました。
この後、配列kionに格納された値に応じて「*」を1日ごとに表示させたいと思っています。1日目の気温を「*」で5つ縦に表示、2日目の気温を「*」で4つ縦に表示・・・という具合にです。
まだ説明が下手かもしれませんが、意図が伝わらないのでしたら追記させていただきますので、ご指摘ください。
よろしくお願い致します。
#include <stdio.h>
#include <ctype.h>
int main()
{
/* int kion[10] = /* 一日ごとのkionを格納する配列 (本当は28にしたいのですが、長くなるのでとりあえず10でお願いします。)*/
/* { 5,4,3,8,7,5,2,6,4,5 };*/
int i;
int j;
int g[10][10] = {};
for (i = 10 ; i > 0 ; i--)
{
g[10 - i][0] = i ;
g[10 - i][1] = l;
}
for (i = 0 ; i < 10 ; i++)
{
for (j = 0 ; j < 10 ; j++)
{
putchar(g[i][j]);
}
printf("\n");
}
printf( "-----------------------------------\n");
/* 横軸に 日付を一日毎に表示。 */
printf( " " );
for(i = 1 ; i <= 10 ; i++)
{
printf( " %2d " , i);
}
printf( "\n" );
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) プログラムが書けません。 6 2023/01/22 22:58
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Word(ワード) Word2013 縦書き上下二段の表、改行を続けると次ページに情報が表示されるようにしたい 3 2022/06/16 09:24
- Visual Basic(VBA) 【Excel VBA】条件に合った行の表示・非表示を行う方法 3 2023/03/18 12:31
- Excel(エクセル) Excelでグラフの種類「縦棒」でグラフを作ったのですが横軸が同じものが複数に分かれて表示されてしま 1 2022/12/26 22:39
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Excel(エクセル) VBAでユークリッド距離を用いて1番近い物を表示 表 裏 縦 横 高さ 縦 横 高さ 名前 1 45 9 2022/10/23 16:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C言語教えてください】sin波...
-
C言語についてです。 アスタリ...
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
コマンドプロンプトがすぐ消える
-
アドレスの比較について
-
C言語 プログラミング
-
strcmp
-
ピラミッド表示プログラム。
-
*を使ったジグザグのラインをプ...
-
C言語での、年複利の計算方法...
-
C言語のじゃんけんゲームのプロ...
-
printf( " %2d", p * q );
-
C言語プログラミング
-
cshの文字列操作(0埋め)
-
プログラミング教えてください
-
srand(time(NULL))の使い方
-
DOS画面でテキストカーソルの位...
-
分数を表示するプログラム(長...
-
ヌメロンの対戦相手
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報