>>948 なるほど・・・・・考えてみます。39でした。
>>953 です
9桁までしか扱えねージャン。
コレはごめんよ
なぜ12桁なんだらうか・・・
>>955 何故なんでしょうかね?
自分でもよくわからないけど、12桁って出てきちゃいました。
結局質問した人は何処へいったのやら
957 :
デフォルトの名無しさん :03/11/16 00:49
ファイルを読み込み値が小さいもの順にソートし、ファイルに出力せよ。 なお、読み込みファイルと出力ファイルは以下のようにする。 (読み込みファイル)input.txt 56.75 Hanako 12.5 Tarou 100 Kenji (出力ファイル)output.txt 12.5 Tarou 56.75 Hanako 100 kenji ================================== という課題がでました。 わかりませんので、お願いします。
>>944 #include <iostream>
#include <map>
int main()
{
using namespace std;
map<int,int> m;
int n,i=5;
while(i-- >0 && cin>>n){
if(m[n] == 0){
m[n] = n;
cout<<"・・・・"<<n<<endl;
}
}
return 0;
}
「あ゛」ごめん。 int n,i=5; のとこ int n,i=20; の、間違い。
>>944 #include <iostream>
#include <set>
main()
{
using namespace std;
set<int> s;
for (int i = 0; i < 20; ++i)
{
int j;
cin >> j;
if(s.insert(j).second)
cout << j << endl;
}
}
struct _hoge{ struct _hoge *next,*prev; double num; char name[15];}; // 名簿用 // メイン関数 int main() { FILE *readfp, writefp; // 読み込み用と、書き込み用 struct _hoge Hoge_start; // 名簿用の起点 struct _hoge Hoge_tmp1, Hoge_tmp2; // 一時的使用 if (!(readfp = fopen("input.txt", "r")) // ファイルオープン失敗なら終了 return 1; if (!(writefp = fopen("output.txt", "w")) // ファイル作成失敗なら終了 return 1; Hoge_start.next = Hoge_start.prev = NULL; // 初期化 Hoge_tmp1 = &Hoge_start; while (!feof(readfp)) { // 読み込みを開始する Hoge_tmp1->next = Hoge_tmp2 = (struct _tmp*) malloc (sizeof (struct _hoge)); // 新ノード Hoge_tmp2->prev = Hoge_tmp1; Hoge_tmp1 = Hoge_tmp1->next; Hoge_tmp1->next = NULL; // 初期化 fscanf (readfp, "%f %s", Hoge_tmp1->num, Hoge_tmp1->name); // 読み込み } fclose (readfp);//ファイルクローズ for (Hoge_tmp1 = Hoge_start.next; Hoge_tmp1; Hoge_tmp1 = Hoge_tmp1->next) // 並び替え for (Hoge_tmp2 = Hoge_tmp1->next; Hoge_tmp2; Hoge_tmp2 = Hoge_tmp2->next) if (Hoge_tmp2->num < Hoge_tmp1->num){ Hoge_tmp2->prev->next = Hoge_tmp2->next; if (Hoge_tmp2->next) Hoge_tmp2->next->prev = Hoge_tmp2->prev; // 次ノードがヌル Hoge_tmp1->prev->next = Hoge_tmp2; Hoge_tmp1->prev = Hoge_tmp2; // Hoge_tmp1 の前後 Hoge_tmp2->prev = Hoge_tmp1->prev; Hoge_tmp2->next = Hoge_tmp1; // Hoge_tmp2 の前後 } for (Hoge_tmp1 = Hoge_start.next; Hoge_tmp1; Hoge_tmp1 = Hoge_tmp1->next) // ファイルの書き込み fprintf(writefp,"%f %s\n",Hoge_tmp1->num, Hoge_tmp1->name); fclose (writefp); 書き込み用ファイルを閉じる return 0; }
>>957 >>961 です。
遅くなりましたが、これでどうでしょうか?
ちなみに標準入出力ヘッダーファイル読んでないので先頭に
#include <stdio.h>と入れてください
>>957 #include <iostream>
#include <fstream>
#include <list>
#include <string>
using namespace std;
struct record_t {
float num; string name;
int operator<(record_t& any_one){ return this->num < any_one.num; }
};
istream& operator>>(istream& is, record_t& rec) { is >> rec.num >> rec.name; return is; }
ostream& operator<<(ostream& os, const record_t& rec) { os << rec.num << " " << rec.name; return os; }
typedef list<record_t> db_t;
int main()
{
ifstream is("input.txt"); ofstream os("ouput.txt");
db_t db; record_t rec;
if(is && os){
while(is>>rec) db.push_back(rec);
db.sort();
for(db_t::iterator i = db.begin(); i != db.end(); i++) os << *i << endl;
}
return 0;
}
>>944 どーでもいいけど multiset だけじゃなくて set にも .second って使えるのね…知らなかった
>>948 考えたのですが、やっぱりわかりませぬ・・・・しくみが。
>>966 悪いことは言わないから標準関数使おうな、な
自分で関数を使うこだわりというか意味でもあるの?
あるなら何か教えてほしい、というか無いなら標準かんs(ry
>>967 ・・・・問題のところに、「条件でatoiを使わないでつくれ」
かいているのですよ・・・・
かいてなかったら、とっくに使ってますよ・・・・・・_| ̄|○
>>968 なるほどね。次からは初めから言ってください
↑のソースだとオーバーフローするみたいなので、 c <= 9 と直して9桁以下にしてね
(0,1,,2,3,,4,5,,6,7,8)←ポインタアドレス0が先頭
s |1|2|3|4|5|6|7|8|9|\0| <=実際に入ってる数
__
s |1|2|3|4|5|6|7|8|9| <= マズ1を見る
参照してる数字 = 1
result = 1;
__
s |1|2|3|4|5|6|7|8|9| <= 2を見る
参照してる数字 = 2
result = 12;
と続いていき9桁までいくか文字列の最後までいったら result を返します
>>968 =936
お前の書き方が悪い。逝って来い。
>>1 をヨメ!!
>【注意点】
>・問題はしっかり分かりやすく書きましょう。
> 全文を書いてしまうか、分かりやすくまとめましょう。
次スレ立ててきます
#include <stdio.h> void gyaku(int x, int i, int str[], int cnt[]) { cnt[x - i] = str[i]; } int main(void) { int i, x, str[255], cnt[255]; printf("要素数:"); scanf("%d", &x); for (i = 0; i < x; i++){ printf("%d:", i + 1); scanf("%d", &str[i]); } for (i = 0; i < x; i++){ printf("%d\n", cnt[i]); } return(0); } 整数型の配列と、その配列の要素数を引数としてとり、その配列を逆順に出力 する関数を作成せよ。 と言う問題なのですが、上記のプログラムではいけないのでしょうか? 858993460が何個も出力されるんです。。。 どこがいけないでしょうか?
>>976 のgyaku()を reverse() にするとかっこええかも
>>976 あのさぁ、、、、、どこでgyaku()を呼んでいるのよ!?
gyakuって何処でよばれてるの?
あのすいません、voidの関数を作るのは初めてで、どこで呼ぶとかが 分からないんです。。。 教えていただけないでしょうか?
>>983 まずはgyakuを書き直して配列の要素を逆順に並べ替えるものにした方がいいぞ。
それを出力するためのループの前に呼ぶ。
>>983 void は値を返さない関数なだけだよ。
で、普通の関数と同じで特別視する必要はないから
#include <stdio.h>
void gyaku(int x, int str[], int cnt[]);
// メイン関数
int main(void)
{
int i, x, str[255], cnt[255];
printf("要素数:");
scanf("%d", &x);
for (i = 0; i < x; i++){
printf("%d:", i + 1);
scanf("%d", &str[i]);
}
gyaku (x, str, cnt);
for (i = 0; i < x; i++){
printf("%d\n", cnt[i]);
}
return 1;
}
void gyaku(int x, int str[], int cnt[])
{
int i;
for (i = 0; i < x; i++)
cnt[x - i] = str[i];
}
こんな感じかな /* 要素数n個の配列を逆に並べ替える */ void gyaku(int *a,int n) { int i,tmp; n--; for(i=0;i<n;i++,n--) tmp=a[i],a[i]=a[n],a[n]=tmp; }
あ・・・こっちも重複。まあいいか。
>>988 まぁ、ちょびっと違うからいいよね^^(と勝手に
void関数を作るのは初めてで、作った関数をどう呼べばいいのかわからないです。 教えて頂けないでしょうか?
#include <stdio.h> void gyaku(int x, int str[], int cnt[]); // メイン関数 int main(void) { int i, x, str[255], cnt[255]; // 作業用変数 printf("要素数:"); scanf("%d", &x); // 要素の数を取得 for (i = 0; i < x; i++){ // 要素の入力 printf("%d:", i + 1); scanf("%d", &str[i]); } gyaku (x, str, cnt); // 要素の並び替え for (i = 0; i < x; i++){ // 新・要素の表示 printf("%d\n", cnt[i]); } return 1; /* 正常終了 */ } // 要素の並び替え void gyaku(int x, int str[], int cnt[]) { int i; for (i = 0; i < x; i++) // 後ろから順に前に入れる cnt[x - i] = str[i]; }
ソースから嫁
995 :
デフォルトの名無しさん :03/11/16 12:11
記念カキコ v(^-^*)
>>994 ごめん、ソコ見てなかった。ところで、mainは0で終了だけど他の関数はTRUEが終了なのはなんで?(って初心的な質問ごめん。雑談程度によろしくお願いします
1000は誰が取るんだ?
俺じゃないな。
うんこ
ちんこ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。