C/C++の宿題ならおいどんに任せろ 16代目

このエントリーをはてなブックマークに追加
918デフォルトの名無しさん
161辺りでデータをファイルから読み込んで個数を表示させるプログラムは
どのようにしたらいいのでしょうか?
ファイルを仮にout.txtとした場合をお願いします。
データは0から10000まで数字が並んでいてある数字は複数個あります。

0 1 1 1 2 3 4 4 5 6 7 8 9 10 11
>>918
#include <map>
#include <iostream>
#include <fstream>
main()
{
 map<int, int> imap;
 ifstream ifs("out.txt");
 for(int i=0;i<10000;i++)
 {
  int d;
  ifs >> d;
  ++imap[d]; 
 }
 for(map<int, int>::iterator it=imap.begin(); it!=imap.end(); ++it)
  cout << it->first << ":" << it->second << "個" << endl;
}
920918:03/12/03 22:50
918です。
919さんありがとう。
でも、エラーがでてしまいます・・・。
結果をファイル(out2.txt)に出力する部分もお願いします。
>>920
main()の前の行に
using namespace std;

結果をファイルに出力したければ
command > out2.txt
みたいにリダイレクト使って下さい
922918:03/12/03 22:57
エラーがまだ出ています。
無知ですいません。
とりあえず>>1を嫁。
なんであちこちでこの問題解いているんだ?
925918:03/12/03 23:06
短時間で解決したいんです。
どうかよろしく。
926デフォルトの名無しさん:03/12/03 23:07
ガウス法のプログラムを作成しなければならないのですが

#include <stdio.h>
#define n3 /* 連立一次 n 元方程式 */

main()
{
int i,j,k;
double a[n] [n+1]={ {3,2,1,10},{2,5,2,18},{1,4,1,12} };
double d;

この先をどなたかやってくれませんでしょうか?変数は何でもかまいません
}
>>922
無知ですまないと思っているのかw
>>926
ガウスって数学のありとあらゆる分野に顔出してる人だから、
ガウス法とか言われてもどのガウス法?って感じになるんだが。

ガウスの掃きだし法で連立1次方程式を解きたいってこと?
930デフォルトの名無しさん:03/12/03 23:14
>>929
はき出し方でした。
931918:03/12/03 23:16
すまないと思ってます。
ところで、
++imap[d];
が認識できないということが納得できません。
>>931
おやすみ。
933931:03/12/03 23:20
>>932
えー
>>933
おやすみ

認識できないという事が納得できない理由を言わないとモウここの住人は反応してくんねーぞ
935933:03/12/03 23:25
宣言していないくらいしか思いつかない。
中身が密なら、map使う必要は無いと思うが。
937918:03/12/03 23:35
0から10000まできちんと並んでいます。
抜けている数はありません。
938918:03/12/03 23:36
0から10000まできちんと並んでいます。
抜けている数はありません。
がんばってくださいね♪
940918:03/12/03 23:37
ダブりました。
ごめんなさい。
しょうがない
俺がやってやるか

その前に寝ていいか?
OKだよん>>941
#define MAX_VAL 10000
main()
{
int imap[MAX_VAL+1];
std::fill_n(imap, MAX_VAL+1,0);
 std::ifstream ifs("out.txt");
 while( ifs ) {
  int d;  ifs >> d;
  ++imap[d]; 
 }
 for(int i=0; i<=MAX; i++)
printf("%d : %d 個\n", i, imap[i] );
}
>>926
int main()
{
int i,j,k;
double a[n] [n+1]={ {3,2,1,10},{2,5,2,18},{1,4,1,12} };
double d;

debugOut(a);

for(i=0; i<n; ++i)
{
for(k=n; k>=0; --k)
a[i][k] /= a[i][i];

for(j=0; j<n; ++j)
if(j != i)
for(k=n; k>=0; --k)
a[j][k] -= a[j][i] * a[i][k];
debugOut(a);
}

for(int j=0; j<n; ++j)
printf("%f\n", a[j][n]);

return 0;
}
945944:03/12/03 23:59
ちなみに、debugOut はチェック用に配列の中身を表示する関数。

void debugOut(double a[][n+1])
{
for(int i=0; i<n; ++i)
{
for(int j=0; j<=n; ++j)
{
printf("%f, ", a[i][j]);
}
printf("\n");
}
printf("\n");
}
#include <set>
#include <fstream>
#include <iterator>

