
構造体型point の次の2次元配列を使って、入力した点がどの象限に含まれるかを数えるプログラムを作成せよ。
struct point table[5][100];
ただし、入力データの最大個数は100とする。
座標軸上の点はどの象限にも属さないとして、table[0]に格納するものとする。
また、下のような実行例を想定する。
http://www9.uploader.jp/user/kadaishu/images/kad …
今学校で構造体を習っていて、このような問題をやっているのですが
どうすればいいのかよくわかりません。
どなたかご教授よろしくお願いします。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
実行例の画像ではファイルから入力してるので入力待ちではないと思います。
./a.out < point-data.txt
int i, j, x, y, s, num[5] = {0};
/* num[ ]は0で初期化しないとだめです */
while (scanf("%d %d", &x, &y) != EOF) {
//for(i=0;i<100;i++){
/* 100回も繰り返す必要はありません
メインのエラー原因はこれです(後述のバッファーオーバーフロー)*/
if(x>0 && y>0) s=1;
if(x<0 && y>0) s=2;
if(x<0 && y<0) s=3;
if(x>0 && y<0) s=4;
else s=0;
/* これだとsは4か0にしかならないです
2番目以降の if を else if にするか
または s = 0;を最初にして最後のelse s=0;を削除 */
table[s][num[s]++].x = x;
table[s][num[s]++].y = y;
/* num[s]が2回インクリメントされてます。最初の++は不要。
1個のデータでnum[s]が200ずつ増えるためtable[ ]配列がすぐにバッファオーバーフローしてしまいます*/
//}
}

No.7
- 回答日時:
> すいません、コンパイルしたときには何もエラーはでないのですが、
単に、「データ入力待ち」で止まっているだけでしょう。
データ入力しましたか?
まだ、バグは残っていて、どこかの象限「だけ」しかカウントされないはずですが。
No.5
- 回答日時:
言語はCでしょうかC++でしょうか
とりあえずCということでファイルからデータを入力するのは
int x, y, quadrant;
while (fscanf(stdin, "%d %d", &x, &y) != EOF) {
/* x と yの符号で象限を決める */
if (x > 0 && y > 0) { quadrant = 1; }
else if (穴埋め) { quadrant = 2; }
else if (穴埋め) { quadrant = 3; }
else if (穴埋め) { quadrant = 4; }
else { quadrant = 0; }
/* table[quadrant]構造体にx y を入力 */
}
見たいな感じですかね
この回答への補足
Cです。すいません。
皆さんの意見を参考にして
#include <stdio.h>
struct point{
int x;
int y;
};
int main(void){
struct point table[5][100];
int i, j, x, y, s, num[5];
while (scanf("%d %d", &x, &y) != EOF) {
for(i=0;i<100;i++){
if(x>0 && y>0) s=1;
if(x<0 && y>0) s=2;
if(x<0 && y<0) s=3;
if(x>0 && y<0) s=4;
else s=0;
table[s][num[s]++].x = x;
table[s][num[s]++].y = y;
}
}
for(i=1;i<=4;i++){
printf("第%d象限の個数 %d\n", i, num[i]);
for(j=0;j<num[i];j++){
printf("(%d, %d)\n", table[i][j].x, table[i][j].y);
}
}
return 0;
}
こんな感じでやってみたのですが、エラーが出てしまいます。。
何処が間違っているのでしょうか?

No.4
- 回答日時:
もしかしたら、こんなの。
動作未確認です。
ひとおりはあるので、ちゃんとアレンジしてみてください。
あと、C++で書いてしまったので、ファイルからの読み込みや、表示のところは、全面的に変更必要ということで。
#include <fstream>
struct point
{
int x;
int y;
};
int select_axia(struct point pos)
{
if (pos.x > 0 && pos.y > 0) return 1;
if (pos.x < 0 && pos.y > 0) return 2;
if (pos.x < 0 && pos.y < 0) return 3;
if (pos.x > 0 && pos.y < 0) return 4;
return 0;
}
int main()
{
struct point table[5][100];
struct point pos;
int counts[5] = {0};
std::ifstream inf("pint-data.txt");
for( int i = 0; i < 100; i++)
{
inf >> pos.x >> pos.y;
if (! inf) break;
int axia = select_axia(pos);
table[axia][counts[axia]] = pos;
counts[axia]++;
}
for (int i = 1; i <= 4; i++)
{
std::cout << "第" << i << "象限の個数 " << counts[i] << "\n";
for (int j = 0; j < counts[i]; j++)
std::cout << "(" << table[i][j].x << ", " << table[i][j].y << ")\n";
}
return 0;
}
No.2
- 回答日時:
丸投げはやめましょう。
考え方が分からないのか、構造体の扱いが分からないのかも不明です。
分かるところまで書いて下さい。
ヒント
・1行ずつ読んで、左右の数字がそれぞれ正か負を見れば象限が決まります。
・点を5種類に分けますが、それぞれ現在何個見つかったかを表す変数 (int count[5];) を用意すると良いでしょう。
この回答への補足
すいません、象限の判定方法はわかるのですが、
struct point table[5][100];の扱いとか、
判定した後にどのように処理すればいいのかとかがわかりません。
というかほとんどわからないかも・・
#include <stdio.h>
struct point {
int x;
int y;
};
int main(void) {
ここまではやったのですが・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- 哲学 《日本における思想的座標軸》を問い求めておくことは 有効・有益ではないか? 30 2022/12/17 23:53
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 malloc 関数を使って教えてください。 入出力例1 3 2022/07/21 09:36
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
(int *)の意味
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
C++でvectorにテキストファイル...
-
int型の変数値をバイト列として...
-
数字列を3桁ごとにカンマで区切...
-
「{ } で囲むだけ」は正しい?
-
C言語初心者です、、、お助けく...
-
C言語
-
ラップ関数とはどんなものですか?
-
(マルチスレッド)_beginthrea...
-
C言語でDxlibを使って3x3の奇数...
-
C言語について教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
int型の変数値をバイト列として...
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
(int *)の意味
-
CStringの配列要素を関数で受け...
-
ColorをRGBで指定する方法
-
「{ } で囲むだけ」は正しい?
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
read関数をノンブロッキングで...
-
(マルチスレッド)_beginthrea...
-
int16_t の _t は何?
おすすめ情報