C/C++の宿題をやって。おながい。14代目

このエントリーをはてなブックマークに追加
>>948
なるほど・・・・・考えてみます。39でした。
>>951
漏れのじゃないだろ(`д´#)
>>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>と入れてください
963944:03/11/16 01:32
>>945
すみません。問題だけそのままコピペしてしまったので。変えておくべきでした・・・。

>>950,>>958,>>960
どうも、ありがとうございます。
>>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 って使えるのね…知らなかった
>>964っす。
最後の1行は>>960さんあてでした
>>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をヨメ!!
>【注意点】
>・問題はしっかり分かりやすく書きましょう。
> 全文を書いてしまうか、分かりやすくまとめましょう。
>>970
ということは悪房?(;゚ρ゚)
次スレ立ててきます
>>972
ヨロしこおねがいします
>>968
まるまる説明するのは骨が折れるから、
一度この辺りで基礎を身に付けよう。
http://homepage1.nifty.com/toshio-k/prog/c/
#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が何個も出力されるんです。。。
どこがいけないでしょうか?
>>977
おつかれさまぁ

>>976を討論してコノスレを埋めよう
>>976のgyaku()を reverse() にするとかっこええかも
>>976
あのさぁ、、、、、どこでgyaku()を呼んでいるのよ!?
gyakuって何処でよばれてるの?
>>980
重複スマソ
あのすいません、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];
}
>>984
毎回重複スマソ
こんな感じかな

/* 要素数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関数を作るのは初めてで、作った関数をどう呼べばいいのかわからないです。
教えて頂けないでしょうか?
>>985
読んでいただけましたか?

#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];
}
ソースから嫁
>>992
正常終了なら0を返そうよ。。。
995デフォルトの名無しさん:03/11/16 12:11
記念カキコ v(^-^*)
>>994
ごめん、ソコ見てなかった。ところで、mainは0で終了だけど他の関数はTRUEが終了なのはなんで?(って初心的な質問ごめん。雑談程度によろしくお願いします
1000は誰が取るんだ?
俺じゃないな。
うんこ
ちんこ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。