using namespace std;

int main(void) {
ifstream fin("out.txt");
multiset<int> iset (
(istream_iterator<int>(fin)),
(istream_iterator<int>())
);
ofstream fout("out2.txt");
for(int i=0;i<=10000;++i)
fout<< i << ',' << iset.count(i) << '\n';
return 0;
}

無駄に汎用性があるがこれくらい簡潔で構わないだろう。
これだけ解答出してもらってるんだから早く帰ってくれ。
947926:03/12/04 00:15
944さん親切にありがとうございました!
948デフォルトの名無しさん:03/12/04 00:19
>>946
C++で確認してから載せていらっしゃいますか?
エラーが出ます。
>>948
まともなコンパイラを使用してください
>>946
エラーの内容とコンパイラを書いてくれ。
エラーが出るとしたらたぶん
multiset<int> iset (
(istream_iterator<int>(fin)),
(istream_iterator<int>())
);
この宣言の仕方が受け入れられていないんだろう。
multiset<int> iset (
(istream_iterator<int>(fin)),
istream_iterator<int>()
);
たとえばこんな風にしてみたらどうだ?
951デフォルトの名無しさん:03/12/04 00:27
>>946
9:error C2061: 構文エラー : 識別子 'fin' がシンタックスエラーを起こしました。
9:error C2066: 関数型へのキャストは不正です。
9:error C2059: 構文エラー : ','
13:error C2065: 'iset' : 定義されていない識別子です。
13:error C2228: '.count' : 左側がクラス、構造体、共用体ではありません。
エラー 5、警告 0
>>951
istream_iterator<int> begin(fin);
istream_iterator<int> end;
multiset<int> iset(begin,end);
これがはねられるようなら
コンパイラ(名前書けといってるのがわからんのか)を変えた方がいい
953デフォルトの名無しさん:03/12/04 00:36
Visual C++ 6.0を使ってます。
コンパイラの種類といわれてもよくわかりません。
できれば最初から書いてください。
謎。
955デフォルトの名無しさん:03/12/04 00:38
953=948
956デフォルトの名無しさん:03/12/04 00:38
>>946
g++3.3.2

