5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ぼるじょあがC/C++の宿題を片づけますYO! 42代目

1 :ぼるじょあ代理:2005/04/18(月) 17:00:13
(・3・)アルェー 一回おきに登場することにしたC++房のぼるじょあですYO!
わからない宿題を片づけますYO!

――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【歴代スレは>>2-13

2 :デフォルトの名無しさん:2005/04/18(月) 17:47:38
>>1
一回おきじゃねぇじゃん。

3 :デフォルトの名無しさん:2005/04/18(月) 18:30:24
どなたかご指南お願い致します。
[1] 授業単元: ソフトウェア製作実習T
[2] 問題文(含コード&リンク): X,Y,Zに整数を入れ、Xに小さな値、Yに中間の値、Zに大きな値を
格納するプログラムを作成する。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ(バージョン):CPad for LSI C-86
 [3.3] 言語:C
[4] 期限:2005年4月19日まで
ちなみに、基礎的な↓の部分までしかわかりませんでした。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=313

4 :デフォルトの名無しさん:2005/04/18(月) 18:53:15
>>1
氏ねよ

5 :ぼるじょあ ◆yBEncckFOU :2005/04/18(月) 18:53:49
41代目: http://pc8.2ch.net/test/read.cgi/tech/1109542053/
40代目: http://pc5.2ch.net/test/read.cgi/tech/1107625122/
39代目: http://pc5.2ch.net/test/read.cgi/tech/1106650397/
38代目: http://pc5.2ch.net/test/read.cgi/tech/1105541524/
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/

6 :ぼるじょあ ◆yBEncckFOU :2005/04/18(月) 18:54:30
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html

7 :ぼるじょあ ◆yBEncckFOU :2005/04/18(月) 18:56:21
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
1代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
ぼるじょあ◆yBEncckFOU は共同体で連続体で群生体だから無限の知識と
無尽蔵の体力を持ってるんだYO!
24時間365日、いつでも質問かかって来いYO!
(・3・) アルェー こっちが嫌になるほど質問しろYO!
ぼるじょあ◆yBEncckFOU はコテハンじゃないYO!
名前欄に「ぼるじょあ#ぶるじょあ」でキミも今日から「ぼるじょあ◆yBEncckFOU」だYO!

8 :デフォルトの名無しさん:2005/04/18(月) 18:57:18
>>7
まともなレスつけないぼるじょあなんて必要とされていません。

9 :デフォルトの名無しさん:2005/04/18(月) 19:03:32
>>3
はいyp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=313
にレスしといた。かなりやっつけ

10 :3:2005/04/18(月) 19:08:31
>>9さん

素早い回答、ありがとうございました。
if文で作るとこまではわかったんですが、中身がどうしたら良いかわからなくて…。

本当に助かりました。
どうもありがとうございました。


11 :デフォルトの名無しさん:2005/04/18(月) 22:10:48
[1] 授業単元:C言語演習
[2] 問題文:
適当な文字列が10行書き込んであるsample.txtがある。
文字列1
文字列2

文字列10
問1:適当な構造体を作成し、sample.txtを開き、データ郡を格納し、DOS窓に
構造体のデータとして
01 文字列1
02 文字列2

10 文字列10  と表示せよ
問2:DOS窓でiを入力したら「何行目に文字列を挿入しますか?」と表示し、
適当な行を数値入力後、文字列を挿入する。
問3:文字列挿入後、sample.txtを上書きする。
問4:DOS窓でqを入力すると終了する。
[3] 環境
 [3.1] OS:win xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年04月20日
[5] その他の制限:

12 :前スレ975:2005/04/18(月) 23:28:34
前スレ976さん、978さん、979さん助言ありがとうございました。

とりあえず、形にしたつもりですがファイルへの出力で
ソートした最後の値だけがファイルに保存されてしまいます。

1.0 2.0 3.0 4.0 ・・・ 10.0

というふうにソートした場合、

10.0だけでなく、

1.0 2.0 3.0 4.0 ・・・ 10.0

という風にファイルに保存したいのですが、どのように変えれば出来るでしょうか?

度々申し訳ありませんがアドバイスお願いいたします。

13 :12:2005/04/18(月) 23:41:10
もうしわけないです。
ファイルはこちらにアップさせていただきました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/315.txt


14 :デフォルトの名無しさん:2005/04/18(月) 23:51:56
>>13
ソースを見せてもらったが、表示と同時に保存している。
完全にロジックがおかしいから、表示が終わってから、改めてfopen()して
書き込むが良い。fopen()は"w"で開く度に、前の同名ファイルが存在しても
削除して上書きしてしまう。

15 :デフォルトの名無しさん:2005/04/19(火) 00:11:15
>>1-14




















氏ね

16 :デフォルトの名無しさん:2005/04/19(火) 00:13:38
>>14

おおおお!出来ました!

皆さんどうもありがとうございました!

17 :デフォルトの名無しさん:2005/04/19(火) 00:23:30
>>13
fopen()の引数を "w" から "a" に変えるとかね。

でも、前スレ見てないから>>13が、どんな奴かは知らんが
ソースを見た感じファイル操作なんて早すぎる。
配列は正しく初期化されてるかな?
N個の要素を持つ配列を宣言しておいて、N-1個しか使っていないよ。
それでいてソート処理ではN個全てを対象としている。

それらが、ある程度動くようになってからファイルに出力しようよ。
せっかく配列に保持してるんだから、表示と保存処理は別にした方が良い。
ファイルに出力できれば、それで良いって考えは良くないよ。
ソフトウェア開発の仕事をすると、涙を呑んでそんなことをすることもあるが・・・

18 :デフォルトの名無しさん:2005/04/19(火) 02:11:08
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):0以上1以下の実数pをキーボードから入力し、ランダムにN人を集め、
誕生日別に分類したとき、生まれた人が一人もいないような日が存在しない確率を考える。
このような確率がp以上であるようなNの最小値を出力するプログラムをお願いします。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C

19 :デフォルトの名無しさん:2005/04/19(火) 02:23:50
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):n個の文字列をキーボードから入力し、昇順
に並び替えて出力するプログラムを作成しなさい。ただし、文字列の文字数は
30文字以下とし、n<=50とする。
[3] 環境
 [3.1] OS: UNIX/Solaris 
[3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年4月21日まで
お願いします。

20 :cen ◆Pm9xOTJuM. :2005/04/19(火) 02:44:02 ?#
>>18
こんな感じ?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int i,N,min=365;
double p,tmp;
srand((unsigned)time(NULL));
printf("Please input p\n");
scanf("%lf",&p);
i=0;
while(i<10000){
N=rand()%365+1;
tmp=1-(double)N/365;
if(tmp<p && N<min){min=N;}
i++;
}
printf("%d\n",min);
return 0;
}


21 :デフォルトの名無しさん:2005/04/19(火) 02:47:39
>>18
誕生日というものが1年のうちの各日に均等に生じるという保証がないので、
この問題は回答不可能じゃないかな。
例えば2/29日生まれってのをどうするとか、盆と正月の9ヶ月後の誕生日が多いとか。


22 :デフォルトの名無しさん:2005/04/19(火) 03:19:04
つか、
このスレも昔みたいにテンプレ無くせよ

23 :デフォルトの名無しさん:2005/04/19(火) 04:47:28
>>22
テンプレ無くすと無駄なやり取りが増えるだけで、スレの無駄。

24 :デフォルトの名無しさん:2005/04/19(火) 06:46:02
>>22-23
おまいら寝とけ

25 :デフォルトの名無しさん:2005/04/19(火) 07:29:24
>>23
昔はなかったぞ。

誰だよ、このスレにテンプレつけた奴は?

26 :デフォルトの名無しさん:2005/04/19(火) 09:28:42
過去ログほとんど持ってないがテンプレ付いたのは31以降40以前

・Cでお願いします(文中にない場合もある)と言ってるのに C++の"//"のコメント使うのをはじめ
 C,C++の記述が混合してたり
・期限が●日だったのにとあとから追加してくるので期限がわからず過ぎてから解答だしたり
・授業単元の趣旨と外れた解答をして「これじゃダメです」ってレス付いたり
・解答もらったけどこっちではコンパイル通りませんとか
いろいろあったから初めの出題の段階でできる限りの情報を引き出すためのテンプレかと

>・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
>・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。

テンプレをなくした時のメリットって何ですか?
教えていただけると今後の参考になりますのでお願いします。

27 :デフォルトの名無しさん:2005/04/19(火) 09:30:37
初心者すぎますが、C++ってなんて読むんですか
シープラスプラス??激しくアレな人教えてください

28 :デフォルトの名無しさん:2005/04/19(火) 09:37:26
>>27
マルチ氏ね

29 :デフォルトの名無しさん:2005/04/19(火) 09:40:28
>>28
はじめからこっちで聞くべきでしたねってあっちに
付け加えてんだろうがなんでもかんでも一緒にする房うざすぎ お前がまず氏ね

30 :デフォルトの名無しさん:2005/04/19(火) 09:47:15
>>28
マルチの意味わかってんのかね このクソガキは
ビビってひっこんでんじゃねーぞこら でてこいやキチガイ

31 :デフォルトの名無しさん:2005/04/19(火) 09:58:40
もういいや
>>28は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定
2chやりすぎて脳腐ってんじゃないの?w 氏ね

32 :デフォルトの名無しさん:2005/04/19(火) 10:04:00
29 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:40:28
>>28
はじめからこっちで聞くべきでしたねってあっちに
付け加えてんだろうがなんでもかんでも一緒にする房うざすぎ お前がまず氏ね

30 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:47:15
>>28
マルチの意味わかってんのかね このクソガキは
ビビってひっこんでんじゃねーぞこら でてこいやキチガイ

31 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:58:40
もういいや
>>28は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定
2chやりすぎて脳腐ってんじゃないの?w 氏ね

190 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:42:40
>>189
どこがマルチなんだ?wキチガイか 氏ね房うざすぎ おまえが氏ね

191 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/19(火) 09:57:38
もういいや
>>189は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定

33 :デフォルトの名無しさん:2005/04/19(火) 10:07:29
>>30
マルチの意味を教えてくれないかwwww

34 :デフォルトの名無しさん:2005/04/19(火) 10:08:49
>>28
ttp://www.angelfire.com/art2/blazer/hm.html
しっかり読め


35 :デフォルトの名無しさん:2005/04/19(火) 10:15:12
>>27はもう遁走か?
口と逃げ足だけは一人前だなw

36 :デフォルトの名無しさん:2005/04/19(火) 10:16:00
>>35
バカすぎ乙w

37 :デフォルトの名無しさん:2005/04/19(火) 10:24:31
>>35
釣られてんじゃねーよwwwっぅうえwwww


38 :デフォルトの名無しさん:2005/04/19(火) 13:29:44
>>19
#include <stdio.h>
main(){
char cStrings[50][30];
char cWork[30];
int num,i,j;

memset(cStrings,0,sizeof(cStrings));
printf("文字列を入力して下さい。[Enterのみで終了]\n");
for(num=0;num<50;num++){
if (fgets(cStrings[num],30,stdin) == NULL) break;
if (cStrings[num][0] == '\n') break;
}
for(i=0;i<num-1;i++){
for(j=i+1;j<num;j++){
if (strcmp(cStrings[i],cStrings[j]) > 0){
memcpy(cWork,cStrings[i],sizeof(cWork));
memcpy(cStrings[i],cStrings[j],sizeof(cWork));
memcpy(cStrings[j],cWork,sizeof(cWork));
}
}
}
printf("ソート結果\n");
for(i=0;i<num;i++) printf("%s",cStrings[i]);
}

39 :デフォルトの名無しさん:2005/04/19(火) 15:23:13
[1] 授業単元:情報処理T
[2] 問題文(含コード&リンク):x^3+x-2=0の解を[0,3]区間で求めよ。ただし
ε=0.0001の場合とε=0.1の場合を求め結果を考察せよ(二分法)
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C++
[4] 期限:
[5] その他の制限: ソースプログラムε=0.1の時
          結果ファイル2個(x=1,-2 ?)

40 :デフォルトの名無しさん:2005/04/19(火) 16:33:50
>>38さん
実行できました。助かりました。ありがとうございました。

41 :デフォルトの名無しさん:2005/04/19(火) 18:04:55
>>39
εってなんですか。大体解かるが、変数には説明が必要。

42 :デフォルトの名無しさん:2005/04/19(火) 18:07:18
使ってるコンパイラが?ってどういうことだよ

43 :39:2005/04/19(火) 18:09:43
>>41
すいません
イプシロンです。
EPSでお願いいたします。

44 :39:2005/04/19(火) 18:12:41
>>42
ほんとごめんなさい
Microsoft Visual C++ 6.0
です。

45 :デフォルトの名無しさん:2005/04/19(火) 18:13:52
>>43
そんなこと聞いていないが…
質問者いじめはもうやめよう…

46 :Addicted to C++ ◆nrBjarne.g :2005/04/19(火) 19:36:27
>>25
私です。
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/330

47 :デフォルトの名無しさん:2005/04/19(火) 19:44:19
前スレから。
http://pc8.2ch.net/test/read.cgi/tech/1109542053/955

だいたい出来て、やっとエラーがほぼ無くなりました。
size_typeに関するもの以外は。

template<typename Element> reference Vec<Element>::front()
のように、referenceなどのものに関するエラーは出ないんだけど、
template<typename Element> size_type Vec<Element>::max_size(void) const
とかになると、エラーが出ます。
size_typeをsize_tと書き換えると、エラーがなくなります。
これって、コンパイラーかなんかのせい?
ちなみに、visual studioβ版使ってます。

コードは、これ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/319.txt

48 :デフォルトの名無しさん:2005/04/19(火) 21:03:51
>>39
#include <stdio.h>
#include <math.h>
float func (float x) { return x*x*x+x-2.0; }
float bisec (float (*f)(float), float l, float r, float e) {
float m = (l+r)*0.5, fm = (*f) (m);
if (fabs (r-l) < e || fm == 0) return m;
else if ((*f) (l) * fm < 0) return bisec (f, l, m, e);
else return bisec (f, m, r, e);
}

int main () {
printf ("ε=0.0001: %f\nε=0.1: %f\n",
bisec (func, 0.0, 3.0, 0.0001),
bisec (func, 0.0, 3.0, 0.1));

return 0;
}


49 :デフォルトの名無しさん:2005/04/19(火) 21:30:27
思うんだけど、テンプレの環境の項目は要らないんじゃない?環境依存は禁止でしょ?

50 :デフォルトの名無しさん:2005/04/19(火) 21:38:11
>>49
精神科病院にでも行ってきたら?

51 :デフォルトの名無しさん:2005/04/19(火) 21:45:49
>>50
その必要もない。

52 :デフォルトの名無しさん:2005/04/19(火) 21:47:54
メ几
木又

53 :デフォルトの名無しさん:2005/04/19(火) 22:04:19
too haw sim *

54 :デフォルトの名無しさん:2005/04/19(火) 22:47:39
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
***********
*********
*******
*****
***
*
上から左右2個ずつ*が減る逆三角形を作りたいのですが、for文の条件がわかりません。
*を増やすのを2個ずつ減らせばいいのは分かるのですが、m=m+2にすると、
平行四辺形になります。どうかヒントだけでもいただけないでしょうか
#include <stdio.h>
void main(void){
int k,l,m;
for(k=1;k<=6;k++){
for(l=1;l<=k;l++){
printf(" ");
}
for(m=1;m<12;m=m+2){
printf("*");
}
printf("\n");
}
}

[3] 環境
 [3.1] OS:win2000
 [3.2] コンパイラ(バージョン):わかりませんがMicrosoftVisualC++使ってます
 [3.3] 言語:どちらでも可
[4] 期限:特になし


55 :54:2005/04/19(火) 22:51:40
左側の空白が消えてしまいました。本当はVの形になります。

56 :cen ◆Pm9xOTJuM. :2005/04/19(火) 23:01:00 ?#
>>54
こんな感じ?
#include <stdio.h>
void main(void){
int k,l,m;
m=0;
for(k=0;k<6;k++){
for(l=0;l<m;l++){
printf(" ");
}
printf("*");
for(l=0;l<20-m*2;l++){
printf("*");
}
printf("\n");
m=m+2;
}
return 0;
}


57 :54:2005/04/19(火) 23:02:45
こちらのスレの方が適切といわれてこちらに書き込みましたが、元のスレで答えていただきました。
マルチっぽくなってしまってすみませんでした。

58 :デフォルトの名無しさん:2005/04/19(火) 23:06:10
#include <stdio.h>

#define N 11

int main()
{
  int n, i, offset = 0;
  for( n = N; n > 0; n -= 2, offset++ ){
    for( i = 0; i < offset; i++ ) putchar(' ');
    for( i = 0; i < n; i++ ) putchar('*');
    putchar('\n');
  }
  return 0;
}


59 :デフォルトの名無しさん:2005/04/19(火) 23:56:33
>>49
template習ったから、使わせたいんだと思う。

60 :47:2005/04/20(水) 00:00:31
というか、この課題ってそんなに難しいものなの?
自称C++のexpertと名乗ってる人達が、自分が想像してた以上にでかい課題だとか言って、
みんな。ひいていくんだけど・・・。
締め切りまで、もう少しだから、馬鹿なりに頑張ってみる。

61 :デフォルトの名無しさん:2005/04/20(水) 00:05:12
単に面倒くさいだけなんじゃ…

62 :47:2005/04/20(水) 00:08:14
いや、面倒くさいのは、今までにあって対応してくれたから、そうでもないと思う。

63 :47:2005/04/20(水) 00:12:07
というか、C++のコード直しを商売にしてる専門のところの人だから・・・。

64 :47:2005/04/20(水) 00:18:55
vusual studio 2003で出来ることって、visual studio 2005β版で出来ますよね?
コンパイラーとかのせいでは、ないんですよね?

65 :デフォルトの名無しさん:2005/04/20(水) 00:27:31
連続投稿なんてうざい事やってるから見放されるんだろうな

66 :デフォルトの名無しさん:2005/04/20(水) 01:01:24
質問です。
Solaris環境でC++を使っています。
C++で、Unixシステムコマンドを呼び出す方法を教えてください。
%hostname というコマンドを使いたいのです。

よろしくご教授願いします。

67 :デフォルトの名無しさん:2005/04/20(水) 01:02:36
system("hostname")

68 :デフォルトの名無しさん:2005/04/20(水) 01:02:59
>>47
referenceはエラーでないの?出そうな気がするけど。
とりあえずsize_typeに関しては
template<typename Element>
typename Vec<Element>::size_type Vec<Element>::max_size() const
にすれば大丈夫だと思う。

69 :デフォルトの名無しさん:2005/04/20(水) 04:47:40
z:\project\se.cpp(368): fatal error C1075: end of file found before the left brace '{' at 'z:\project\se.cpp(28)' was matched
これどうすれば??

