比較したデータの表示について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ドイ

比較したデータの表示について

#1

投稿記事 by ドイ » 11年前

こんばんは。
今学校で構造体の勉強をしていてそれについての課題をやっているのですが、
年、月、日、最低気温、最高気温を5日分入力して、
最低気温がもっとも高かった日のデータを表示するという課題です。
それについて質問させて下さい。

プログラムを組んで動かしているのですが、なぜか最低気温の高い日のデータだけでなく
入力したデータすべてが表示されてしまいます。
以下が自分の書いたソースコードですが、どこが間違っているのかご指摘頂けないでしょうか。

コード:

#include<iostream.h>
#include<iomanip.h>

 const int days = 5 ; //考える期間
 
 struct daydate {
 	int year ; //年
	int month ; //月
	int day ; //日
	double most ; //最高気温
	double least; //最低気温
 } ;
 
main(){
	
	cout << "入力された年月日の最高気温、最低気温から、最も最低気温が高いものを表示する\n" << endl ;
	
	daydate date[days] ; //構造体の変数宣言
	int result ; //結果の構造体を指定する
	
	//日付、最高気温、最低気温の入力
	for(int i = 0 ; i < days ; i++){ //
		cout << "年 = " ;
		cin >> date[i].year ;
		cout << "月 = " ;
		cin >> date[i].month ;
		cout << "日 = " ;
		cin >> date[i].day ;
		cout << "最高気温 = " ;
		cin >> date[i].most ;
		cout << "最低気温 = " ;
		cin >> date[i].least ;
		cout << endl ;
	}
	
	//最低気温の比較
	
	for(int i = 0 ; i < days-1 ; i++){
		for(int t = 0 ; t < days-1 ; t++){
			if(date[t].least < date[t+1].least){
				daydate swap = date[t] ;
				date[t] = date[t+1] ;
				date[t+1] = swap ;
			}else if(date[t].least == date[t+1].least){
				if(date[t].most < date[t+1].most){
					daydate temp = date[t] ;
					date[t] = date[t+1] ;
					date[t+1] = temp ;
				}
			}
		}
	}
	
	for(int j=0 ; j < days ; j++){
		cout << date[j].year << "年 "
		<< date[j].month << "月 "
		<< date[j].day << "日 " << endl
		<< "最高気温 " << date[j].most << "℃" 
		<< " 最低気温 " << date[j].least << "℃" << endl << endl ;
	}
}

Poco
記事: 161
登録日時: 14年前

Re: 比較したデータの表示について

#2

投稿記事 by Poco » 11年前

最後のfor文で入力したデータをすべて表示しているからです。
表示したいdateだけ表示しましょう。

#比較のfor文のところはソートしているように見受けられますが、最大値を出すだけなら不要かと。

ミラ

Re: 比較したデータの表示について

#3

投稿記事 by ミラ » 11年前

for文でj=0から入力日分まわして、順番に全部表示してるので、そりゃ全部表示されます。
何かしらの判定を用いないとだめなのでは?

ドイ

Re: 比較したデータの表示について

#4

投稿記事 by ドイ » 11年前

ご指摘ありがとうございました!
お二人の意見を参考にして余計な部分を省き、書きなおしてみました。
一応正常に動いているのですが、何分素人なものでデバッグに不安があります。
一応コードを載せておくので、おかしなところ、直したほうが良いところ等ありましたら教えて下さい

ありがとうございました。

コード:

#include <iostream.h>
#include <iomanip.h>

const int Days = 5; //データを入力する日数
int j;

struct Temp {
	int year; //年
	int month; //月
	int day; //日
	double high; //最高気温
	double low; //最低気温
};

main(){
	Temp tdata[Days];
	for (int i = 0; i < Days; i++){
		cout <<"何年?";
		cin >> tdata[i].year;
		cout <<"何月?";
		cin >> tdata[i].month;
		cout <<"何日?";
		cin >> tdata[i].day;
		cout <<"最高気温は?";
		cin >> tdata[i].high;
		cout <<"最低気温は?";
		cin >> tdata[i].low;
	}
	
	//最低気温比較
	for (int i = 0 ; i < Days-1 ; i++){
		for(int t = 0 ; t < Days-1 ; t++){
			if(tdata[t].low < tdata[t+1].low){
				Temp swap = tdata[t];
				tdata[t] = tdata[t+1];
				tdata[t+1] = swap;
			}
		}
	}
	
	cout << tdata[j].year<<"年"
	<< tdata[j].month<<"月"
	<< tdata[j].day<<"日"
	<< "最高気温"<< tdata[j].high<< "℃"
	<< "最低気温"<< tdata[j].low<< "℃" <<endl;
	
}

Poco
記事: 161
登録日時: 14年前

Re: 比較したデータの表示について

#5

投稿記事 by Poco » 11年前

#バグの指摘というわけではありませんが。

最低気温を降順にソートして、求める値がtdata[0]に来るようにしていますよね?
それなら最後の表示処理部分で、jという変数を用いずに直接0とした方が良いかと。

閉鎖

“C言語何でも質問掲示板” へ戻る