12: error: 構文解析エラー before `)' token
844 名前:デフォルトの名無しさん[sage] 投稿日:03/12/03 10:07
まず、複数科目に対応できるようにする。このため点数を格納する配列を2 次元配列にする。この2 次元配列は、main 関数で以下のように定義される。
int score_db[DATA_MAX][SUBJECT_MAX];
DATA_MAX はマクロで、扱える最大の生徒数を表し、SUBJECT_MAX は、扱える最大の科目数
を表す。これらの数は十分に余裕を持って取っておけばよい。この変更により、add 関数は6 引
数関数となる。
void add(char name_db[][], int score_db[][], char name[], int score[], int subject_num, int index);
ただし、name_db は名前を格納する配列、score_db は点数を格納する配列、name は名前、score
はname に対応する学生の各科目の得点の配列、subject_num は科目数、index はname とscore を
加すべき場所(添字)である。
 指定した学生の科目の平均点を求めるpersonal_average 関数と、指定した科目の平均点を求め
るsubject_average 関数を作成せよ。それぞれ3 引数関数で、学生や科目の指定には配列の添字を
使うものとする。さらに、名前の配列から指定された名前の検索を行って、対応する添字を返す
search 関数を作成せよ。名前が見つからない場合には-1 を返すこと。

おしえて
とゆーか。回答者の方・・・ムキにならんよーに。
質問者の態度からするに、最後は「こんなことも初めから答えられないの?」とか言い出しそうよ・・・。
そろそろ放置でよろしく。
959デフォルトの名無しさん:03/12/04 00:40
>>958
意味不明
960デフォルトの名無しさん:03/12/04 00:41
>>950の下
g++3.3.2

それだとOK
STLはねぇ(;_;)
とゆーか、コンパイラごとのC++標準への追従度がまちまちだからねぇ(;_;)
>>959
おまえか?キチガイは(w
キチガイの書く文は匂いでわかちゃうんだよ
>>956
MinGWのgcc3.3.2なら>>950の書き方で問題なかったぞ
964843:03/12/04 00:47
>>843の問題、だれかお願いではないでしょうか・・・。ヒントきいてもわからないです。
965デフォルトの名無しさん:03/12/04 00:49
>>963
レス先をよく読みましょう。
966デフォルトの名無しさん:03/12/04 00:49
なんで多次元配列がいるの?
一番目と二番目と合計だけもってればでるんじゃない?
>>964がわからない物をうちらがわかるわけない

とりあえずわかってるんだけど実装ができない程度ならいいんだが・・・それなりの説明をよろしく
こちらからも質問。>>964
多次元配列ってなんですか?
(動的に確保することは今はおいといて)
double a[10][20][30];
[]がいくつもあるってことを指しているのかしら?
それとも
double a[1000];
っていうふうにたくさん要素をもつってことかしら?

エスパーさんの降臨求む。
>>964
入力は手打ち?
ファイルからもってくんの?
多次元配列については、2次元以上の配列って事じゃない?

多角形は3角形からだったっけ?
ある物質を構成する成分の数 n,及び,各成分の質量(実数値)を入力した後,
1 番目,及び,2 番目の成分の全体に対する割合(%で小数点以下も表示)を出力するプログラムを書いてください。

をもう少しわかりやすくおねがい
全体の成分に対する割合を1番目と2番目について出力して

って解釈でOK?
そろそろ、新スレ、ぷりーづ。

>>670多分>>968>>964の言いたいことを確認しているのだと。
もちろん、あなたのいうように、多次元配列っていう言葉は2次元以上の配列に用いる。
974デフォルトの名無しさん:03/12/04 00:56
>>972
だと思うけど、多次元配列をどう使えばいいのかサパーリわからん
>>974は843とは別だよね?

843だったら名前の欄入れてくれないと困る
976デフォルトの名無しさん:03/12/04 00:58
単にdoubleの配列を動的に確保するだけで解けると思うんだけどな。
977デフォルトの名無しさん:03/12/04 00:58
>>975
違う。なんでそう思うのか・・・
同意>>976
struct KOUZOU{
int kazu;
double *seibun;
}
あたりで良いんじゃないのかな

kazu に seibun の数を入れる
やっぱり>>968の睨んでいるとおり、質問者が多次元配列というものを勘違いしているのかも。

int main()
{
int i;
int size;
double* element;
double sum = 0.0;
scanf("%d".&(size));
element = (double*)malloc( sizeof(double) * size );
for(i=0;i<size;++i) {
scanf("%lf",element+size);
sum += element[size];
}
printf("%f %f",elemen[0],element[1]);
}

テストしてないがこんなコードだよな。
どこに多次元配列が出るんだ?
>scanf("%lf",element+size);
じゃなくて
scanf("%lf",element+i);
な。
いろいろ危ない
質問者が回答者を混乱させる作戦だと解析
>>981
エラーチェックしていないのはいいとして、それじゃ百分率が出ないだろ。
それとelement+sizeじゃなくてelement+i element[size]じゃなくてelement[i]
まー。なんかねー。流れからしてそう思っちゃうねぇ・・・>>983
986デフォルトの名無しさん:03/12/04 01:09
943の評価を誰か頼む
>>986
>>943
礼儀ただしく参照しましょう
printf("%f%% %f%%\n",sum/element[0]*100.0,sum/element[1]*100.0);
989988:03/12/04 01:11
じゃなくて
printf("%f%% %f%%\n",element[0]/sum*100.0,element[1]/sum*100.0);
990デフォルトの名無しさん:03/12/04 01:15
986だが943をC++でやると???である。
入力はどうしたらいいの?
出力の仕方は?
マジレスたのむ

 A
|
+---+
| |
B C

というクラス関係があって、Aは抽象クラス、B,Cはサブクラス
だとします。インスタンス化する際に、Bの属性を継承させた
Cのインスタンスが必要になる場合があるとしたら、どうしたら
よいでしょうか
すみません。図が変になってしまいました。

A ---+---C
|
+--- B
あぁもう逝きたい
図は無視してください
994デフォルトの名無しさん:03/12/04 01:21
次のスレはできたの?
多重継承 >>991
>>993
行頭のスペースはカットされるのだよ。
997デフォルトの名無しさん:03/12/04 01:23
記念カキコ v(^-^=)
 A ---+---C
  .   |
     +--- B
999デフォルトの名無しさん:03/12/04 01:27
1000デフォルトの名無しさん:03/12/04 01:28
1000ゲットするぞ。と。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。