70 :デフォルトの名無しさん:2005/04/20(水) 12:14:07
すみません。お助けください。
以下のコードはEUCをUNIコード変換する関数なのですが
逆にUNIコードをEUCに変換するように改造するには
どこを触ればいいのでしょうか?基本的にマイナスプラスの世界に
なるかと思われますが、よろしくお願いします。
EXPORT BOOL __stdcall ChengeEucToUni(char *File_in){
unsigned char*str_in,*str_out,*p;//文字列変換入出力
unsigned charstr_in_work[MAX_PATH];//入力ワーク
unsigned charstr_out_work[MAX_PATH];//出力ワーク
unsigned intHighAsc;//上位コード
unsigned intLowAsc;//下位コード
inti,strLen;//処理カウント/文字列長
chartmpfile[255];//テンポラリファイル名
ifstreamfiled;//出力ストリーム宣言
ofstreamfout;//入力ストリーム宣言
//変数の初期化
memset( str_out_work,'\0',MAX_PATH);
memset( str_in_work,'\0',MAX_PATH);
str_out= &str_out_work[0];
str_in= &str_in_work[0];
//変換後テンポラリファイル名作成
memset( tmpfile,'\0',MAX_PATH);
strcpy(tmpfile,File_in);
strcat(tmpfile,"tmp");
//変換元のファイルを開く
filed.open(File_in);
if(filed.fail()){
AfxMessageBox("変換元ファイル読込失敗");
return FALSE;
}

71 :デフォルトの名無しさん:2005/04/20(水) 12:15:39
//変換後の書込みファイルを開く
fout.open(tmpfile);
if(fout.fail()){
AfxMessageBox("変換先ファイル読込失敗");
return FALSE;
}
int fi = 0;
//変換元ファイルの終端までループする
while(!filed.eof()){
//変換元文字列の取得
filed.getline(str_in,MAX_PATH);
/* 文字バイト数取得 */
strLen=strlen((const char *) str_in);
/* 先頭位置コピー */
p = str_out;
for(i=0;i<strLen;i++){
/* 上位・下位コード取得 */
HighAsc = *(str_in+i);
LowAsc = *(str_in+(i+1));
/* 2バイト文字である */
if(HighAsc > 0x7F){
if(HighAsc == 0x8E){
/* 半角カタカナである */
*str_out = LowAsc;
/* 1文字分進める */
str_out++;
}

72 :デフォルトの名無しさん:2005/04/20(水) 12:17:16
else{
/* 1バイト目変換 */
/* 偶数である */
if((HighAsc % 2) == 0){
if(HighAsc < 0xDF)
*str_out = (unsigned char)(0.5 * HighAsc + 48);
else if(0xE0 <= HighAsc && HighAsc <= 0xFE)
*str_out = unsigned char(0.5 * HighAsc + 112);
}
/* 奇数である */
else{
if(HighAsc < 0xDF){
*str_out = unsigned char(0.5 * HighAsc + 48.5);
else if(0xDF <= HighAsc && HighAsc <= 0xFD)
*str_out = unsigned char(0.5 * HighAsc + 112.5);
}
/* 2バイト目変換 */
/* 1バイト目が偶数である*/
if((HighAsc % 2) == 0)
*(str_out+1) = LowAsc - 0x2;
/* 1バイト目が奇数である */
else{
*(str_out+1) = LowAsc - 0x61;
if(*(str_out+1) > 0x7E)
*(str_out+1) = *(str_out+1) +1;
}
str_out+=2;

73 :デフォルトの名無しさん:2005/04/20(水) 12:18:08
}
/* 1バイト分すすめる */
i++;
}
/* 1バイト文字である */
else{
*str_out = HighAsc;
str_out = str_out + 1;
}
}

*str_out = '\0';

/* 先頭位置に戻す */
str_out = p;
//ファイルに変換データを出力
fout << str_out << endl;
//fout.write(str_out,strLen);//改行失敗の為、上記コードに変更
fi++;
}

filed.close();//変換元ファイルのクローズ
fout.close();//変換ファイルのクローズ
DeleteFile(File_in);//変換元ファイルの削除
MoveFile(tmpfile,File_in);//変換ファイルを変換元ファイル名にリネーム

return TRUE;

}//長文すみません

74 :デフォルトの名無しさん:2005/04/20(水) 12:35:41
氏ねそしておっ割れえれえええうえぇうぇええうぇうえうええぅえぅぅえぇえwwwwwwwwwwwww

75 :デフォルトの名無しさん:2005/04/20(水) 12:55:01
しつこくてごめんなさい。
もうお手上げ状態です。
まじで、助けてください。
これ、本当に必要なんです。

typedef 取りました。
簡単になったと思います。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/320.txt

76 :デフォルトの名無しさん:2005/04/20(水) 13:29:26
>>75
えーと、取り敢えず今までの経過をまとめてくれない?
もう、何がなんだか。

77 :デフォルトの名無しさん:2005/04/20(水) 13:30:32
[1] 授業単元:C言語
[2] 問題文:
問題1:
サイコロを1000回振る。1の目がでた回数を整数型変数oneに憶えさせ、2の目が出た回数を変数twoに憶えさせ、….、6の目が出た回数を変数sixに憶えさせる。サイコロを振り終わってから、どの目が何回でたかを画面に書かせる。
(中級者は、整数型配列 kaisu[6]を宣言し、1の目の出た回数をkaisu[1]に、2の目の出た回数をkaisu[2]に憶えさせる,……のようにすること。
問題2:
問題1で、サイコロを100回振る。どの目が何回でたかを、星の数で表現するようにせよ。
[3] 環境
 [3.1] OS: winxp
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C言語
[4] 期限:今日の20時
お願いします。

78 :デフォルトの名無しさん:2005/04/20(水) 13:42:01
>>77
>(中級者は、整数型配列 kaisu[6]を宣言し、1の目の出た回数をkaisu[1]に、2の目の出た回数をkaisu[2]に憶えさせる,……のようにすること。
有り得ない。

79 :デフォルトの名無しさん:2005/04/20(水) 13:48:33
>>76

stlにあるvector.hを書き換えるという課題です。
簡単なのは、これです。
http://www5c.biglobe.ne.jp/~ecb/cpp/07_20.html

member function等の英語版の詳しい説明だと、これです。
http://developers.sun.com/tools/cc/documentation/ss8_docs/man3c++/vector.3.html
ただし、Iterator等は今回ないです。
だいたいは、自分で書いて、あってると思います。
でも、動かないんです。

もう、まる2日馬鹿みたいに、費やしました。
ぐるぐるメリーゴーランド的に繰り返したり。

本当、まじで、お願いします。

80 :デフォルトの名無しさん:2005/04/20(水) 13:56:03
>>77
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define numof(array) (sizeof(array)/sizeof(array[0]))

void roll_dice (int* dice, int dn, int n) {
if (n <= 0) return;
else {
dice[(int) ((float)dn*rand()/(RAND_MAX+1.0))]++;
roll_dice (dice, dn, n-1);
}
}

int main () {
int i;
int dice[6] = {0};
srand (time(NULL));
roll_dice (dice, numof (dice), 1000);
for (i = 0; i < numof (dice); ++i) printf ("%d: %d\n", i+1, dice[i]);
return 0;
}

81 :デフォルトの名無しさん:2005/04/20(水) 14:00:25
>>77
#include <stdio.h>
#include <stdlib.h>
/* 精度の悪い乱数を使用しているので、必要なら適宜書き換えること */
int diceThrow(void) {return rand() % 6;}
/* count回数ダイスを投げてdice配列に出現回数を記録 */
void l1(unsigned count, int * dice) {int ic; for (ic = 0; ic < count; ++ic) {++dice[diceThrow()];}}
/* arrayからarraySize分をその値の数の星グラフに */
void l2(unsigned arraySize, const int * array)
{
int ic;
for (ic = 0; ic < arraySize; ++ic) {
int cc;
printf("No.%d:%d\t", ic + 1, array[ic]);
for (cc = 0; cc < array[ic]; ++cc) {printf("星");}
printf("\n");
}
}
int main()
{
int kaisu[6]; int ic;
for (ic = 0; ic < sizeof(kaisu) / sizeof(*kaisu); ++ic) {kaisu[ic] = 0;}
l1(1000, kaisu);
for (ic = 0; ic < sizeof(kaisu) / sizeof(*kaisu); ++ic) {printf("No.%d\t%d\n", ic + 1, kaisu[ic]);}
for (ic = 0; ic < sizeof(kaisu) / sizeof(*kaisu); ++ic) {kaisu[ic] = 0;}
l1(100, kaisu);
l2(sizeof(kaisu) / sizeof(*kaisu), kaisu);
return EXIT_SUCCESS;
}


82 :デフォルトの名無しさん:2005/04/20(水) 14:16:01
>>80-81
お早い回答ありがとうございます。
走らせてみた所、問題なく動きました。
ただ、ちょっと気になったのが>>81の方は何度実行しても星の数が固定なんですが
これは精度が悪い関数を使っているためでしょうか…。

83 :デフォルトの名無しさん:2005/04/20(水) 14:16:29
>>79
ケアレスミス多過ぎ。
単純な文法エラーばかりで、動く云々以前にコンパイラが全部エラーだしたぞ。
--- got/vec.cpp 2005-04-20 14:13:01.500000000 +0900
+++ vec.cpp 2005-04-20 14:12:53.140625000 +0900
@@ -82,2 +82,3 @@
throw(std::out_of_range("Vec at: n has to be larger than 0 and less than curSize"));
+ }
return varray[n];
@@ -86,3 +87,3 @@
template<typename Element>
-Element & Vec<Element>::at(size_t n) const
+const Element & Vec<Element>::at(size_t n) const
{
@@ -94,3 +95,4 @@
//operator
-template<typename Element> Vec<Element>::operator[](size_t n){
+template<typename Element>
+Element & Vec<Element>::operator[](size_t n){
return varray[n];
@@ -99,3 +101,3 @@
template<typename Element>
-const Element & Vec<Element>::operator[](size_t n) const;{
+const Element & Vec<Element>::operator[](size_t n) const {
return varray[n];
@@ -139,3 +141,3 @@
template<typename Element>
-void Vec<Element>::resize(size_t newSize, Element x = Element())
+void Vec<Element>::resize(size_t newSize, Element x)
{

84 :デフォルトの名無しさん:2005/04/20(水) 14:17:22
>>82
乱数系列を初期化していないため。必要ならsrand()関数を呼べ。

85 :デフォルトの名無しさん:2005/04/20(水) 14:22:45
>>77
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define numof(array) (sizeof(array)/sizeof(array[0]))

void roll_dice (int* dice, int dn, int n) {
if (n <= 0) return;
else {
dice[(int) ((float)dn*rand()/(RAND_MAX+1.0))]++;
roll_dice (dice, dn, n-1);
}
}

void ps (int n) {if (n <= 0) return; else {printf ("*"); ps (n-1);}}

int main () {
int i;
int dice[6] = {0};
srand (time(NULL));
roll_dice (dice, numof (dice), 100);
for (i = 0; i < numof (dice); ++i) {
printf ("%d: ", i+1);
ps (dice[i]);
printf ("\n");
}
return 0;
}


86 :デフォルトの名無しさん:2005/04/20(水) 14:23:45
>>84
感謝です。サイト見ていけました。

87 :デフォルトの名無しさん:2005/04/20(水) 14:30:50
83さんはどのコンパイラー使ってますか?
私はvisual studio 2005β版ですが、
function template has already been defined
っていうエラーが7つと、
fatal error C1075: end of file found before the left brace '{' at 'c:\documents and setting\....\vec.cpp(28)' was matched
Generating Code...
っていうエラーしか出なくて、何がなんだか、よくわかりません。

88 :デフォルトの名無しさん:2005/04/20(水) 14:45:06
>>87
もしかして、Vec.cppをコンパイルしようとしてね?
んなもん、できるわけねぇじゃん。
例えば、
#include "vec.h"

void func()
{
P10C::Vec<int> foo;
}
こんなソースを用意してそれをコンパイルしてみ。
            _
それで判らなきゃ、タヒね。

89 :デフォルトの名無しさん:2005/04/20(水) 14:46:47
しねとかいいやがっておめえがしね!!!!!!!!!!!!!!!!!!!!!!!!!

90 :デフォルトの名無しさん:2005/04/20(水) 14:48:00
>>89
どこに「しね」と?

91 :デフォルトの名無しさん:2005/04/20(水) 14:50:40
>>90
_
タヒね。
↑これは様々な文字を組み合わせて作った巧妙な「死ね」という文字だ!!!
なんて陰険な奴なんだ!!!!!!!!!!!!!!

92 :デフォルトの名無しさん:2005/04/20(水) 15:02:04
>>88
いや、一応、main.cpp作ってやってるんですけど・・・。
ちなみに、しねとか、言ってるの私じゃないです。

93 :デフォルトの名無しさん:2005/04/20(水) 15:02:48
>>92
あんただれですか

94 :デフォルトの名無しさん:2005/04/20(水) 15:04:51
87です。すいません。

95 :デフォルトの名無しさん:2005/04/20(水) 15:09:25
>>92
Vec.cppをコンパイルしちゃいけないというのは理解できた?

96 :デフォルトの名無しさん:2005/04/20(水) 15:13:02
つーか、>83の差分のパッチは当てたんだろうか。

97 :デフォルトの名無しさん:2005/04/20(水) 15:27:36
>>75
気分転換になおしてあげたよ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/321.txt


98 :デフォルトの名無しさん:2005/04/20(水) 15:28:24
>>95
main.cppをコンパイルしてると思います。

99 :97:2005/04/20(水) 15:43:40
ひどいバグがあったので修正
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/322.txt
やっつけなので品質には期待しないでくれ

100 :デフォルトの名無しさん:2005/04/20(水) 15:48:41
>>99
ありがとうございます。
凄い。
これは、今の自分には作れませんわ。
ちょっとやってみます。


101 :83:2005/04/20(水) 15:52:29
無視されるんならもういいや。

102 :デフォルトの名無しさん:2005/04/20(水) 15:58:40
>>83
いや、無視してないです。
そこに書いてあるエラーをさっきまで見直してました。
87に書いた通りです。

103 :70:2005/04/20(水) 16:15:08
>>97
わたくしの課題の何卒よろしくお願いいたします。

104 :デフォルトの名無しさん:2005/04/20(水) 16:17:10
>>102
>83はエラーじゃないよ。修正した箇所をあんたのソースと比較した差分だね。
行頭の-があんたのソースから削除した行で、+が追加した行だ。

105 :デフォルトの名無しさん:2005/04/20(水) 16:23:07
>>70
それ、ホントにUniCodeに変換している?
私にはShiftJisに変換しているように見えるのだけど。
それと、先ずはファイル入出力と漢字コード変換ロジックを分離してくれ。
そこまでできていれば、ShiftJis→EUCを実装するのは簡単だ。

106 :デフォルトの名無しさん:2005/04/20(水) 16:24:57
>>104
ちょっと見てみます。
たぶん、typedefやるときに、find&replaceで一気に直したんだけど、そのとき、少しドジたので、
それも、少し入ってると思います。

107 :デフォルトの名無しさん:2005/04/20(水) 16:33:13
>>97
再度ありがとうございます。

私は、いつもcompileってのでやってるのではなくて、
build solutionっていうのcompileしてるんですが、やはり
function template has already been defined
ってのが、出てきます。
いつもこういうタイプのを、やる手法でやってるのですが・・・。
βからβ2版に昨日変えたのが、何か関係してるんでしょうか。

97さんだと、これ正常に動きますか?

108 :97:2005/04/20(水) 16:40:36
もしかしてソリューションにVec.cpp入ってない?
入ってたら抜くこと。

109 :デフォルトの名無しさん:2005/04/20(水) 16:44:28
なんで>107の段階で>97に返事しているのだろう……
しかも指摘済みのことを全然理解しないで先に進もうとしているし。
だんだんみんなが相手にしなくなったのが理解できるね。

110 :デフォルトの名無しさん:2005/04/20(水) 16:55:07
>>108
compiler変えてみたら、出来ました。
ありがとうございます。
erase, insert functionは、pointerを返すんだけど、thisで良いんでしょうか?

111 :デフォルトの名無しさん:2005/04/20(水) 16:56:52
>compiler変えてみたら、出来ました。
ホントに判ってるのかね。

112 :70:2005/04/20(水) 16:56:58
>>105 失礼しました。おっしゃる通りunicodeではなくsjisでした。
分離しましたのでお助けくださいませ。お願いします。
EXPORT BOOL __stdcall chgLineEucToSjis(LPCSTR strin,LPSTR strout){
unsigned char*str_in,*str_out,*p;//文字列変換入出力
unsigned charstr_in_work[MAX_PATH];//入力ワーク
unsigned charstr_out_work[MAX_PATH];//出力ワーク
unsigned intHighAsc;//上位コード
unsigned intLowAsc;//下位コード
inti,strLen;//処理カウント/文字列長
memset( str_out_work,'\0',MAX_PATH);//変数の初期化
memset( str_in_work,'\0',MAX_PATH);
str_out= &str_out_work[0];
str_in= &str_in_work[0];
strcpy((char *)str_in,strin);
strLen=strlen((const char *) str_in);/* 文字バイト数取得 */
p = str_out;/* 先頭位置コピー */


113 :70:2005/04/20(水) 16:57:42
for(i=0;i<strLen;i++){
HighAsc = *(str_in+i); /* 上位・下位コード取得 */
LowAsc = *(str_in+(i+1));
if(HighAsc > 0x7F){ /* 2バイト文字である */
if(HighAsc == 0x8E){
*str_out = LowAsc;/* 半角カタカナである */
str_out++;/* 1文字分進める */
}
else{/* 1バイト目変換 */
if((HighAsc % 2) == 0){/* 偶数である */
if(HighAsc < 0xDF)
*str_out = (unsigned char)(0.5 * HighAsc + 48);
else if(0xE0 <= HighAsc && HighAsc <= 0xFE)
*str_out = unsigned char(0.5 * HighAsc + 112);
}
else{/* 奇数である */
if(HighAsc < 0xDF)
*str_out = unsigned char(0.5 * HighAsc + 48.5);
else if(0xDF <= HighAsc && HighAsc <= 0xFD)
*str_out = unsigned char(0.5 * HighAsc + 112.5);
}
if((HighAsc % 2) == 0) /* 2バイト目変換 */
*(str_out+1) = LowAsc - 0x2;/* 1バイト目が偶数である*/
else{ /* 1バイト目が奇数である */
*(str_out+1) = LowAsc - 0x61;
if(*(str_out+1) > 0x7E)
*(str_out+1) = *(str_out+1) +1;
}
str_out+=2;
}


114 :70:2005/04/20(水) 16:58:16
i++;/* 1バイト分すすめる */
}
else{/* 1バイト文字である */
*str_out = HighAsc;
str_out = str_out + 1;
}
}
*str_out = '\0';
str_out = p;/* 先頭位置に戻す */
strcpy(strout,(const char *)str_out);
return TRUE;
}

それではご教授お願いいたします。m(_ _)m

115 :97:2005/04/20(水) 16:58:52
>>110
thisはまずい。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/324.txt

116 :デフォルトの名無しさん:2005/04/20(水) 17:03:04
>>110
insert()は挿入されたデータを指すポインタを返すべき。
erase()は削除したデータの次のデータ(或いはend())を指すポインタを返すべき。

つーか、stlの実装見ろって言われてなかったか?

117 :デフォルトの名無しさん:2005/04/20(水) 17:14:27
>>116
返す値については、何にも言われなかったです。
stlの実装見ろとかは、今のところ言われてないです。
これ、STLのクラスの一番最初の課題なんですが、
C++の段階を100で例えると、どのくらいのレベルのものなんでしょうか?

118 :デフォルトの名無しさん:2005/04/20(水) 17:15:16
>>70
//文字列の変換はめんどくさいから漢字一文字分(戻り値は変換済みバイト数)
int sjis2euc(unsigned char * dest, unsigned char * src)
{
unsigned code1 = src[0];
code1 = code1 * 2 - 0xe1;
code1 &= 0x7f;// 1バイトカナの隙間
unsigned code2 = src[1];
code2 -= 0x1f;
if (code2 > 0x7f - 0x1f) {// 0x7fの穴
--code2;
}
if (code2 >= 0x7f) {// 偶数ブロック
code2 -= 0x5e;
++code1;
}
dest[0] = code1 | 0x80;
dest[1] = code2 | 0x80;
return 2;
}
//一バイトカナはこれ(戻り値は上と同じ)
int sjis2eucKana(unsigned char * dest, unsigned char * src)
{
dest[0] = 0x8e;
dest[1] = str[0];
return 2;
}
//後はコードの判断ロジック(暇があったら後でね)

119 :117:2005/04/20(水) 18:24:15
>>116
いろいろありがとうございました。

120 :デフォルトの名無しさん:2005/04/20(水) 18:39:04
>>115
at()内のifはif (n >= curSize)だけで十分。
std::size_tは符合無し整数型と決まっているから。

121 :118:2005/04/20(水) 18:49:30
//残り(あ、微妙に仕様が違う気がする)
static inline bool isSjisKana(unsigned char src) {return src >= 0xa1 && src <= 0xdf;}
static inline bool isSjisKanji1(unsigned char src){return src >= 0x81 && src <= 0x9f || src >= 0xe0 && src <= 0xfc;}
static inline bool isSjisKanji2(unsigned char src){return src >= 0x40 && src <= 0x7e || src >= 0x80 && src <= 0xec;}
static inline bool isSjisKanji(const unsigned char * src){return isSjisKanji1(src[0]) && isSjisKanji2(src[1]);}
//変換の本体
std::string sjis2euc(const char * str)
{
const unsigned char * src = reinterpret_cast<const unsigned char *>(str);
unsigned char * buf = new unsigned char[strlen(str) * 2];
unsigned ic = 0;
for (; src[0] != '\0'; ++src) {
if (isSjisKana(src[0])) {
ic += sjis2eucKana(& buf[ic], src);
} else if (isSjisKanji(src)) {
ic += sjis2euc(& buf[ic], src);
++src;
} else {
buf[ic++] = src[0];
}
}
buf[ic] = '\0';
std::string tmp = reinterpret_cast<const char *>(buf);
delete[] buf;
return tmp;
}

122 :& ◆E0RpANzUA2 :2005/04/20(水) 19:03:05
>>120

typedefまで直しました。
皆様、ありがとうございました。

あと、一応、それが動くかどうかのテストをするために、
main.cppを含め、大掛かりなファイルをもらいました。
このリンクの一番下の、zipファイルです。
ファイル上にエラーは、一つもないのですが、linkingでエラーがでるのですが。。。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi

123 :デフォルトの名無しさん:2005/04/20(水) 19:13:07
おいおい…… リンク位ちゃんと貼れや。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/325.zip

124 :デフォルトの名無しさん:2005/04/20(水) 19:23:44
>>110
コンパイルの手順の問題ではない

コンパイルエラーなのだから質問の最初から87のエラーを提示すべき
75のソース
://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/320.txt

//===========================================================================
template<typename Element>
Element & Vec<Element>::at(size_t n)
{
if(n < 0 || n >= curSize){ //<<----ここで{ 使用
throw(std::out_of_range("Vec at: n has to be larger than 0 and less than curSize"));
return varray[n];
} //----ifの最後に}がないのでここがif文の終わり
.cppの最後の}でこのメソッド終了 }が不足しているので
fatal error C1075: end of file found before the left brace '{' at 'c:\documents and setting\....\vec.cpp



125 :70:2005/04/20(水) 19:25:08
>>121
先生!ありがとうございます。
ですがしかし、技が高度すぎて当方には発生するコンパイルエラーの意味すら
理解できません。inline初めてみました!

126 :121:2005/04/20(水) 19:30:37
>>70
あ、肝腎のことを書き忘れてた。
元のソース追っかけるの諦めたから、C++で適当に書いた。
static inline はなくても取り敢えずはいいとして、new/deleteはmalloc()/free()で、
reinterpret_castはCスタイルキャストで、std::stringはchar *でなんとか誤魔化してくれw

127 :デフォルトの名無しさん:2005/04/20(水) 19:30:47
>>124
83さんが掲示してくれたのを、見直してるときに、それは見つけました。
言うべきでした。すいません。

128 :デフォルトの名無しさん:2005/04/20(水) 19:31:30
>>122
リンクエラーならどんなエラーか書けよ。
ついでに言えば、人の指摘を無視するならもう来なくていいよ。

129 :デフォルトの名無しさん:2005/04/20(水) 19:32:21
ttp://www.js.yamanashi.ac.jp/~koba/prog2005/function.html

ここのページにある課題3と課題4分かりませんか〜?
よろしくお願いします。

130 :70:2005/04/20(水) 19:35:17
>>126
ヒントありがとうございます。
では何とか努力してみます。ありがとうございました!

131 :デフォルトの名無しさん:2005/04/20(水) 19:37:00
>>129
通報しました。

132 :デフォルトの名無しさん:2005/04/20(水) 19:37:23
>>128
エラーは
Linking...
Main.obj : error LNK2019: unresolved external symbol "void __cdecl SJC::fillRandomly(void * const,unsigned int)"
(?fillRandomly@SJC@@YAXQAXI@Z) referenced in function "void __cdecl SJC::randomizeAllObjectBits<unsigned int>(unsigned int &)" (??$randomizeAllObjectBits@I@SJC@@YAXAAI@Z)
Debug/Project 1.exe : fatal error LNK1120: 1 unresolved externals
無視はしてないです。
たまに、指摘の内容を調べてて返事が遅れたりしてました。
すいません。

133 :デフォルトの名無しさん:2005/04/20(水) 19:40:21
>>132
BlumBlumShub.cpp とやらはコンパイルしてるの?

134 :133:2005/04/20(水) 19:42:25
>>132
BlumBlumShub.cpp の
namespace /*anonymous*/ {
と、この { に対応する } をコメントアウトすればうまくいく

135 :デフォルトの名無しさん:2005/04/20(水) 19:43:38
>>132
指摘した点を修正せずに先に進むことを無視したと言うのでは?
で、>133の指摘にもあるがMain.objとBlumBlumShub.objがリンクされていない。
IDEの使い方くらいきちんと抑えておきなさい。

136 :133:2005/04/20(水) 19:46:03
ごめん、うそついた。

137 :デフォルトの名無しさん:2005/04/20(水) 19:48:40
>>133
あ、出来ました!!!!!!!
assert が出て、

typename Vec<Element>::pointer Vec<Element>::erase(pointer from, pointer to)
{
assert(from<to);
const std::ptrdiff_t offset = from - begin();
resize(std::copy(to, end(), from) - begin());
return begin() + offset;
}
この部分のassert(from<to);にです。from==toになってるみたいです。
assert(from<=to);にしてみたら、assertは出なくなったのですが、
Message: [bad allocation]
The type reported may not be most-derived.
ってのが、出てきます。

本当、出来そこないで、すいません。

138 :デフォルトの名無しさん:2005/04/20(水) 19:50:21
>>135
改めます。

139 :デフォルトの名無しさん:2005/04/20(水) 19:51:30
>>137
if (from == to) return from;

140 :デフォルトの名無しさん:2005/04/20(水) 19:53:23
>>129
テンプレに従わないと宿題として認めない

141 :デフォルトの名無しさん:2005/04/20(水) 19:58:01
>>137
それ、付け加えたんですけど、同じassertが出ます。
from<toになってるから、assertが出るんですよね。
でも、from<=toにすると、出なくなるんですよね。

142 :デフォルトの名無しさん:2005/04/20(水) 20:24:21
もう少し頭使おうよ。
>139はassertionを起こさない修正ではなくbad allocationしない修正。
from == to のときの処理を追加するなら、当然assert()も修正する必要がある。

143 :デフォルトの名無しさん:2005/04/20(水) 20:50:17
ノータリンのボケに頭使えっつっても無理な話

144 :デフォルトの名無しさん:2005/04/20(水) 20:51:39
>>142
assertが出るってことは、from<toってことですよね?
ってことは、それより以前にeraseが呼びだされる前にエラーがあるってことですか?

145 :デフォルトの名無しさん:2005/04/20(水) 20:56:28
ヒントを与えて答えさせようなんて無理な話。

146 :デフォルトの名無しさん:2005/04/20(水) 21:01:38
こいつ調べることすら出来ないみたいだな
何から何まで教えてくれると思ってるから
ここで何でもかんでも聞くんだろうな

147 :デフォルトの名無しさん:2005/04/20(水) 21:07:25
それがゆとり教育というものだよ

148 :デフォルトの名無しさん:2005/04/20(水) 21:16:23
ゆとり教育と調べることと関係が有るのだろうか…

149 :デフォルトの名無しさん:2005/04/20(水) 21:21:31
ゆとり教育用の教科書を見るとその片鱗が覗ける。

150 :デフォルトの名無しさん:2005/04/20(水) 21:21:41
これだから無知な奴は。

151 :デフォルトの名無しさん:2005/04/20(水) 21:22:32
>>139のを一番最初にくっつけとけばいいんだって。

152 :デフォルトの名無しさん:2005/04/20(水) 21:31:20
>>149
その教科書を毎日見てきた世代ですが。

153 :デフォルトの名無しさん:2005/04/20(水) 21:37:56
>>152
それは、残念だったな。

154 :デフォルトの名無しさん:2005/04/20(水) 22:15:37
結局使わなければ忘れるから、内容が薄くなっても…。

155 :sage:2005/04/20(水) 22:20:33
[1] 授業単元: 情報処理入門
[2] 問題文(含コード&リンク):
---hoge.txt---
商品名aaaa
商品名bbbb
商品名cccc
商品名dddd
商品名eeee
---hoge.txt---
問1:hoge.txtから文字列を読み込み、構造体に格納せよ。malloc()を用い
動的に確保し、双方向リストを作成し、DOS窓に行番号付きで表示せよ。
---DOS窓---
01 商品名aaaa
02 商品名bbbb

05 商品名eeee
---DOS窓---
問2:問1で作成した双方向リストを用い、「i」を入力したら任意の行に
適当な商品名を追加し、「d」を入力したら任意の行を削除せよ。
問3:問2のコマンド入力後の状態をDOS窓に表示せよ。また、その状態をhoge.txt
に反映し上書きせよ。
[3] 環境
 [3.1] OS: windows xp
 [3.2] コンパイラ(バージョン):gcc3.2.3
 [3.3] 言語:C
[4] 期限:できるだけ早く
[5] その他の制限:初心者なので双方向リストのアドレス取得方法が分かりません。
ぼるじょあ様よろしくお願いします。

156 :デフォルトの名無しさん:2005/04/20(水) 22:24:49
できるだけはやくっていつだよ

157 :デフォルトの名無しさん:2005/04/20(水) 22:25:58
>>156
ぼるじょあに聞いてるんだから、他の奴はだまってろ

158 :ぼるじょあ ◆yBEncckFOU :2005/04/20(水) 22:27:29
できるだけはやくっていつだよ(・3・)

159 :デフォルトの名無しさん:2005/04/20(水) 22:28:28
[1] 授業単元: C言語
[2] # 「Boyer-Moore法」を用いる.
# 探索を行う関数名は bm_search2 とする.

* 引数として以下の3つを受け取る:
1. ファイル中の文字列 haystack
2. 検索対象の文字列 needle
3. 連結リスト(needle のすべての出現位置を格納するため)
* 戻り値は,一致した文字列の総数.

# プログラムは一致した文字列と前後 10 文字を表示する.
# プログラムは一致したすべての文字列を表示する.

* 関数 bm_search2 の中で一致した文字列を表示することは禁止する.

# プログラムはコマンドライン引数としてファイル名と検索文字列を指定できること.

[3] 環境
 [3.1] OS:Linux
 [3.2] わからないです
 [3.3] C言語
[4] 4月22日までです

よろしくお願いします


160 :デフォルトの名無しさん:2005/04/20(水) 22:31:05
自分が使ってるコンパイラすら分からないような
無能・無才は素直に単位落としとけよ

161 :155:2005/04/20(水) 22:34:16
>>156-158
ぼるじょあ様へ
できるだけ早くとは2005年4月22日です。
よろしくお願いします。

162 :デフォルトの名無しさん:2005/04/20(水) 23:54:19
保守

163 :デフォルトの名無しさん:2005/04/20(水) 23:55:13
C言語でコンパイラはボーランドCです。
あるファイル、例えば

2 6 -7 0 0 6 48
4 5 3 -1 0 8 12
9 0 -7 5 1 9 -2

があった場合に何行何列かを表示するプログラムを
作って欲しいです。ちなみに行数によって列数は変わり
ません。条件としてはmalloc関数を使ってほしいです。
だれかお願いしますm(__)m




164 :デフォルトの名無しさん:2005/04/21(木) 00:09:39
2問あるのですが・・・初心者でわかりません。

3値の中央値(2番目に大きい数)をもとめるアルゴリズムを
C言語で実装せよ。(if文を使うこと)

以下を参考にして3×3のマスにおける○×ゲームの表示プログラムを
作成したい。とりあえず以下のように出力させるには?
どこに×をおきますか?:2 2
○○○
○×○
○○○

165 :デフォルトの名無しさん:2005/04/21(木) 00:10:23
上の続きです
#include <stdio.h>

int main(void)
{
int i, j, n,m;

printf("どこに×を置きますか?:");
scanf("%d %d", &n,&m);
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {

ここを考えること。


}
putchar('\n');
}

return (0);
}

となっています。
明日提出なので、できればよろしくお願いします。


166 :デフォルトの名無しさん:2005/04/21(木) 00:15:30
int middle(int a, int b, int c)
{
if(b <= a && a <= c || c <= a && a <= b) return a;
if(a <= b && b <= c || c <= b && b <= a) return b;
return c;
}

2問目
if(i == n && j == m) printf("×");
else printf("○");

入力に時間がかかったせいで3分もかけてしまった。

167 :デフォルトの名無しさん:2005/04/21(木) 00:20:22
>>151
それをやったらbad allocationになるんですよ。

168 :デフォルトの名無しさん:2005/04/21(木) 00:20:38
163もやっていただけませんか?
明日提出でやばいです・・・。
お願いします。

169 :デフォルトの名無しさん:2005/04/21(木) 00:40:44
>>155
ぼるじょあじゃないけど問1と問2答えといたよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/327.c

170 :デフォルトの名無しさん:2005/04/21(木) 00:44:18
>163
具体的に例題ファイルの場合にはどうなればいいのか説明できますか?
例題ファイルの場合、
3行7列と 画面に表示すればいいということでしょうか?
それだとmalloc関数を使う必要がないので違いますよね 

171 :デフォルトの名無しさん:2005/04/21(木) 00:47:17
>>168
163の問題の意味が全然わからない

172 :デフォルトの名無しさん:2005/04/21(木) 01:00:23
>170
作りたいプログラムはファイルの中身を表示するのが目的です。
下のプログラムで3行7列は#defineによって定義してますよね。
自分ででもファイルの中は実際はわからないわけですから何行何列
かはプログラム自体がファイルを開いたときに認識するように
したいのです。つまり例題ファイルを開いたときに下のプログラム自体が
3行7列を認識して2次元行列ma[][]を表示したいようにしたいのです。
プログラムさえできればmalloc関数は使わなくても大丈夫です。
説明不足があったらすみません。お願いします。

#include <stdio.h>
#define COL 7
#define ROW 3
int main(void)
{
FILE * f;
int data[ROW][COL], i, j, is_error = 0;
if ((f = fopen("data.txt", "r")) == NULL) return 1;
for (i = 0; !is_error && i < ROW; ++i)
for (j = 0; !is_error && j < COL; ++j)
if (fscanf(f, "%d", &data[i][j]) != 1) is_error = 1;
fclose(f);
if (is_error) return 1;
printf("%d行%d列\n", ROW, COL);
return 0;
}


173 :155:2005/04/21(木) 01:00:49
>>169
ありがとうございました

ぼるじょあ様、なにとぞ問3をお願いします。

174 :97:2005/04/21(木) 01:10:06
>>167
ちょっとやってみたけどそのエラーは別な場所で起きてるみたい。
直しといたんであげとくよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/328.txt

175 :169:2005/04/21(木) 01:11:38
>>173
問3もファイルに書く以外の事はやってあるよ。
じゃあ後はぼるじょあ様にまかせよう。

176 :デフォルトの名無しさん:2005/04/21(木) 01:55:39
172ですが説明不足でしたかね?
それとも説明がわかりにくかったですかね?

177 :デフォルトの名無しさん:2005/04/21(木) 02:01:14
>172
>2次元行列ma[][]を表示したいようにしたいのです
>printf("%d行%d列\n", ROW, COL);
だから、どっちなんだと…

>条件としてはmalloc関数を使ってほしいです
>プログラムさえできればmalloc関数は使わなくても大丈夫です
これも矛盾してるしな。

行と列の数が分かればそれでいいのか?
それとも、配列の中身のデータが必要なのか?
と>170は聞いているんだ。質問に答えろよ。
読み込む前には行や列の数が分からん、なんて分かってる。

例として、>163を読み込んだときにはどういう結果が出力されるべきなのかを書け。
課題に「ただし、mallocを使う事」とか「ただし、データは一度配列に読み込む事とする」みたいな条件がついてるならそれもな。

178 :デフォルトの名無しさん:2005/04/21(木) 02:17:43
>177
>だから、どっちなんだと…
>行と列の数が分かればそれでいいのか?
>それとも、配列の中身のデータが必要なのか?
両方表示していただきたいです。

>これも矛盾してるしな。
malloc関数はどうでもいいです。
個人的に使わないと無理かなと思っただけなんで。

>例として、>163を読み込んだときにはどういう結果が出力されるべきなのかを書け。

2 6 -7 0 0 6 48
4 5 3 -1 0 8 12
9 0 -7 5 1 9 -2
3行7列の行列です。

>課題に「ただし、mallocを使う事」とか「ただし、データは一度配列に
>読み込む事とする」みたいな条件がついてるならそれもな。
mallocはどうでもいいです。配列ma[][]をあとで計算に使うので
ma[][]に格納して欲しいです。

これで大丈夫ですか?

179 :デフォルトの名無しさん:2005/04/21(木) 02:20:51
178の続き。
ma[][]じゃなくてdata[][]でした。どちらでもいいです。
すみません。

180 :デフォルトの名無しさん:2005/04/21(木) 05:49:18
>>163
つくってみたよ。動いたからあげてみる。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/329.txt

読み込んだデータをまたつかうんならデータ構造に問題あるぽい。
テスト環境はLinuxのgccね。

181 :デフォルトの名無しさん:2005/04/21(木) 08:22:42
>>97=174
ありがとうございます。うれしいかぎりです。
でも、またassertionが出るようになったのですが・・・。

Debug Assertion Failed!
C:...\Microsoft Visual Studio 8\...\VC\include\vector
Line:223
Expression'vector literators incompatible

182 :デフォルトの名無しさん:2005/04/21(木) 08:36:15
>>181
そのassertionってSTLのvectorからでてる様に見えるんだが。俺の気のせいかなぁ。

183 :デフォルトの名無しさん:2005/04/21(木) 08:42:09
>>182
そうそう。
その通りだと思います。
それって、STLのVectorが違うってこと?
でも、今までも、他のSTLから出てるエラーはあって、
自分のプログラムを治したら、出なくなったっていうのは、あるんですけど・・・。

184 :デフォルトの名無しさん:2005/04/21(木) 09:16:42
>>163はマルチです。
>>170 は私が作ったへぼソースw
まるで自分が作ったかのように質問してるし。
良識を疑うよw

>>180 乙です。

185 :184:2005/04/21(木) 09:17:54
>>170>>172の間違い

186 :デフォルトの名無しさん:2005/04/21(木) 09:20:15
>>これも矛盾してるしな。 
>malloc関数はどうでもいいです。 
>個人的に使わないと無理かなと思っただけなんで。 
 ^^^^^^^^^^
嘘を付くな嘘を。

187 :デフォルトの名無しさん:2005/04/21(木) 09:26:16
>>183
そういうことではなくて、
このソースそのものがvectorに取って代わるものなんではないの?ってこと
なのに、vectorのassertionを出すっていうのは、おかしくないのかなと思っただけ。

どっちもincludeしてたりするのなら、やめた方がいいと思うんだけど。
俺の認識がおかしいならスルーしてくださいな。

188 :デフォルトの名無しさん:2005/04/21(木) 09:36:05
↑で説明足らずだったから、追記。
両方のvectorクラスをincludeしてると予想して書くけど、
名前空間が違うから、基本的には両方includeしてても、
おかしいことにはならないと思う。

けど、同様の機能を提供するものをincludeしてるという状況の為、
意識しないミスによって、例えば自作vectorクラス側のオブジェクトを
STL::vectorとして扱ってしまっている場所が出てしまう可能性がある。
上記のassertionもその手のバグじゃないかと疑っているということです。

189 :70:2005/04/21(木) 10:19:46
>>118様 お助けください
作成していただいたソースをなんとかVCでコンパイル可能になったのですが
デバッグ時に←個所でエラーが発生してしまいました。
原因がわかりません。ヒントお願いします。


int sjis2euc(unsigned char *dest, unsigned char *src) {
unsigned code1 = src[0];
unsigned code2 = src[1];
code1 = code1 * 2 - 0xe1;
code1 &= 0x7f;// 1バイトカナの隙間
code2 -= 0x1f;
if (code2 > 0x7f - 0x1f) --code2; // 0x7fの穴
if (code2 >= 0x7f) {// 偶数ブロック
code2 -= 0x5e;
++code1;
}
dest[0] = code1 | 0x80;
dest[1] = code2 | 0x80; //← 最初にここを通過させるとメモリ参照系エラーになります。
return 2;
}
int sjis2eucKana(unsigned char * dest, unsigned char * src) { //一バイトカナはこれ(戻り値は上と同じ)
char * str;
dest[0] = 0x8e;
dest[1] = str[0];
return 2;
}

190 :70:2005/04/21(木) 10:20:08
static BOOL isSjisKanji1(unsigned char src){return src >= 0x81 && src <= 0x9f || src >= 0xe0 && src <= 0xfc;}
static BOOL isSjisKanji2(unsigned char src){return src >= 0x40 && src <= 0x7e || src >= 0x80 && src <= 0xec;}
static BOOL isSjisKana(unsigned char src) {return src >= 0xa1 && src <= 0xdf;}
static BOOL isSjisKanji(const unsigned char * src){return isSjisKanji1(src[0]) && isSjisKanji2(src[1]);}
EXPORT __stdcall sjis2eucMain(char * str) { //変換の本体
char tmp;
unsigned char * src = reinterpret_cast<unsigned char *>(str);
unsigned char * buf;/// = malloc((char)strlen(str) * 2);
unsigned ic = 0;
for (; src[0] != '\0'; ++src) {
if (isSjisKana(src[0])) ic += sjis2eucKana(& buf[ic], src);
else if (isSjisKanji(src)) {
ic += sjis2euc(&buf[ic], src);
++src;
}
else buf[ic++] = src[0];
}
buf[ic] = '\0';
free(buf);
return tmp;
}

191 :70:2005/04/21(木) 10:22:09
追記ですが、外部宣言している本体のsjis2eucMain(char * str)
のstrには試験的に作ったVBからの呼出し元で
明示的に「あいうえおかきくけこさしすせそ」を格納しており
パラメタとしては正常に引き継がれておるようです。

192 :デフォルトの名無しさん:2005/04/21(木) 10:25:26
>>183
テストコードが悪い(多分)
>>182
テストコードを見たら、STLのvectorと独自のvector両方に対してテストしてる模様。

193 :デフォルトの名無しさん:2005/04/21(木) 10:27:44
>>182,183,192
確かにSTLのvectorをincludeしてる。

194 :70:2005/04/21(木) 10:34:04
失礼しました。
unsigned char * buf;/// = malloc((char)strlen(str) * 2);
コンパイル通す為にお馬鹿な事をしていました。
ここを直したらうまく動きました。お騒がせしました。

195 :デフォルトの名無しさん:2005/04/21(木) 10:34:04
erase function でreserve, operator=,assign とかを使うことって可能ですかね?

196 :デフォルトの名無しさん:2005/04/21(木) 10:49:18
>>195
ごめんなさい。言うの忘れてました。
もし、capacityがなくなったら、そのたびに、2倍にするそうです。
だから、bad reallocationってメッセージが出てるのでしょうか?

197 :デフォルトの名無しさん:2005/04/21(木) 10:52:09
>>196
まず何が起きてるのか言ってくれ。
はっきりいってわけがわからない。

198 :デフォルトの名無しさん:2005/04/21(木) 11:03:19
>>197 196の訂正。
さっきのvector関連のassertは出なくなって、また
=== A std::bad_alloc EXCEPTION REACHED main() ===
Message: [bad allocation]
The type reported may not be most-derived.
っていうメッセージが出るんです。
つまり、bad allocationなんだと・・・。
これって、capacity==sizeになったとき、
またvectorを増やすけれど、その時の大きさをcapacity*2にするってことなんだけど、
そこから来てる、エラーなのかなって思ったのです。

199 :デフォルトの名無しさん:2005/04/21(木) 11:15:14
>>198
>>174のやつ使ってる?

200 :デフォルトの名無しさん:2005/04/21(木) 11:16:26
教授の助手に聞いたところ、
reallocationはcapacityを2倍にしようとするんだけど、
その2倍のcapacityがmax_sizeを超えていたら、max_sizeは新しいcapacityを
取られるべきだそうです。
defaultによって、メモリーがなくなったときに、new[],delete[],がthrowする。
size_type max_size(void) constに関して、throw std::length_errorが必要だそうです。

本当、手間取らせちゃってごめんなさい。


201 :デフォルトの名無しさん:2005/04/21(木) 11:22:32
>>199
はい。
そうすると、198で言った風になります。

202 :デフォルトの名無しさん:2005/04/21(木) 11:28:38
つけたし。
defaultによって、メモリーがなくなったときに、
new[],delete[],がstd::bad_allocをthrowする。
私の日本語表現、おかしくて、読みずらいかもしれません・・・・。

203 :デフォルトの名無しさん:2005/04/21(木) 11:29:51
>>201
おれは問題なくテスト通ってるけどな。
今使ってるソース見せてよ。

204 :デフォルトの名無しさん:2005/04/21(木) 11:34:12
>>203
これです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/330.cpp

205 :デフォルトの名無しさん:2005/04/21(木) 11:37:05
>>204
insert(pointer before, size_type howMany, const_reference x)
が直ってない

206 :デフォルトの名無しさん:2005/04/21(木) 11:40:25
size_type max_size() const{ return size_type(-1);}
これじゃ、不十分なんでしょうか?

207 :デフォルトの名無しさん:2005/04/21(木) 11:55:46
むずかしいです。

[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):
任意の文字列を検索し、指定文字列に置換える関数を作りなさい。
なお、置換文字列は任意の文字列と同じ長さとは限らない。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年4月22日まで
[5] その他の制限: 23日の授業で提出なので御願いします;


208 :デフォルトの名無しさん:2005/04/21(木) 12:02:43
英語ですいません。
某サイトによると、

size_type max_size() const;
Returns size() of the largest possible vector.

size_type capacity() const;
Returns the size of the allocated storage, as the number of elements
that can be stored.

今まで、ネットで、こういう系統のcppファイルをたくさん集めて研究してたんですけど、
これより、簡単で、size_type max_size() const っていう関数は使ってないんですよね。
なので、ないがしろにしてたけど、これのせいの気がするんですが・・・。

209 :デフォルトの名無しさん:2005/04/21(木) 12:05:11
>>205
あ、それを直しても、198でいうようなのが出てきます。
assertとかは出ないんですけど・・・。

210 :デフォルトの名無しさん:2005/04/21(木) 12:06:17
int main(){
int pid;
pid=fork();
if(pid==0){
cout<<"a";
}
else{
cout<<"b";
}
}

上記のコードだと、実行後 aa と出力されてしまいます。
forkから、親側pidにはプロセスID、子側pidには0が返るはずなので、
親はbを、子はaを出力すると思うのですが、私は何か勘違いを
しているのでしょうか?

211 :デフォルトの名無しさん:2005/04/21(木) 12:06:56
>>207
void replaceString(char* string, const char* from, const char* to)
{
   const int len1 = (int)strlen(from);
   const int len2 = (int)strlen(to);
   char* found = strstr(string, from);

   while (found) {
      if (len1 != len2) {
         memmove(found + len2, found + len1, strlen(found + len1) + 1);
      }

      memcpy(found, to, len2);

      found = strstr(found + len2, from);
   }
}


212 :デフォルトの名無しさん:2005/04/21(木) 12:07:43
>>209
じゃあ、もう一回直したやつをアップしてみて。

213 :デフォルトの名無しさん:2005/04/21(木) 12:12:01
>>212
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/331.cpp
なんでも、すいません。
本当、助かります。

214 :デフォルトの名無しさん:2005/04/21(木) 12:13:57
>>212
すいませんが、212さんのoutputかexe fileアップしてもらっていいですか?

215 :デフォルトの名無しさん:2005/04/21(木) 12:15:47
>>213
const_refernce copy(x)
->
const value_type copy(x)

216 :デフォルトの名無しさん:2005/04/21(木) 12:16:09
また池沼がこのスレに這いつくばってるのか

217 :デフォルトの名無しさん:2005/04/21(木) 12:22:39
>>215
そうするとassertが出るので、const_referenceであってると思います。

>>216
そうですよね。
自分でも、嫌になってるから、皆さんには、もっと迷惑かけてると思います。
すいません。

218 :デフォルトの名無しさん:2005/04/21(木) 12:36:04
>>217
const_referenceだったら何も修正されないじゃん。
そのassertの内容は?

219 :デフォルトの名無しさん:2005/04/21(木) 12:56:20
>>218
template<typename Element>
void Vec<Element>::insert(pointer before, size_type howMany, const_reference x){
const size_type prev = size();
const difference_type offset = before - begin();
const_reference copy(x);
copy とか習ってなかったので、よく分からなかったのですが、
const_reference x なので、const_referenceかなと思って。
value_typeにすると、またさっき言ったように、
STLのVectorからのエラーになります。

220 :デフォルトの名無しさん:2005/04/21(木) 13:06:30
落ち着け。思いつきであれこれいじっても事態は悪くなるばかりだ。


221 :デフォルトの名無しさん:2005/04/21(木) 13:09:58
>>219
それでいい。
STLのvectorがassertするのは多分>>192

222 :70:2005/04/21(木) 13:17:00
118様!!
「結果」という漢字が正常に変換されません。

223 :210:2005/04/21(木) 13:18:23
どなたか、お助けくださいいいいい

224 :207:2005/04/21(木) 13:19:49
>>211

void replaceString(char* string, const char* from, const char* to);

main(){
char *string1 ="good mornig america!";
char *string2 ="good";
char *string3 ="bad";
replaceString(string1,string2, string3);
printf("%s\n",sting1);
}
void replaceString(char* string, const char* from, const char* to)
{
const int len1 = (int)strlen(from);
const int len2 = (int)strlen(to);
char* found = strstr(string, from);

while (found) {
if (len1 != len2) {
memmove(found + len2, found + len1, strlen(found + len1) + 1);
}

memcpy(found, to, len2);

found = strstr(found + len2, from);
}
}

ってやったらコアダンプしちゃいました;;
どこが悪いんでしょうか・・・

225 :デフォルトの名無しさん:2005/04/21(木) 13:31:14
char string1[] ="good mornig america!";
char string2[] ="good";
char string3[] ="bad";

226 :デフォルトの名無しさん:2005/04/21(木) 13:47:49
>>Vector classでお世話になったみなさん。

長い間付き合っていただいて、ありがとうございました。
なんか悪いので、締め切りまであと15時間あるので、
自分なりにやってみます。
本当にありがとうございました。

227 :207:2005/04/21(木) 13:53:31
すみません・・ついでといっちゃあなんですが・・??
224はだめで225はOK
↓もOKな理由がわかりません・・・なぜなんでしょうか;
main(){
char *string1 ="good mornig america!";
char *string2 ="good";
char *string3 ="bad";
printf("%s\n",string1);
printf("%s\n",string2);
printf("%s\n",string3);
}

228 :デフォルトの名無しさん:2005/04/21(木) 13:57:16
>>223
動かしてみた
baと表示された

229 :>>226:2005/04/21(木) 14:01:40
VC8のvectorを見てみたが、Debugモードでvectorのiteratorとポインタを比較するとassertに失敗するようになっている。
VC8を使わないか、Releaseモードにすれば大丈夫。

230 :デフォルトの名無しさん:2005/04/21(木) 14:26:25
>180
ありがとうございました。

>>170 は私が作ったへぼソースw
>まるで自分が作ったかのように質問してるし。
>良識を疑うよw
自分が作ったなんて一言も書いてないです。
もしそのように感じたらすみませんでした。

>>malloc関数はどうでもいいです。
>>個人的に使わないと無理かなと思っただけなんで。
^^^^^^^^^
>嘘を付くな嘘を。
嘘ではないです。宿題を出された日に大学で教授にmalloc関数を
使えばできるよ。と言われたので個人的に解釈してmalloc関数を
使わなければできないと思ったのでそのように書いたのです。
------------------------------------------------------------
言い訳みたいな文になってしまってすみません。
本当にありがとうございました。


231 :デフォルトの名無しさん:2005/04/21(木) 14:47:22
>>227
それは、宿題の範疇を超えるんだが(^^;;
簡単に説明すると、

・文字列トークンは普通、(書換えできない)文字列へのポインタとして扱われる。
・例外として文字列配列の初期子として書かれたときは、その文字列配列の初期値を決める。
・配列の名前だけ書く([]を着けない)と、最初の要素へのポインタとして扱われる。

わからんよーなら、丁寧な教科書なら図解つきで載ってるんで、読んでおくれ。


232 :118辺り:2005/04/21(木) 15:17:04
>>70
なんだよ、C++でいいならそのまま使えよ。
Cかと思ってmalloc()辺りの説明したけど、文字列の扱い慣れてないみたいだから
>190みたいな阿呆なコード書いてるんだろうし。


233 :デフォルトの名無しさん:2005/04/21(木) 15:50:28
>>229
明日学校行って、他のコンパイラーでやってみます。
本当ありがとうございました。

234 :デフォルトの名無しさん:2005/04/21(木) 15:51:48
>>233
>229を理解してその台詞? いくらなんでも酷すぎるなぁ。

235 :デフォルトの名無しさん:2005/04/21(木) 16:46:05
>>234
>>Releaseモードにすれば
マジであほなんで、その仕方がよく分からなかったけど、また聞くと悪いから、
VC8以外のコンパイラーで一度試してみようかなって思っただけです。

236 :デフォルトの名無しさん:2005/04/21(木) 16:49:14
>>234
今ままでずっと書いてもらったコードを理解するために、色々調べてて
返事おくれました。
STLの授業始まったばかりで、まだ定かではないことがたくさんあって・・・。
ほんと、ありがとうございました。

237 :デフォルトの名無しさん:2005/04/21(木) 16:50:24
>>236
前にもIDEの使い方くらい勉強しとけって書かれてたよなぁ。
レスがその場凌ぎ以外のなんにも役に立ってないわけだ。

238 :デフォルトの名無しさん:2005/04/21(木) 17:33:14
>>237
ちゃんと勉強するやつがここに来るわけないだろw

239 :デフォルトの名無しさん:2005/04/21(木) 17:38:04
>>237
マジレスすると、私事なのですが、学校が進むの早いんですよ。
去年の10月にC++の最初、basic classから始まって、
data structure,STL&SLと、とんとんと。
その場凌ぎ以外のなんにも役に立ってないわけじゃなくて、
進むの学校が進むの早すぎて、あれもこれもとやること多すぎで、
消化不良起こしてるんです。
まだC++初めて6ヶ月しか経ってないので。
もちろん、このクラスの以外にも3クラス取ってるわけで・・・。
でも、コンパイラーのこと、書かれていた基礎知識が抜けていて、
マズイのは、ご指摘どうり、自分でも承知しているので、
週末にでも時間作れるように努力して、勉強します。

240 :70:2005/04/21(木) 18:03:49
>>232
レスありがとうございます。
AHOなソースにしてしまい申し訳ありません。
何故か当環境でコンパイルすると、ズラーとエラーが出てきてしまいました。
『結果』という文字がなぜうまくいかないのかヒントお願いいたします。

241 :デフォルトの名無しさん:2005/04/21(木) 18:23:55
半年もあれば……

242 :232らしい:2005/04/21(木) 18:26:05
>>240
文字列は、char変数には入らない。
stringでエラーを起こしているなら、
#include <string>
すればいい。
教えるの面倒だから、元の方でエラーをなくす努力をしてくれ。

243 :デフォルトの名無しさん:2005/04/21(木) 18:51:17
漏れはC++初めて二ヶ月でEffectiveシリーズ三冊やらExceptionalやら
ModenやらFAQやら禿本やらboostやらと読んだが…
自分が適当にやってるのを他のせいにするなと言いたい
やる気さえあれば誰だって出来る。よっぽどアホでない限りな

244 :デフォルトの名無しさん:2005/04/21(木) 19:01:52
的外れな意見だな

245 :デフォルトの名無しさん:2005/04/21(木) 19:09:39
Ψ1s=1/sqrt(PI)*γ1^(3/2)*e^(-γ1*r)
Ψ2p=1/sqrt(PI)*γ2^(5/2)*r*e^(-γ2*r)*cosθ

という式で|Ψ(x,y,z)|^2を、数値的に求め
その結果から|Ψ(x,0,z)|^2のグラフを
gnuplotでえがくプログラムを組む課題です。
どのようなプログラムを組めばよいでしょうか。

246 :デフォルトの名無しさん:2005/04/21(木) 19:20:52
[1] 授業単元:プログラム技術
[2] 問題文(含コード&リンク):3つの商品を買うとき会員券がある場合2割引 無ければ定価で売るプログラムを作りなさい。消費税も5%ととして計算すること
[3] 環境
 [3.1] OS:Win2k
 [3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:無し
for文からおかしいので治してみたりしたのですが
forを無視する、1つしか入力できない、数を入力してもループが終わらないといったバグがでます。
(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。
お願いします
int pr[2];
int a,b,goke,sin;
printf("品物の値段を入力してください\n");
for(a=0;a<=2;a++){
scanf("%d",&a);
goke=pr[a]+goke;
}
printf("会員券があるなら1、ないなら0を入力してください\n");
scanf("%d",&b);
if(b==1){
sin=(float)goke*0.8;
sin=(float)sin*1.05;
}
else if(b==0){
sin=(float)goke*1.05;
}
else{
printf("エラー\n");
}
printf("\\%d",sin);
return 0;

247 :デフォルトの名無しさん:2005/04/21(木) 19:42:11
>>245
LinuxかMacかwindowsかそのほかのUNIXか。

248 :デフォルトの名無しさん:2005/04/21(木) 19:50:06
>>245
テンプレに従え。C++なのかCなのかも分らないので宿題として正答はできない。

249 :デフォルトの名無しさん:2005/04/21(木) 20:04:14
>>246
3つの商品なのにpr[2]ではおかしいでしょ。
prは品物の値段を入れる変数でaは添え字でしょ。
入力された品物の値段をどこに入れるの。
考えてね。



250 :デフォルトの名無しさん:2005/04/21(木) 20:14:11
>forを無視する、1つしか入力できない、数を入力してもループが終わらないといったバグがでます。

for(a=0;a<=2;a++){
scanf("%d",&a);

ループに使ってる a で scanf するな!
っていうか pr[] に scanf に汁!


>(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。

goke 初期化汁!



251 :245:2005/04/21(木) 20:29:26
失礼いたしました。

[1] 授業単元:なし
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:fedora core
 [3.2] コンパイラ(バージョン):不明
 [3.3] 言語:C
[4] 期限:4月末日

252 :デフォルトの名無しさん:2005/04/21(木) 20:41:02
ファイルの入出力のフローチャートがわかりません

253 :デフォルトの名無しさん:2005/04/21(木) 20:43:45
>フローチャート

オhル

254 :デフォルトの名無しさん:2005/04/21(木) 20:44:05
そうですか。

255 :デフォルトの名無しさん:2005/04/21(木) 20:58:29
3つ数を入れてもらって合計数を表示するプログラムですが、
どうも合計数がきちんと表示されません。
以下のどこかだと思いますが、どこがおかしいのでしょうか?

do{
printf("No%d: = ",++y);
scanf("%d",&z);
sum += z;
putchar('\n');}
while(y < 3);

printf("合計値は… : %d です!\n\n",sum);

256 :デフォルトの名無しさん:2005/04/21(木) 21:02:08
[1] 授業単元:プログラミングC言語
[2] 問題文(含コード&リンク):
1.キーボードから整数を入力させ、奇数か偶数かを判定するプログラムを作りなさい。
2.同じく整数を入力させ、素数であるかどうかを判定するプログラムを作りなさい。
[3] 環境
 [3.1] OS:Win2000
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C
[4] 期限:明日朝まで

よろしくお願いします

257 :デフォルトの名無しさん:2005/04/21(木) 21:02:33
>どこがおかしいのでしょうか?

たいていは初期化

258 :デフォルトの名無しさん:2005/04/21(木) 21:04:24
>奇数か偶数かを判定する

if( 数 % 2 )

259 :デフォルトの名無しさん:2005/04/21(木) 21:06:19
>>257
神様!!!できました!!!
=0って宣言しなくても勝手に0が入ると思ってたorz

260 :デフォルトの名無しさん:2005/04/21(木) 21:17:44
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):int string_to_number(char *p):引数として与えられた文字列pの先頭から整数値を取り出して返す関数。ただし先頭が符号でも数字でもなければ0を返す。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン):分かれません
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:特になし


261 :デフォルトの名無しさん:2005/04/21(木) 21:34:07
>ただし先頭が符号でも数字でもなければ

先頭以外に数字以外の別の文字があった場合はどうする?

262 :デフォルトの名無しさん:2005/04/21(木) 21:38:59
>>261
未定義なんだから、別に鼻の穴から悪魔が出てきても(ry

263 :デフォルトの名無しさん:2005/04/21(木) 22:05:41
int string_to_number(char *p){
return atoi(p);
}

264 :207:2005/04/21(木) 22:22:53
>>231

いまポインター関係の本を読んでみてます;
理解するのにちょっと時間がかかりそうですが頑張ります;
ご丁寧にありがとうございました♪

265 :デフォルトの名無しさん:2005/04/22(金) 00:14:59
>>260
#include <ctype.h>

int string_to_number(char *p)
{
  int n = 0, sig = 1;
  
  switch( *p )
  {
    case '+': p++; break;
    case '-': sig = -1; p++; break;
  }
  
  while( isdigit(*p) ){
    n *= 10;
    n += *p - '0';
    p++;
  }

  return n * sig;
}


266 :デフォルトの名無しさん:2005/04/22(金) 00:25:49
>265

intの桁あふれとかは考慮しなくてもいいですか、まぁ宿題レベルだからいいのか

267 :デフォルトの名無しさん:2005/04/22(金) 00:33:16
桁あふれ対策は最初にstrcmpしたらよかろ。

268 :デフォルトの名無しさん:2005/04/22(金) 00:44:52
>267
ハァ?

265 でなら while() で判断、だろ?

269 :デフォルトの名無しさん:2005/04/22(金) 00:59:58
>268
いや、むしろ漏れは 267 の strcmp での対策とやらが知りたい
おながい教えて

270 :デフォルトの名無しさん:2005/04/22(金) 02:45:37
[1] 授業単元:繰り返し処理 for文
[2] 問題文(含コード&リンク): nを与えてn!を計算するプログラムを作成せよ
[3] 環境
 [3.1] OS:windous
 [3.2] コンパイラ(バージョン):VisualC++
 [3.3] 言語:C++
[4] 期限:無期限

お願いします


271 :デフォルトの名無しさん:2005/04/22(金) 02:54:10
>>270
nはいくつまで?

272 :デフォルトの名無しさん:2005/04/22(金) 02:55:39
int aaa(int i) { int ret = 1; for (; i>1; --i) ret*=i; return ret; }

273 :デフォルトの名無しさん:2005/04/22(金) 02:57:39
>>272
unsignedの方がいい

274 :デフォルトの名無しさん:2005/04/22(金) 03:17:19
>>270

#include <iostream>

// 階乗計算関数
template <typename T> T fact(T n)
{
  if( n <= 0 ) return 0;
  T a = 1;
  for( ; n > 0; n-- )
    a *= n;
  return a;
}

// テスト用main
// コマンドライン引数でnを指定
int main(int argc, char **argv)
{
  if( argc < 2 ) return 0;
  int n = atoi( argv[1] );
  std::cout << fact( n )          << std::endl;
  std::cout << fact( (long) n )   << std::endl;
  std::cout << fact( (double) n ) << std::endl;
  return 0;
}

275 :デフォルトの名無しさん:2005/04/22(金) 03:24:36
VCじゃlongもintも同じだ。

276 :デフォルトの名無しさん:2005/04/22(金) 08:18:30
コンパイラ泣かせ
template<unsigned n> inline unsigned f()
{
if (n > 1) {
return n * f<n ? n - 1 : 1>(); //テンプレート引き数がn-1だとダメなのなんで?
}
return 1;
}

277 :デフォルトの名無しさん:2005/04/22(金) 08:23:40
template<unsigned n> inline unsigned f() {return n ? n * f<n ? n - 1 : 1>() : 1;}
書き直したから貼っておこう

278 :デフォルトの名無しさん:2005/04/22(金) 16:26:09
[1] 授業単元: C言語プログラミング
[2] 問題文  標準入力で指定されたファイルからテキストを入力、
       そして標準出力に出力せよ。
       *同じ文字が連続して2回入力されたときには1文字消去して出力せよ。
[3] 環境    
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:今月中
です。
「同じ文字が連続して2回入力されたときには1文字消去して出力せよ」
というところがなかなか出来ません。よろしくお願いします。

279 :デフォルトの名無しさん:2005/04/22(金) 16:28:29
>>278
今月中までなら、もうすこし自分で考えれ。

280 :デフォルトの名無しさん:2005/04/22(金) 16:31:46
>>263
ありがとうございます。そんな簡単な方法があったんだなんて盲点でした。

>>265
まだ習ってない内容も含んでいますが理解できるようがんばりたいです。

281 :デフォルトの名無しさん:2005/04/22(金) 16:41:32
>「同じ文字が連続して2回入力されたときには1文字消去して出力せよ」

3回以上連続している場合はどう解釈すればいい?
a.あくまでも2回ごとに1文字消去 つまり3,4回連続なら2文字になる
b.最初の1文字だけ表示2文字目以降は消去 つまり3,4回連続でも1文字


282 :デフォルトの名無しさん:2005/04/22(金) 17:24:33
[1] 授業単元: わかりません
[2] 問題文(含コード&リンク): わかりません
[3] 環境
 [3.1] OS: わかりません
 [3.2] コンパイラ(バージョン): わかりません
 [3.3] 言語:C/C++/どちらでも可 のいずれか わかりません
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか わかりません
[5] その他の制限: わかりません

よろしくお願いします。

283 :デフォルトの名無しさん:2005/04/22(金) 17:30:25
>>282
よろしくお願いします。

284 :ぼるじょあ ◆yBEncckFOU :2005/04/22(金) 17:35:57
>>282
(・3・)アルェー ボクにもわからないYO!


285 :デフォルトの名無しさん:2005/04/22(金) 17:44:03
>>284
じゃあそれ以外の未解決分お願いします。

286 :デフォルトの名無しさん:2005/04/22(金) 18:20:10
>>274
おーい、factorialは整数のみで定義できる関数だからfloatなどの場合は定義すべきじゃないよ。それは糖だよ。

287 :デフォルトの名無しさん:2005/04/22(金) 18:46:36
>>278
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void output_text (FILE* fin) {
int lc = 0, c = 0;
while ((c = fgetc (fin)) != EOF) if (c != lc) {putchar ((char)c); lc = c;}
}

int main () {
FILE* fin;
char filename[256]; scanf ("%s", filename);
if ((fin = fopen (filename, "r")) == NULL) return EXIT_FAILURE;
else {
output_text (fin);
fclose (fin);
return EXIT_SUCCESS;
}
}

288 :デフォルトの名無しさん:2005/04/22(金) 18:58:58
>>287
> #include <stdlib.h>
> #include <string.h>

イラネ

289 :デフォルトの名無しさん:2005/04/22(金) 19:00:25
>>288
うるせー

290 :デフォルトの名無しさん:2005/04/22(金) 19:01:25
既出問題のまとめサイトってあった方がいいと思う?>ALL

291 :デフォルトの名無しさん:2005/04/22(金) 19:09:02
>>290
約42290レスの中からまとめるの?ご苦労様。
質問する奴らはそんなもの見ないけどな。

292 :デフォルトの名無しさん:2005/04/22(金) 19:10:06
計算間違えたじゃねえか。

293 :デフォルトの名無しさん:2005/04/22(金) 19:26:07
>>291
問題をまとめるとせいぜい1000題以内だと思う。

294 :デフォルトの名無しさん:2005/04/22(金) 19:28:52
>>291
その中から問題と解答だけを抽出するならそれほど時間が掛からないと思う。

295 :デフォルトの名無しさん:2005/04/22(金) 19:32:40
>>294
がんばってくれ。

296 :デフォルトの名無しさん:2005/04/22(金) 19:41:11
>>286
それはわかっているけどね。
ただ巨数になりやすいから、結果をdoubleでも出せるようにしたかっただけ。
n = 10.5 とかでも計算しちゃうけど、それはやらないでねw

あと、テンプレート引数にはしかるべき演算子を定義した巨大数クラスも取れるので、いいじゃん。

297 :デフォルトの名無しさん:2005/04/22(金) 19:48:49
>>296
誤差で13! != 13.0!になったが。

298 :297:2005/04/22(金) 19:52:04
勘違いでした。

299 :デフォルトの名無しさん:2005/04/22(金) 19:54:03
templateでHaskellのクラスのようなものってできないかなぁ。例えば、int,long,char,その他の整数型のみを許す型定義みたいな。

300 :>>299:2005/04/22(金) 19:57:01
SFINAEとかboostのstatic_assertとかでいいんじゃない?

301 :デフォルトの名無しさん:2005/04/22(金) 20:22:37
>>300
SFINAEを使えば継承もできるようですね。おおよそHaskellと似たような事もできることが分りました。
ありがとうございます。

302 :デフォルトの名無しさん:2005/04/22(金) 20:27:25
機能を完全に再現とはいきませんが。

303 :デフォルトの名無しさん:2005/04/22(金) 21:19:48
まとめるのは非常に良いことだが
質問あるたびに誘導ばかりしていると新しいものが生まれないからほどほどに

304 :278:2005/04/22(金) 22:16:00
>>281さん
b.最初の1文字だけ表示2文字目以降は消去 つまり3,4回連続でも1文字
のほうでお願いします。


305 :278:2005/04/22(金) 22:19:54
すいません!287さんのレスを見落としていました。
ありがとうございます!
頭が悪いのでパット見分からないのですが、考えてみます!


306 :デフォルトの名無しさん:2005/04/22(金) 22:37:20
>>290
俺みたいにこのスレをみて実力ためしに問題といてる人間にとっては
勉強になります。ぜひまとめサイト御願いします。m(_ _)m


307 :デフォルトの名無しさん:2005/04/22(金) 23:04:29
漏れも疑問に思ったんだが、>276は何故?

308 :デフォルトの名無しさん:2005/04/22(金) 23:17:46
>>307
f<0>が実体化された時点で、f<(unsigned)-1>も実体化されるから

309 :デフォルトの名無しさん:2005/04/22(金) 23:26:21
>>308
_gadad `ifdjd

310 :デフォルトの名無しさん:2005/04/22(金) 23:37:26
#include <iostream>

template <int n> struct factorial
{
    enum {value = n * factorial<n-1>::value};
};
template <> struct factorial<0>
{
    enum {value = 1};
};

int main()
{
    std::cout << factorial<6>::value;
}

311 :デフォルトの名無しさん:2005/04/23(土) 01:18:02
戻り値無しかよ

312 :デフォルトの名無しさん:2005/04/23(土) 01:19:19
すてき

313 :デフォルトの名無しさん:2005/04/23(土) 01:24:46
>>311
ISO/IEC 14882:1998 3.6.1 Main function -5
... If control reaches the end of main without encountering a return
statement, the effect is that of executing "return 0;"

314 :デフォルトの名無しさん:2005/04/23(土) 01:32:31
>>308
さらに f<(unsigned)-2>, f<(unsigned)-3> ...
と実体化されてゆき、コンパイルが破綻するから。
もしくはコンパイルを破綻させないために設定してある
テンプレートの深さの制限を超えるから。

315 :デフォルトの名無しさん:2005/04/23(土) 01:40:00
#include<iostream.h>

template< unsigned n > unsigned
f() {
return n * f< n - 1 >();
}

template<> unsigned
f< 0 >() {
return 1;
}

int main() {
std::cout << f< 6 >();
}

316 :307:2005/04/23(土) 01:44:50
>>308
THX!
評価の前に実体化しなきゃならんってことかな。

317 :デフォルトの名無しさん:2005/04/23(土) 01:45:58
>>316
そういうこと
評価はランタイム、実体化はコンパイルタイム

318 :307:2005/04/23(土) 01:46:10
>>314
そっちはgccでコンパイルすると一目瞭然だった。

319 :デフォルトの名無しさん:2005/04/23(土) 11:12:46
>>314
へー、それは新たに追加されたってこと?


320 :278:2005/04/23(土) 13:15:44
>>287さんのプログラムを実行させてもらいましたが、
入力後何も表示されないのですが、何か足りない部分とかありますか?

321 :デフォルトの名無しさん:2005/04/23(土) 15:06:21
>>320
あんたの頭。
それはさておき、入力後すぐにプログラムが終了しているなら入力したファイル名をフルパスにして再挑戦してみよ。

322 :デフォルトの名無しさん:2005/04/23(土) 15:07:12
>>319
何が何に追加されたと思って質問しているのかね。

323 :デフォルトの名無しさん:2005/04/23(土) 16:05:29
[1] 授業単元: 数値計算プログラミング
[2] 問題文(含コード&リンク):
1.正の整数を素数の積に分解する、素因数分解のプログラムを作成。
  負の整数を入れると終了するようにする。
2.二次方程式ax^2+bx+cの解を求めるプログラムを作成。(a≠0)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月23日23:59
[5] その他の制限: 特にありません。

他の問題は何とかできましたが、この2題がわかりません。
知恵を貸してください。よろしくお願いします。

324 :デフォルトの名無しさん:2005/04/23(土) 16:58:29
#include <stdio.h>

void print_factors(int n)
{
  int i = 2;
  while(1)
  {
    if(n % i == 0)
    {
      printf("%d", i);
      if((n /= i) <= 1)
        break;
      i = 2;
      printf("*");
    }
    else
      i++;
  }
  printf("\n");
}

int main()
{
  int n;
  while(scanf("%d", &n) > 0 && n > 0)
    print_factors(n);
}

325 :324:2005/04/23(土) 17:03:24
訂正
int main() -> int main(void)

326 :デフォルトの名無しさん:2005/04/23(土) 17:15:40
>>322
すまんまちがえた>>314じゃなくて>>313ですた
んで、これは>>313はこの版のCからそうなったの?それともずいぶん前から?


327 :デフォルトの名無しさん:2005/04/23(土) 17:18:33
#include <math.h>
#include <errno.h>
#include <stdio.h>

int main(void)
{
  double a, b, c, det;
  printf("a:");
  scanf("%lf", &a);
  printf("b:");
  scanf("%lf", &b);
  printf("c:");
  scanf("%lf", &c);

  det = b * b - 4 * a * c;
  if(det > 0)
    printf("%f, %f", (- b + sqrt(det)) / (2 * a), (- b - sqrt(det)) / (2 * a));
  else
    printf("%f+%fi, %f-%fi", - b / (2 * a), sqrt(-det) / (2 * a), - b / (2 * a), sqrt(-det) / (2 * a));
  if(errno)
  {
    fprintf(stderr, "An error ocurred.");
    return 1;
  }
}

328 :デフォルトの名無しさん:2005/04/23(土) 17:20:05
>>326
>>313はc++。
c99にも同様の規定がある。

329 :デフォルトの名無しさん:2005/04/23(土) 17:28:01
>>326
>313はC++。

330 :デフォルトの名無しさん:2005/04/23(土) 17:46:40
>>324さん

素早い回答ありがとうございます。
すみません、質問なのですが

while(scanf("%d", &n) > 0 && n > 0)

のscanfの部分をnに変えてしまってはマズイでしょうか?
whileの条件の中にscanfというのは使った事がなくわかりません。

プリント文で値は?と質問した後に、入力させる方式にしたいと思っています。

331 :デフォルトの名無しさん:2005/04/23(土) 17:54:56
>>330
少しは自分でやったり考える心は無いのか

332 :デフォルトの名無しさん:2005/04/23(土) 17:55:11
>>330
その部分は、
「まずscanfを実行し、エラーがなく、且つnが正の場合に…」と読む。
書き換えたいなら、新しい入力関数
int input(void)
{
int n;
printf("?");
scanf("%d", &n);
return n;
}
を用意して
while((n = input()) > 0) ...
とするか、breakを使って、
while(1)
{
int n;
printf("?");
scanf("%d", &n);
if(n < 0) break;
print_factors(n);
}
とすれば良い。(scanfのエラーチェックは省いた)

333 :デフォルトの名無しさん:2005/04/23(土) 17:58:27
>>331
スミマセン、考えても分からなかったもので…。

>>332
丁寧にありがとうございます。
break文を用いた方法でやってみたいと思います。
>>327もそうですよね?
本当にありがとうございました。

334 :デフォルトの名無しさん:2005/04/23(土) 23:30:20
すいません、どなたかお願いいたします。

fh=CreateFile(szFn,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン

lpBuf=GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保

ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL);

lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER));

offset=*(LPDWORD)(lpBuf+10); // ビットマップまでのオフセット
lpBMP=lpBuf+offset; // ビットマップバッファのポインタ

CloseHandle(fh);

これでビットマップを二つ読み込んで重ねてマスク部分を透過させているのですが
横幅が奇数などになるとうまく透過させることができません。
重ね方は3バイト見ていって0xff 0x00 0xffだったら描画しないとしています。
4の倍数じゃないとうまく表示されないのはわかっているのでがうまくできないのです。

どなたかいいサイト、参考書、やり方などご教授お願いします;;

335 :デフォルトの名無しさん:2005/04/24(日) 00:08:23
>>334
宿題なのか?

336 :デフォルトの名無しさん:2005/04/24(日) 00:30:43
>>335
宿題なんです つwT

337 :デフォルトの名無しさん:2005/04/24(日) 07:41:24
> ――【注意点】―――――――――――――――――――――――――
> ・質問は必ず【質問テンプレ】に従ってください。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
> ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
> ・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
> ・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
> ―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:


338 :デフォルトの名無しさん:2005/04/24(日) 12:45:53
>>328-329
ありがと

339 :デフォルトの名無しさん:2005/04/24(日) 20:45:24
>>337
テンプレ厨は邪魔だから氏ねよ

340 :デフォルトの名無しさん:2005/04/24(日) 20:53:43
>>339-340
とりあえずこの書き込みも邪魔

341 :デフォルトの名無しさん:2005/04/24(日) 21:04:40
>>339の方がよっぽど邪魔で死んで欲しい

342 :デフォルトの名無しさん:2005/04/24(日) 21:06:54
>>341
pgr

343 :以下、名無しにかわりましてVIPがお送りします:2005/04/24(日) 21:10:36
                  こんちは〜、「最強かつ最狂の浮動票集団」ニュー速VIPです。
  / ̄ ̄ ̄ ̄ ̄\      承知のとおり、5/8(日)はJr板と対戦することになりました。
 ノ´          `ヽ    対戦日は、素晴らしい豪脚でν速を叩きのめした競馬板をも超える
ノ     /'''ヽヽ    ヽ    強力で激しいラシの嵐でJr板を沈める所存であります。
|     /    ヽヽヽ  ヽ   そういうわけで、皆さんの変わらぬご愛顧のほどよろしくお願いします。
|     /   `ヽ| |´ヽ ヽ    なお、支援物資(特におっぱい)がありましたら、いつでもうpして下さい。
|  |  ‐‐―¬ ー―‖
|  ⊂        」    ||     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |ノ  \    <^> / |   <  こんなところにいてなんだけど、VIPクオリティってなに?
 | ∧ \ _____^_//レ      \________________________
 レ´| ノ\;;;;;;;;;∀;ヽ
   |_  \;JPN;;|ア     ●2ちゃんねる全板人気トーナメントinVIP●
 .  | |\ |;;12;;/||      http://ex10.2ch.net/test/read.cgi/news4vip/1114265328/

★ 全ての板にVIPクオリティを in ニュー速VIP ★

344 :以下、名無しにかわりましてVIPがお送りします:2005/04/24(日) 22:35:45
ご無沙汰しております、「最強かつ最狂の浮動票集団」ニュー速VIPです。
他の組の対戦を見て、いよいよ我々も悠長に構えていられなくなりました。
対戦日は、競馬板が豪脚でν速を差しきってしまったので、
我々は「韋駄天」ことサイレンススズカのような怒涛の逃げでJr板を沈める所存であります。

そういう訳で、皆さんの変わらぬご愛顧のほどよろしくお願いします。
支援物資(特におっぱい)がありましたら、いつでもうpして下さい。
あなたのおっぱいが、ひょっとしたら勝ちぬけの突破口になるかもしれません。

      ∧_∧   ∧_∧     ┌──────────────
    (゙゙ヽ ´∀`)')('(´∀` /゙゙) )) < グローバルVIPクオリティ!!!
  ((  \    / ヽ    /    .└──────────────
     ((⌒)  (   )  (⌒))
      ``ヽ_,)  (,__,ノ゙

● 2ch全板人気トーナメント in VIP ●
http://ex10.2ch.net/test/read.cgi/news4vip/1114348627/

★ 全ての板にVIPクオリティを in ニュー速VIP ★

345 :デフォルトの名無しさん:2005/04/24(日) 22:36:53
[1] C言語
[2] BM法のアルゴリズムを説明せよ
[4] 4/25

    よろしくお願いします


346 :デフォルトの名無しさん:2005/04/24(日) 22:43:18
>>345
却下

347 :デフォルトの名無しさん:2005/04/24(日) 23:39:36
[1] 授業単元: ―
[2] 問題文(含コード&リンク): 日本経済を立て直せ
[3] 環境
 [3.1] OS: 代議制
 [3.2] コンパイラ(バージョン): ―
 [3.3] 言語: 日本語
[4] 期限: 早急
[5] その他の制限: 右傾・左傾は不可

348 :デフォルトの名無しさん:2005/04/24(日) 23:41:08
>>347
今が日本の実力。
バブルが異常だっただけだ。

349 :デフォルトの名無しさん:2005/04/25(月) 00:33:52
糞みたいな問題ですみません。
1行3列の行列Aと3行7列のBを掛けて1行3列のCを出力したいんですけど、
C=AB 550 462 480になったんですけど、結果違いますよね。
どこが違うか教えてくれますか? C++です
#include <stdio.h>

#define L 1
#define M 3
#define N 7

350 :デフォルトの名無しさん:2005/04/25(月) 00:34:22
int main(void)
{
int i, j, k;
int ma[L][M] = {55,42,30};
int mb[M][N] = {{1,0,1,0,2,3,3},{1,0,0,1,3,2,4},{0,1,1,1,4,3,6}};
int mc[L][M] = {0};

for(i = 0;i < L;i++){
for(j = 0;j < M;j++){
for(k = 0;k < N;k++)
mc[i][j] += ma[i][j] * mb[j][k];
}
}

351 :デフォルトの名無しさん:2005/04/25(月) 00:35:00
puts("A=");
for (i = 0; i < L; i++){
for (j = 0; j < M; j++)
printf("%6d ", ma[i][j]);
putchar('\n');
}
puts("B=");
for (j = 0; j < M; j++){
for (k = 0; k < N; k++)
printf("%6d ", mb[j][k]);
putchar('\n');
}
puts("C=AB");
for (i = 0; i < L; i++){
for (j = 0; j < M; j++)
printf("%6d ", mc[i][j]);
putchar('\n');
}
return(0);
}

352 :デフォルトの名無しさん:2005/04/25(月) 00:42:57
>>349
1行3列と3行7列をかけたら1行7列じゃねえの?

353 :デフォルトの名無しさん:2005/04/25(月) 01:44:51
[1] 授業単元: 秘密
[2] 問題文(含コード&リンク): 40桁の数を素因数分解するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: 秘密
[5] その他の制限: 任意の多倍長整数演算ライブラリを使用しても良い。自作もOK。

354 :デフォルトの名無しさん:2005/04/25(月) 01:58:14
>>353
氏ね

355 :デフォルトの名無しさん:2005/04/25(月) 02:02:12
>>354
どうかお願いします

356 :デフォルトの名無しさん:2005/04/25(月) 02:05:55
>>353
UBASICでも入れてリストをそのまま多倍長クラスにでも移せ。

UBASIC
ttp://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm
ここにいろいろな素因数分解プログラムがあるから、せっせと移植すれ。

357 :デフォルトの名無しさん:2005/04/25(月) 02:06:58
>>356
どうかCのプログラムとして完成させてください。

358 :デフォルトの名無しさん:2005/04/25(月) 08:40:12
>>353
随分秘密が多いな。

任意の多倍長整数演算ライブラリを使用していいんだろ?
だったらそれを使えば後はどっかで素因数分解のソースを探せばいいだけじゃん。

359 :353:2005/04/25(月) 17:38:20
多倍長整数演算については自分でなんとかしますので、
int型を使った整数演算で数体ふるい法を使った素因数分解のプログラムを教えてくださいませんか?

360 :353:2005/04/25(月) 17:39:56
取り合えず、本屋で素因数分解と素数判定という本を買って勉強していますが…

361 :デフォルトの名無しさん:2005/04/25(月) 17:40:56
素因数分解のソースも>>356に貼っておいたのに・・・・
仕事に使うんだったら、金払って誰か他の人に頼めよ。

362 :デフォルトの名無しさん:2005/04/25(月) 17:56:32
>>361
仕事ではありません。
大学の課題です。

363 :デフォルトの名無しさん:2005/04/25(月) 18:24:09
そういえば、まとめページの話はどーなったのだらう。
期待しているのだが。

364 :デフォルトの名無しさん:2005/04/25(月) 18:28:24
>>362
この当たりのソースはどうだ?C言語で書かれていて、一般数なら120桁まで
求められそうだが。
http://www.math.ttu.edu/~cmonico/software/ggnfs/

General Number Field Sieve source code でぐぐれば無数に見つかるぞ。
上のは一番最初に出てきたやつ。

365 :デフォルトの名無しさん:2005/04/25(月) 18:49:35
>>363
まとめ中。
忙しいので後回しにしているが、需要があったんだな。
Wikiでいいよね。

ところで、WEBページ用にどの無料鯖を使えばいいだろうか。オススメってある?


366 :デフォルトの名無しさん:2005/04/25(月) 19:34:32
1] 授業単元: プログラミング技術
[2] 問題文:
@フィナボッチ数を20番まで求め、配列に格納し、その後に印字するプログラムを作成せよ。なお、出力は10個ごとに改行せよ。
A40以下入力データを引き数にして、フィナボッチ数を求める部分を関数とするプログラムを作成せよ。
[3] 環境
 [3.1] OS: Win Xp
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月28日まで/無期限
[5] その他の制限: 特になし
高校の宿題なのですが自分にはさっぱりで困っています・・
こんなへたれな自分に救いの手をおねがいします・




367 :デフォルトの名無しさん:2005/04/25(月) 20:13:49
>>366
#include <stdio.h>
#define K0 0
#define K1 1

void fib(int n, int buf[], int size)
{
  int end = n < size ? n : size;
  int i = 0;
  if( n > 1 ) buf[ i++ ] = K0; else return;
  if( n > 2 ) buf[ i++ ] = K1; else return;
  for( ; i < end; i++ )
    buf[ i ] = buf[ i - 1 ] + buf[ i - 2 ];
}

void print(int buf[], int size)
{
  int i;
  for( i= 0; i < size; i++ )
    printf("%d%c", buf[i], i % 10 == 9 ? '\n' : ' ');
}

#define N 40
int main()
{
  int buf[N];
  fib( N, buf, N );
  print( buf, N );
  return 0;
}

368 :367:2005/04/25(月) 20:17:12
しまった、出題にちゃんと答えてないや。

369 :367:2005/04/25(月) 20:19:08
ん、まてよ。

Aは >> 367 の fib でいいよな。
@はどうだろうな。 >> 367 のNを20にすれば一応望みの出力結果は出るが。

370 :367:2005/04/25(月) 20:34:42
そして、訂正


> if( n > 1 ) buf[ i++ ] = K0; else return;
> if( n > 2 ) buf[ i++ ] = K1; else return;


> if( end > 1 ) buf[ i++ ] = K0; else return;
> if( end > 2 ) buf[ i++ ] = K1; else return;


371 :デフォルトの名無しさん:2005/04/25(月) 20:55:51
>>365
さんくす&おつされさま。
一応、答える側だったりするんで・・・まとめページのどこそこ参照とかやれるといいなと。
それに、良い問題&良い回答って勉強になる。

Wikiでいいんじゃないかしらん。
Wikiの使えるよさげな無料鯖はわからん。(すまん)

372 :デフォルトの名無しさん:2005/04/25(月) 21:00:45
>>366
void fibStep (int* u, int* v) {int tmp; tmp=*u; *u=*v; *v=tmp+*v;}
int* fibAux (int* m, int* u, int* v, int n) {
if (n == 0) {*u = 0; *v = 1; *m=*u; return m+1;}
else {int* tmp; tmp = fibAux (m+1, u, v, n-1); fibStep (u, v); *m = *u; return tmp;}}
int* fib (int* m, int n) {int u, v; return fibAux (m, &u, &v, n);}

int main () {
int a[100], *iter, *endp;
endp = fib (a, 6);
for (iter = a; iter != endp; ++iter) printf ("%d ", *iter);
//for (iter = endp-1; iter != a-1; --iter) printf ("%d ", *iter);
return 0;
}


373 :デフォルトの名無しさん:2005/04/25(月) 21:29:26
>>367
同じ計算を何度もするから効率悪い。
>>372は改善している

374 :デフォルトの名無しさん:2005/04/25(月) 21:37:08
>>373
どの部分?

375 :デフォルトの名無しさん:2005/04/25(月) 21:40:45
(●´ー`●)*20

376 :デフォルトの名無しさん:2005/04/25(月) 21:47:52
#include <stdio.h>

void *for_each(void *begin, void *end, void*(*f)(void*))
{
  while(begin < end) begin = (*f)(begin);
  return begin;
}

void *fib_int(void *n)
{
  int *p = n;
  *p = *(p-1) + *(p-2);
  return ++p;
}

void *print(void *n)
{
  int *p = n;
  printf("%d ", *p);
  return ++p;
}

#define N 40
int main()
{
  int a[N], *it;
  a[0]=0; a[1]=1;
  for_each(a+2, a+N, fib_int);
  for(it=a; it<a+N; it=for_each(it, it+10, print), putchar('\n'));
  return 0;
}


377 :デフォルトの名無しさん:2005/04/25(月) 22:04:10
>>373
372のほうが、再起コールでオーバーヘッドあるように見える。

378 :デフォルトの名無しさん:2005/04/25(月) 22:13:22
実測しました。
>>367 > >>372
その差2倍

379 :デフォルトの名無しさん:2005/04/25(月) 22:16:12
>>365
乙+期待している


380 :377:2005/04/25(月) 22:16:46
あー、そういうことか、わかった。
kn-1 と kn-2 のとり方ね。

381 :デフォルトの名無しさん:2005/04/25(月) 23:45:13
>>378
それほんと?
計ってみたら>>372の方が10倍くらい時間かかってるんだけど。

382 :デフォルトの名無しさん:2005/04/25(月) 23:53:06
>>381
コンパイル環境によるんだろうな。

383 :デフォルトの名無しさん:2005/04/26(火) 00:28:18
最適化…

384 :デフォルトの名無しさん:2005/04/26(火) 00:40:04
まあ、>>378>>381 の結果はどうなのかよくわからんが
>>372は最適化よりも関数呼び出しのオーバーヘッドの方が大きいと思う。

385 :デフォルトの名無しさん:2005/04/26(火) 00:41:49
Cに末尾再帰が実装されるのはいつですか

386 :デフォルトの名無しさん:2005/04/26(火) 00:53:00
>>353
MathematicaでMathLinkを使うのが早い。

387 :デフォルトの名無しさん:2005/04/26(火) 01:37:19
もまいら、つっこみ所はそこぢゃない
>フィナボッチ

>フィナボッチ の検索結果のうち 日本語のページ 約 672 件中 1 - 20 件目 (0.11 秒)

...orz

388 :デフォルトの名無しさん:2005/04/26(火) 02:01:42
>>387
>>367が見逃した時点で皆スルーやね

>>366
現在、コンパイル出来る環境でないので、通るか分からんが…

#include <stdio.h>
#include <stdlib.h>
#define COUNT 20
#define LIMIT 40
typedef unsigned int Fibonacci;
typedef Fibonacci *FibTable;

void Ans002sub(FibTable Table,size_t Size){Fibonacci i,j;
  for(i=j=1,*Table=0;Table++,--Size;j+=i,i=*Table)*Table=j;return;}

FibTable Ans002(size_t Size){FibTable Table=NULL;
  if(Size&&Size<=LIMIT&&(Table=malloc(sizeof(*Table)*Size)))
    Ans002sub(Table,Size);return Table;}

void Ans001sub(FibTable Table,size_t n){size_t Index;
  for(Index=0;Index<n;Index++)
    printf("%d%s",Table[Index],(Index%10!=9)?", ":"\n");return;}

void Ans001(){FibTable Table;size_t Count=COUNT;
  if((Table=Ans002(Count))){
    Ans001sub(Table,Count);free(Table);}else printf("error\n");return;}

int main(){Ans001();return 0;}

389 :デフォルトの名無しさん:2005/04/26(火) 02:18:46
@
int n,f[20+1];
f[1]=f[2]=1;
for(n=3; n<=20; ++n) f[n]=f[n-2]+f[n-1];
for(n=1; n<=20; ++n) printf(" %4d%s", f[n], (n%10)?"":"\n");


A
#define LIMIT 40
unsigned long fib(int n)
{
static unsigned long f[LIMIT+1]={0};
if(n>LIMIT) return 0;
if(n<=2) return f[2]=f[1]=1;
return (f[n])?f[n]:(f[n]=fib(n-2)+fib(n-1));
}


390 :デフォルトの名無しさん:2005/04/26(火) 03:06:31
>>388
>void Ans002sub(FibTable Table,size_t Size){Fibonacci i,j;
>  for(i=j=1,*Table=0;Table++,--Size;j+=i,i=*Table)*Table=j;return;}

何かおかしいような気がして見直してみたら、ミスってた…という訳で
void Ans002sub(FibTable Table,size_t Size){Fibonacci i,j;
  for(j=1,*Table=i=0;Table++,--Size;j+=i,i=*Table)*Table=j;return;}

で、多分こうした方が早そうな気も…と言っても殆ど変わらないと思うけど…
void Ans002sub(FibTable Table,size_t Size){Fibonacci i;
  for(i=1,*Table=0;Table++,--Size;i+=*(Table-1))*Table=i;return;}

391 :デフォルトの名無しさん:2005/04/26(火) 03:16:23
良くあるネタとして
#include <stdio.h>
#define N01 0
#define N02 1
#define N03 N01 + N02
#define N04 N02 + N03
#define N05 N03 + N04
#define N06 N04 + N05
#define N07 N05 + N06
#define N08 N06 + N07
#define N09 N07 + N08
#define N10 N08 + N09
#define N11 N09 + N10
#define N12 N10 + N11
#define N13 N11 + N12
#define N14 N12 + N13
#define N15 N13 + N14
#define N16 N14 + N15
#define N17 N15 + N16
#define N18 N16 + N17
#define N19 N17 + N18
#define N20 N18 + N19
int main(){
printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",N01,
N02,N03,N04,N05,N06,N07,N08,N09,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20);
return;}

392 :デフォルトの名無しさん:2005/04/26(火) 03:25:40
template< unsigned n > unsigned
f() {
return f< n - 1 >() + f< n - 2 >();
}
template<> unsigned
f< 1 >() {
return 1;
}
template<> unsigned
f< 2 >() {
return 2;
}

C++ なのが難点

393 :デフォルトの名無しさん:2005/04/26(火) 08:43:51
横槍入れるけどごめん。
くだ質に書こうと思ったけど、ココの方が確実な気がしたので質問させて下さい。

C++で多次元配列を引数にする方法って何かありますか?
多次元と言うか、2次でいいんですが。
int *A[] ってポインタ化しないと無理ですかね?

394 :デフォルトの名無しさん:2005/04/26(火) 08:53:34
>>393
構造体やクラスのメンバに配列を持てばできる
ただしオーバーヘッドはでかくなると思うぞ

395 :デフォルトの名無しさん:2005/04/26(火) 09:34:27
>>393
vectorのvectorにしたら?

>>394
とは言え、でかいか?

396 :デフォルトの名無しさん:2005/04/26(火) 10:38:48
>>393
void foo(const int (&array)[5][8])
{
}

397 :393:2005/04/26(火) 10:55:00
>>394,395,396
レスさんくすこ。
とりあえずstructで作り始めてみましたが、あんまりよくないかな。
作るだけなら楽な道だと思いますが。一度出来たらいろいろ試してみます。
ありがとうございました。

398 :デフォルトの名無しさん:2005/04/26(火) 11:42:24
>>353
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/333.c
やっつけ。atoiさえ何とかすればstdio.hのみでいける。

2,3,5,7,9,11,13,15,17…
と2と3以降の奇数で割り切れているかどうかで調べているので
効率が悪い。20桁近くの2つの素数からなる合成数とかまず_
あとエラー処理は全く考えてない。

399 :デフォルトの名無しさん:2005/04/26(火) 16:56:44
>>394
そこでconst参照ですよ。

400 :デフォルトの名無しさん:2005/04/26(火) 17:21:36
>>398
決定性アルゴリズムではまず無理だ。
20桁以上だと確率的なアルゴリズムを考えないとダメ。

401 :デフォルトの名無しさん:2005/04/26(火) 18:48:18
http://pc8.2ch.net/test/read.cgi/tech/1112845322/714
暇つぶしにやってみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/335.txt

402 :デフォルトの名無しさん:2005/04/26(火) 21:06:01
[1] 授業単元: 離散数学
[2] 問題文(含コード&リンク): 最大公約数を求める関数を作成せよ
[3] 環境
 [3.1] OS: Vine linux 3.0
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: 4/27
[5] その他の制限: 特にありません。

403 :デフォルトの名無しさん:2005/04/26(火) 21:11:19
>>402
int GCD(int a,int b){
return a?f(b%a,a):b;
}

404 :デフォルトの名無しさん:2005/04/26(火) 21:12:29
ユークリッドハァハァ

405 :デフォルトの名無しさん:2005/04/26(火) 21:18:05
f()?

406 :デフォルトの名無しさん:2005/04/26(火) 21:22:42
きっとfは関数ポインタでGCDが入ってるんだよ!な?な?

407 :デフォルトの名無しさん:2005/04/26(火) 21:26:57
>>402
int gcd (int a, int b) {
int g, c, e = 0;
while (a&1 + b&1 == 0) {a = a>>1; b = b>>1; e++;}
while (a&1 == 0) a = a>>1;
while (b&1 == 0) b = b>>1;
while (b != 0 && b != 1) {
c = (a-b); c = c>=0?c:-c;
a = a>=b?b:a;
b = c; while (b&1 == 0) b = b>>1;
}
if (b == 0) g = a * power (2, e);
if (b == 1) g = power (2, e);
return g;
}

408 :407:2005/04/26(火) 21:28:28
int power (int a, int b) {
int n = 1;
while (b) {if (b&1) n = n*a; b = b >> 1; a = a*a;}
return n;
}

409 :403:2005/04/26(火) 21:28:34
ごめwww

int GCD(int a,int b){
return a?GCD(b%a,a):b;
}

(/ω\)ハズカシーィ

410 :デフォルトの名無しさん:2005/04/26(火) 21:31:01
40桁くらいならρ法か2次篩法を勧める。

411 :デフォルトの名無しさん:2005/04/26(火) 22:57:30
>>365がアルゴリズム集を作ってくれる件について

412 :デフォルトの名無しさん:2005/04/26(火) 23:10:46
>>385
末尾再帰自体は昔からCでできますが何か?

413 :デフォルトの名無しさん:2005/04/26(火) 23:16:41
[1] 授業単元: アルゴリズム論演習
[2] 問題文(含コード&リンク): 1+1/2^2+1/3^2+・・・+1/1000^2
を計算せよ。


[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月27日
[5] その他の制限: 特になし。

どなたかご教授下さい。



414 :デフォルトの名無しさん:2005/04/26(火) 23:36:40
>>413
double f (int n) {
if (n <= 1) return 1.0;
else {return 1.0/((double)(n*n))+f (n-1);}
}
int main () {
printf ("%lf\n", f (1000));
return 0;
}


415 :デフォルトの名無しさん:2005/04/26(火) 23:37:28
>>412
Cに末尾再帰最適化が実装されるのはいつですか

416 :413:2005/04/26(火) 23:42:42
>>414 
ご回答ありがとうございます。
初心的な質問ですが、プログラムの頭に
#include <stdio.h>
は必要ないのですか?

417 :デフォルトの名無しさん:2005/04/26(火) 23:46:02
>>416
必要

418 :デフォルトの名無しさん:2005/04/26(火) 23:49:19
>>416
必要だと思えばつけよ。
ここの回答が、常に完全な形で与えられると思うな。

419 :デフォルトの名無しさん:2005/04/26(火) 23:50:20
%lfは間違い。

420 :デフォルトの名無しさん:2005/04/27(水) 00:06:06
419 晒し age

421 :デフォルトの名無しさん:2005/04/27(水) 00:50:42
#include<stdio.h>
double f1(int);
double f2(int);

int main(int argc,char **argv){
double a=f1(1000),b=f2(1000);
printf("%.16f\n%.16f\n%.16e\n",a,b,a-b);
return 0;
}

double f1(int n){/* 大きい方から足す */
double sum=0;
int i;
for(i=1;i<n+1;i++)
sum=sum+1.0/((double)i*(double)i);
return sum;
}

double f2(int n){/* 小さい方から足す */
double sum=0;
int i;
for(i=n;i>0;i--)
sum=sum+1.0/((double)i*(double)i);
return sum;
}
ふと気になって書いてみたけど1.5e-15程度の誤差しか出なかった。
>>413の出題者がこれをねらいにしてるわけじゃなさそうだから
他ので大丈夫だとは思うが

422 :デフォルトの名無しさん:2005/04/27(水) 01:06:03
> sum=sum+1.0/((double)i*(double)i);

sum=sum+1.0/((double)i*i); でいいべ

423 :デフォルトの名無しさん:2005/04/27(水) 01:37:39
[1] 授業単元: 情報工学実験2
[2] 問題文(含コード&リンク): ポインタを使い動的に配列を確保する方法を利用して、
  プログラム実行時に頂点数を柔軟に指定できるようにプログラムを改良せよ。
  ヒント n*n個の値を格納するためには、int graph[n*n]として宣言された配列があれがよい
      無向グラフであればn*nの配列の約半分は不要である。
      ループした辺を認めないのであれば、対角成分は常に偽となる。
[3] 環境
 [3.1] OS: WINXP
 [3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5.1
 [3.3] 言語:Cでお願いします。
[4] 期限:4月27日17時


424 :423:2005/04/27(水) 01:38:20
プログラム
#include <stdio.h>
#include <stdlib.h>
#define NMAX 10
#define FALSE 0
#define TRUE 1
void inputgraph(int *n1, int graph[NMAX+1][NMAX+1])
{
int i, j, n,k;
puts ("input the number of vertices:");
if (scanf("%d%*[^\n]", &n) != 1 || n > NMAX)
{
n = 0;
*n1 = n;
return;
}
*n1 = n;
for(i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
graph[i][j] = FALSE;
puts("input the numbers of two vertices connected by a side:");
while (scanf("%d%d%d%*[^\n]", &i, &j, &k) == 3)
{
graph[i][j] = k;
graph[j][i] = k;
}
}


425 :423:2005/04/27(水) 01:39:01
/*
print the graph data
*/
void print_graphdata(int n, int graph[NMAX+1][NMAX+1])
{
int i, j;
puts("graph data: graph(i,j)=F/T");
for (i = 1; i <= n; i++) {
printf("%3d",i);
for (j = 1; j <= i; j++) {
if (graph[i][j])
fputs(" T",stdout);
else
fputs(" F",stdout);
}
puts("");
}
fputs(" ",stdout);
for (i = 1; i <= n; i++) printf("%3d",i);
puts("");
}


426 :423:2005/04/27(水) 01:40:46
/*
main program
*/
int main()
{
int graph[NMAX + 1][NMAX + 1];
/*
graph[i][j] = 1 if the vertices i, j are connected and
graph[i][j] = 0 otherwise
*/
int n; /* number of vertices */

inputgraph(&n, graph); /* input "n" and "graph[i][j]" */
/* printf("n = %d\n", n);*/
print_graphdata(n, graph);

return EXIT_SUCCESS;
}
長文失礼しました。
よろしくお願いします。


427 :デフォルトの名無しさん:2005/04/27(水) 02:52:26
[1] C言語
[2] N*Nの魔法陣を作成せよ。(ただし、Nは奇数とする
[3] 環境
 [3.1] Unix
 [3.2] gcc
 [3.3] C
[4] 期限:できるだけ早く

2次元配列に斜めに代入していき、配列がblankならその下の配列に移動して、、、というやり方
らしいのですが、さっぱりです。ソースを書いていただけるとうれしいです。

428 :デフォルトの名無しさん:2005/04/27(水) 03:15:23
#include<stdio.h>
#define N 3

int main(int argc,char **argv){
int a[N][N],b=N/2,c=N/2+1,d=1,i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a[b++][c++]=d++;
b%=N;c%=N;
}
c=(c+1)%N;b=(b+N-1)%N;
}
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%3d ",a[j][i]);
printf("\n");
}
return 0;
}

429 :427:2005/04/27(水) 03:27:37
>> 428 激しく、超感謝です。まじで、本当にありがとうございました。

430 :デフォルトの名無しさん:2005/04/27(水) 03:56:32
>>423
何をしたいのか意味が分からんので
ヒントは無視して、ソースから適当に判断したから
検討違いだったらスマソ
あと、コンパイル&実行してないからミスってるかも知れんので
エラーが出たら自分で直してね

#include <stdio.h>
#include <stdlib.h>
#define NMAX 10

int *inputgraph(){
  int i,j,k,n,*p=NULL;
  puts("input the number of vertices:");
  if((scanf("%d%*[^\n]",&n)==1)&&n<=NMAX){
    if((p=calloc(n*n+1,sizeof(*p)))){
      *p=n;
      puts("input the numbers of two vertices connected by a side:");
      while(scanf("%d%d%d%*[^\n]",&i,&j,&k)==3)
        if(--i<NMAX&&--j<NMAX)p[i*n+j+1]=k,p[j*n+i+1]=k;}}
  return p;}

431 :デフォルトの名無しさん:2005/04/27(水) 03:57:23
void print_graphdata(int *p){
  int i,j,n;
  n=*p;
  puts("graph data: graph(i,j)=F/T");
  for(i=0;i<n;i++){
    printf("%3d",i+1);
    for(j=0;j<i;j++)fputs(p[i*n+j+1]?" T":" F",stdout);
    puts("");}
  fputs(" ",stdout);
  for(i=0;i<n;i++)printf("%3d",i+1);
  puts("");
  return;}

int main(){
  int n,*p;
  n=-1;
  if((p=inputgraph()))print_graphdata(p);
  if(p){
    n=EXIT_SUCCESS;
    free(p);}
  return n ; }

432 :デフォルトの名無しさん:2005/04/27(水) 04:46:24
>>423
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/336.txt

無向グラフ対応済み。
インデックスが0からになってる。


433 :423:2005/04/27(水) 05:44:23
>>430
>>432
ありがとうございます。
自分的にはmallocとsizeofをつかって頂点を制限なく取れるように
しようとしていたのですがどれくらいの領域を確保すればよいかよく分からなくて困ってました。
やっぱり素直にNMAXを増やしたほうがよかったんですね。
ありがとうございました。

434 :デフォルトの名無しさん:2005/04/27(水) 11:05:21
[1] 授業単元: プログラミング2
[2] 問題文(含コード&リンク): ポインタ 構造体
(1) 配列を用いず、ポインタのみを用いて、入力した文字列の並びを反転し大文字と小文字を入れ替える関数を作成してください.
    ただし、この関数の外(つまり、外部やmainで文字列を格納するとき)では、配列を用いてもかまいません.
(例)abc12CDE と入力すると、edc21CBA と出力する.
(2) さらに、構造体を用いて、入力したそれぞれの文字の頻度を出力する関数を作成してください.
(例)abc12CDE と入力すると、
a = 1 b = 1 c = 2 1 = 1 2 = 1 d = 1 e = 1
と出力する.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: 4月28日
[5] その他の制限: なし

よろしくお願いします。

435 :デフォルトの名無しさん:2005/04/27(水) 11:20:55
>>434
>>401

436 :デフォルトの名無しさん:2005/04/27(水) 11:35:58
>>435
>>401
ほんとうにありがとうございます。
ソース見て勉強します。

437 :デフォルトの名無しさん:2005/04/27(水) 11:49:29
(1)
void string_reverse(const char *src , char *buf){
  const size_t length = strlen(src);
  buf += length;
  *buf = '\0';
  while(*src != '\0') {
    buf--;
    if(*src >= 'a') *buf = toupper(*src);
    else *buf = tolower(*src);
    src++;
  }
}

438 :デフォルトの名無しさん:2005/04/27(水) 11:51:36
更新するの忘れたorz

439 :デフォルトの名無しさん:2005/04/27(水) 12:00:17
>>434
void swap (char* a, char* b) {char tmp = *a; *a = *b; *b = tmp;}
char* reverse (char* str) {
char *p, *ep; p = ep = str; while (*ep++); ep -= 2;
while (p < ep) {swap (p, ep); p++; ep--;}
return str;
}
int main () {
char str[] = "abcdef";
printf ("%s\n", reverse (str));
return 0;
}

440 :デフォルトの名無しさん:2005/04/27(水) 12:28:34
>>437
EBCDIC の呪いにかかって死んでしまえ

441 :デフォルトの名無しさん:2005/04/27(水) 14:03:28
>>434
#include <stdio.h>

typedef struct Cell_tag {
char val_char;
int val_int;
struct Cell_tag* next;
} Cell;

Cell* new_cell (char val_char, int val_int, Cell* cell) {
Cell* cp = (Cell*) malloc (sizeof (Cell));
if (cp == NULL) return NULL;
cp->val_char = val_char; cp->val_int = val_int; cp->next = cell;
return cp;
}

void free_cell_all (Cell* cell) {
if (cell != NULL) {
Cell* next = cell->next;
free (cell);
free_cell_all (next);
}
}

442 :デフォルトの名無しさん:2005/04/27(水) 14:03:54
>>434
Cell* push_list (char val_char, int val_int, Cell** place) {
Cell* cp = new_cell (val_char, val_int, *place); *place = cp; return cp;}

Cell* append (char val_char, Cell** cell) {
if (*cell == NULL) return push_list (val_char, 1, cell);
else if ((*cell)->val_char == val_char) {(*cell)->val_int++; return *cell;}
else return append (val_char, &((*cell)->next));
}

void print_list (Cell* cell) {
if (cell == NULL) return;
else {printf ("%c = %d ", cell->val_char, cell->val_int); print_list (cell->next);}
}

void print_freq (char* str) {
Cell* cell = NULL;
while (*str) {append (*str, &cell); str++;}
print_list (cell);
free_cell_all (cell);
}

int main () {
print_freq ("abbcccdddd");
return 0;
}


443 :デフォルトの名無しさん:2005/04/27(水) 16:59:19
>>440
ASCIIコード表見て書きました
すみません…

444 :デフォルトの名無しさん:2005/04/27(水) 17:04:16
>>443
素直に islower() 使えばいいのに

445 :デフォルトの名無しさん:2005/04/27(水) 17:05:35
だな、

446 :443:2005/04/27(水) 17:07:34
ってto系ってASCII以外で動かないか…
>>444
islowerってあったんですね
勉強になりました

447 :デフォルトの名無しさん:2005/04/27(水) 17:17:05
ASCII以外でも動きますね
ごめんなさい

448 :デフォルトの名無しさん:2005/04/27(水) 18:45:33
>>427
#include <stdio.h>
#include <stdlib.h>
int mod (int a, int b) {int t = a % b; return t < 0 ? b+t : t;}
int** magic_square (int** square, int n, int x, int y, int m) {
if (!square[y][x]) {
square[y][x] = m;
return magic_square (square, n, mod (x-1, n), mod (y+1, n), m+1);
} else {
int ty = mod (y-2, n), tx = mod (x+1, n);
if (!square[ty][tx]) return magic_square (square, n, tx, ty, m);
else return square;
}
}
int** alloc_matrix (int n) {
int **matrix, i;
matrix = (int**) malloc (n * sizeof (int*));
for (i = 0; i < n; ++i) matrix[i] = (int*) malloc (n * sizeof (int));
return matrix;
}
int** init_matrix (int** matrix, int n) {
int i, j;
for (i = 0; i < n; ++i)for (j = 0; j < n; ++j) matrix[i][j] = 0;
return matrix;
}


449 :デフォルトの名無しさん:2005/04/27(水) 18:47:05
void print_matrix (int** matrix, int n) {
int i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) printf ("%3d", matrix[i][j]);
printf ("\n");
}
fflush (stdout);
}

int main () {
int n=3;
print_matrix (magic_square (init_matrix (alloc_matrix (n), n), n, n/2, n-1, 1), n);
return 0;
}


450 :デフォルトの名無しさん:2005/04/27(水) 21:35:38
初期状態を□として、○×を交互に表示していきたい。
プロの皆さん。初心者に一分で教えてください。

# ./a.out

どこに×を置きますか?:2 2
□□□
□×□
□□□・

どこに○を置きますか?:3 1
□□□
□×□
○□□



451 :デフォルトの名無しさん:2005/04/27(水) 21:37:48
続きです。
これの、空いてるところをうめてください。

#include <stdio.h>

int main(void)
{
 int i, j, n,m,k=0;
 int map[4][4]={0,0,0,0,0,0,0,0,0};
 int mark=1;//初期状態は×
 char* str="×";//初期状態は×から開始
 while(k<9){
  printf("どこに%sを置きますか?:",str);
  scanf("%d %d", &n,&m);
  



452 :デフォルトの名無しさん:2005/04/27(水) 21:37:57
>>450
テンプレに従え。

453 :デフォルトの名無しさん:2005/04/27(水) 21:38:11
後半

  //指定された位置の○×情報を代入


  //表示の部分
  for (i = 1; i <= 3; i++) {
   for (j = 1; j <= 3; j++){
  
   }

  }
  putchar('\n');
  }
  k++;


 //以下は,○と×を入れ替える処理

  if(mark==1){
   mark=2;
   str="○";
  }else{
   mark=1;
   str="×";
  }

 }

return (0);
}


454 :デフォルトの名無しさん:2005/04/27(水) 21:40:44
>>452

455 :デフォルトの名無しさん:2005/04/27(水) 21:43:07
[1] 授業単元: アルゴリズムとデータ構造
[2] 問題文(含コード&リンク): 上に貼り付けちゃいました。
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月28日
[5] その他の制限: なし
お願いします。

456 :デフォルトの名無しさん:2005/04/27(水) 21:51:30
>>415
gccとかなら古くから実装されてるが。
多分O2以上の最適化オプションで末尾再帰最適化もする。

457 :デフォルトの名無しさん:2005/04/27(水) 21:54:29
>>456
それじゃ再帰を使った方がきれいで速いコードが書けちゃうんですか?!
まだ学校でも再帰って習ってないです

458 :デフォルトの名無しさん:2005/04/27(水) 22:06:31
>>457
常にそうとは限らない。
ループを使った方が良い場合も多い。

459 :デフォルトの名無しさん:2005/04/27(水) 22:19:33
>>450
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
ここの67に張っておいた。

このウプロダはじめてでよくわからん。

460 :デフォルトの名無しさん:2005/04/27(水) 22:44:09
>>459
ありがとうございます!
・・・が、451と453にうめてほしかったんです。

461 :デフォルトの名無しさん:2005/04/27(水) 22:47:53
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
アメリカ本土への国際ダイヤル通話料金システムは次のようになっている。
@昼間料金(月曜日〜金曜日の午前7時から午後7時まで)
最初の1分まで 300円 
1分経過後 6秒ごと 15円
A夜間・休日割引料金(月曜日〜金曜日の午後7時から午後11時まで、および休日(土日祝日、正月三が日)の午前8時から午後11時まで)
最初の1分まで 240円
1分経過後6秒ごと 12円
B深夜料金割引(日曜日〜土曜日の午後11時から翌朝の午後8時まで)
最初の1分まで 180円
1分経過6秒ごと 9円
通話料金と料金システムの区分番号を入力して、それに該当する通話料金を計算して。出力するプログラムを作りなさい。

[3] 環境
 [3.1] OS: WINDOWS XP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年4月28日
[5]明日までなんでかなりあせってます・・
こんなヘタレに教えてください!お願いします!


462 :デフォルトの名無しさん:2005/04/27(水) 22:58:31
> 通話料金と料金システムの区分番号を入力して、それに該当する通話料金を計算して。出力するプログラムを作りなさい。

入力された通話料金をそのまま出力すればいいのか?

463 :デフォルトの名無しさん:2005/04/27(水) 23:03:46
通話時間と料金システムじゃないのか

しかしそれだと簡単杉か…

464 :デフォルトの名無しさん:2005/04/27(水) 23:04:52
いいじゃないか簡単なほうが

465 :デフォルトの名無しさん:2005/04/27(水) 23:06:06
普通に出題するなら入力は通話開始時刻と通話時間だと思うが

466 :デフォルトの名無しさん:2005/04/27(水) 23:08:17
深夜料金時間帯と昼間料金時間帯がかぶってる

467 :ゆう:2005/04/27(水) 23:22:25
[1] 授業単元:数値シミュレーション 高速フーリエ変換
[2] 問題文(含コード&リンク):50Hzの正弦波に一様乱数を重ねた信号のフーリエ変換をするプログラムを作る。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C
[4] 期限:2005年05月11日
[5] その他の制限:問題の意味がチンプンカンプンです。
         高速フーリエ変換と一様乱数発生のプログラムはわかります。


468 :デフォルトの名無しさん:2005/04/27(水) 23:29:10
>>467
女ならまずおっぱいうpだ

469 :デフォルトの名無しさん:2005/04/27(水) 23:35:21
>>467
double pi = 3.14159;
double f = 50;
double rate = /* サンプリングレートがワカラン */;
1)50Hzのデータを用意する。(a[t] = sin(2 * pi * t / f / rate);
2)それに乱数を加える(a[t] = rand() - 0.5 );
3)フーリエ変換
4)出力。
50ヘルツのところだけ突出し、のこりは一様乱数の影響で各周波数がほぼ一定の値になると思うよ。

470 :デフォルトの名無しさん:2005/04/27(水) 23:36:42
かわいそうな>>468

471 :デフォルトの名無しさん:2005/04/27(水) 23:53:57
>>461
とりあえず、通話時間と区分を入力して計算するプログラム。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/338.txt

472 :461:2005/04/28(木) 00:11:07
>>471さん まじでありがとうございました!


473 :デフォルトの名無しさん:2005/04/28(木) 00:18:51
>>468
http://www.idemitsu.co.jp/moconet/michi_no_eki/jiman/images/2005-01/02-1.jpg

474 :メモリダイヤル名無しさん:2005/04/28(木) 02:09:10
1] 授業単元:ソートアルゴリズム
[2] 問題文(含コード&リンク):電話帳の作成
 @電話帳の作成、編集が可能であり、その結果をファイルに保存、読み出しができる事。
  また、データの検索、およびソートが可能である事。
  メモリダイヤルは1件ごとに追加、編集、削除が行える事。
  全件表示の時に名前、電話番号による昇順、降順ソートが可能な事。
  メモリダイヤルの登録件数は最大1000件。
  許容する文字は
  電話番号が'0'〜'9','*','#','-','P'で32桁まで
  名前がひらがな英数(シフトJIS)でASCIIで32桁まで
 Aソート条件
  名前は、英字、数字、ひらがなの順番に並び替える事。
  電話番号は'P'および'-'を無視した結果を
  '*'<'#'<'0'......'9'の順番で並び替える事。
  名前、電話番号とも昇順、降順でのソートが可能な事。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C言語
[4] 期限:2005年5月2日まで
[5] その他の制限:


475 :474の続きです:2005/04/28(木) 02:14:59
B検索条件
 名前の場合は前方一致、電話番号は'P'および'-'を無視した結果を表示。
 条件に一致したメモリダイヤルを抜きだして表示すう事。
Cファイルはテキストフォーマットとする
 一行目にメモリダイヤルを10進数表記で
 二行目以降にそれぞれのメモリダイヤルをTABで区切って
 電話番号 TAB 名前 で保存できる事。
 ファイルからの読み込みが行える事。

途中まで作成したんですが、もうお手上げです。
どなたかご教授お願いします。
下記URLにメモリダイヤルという名前でアプロダしてます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
よろしくお願いします!

476 :475の続きです:2005/04/28(木) 02:17:22
電話帳の編集時に、
許容外の文字が入力されたらエラーで返したいです。

つーか、これ課題にしてはむずかしすぎないですか??


477 :デフォルトの名無しさん:2005/04/28(木) 02:50:32
>474

もまえの説明がまずいのでよくわかんないな
問題文はオリジナルか?
"メモリダイヤル"ってなんだ? 配列でいうところのインデックスか?

とりあえず struct Data が最大1000件、ってことでいいのか?

478 :メモリダイヤル名無しさん:2005/04/28(木) 10:14:58
>477

説明悪くてすいません。
メモリダイヤルは電話帳です。
配列でいうインデックスです。

struct Dataが最大1000件です。
この電話帳に最大で1000件登録できるという事です。

よろしくお願いします。

479 :デフォルトの名無しさん:2005/04/28(木) 19:04:16
>>456
VCはどうですか?

480 :デフォルトの名無しさん:2005/04/28(木) 20:59:01
>>474
関数のプロトタイプって与えられたもの?
ととりあえず聞いてみる

481 :デフォルトの名無しさん:2005/04/28(木) 22:40:42
ひらがなって、SJISコード順に並べると微妙に五十音順になってないんだな。
単純なコード順ならまぁ、楽だが、五十音順だとちと厄介だ。

482 :教えてください!:2005/04/29(金) 01:39:05
C++ではないのですが、プログラムの問題なのです。
問題:
ある検索プログラムでは、以下の検索式の定義に従って検索結果が表示されます。
記号: *
例: A*B
働き: AもBも含まれる(AND検索)


例: A+B
働き: AまたはBが含まれる(OR検索)


例: A#B
働き: Aは含むがBは含まない(NOT検索)

()
例) (A+B)*C
働き) AまたはBが含まれて、かつCを含む。()内を優先

[入力例]
   犬、猫以外の哺乳類のペットについて調べたい。
     ⇒ ペット*哺乳類#(犬+猫)
[質問]
   「ラーメン」を含むか、または「ファミレス」「ファーストフード」
    を含まない、「東京」にある「ランチ」を調べたい。

    ⇒ ???

    注:「」内は入力例でいう犬や猫などの検索キーワードとして使用します。

お願いします。考えてみてください!


483 :デフォルトの名無しさん:2005/04/29(金) 02:21:46
#の仕様がキモイ。
> Aは含むがBは含まない(NOT検索)
A#B = a and not b ってこと?

(東京*ランチ*ラーメン)+(東京*ランチ#(ファミレス+ファーストフード))

484 :デフォルトの名無しさん:2005/04/29(金) 02:22:53
「東京」にある「ランチ」を調べたい
ランチ*東京

「ファミレス」(または)「ファーストフード」を含まない
#(ファミレス+ファーストフード)

東京*ランチ+(ラーメン#(ファミレス+ファーストフード))

こういうこと?C/C++プログラミングというより論理学みたいだけど
ベン図書いてやってみた方がいいんじゃないかなぁ…

485 :デフォルトの名無しさん:2005/04/29(金) 02:34:28
今どきはそんな問題もでるなかぬぇ。楽しいなw
こんな感じが考えてみるとどうか
 東京 and ラメン and ランチ
or
 東京 and ラーメン and not (ファミレス or ファーストフーd)
東京とラーメンは共通なのがポイント。ここからね。
共通の部分はまとめて真・雷・悦・淀で4つの相。
全体量は不変として無量となす、逆帝神として小桜・大寅となす。
堂はらって揺、陣ふさいで呈。〜死亡が確認された方々〜
大曲市 毛峰 穂図  さん(79) 死亡
大曲市 ミタ さん(74) 死亡
大曲市 屋敷 雄二兵 さん(48) 死亡
大曲市 屋敷 酸線 さん(20) 死亡
大曲市 屋敷 非風 さん(18) 死亡
不過市 大本 ハリガ さん(12) 死亡
八牟田町 ’ さん(56) 死亡
八牟田町 湯田 屋今 さん(54) 死亡
落合村 平井 杵 さん(29) 死亡
落合村 さん(1) 死亡
落合村 アラタ コエ さん(49) 死亡
落合村 アラタ さん(43) 死亡

486 :教えてください!:2005/04/29(金) 02:40:21
>483,484
考えてもらいありがとうございます。
おそらく入力例の用に答えるという意味では
484の
東京*ランチ+(ラーメン#(ファミレス+ファーストフード))
の様な答えだと思うのですが・・・

487 :デフォルトの名無しさん:2005/04/29(金) 02:56:06
>483でじゅうぶんでは?
個人的には
#(ファミレス+ファーストフード) よりも
#ファミレス#ファーストフード を推したい。
この辺は特に指定されてなきゃ好みの問題だが。

488 :デフォルトの名無しさん:2005/04/29(金) 03:03:01
>>484だと、「東京のファミレスでランチ」「九州のラーメン」とかでもマッチしませんか?

489 :メモリダイヤルです:2005/04/29(金) 03:19:43
>480
関数は、私が勝手に考えたものなんで変更していただいてもかまいませんよ。
>481
ひらがなは50音順になってなくても、大丈夫らしいです。
英字、数字、ひらがなの順番で昇順、降順ができれば問題ないとの事。
最終手段として、英=1、数字=10、ひらがな=100
のように定義しようかと思ってるんですが。。。
なかなかよいアルゴが浮かばないです。。。

490 :デフォルトの名無しさん:2005/04/29(金) 03:53:31
>489
いきなりソートを書こうとするな。
まずは名前の大小(前後)関係を比較する関数を書け。
比較、スワップはそれだけで単体の関数になってないとソートの関数のソースが十倍以上複雑になる。
ここを関数にしてあれば、アルゴリズムやデータ構造、ソートの基準変更したい時の変更が最小で済むしな。

比較は、一文字ずつ比較する関数を書くといい。
最初は一文字目どうし、同じなら二文字目…と再帰を使って決着付くまで後ろに進んでいくわけだ。
一文字ずつの比較なら、ペアの字種の組み合わせは9通り。この程度ならifを9個並べてもいい。
速度は気にするな。どうせファイル読み(書き)、画面表示、ソートで時間がかかっちまうんだから。

491 :490:2005/04/29(金) 03:54:54
>490
再帰使う必要は無いな。ループで事足りるか。
再帰マニアなのでつい趣味に走ってしまった。

492 :デフォルトの名無しさん:2005/04/29(金) 04:19:49
>>482
1 質問が曖昧(つーか、日本語が曖昧)

解釈1
{{{「ラーメン」を含む}か、または{{「ファミレス」(and)「ファーストフード」}を含まない}}
{「東京」にある「ランチ」}を調べたい。}
解釈2
{{{「ラーメン」を含む}か、または{{「ファミレス」(or)「ファーストフード」}を含まない}}
{「東京」にある「ランチ」}を調べたい。}
曲解
{{{「ラーメン」を含む}か、または{{{「ファミレス」((and)or(or))「ファーストフード」}を含まない
}「東京」にある}}「ランチ」を調べたい。}

2 記号の評価順位が決まってないと、困る
例: A+B*C

解釈1
数学ではないし#なんて記号まであるのだから、左から順番に解釈し「 ( A or B ) and C」
解釈2
「() の働きについて (A+B)*C」のように説明しているのだから
数学等と同様に、B*Cを先に評価すべきで、「A or ( B and C )」

493 :デフォルトの名無しさん:2005/04/29(金) 04:44:58
>>484
>>482の質問の質問の内容としては、恐らく
「東京」and「ランチ」and(「ラーメン」or(not(「ファミレス」((and)or(or))「ファーストフード」))
のような解釈で良いと思われるが、
A#Bの解釈が「Aは含むがBは含まない(A and ( not B) )」と言うアホな仕様の為
「東京」*「ランチ」+(「ラーメン」#(「ファミレス」+「ファーストフード」)) は
「東京」and「ランチ」or(「ラーメン」and(not(「ファミレス」and「ファーストフード」)))となるため
>>482の質問の答えとしては間違えていると思われ
つー訳で自信は無いが…と言うか、考えるだけで頭が変になりそうなので…

「東京」*「ランチ」# ( (「ファミレス」((*)or(+))「ファーストフード」) #「ラーメン」)

494 :デフォルトの名無しさん:2005/04/29(金) 04:54:53
[1] 授業単元:C言語実習U
[2] 問題文(含コード&リンク):
x-y平面上の座標(x,y)をキーボードから入力して、
この点がx=-10,x=10,y=-10,y=10で囲まれる正方形の中にあればinside,
外にあればoutside,周上にあればon lineと出力するプログラムを作成せよ。
x,yは実数とする
[3] 環境
 [3.1] OS:WinXP home
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C/C++/どちらでも可 のいずれか C++
[4] 期限:2005年4月30日23:59まで
[5] その他の制限:特になし

だいたいできたんですけどなんかおかしくなるのです・・
よろしくおねがいします

495 :デフォルトの名無しさん:2005/04/29(金) 05:47:44
>>494

void check(int x,int y)
{
if( (x<=10&&x>=-10) && (y<=10&&y>=-10)){
printf("inside\n");
}else{
printf("outside\n");
}
}


496 :495:2005/04/29(金) 05:53:02
ごめ on line 見逃してた^^;

void check(int x,int y){

if( (x<10&&x>-10) && (y<10&&y>-10)){
printf("inside\n");
}else if( (x==10 && (y==10||y==-10)) || (x==-10 && (y==10||y==-10))){
printf("on line\n");
}
else{
printf("outside\n");
}
}

497 :デフォルトの名無しさん:2005/04/29(金) 09:12:34
>>489
#include <mbstring.h>
int up_cmp(Data *a, Data *b) {
  if (_ismbcalpha(a->name[0]) != 0 && _ismbcdigit(b->name[0]) != 0) return 0;
  else if (_ismbcdigit(a->name[0]) != 0 && _ismbcalpha(b->name[0]) != 0) return 1;
  else return _mbscmp(a->name, b->name);
}

qsort(g_table, g_count, sizeof(Data), up_cmp);
思いつきなんで、間違ってたらごめんなさい
文字コード表でも見て比較関数作ってください

498 :デフォルトの名無しさん:2005/04/29(金) 14:37:07
>>491
再帰だってループだろ。

499 :デフォルトの名無しさん:2005/04/29(金) 14:41:15
挙動がちがうよー

500 :デフォルトの名無しさん:2005/04/29(金) 14:45:06
>>499
どうちがうの?

501 :490:2005/04/29(金) 15:38:29
>498
ループってのはfor(while)ループのつもりで使った。
確かに再帰も繰り返し処理ではあるので、ループの一種と言えそうだけど。

再帰の場合、関数呼び出しのせいで速度が低下する場合がある。
最適化でコンパイラが何とかしてくれる事を期待してもいいけど。

502 :デフォルトの名無しさん:2005/04/29(金) 19:00:42
再帰の場合、static 以外のデータ領域 (auto, register, 引数)が、新たに取られること。
心配すべきは、スタック。

503 :メモリダイヤルです:2005/04/29(金) 19:30:20
490,491>
ありがとうございます。
それでしたらstrcmp関数を使って、while文でループさせたらいいですか?
データ件数が少ないので、これくらいでしたら速度の劣化は気にしてないです。
でも、名前の場合は使用文字がひらがな英数(シフトJIS)での
前方一致なんで、9通りではおさまらない気がするんですが。
ソースいただけたら助かります。。。
501>
私、関数つくりすぎてますか?
省略できる部分があれば、ご指摘いただけたら助かります。
スタックは自分でも少し気にしてます。。。


504 :デフォルトの名無しさん:2005/04/29(金) 22:10:03
枝が重みを持つ無向グラフに対する、最長経路問題を解くプログラムを作成中です。
隣接行列array_cを作り、枝で結ばれていない成分には0を入れています。
開始ノードをaとし、最長経路を入れる配列をmax_cとし、max_c[i] < max_c[a] + array[a][i]
ならmax_c[i]を更新そして再帰的に・・・と考えているのですが、同じノードを2回通らない
ようにするにはどうすればいいのか?
再起関数内で、どの条件でreturnすれば良いのか?など、問題だらけです。

答えを貼り付けられるのは逆に困ってしまうので、最長経路について詳しく解説されている
サイトがあればお教えいただきたいです。
最短経路やセールスマン、最長片道切符は見つかるのですが・・・。

505 :デフォルトの名無しさん:2005/04/30(土) 00:00:12
>>504
ノードに一意なキーを割り振って、ハッシュなどを使ってノードを通過したかどうかを判定する。
javaならTreeSetとか。

506 :メモリダイヤルです:2005/04/30(土) 01:11:48
497>
ありがとうございます!
関数int up_cmpの内容は理解できるんですが、
クイックソートはどこに挿入したらいいのでしょうか?
普通に比較関数の中に組み込めばよろしいのでしょうか?
よろしくお願いします。

507 :デフォルトの名無しさん:2005/04/30(土) 01:25:43
>506

もまえ自分で
>全件表示の時に名前、電話番号による昇順、降順ソートが可能な事
って買い取るぞ
そこだ

508 :メモリダイヤルです:2005/04/30(土) 01:36:21
507>
すいません!本当に助かります。
ありがとうございます!!
もし私が作ったソースでまずい部分があればご指摘いただけたら助かります。
ここは、私ならこうする、みたいな部分はありますか?
自分ではシンプルにまとめたつもりなんですが。
よろしくお願いします。

509 :デフォルトの名無しさん:2005/04/30(土) 01:48:58
main()
{
load();
menu();
save();
}

menu()
{
printf("1:登録件数の表示\n");
printf("2:メモリダイヤルの新規登録\n");
printf("3:メモリダイヤルの検索\n");
}

/*関数printall()は全件表示を行う関数である*/
printall()
{
 :
printf("メモリダイヤルの修正.削除が行えます\n");
printf("処理したい項目を番号で選択して下さい\n");
printf("1:修正\n2:削除\n3:キャンセル\n");
 :
}

これダメだ(w
main()は読み書きが最初と最後だけでよいならこのままで、
もれなら menu() は
・全件表示〜名前、電話番号による昇順、降順ソートが可能
・メモリダイヤル1件追加
・データの検索 ←たぶん編集、削除するため
の3つから構成する


510 :デフォルトの名無しさん:2005/04/30(土) 01:57:08
>・データの検索 ←たぶん編集、削除するため

ちとわかりにくかったな
検索して、見つかったそいつを編集するか削除するか、って流れにしたい

511 :メモリダイヤルです:2005/04/30(土) 02:03:28
509>
ありがとうございます。
インターフェイスの事を考えたら、確かにそうですよね。。。
修正、削除で余分なメモリ使いたくないですし、
ハードの事を考えたら、いちいちファイルに保存するのも問題が
ある気がしたので、fopen、fclose以外は
構造体の添字でファイルに保存させずにまわす事にしました。
早速menuとprintallを修正します。



512 :デフォルトの名無しさん:2005/04/30(土) 02:04:01
>もし私が作ったソースでまずい部分があればご指摘いただけたら助かります。

ぜったいダメってことはないが、グローバル変数
Data g_table[SZ_TABLE];
int g_count;


関数のプロトタイプ宣言
void printall();
と実際
void printall(Data *dp)
が違う


513 :メモリダイヤルです:2005/04/30(土) 02:19:28
512>
ご指摘ありがとうございます。
グローバル変数の使い方に問題があるのでしょうか?
関数printallの中でのg_countの使い方がマズイ、という事ですか??
すいません、よく理解できないんですが。。。

514 :デフォルトの名無しさん:2005/04/30(土) 02:27:35
グローバル変数を使ったコーディングに慣れ親しんでしまうと中・大規模になったとき
死ぬ

515 :メモリダイヤルです:2005/04/30(土) 02:44:39
497>
教えていただいておきながら恐縮なんですが、
qsortの部分で、第1引数と第2引数が関数宣言と一致しません、とエラーがでるんですが
どういう意味なんでしょうか??
自力で修正してみますので、無理でしたらご指摘お願いします。

516 :メモリダイヤルです:2005/04/30(土) 02:46:53
497>
文に誤りがありました。
×自力で修正してみますので、無理でしたらご指摘お願いします。
○自力で修正してみますが、もし私が無理でしたらご指摘お願いします。

517 :メモリダイヤルです:2005/04/30(土) 02:48:40
514>
意味がわかりました(^^;
確かにそうかもしれませんね。
考慮します。

518 :デフォルトの名無しさん:2005/04/30(土) 07:06:37
>>515
qsortに渡しているデータの型が適正でない。

519 :デフォルトの名無しさん:2005/04/30(土) 07:57:11
const

520 :494:2005/04/30(土) 16:14:24
>>495-496
"on line"の定義が違うようなんですけど・・

521 :デフォルトの名無しさん:2005/04/30(土) 16:51:08
>>520

void check(int x,int y){

if( (x<10&&x>-10) && (y<10&&y>-10)){
printf("inside\n");
}else if( (x==10 && (y>=-10&&y<=10)) || (x==-10 && (y>=-10&&y<=10))){
printf("on line\n");
}
else{
printf("outside\n");
}
}

522 :デフォルトの名無しさん:2005/04/30(土) 19:25:08
>>521
>x,yは実数とする

>>494
まぁ、残りは誰がやらなくても分かるよね…

523 :522:2005/04/30(土) 19:43:13
分かるよねって、良く見たら>>521も間違えてるじゃん…
最近ぬるくなってきたな…
つー訳で、お詫びに

void check(float x, float y){
printf("%s\n",(x>=-10.0&&x<<=10.0&&y>=-10.0&&y<=10.0)?
(x==10.0||x==-10.0||y==10.0||y==-10.0)?"on line":"inside":"outside");}

524 :デフォルトの名無しさん:2005/04/30(土) 23:46:32
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):
四元の連立方程式を解く。
アルゴリズムも説明するとさらに良い。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:2005年5月2日23:59まで
[5] その他の制限:#include は <stdio.h> しか使ったことが無いです。

難しすぎでまったくできないです。
どうかお力を貸してください…。

525 :デフォルトの名無しさん:2005/04/30(土) 23:48:28
>[5] その他の制限:#include は <stdio.h> しか使ったことが無いです。

じゃあ、いい機会だから、stdlib.h と、string.hと、ctype.hも覚えろ。

526 :デフォルトの名無しさん:2005/05/01(日) 00:16:54
ついでにGoogleもどうぞ

527 :デフォルトの名無しさん:2005/05/01(日) 00:22:35
#include <google>

google::複素数 hoge()
{ return google::4次方程式::solve(方程式); }

528 :デフォルトの名無しさん:2005/05/01(日) 01:32:02
[1] 授業単元:関数
[2] 問題文(含コード&リンク):関数main()において配列(1次元で要素数は10個)に値を入力し、
配列の先頭アドレスと要素数を因数として受けとり、
関数void mysort(int hyo[],int yososu)において値を降順にソートする
[3] 環境
 [3.1] OS:WINNT
 [3.2] コンパイラ(バージョン):ビジュアルスタジオ95
 [3.3] 言語:C
[4] 期限:早め
[5] その他の制限:関数main()での値の入力を行い、
その値あるいはアドレスなどを因数としてサブ関数を事項後main()関数において結果を出力

529 :デフォルトの名無しさん:2005/05/01(日) 01:33:08
期限くらい、きちんと書けや

530 :デフォルトの名無しさん:2005/05/01(日) 01:46:38
void mysort(int hyo[],int yososu){
int i,j,k;
for(i=0;i<yososu;i++){k=i;for(j=i;j<yososu;j++){
if(hyo[k]<hyo[j])k=j;}j=hyo[i];hyo[i]=hyo[k];hyo[k]=j;}}

531 :デフォルトの名無しさん:2005/05/01(日) 01:52:58
>>524
線形台数だろうか? うん、きっとそうだ。


532 :デフォルトの名無しさん:2005/05/01(日) 02:12:48
>>528
#include <stdio.h>
#define numof(x) (sizeof(x)/sizeof(x[0]))
typedef enum {false = 0, true = 1} bool;
void swap (int* a, int* b) {int tmp; tmp = *a; *a = *b; *b = tmp;}
void quick_sort (int* x, int l, int r) {
int i = l, j = r, pivot = x[r];
while (true) {
while (*(x+i) < pivot) i++;
while (*(x+j) > pivot) j--;
if (i >= j) break;
swap (x+i, x+j);
i++; j--;
}
if (l < i-1) quick_sort(x, l, i-1);
if (r > j+1) quick_sort(x, j+1, r);
}
void mysort (int hyo[],int yososu){quick_sort (hyo, 0, yososu-1);}

int main () {
int i;
int x[] ={2,1,5,23,6,7};
mysort (x, numof (x));
for (i = 0; i < numof (x); ++i) printf ("%d ", x[i]);
return 0;
}

533 :メモリダイヤルです:2005/05/01(日) 02:56:23
名前の前方一致、電話番号の部分一致はどのように行ったらいいでしょうか?
strcmpとwhileで、一文字ずつ比較する関数をつくってみたんですが、うまくいきません。
関数inputuで許容文字以外は省く関数を作ってみたんですけど、動いてくれないし。。。
これ以上は全然わからないです。
どなたか助けてください。。。

534 :デフォルトの名無しさん:2005/05/01(日) 08:51:08
>>533
名前の前方一致 → strncmp
電話番号の部分一致 → strstr


535 :デフォルトの名無しさん:2005/05/01(日) 11:24:10
#include <stdio.h>
#include <sys/types.h>
#include <process.h>
#include <windows.h>


#include "Thread.h"

void Thread::start() {

 unsigneddummy;

 _beginthreadex(NULL,0, run, (void *)1, 0 ,&dummy);
}

unsigned __stdcall Thread::run(void *arg)
{
 return 0;
}

JavaのThreadクラスの様なものを作ろうとしたのですが,
_beginthreadexの3番目の引数でエラーが出ます.
runをstaticにする以外の解決方法は無いのですか?

536 :デフォルトの名無しさん:2005/05/01(日) 11:40:10
>>535
しゅくだいか?それ。

class Thread {
// :
inline static unsigned __stdcall run( void* arg ) {
((Thread*)arg) -> runImpl();
}
virtual void runImpl() = 0;
// :
};
このようにしなさい

537 :デフォルトの名無しさん:2005/05/01(日) 11:48:20
(536じゃないけど)
要するに>535の答えは「無いです」って事。
諦めてstaticにするアルネ。

538 :デフォルトの名無しさん:2005/05/01(日) 11:52:12
今C言語でfor文を作っていて、dtをscanfさせて
for (t=0; t<=20; t=t+dt)
と書いて計算させたまではよかったんですが
例えばdt=0.1でいざ実行してみると
19.9までで止まってしまい20.0まで行ってくれないのです。
でどうやらdtの値を変えていったところ
0.1以下だと20の手前で止まってしまい
0.2以上だと正常に20まで行くのです。
ちなみにtとdtはdoubleを使用しています。
そしてソフトはborlandを使用しています。
この場合どういった原因が考えられるのでしょうか?
教えてください。よろしくお願いします。

539 :デフォルトの名無しさん:2005/05/01(日) 11:55:27
想定の範囲内です

540 :デフォルトの名無しさん:2005/05/01(日) 12:02:29
誤差

541 :538:2005/05/01(日) 12:05:55
>>539
気にすんなよってことですか?
>>540
ということはやっぱり直しようがないんでしょうか?

542 :デフォルトの名無しさん:2005/05/01(日) 12:06:51
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):

f(x)=xの2乗-xy-yの2乗 について
x=-0.423 y=1 の時の値を(小数点第4位までの表示)
で求めなさい。ただし、変数x,yの値はscanf文で
入力させてください。


[3] 環境 :
 [3.1] OS: Linux Fedora core
 [3.2] コンパイラ(バージョン): GNOME
 [3.3] 言語:C言語
[4] 期限:2005年5月1日まで
[5] その他の制限:


ろくな説明もなしに、いきなりやってこいと言われ、
あたふたしているうちに期限間近。
自宅にLinux環境がないので、さっぱりです。
どなたか模範解答の方お願いできませんか?

543 :デフォルトの名無しさん:2005/05/01(日) 12:11:55
>>541
プログラムの構造を見直せばいいのでは

544 :デフォルトの名無しさん:2005/05/01(日) 12:15:00
>>542
>f(x)=x^2-xy-y^2
??アホだろ?

授業聞いてなかった自分が悪いのに先生のせいにするんですか?
double f (double x, double y) {return x*x-x*y-y*y;}
int main () {
printf ("%lf\n",f(-0.423, 1.0));
return 0;
}

545 :デフォルトの名無しさん:2005/05/01(日) 12:20:34
回答ありがとうございます。
でも x^2 こういう書き方とか一切教えてもらってなかったです。
まぁ、自分で学ぶことを怠っていたせいですけど、、、
でも、本当にありがとうございました。

546 :デフォルトの名無しさん:2005/05/01(日) 12:22:47
>>545
> でも x^2 こういう書き方とか一切教えてもらってなかったです。
問題はそこじゃない。

547 :デフォルトの名無しさん:2005/05/01(日) 12:24:15
>>542

#include <stdio.h>

double f(double x, double y) {
return x*x - x*y - y*y;
}

int main() {
double x=0.0, y=0.0;
scanf("%lf\n%lf", &x, &y);
printf("%.4lf", f(x, y));
}

(;´Д`) あと,GNOMEはコンパイラじゃないな

548 :デフォルトの名無しさん:2005/05/01(日) 12:25:05
あっ。これがあほ→f(x)=x^2-xy-y^2
これが正しい→f(x)=x*x-x*y-y*y
という意味ですね。すみませんでした。

549 :デフォルトの名無しさん:2005/05/01(日) 12:26:58
>>548
もういいよ…

550 :デフォルトの名無しさん:2005/05/01(日) 12:31:34
>>547
丁寧な回答ありがとうございました。
もっと言葉の意味とか、書き方とか
勉強しなければなりませんね。

551 :デフォルトの名無しさん:2005/05/01(日) 12:33:05
>>549
間違ってましたか?
すみませんm(_ _)m

552 :535:2005/05/01(日) 12:40:26
>>537
そうですか_| ̄|○
しかし、staticにするとrunをオーバーライドして使えないよね?
意味あんのかこのクラス・・・

553 :537:2005/05/01(日) 12:50:32
>>552
いや,そこで>536というソリューションな(;´Д`)
>536のrunImpl()がオーバーライドできるから
それでもういいだろ。
# どうしてもrunをオーバーライドしたいなら,メソッド名を変えればいいわけで。

554 :デフォルトの名無しさん:2005/05/01(日) 14:11:45
関数1からscanfで整数2つもらって、mainに戻りたいんですけど、どうしたらいいんでしょうか?

555 :デフォルトの名無しさん:2005/05/01(日) 14:12:52
>541
浮動小数点型は、末尾にどうしても誤差が付く。
カウント用の変数を別に用意するのがお勧めだな。
for(i=0;i<=200;i++) {
t=0.1*i
...
}

556 :デフォルトの名無しさん:2005/05/01(日) 14:16:50
のまのま

int 関数1(int* 整数1, int* 整数2)
{
rewind(stdin);
return scanf("%d %d", 整数1, 整数2);
}


557 :デフォルトの名無しさん:2005/05/01(日) 14:33:52
>>524
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/341.c
アルゴリズム:ピボット選択月ガウス消去法

558 :デフォルトの名無しさん:2005/05/01(日) 14:41:03
受け取る側のmain関数はどう書くの?>>556

559 :デフォルトの名無しさん:2005/05/01(日) 14:47:25
#include <stdio.h>

main() {
 int まいやひー, まいやふー;

 if ( まいやはっは( &まいやひー, &まいやふー ) == 2)
 {
  ごりごりここにかく
 }

 return ららら;
}


560 :デフォルトの名無しさん:2005/05/01(日) 14:50:18
んーちょっと分かりづらい

561 :デフォルトの名無しさん:2005/05/01(日) 14:53:09
ん?それが貴方の限界ですか?

562 :デフォルトの名無しさん:2005/05/01(日) 14:54:17
俺の力はこんなもんじゃねぇ…まだまだいけるはずだ!!

563 :デフォルトの名無しさん:2005/05/01(日) 14:57:45
なんとなくポインタ使うっていうことだけはわかった

564 :デフォルトの名無しさん:2005/05/01(日) 15:01:01
main()で直接scanf()使うコードを晒せば誰か反応してくれるかもね。

565 :デフォルトの名無しさん:2005/05/01(日) 15:07:25
いや〜何回も入力させるからサブルーチンにしたほうがいいんだよね
誰か救い珠恵

566 :デフォルトの名無しさん:2005/05/01(日) 15:14:24
sakigaomoiyarareru(&nekoni,&koban);
処理

567 :デフォルトの名無しさん:2005/05/01(日) 21:35:19
[1] 授業単元:授業ではありません(でもこのスレで質問します)
[2] 問題文(含コード&リンク):0, 1, 2, …, n を以下のように表示したい。
例えばn = 3の場合、
0123
0132
0213
0231

3201
3210

[3] 環境
 [3.1] OS: vine Linux 3.01
 [3.2] コンパイラ(バージョン):詳しいことは分かりません
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:なし

どのようなルーチンを組めばよいのでしょうか?
表示部分だけでよいので、ご教授お願いします。

568 :524:2005/05/01(日) 22:04:57
>>524 さんありがとうございます。
このような解き方もあるとは知らなかったです。
大変勉強になりました。
ソースを自分なりに理解して、勉強したいと思います。m(_ _)m


569 :524:2005/05/01(日) 22:05:52
↑ミスです…
524→>>557 
です。すいません。

570 :デフォルトの名無しさん:2005/05/01(日) 22:23:09
>>567
nの最大値は9で良いのか?
それとも、10以上になった場合の表示方法はAにするとか?
取り合えず、最大値と、二桁以上の振る舞いを例を出して

571 :567:2005/05/01(日) 22:34:11
>>570
レスありがとうございます。
情報が足らずに、追加レス申し訳ないです。

表示方法は0123には限定せず、0, 1, 2, 3でも良いです。
つまり2桁以上の数が含まれても、全通りの並びを表示させたいのです。
0, 10, 9, 12, 7, …のようにです。お願いします。

572 :デフォルトの名無しさん:2005/05/01(日) 22:39:04
>>567
#include <stdio.h>
void swap(int* x, int* y) {int temp = *x; *x = *y; *y = temp;}
void reverse(int* first, int* last) {
    for(; ; ) if (first == last || first == --last) return; else swap(first++, last);
}
bool next_permutation(int* first, int* last) {
    int* i = last - 1, *j, *k;
    if (first == last || first + 1 == last) return false;
    for(; ; ) {
        j = i--;
        if (*i < *j) {
            k = last;
            while (!(*i < *--k));
            swap(i, k);
            reverse(j, last);
            return true;
        }
        if (i == first) {
            reverse(first, last);
            return false;
        }
    }
}
int main() {
    int i, a[] = {0, 1, 2, 3};
    do {
        for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d", a[i]);
        printf("\n");
    } while (next_permutation(a, a + sizeof(a) / sizeof(a[0])));
    return 0;
}

573 :572:2005/05/01(日) 22:44:50
あ、間違った。
boolとtrueとfalseをそれぞれintと1と0に書き換えておいてくれ。

574 :567:2005/05/01(日) 22:48:36
>>572-573
おぉ、ありがとうございます。
これから解析してみます。

575 :デフォルトの名無しさん:2005/05/01(日) 23:41:37
>>573
寧ろ、
#include <stdbool.h>
or
enum {false, true} bool;

576 :デフォルトの名無しさん:2005/05/02(月) 00:13:43
このスレでの解答のコーディングスタイルが俺のスタイルに近付いてきているのは気のせいですか

577 :デフォルトの名無しさん:2005/05/02(月) 00:14:26
もしかしたら逆かもよ

578 :デフォルトの名無しさん:2005/05/02(月) 00:22:52
>>577
それはありません(笑
自信過剰でなければ、みなさんは私の影響を受けているでしょう。この愚民ども

579 :デフォルトの名無しさん:2005/05/02(月) 00:24:29
そう、このスレ住人どもは渡しの手の平のうちで踊りつづけるのです!そして私がスレマスターとして君臨するのです!!!1000まで。

580 :デフォルトの名無しさん:2005/05/02(月) 00:31:10
ぼるじょあ以外は書き込むなボケ

581 :デフォルトの名無しさん:2005/05/02(月) 00:33:46
ごめんなさい

582 :デフォルトの名無しさん:2005/05/02(月) 00:48:00
今だかつてぼるじょあが活躍したところを見た事がない

583 :デフォルトの名無しさん:2005/05/02(月) 00:48:26
×今だ
○未だ

584 :デフォルトの名無しさん:2005/05/02(月) 00:54:46
漏れがしたいことは、まさに>>567なんだけども、>>572をJavaで
書くとすると、どのようなコードになるのでしょうか?

585 :デフォルトの名無しさん:2005/05/02(月) 01:00:16
スレ違いって知ってる?

586 :584:2005/05/02(月) 01:08:13
>>585
すいません。Javaスレ行ってきます。

587 :デフォルトの名無しさん:2005/05/02(月) 01:40:53
>>567
ほい
考え方としては、こんなもん(タイポがあったらスマソ)
現在Cの環境がなく、考えるのが面倒だから、配列とフラグでやってるが、
適当に手直しして、線形リストに変更すれば、そこそこ効率が良いはず

#include<stdio.h>
#include<stdlib.h>

typedef unsigned int ui;

void sub(ui *flag,ui f,ui *table,ui t){
  ui n,m;
  if(f){
    for(n=m=0;n<f;n++){
      while(flag[m])m++;
      flag[m]=1,table[t]=m;
      sub(flag,f-1,table,t+1);
      flag[m++]=0;}}
  else{
    while(t--)printf("%d, ",*table++);
    printf("\n");}}

void pattern(ui n){
  ui *flag,*table;
  flag=calloc(++n,sizeof(*flag));
  table=calloc(n,sizeof(*table));
  sub(flag,n,table,0);}

int main(){
  pattern( 3 );
  return 0;}

588 :デフォルトの名無しさん:2005/05/02(月) 01:42:26
再帰が使えそうな匂いがする

589 :デフォルトの名無しさん:2005/05/02(月) 01:53:38
std::next_permutation からソースそのままコピペでいいじゃん

590 :デフォルトの名無しさん:2005/05/02(月) 02:03:28
>>589
>[3.3] 言語:C
頑張って、Cに直してあげてね

591 :デフォルトの名無しさん:2005/05/02(月) 02:16:09
typedef int *BidirectionalIterator;
で十分だな。

592 :デフォルトの名無しさん:2005/05/02(月) 02:25:52
BidirectionalIterator とか、RandomAccessIterator とかいい加減やめないか?
絶対返って見にくくなってるだけだと思うのだが

593 :デフォルトの名無しさん:2005/05/02(月) 04:06:52
strstr関数は第1引数の文字列のポインタから末尾までを検索して
第2に引数の文字が最初にみつかったポインタを返しますけど
上に検索する場合はどうしたらいいのですか?

要約しますと、strstrは指定したポインタから下に向かって検索しますが上に向かう場合はうんぬんということです


594 :デフォルトの名無しさん:2005/05/02(月) 04:10:00
>>593
標準にはないから、自分で strrstr とかでも名付けて実装汁

595 :デフォルトの名無しさん:2005/05/02(月) 04:28:41
( ゜∀゜)=3 ムッハー、そうすると検索アルゴリズムから考えるのか。
このぐらい用意しててほしいもんだ


596 :デフォルトの名無しさん:2005/05/02(月) 04:46:00
単純に作ると
char* strrstr(const char* input, const char* test)
{
    const char* m   = strstr(input, test);
    const char* last = m;

    while (m) {
        last = m;
        m   = strstr(m + 1, test);
    }

    return (char*)last;
}
こんな簡単だけどな

597 :デフォルトの名無しさん:2005/05/02(月) 04:54:03
( ゜∀゜)=3 ムッハー

>while (m) {last = m; m = strstr(m + 1, test); }

ここを使わせてもらいます

598 :デフォルトの名無しさん:2005/05/02(月) 05:02:06
問題に「Use four vectors of type char string」ってあるんだけど、
vectorってarray of charとれます?
つまり、
vector <char [256]> name;
ってできます?
あと、このときどうやったら、
char str[256];
cin.getline(str, 256);
この、strをベクター nameにいれれますか?
お願いします。


599 :デフォルトの名無しさん:2005/05/02(月) 05:19:49
>>598
char[256] なら
std::vector<char> name(256);
でいいだろ

>あと、このときどうやったら、
>char str[256];
>cin.getline(str, 256);
>この、strをベクター nameにいれれますか?
template <class Target>
Target stringToContainer(const char* input)
{ return Target(&input[0], &input[strlen(input)]); }

char str[256];
cin.getline(str, 256);
v = stringToContainer<std::vector<char> >(str);
とでもやっとけ

つか


俺 し か い な い 予 感 !!

600 :デフォルトの名無しさん:2005/05/02(月) 07:38:04

int size = 0;
char buffer[256];

cout << "Enter the number of articles: ";
cin >> size;
vector<char *> article(size);
cout << "Enter " << size << " articles. " << endl;
for(int i = 0; i < size; i++)
{
cout << "Article " << i << ": ";
cin.getline(buffer, 256);
article[i] = new char[strlen(buffer)];
strcpy(article[i], buffer);
}
としたんですが、一回目のループでなぜか
cin.getline(buffer, 256);のラインがスキップされてしまうんですが、なぜだかわかりますでしょうか?

601 :デフォルトの名無しさん:2005/05/02(月) 10:27:27
cin >> size;


602 :デフォルトの名無しさん:2005/05/02(月) 17:36:49
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク):

■■プロセス間通信とシグナル■■
一つのプログラムで二つのプロセスを作成して下さい.
一つ目のプログラムは待機状態にして下さい.
二つ目のプロセスで,ファイルに文字列を書き込み,
書き込みを終了したら一つ目のプロセスにシグナルを送信します.
一つ目のプロセスがシグナルを受信すると,
そのファイルから書き込まれた内容を取得します.
そして,文字列を大文字に変換し出力します.

[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年5月5日
[5] その他の制限: なし

よろしくお願いします。

603 :デフォルトの名無しさん:2005/05/02(月) 21:21:41
>>602
#include <stdio.h>

int main(void) {
 system("echo \"Hello, world\n\ >tr a-z A-Z");
 return 0;
}


604 :デフォルトの名無しさん:2005/05/02(月) 21:23:04
たぶんforkとかしてほしいんでしょ。

605 :デフォルトの名無しさん:2005/05/02(月) 22:13:46
>>602
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/342.c

606 :デフォルトの名無しさん:2005/05/02(月) 22:20:54
【質問テンプレ】
[1] 授業単元:
C++プログラミング
[2] 問題文(含コード&リンク):
氏名、数学、物理、英語、3科合計の5つのデータを扱う構造体(struct siken)を
定義する。メンバ名はそれぞれsimei,sugaku,buturi,eigo,gokeiとし、氏名の大きさは20の
文字配列で点数はすべて整数型を使用する。
各入力はsiken input_data(void);という関数を、各出力はvoid output_data(siken);
という関数を作成し使用するものとする。ただし、入力は1人分ではなく複数人のデータ
が入力できるようにすること。

[3] 環境
 [3.1] OS: win
 [3.2] コンパイラ(バージョン): ビジュアルC++
 [3.3] 言語:C++
[4] 期限:2005年5月7日
[5] その他の制限:
これまでの学習範囲が入出力ストリーム、反復処理、if-else文、関数、配列、構造体
と初歩的なので難しい記述はできるだけ避けるようお願い致します。

よろしくお願いします

607 :デフォルトの名無しさん:2005/05/02(月) 23:29:15
>上に向かう場合は

開始位置が 最初のポインタ-テスト文字列長 でテスト
あとは1文字づつ遡りながら

ところで、遡った検索はいつ止めるんだ?w

608 :デフォルトの名無しさん:2005/05/02(月) 23:40:30
>>607
strrの命令に従うのなら、受け渡すポインタは文字列の始まりで
検索開始位置を'\0'まで進めてから、遡って検索を始め
終了位置は、受け渡されたポインタでOK

609 :デフォルトの名無しさん:2005/05/02(月) 23:55:15
>>606
で、ユーザーに入力させて何がしたいのだ?

610 :609:2005/05/02(月) 23:57:38
>>606
あ、それから、siken input_data(void);がC臭いんだが、本当に
C++で大丈夫なんだろうな?

611 :607:2005/05/03(火) 00:02:00
>608

>593 からはそのようなことは読み取れません
っーか593本人が答え!

612 :デフォルトの名無しさん:2005/05/03(火) 00:07:12
>>593
>strstr関数は第1引数の文字列のポインタから末尾までを検索して
>第2に引数の文字が最初にみつかったポインタを返しますけど
strchr?

613 :デフォルトの名無しさん:2005/05/03(火) 00:54:34
>>610
たしかにC++です。
何がしたいのか・・・多分、キーボードから入力し、それを表示させるだけかと思います
構造体に関数を使う練習です

よろしくお願いします。

614 :609:2005/05/03(火) 01:24:10
>>613
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/343.cpp

615 :デフォルトの名無しさん:2005/05/03(火) 01:39:31
構造体とか関数とかますますC臭い

616 :デフォルトの名無しさん:2005/05/03(火) 02:22:32
>>467
一様乱数をただ重ねるだけでいいの?0を平均とした正規乱数の方がいいんじゃないの?

617 :デフォルトの名無しさん:2005/05/03(火) 08:21:30
[1] 授業単元:
C++
[2] 問題文(含コード&リンク):
キーボードから実数を一つ入力し、小数点以下第2位で四捨五入した数値を表示するプログラムを作成しなさい。作成したプログラムが、正負両方の入力に対して正しい結果を与えることを確認しなさい。
[3] 環境
 [3.1] OS:ME以上
 [3.2] コンパイラ(バージョン): visual c++
 [3.3] 言語:C++
[4] 期限:5月5日まで
[5] その他の制限: コンソールアプリケーション表示で



618 :デフォルトの名無しさん:2005/05/03(火) 09:19:01
自己解決しました。

619 :デフォルトの名無しさん:2005/05/03(火) 09:36:18
>>618 あんた誰やねん…

620 :human vs zombie:2005/05/03(火) 10:08:52
まったく手におえません。お願いします。
グラフィカルにゾンビが人間を追っかけて、
それを人間が逃れるsimulationです。
リンク先に、完成したゲームのサンプルがあります。
humanとzombieの2つのクラスをp2_Sim内に作らなければなりません。

【質問テンプレ】
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
問題文 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=345
途中までのコード&サンプルゲーム http://www.geocities.com/anycplus/p2.zip
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ(バージョン):MSVC
 [3.3] 言語:C++
[4] 期限:なるべく早く。
[5] その他の制限:
問題文少し
「ルール」
人間とゾンビが自分の半径以内を探索する。
人間が範囲内にゾンビを見つけたら、スピードを加速して逃げる。
ゾンビが範囲以内に人間を見つけたら、スピードを加速して、人間をつかまえる。
ただし、人間のスピード>ゾンビのスピードなので、食う食われるはなし。


本当、マジでお願いします。

621 :デフォルトの名無しさん:2005/05/03(火) 13:35:52
>>617
やってないからただ言うだけだけど、
double tempに読み取って百倍して、int xにいれる。
tempを十倍したものをint yにいれる。
if(x%10>=5){
y++;
}

double answer = y/10;

表示で少数第一位まで表示する仕方は知ってるよね?
こうやったらできると思う。

622 :デフォルトの名無しさん:2005/05/03(火) 13:37:09
>>621
やってからいえやー糞やろ?

623 :デフォルトの名無しさん:2005/05/03(火) 20:06:10
>>614
ありがとうございました

624 :デフォルトの名無しさん:2005/05/03(火) 20:07:49
ttp://p237.net220216001.tnc.ne.jp/
wwwwwwwwwうぇwwwwうぇwwwwwwww
wwwうはっwうぇおkwwwwwwwwwwwwwww
wwwうぇおkwwwwwwっっっっうはっwwwwww
おkうぇwwwwwwうぇwwwwwwwwwwww

625 :デフォルトの名無しさん:2005/05/03(火) 20:20:55
>>617
悲惨なコードですが…
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=23741

626 :デフォルトの名無しさん:2005/05/03(火) 21:14:46
>>617
double foo;
if (scanf("%lf", & foo) == 1) {
printf("%.1f\n", foo);
}


627 :デフォルトの名無しさん:2005/05/03(火) 21:31:30
>>624
なんだお前,「w」とか「うは」とか
あれか!新手のブレインファックか!

628 :494:2005/05/03(火) 22:27:20
しつこいようですみません
onlineの条件がどれも合わないようなので・・

629 :デフォルトの名無しさん:2005/05/03(火) 23:05:35
>>628
>>523
>printf("%s\n",(x>=-10.0&&x<<=10.0&&y>=-10.0&&y<=10.0)?

printf("%s\n",(x>=-10.0&&x<=10.0&&y>=-10.0&&y<=10.0)?
に汁

630 :デフォルトの名無しさん:2005/05/04(水) 00:39:35
[1] 授業単元: C言語 配列

[2] 問題文: 長さlの配列の内容を要素n個分後ろにずらす関数.
      (n個目までの要素と、n個目以降の要素を入れ替える関数)   

[3] 環境
 [3.1] OS: リナックス
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:来週の月曜日
[5] その他  なし

配列が苦手で苦戦しています。
皆様の知恵をお貸しください。


631 :デフォルトの名無しさん:2005/05/04(水) 00:42:50
有名な方法しってる

[A][B] のブロックに分けてそれぞれを反転
→[AR][BR] としたら全体を反転
→[B][A]

632 :デフォルトの名無しさん:2005/05/04(水) 00:48:35
l=10 n=3のとき

0123456789:添字
abcdefghkm:中身

(1) hkmabcdefg(後ろのが前にくる)か
(2) ***abcdefg(*は0か特定の何か)か
とかあるけど(1)でいいかな?

あと l はコンパイル時に固定でいいですか?

633 :デフォルトの名無しさん:2005/05/04(水) 00:51:42
>632

(1)で

>あと l はコンパイル時に固定でいいですか?
ダメ

634 :デフォルトの名無しさん:2005/05/04(水) 01:07:53
>>632
#include <stdlib.h>
#include <string.h>
void wig (void *p,size_t s,size_t n,size_t l){
  l=s*l;
  void *b=malloc(l*2);
  memcpy(b,p,l);
  memcpy(b+l,p,l);
  memcpy(p,s*n,l);
  free(b);
  return;}

635 :デフォルトの名無しさん:2005/05/04(水) 01:10:20
>void *b=malloc(l*2);

なにゆえ l*2 ?

636 :634:2005/05/04(水) 01:15:05
ミス
>>632 ×
>>630
>  memcpy(p,s*n,l);
  memcpy(p,b+l-s*n,l);


637 :デフォルトの名無しさん:2005/05/04(水) 01:20:25
>>635
中身を2度コピーし必要な所から切り取るため
(考えるのが面倒だったから)

>l=10 n=3のとき
>0123456789:添字
>abcdefghkm:中身
を例にすると、
abcdefghkmabcdefghkm(一時的に二重にコピーする)
10-3番目のところから、10文字切り取る
hkmabcdefg

638 :デフォルトの名無しさん:2005/05/04(水) 01:24:20
まぁ、普通に考えれば、二重にする必要も無いが、
本当に眠くて、考える頭がない…

639 :デフォルトの名無しさん:2005/05/04(水) 01:25:35
ちんこしまってねれ

640 :デフォルトの名無しさん:2005/05/04(水) 01:37:41
>>630
俺は>>631ではないが、確かに有名なので、知っておいても損はないかと。

#include <stdio.h>
typedef int T;
void swap(T* x, T* y) {
    T temp = *x;
    *x = *y;
    *y = temp;
}
void reverse(T* first, T* last) {
    for(; ; )
        if (first == last || first == --last) return;
        else swap(first++, last);
}
void rotate_array(T* p, unsigned int l, unsigned int n) {
    n = l - n % l;
    reverse(p, p + n);
    reverse(p + n, p + l);
    reverse(p, p + l);
}

void print_array(int* t, unsigned int n) {
    int i;
    for(i = 0; i < n; i++) printf("%d", t[i]);
    printf("\n");
}
int main(void) {
    int a[] = {0,1,2,3,4,5,6,7,8,9};
    rotate_array(a, sizeof(a) / sizeof(a[0]), 4);
    print_array(a, sizeof(a) / sizeof(a[0]));
}

641 :デフォルトの名無しさん:2005/05/04(水) 01:53:30
なんとなく再帰。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(void *a, void *b, size_t size) {
  while(size--) {
    char temp = *(char *)a;
    *(char *)a = *(char *)b;
    *(char *)b = temp;
    (*(char **)&a)++;
    (*(char **)&b)++;
  }
}
void move(void *array, size_t size, size_t length, size_t n) {
  if(length == 1) return;
  if(2*n < length) {
    swap(array, (char *)array + (length - n) * size, n * size);
    move(array, size, length - n, n);
  }
  else {
    swap(array, (char *)array + n * size, (length - n) * size);
    move((char *)array + (length - n) * size, size, n, 2*n - length);
  }
}
int main(void) {
  int i;
  int a[] = {1, 2, 3, 4, 5, 6, 7};
  move(a, sizeof(*a), 7, 3);
  for(i=0; i<7; i++) printf("%d ", a[i]);
  printf("\n");
}

642 :デフォルトの名無しさん:2005/05/04(水) 02:05:27
>>639
パンツが破れてるので、しまえまへん

643 :human vs zombie:2005/05/04(水) 03:53:50
620です。
>>620

どなたか助けてください。
お願いします。
ヒント等でもいいです。
お願いします!

644 :デフォルトの名無しさん:2005/05/04(水) 10:19:16
>>620
わからん

645 :デフォルトの名無しさん:2005/05/04(水) 10:50:00
>>643
そう言う分量の多いものは、ただ助けてと書いても読んだ方は何を助ければいいのか判らないし
途中までのコードを読んで残りを作るのも全部作るのも面倒。
要点を絞ってどこがどう判らないと書いてくれると調べてみる気になるのだが。

646 :643:2005/05/04(水) 11:29:09
>>645
あんたには聞いてません。分からないなら喋るなヴォケ。
どなたかわかる方、お願いしますm(_ _)m

647 :human vs zombie:2005/05/04(水) 11:43:15
いきなりなんの説明もなくGlutを渡されたので、使い方から調べてるのですが・・・。
それはさておき、
human zombieのクラス(たぶんクラス)がどんな風になるか、
想像つかないのです。
教えて貰っていいですか?

648 :デフォルトの名無しさん:2005/05/04(水) 13:20:11
>>643
お前のグチャグチャな(しかも間違った)ソースを理解するのには、
少なくとも2週間はかかる。

649 :デフォルトの名無しさん:2005/05/04(水) 13:30:27
悪い事は言わん。一から書き直せ。

650 :デフォルトの名無しさん:2005/05/04(水) 13:40:58
>>648
どんな汚いソースでも、あの程度の行数で2週間なんて…お前クビ

651 :デフォルトの名無しさん:2005/05/04(水) 13:43:53
>>650
奴の質問に答えてから言えや

652 :デフォルトの名無しさん:2005/05/04(水) 14:08:45
>>651
俺別にクビでいいよーハハハ
金のならないことは言うまでもなく、ほんのちょっとの自己満足の為になんでめんどくさいことしなきゃならんのだwww

653 :デフォルトの名無しさん:2005/05/04(水) 14:16:12
>>652
それならいっそのことレスしなきゃいいのに。顔真っ赤だな。

654 :デフォルトの名無しさん:2005/05/04(水) 14:17:40
>>653
馬鹿を相手にするなよバカ。

655 :デフォルトの名無しさん:2005/05/04(水) 14:20:29
>>653
俺には君の方が真っ赤に見える

656 :デフォルトの名無しさん:2005/05/04(水) 14:32:58
[1] 授業単元:基本情報処理
[2] 問題文
(0〜8の二乗のグラフを描くプログラムをfor文を使用して作ってください。下のグラフのようになります)
0
1*
2****
3*********
4****************
5*************************
6************************************
7************************************************
8***************************************************************
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ:bcc5.5
 [3.3] 言語:C
[4] 期限:5月8日
初歩的な質問ですがお願いします。


657 :デフォルトの名無しさん:2005/05/04(水) 14:37:31
>>656
#include <stdio.h>

int main(void) {
    int i, j;
    for (i = 0; i < 9; i++) {
        printf("%d", i);
        for (j = 0; j < i * i; j++) printf("*");
        printf("\n");
    }
    return 0;
}

658 :デフォルトの名無しさん:2005/05/04(水) 14:46:00
>>657
迅速な回答ありがとうございましたm(__)m

659 :デフォルトの名無しさん:2005/05/04(水) 14:56:57
>>656
#include <stdio.h>
#include <stdlib.h>
void print_star (int n) {if (n <= 0) return; else {putchar ('*'); print_star (n-1);}}
int f (int n) {return n*n;}
int main () {
int i;
for (i = 0; i <= 8; ++i) {printf ("%d", i); print_star (f (i)); putchar ('\n');}
return 0;
}


660 :デフォルトの名無しさん:2005/05/04(水) 16:18:16
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): ベッセル関数及びノイマン関数の第0次から第5次まで図時せよ。
[3] 環境
 [3.1] OS: winxp
 [3.2] コンパイラ(バージョン): 何でも。
 [3.3] 言語:Cでお願いします。
[4] 期限:2005年05月05日12時まで
[5] その他の制限:
本当に全く何を言っているのかもわからりません、どうしてもご教授いただきたくここへきました、大変困っていますよろしくお願い致します。

661 :デフォルトの名無しさん:2005/05/04(水) 16:24:43
>>660
> 図時せよ。
スレ違い

662 :デフォルトの名無しさん:2005/05/04(水) 16:38:16
[1] 授業単元: プロ言
[2] 問題文(含コード&リンク):インテグラル4/(1+x^2)dxの0〜1までの積分がπとなることを確認せよ。
[3] 環境
 [3.1] OS: winxp
 [3.2] コンパイラ(バージョン):bcc
 [3.3] 言語:C
[4] 期限:2005年05月05日24時まで
[5] その他の制限:特にありません。何分素人です、お願いします教えてください。

663 :デフォルトの名無しさん:2005/05/04(水) 16:55:03
>>662
include <stdio.h>
#include <math.h>

double f (double x) {return 4.0 / (1 + x*x);}

double integrateAux (double x, double h, double sum, int n) {
if (n <= 0) return sum;
else return integrate (x+2*h, h, sum + f (x) + 4 * f (x + h) + f (x + 2 * h), n-1);
}

double integrate (double x1, double x2, int n) {
double h;
h = (x2-x1)/n;

return integrateAux (x1, h, 0.0, n/2) * (x2-x1)/n / 3.0;
}

int main() {
printf("%lf\n", integrate(0.0, 1.0, 20));
return 0;
}


664 :デフォルトの名無しさん:2005/05/04(水) 16:57:48
ちょっと失敗失敗
- else return integrate (x+2*h, h, sum + f (x) + 4 * f (x + h) + f (x + 2 * h), n-1);
+ else return integrateAux (x+2*h, h, sum + f (x) + 4 * f (x + h) + f (x + 2 * h), n-1);


665 :デフォルトの名無しさん:2005/05/04(水) 17:02:12
>>662
662さんありがとうございます!
早速ためしてみます!


666 :デフォルトの名無しさん:2005/05/04(水) 17:03:44
>665

663の立場は...

667 :660:2005/05/04(水) 17:05:14
すれ違いなのかも知れませんが、何分困っています、誰かご教授いただけませんか?
お願い致します。

668 :デフォルトの名無しさん:2005/05/04(水) 17:06:47
>>667
Cで、しかもWindowsで図示するのはすごくメンドイ。

669 :デフォルトの名無しさん:2005/05/04(水) 17:07:06
>>667
じゃ、どういう風に図示すればいいのか。
何か指定のグラフィックライブラリがあるのならそれを示せ。


670 :665:2005/05/04(水) 17:07:07
>>663
あ!663サンでした、ありがとうございました!
>>666
忠告ありがとうございます。

671 :660:2005/05/04(水) 17:10:41
>>667
指定のグラフィックライブラリ?
全く何も知識がないアホなので全く分かりません。すいません、
tempre?
なんかこんな感じの名前のソフトで書けといわれたことしかわかりません。
何もわからなくてすいません、女子大では誰に聞いてもわからないのです。

672 :デフォルトの名無しさん:2005/05/04(水) 17:13:50
>>671
スレ違い。

673 :デフォルトの名無しさん:2005/05/04(水) 18:43:36
何で大学でプログラムの初歩もわかってない人間が
「プログラミング言語」なんて単位を取ろうなんて気を起こしたのか・・・
それがわからないのは俺が高卒だからかな?

674 :デフォルトの名無しさん:2005/05/04(水) 18:53:45
なんとなく選んだのでは
と一応大卒の俺が言ってみる

675 :デフォルトの名無しさん:2005/05/04(水) 18:55:58
>>671
おっぱいをうp出来るくらいは出来るだろう

676 :デフォルトの名無しさん:2005/05/04(水) 19:01:48
>>675
スレ違い。オナテク板池

677 :デフォルトの名無しさん:2005/05/04(水) 19:25:35
どなたかお願いします。[1]統計学
[2]純出生過程の乱数を発生させ、パラメータを作り、到着回数を求めるプログラムを作りなさい
※ヒントとしてF(Y)=1-eの(-λX)乗の分布関数を使い、Y=-1/λlog(1-X)の形にしてT=tを代入するとN(0,t)到着回数が出るって感じです
[3]環境
パソコンを扱うことがあまりないのでよく分かりませんが、
OS:Windows-me
言語:C言語です
[4]期限
2005年5/7(土)です。
プログラム習ってないのに習った人と同じ授業だからって宿題出されて泣きそうです

678 :デフォルトの名無しさん:2005/05/04(水) 19:39:12
>>677
> F(Y)=1-eの(-λX)乗の分布関数を使い、Y=-1/λlog(1-X)
Y=1-{eの(-λX)乗}
を展開したら
X=-1/λ・log(1-Y)
って事?
とにかく判りにくいので問題文を丸写ししてください。
(そりゃぁ、分布関数を習っている人はTとかすぐに判るんでしょうけど。)

679 :デフォルトの名無しさん:2005/05/04(水) 21:30:33
ランダムウォークか

680 :デフォルトの名無しさん:2005/05/04(水) 21:54:11
郷ひろみかよ!

681 :デフォルトの名無しさん:2005/05/04(水) 22:09:58
>>620
とりあえずmainがなくてコンパイルが通らないので加えました!
唯一のクラスDemoPoint のオブジェクトを作成して、
定義されている三つの関数を使用してみました。


int
main(void)
{
DemoPoint *df = new DemoPoint();
initializeSimulationState();
drawCurrentSimulationState();
simulatePassageSeconds(22);
}

gccでコンパイル通ったYO!
g++ *.cpp -I. -L. -lX11 -lGL -lGLU -lXi -lXmu -L/usr/X11/lib -lglut

682 :デフォルトの名無しさん:2005/05/04(水) 22:42:15
>>678
問題はヒント〜依然までです。一様乱数を使うと聞きました!Tはおそらく時間でλをギブンしてTを入れると到着回数が出るらしいのですが…

683 :デフォルトの名無しさん:2005/05/04(水) 23:12:33
> F(Y)=1-eの(-λX)乗の分布関数を使い、Y=-1/λlog(1-X)
この式のどこに t を代入しろと?
ここで質問する時は(結果的に過剰になろうとも)プログラム以外の知識は無いと思うくらいの条件を提示して欲しい。
あと関係ないが、λを given するはおかしい。

684 :デフォルトの名無しさん:2005/05/05(木) 00:01:22
λを定数と見るようです。TをじゃなくてXを変数化したらできるでしょうか?

685 :683:2005/05/05(木) 00:14:37
まわりくどく書いた俺が馬鹿だった。
「分布関数」「N(0,t)」の意味・定義式、それと F(Y) や Y=… との関係
これについて答えてくれ。今のままではどこに乱数を使うのかさえさっぱりわからん。
あと「λを given する」は、文法的に誤っていると言いたかっただけなのだが。

686 :デフォルトの名無しさん:2005/05/05(木) 00:54:44
式は恐らくY=の式だけ使います。分布関数とはF(Y)の式のことです。友達に聞いたら以下のことを言われました…意味が分からないので役に立つかどうか分からないのですが一応…
Tの値をscanさせる。

randで乱数発生させる。

Yとλは配列を使う。

関数はmainとは別にユーザー関数で定義してmainにポインタ使って呼び出す。

出力もfor文と配列使って一括表示させる。


687 :683:2005/05/05(木) 00:58:44
解答を聞く前に作り上げたやつをアップしといた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/351.txt
同じディレクトリに
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c
のファイルからmain関数を消したものを mt.h として同じディレクトリに入れてコンパイルしてくれ。
//#define VERBOSE
のコメントを外すと1つ1つについてどこに着いたかを表示する。

688 :683:2005/05/05(木) 01:06:49
連続スマソ。
統計学なんていうからには Mersenne Twister は必須(でないにしろ、標準の rand() はありえない)だろうから
MTを使ってる。
仕様が違ってる様だったらその旨書き込んでくれ。できればどのような出力が欲しいかを教えて欲しい。
あとは定数の意味。(見て分かるとは思うが、日本語を入力できない所で書いてそのままアップしちまった)
NUBMER…シミュレートする物体の総数
LAMBDA…λ
SCALE…統計を取る一つ一つの幅
COUNTNUMBER…統計を取る枠の数-1。 最後の枠には枠外のもの全てが含まれる。

689 :528:2005/05/05(木) 01:15:53
>>352
お答えいただきありがとうございました。

が、しかし入力はscanfで入力したいのですがソースが習っていないようなもので複雑すぎてわかりませんでした。
是非お助けお願いします。
簡単な文の組み合わせで初心者向けに作れるようにお願いします

690 :デフォルトの名無しさん:2005/05/05(木) 01:26:05
F(t)=1-eの(-λt)乗が分布関数です。
ここからX:[0,1](←数直線上の点?)上の一様乱数を発生させます。
上の分布関数にX=F(Y)と代入すると、X=1-e(-λY)乗になります。これを変形すると、Y=の式になりここから乱数を発生させる(?)
T=100とか入れてT秒までに何カウントあったか?というプログラムらしいです。
親切にどうもありがとうございます!こんな親切にしてもらい感激です。

691 :デフォルトの名無しさん:2005/05/05(木) 03:18:29
>>660
どうにもこうにもわからないが
まず直線か2次関数を図示するサンプルを書いて >>1 のアップローダにアップしてほしい
そこから弄って問題の関数のグラフを図示するソース書ける方がでるかもしれません。

テキスト処理、小規模ファイル処理、数値計算と違ってグラフィックはライブラリ他で方法が
異なるのでこちらで何か適当につくっても出題者が納得する解答でない可能性が高い。

最悪何も提示されない場合>>656の様なテキストベースのグラフでよければなんとかしてくれる
方も出てくると思います。

692 :human vs zombie:2005/05/05(木) 07:43:53
>>648

zipファイルの中のコードに間違いはありません。
それをコンパイルすると、zipファイルの中のP2-W32-Starterと同じものが出来上がります。
それは単にランダムに動く点を作っているだけです。
それにhumanとzombieのクラスを加えて、問題文のような動きをさせればいいのですが…。

693 :human vs zombie:2005/05/05(木) 07:44:28
あ、620です。
>>620

694 :デフォルトの名無しさん:2005/05/05(木) 08:35:28
とりあえずDemoPointクラスから死骸と人間作って
vector<死骸>,vector<人間>作って
static関数で範囲内にいるかの判定関数作って
メンバ関数のsimulateで判定関数呼び出して
相応の処理すればいいんじゃない

まあ問題の解説の6がよくわからなかったから
放置ですが

あとMainの方はいじらなくていいとおもうよ


695 :デフォルトの名無しさん:2005/05/05(木) 08:40:13
意味不明な文だな…
そういえばこれだとかなり効率悪そうだな…
判定で1000*1000か…
だからMasterListなんか作るのかな

696 :デフォルトの名無しさん:2005/05/05(木) 09:34:55
>human vs zombie
human も zonbie もDemoPointから派生させるだけでいいんじゃないのかい?
速度だけvirtual setvelocity()みたいな仮想関数にしてhuman と zonbieでそれぞれ速度を変えるとかした。
描画関数書き足したら実際に(独立しては)動いてる。
で、これの本題って1000×1000の計算をopenGLを利用して計算するのてこと?

697 :デフォルトの名無しさん:2005/05/05(木) 09:48:29
>human vs zombie
あとDemoPoint::simulate()の中でx,yが変化してないからいじった。この辺よく判らなかった。

698 :デフォルトの名無しさん:2005/05/05(木) 11:46:46
>>689
int get_t(void)
{
int t;
do {
printf("t = ?");
} while(scanf("%d", &t) != 1 && t > 0);
return t;
}
あとは難しい所はあるまい。

>>690
>ここからX:[0,1](←数直線上の点?)上の一様乱数を発生させます。
genrand_real2() (正確には[0,1)の範囲の乱数。[0.1]にしたければ genrand_real1() だが、1が返ってきたら log0 でエラー)

>T=100とか入れてT秒までに何カウントあったか?というプログラムらしいです。
「何が」何カウントあったかを数えるのかが分からん。

699 :デフォルトの名無しさん:2005/05/05(木) 12:32:37
ありがとうございます。本当に本当に助かります。
この課題の本題は、サンプルのところに、グリッドで仕切られてるのが見えたと思いますが、
それをlistやvectorでポインターを使ってコントロールするということです。
説明の6で書いたのは、そのことで、
左下がlist(0,0)で右に行くたびにlist(1,0),list(2,0),list(3,0)....となり、
その左下から、上に行くたびに、list(0,1),list(0,2),....となります。
2面のマトリックスみたいな。
それをどうやるかが、わからないことの一つでもあります。
あと、多分、クラスの中で、チェックってのをやって、
範囲内に敵がいると・・・・
範囲内に見方がいると・・・・
ってやるのだと思いますが、そのやり方もわからないのです。

自分で難しいなって思うのは、その現在存在してるlistの端に行ったとき、
半径がその現在存在してるリストを超えて探索しなければならないことです。


700 :デフォルトの名無しさん:2005/05/05(木) 12:33:19
今まで自分でやったやつです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/353.txt
下の方に説明加えました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=345
あと、範囲内に敵が見つかったとき、その敵に向かったり、
または離れたりするその方向をどう設定するかもわかりません。
ux,uv,wx,wyの部分。

typedefは都合のいいように使われていました。
void drawCurrentSimulationState(void)
の中でIteratorを使うのに使われてますが、
human、zombieのクラスを作った後、
それが機能しないことに気づきました。
わずらわしければ、とってもかまいません。

自分でも、現在進行形でやっていて、この後も、自分でもずっとやっていますが、
明日までに出来るかどうか分かりません。

よろしくお願いします。

701 :デフォルトの名無しさん:2005/05/05(木) 12:37:02
>>696
人間1000人と、ゾンビ1000人、合計2000人をコントロールするのです。

>>DemoPoint::simulate()
DemoPointは、単なる最初のスターターで、
GLUTが正しくこの課題にそって動くかどうかテストするものです。
最初に、1000人と1000人を作るとき、これがヒントになります。
でも、human class zombie classを作ってしまえば、それは必要はないかなって
思うんですけど、どうでしょうか・・・。

702 :human vs zombie:2005/05/05(木) 12:52:55
List
yappa kou kana...
http://www.geocities.com/anycplus/list.htm


703 :human vs zombie:2005/05/05(木) 14:03:45
言われたのは、こういう風にしろということです。
http://www.geocities.com/anycplus/List.htm

連続投稿すいません。

704 :デフォルトの名無しさん:2005/05/05(木) 14:34:13
>>703
DemoPoint::simulateをvirtualにして、継承したHumanとZombieを作った。
コントラクタで色を変えて、みるとうまくいったが、
simulateの方の挙動がうまくいかない。難しいな。

あと、見た限りだとメモリの掃除してないな。

705 :human vs zombie:2005/05/05(木) 14:49:30
人間とゾンビのクラスを使うということは、強要されてなく、
ただアシスタントがこうすれば良いといっただけなので、
もし使わないほうが楽なら、それでも良いのです。
でも、存在してる関数などを上手く使ってとのことです。
hardcodeは作るなとのこと。
でも、自分にとっては、どこからがhardなのかも・・・・。

706 :デフォルトの名無しさん:2005/05/05(木) 15:13:52
誰か>>690お願いします(´・ω・`)

707 :デフォルトの名無しさん:2005/05/05(木) 15:26:10
>>human vs zombie
すまんが俺には手におえん。
誰か出来るヤシいないのか?

708 :デフォルトの名無しさん:2005/05/05(木) 15:57:04
>>706
>>698
(´・ω・`) 無視されてる・・・

709 :human vs zombie:2005/05/05(木) 16:22:52
http://www.geocities.com/anycplus/simulation.htm
アシスタントに取り付いて、聞いたところ、classよりstructの方が良いかもとのこと。
それで、これをゲットしました。

710 :デフォルトの名無しさん:2005/05/05(木) 16:24:22
>>708
す、すいません(´・ω・`)書きこみしてる時にかぶっちゃった…Y=-1/λlogXなら1入っても大丈夫ですかね?プログラムまったくやったことないので続きもお願いしたいです(´・ω・`)おそらくYのカウント数がほしいのですが

711 :デフォルトの名無しさん:2005/05/05(木) 16:45:08
いまだに X,Y の式と T(t) の関係が不明。
logX を計算するときに X=0 では値不定なの知ってる?1を入れるとか入れないとかいう問題じゃなくて。

こちらの判断としては、>>679 が言ってるようにランダムウォークと判断し、
1.時刻 t=0 の時点で、全てのモノの位置は 0 とする。
2.時刻 t (= 0,1,2,3,4...T-1) において、いくつか(プログラム中ではNUMBER)のモノが
     y=-1/λlog(1-x) (ただし x は [0,1) の一様乱数)
  の式で与えられる y だけ位置を移動させる。これが時刻 t+1 におけるモノの位置となる。
3.時刻 t=T-1 における位置が確定しているので、その分布統計を取る。
という流れで作ってた。判断ミス・誤りがあれば、どこがどう間違っているのかを伝えて欲しい。
これまでのやりとりだと何をやりたいのかがさっぱり分からん。

プログラムやったことあるとか無いとか関係なく、色んな点で説明不足すぎる。

712 :デフォルトの名無しさん:2005/05/05(木) 16:56:27
バグ発見(>>698 の訂正後)
× } while(scanf("%d", &t) != 1 && t > 0);
○ } while(scanf("%d", &t) != 1 || t <= 0);

ついでに更なる説明要求
>T=100とか入れてT秒までに何カウントあったか?というプログラムらしいです。
・時間は連続的に流れることが想定されているのか、整数秒毎に状態が遷移することが想定されているのか。
・しつこいようだけどもう一度。「時間とX,Yの式との関係はどうなっているのか」

713 :human vs zombie:2005/05/05(木) 17:02:20
こんな感じになるようですが、やっぱりさっぱりで・・・。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/356.cpp

714 :デフォルトの名無しさん:2005/05/05(木) 17:10:23
見にくいコードだな

715 :デフォルトの名無しさん:2005/05/05(木) 17:27:00
>>711
すいません…明日先生に詳しく問題聞いてきます!

716 :デフォルトの名無しさん:2005/05/05(木) 17:30:27
>>712さんもすいません…明日先生に詳しく聞いて詳しい問題文聞いてきます!

717 :デフォルトの名無しさん:2005/05/05(木) 23:35:59
>>713
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/357.txt
判定と逃げる方向とかもろもろ直したら動く気がする

やってて飽きた('A`)

718 :デフォルトの名無しさん:2005/05/05(木) 23:50:43
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  3つの入力された数字の中から最大の数を出力しなさい
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): ?
 [3.3] 言語:C
[4] 期限:2005年5月8日まで
[5] その他の制限:

まだまだ勉強途中であまり理解できませんでした
回答例の方お願いいたします

719 :デフォルトの名無しさん:2005/05/05(木) 23:52:21
int でいい?

int max = num1;
if(max<num2) max=num2;
if(max<num3) max=num3;


720 :デフォルトの名無しさん:2005/05/05(木) 23:52:31
あげなきゃよかった

とりあえずintのキャストをfloorに


721 :720:2005/05/05(木) 23:54:01

717です

邪魔してスマソ

722 :デフォルトの名無しさん:2005/05/05(木) 23:55:02
max(num1, max(num2, num3));
アホすぎ

723 :デフォルトの名無しさん:2005/05/06(金) 00:05:22
>>718
#include <stdio.h>

int max(int x, int y) {
    return x > y ? x : y;
}

int main(void) {
    int a[3], i;
    for (i = 0; i < 3; i++) {
        printf("入力%d:", i + 1);
        scanf("%d", &a[i]);
    }
    printf("最大のものは%d", max(max(a[0], a[1]), a[2]));
}

724 :デフォルトの名無しさん:2005/05/06(金) 00:15:23
解答ありがとうございます。
ところで、このプログラミングを
Windows上で動かす方法ってありますか?

725 :デフォルトの名無しさん:2005/05/06(金) 00:16:46
( ゚д゚) …

726 :デフォルトの名無しさん:2005/05/06(金) 00:16:49
>Windows上で動かす方法
コンソール、って事ではなくて?


727 :デフォルトの名無しさん:2005/05/06(金) 00:19:19
まあGWだし。。。新学期だし。。

728 :デフォルトの名無しさん:2005/05/06(金) 00:19:28
Linuxだとemacsに書いてGNOMEで実行みたいな感じ
なので、同じようにWindows上でもやりたいのですが、、、

729 :デフォルトの名無しさん:2005/05/06(金) 00:22:26
>>728
コンパイラを入れていればできるし、入れていないならば
入れれば出来る。入れたいならば次のスレの冒頭を参照。

Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/

730 :デフォルトの名無しさん:2005/05/06(金) 00:24:28
同じような環境がいいならCygwin入れてgcc使えば?

731 :デフォルトの名無しさん:2005/05/06(金) 00:25:04
誘導ありがとうございます

732 :デフォルトの名無しさん:2005/05/06(金) 00:26:19
GNOME は GNU Network Object Model Environment の略です。
ユーザーにやさしいデスクトップ環境を、すべてフリーソフトウェアで作ろう、
というのが GNOME の目的です。GNOME は GNU プロジェクトの一部で、また、
オープンソース(tm)の定義を満たすフリーソフトウェアです。このデスクトップ
環境では、ちょっとしたユーティリティから、おおがかりなアプリケーションまで
統一感のあるルック&フィールを持っています。GNOME 準拠のアプリケーションは
GTK+ を GUI ツールキットとして採用しています。



733 :689:2005/05/06(金) 01:12:28
>>698
なぜtがでてくるのかわかりません。あと数字が10個しか入力できないのにそのカウントが見当たりません。
関数の定義の部分が複雑すぎて編集しようがありません。
HELP!!

734 :デフォルトの名無しさん:2005/05/06(金) 01:27:11
>733
そーとは530の方が簡単だろう

>なぜtが
別に関数内部の変数名だからどーでもいい

>数字が10個しか入力できないのにそのカウントが
main()でつかうのじゃ
int x[10];
for(i=0; i<numof(x); ++i) x[i]=get_t();
mysort (x, numof(x));
for (i = 0; i < numof(x); ++i) printf ("%d ", x[i]);



735 :デフォルトの名無しさん:2005/05/06(金) 02:08:56
あー、ごめん、ごめん。レス番間違えてた。
自分の発言が >>683=685=687=688=698=708=711=712 で、
>>677=682=684=686=690=706=710=715=716 に対してのレスのつもりだったんよ。
つまり >>677=… に =689 も含まれてると勘違いしてた訳だ。流れだけ見て番号見てなかった。

わけの分からんレスだったろうに、(多分無理矢理)解釈してくれた>>734にサンクス。

736 :734訂正:2005/05/06(金) 02:23:14
main()

int x[10];
for(i=0; i<numof(x); ++i) scanf("%d",&x[i]);
mysort (x, numof(x));
for (i = 0; i < numof(x); ++i) printf ("%d ", x[i]);

これでいいか? >735

737 :human vs zombie:2005/05/06(金) 02:28:34
>>717
ありがとうございます。
717さんのコードを見ているんですが、
どこをどう直したらいいのか、さっぱり。。。
もしだいたいどこを直せばいいのか分かっていたら、
教えてもらっていいですか?

738 :735:2005/05/06(金) 02:30:15
混乱のお詫びに書いた…ら結果的には>>736みたいになったんで上げるの中止。ども>>736

739 :デフォルトの名無しさん:2005/05/06(金) 02:35:49
>>737
教えてもわからんだろう。

740 :human vs zombie:2005/05/06(金) 02:43:09
>>739
そうなのかぁ・・・・。はぁ。
今、717がくれたコードを解読してるんですが、
あと数時間で締め切りなんです。
自分で出来る限りやろうと思ってるのですが。。。

741 :デフォルトの名無しさん:2005/05/06(金) 03:35:54
>>740のhuman vs zombie が何の課題なのか気になる
アシスタントとか付いてるっていうし

742 :デフォルトの名無しさん:2005/05/06(金) 03:44:40
大学の課題です。
クラスには教える教授と採点とかそのクラスの雑用をするアシスタント(大学院生)
がいます。

743 :デフォルトの名無しさん:2005/05/06(金) 04:33:56
ttp://81tt78.omn.ne.jp/
おkっうぇwwwwwwwwwwwwっうぇwwwwww
wwwwwwうぇwwwwwwwwwwwwうはっ
っっwwwwwwwwwwwwっうぇwwwwうはっ
うはっっっっwwwwwwwwwwwwwうぇうぇw
www

744 :デフォルトの名無しさん:2005/05/06(金) 04:59:33
>>743
新手のビールス?

745 :デフォルトの名無しさん:2005/05/06(金) 05:41:53
>>744
★山田ウィルス対策スレ2
http://qb5.2ch.net/test/read.cgi/operate/1114695735/

746 :デフォルトの名無しさん:2005/05/06(金) 07:38:46
 

747 :デフォルトの名無しさん:2005/05/06(金) 09:39:40
>>713
typedef std::list HumanPtrs;

こんなこと可能だったのか?

748 :human vs zombie:2005/05/06(金) 10:02:21
>>747
可能かどうかは、たぶん可能かと。
アシスタントの人は、宿題は一通りプログラムし終えて、
我々の宿題を採点するので・・・。
アシスタントのプログラムは、それで動いたんだと思う。
まぁ、ただstd::listを使っても良いと思いますが・・・。
とにかく動かないことには始まらないというのが、教授のモット−なんです。
これ、なんとしてでも完成させたいというか、
自分が無理なら、そのコードを見て勉強したいんですよね・・・。

749 :デフォルトの名無しさん:2005/05/06(金) 10:14:58
頭の良い人が考えることってよくわからない罠

750 :デフォルトの名無しさん:2005/05/06(金) 10:15:51
>>748
typedef std::list<Human> HumanPtrs;のようにテンプレート引数を指定しないと駄目だろ。

751 :デフォルトの名無しさん:2005/05/06(金) 10:31:54
[1] 授業単元: C言語基礎
[2] 問題文(含コード&リンク):
4つの整数a,b,c,dを入力して2つの仮分数a/b、c/dとして出力し、
それぞれをx,yとしてxとyの四則演算を行い、仮分数・帯分数としてそれぞれ答えを出力するプログラムを書け。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C
[4] 期限:本日中
よろしくお願いします。

752 :デフォルトの名無しさん:2005/05/06(金) 12:04:37
この設問、ひねりも何にもないんだけど
こういうのも聞かないとわからないの?

753 :メモリダイヤルです& ◆cl6EOCayao :2005/05/06(金) 12:13:06
以前質問させていただいたメモリダイヤルです。
前回は色々ありがとうございました。
ここまではできたんですが、これ以上どうにもなりません。
課題の条件と一致できない部分が多々あるので、ご教授下さい。
課題の内容など詳しい事は"メモリダイヤル2"の名前で
以下URLにアプロダしてますので、わかる方よろしくお願いします。

754 :デフォルトの名無しさん:2005/05/06(金) 12:30:50
>>605
ありがとうございます!

755 :& ◆2xA98CT86Y :2005/05/06(金) 12:38:39
すいません、URL忘れてました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?

よろしくお願いします。

756 :メモリダイヤルです:2005/05/06(金) 12:40:36
名前の部分が変な表示になります。。。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?

メモリダイヤルです。よろしくお願いします。

757 :デフォルトの名無しさん:2005/05/06(金) 12:55:54
http://n219078172160.netvigator.com/
wwwwwwwwwwwwwww

っうぇうはっwww
wwwwwwwwwwwwっっおkwwwっうぇwwwwwwwwwwww
おkwwwwwwwwwwwwwwwwww

758 :デフォルトの名無しさん:2005/05/06(金) 13:37:06
eRTOSについて詳しい方いらっしゃいますか?
もしいたら、質問したいです。

759 :デフォルトの名無しさん:2005/05/06(金) 14:42:53
>>758
おまえ日本人なのか?
英語で質問するときあるし
毎回マルチしてるし

ハッキリ言って害悪だから。逝ってちょうだい。

760 :デフォルトの名無しさん:2005/05/06(金) 14:43:35
>>751
#include <stdio.h>

#define B(x) while (printf(#x"> "), scanf("%d", &x) != 1) scanf("%*[^\n]")
#define C(x,y) E(x,y);\
if (y == 0) { fprintf(stderr, "エラー\n"); continue;} \
if (x*x < y*y) { fprintf(stderr, "%d/%d:真分数、エラー\n", x, y); \
continue;}
#define A(x,y) for (;;) { B(x); B(y); C(x,y); break;}
#define E(a,b) (g=gcd(a, b), a/=g, b/=g)
#define D(d,n,m) den = d; num = n; C(num, den); \
printf(m": %d/%d, %d %d/%d\n", num,den,num/den,num%den,den);

int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }


761 :デフォルトの名無しさん:2005/05/06(金) 14:44:00

int main(void)
{
int a, b, c, d;
int den, num, g;

for (;;) {
A(a, b);
A(c, d);
printf("a/b=%d/%d\n", a, b);
printf("c/d=%d/%d\n", c, d);
D(b * d, a * d + b * c, "加");
D(b * d, a * d - b * c, "減");
D(b * d, a * c, "乗");
D(b * c, a * d, "除");
break;
}

return 0;
}

眠いからこれで勘弁して。

762 :デフォルトの名無しさん:2005/05/06(金) 15:01:05
>>751
a,b,c,d入力後にb,dが0でないか確かめる
0だったらもう一回やり直させる
負の数があればやり直させるかe,fを作ってそこに1か-1とかいれて
abcdを正にして計算後e,fをかけるとかする
(ただし-2147483648など特定の数で挙動不審になることがある)

a,bとc,dで最大公約数をとっておのおの割る(約分)
約分してa/bが整数になった場合ただ整数を1つ出すか
 a'/1とするのかは任せる。
分数同士の四則は小学生レベルなので略
計算後も約分を忘れない

関数を使ってやりたいのなら返値で分数を出すのは難しい(構造体とか)ので
ポインタを用いる。前の文がわからなければmain()の中で済ませること。

帯分数と仮分数はa/bが1より大きくなったとき(a>b)表示が異なる

書こうとしたら上のがよぎってまともなの書くのに3時間くらいかかるヘタレなので
あとはまかすた



763 :デフォルトの名無しさん:2005/05/06(金) 15:11:01
>>759
何言ってんの、はげ。
しらねーなら、黙ってなさいな。


764 :デフォルトの名無しさん:2005/05/06(金) 15:21:32
>>763
> 何言ってんの
ってマジで日本語しらんのか?
質問の仕方知らないなら質問するなって

つうかマルチ先で答えてくれてる人いるじゃん
そっちの相手してあげたら?

日本語分からない外人なんだか
英語が上手な基地外日本人なんだか
おまえどっちだ?

765 :デフォルトの名無しさん:2005/05/06(金) 15:30:40
deadlockした複数のスレッドを直してやるにはどんな方法をとる事が
出来るでしょうか? 

766 :デフォルトの名無しさん:2005/05/06(金) 15:33:34
>>748
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/359.txt
だいぶ良くなったかも…

767 :デフォルトの名無しさん:2005/05/06(金) 15:34:49
>>765
ヒント:ランダム

768 :デフォルトの名無しさん:2005/05/06(金) 15:41:57
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 3つの文字列の入れ替え
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): BCC
 [3.3] 言語:C
[4] 期限:2005年5月7日まで


任意の文字列3つをキーボードから入力
cat
dog
cow

1行目と3行目を入れ替えて表示
cow
dog
cat


769 :デフォルトの名無しさん:2005/05/06(金) 16:01:41
>>768
#include <stdio.h>
#include <string.h>

int main()
{
char buf[3][4096], tmp[4096];
int i;

for (i=0 ; i<3 ; i++)
fgets(buf[i], 4096, stdin);

strcpy(tmp, buf[0]);
strcpy(buf[0], buf[2]);
strcpy(buf[2], tmp);

for (i=0 ; i<3 ; i++)
printf("%s", buf[i]);

return 0;
}

770 :[1/2]:2005/05/06(金) 16:32:25
>>768
#include <stdio.h>
#include <string.h>
#include <memory.h>

#define MaxCount (100)//100個まで受け付ける。かえるとMaxCount個受け付けるようになる。
char* StrGetFromConsole(){
    char* pos;
    char buf[1024];
    fgets(buf,1024,stdin);
    pos=strchr(buf,'\n');
    if(pos!=NULL) (*pos) = '\0';
    return strdup(buf);//自動的にmallocしたものが返る。
}
unsigned int UIntGetFromConsole(){
    unsigned int num;
    char buf[1024];
    fgets(buf,1024,stdin);
    sscanf(buf,"%d\n",&num);
    return num>MaxCount? MaxCount:num;
}
int Reverse(char** bufs,unsigned int num){
    unsigned int i;
    char* temp;
    for(i=0;i<(num/2);i++){
        temp=bufs[i];
        bufs[i] = bufs[num-i-1];
        bufs[num-i-1] =temp;
    }
    return 0;
}

771 :[2/2]:2005/05/06(金) 16:33:18
int main(int argc, char* argv[])
{
    char** bufs;
    unsigned int num;
    int i; 
    puts("How many input?");//英語力微妙・・・
    num=UIntGetFromConsole();//unsigned int を取得
    bufs=(char**) malloc(sizeof(char**)*num);
    memset(bufs,NULL,num);
    puts("Start input.");
    for(i=0;i<num;i++){
        bufs[i] = StrGetFromConsole();
        printf("Echo:%d-[%s]\n",i,bufs[i]);
    }
    Reverse(bufs,num);//反転関数。内容はポインタの付け替え。

    for(i=0;i<num;i++){
        printf("%d-%s\n",i,bufs[i]);
    }
    for(i=0;i<num;i++){
        free(bufs[i]); //strdupからきたものをfree
    }
    free(bufs);//char**をfree
    //_CrtDumpMemoryLeaks();

    return 0;
}

772 :770&771:2005/05/06(金) 16:37:26
遅かったか。

773 :デフォルトの名無しさん:2005/05/06(金) 16:37:32
>>770-771のような厨房に答えられると質問者も大迷惑だな

774 :デフォルトの名無しさん:2005/05/06(金) 16:42:56
>>773
どういうところがまずいのかご教授ください。おねがいします。

775 :デフォルトの名無しさん:2005/05/06(金) 16:53:02
要求された仕様以上のモノを作られるほうもたまったものじゃないなwww
プロなら失格だwwwwwww

776 :≠773:2005/05/06(金) 16:53:42
あっちこっち間違いだらけだがね。
一度、コンパイラの警告レベルを引き上げてコンパイルして味噌。
それでも理解できなかったら初心者スレ辺りで聞いてくれ。

777 :デフォルトの名無しさん:2005/05/06(金) 16:54:08
777 (*^ー゚)b

778 :776:2005/05/06(金) 16:55:30
おっと忘れた。
>>776>>774宛て。
ついでに付けたし。
コメントの日本語もおかしいので見直すことをお勧めしておく。

779 :デフォルトの名無しさん:2005/05/06(金) 16:55:57
>>775
ああ、なるほど。
以後気をつけますよ。
よく考えたら、自分で改造してもらったほうが上達するかな。
今度から省力しつつ書きます。かけたらね。

780 :デフォルトの名無しさん:2005/05/06(金) 17:01:43
コメントもC99だしな。ってか邪魔なコメントが多すぎる。二度手間。

781 :デフォルトの名無しさん:2005/05/06(金) 17:04:00
おっと、すれ違いか。
>>776
多少のwarningはなんとか!!
コメントは、確かにわかりにくいかもしれないです。
きをつけます。はい。

782 :デフォルトの名無しさん:2005/05/06(金) 17:08:00
さらにすれ違い。今度は失敗しないぞと。
>>780
コードだけでわかってもらえるような気がしなかったからつけてみました。
二度手間ってことは、喜んでいいんしょうか・・・。
馬鹿ですいません。

783 :デフォルトの名無しさん:2005/05/06(金) 17:08:30
>>781
コンパイラは警告しか返さないが、それに甘えていいレベルの間違いじゃない。


784 :デフォルトの名無しさん:2005/05/06(金) 17:09:29
>>782
大丈夫、コメントが無駄なだけで、ソースが判り易いと言う訳じゃないから。

785 :デフォルトの名無しさん:2005/05/06(金) 17:24:47
>>783
うーん。どこが間違ってるかちょっとわからない。(コメントは確かにCでは不手際だったけど、
見た感じメモリリークもしてないし、そこら辺は気をつけたつもりなんだけど、どこだろ・・・。

>>784
精進します。

786 :デフォルトの名無しさん:2005/05/06(金) 17:31:06
[1] 授業単元:C
[2] 問題文(含コード&リンク):
type型の二つの値を交換する関数形式マクロ swap(type, a, b) を定義せよ. 例えば,int型の変数x, yの値が5と10であるとき,swap(int, x, y)を呼び出した後は,x, yには,10と5が格納されていなければならない.
[3] 環境
 [3.1] OS:iMac
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限 :無期限
[5] その他の制限:
#include <stdio.h>
#define swap(type, a, b){
type a, b, c;
c = a;
a = b;
b = c;
}

int main(){

int x, y;
swap(int, x, y);
x = 5;
y = 10;
printf("%d,%d", x, y);
}

としたのですが、次のようなエラーが出ます。

787 :つづき:2005/05/06(金) 17:31:37
kadai26.c:3: error: parse error before "a"
kadai26.c:3: warning: data definition has no type or storage class
kadai26.c:4: error: initializer element is not constant
kadai26.c:4: warning: data definition has no type or storage class
kadai26.c:5: error: initializer element is not constant
kadai26.c:5: warning: data definition has no type or storage class
kadai26.c:6: error: initializer element is not constant
kadai26.c:6: warning: data definition has no type or storage class
kadai26.c:7: error: parse error before '}' token
kadai26.c: In function `main':
kadai26.c:17: error: parse error at end of input

どこを改善したらよいか教えてください。


788 :デフォルトの名無しさん:2005/05/06(金) 17:37:04
>>787
defineディレクティブは改行までが有効。
そこで、見掛け上改行したい場合は改行をエスケープする必要がある。

つまり、
#define swap(type, a, b){\
type a, b, c;\
...

とする必要がある。
#勿論、最後はエスケープしちゃダメよ。

789 :デフォルトの名無しさん:2005/05/06(金) 17:37:17
マクロは1行で書け

790 :デフォルトの名無しさん:2005/05/06(金) 17:40:25
>>786
#define swap(type, a, b) type a, b, c;c = a;a = b;b = c; 
これで通らなかったら、知らない。

791 :デフォルトの名無しさん:2005/05/06(金) 17:42:03
>>788−789
直したら通りました。ありがとうございます。

792 :デフォルトの名無しさん:2005/05/06(金) 17:44:13
>>791
ほかにも色々あるのに通ったのかYO!!

793 :デフォルトの名無しさん:2005/05/06(金) 17:51:03
>>785
strdup()は非標準。
引数を取らない関数はchar *StrGetFromConsole(void)のようにvoid書け。(もしC++だったら要らないが)
Reverseはintを返す意味がわからない。voidでいいだろ。
int main(void)でも問題ない。
main()内のmalloc()の引数はsizeof (char *) * numだろ。mallocの戻り値のキャストは不要。
その直後のmemsetは不要。
そもそも問題に文字列3つとあるのだからchar *bufs[MAX_COUNT];で十分。

794 :デフォルトの名無しさん:2005/05/06(金) 17:56:27
>>791
コンパイルが通っただけだろ。
あと何箇所かなおさないと期待した動作はしないぞ。

795 :デフォルトの名無しさん:2005/05/06(金) 17:57:51
[1] 授業単元:C
[2] 問題文(含コード&リンク):
(1)標準入力に現れた数字の出現回数を表示するプログラムを作成せよ.
(2)標準入力に現れた行数をカウントするプログラムを作成せよ.
(3)標準入力に現れた行数をカウントするプログラムを作成せよ.
[3] 環境
 [3.1] OS:win xp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C言語
[4] 期限 :特になし
[5] その他の制限:
 標準入力の定義が理解できず戸惑ってます。お願いします。


796 :785:2005/05/06(金) 18:17:36
>>strdup()は非標準。 
これは知らなかった。すいません。勉強になります。

>>main()内のmalloc()の引数はsizeof (char *) * numだろ。mallocの戻り値のキャストは不要。 
多分どっちも4を返すと思うんですが。これはちょっとわからない。型が違うのはちょっと怖いな。

>>その直後のmemsetは不要。 
これは、メモリスマッシュ(だっけ??)防止のための保険の意味合いが強いです。
無くても動くには動きますね。コーディングスタイルというところでしょうか。

>>そもそも問題に文字列3つとあるのだからchar *bufs[MAX_COUNT];で十分。 
これは納得。*bufs[MAX_COUNT];で良いかはわかりませんけど。

797 :デフォルトの名無しさん:2005/05/06(金) 18:22:59
>>796
int *p = malloc(sizeof (int) * N);なんだからchar **p = malloc(sizeof (char *) * N);だろ。
あと、calloc()使えば0クリア済みのメモリが得られる。改めてmemsetする必要がない。

798 :デフォルトの名無しさん:2005/05/06(金) 18:29:30
>>795
Cでは、stdio.hに定義されていて、標準入力はstdin。
その実態はFILE*なので、読み込み関係のf系関数は使える。
書き込めるかは知らない。
概念としては、ストリームというもので、ある種の流れを制御することを目的としている。
知らなくても使えるけどね。

799 :デフォルトの名無しさん:2005/05/06(金) 18:37:11
>797
あ!そうだった。盲目になってました。ごめんなさい。
callocのことも忘れてた。
勉強になりました。ありがとう。

800 :デフォルトの名無しさん:2005/05/06(金) 18:43:35
>>795

#include <stdio.h>

int main( void )
{
int i,
c1 = 0,
c2 = 0;
size_t size;
char buf[1024];


while ( ( size = fread( buf, 1, 1024, stdin ) ) ) {
for ( i = 0; i < size; i++ ) {
if ( buf[i] >= '0' && buf[i] <= '9' ) {
c1++;

} else if ( buf[i] == '\n' ) {
c2++;

}
}
}

printf( "数字 %d\n行数 %d\n", c1, c2 );
}

801 :デフォルトの名無しさん:2005/05/06(金) 19:20:24
>>800
ファイル末尾に改行がないと、行数を間違う。
で、fgetc()を使わないのは何故?

802 :デフォルトの名無しさん:2005/05/06(金) 19:32:38
>>795お願いします(;^ω^)

803 :801:2005/05/06(金) 19:42:26
>>802
>800は見てないの? ファイル末尾の問題を除けば及第だと思うけど。

804 :デフォルトの名無しさん:2005/05/06(金) 19:49:58
>>803
うわ、見逃してました。>>800さん、どーもー。
後は自分で考えてみます。

805 :デフォルトの名無しさん:2005/05/06(金) 20:33:35
>>795
#include <stdio.h>

int main(void) {
    int oldc, c = EOF, num = 0, newline = 0;
    do {
        if (isdigit(c)) ++num;
        else if (c == '\n') ++newline;
        oldc = c;
    } while ((c = getchar()) != EOF);
    if (oldc != '\n') ++newline;
    printf("数字:%d\n行数:%d", num, newline);
    return 0;
}

806 :デフォルトの名無しさん:2005/05/07(土) 01:47:44
>>795
>(2)標準入力に現れた行数をカウントするプログラムを作成せよ.
>(3)標準入力に現れた行数をカウントするプログラムを作成せよ.
何で誰も突っ込まないの…

807 :デフォルトの名無しさん:2005/05/07(土) 01:54:45
>>677です!やり方を聞いたらまず、X:(0、1]上の一様乱数をY=-1/λlogXから作り、sum=sum+X、countT=countT+1、sum<Tを使って、Tまで何カウントあったかを調べるプログラムを作れば良いらしいです!期日は日曜の夜までになりました!宜しくお願いします!

808 :>>677の相手をしていた人:2005/05/07(土) 04:47:13
飲み会上がりの時間で丁度良いのは何故なんだろう?

なんとなく出題内容は読めた。ただ上記のようにまだ寝てないんで、
起きたらさっさと作る。ついでにあんたの駄目出しもまだ残ってるんで付け加えるよ。
正午頃までには終わる…と思う。

…一応訊いておくが、使用する関数に制限は無いな?「入力には scanf を使え」みたいなやつ。

809 :メモリダイヤル2です:2005/05/07(土) 05:14:58
すいません。。。
どなたか、マジでお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
上記URLに当方が途中まで作成したソースがあります。
作り直していただいてもかまわないので。。。
使用文字など、#defineで定義できたりしないですよね??

810 :デフォルトの名無しさん:2005/05/07(土) 05:31:49
ttp://173-49-67.biwa.ne.jp/
おkうぇwうはっうはっっうはっwうはっwwwwwwwwwwww
おkwwwwwwっうはっうはっうはっ
おkwwwwwwおkうぇwwwwwwwwwwww
おkおkおkwwwwwwwwwwwwwおkおkおk
うぇ

811 :人間とゾンビ:2005/05/07(土) 11:46:07
>>766
ありがとうございます。
>>http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/359.txt
これ、いろいろ試したのですが、STLのListからAssertが出るんですけど?
でませんか?

812 :808:2005/05/07(土) 15:02:20
(ノ∀`)アチャー寝坊しちまった。もう面倒くさいんでプログラムだけ。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define LAMBDA 2.0

double f(double x)
{
return -1.0 / (LAMBDA * log(x));
}

int main(void)
{
double sum, count;
int t;

srand(time(NULL));
scanf("%lf", &count);
for(t = 0, sum = 0.0; sum < count; t++)
sum += f(1.0 - rand() / (RAND_MAX + 1.0));
printf("%d COUNTS\n", t);
return 0;
}


813 :デフォルトの名無しさん:2005/05/07(土) 15:26:30
[1] 授業単元: プログラミング演習基礎
[2] 問題文(含コード&リンク): 2次方程式を解くプログラムを作成せよ。
  プログラムの仕様:1、浮動小数点a,b,cをキーボードより入力する。
              2、解の公式を利用し計算、出力せよ。
                また解の種類(実数解、重解、虚数解)がわかるようにすること。
              3、計算結果が正しいかどうかを判定できるように検算部分を追加せよ。
[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限: 特になし。

普通に解の公式に代入して計算させると計算結果が小数で表示されるので
割り切れるときはいいのですが検算に影響がでてうまく行きません。
アドバイスなどよろしくお願いします。

814 :デフォルトの名無しさん:2005/05/07(土) 15:38:13
>>813
こんなかな?

if (判別式 == 重解ふくむ実数解)
検算する = true;

いろいろ計算;

if (検算する)
if ((f(x) - y) < 許容範囲) {
だいたい、おk;
誤差表示;
} else
だめです;

815 :デフォルトの名無しさん:2005/05/07(土) 15:40:57
>>812
ありがとうございます!(・∀・)

816 :デフォルトの名無しさん:2005/05/07(土) 15:44:03
>>813
(3)の仕様があいまいだな
顧客として失格帰れww

817 :デフォルトの名無しさん:2005/05/07(土) 15:47:14
1〜100までの数字をランダムに選んで50個配列に入れたいのですが
数字がかぶらないように別々にするにはどうしたらよいですか?

818 :デフォルトの名無しさん:2005/05/07(土) 15:49:35
重なるのもランダムの仕業だろうに

819 :デフォルトの名無しさん:2005/05/07(土) 15:59:35
>>812
ついでに聞きたいのですが、T=に値を入れたらカウントが表示されますか?Tの文字がないもので不安になってしまいました。

820 :デフォルトの名無しさん:2005/05/07(土) 16:02:35
>>817
100個の配列を作り、そこに1〜100の数字を入れておいて、
添え字を乱数で発生して50個選ぶ。
一度選んだ数字はゼロなどにしておき、これを選んだら無視して
再度選べばよい。

もしくは100個の配列をランダムシャッフルして先頭から50個
取ってもよい。

821 :813:2005/05/07(土) 16:10:03
>>814さん
レスありがとうございます。
検算の許容範囲を決めるのはいいアイデアですね!
試しにやってみます。

ただどんなやり方でも虚数解が絡んでくるとややこしいことになりますね^^;
虚数を「解なし」としてお終いにしてしまえば手っ取り早くて楽なんですが。

>>816さん
レスありがとうございます。
たしに(3)はあいまいですよね
あと虚数解の計算に関しても適当に工夫するように言われました。
一応私は解の公式で計算して最後に虚数の「i」をつけるようにしてみたんですが
これだと検算でつまります。

解なしとしていいのか、計算するべきか・・・適当っていうのも困りものですね。
学校の課題なんで講師が「お前らがどこまでできるか見てやろうじゃない」と思って
わざとこういう問題を出しているんだと思いますが。

今度から夕飯なにがいい?って聞かれても「なんでもいいよ」とは答えないようにしますw





822 :デフォルトの名無しさん:2005/05/07(土) 16:17:41
>>813
b^2-4acの結果で重解、虚数解が判定できるだろう。
3パターンの解出力-検算ルーチンをつくれば問題なし。

823 :デフォルトの名無しさん:2005/05/07(土) 16:22:30
>>813
計算結果が正しいか判定せよ、って、間違った式で逆算されたら意味無いw

824 :813:2005/05/07(土) 16:42:31
レスありがとうございます
おっしゃるとおり判別式を用いて実数解、虚数解、重解を判別して
解の公式を使ってます。
こんな感じです
d = b*b-4*a*c;    
printf("解の種類:");                 
if(d > 0){
    printf("実数解\n");
    x1 = (-b + sqrt(d)) / (2 * a);
    x2 = (-b - sqrt(d)) / (2 * a);
    printf("x1=%f\nx2=%f\n", x1, x2);
}
else if(d < 0){
       printf("虚数解\n");
    x1 = -b / (2 * a);
    x2 = sqrt(-d) / (2 * a);
    printf("x1=%f+%fi\nx2=%f-%fi\n", x1, x2, x1, x2);
    }
else{
    printf("重解\n");
    x1 = (-b + sqrt(d)) / (2*a);
    printf("x=%f\n", x1);
}

しかしこれだと検算で詰まりませんか?
2次方程式の解の公式は ax^2+bx+c=0 のときに成り立つので
計算しかx1とx2をそれぞれ代入して0になれば正解かなと思っているのですが
これだと明らかに割り切れなくて小数になった場合など解がおかしくなります。
私はこの検算の方法が間違っているような気がするのですがどうでしょう

825 :デフォルトの名無しさん:2005/05/07(土) 16:46:33
>>819
もうそろそろ自分で考えるということを覚えよう。
君の文面とプログラム内の変数との対応を書いておく。

X:(0、1]上の一様乱数 > main 内の 1.0 - rand() / (RAND_MAX + 1.0)
をY=-1/λlogXから作り、 > f(x) 関数
sum=sum+X、 > sum はそのまま、X はf(x)の返り値
countT=countT+1、 > t
sum<T > sumは説明済み、Tはcount
を使って、Tまで何カウントあったかを調べる > 文の意味は分からんが、上3式の条件をプログラム化しただけ

826 :デフォルトの名無しさん:2005/05/07(土) 16:46:58
>>824
手で検算してる時はどうよ?
多少の誤差は目をつぶるだろう?
それと同じ事をプログラムですればいいのさ。

827 :デフォルトの名無しさん:2005/05/07(土) 16:53:11
>>824
実数を有限桁で計算する限り、0にならないことがあるのは当然。
0にならなくても十分小さいことが確認できればよい。
さらに解を改良したければ、数値計算法を勉強すれ。

828 :デフォルトの名無しさん:2005/05/07(土) 16:55:22
>>813
虚数解の場合の判定は x=y±iz と考えた式展開
a(y±iz)²+b(y±iz)+c
=f(y)-az²±i(2ayz+bz)
を実部、虚部バラバラに計算して
if(絶対値 < EPS)
でどうよ?


829 :デフォルトの名無しさん:2005/05/07(土) 17:02:18
つうか、検算はプログラム作る前に行え!

830 :デフォルトの名無しさん:2005/05/07(土) 17:02:18
虚数解は検算がめんどいからstd::complex<double>でも使え。
あ、C++はだめだったか。

831 :デフォルトの名無しさん:2005/05/07(土) 17:02:57
gccならdouble _Complexを使う。
1つ解を求めて2つ目を b / a - (1つ目の解) で求める。
んで、
重解は2つの解を比較して判定。
虚数解は虚数部分をみる。
検算は(1つ目の解) * (2つ目の解) * a が c に十分近いかどうかで判定。

ってやる。俺だったらね。

832 :デフォルトの名無しさん:2005/05/07(土) 17:10:14
訂正
>1つ解を求めて2つ目を b / a - (1つ目の解) で求める。
1つ解を求めて2つ目を -b / a - (1つ目の解) で求める。

833 :デフォルトの名無しさん:2005/05/07(土) 17:33:22
>756

もしかして削除したらおかしくならないか?
文字列の終わりがコピーされていないようだが

別のところで配列で[MAX]確保してんのに[MAX+1]を見てるのはなぜ?[MAX-1]のtypoか?

834 :追記:2005/05/07(土) 17:34:24
>756

「編集」は「削除」と同様に、対象を指定して行うのでは?

835 :さらに追記:2005/05/07(土) 17:38:28
そーいえば、なぜ文字列のコピーにstrcpy()とかsprintf()とか使わないんだろう...

836 :さらにさらに追記:2005/05/07(土) 17:40:02
名前等の入力で
最大文字列長を超えたチェックするなら入力ルーチンでやらないか?普通

837 :デフォルトの名無しさん:2005/05/07(土) 19:04:38
>817
単純な香具師でよければ 1...N個の中からM個の数字を選択する
(Nがとてつもなく大きければなかなか終わらないが)
sel=M; rest=N;
for(i=1; i<=N; ++i){
if(randReal(0,1)< sel/rest){ /*iが選ばれた=配列に格納する*/; --sel; }
--rest;
}

randReal(0,1)は0以上1未満の乱数を返す関数


838 :837:2005/05/07(土) 19:10:48
>820
>一度選んだ数字はゼロなどにしておき、これを選んだら無視して
>再度選べばよい。
迂闊な乱数発生装置だといつまでたってもおわらんぞw


839 :デフォルトの名無しさん:2005/05/07(土) 19:22:51
>>817
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define NUMBER_MIN 1
#define NUMBER_MAX 100
#define NUMBER_COUNT ( NUMBER_MAX - NUMBER_MIN + 1 )
#define SELECT_COUNT 50
void selection( void )
{
int number[ NUMBER_COUNT ];
int select[ SELECT_COUNT ];
int count;
int index;
int selected;
srand( ( unsigned int )time( NULL ) );
for ( count = 0; count < NUMBER_COUNT; count++ ) {
number[ count ] = count + NUMBER_MIN;
}
for ( index = 0; index < NUMBER_COUNT && index < SELECT_COUNT; index++ ) {
selected = rand() * count / RAND_MAX;
select[ index ] = number[ selected ];
printf( "%d\t", select[ index ] );
count--;
for ( ; selected < count; selected++ ) {
number[ selected ] = number[ selected + 1 ];
}
}
}

840 :デフォルトの名無しさん:2005/05/07(土) 21:45:16
迂闊な乱数発生装置だといつまでたってもおわらんがw
というか全体的にネタだが。

>>817
int i = 0;
char arr[50] = {0};

while (i < sizeof(arr)) {
char ch = 1 + rand() % 100;
if (strchr(arr, ch))
continue;

arr[i++] = ch;
}


841 :よろしくお願いします!:2005/05/07(土) 21:46:34
for (i=0; i<N; i++) {
for (j=0; j<N; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);
}
printf("(Input)\n");

for (i=0; i<N; i++){
for (j=0; j<N; j++) printf("%7.2f", a[i][j]);
printf(":%7.2f \n", b[i]);
}
for (i=0; i<N; i++) { printf("(i=%d)\n",i);
temp1 = a[i][i];
for (k=0; k<N; k++)
a[i][k] = a[i][k]/temp1;
b[i] = b[i]/temp1;

for(l=0; l<N; l++)
printf("%7.2f",a[i][l]);
printf(":%7.2f\n",b[i]);

for (j=0; j<N; j++)
if (i != j){
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -=temp2*a[i][k];
b[j] -= temp2*b[i];
for (m=0; m<N; m++)
printf("%7.2f", a[j][m]);
printf(":%7.2f\n", b[j]);
}
}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n");}

842 :よろしくお願いします!:2005/05/07(土) 21:57:18
↑は間違えました。

【1】 授業単元: C言語基礎
【2】問題文(含コード&リンク):
GaussJordan法による連立一次方程式求解プログラムを作成せよ。
ただし、計算過程を理解するために計算途中の係数行列を表示すること。
さらに、絶対値が最大の係数a[pivot][i]をピボットa[i][i]として選択して計算し
ピボット交換が行われたとき、交換された行と交換後の係数行列を表示すること。

※途中までは自分で作ったので、ピボット交換機能を付け加えて貰えれば良いです。

【3】 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Microsoft.NET FrameworkSDK
 [3.3] 言語:C
【4】 期限:明日まで
よろしくお願いします。




843 :ここまでは自分で作りました@:2005/05/07(土) 21:58:38
#include <stdio.h>
#define N 3

int main(){
double a[N][N],
b[N],
temp1, temp2;
int i, j, k, l, m;

for (i=0; i<N; i++) {
for (j=0; j<N; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);
}
printf("(Input)\n");

for (i=0; i<N; i++){
for (j=0; j<N; j++) printf("%7.2f", a[i][j]);
printf(":%7.2f \n", b[i]);
}
for (i=0; i<N; i++) { printf("(i=%d)\n",i);
temp1 = a[i][i];
for (k=0; k<N; k++)
a[i][k] = a[i][k]/temp1;
b[i] = b[i]/temp1;


844 :ここまでは自分で作りましたA:2005/05/07(土) 21:58:59

for(l=0; l<N; l++)
printf("%7.2f",a[i][l]);
printf(":%7.2f\n",b[i]);

for (j=0; j<N; j++)
if (i != j){
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -=temp2*a[i][k];
b[j] -= temp2*b[i];
for (m=0; m<N; m++)
printf("%7.2f", a[j][m]);
printf(":%7.2f\n", b[j]);
}
}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n");
}

845 :デフォルトの名無しさん:2005/05/07(土) 22:11:06
[1] 授業単元:ソフトウェア製作
[2] 問題文(含コード&リンク):
Visual C++を用いて多倍精度の電卓(四則演算)を作成せよ。
 1.Windowsの電卓と同じような精度
 2.ビット操作(ヒント)
 3.簡単なアルゴリズムの説明

演算部分がわかりません。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C++
[4] 期限:2005年5月9日
[5] その他の制限:
よろしくお願いします

846 :デフォルトの名無しさん:2005/05/07(土) 22:33:31
>>ダイヤル
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/365.txt

全角が絡んだ文字処理は苦手です

コメントとしてはインクリメントについて勉強してくれ




847 :デフォルトの名無しさん:2005/05/07(土) 22:38:51
xxxx[enter]
xxxx+yyy[enter]許すのか?

848 :デフォルトの名無しさん:2005/05/08(日) 00:55:47
>>842
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/368.c
ピボット交換機能だけつけた

849 :デフォルトの名無しさん:2005/05/08(日) 02:04:13
>>845
演算部分が肝だろうが(w

850 :デフォルトの名無しさん:2005/05/08(日) 02:22:26
>>817
#include <algorithm>
#include <vector>
#include <stdexcept>

std::vector<int> choose(int max, int num)
{
if (num > max) throw std::out_of_range("num is bigger than max!");
std::vector<int> v(max);
for (int i = 0; i < max; ++i) v[i] = i + 1;
std::random_shuffle(v.begin(), v.end());
return std::vector<int>(v.begin(), v.begin() + num);
}

851 :842:2005/05/08(日) 03:09:21
>>848
すいません、それだと計算しても解答が間違って出力されるんですけど・・・

852 :デフォルトの名無しさん:2005/05/08(日) 04:10:06
>>848
ピボット選択のところは

for (k=0; k<N; ++k) {
  temp1 = a[i][k];
  a[i][k] = a[l][k];
  a[l][k] = temp1;
}

じゃないの?

853 :メモリダイヤル:2005/05/08(日) 13:17:50
834,835,836>さん
ご指摘ありがとうございます。
入力関数を使用する事により、
許容文字以外を受け付けないようにしたかったんです。
構造体の添字は、こちらのミスでした。
おっしゃるように、g_countを使う事により、
指定したデータの編集を行いたいんです。
846>さん
ありがとうございます!!
大変助かります。
理解できない所が少しあるんですが、
対象を指定して編集(修正、削除など)を行う場合は
どのようにしたらよろしいんでしょうか?
g_countを使用したらいいでしょうか?
名前の許容文字はひらがな英数(シフトJIS)なんですが、
それ以外の文字を受け付けないようにするには関数input()で
if文を使い、シフトJISのコード表で条件判断を行わせるのでしょうか?

質問ばかりですいませんが、ご教授くださいませ。
よろしくお願いします。

854 :デフォルトの名無しさん:2005/05/08(日) 15:39:42
>>842
for( k=i; k<N; k++ ){
temp1 = a[k][i];
a[k][i] = a[k][l];
a[k][l] = temp1;
}

でしたね。>>852ご指摘ありがとう。

855 :デフォルトの名無しさん:2005/05/08(日) 16:45:10
>853

>g_countを使用したらいいでしょうか?
NO
配列の添え字を別の変数で指定汁!

>if文を使い、シフトJISのコード表で条件判断を行わせるのでしょうか?
YES
ttp://www.hidecnet.ne.jp/~sinzan/tips/c/c_tip10.htm
↑この辺をパクレ
っつーか自分でググレよw

856 :デフォルトの名無しさん:2005/05/08(日) 17:39:28
[1] 授業単元:プログラミングU
[2] 問題文:
 配列を用いて各自のID#、名前(英小文字)を
キーボードから入力し、最後の各配列データの内容と
番地を出力するプログラムと、実行結果を出力して
レポートとせよ。

ポインタを用いること

[3] 環境
 [3.1] OS:Windows Xp
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:今年の5月9日正午まで。その後提出した場合は減点
[5] その他の制限:無し


ポインタが良く理解できないんです。賢者の方々よろしくお願いします。



857 :デフォルトの名無しさん:2005/05/08(日) 17:42:11
配列 a[0],a[1],,,

ポインタ p = &a[0]
++p
*pはa[1]となっている


858 :856:2005/05/08(日) 17:43:47
問題文を少し書き間違えてました。

配列を用いて各自のID#(7桁数字のみ)、
名前(英小文字)を キーボードから入力し、
各配列データの最後の内容と番地を出力する
プログラムと、実行結果を出力して
レポートとせよ。
ポインタを用いること


問題文はこちらを見てください。おねがします。

859 :デフォルトの名無しさん:2005/05/08(日) 20:31:53
#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *id, *name;
  
  if((id = (char*)malloc(sizeof(char) * 8)) == NULL) return 1;
  if((name = (char*)malloc(sizeof(char) * 32)) == NULL) { free(id); return 1; }

  printf("ID:"); scanf("%7s", id);
  printf("Name:"); scanf("%31s", name);

  printf("ID %s Adress %08X\n", id, id);
  printf("Name %s Adress %08X\n", name, name);

  free(name); free(id);

  return 0;
}

860 :デフォルトの名無しさん:2005/05/08(日) 20:32:52
scanf に長さ指定って意味あったっけ?

861 :デフォルトの名無しさん:2005/05/08(日) 20:41:14
>860
% と変換文字の間にオプションでつけることができる、 10 進の整数で表わされた最大フィールド幅をおくこともできる。
もし幅が与えられないのなら、(以下で述べる例外を除いて) デフォルト値である「無限大」が使用される。
それ以外の場合、この数字を上限として、多くの文字が変換の過程で読み込まれる。変換が始まる前に、ほとんどの変換がスペースやタブを読みとばす。
このときのホワイトスペースはフィールド長に数えられない。

862 :859:2005/05/08(日) 20:42:40
Addressだった

863 :デフォルトの名無しさん:2005/05/08(日) 20:53:18
>>859
あーーー、そんな感じだったのか。
もっと凝ったの作ってた。OTL


864 :デフォルトの名無しさん:2005/05/08(日) 22:08:00
>各配列データの最後の内容と番地

>859 のは先頭でないかい?

865 :デフォルトの名無しさん:2005/05/08(日) 22:46:17
問題文の意味がわかりませんでした

866 :845:2005/05/08(日) 23:33:35
どなたかアドバイスだけでもいいので教えてください。
お願いします。

867 :デフォルトの名無しさん:2005/05/08(日) 23:53:48
>>866 アドバイスを教える?助言を教える?意味和漢ね

868 :デフォルトの名無しさん:2005/05/08(日) 23:56:04
「筆算は多倍精度演算のアルゴリズムのひとつだ」
こんなんでいい?

869 :デフォルトの名無しさん:2005/05/08(日) 23:59:19
>>867
区切って読めばいいじゃん
「どなたかアドバイスだけでもいいので、(上記の問題について)教えてください。」
って感じで解釈できるだろ?

870 :デフォルトの名無しさん:2005/05/09(月) 01:25:37
>>866
四則演算はどのようなビット演算によって行われているかを調べて
任意のビット数で演算できるように自分でビット演算の仕組みを作る

871 :デフォルトの名無しさん:2005/05/09(月) 02:17:02
[1] 授業単元:プログラム基礎
[2] 問題文
4元連立方程式を解け。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:2005年5月9日11:00まで
[5] その他の制限:特にないです

もしわかるかたいたらお願いします。

872 :デフォルトの名無しさん:2005/05/09(月) 02:35:42
>>871
一般的にクラメルの公式だろ・・・・
といいたいが数VCやってないとわからないわな。


873 :デフォルトの名無しさん:2005/05/09(月) 02:39:46
>>871
既出

874 :デフォルトの名無しさん:2005/05/09(月) 02:47:14
ttp://133.139.148.210.dy.bbexcite.jp/
おkwwwっwwwうはっwwwうぇうぇwwwwww
うぇおkwwwっうぇwwwうぇwwwwwwwwwwww
っwwwwwwwwwwwwwwwwwwwwww
wwwwwwうはっwwwwwwおkっwwwwwwwwwwww

875 :デフォルトの名無しさん:2005/05/09(月) 02:53:54
>>873
良く見たら上のほうに書いてありますね。すいませんでした。

557のプログラム実行してみたのですがエラーがでてしまいます。
どこを直せばいいのでしょうか

876 :デフォルトの名無しさん:2005/05/09(月) 03:15:11
>>875
あんたの頭。
こちとらエスパーじゃないんだからどんなエラーか判るわけねぇだろ。

877 :デフォルトの名無しさん:2005/05/09(月) 03:21:58
言われてみればそうですね。あはは。ごめんなさい。

878 :875:2005/05/09(月) 03:35:47
877はわたしじゃないですよー

879 :デフォルトの名無しさん:2005/05/09(月) 03:41:38
>>878=875
だとしたら救いようのないアホ。

880 :デフォルトの名無しさん:2005/05/09(月) 06:25:18
>>875
関数のプロトタイプがない
戻り値のない関数がある
てなとこ。具体的なエラー内容をかいてね。


881 :デフォルトの名無しさん:2005/05/09(月) 12:52:18
[1] 授業単元:プログラム基礎
[2] 問題文
二つの時刻の入力を求め、3つ目を以下のように表示、
a時b分c秒
+ d時e分f秒
___________
h時m分s秒
を導出するプログラムを作りなさい。
変数名、関数名は適当でいいです。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:今日中
[5] 制限は特にありません

882 :デフォルトの名無しさん:2005/05/09(月) 13:47:22
>>881
「3つ目」 って何だよ

883 :デフォルトの名無しさん:2005/05/09(月) 13:47:28
>>881
h = m = s = 0;
s = c + f;
m = s / 60;
s %= 60;
m += b + e;
h = m / 60;
m %= 60;
h += a + d;
これって中学数学の時差とかそういうレベルだな。

884 :デフォルトの名無しさん:2005/05/09(月) 13:56:41
Txtファイルに、-1.23 3.02
2.33 1.24
こんなふうに、1行に2つの数が間にスペースをはさみ保存されてて
それが200行ほどあります。配列A[1][1]に一行目の最初の数、
A[1][2]に1行目の2つ目の数のように入れていくには
どうすればよいですか? お願いします

885 :デフォルトの名無しさん:2005/05/09(月) 13:59:28
fscanf(fin, "%lf %lf", &A[1][i], &A[1][i + 1]);
i += 2;

886 :デフォルトの名無しさん:2005/05/09(月) 14:00:46
>>884
テンプラ使え

887 :デフォルトの名無しさん:2005/05/09(月) 14:01:11
>>881
int main(int argc, char* argv[])
{
int a, b, c, d, e, f, h, m, s;
do { printf( "?時 = " ); scanf( "%d", &a ); } while ( a < 0 || 24 <= a ) ;
do { printf( "?分 = " ); scanf( "%d", &b ); } while ( b < 0 || 60 <= b ) ;
do { printf( "?秒 = " ); scanf( "%d", &c ); } while ( c < 0 || 60 <= c ) ;
do { printf( "?時 = " ); scanf( "%d", &d ); } while ( d < 0 || 24 <= d ) ;
do { printf( "?分 = " ); scanf( "%d", &e ); } while ( e < 0 || 60 <= e ) ;
do { printf( "?秒 = " ); scanf( "%d", &f ); } while ( f < 0 || 60 <= f ) ;
h = a + d; m = b + e; s = c + f;
if ( s >= 60 ) { s -= 60; m++; }
if ( m >= 60 ) { m -= 60; h++; }
if ( h >= 24 ) h -= 24;
printf( "\n" );
printf( " %2d時%02d分%02d秒\n", a, b, c );
printf( "+ %2d時%02d分%02d秒\n", d, e, f );
printf( "--------------\n" );
printf( " %2d時%02d分%02d秒\n", h, m, s );
return ( 0 );
}

888 :デフォルトの名無しさん:2005/05/09(月) 14:21:56
>>884
配列を0から初めていないのは何故?

889 :884:2005/05/09(月) 14:25:36
A[1][1] A[1][2]
A[2][1] A[2][2]


と風にいれて、ファイルの中身の数字全部入れるには
どうすれば?

890 :デフォルトの名無しさん:2005/05/09(月) 14:36:23
>>889
>>886

891 :デフォルトの名無しさん:2005/05/09(月) 14:55:37
>>884

#include <stdio.h>

int main(void)
{
double A[200ほど + 1][3][1];
int i;

for (i = 1; fscanf("%lf%lf", A[i][1], A[i][2]) == 2; i++)
;

return 0;
}

892 :デフォルトの名無しさん:2005/05/09(月) 14:57:08
間違えた orz

893 :デフォルトの名無しさん:2005/05/09(月) 15:03:39
>>889
#include <stdio.h>
#include <stdlib.h>

#define READTEXT "read.txt"
#define MAXN 200

int main(void)
{
 FILE *fin;
 double A[MAXN + 1][3];
 char buf[128];
 int i = 1, j;

 if ((fin = fopen(READTEXT, "r")) == NULL)
  exit(1);

 while (fgets(buf, sizeof(buf), fin)) {
  sscanf(buf, "%lf %lf", &A[i][1], &A[i][2]);
  i++;
 }

 fclose(fin);

 for (j = 1; j < i; j++)
  printf("%.2f %.2f\n", A[j][1], A[j][2]);

 return 0;
}

894 :デフォルトの名無しさん:2005/05/09(月) 15:11:31
>>889
>>888 にも回答汁!







それとも、ネタか?

895 :デフォルトの名無しさん:2005/05/09(月) 15:12:34
OPTION BASE 1 ・・・

896 :デフォルトの名無しさん:2005/05/09(月) 15:17:22
>>889
BASIC上がりか?VBでも>>895のようにしないと添え字は 0 から
スタートするしなあ・・・

897 :デフォルトの名無しさん:2005/05/09(月) 15:44:37
>>889
え〜ととくに理由はないです・・

898 :デフォルトの名無しさん:2005/05/09(月) 15:49:08
>>897
釣れますか?

899 :デフォルトの名無しさん:2005/05/09(月) 15:56:25
http://dhcp3037.orihime.ne.jp/
wwwwwwwwwwwうぇwwwうはっwwwっうぇ



っっうぇwwwおkwwwwwwwwwwwwwww

うはっwwwうぇwwwうぇwwwうぇwww

900 :テキストボックスの幅:2005/05/09(月) 16:32:17
C++.NETでテキストボックスの幅をドラッグして倍に伸ばして保存した
のですが・・
アプリを立ち上げてみるとテキストボックスの下に配置してある
プルダウンメニューの中身が空(空白)になってしまいます。
どなたかテキストボックスの幅を伸ばしてもプルダウンメニューの
表示に影響を及ばさないやり方をご教授していただけないでしょうか。
緊急で困っておりますので宜しくお願いします。

901 :デフォルトの名無しさん:2005/05/09(月) 16:36:48
>>900
お前、そこら中にスレ違いの質問ばらまいてんじゃねーよ。
うんこ氏ね。

902 :デフォルトの名無しさん:2005/05/09(月) 16:51:34
とりあえず右の▼をクリックして大きさ調整汁

903 :デフォルトの名無しさん:2005/05/09(月) 17:14:12
>>893
ありがとうございます!!

904 :メモリダイヤルです:2005/05/09(月) 19:55:59
皆様のおかげであと少しで完成です。
色々なアドバイスありがとうございました!

残る部分は
修正、削除とも対象を指定して編集したい。
名前の昇順、降順が、数字、英字、ひらがなの順番になるんですが、これを
英字<数字<ひらがな の順番にしたい。
電話番号が#<*<0・・・の順番になるんですが、これを
*<#<0・・・・<9にしたい。
名前の入力をひらがな英数(シフトJIS)のみにしたい。
ファイルを2行目から読み込ませたい。
名前の検索を先頭文字一致にしたい。
電話番号の検索で、'-'および'P'以降を無視させたい。

どのように変えたらよろしいでしょうか?
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?

905 :デフォルトの名無しさん:2005/05/09(月) 20:06:10
[1] 授業単元:プログラム入門
[2] 問題文
最初に入力を6回(a,b,c,d,e,f)求め、
ax + by = e
cx + dy = f
2元の連立方程式を算出する関数
int renritsu2(double a, double b, double c, double d, double e, double f, double *x, double *y);
連立方程式が解ける場合1を返す
      解けない場合0を返す
この関数を使って2元連立方程式を解くプログラムを作成しなさい。
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:5月12日
[5] その他の制限は特にありません


906 :デフォルトの名無しさん:2005/05/09(月) 20:16:32
ほほう

907 :デフォルトの名無しさん:2005/05/09(月) 20:21:58
[1] 授業単元:プログラム演習
[2] 問題文
擬似乱数を用いて、大吉、中吉、吉、凶、大凶、を出力しそれぞれの項目の
コード4、3、2、1、0を返すおみくじ関数fortune()を作成せよ。ただし、それぞれの
項目が現れる確率は順番に5.0、20.0、50.0、20.0、5.0%とする。
[3] 環境
 [3.1] OS:ソラリス
 [3.2] コンパイラ(バージョン):わかんないです。
 [3.3] 言語:C
[4] 期限:5月13日
[5] その他の制限は特にありません


よろしくお願いします。

908 :デフォルトの名無しさん:2005/05/09(月) 20:22:10
ふむ

909 :デフォルトの名無しさん:2005/05/09(月) 20:40:09
  _  ∩
( ゚∀゚)彡 new! delete!
 ⊂彡

910 :& ◆cl6EOCayao :2005/05/09(月) 20:52:25
皆様のおかげであと少しで完成です。
色々なアドバイスありがとうございました!
残る部分は
修正、削除とも対象を指定して編集したい。
名前の昇順、降順が、数字、英字、ひらがなの順番になるんですが、これを
英字<数字<ひらがな の順番にしたい。
電話番号が#<*<0・・・の順番になるんですが、これを
*<#<0・・・・<9にしたい。
名前の入力をひらがな英数(シフトJIS)のみにしたい。
ファイルを2行目から読み込ませたい。
名前の検索を先頭文字一致にしたい。
電話番号の検索で、'-'および'P'以降を無視させたい。
どのように変えたらよろしいでしょうか?
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?

911 :デフォルトの名無しさん:2005/05/09(月) 21:24:03
>>907
ソラリスにはurandomがあるのかどうかわかんねぇしぃ
擬似乱数の初期化はclockでもいいのか?
いやダメだな
5%区切りって中途半端だし精度落ち
いや難しいと思うよ。

912 :907:2005/05/09(月) 21:32:20
>>911
乱数の初期化はsrand、生成はrand関数でやるのが条件です。書いとけばよかったですね。
ただ仰る通り確率ごとにコードを返すのがよくわからないんですよね・・・

913 :デフォルトの名無しさん:2005/05/09(月) 21:58:11
文字列impに入っている英文を単語に区切って配列tangoに入れる関数です。
外のwhileは2文字続けて0(スペース)が来たら終了の意味で、
中のwhileで0を検地するごとに配列の行(?)を切り替えて格納する仕組みにしています。
ただ以下のままだとtango[1][]には確かに1単語目が入っているのですが、
tango[2][]以下が空のままです。
どこがおかしいのでしょうか?ご指摘よろしくお願いします。

void word(char tango[][100],const char imp[])
{
int i = 0;
int j = 0;
int k = 0;
int m = 0;
do{
m = 0;
while(imp[i])
tango[j][m] = imp[i],i++,m++;
j++;
k = i +1;
}while(imp[i++] + imp[k]);
}

914 :デフォルトの名無しさん:2005/05/09(月) 22:02:26
ただ以下のままだとtango[0][]には確かに1単語目が入っているのですが、
tango[1][]以下が空のままです。

の誤りでした。ややこしくしてしまい申し訳ないです。

915 :デフォルトの名無しさん:2005/05/09(月) 22:15:19
>>913
0がスペースってどんな文字コードつかってるの?

916 :デフォルトの名無しさん:2005/05/09(月) 22:23:17
>>915
そういやスペースは0じゃないですね…
でもthis is a penと入れるとthisまでは表示してくれるようです。
さらにこんがらがってきた…
以下が多次元配列tangoの中身を確かめるメインプログラムです。

int main(void)
{
int i = 0;
char tango[100][100] = {0};
char imp[100] = {0};

scanf("%s",imp);
word(tango,imp);

for(i = 0; i < 100;i++)
printf("%s",tango[i]);
return(0);

}

917 :デフォルトの名無しさん:2005/05/09(月) 22:31:54
[1] 授業単元:C言語講座
[2] 問題文
ポインタのところで出された課題です。
/* exp01.c */
#include <stdio.h>
main(int argc, char **argv)
{ printf("argv1=%s\n",*(argv+1));
  printf("argv2=%s\n",*(argv+2));
  printf("argv3=%s\n",*(argv+3)); }

これをコンパイルさせて
A>exp01 aaa bbb ccc と入力すると実行結果は
argv1=aaa
argv2=bbb
argv3=ccc
となるのですが、これを参考にして
A>exp02 1(モード) aaa(文字列1) bbb(文字列2) と入力すると実行結果が
aaabbb(文字列1+文字列2)
A>exp02 2 aaa bbb と入力すると実行結果が
bbbaaa
同じくモードが3のときは  ababab
モードが4のときは  ab ba ab
という結果が出力されるようなプログラミング作成せよ。というのが出されたのですが、
どうすればモード別に結果が出力できるようになるのかがいまいち分かりません。
よろしくお願いしますm(__)m

[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:5月11日


918 :デフォルトの名無しさん:2005/05/09(月) 23:08:32
>>913
scanfでなくてgetsを使ってみ

919 :デフォルトの名無しさん:2005/05/09(月) 23:20:31
十数桁の整数値を変数に入れるのに、
long long int 型
を使おうと思ったのですが、「宣言に型が多すぎる」とエラーが出てしまいました。
どうすればよいでしょうか?よろしくお願いします。

920 :デフォルトの名無しさん:2005/05/09(月) 23:25:25
>>918
gets() 勧めるなよ

921 :デフォルトの名無しさん:2005/05/09(月) 23:26:30
>>919
そのコンパイラは多分 long long int に対応していない。

922 :デフォルトの名無しさん:2005/05/09(月) 23:29:56
>>919

__int64

を使って見ましょう

923 :919:2005/05/09(月) 23:30:16
ご返答有難う御座います。

テンプレ通りに質問していなくて申し訳ないです。
コンパイラはborland C++です。
対応していないのですか…。
何か方法はないでしょうか?

924 :919:2005/05/09(月) 23:31:31
>>922さん
有難う御座います。試してみます。

925 :919:2005/05/09(月) 23:46:10
_int64 a;
と宣言したとき、
printf("%…",a)
の…部分は何にすればよいのでしょうか??

926 :デフォルトの名無しさん:2005/05/09(月) 23:49:06
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):英文をキーボードから入力し、単語毎に分割して、各単語と語数を表示
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): BCC
 [3.3] 言語:C
[4] 期限:2005年5月11日まで

語数とはその単語の頻度


927 :デフォルトの名無しさん:2005/05/10(火) 00:10:45
↑あ、それ漏れも知りたいです。似たような問題で悩んでます。

928 :デフォルトの名無しさん:2005/05/10(火) 00:15:57
ヒント:strtok、malloc、realloc、構造体、ハッシュテーブル

929 :デフォルトの名無しさん:2005/05/10(火) 00:17:30
あ、ハッシュテーブル使うなら、reallocは(゚听)イラネ。
その代わりリスト構造。ハッシュはオープンハッシュね。
これなら、単語数がいくら増えても対応できるし。

930 :デフォルトの名無しさん:2005/05/10(火) 00:20:11
>>907
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int fortune(){
static int s=0;
static const char *msg[]={"大凶","凶","吉","中吉","大吉"};
int n,r,c;
if(!s){ srand((unsigned)clock()); ++s; }
r=(int)(20.0*rand()/(RAND_MAX+1.0));
c="43333222222222211110"[r]-'0';
puts(msg[c]);
return c;
}

2進数の乱数を5の倍数で割った場合計算誤差で偏らないか気になる。。。

931 :デフォルトの名無しさん:2005/05/10(火) 00:32:07
>>930
>偏らないか気になる
>>907程度の問題なら、誤差の範囲だろう
が、
>int n,r,c;
の「n」は、>>907でも、必要ないね

932 :デフォルトの名無しさん:2005/05/10(火) 00:35:28
>>925
_int64 じゃなくて __int64 な。
printf("%I64d\n", a);

933 :デフォルトの名無しさん:2005/05/10(火) 00:44:23
>>925
long long a=1234567890123456789LL;
printf("%ld%#09ld\n",(long)(a/1000000000L),(long)(a%1000000000L));
printf("%I64d\n",a);

どっちかでなんとかならん?

934 :デフォルトの名無しさん:2005/05/10(火) 01:01:18
>>905
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/373.c

935 :デフォルトの名無しさん:2005/05/10(火) 01:21:28
[1] 授業単元: オペレーティングシステムI
[2] 問題文(含コード&リンク):
子プロセスを30秒間ゾンビにするようなプログラムを作れ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:明日

わけわかめお願いします

936 :デフォルトの名無しさん:2005/05/10(火) 01:24:11
おどろきました。

937 :デフォルトの名無しさん:2005/05/10(火) 01:25:27
なんでや

938 :デフォルトの名無しさん:2005/05/10(火) 01:32:56
>>926>>927
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/374.txt
但し一行入力のみに対応。ctrl+zなどで終わるまで解析するとか、ワードラップ
に対応させるとかは自分でやってくれ。ctrl+zの方は簡単にできると思う。

939 :デフォルトの名無しさん:2005/05/10(火) 01:39:38
×ワードラップ
○ハイフネーション

940 :デフォルトの名無しさん:2005/05/10(火) 01:41:09
>>935
#include <unistd.h>

int main(void )
{
int i;
if( fork() == 0 )
exit(1);
else{
sleep(30);
wait(&i);
}
}

941 :デフォルトの名無しさん:2005/05/10(火) 01:41:17
>>935
waitpidを使え。

942 :デフォルトの名無しさん:2005/05/10(火) 01:42:49
>>935
こっちじゃない?
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/signal.7.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/raise.3.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/sleep.3.html

943 :942:2005/05/10(火) 01:54:41
しかし >>940 が良さそう。わけわかめ

944 :デフォルトの名無しさん:2005/05/10(火) 01:58:12
[1] 授業単元: プログラミングとその応用
[2] 問題文(含コード&リンク):
年(西暦)、月、日を指定して、その日がその都市の第何日目になるかを計算するプログラムを作成せよ。
例外処理(うるう年は、4で割り切れて100で割り切れない年、あるいは400で割り切れる年である)も行う事。
[3] 環境
 [3.1] OS: Linax
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか :5月16日まで
[5] その他の制限: 授業の進度は、if文while文forb文、あと配列を習った程度です。

よろしくお願いします。

945 :デフォルトの名無しさん:2005/05/10(火) 02:05:39
>>926>>927
あー大文字と小文字は区別してるからね。
区別しないバージョンはこちら。ついでにctrl+zが押されるまで多行入力に
対応しといた。バグ残ってるかもしれんけど。コピーペーストで同じような
事を二度やらせてるが、目障りだったら別関数にでもしてくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/375.txt

946 :デフォルトの名無しさん:2005/05/10(火) 02:24:51
>>917
"A>"から始まるって?何か間違っても"C:\>"が限界でしょう

#include <stdio.h>
#include <stdlib.h>

main(int argc,char** argv){
switch(atoi(*(argv+1)))
{
case 1:
 /* モード1の動作 */;
 return EXIT_SUCCESS;
case 2:
 /* モード2の動作 */;
 return EXIT_SUCCESS;
 /* ..以下略 */
}
return EXIT_ERROR;
}



947 :デフォルトの名無しさん:2005/05/10(火) 02:32:11
>>944
#include <stdio.h>

int main( void )
{
int yy,mm,dd;
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int count, total;
scanf( "%d%d%d", &yy, &mm, &dd );
if( yy % 4 == 0 && ( yy % 100 != 0 || yy % 400 == 0 ) ){
days[1]++;
}
total = dd;
for(count=0; count<mm-1; count++ ){
total += days[count];
}
printf( "%d\n", total );
return 0;
}

948 :919:2005/05/10(火) 07:40:46
有難う御座います。解決しました!

949 :デフォルトの名無しさん:2005/05/10(火) 11:24:52
[1] 授業単元: C言語実習
[2] 問題文(含コード&リンク):
初期値0の変数sにi=1,2,3...,mまでは
s1=0.15ずつ加え,i=m+1, m+2,...,nまでは
s2=0.25ずつ加えるプログラムを作成せよ

実行画面
m n ? 15 20
i =1, s=0.150000
i =2, s=0.300000
i =3, s=0.450000
   ・
   ・
   ・
で割り切れる年である)も行う事。
[3] 環境
 [3.1] OS: WinXp
 [3.2] コンパイラ(バージョン): Visual C++
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか :5月10日12時まで
[5] その他の制限:
 

わけわかめ('A`;)頼む

950 :デフォルトの名無しさん:2005/05/10(火) 11:29:45
なんか余計なこと入ってたすまそ

951 :デフォルトの名無しさん:2005/05/10(火) 11:31:41
オレがバカなせいか
いまいち日本語がわからん

952 :デフォルトの名無しさん:2005/05/10(火) 11:36:02
追記:m,nの値はキーボードから入力

953 :デフォルトの名無しさん:2005/05/10(火) 12:04:45
>れる年である)も行う事。

これを削るのだな。
これがあるだけでまったくわけわからん文章になるなw

954 :('A`;):2005/05/10(火) 12:28:45
#include <stdio.h>
int main() {
  int i, m, n;
  double s = 0;
  printf("m n ? ");
  scanf("%d %d", &m, &n);
  for(i=0; i<=n; i++) {
    i <= m ? (s += 0.15) : (s += 0.25);
    printf("i =%d, s=%06f\n", i, s);
  }
  return 0;
}

955 :デフォルトの名無しさん:2005/05/10(火) 12:32:19
添え字1からだったすまそ

956 :デフォルトの名無しさん:2005/05/10(火) 13:39:18
そんな延々毎日プログラムばかり作らされて学生は

957 :907:2005/05/10(火) 18:21:41
>>930-931
ありがとうございます!何とかなりそうです。

958 :デフォルトの名無しさん:2005/05/10(火) 22:24:21
nを入力して1〜nの素数を表示し、その素数の合計を表示するプログラム教えてくださいm( _ _)m

959 :デフォルトの名無しさん:2005/05/10(火) 22:35:55
>>958
sumprime n = foldr1 (+) (sieve [2..n])
sieve [] = []
sieve (x:xs) = x:sieve [a | a<-xs, a `mod` x /= 0]


960 :デフォルトの名無しさん:2005/05/10(火) 22:49:07
>>959
ここはC/C++の宿題スレだっての

961 :デフォルトの名無しさん:2005/05/10(火) 23:08:51
959のはどういう意味だろう・・・

962 :デフォルトの名無しさん:2005/05/10(火) 23:13:26
[1] 授業単元: C言語応用
[2] 問題文(含コード&リンク):
ファイルnumber.datから
0〜255の自然数Nと0〜255の自然数kを読み取り
(number.datにはNとkの間に半角スペース1個間隔開けたものが
縦に列挙されているものとする)
Nをk組以下の自然数の平方和で表現可能か、
また表現可能ならばその平方和が何通りあるかを
出力するプログラムを作成せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか:C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか :5月12日17:00まで
[5] その他の制限:

サッパリ分かりません、どうかお願いします

963 :デフォルトの名無しさん:2005/05/10(火) 23:18:46
なんかやっとマトモな課題が出るようになったみたいだな

964 :デフォルトの名無しさん:2005/05/10(火) 23:36:22
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 自然数nで、その約数の和が2nとなるもので
10000以下のものをすべて求めよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか :5月11日まで
[5] その他の制限:特になし。

どなたかご教授お願いします。

965 :デフォルトの名無しさん:2005/05/11(水) 00:00:15
>>964
#include <stdio.h>
int main(void)
{
int num,sum,count;
for( num=1; num<=10000; num++ ){
sum = 0;
for( count=1; count<=num; count++ )
if( !( num % count) ){
sum += count;
}
if( sum == 2*num )
printf( "%d\n", num );
}
return 0;
}

966 :964:2005/05/11(水) 00:06:08
>>965

ありがとうございます!
おかげさまで助かりました。

967 :デフォルトの名無しさん:2005/05/11(水) 01:56:09
>>958
べたべたですね

#include <stdio.h>
int issosu( int n )
{
int i;
for( i=2; i<=n/2;i++ )
if( !( n % i) ) return 0;
return 1;
}
int main(int argc, char *argv[] )
{
int n,i,sum;
n = atoi( argv[1] );
sum = 0;
for( i=2; i<=n ; i++ ){
if( issosu(i) ){
printf(" %d", i );
sum+=i;
}
}
printf(" = %d", sum );
}

968 :944:2005/05/11(水) 02:41:05

【質問テンプレ】
[1] 授業単元: プログラミングとその応用
[2] 問題文(含コード&リンク): Josephus(ジョセファス)の問題を解くプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか :ちょうど来週まで
[5] その他の制限: まだ授業が始まって数回なので、配列を習ったところです。

前回、ありがとうございました。
よろしくお願いします。
ジョセファスだけでわかりますかね…

969 :デフォルトの名無しさん:2005/05/11(水) 03:08:16
>>968
継子立てだね。
アルゴリズムに詳しくなければ判らないと思う。
適当な解説ページでもポイントするべし。

970 :969:2005/05/11(水) 03:11:55
いかん、問題の解説ページを探していたら解答の解説ページが見つかってしまったw

>>968
つーことで、これ見て頑張れ。
ttp://www004.upp.so-net.ne.jp/s_honma/josephus/josephus.htm

971 :デフォルトの名無しさん:2005/05/11(水) 03:53:14
>>962
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/376.c
おねむなので、いまいち自信なし

972 :デフォルトの名無しさん:2005/05/11(水) 05:25:17
二分探索法においてデータの追加・削除を行う関数を作成し、適当なデータで追加・削除・探索の動作を確認せよ。

二分探索で新たな数値の追加のしかたが分かりません
よろしくおねがいします

973 :デフォルトの名無しさん:2005/05/11(水) 05:37:42
>>972

常にソートされた配列に新しい項目を追加する場合、
追加すべき位置を見つけ出すために二分探索はを使う.

ソートされてる配列データを用意してその真中あたりの値を
追加するようにすればおk.

まさか stdlib.h にある bsearch() 自体も自分で作りなおせってこと?


974 :デフォルトの名無しさん:2005/05/11(水) 10:01:20
アルゴリズムの勉強ならbsearch使う想定ではないのでは
って今回のはデータの操作だからいいのか

975 :デフォルトの名無しさん:2005/05/11(水) 11:02:06
>>967
ありがとうございます助かりました〜。

976 :デフォルトの名無しさん:2005/05/11(水) 11:47:38
>>973
bsearchで追加すべき位置って見つけられる?

末尾に追加してソートってのが楽といえば楽。
でも馬鹿みたい。

977 :デフォルトの名無しさん:2005/05/11(水) 11:57:17
って二分探索使って追加しなきゃいけないのか。なら自分でbsearchを作らなきゃならんな。
まあがんばれ。>>972

978 :デフォルトの名無しさん:2005/05/11(水) 13:21:59
授業単元:コンピュータシミュレーション入門
問題文(含コード&リンク):月曜日(第1日目)〜日曜日(第7日目)の1週間、毎日ジュースを売る。
毎日の販売時間中に、確率8.5%で大雨が降り続きます。このときは、1杯のジュースも売れません。
水曜日と日曜日には、時々、観光バスがジューススタンドの近くに止まりすべてのジュースが売れてしまいます。
水曜日に観光バスが来る確率は20%、日曜日は50%です。ただし雨の日には観光バスは来ません。毎日の売り上げを記録し、1週間の利益の総額を画面表示しなさい。
OS: Winxp
コンパイラ(バージョン):gcc
言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:今日

お願いします。

979 :デフォルトの名無しさん:2005/05/11(水) 13:27:35
ジュース1杯の利益は?
ジューススタンドの最大供給量は?
ジューススタンドに補給するタイミングは?

980 :978:2005/05/11(水) 13:33:11
1日4時間程度、小さなジューススタンドでジュースを売っている。ジュース1ぱいを作るのに50円を必要とし、それを100円で売る。毎日売れ残ったジュースはすべて捨てる。
1日の客  10 20 30 40 50 60 70 80 90 100
確率     0.08 0.06 0.03 0.19 0.10 0.20 0.11 0.04 0.14 0.05
累積確率 0.08 0.14 0.17 0.36 0.46 0.66 0.77 0.81 0.95 1.00


981 :978:2005/05/11(水) 13:35:17
って途中で送信してしまった。。
>>979
補給タイミングは最初に何杯のジュースを造るか入力するようです。
上限はないっぽいです。

982 :デフォルトの名無しさん:2005/05/11(水) 14:01:45
毎日売れ残ったジュースはすべて捨てるって缶ジュースじゃないのですか?

983 :デフォルトの名無しさん:2005/05/11(水) 14:03:01
ジュースて何ジュースよ?

984 :デフォルトの名無しさん:2005/05/11(水) 14:10:16
ラブジュース

985 :デフォルトの名無しさん:2005/05/11(水) 14:24:54
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文:
kg→gの変換プログラムを作る。
xkgのxをキーボードから入力すると

xkgはyyyygです。

と答えるプログラムを作成しなさい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか :明日まで
[5] その他の制限: まだ授業始まったばかりなので演算を習ったところです。

初歩的な質問ですいませんが、よろしくお願いします。


986 :デフォルトの名無しさん:2005/05/11(水) 14:25:02
ジース

987 :985:2005/05/11(水) 14:28:55
言い忘れてましたが、scanf()を使って作成します。

988 :デフォルトの名無しさん:2005/05/11(水) 14:37:43
[1] 授業単元: コンピュータ演習
[2] 問題文(含コード&リンク):
(1)n科目のテストの成績(0〜100点)を次々に読み込み、GPAの計算をするプログラムを作成せよ。ただし、GPAの計算式は以下のとおり。また、負の値や100点より大きな値が入力された場合に警告を出し、再度入力させ直す使用にせよ。
90〜100点⇒4ポイント
80〜89点⇒3ポイント
70〜79点⇒2ポイント
60〜69点⇒1ポイント
59点以下⇒0ポイント
GPA=[(aの科目の成績*単位数(1単位))+(bの科目の成績*単位数(1単位))+・・・]/総単位数)
(2)n人の学生の身長データs1,s2,s3...snと体重のデータt1,t2,t3,...tnを次々に読み込み、大相撲の新弟子検査に合格する学生の人数を求めるプログラムを作成せよ。
また、体重だけ合格基準に達しない学生の数、身長だけ合格基準に達しない学生の数、身長も体重も合格基準に達しない学生の数も出力するように作成せよ。但し、合格基準の身長と体重は173cm、85kg
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:明日
どなたかご教授宜しくお願いします。

989 :デフォルトの名無しさん:2005/05/11(水) 14:59:26
[1] 授業単元:プログラミング
[2] 問題文
英文をファイル入力で読み込み、7文字以上の英単語は大文字に変換して標準出力せよ。
なお、入力にはfscanfを、出力にはprintfを用いること。
[3] 環境
 [3.1] OS:winxp
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語C
期限 今週末

宜しくお願いします

990 :デフォルトの名無しさん:2005/05/11(水) 15:21:38
>>978
VC++6.0で作ったけど

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define RATE_RAINYDAY 85
const char cppcDay[ 7 ][ 3 ] = { "月", "火", "水", "木", "金", "土", "日" };
#define RATE_CAME 100
const int cpiCameRate[] = { 8, 6, 3, 19, 10, 20, 11, 4, 14, 5 };
int main(int argc, char* argv[])
{ int iProfit = 0, iDay, iMaked, iSale, iOutlay, iIncome, iIndex, iRate, iCame;
srand( ( unsigned int )time( NULL ) ); for ( iDay = 0; iDay < 7; iDay++ ) {
printf( "%s曜日(第%d日目)、作成するジュースは何杯分?\n", cppcDay[ iDay ], ( iDay + 1 ) ); scanf( "%d", &iMaked ); iOutlay = iMaked * 50;
if ( rand() * 1000 / RAND_MAX >= RATE_RAINYDAY ) {
iCame = 0;
switch ( iDay ) {
case 2 : if ( rand() * 100 / RAND_MAX < 20 ) iCame = -1; break;
case 6 : if ( rand() * 100 / RAND_MAX < 50 ) iCame = -1; break; }
if ( iCame ) { printf( "観光バスが来て全て売れました。\n" ); iIncome = iMaked * 100; } else {
iRate = rand() * RATE_CAME / RAND_MAX; iIndex = 0; iCame = 10;
while ( iRate >= cpiCameRate[ iIndex ] ) { iRate -= cpiCameRate[ iIndex++ ]; iCame += 10; }
iSale = iCame; if ( iCame > iMaked ) iSale = iMaked;
iIncome = iSale * 100;
printf( " %d人来客がありました。\n %d杯売れました。\n", iCame, iSale ); }
} else { printf( "大雨が降りました。\n" ); iIncome = 0; }
printf( "本日の利益は %d円です。\n", iIncome - iOutlay ); iProfit += iIncome - iOutlay; }
printf( "一週間での総利益は %d円です。\n", iProfit ); return ( 0 ); }

991 :デフォルトの名無しさん:2005/05/11(水) 15:32:44
>>989
どういうのを英単語と呼ぶのかわからんが、とりあえず英小文字が繋がったもの、ということで

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define ALPHA "abcdefghijklmnopqrstuvwxyz"

void to_upper_string(char * str)
{
int i;
for (i = 0; str[i] != '\0'; i++) {
str[i] = toupper(str[i]);
}
}

int main(void)
{
char str[256];
FILE *fp = fopen(__FILE__, "r");

while (fscanf(fp, "%*[^"ALPHA"]"), fscanf(fp, "%255["ALPHA"]", str) == 1) {
if (strlen(str) >= 7)
to_upper_string(str);
puts(str);
}

return 0;
}

992 :デフォルトの名無しさん:2005/05/11(水) 15:43:33
>>988
既出だね。宿題スレの過去ログを探して味噌。

993 :989:2005/05/11(水) 15:44:05
返信ありがとうございます。
例えば、
This problem is inportant.
という英文が書かれたファイルを読み込んだときに
This PROBLEM is INPORTANT.
という風に変換して標準出力したいのです。


994 :デフォルトの名無しさん:2005/05/11(水) 15:46:12
処で次スレは?

995 :デフォルトの名無しさん:2005/05/11(水) 15:54:36
立ててくるからちょっとまってな

996 :デフォルトの名無しさん:2005/05/11(水) 16:00:39
立てた
http://pc8.2ch.net/test/read.cgi/tech/1115794784/

997 :デフォルトの名無しさん:2005/05/11(水) 16:30:44
>>973
日本語変だね
bsearchも分かってないし

998 :デフォルトの名無しさん:2005/05/11(水) 17:42:09
ぬるぽ

999 :デフォルトの名無しさん:2005/05/11(水) 17:48:43
○| ̄|_オレの背中を超えてゆけ

1000 :デフォルトの名無しさん:2005/05/11(水) 17:50:17
ガッ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

329 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)