ぼるじょあがC/C++の宿題を片づけますYO! 42代目
レス数が1000を超えています。これ以上書き込みはできません。
0001ぼるじょあ代理
2005/04/18(月) 17:00:13わからない宿題を片づけます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】
0002デフォルトの名無しさん
2005/04/18(月) 17:47:38一回おきじゃねぇじゃん。
0003デフォルトの名無しさん
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
0004デフォルトの名無しさん
2005/04/18(月) 18:53:15氏ねよ
0005ぼるじょあ ◆yBEncckFOU
2005/04/18(月) 18:53:4940代目: 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/
0006ぼるじょあ ◆yBEncckFOU
2005/04/18(月) 18:54:3025代目: 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
0007ぼるじょあ ◆yBEncckFOU
2005/04/18(月) 18:56:2110代目: 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!
0008デフォルトの名無しさん
2005/04/18(月) 18:57:18まともなレスつけないぼるじょあなんて必要とされていません。
0009デフォルトの名無しさん
2005/04/18(月) 19:03:32はいyp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=313
にレスしといた。かなりやっつけ
00103
2005/04/18(月) 19:08:31素早い回答、ありがとうございました。
if文で作るとこまではわかったんですが、中身がどうしたら良いかわからなくて…。
本当に助かりました。
どうもありがとうございました。
0011デフォルトの名無しさん
2005/04/18(月) 22:10:48[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] その他の制限:
0012前スレ975
2005/04/18(月) 23:28:34とりあえず、形にしたつもりですがファイルへの出力で
ソートした最後の値だけがファイルに保存されてしまいます。
1.0 2.0 3.0 4.0 ・・・ 10.0
というふうにソートした場合、
10.0だけでなく、
1.0 2.0 3.0 4.0 ・・・ 10.0
という風にファイルに保存したいのですが、どのように変えれば出来るでしょうか?
度々申し訳ありませんがアドバイスお願いいたします。
001312
2005/04/18(月) 23:41:10ファイルはこちらにアップさせていただきました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/315.txt
0014デフォルトの名無しさん
2005/04/18(月) 23:51:56ソースを見せてもらったが、表示と同時に保存している。
完全にロジックがおかしいから、表示が終わってから、改めてfopen()して
書き込むが良い。fopen()は"w"で開く度に、前の同名ファイルが存在しても
削除して上書きしてしまう。
0015デフォルトの名無しさん
2005/04/19(火) 00:11:15氏ね
0016デフォルトの名無しさん
2005/04/19(火) 00:13:38おおおお!出来ました!
皆さんどうもありがとうございました!
0017デフォルトの名無しさん
2005/04/19(火) 00:23:30fopen()の引数を "w" から "a" に変えるとかね。
でも、前スレ見てないから>>13が、どんな奴かは知らんが
ソースを見た感じファイル操作なんて早すぎる。
配列は正しく初期化されてるかな?
N個の要素を持つ配列を宣言しておいて、N-1個しか使っていないよ。
それでいてソート処理ではN個全てを対象としている。
それらが、ある程度動くようになってからファイルに出力しようよ。
せっかく配列に保持してるんだから、表示と保存処理は別にした方が良い。
ファイルに出力できれば、それで良いって考えは良くないよ。
ソフトウェア開発の仕事をすると、涙を呑んでそんなことをすることもあるが・・・
0018デフォルトの名無しさん
2005/04/19(火) 02:11:08[2] 問題文(含コード&リンク):0以上1以下の実数pをキーボードから入力し、ランダムにN人を集め、
誕生日別に分類したとき、生まれた人が一人もいないような日が存在しない確率を考える。
このような確率がp以上であるようなNの最小値を出力するプログラムをお願いします。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
0019デフォルトの名無しさん
2005/04/19(火) 02:23:50[2] 問題文(含コード&リンク):n個の文字列をキーボードから入力し、昇順
に並び替えて出力するプログラムを作成しなさい。ただし、文字列の文字数は
30文字以下とし、n<=50とする。
[3] 環境
[3.1] OS: UNIX/Solaris
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年4月21日まで
お願いします。
0020cen ◆Pm9xOTJuM.
NGNGこんな感じ?
#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;
}
0021デフォルトの名無しさん
2005/04/19(火) 02:47:39誕生日というものが1年のうちの各日に均等に生じるという保証がないので、
この問題は回答不可能じゃないかな。
例えば2/29日生まれってのをどうするとか、盆と正月の9ヶ月後の誕生日が多いとか。
0022デフォルトの名無しさん
2005/04/19(火) 03:19:04このスレも昔みたいにテンプレ無くせよ
0023デフォルトの名無しさん
2005/04/19(火) 04:47:28テンプレ無くすと無駄なやり取りが増えるだけで、スレの無駄。
0024デフォルトの名無しさん
2005/04/19(火) 06:46:02おまいら寝とけ
0025デフォルトの名無しさん
2005/04/19(火) 07:29:24昔はなかったぞ。
誰だよ、このスレにテンプレつけた奴は?
0026デフォルトの名無しさん
2005/04/19(火) 09:28:42・Cでお願いします(文中にない場合もある)と言ってるのに C++の"//"のコメント使うのをはじめ
C,C++の記述が混合してたり
・期限が●日だったのにとあとから追加してくるので期限がわからず過ぎてから解答だしたり
・授業単元の趣旨と外れた解答をして「これじゃダメです」ってレス付いたり
・解答もらったけどこっちではコンパイル通りませんとか
いろいろあったから初めの出題の段階でできる限りの情報を引き出すためのテンプレかと
>・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
>・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
テンプレをなくした時のメリットって何ですか?
教えていただけると今後の参考になりますのでお願いします。
0027デフォルトの名無しさん
2005/04/19(火) 09:30:37シープラスプラス??激しくアレな人教えてください
0028デフォルトの名無しさん
2005/04/19(火) 09:37:26マルチ氏ね
0029デフォルトの名無しさん
2005/04/19(火) 09:40:28はじめからこっちで聞くべきでしたねってあっちに
付け加えてんだろうがなんでもかんでも一緒にする房うざすぎ お前がまず氏ね
0030デフォルトの名無しさん
2005/04/19(火) 09:47:15マルチの意味わかってんのかね このクソガキは
ビビってひっこんでんじゃねーぞこら でてこいやキチガイ
0031デフォルトの名無しさん
2005/04/19(火) 09:58:40>>28は消防からやり直して氏ねよ
2chのルールだけ気にしすぎて通常の人間の会話が理解できない房決定
2chやりすぎて脳腐ってんじゃないの?w 氏ね
0032デフォルトの名無しさん
2005/04/19(火) 10:04:00>>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のルールだけ気にしすぎて通常の人間の会話が理解できない房決定
0033デフォルトの名無しさん
2005/04/19(火) 10:07:29マルチの意味を教えてくれないかwwww
0034デフォルトの名無しさん
2005/04/19(火) 10:08:49ttp://www.angelfire.com/art2/blazer/hm.html
しっかり読め
0035デフォルトの名無しさん
2005/04/19(火) 10:15:12口と逃げ足だけは一人前だなw
0036デフォルトの名無しさん
2005/04/19(火) 10:16:00バカすぎ乙w
0037デフォルトの名無しさん
2005/04/19(火) 10:24:31釣られてんじゃねーよwwwっぅうえwwww
0038デフォルトの名無しさん
2005/04/19(火) 13:29:44#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]);
}
0039デフォルトの名無しさん
2005/04/19(火) 15:23:13[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 ?)
0040デフォルトの名無しさん
2005/04/19(火) 16:33:50実行できました。助かりました。ありがとうございました。
0041デフォルトの名無しさん
2005/04/19(火) 18:04:55εってなんですか。大体解かるが、変数には説明が必要。
0042デフォルトの名無しさん
2005/04/19(火) 18:07:18004339
2005/04/19(火) 18:09:43すいません
イプシロンです。
EPSでお願いいたします。
004439
2005/04/19(火) 18:12:41ほんとごめんなさい
Microsoft Visual C++ 6.0
です。
0045デフォルトの名無しさん
2005/04/19(火) 18:13:52そんなこと聞いていないが…
質問者いじめはもうやめよう…
0046Addicted to C++ ◆nrBjarne.g
2005/04/19(火) 19:36:27私です。
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/330
0047デフォルトの名無しさん
2005/04/19(火) 19:44:19http://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
0048デフォルトの名無しさん
2005/04/19(火) 21:03:51#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;
}
0049デフォルトの名無しさん
2005/04/19(火) 21:30:270050デフォルトの名無しさん
2005/04/19(火) 21:38:11精神科病院にでも行ってきたら?
0051デフォルトの名無しさん
2005/04/19(火) 21:45:49その必要もない。
0052デフォルトの名無しさん
2005/04/19(火) 21:47:54木又
0053デフォルトの名無しさん
2005/04/19(火) 22:04:190054デフォルトの名無しさん
2005/04/19(火) 22:47:39[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] 期限:特になし
005554
2005/04/19(火) 22:51:400056cen ◆Pm9xOTJuM.
NGNGこんな感じ?
#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;
}
005754
2005/04/19(火) 23:02:45マルチっぽくなってしまってすみませんでした。
0058デフォルトの名無しさん
2005/04/19(火) 23:06:10#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;
}
0059デフォルトの名無しさん
2005/04/19(火) 23:56:33template習ったから、使わせたいんだと思う。
006047
2005/04/20(水) 00:00:31自称C++のexpertと名乗ってる人達が、自分が想像してた以上にでかい課題だとか言って、
みんな。ひいていくんだけど・・・。
締め切りまで、もう少しだから、馬鹿なりに頑張ってみる。
0061デフォルトの名無しさん
2005/04/20(水) 00:05:12006247
2005/04/20(水) 00:08:14006347
2005/04/20(水) 00:12:07006447
2005/04/20(水) 00:18:55コンパイラーとかのせいでは、ないんですよね?
0065デフォルトの名無しさん
2005/04/20(水) 00:27:310066デフォルトの名無しさん
2005/04/20(水) 01:01:24Solaris環境でC++を使っています。
C++で、Unixシステムコマンドを呼び出す方法を教えてください。
%hostname というコマンドを使いたいのです。
よろしくご教授願いします。
0067デフォルトの名無しさん
2005/04/20(水) 01:02:360068デフォルトの名無しさん
2005/04/20(水) 01:02:59referenceはエラーでないの?出そうな気がするけど。
とりあえずsize_typeに関しては
template<typename Element>
typename Vec<Element>::size_type Vec<Element>::max_size() const
にすれば大丈夫だと思う。
0069デフォルトの名無しさん
2005/04/20(水) 04:47:40これどうすれば??
0070デフォルトの名無しさん
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;
}
0071デフォルトの名無しさん
2005/04/20(水) 12:15:39fout.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++;
}
0072デフォルトの名無しさん
2005/04/20(水) 12:17:16/* 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;
0073デフォルトの名無しさん
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;
}//長文すみません
0074デフォルトの名無しさん
2005/04/20(水) 12:35:410075デフォルトの名無しさん
2005/04/20(水) 12:55:01もうお手上げ状態です。
まじで、助けてください。
これ、本当に必要なんです。
typedef 取りました。
簡単になったと思います。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/320.txt
0076デフォルトの名無しさん
2005/04/20(水) 13:29:26えーと、取り敢えず今までの経過をまとめてくれない?
もう、何がなんだか。
0077デフォルトの名無しさん
2005/04/20(水) 13:30:32[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時
お願いします。
0078デフォルトの名無しさん
2005/04/20(水) 13:42:01>(中級者は、整数型配列 kaisu[6]を宣言し、1の目の出た回数をkaisu[1]に、2の目の出た回数をkaisu[2]に憶えさせる,……のようにすること。
有り得ない。
0079デフォルトの名無しさん
2005/04/20(水) 13:48:33stlにある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日馬鹿みたいに、費やしました。
ぐるぐるメリーゴーランド的に繰り返したり。
本当、まじで、お願いします。
0080デフォルトの名無しさん
2005/04/20(水) 13:56:03#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;
}
0081デフォルトの名無しさん
2005/04/20(水) 14:00:25#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;
}
0082デフォルトの名無しさん
2005/04/20(水) 14:16:01お早い回答ありがとうございます。
走らせてみた所、問題なく動きました。
ただ、ちょっと気になったのが>>81の方は何度実行しても星の数が固定なんですが
これは精度が悪い関数を使っているためでしょうか…。
0083デフォルトの名無しさん
2005/04/20(水) 14:16:29ケアレスミス多過ぎ。
単純な文法エラーばかりで、動く云々以前にコンパイラが全部エラーだしたぞ。
--- 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)
{
0084デフォルトの名無しさん
2005/04/20(水) 14:17:22乱数系列を初期化していないため。必要ならsrand()関数を呼べ。
0085デフォルトの名無しさん
2005/04/20(水) 14:22:45#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;
}
0086デフォルトの名無しさん
2005/04/20(水) 14:23:45感謝です。サイト見ていけました。
0087デフォルトの名無しさん
2005/04/20(水) 14:30:50私は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...
っていうエラーしか出なくて、何がなんだか、よくわかりません。
0088デフォルトの名無しさん
2005/04/20(水) 14:45:06もしかして、Vec.cppをコンパイルしようとしてね?
んなもん、できるわけねぇじゃん。
例えば、
#include "vec.h"
void func()
{
P10C::Vec<int> foo;
}
こんなソースを用意してそれをコンパイルしてみ。
_
それで判らなきゃ、タヒね。
0089デフォルトの名無しさん
2005/04/20(水) 14:46:470090デフォルトの名無しさん
2005/04/20(水) 14:48:00どこに「しね」と?
0091デフォルトの名無しさん
2005/04/20(水) 14:50:40_
タヒね。
↑これは様々な文字を組み合わせて作った巧妙な「死ね」という文字だ!!!
なんて陰険な奴なんだ!!!!!!!!!!!!!!
0092デフォルトの名無しさん
2005/04/20(水) 15:02:04いや、一応、main.cpp作ってやってるんですけど・・・。
ちなみに、しねとか、言ってるの私じゃないです。
0093デフォルトの名無しさん
2005/04/20(水) 15:02:48あんただれですか
0094デフォルトの名無しさん
2005/04/20(水) 15:04:510095デフォルトの名無しさん
2005/04/20(水) 15:09:25Vec.cppをコンパイルしちゃいけないというのは理解できた?
0096デフォルトの名無しさん
2005/04/20(水) 15:13:020097デフォルトの名無しさん
2005/04/20(水) 15:27:36気分転換になおしてあげたよ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/321.txt
0098デフォルトの名無しさん
2005/04/20(水) 15:28:24main.cppをコンパイルしてると思います。
009997
2005/04/20(水) 15:43:40ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/322.txt
やっつけなので品質には期待しないでくれ
0100デフォルトの名無しさん
2005/04/20(水) 15:48:41ありがとうございます。
凄い。
これは、今の自分には作れませんわ。
ちょっとやってみます。
010183
2005/04/20(水) 15:52:290102デフォルトの名無しさん
2005/04/20(水) 15:58:40いや、無視してないです。
そこに書いてあるエラーをさっきまで見直してました。
87に書いた通りです。
010370
2005/04/20(水) 16:15:08わたくしの課題の何卒よろしくお願いいたします。
0104デフォルトの名無しさん
2005/04/20(水) 16:17:10>83はエラーじゃないよ。修正した箇所をあんたのソースと比較した差分だね。
行頭の-があんたのソースから削除した行で、+が追加した行だ。
0105デフォルトの名無しさん
2005/04/20(水) 16:23:07それ、ホントにUniCodeに変換している?
私にはShiftJisに変換しているように見えるのだけど。
それと、先ずはファイル入出力と漢字コード変換ロジックを分離してくれ。
そこまでできていれば、ShiftJis→EUCを実装するのは簡単だ。
0106デフォルトの名無しさん
2005/04/20(水) 16:24:57ちょっと見てみます。
たぶん、typedefやるときに、find&replaceで一気に直したんだけど、そのとき、少しドジたので、
それも、少し入ってると思います。
0107デフォルトの名無しさん
2005/04/20(水) 16:33:13再度ありがとうございます。
私は、いつもcompileってのでやってるのではなくて、
build solutionっていうのcompileしてるんですが、やはり
function template has already been defined
ってのが、出てきます。
いつもこういうタイプのを、やる手法でやってるのですが・・・。
βからβ2版に昨日変えたのが、何か関係してるんでしょうか。
97さんだと、これ正常に動きますか?
010897
2005/04/20(水) 16:40:36入ってたら抜くこと。
0109デフォルトの名無しさん
2005/04/20(水) 16:44:28しかも指摘済みのことを全然理解しないで先に進もうとしているし。
だんだんみんなが相手にしなくなったのが理解できるね。
0110デフォルトの名無しさん
2005/04/20(水) 16:55:07compiler変えてみたら、出来ました。
ありがとうございます。
erase, insert functionは、pointerを返すんだけど、thisで良いんでしょうか?
0111デフォルトの名無しさん
2005/04/20(水) 16:56:52ホントに判ってるのかね。
011270
2005/04/20(水) 16:56:58分離しましたのでお助けくださいませ。お願いします。
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;/* 先頭位置コピー */
011370
2005/04/20(水) 16:57:42HighAsc = *(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;
}
011470
2005/04/20(水) 16:58:16}
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
011597
2005/04/20(水) 16:58:52thisはまずい。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/324.txt
0116デフォルトの名無しさん
2005/04/20(水) 17:03:04insert()は挿入されたデータを指すポインタを返すべき。
erase()は削除したデータの次のデータ(或いはend())を指すポインタを返すべき。
つーか、stlの実装見ろって言われてなかったか?
0117デフォルトの名無しさん
2005/04/20(水) 17:14:27返す値については、何にも言われなかったです。
stlの実装見ろとかは、今のところ言われてないです。
これ、STLのクラスの一番最初の課題なんですが、
C++の段階を100で例えると、どのくらいのレベルのものなんでしょうか?
0118デフォルトの名無しさん
2005/04/20(水) 17:15:16//文字列の変換はめんどくさいから漢字一文字分(戻り値は変換済みバイト数)
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;
}
//後はコードの判断ロジック(暇があったら後でね)
0119117
2005/04/20(水) 18:24:15いろいろありがとうございました。
0120デフォルトの名無しさん
2005/04/20(水) 18:39:04at()内のifはif (n >= curSize)だけで十分。
std::size_tは符合無し整数型と決まっているから。
0121118
2005/04/20(水) 18:49:30static 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;
}
0122& ◆E0RpANzUA2
2005/04/20(水) 19:03:05typedefまで直しました。
皆様、ありがとうございました。
あと、一応、それが動くかどうかのテストをするために、
main.cppを含め、大掛かりなファイルをもらいました。
このリンクの一番下の、zipファイルです。
ファイル上にエラーは、一つもないのですが、linkingでエラーがでるのですが。。。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
0123デフォルトの名無しさん
2005/04/20(水) 19:13:07ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/325.zip
0124デフォルトの名無しさん
2005/04/20(水) 19:23:44コンパイルの手順の問題ではない
コンパイルエラーなのだから質問の最初から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
012570
2005/04/20(水) 19:25:08先生!ありがとうございます。
ですがしかし、技が高度すぎて当方には発生するコンパイルエラーの意味すら
理解できません。inline初めてみました!
0126121
2005/04/20(水) 19:30:37あ、肝腎のことを書き忘れてた。
元のソース追っかけるの諦めたから、C++で適当に書いた。
static inline はなくても取り敢えずはいいとして、new/deleteはmalloc()/free()で、
reinterpret_castはCスタイルキャストで、std::stringはchar *でなんとか誤魔化してくれw
0127デフォルトの名無しさん
2005/04/20(水) 19:30:4783さんが掲示してくれたのを、見直してるときに、それは見つけました。
言うべきでした。すいません。
0128デフォルトの名無しさん
2005/04/20(水) 19:31:30リンクエラーならどんなエラーか書けよ。
ついでに言えば、人の指摘を無視するならもう来なくていいよ。
0129デフォルトの名無しさん
2005/04/20(水) 19:32:21ここのページにある課題3と課題4分かりませんか〜?
よろしくお願いします。
013070
2005/04/20(水) 19:35:17ヒントありがとうございます。
では何とか努力してみます。ありがとうございました!
0131デフォルトの名無しさん
2005/04/20(水) 19:37:00通報しました。
0132デフォルトの名無しさん
2005/04/20(水) 19:37:23エラーは
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
無視はしてないです。
たまに、指摘の内容を調べてて返事が遅れたりしてました。
すいません。
0133デフォルトの名無しさん
2005/04/20(水) 19:40:21BlumBlumShub.cpp とやらはコンパイルしてるの?
0134133
2005/04/20(水) 19:42:25BlumBlumShub.cpp の
namespace /*anonymous*/ {
と、この { に対応する } をコメントアウトすればうまくいく
0135デフォルトの名無しさん
2005/04/20(水) 19:43:38指摘した点を修正せずに先に進むことを無視したと言うのでは?
で、>133の指摘にもあるがMain.objとBlumBlumShub.objがリンクされていない。
IDEの使い方くらいきちんと抑えておきなさい。
0136133
2005/04/20(水) 19:46:030137デフォルトの名無しさん
2005/04/20(水) 19:48:40あ、出来ました!!!!!!!
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.
ってのが、出てきます。
本当、出来そこないで、すいません。
0138デフォルトの名無しさん
2005/04/20(水) 19:50:21改めます。
0139デフォルトの名無しさん
2005/04/20(水) 19:51:30if (from == to) return from;
0140デフォルトの名無しさん
2005/04/20(水) 19:53:23テンプレに従わないと宿題として認めない
0141デフォルトの名無しさん
2005/04/20(水) 19:58:01それ、付け加えたんですけど、同じassertが出ます。
from<toになってるから、assertが出るんですよね。
でも、from<=toにすると、出なくなるんですよね。
0142デフォルトの名無しさん
2005/04/20(水) 20:24:21>139はassertionを起こさない修正ではなくbad allocationしない修正。
from == to のときの処理を追加するなら、当然assert()も修正する必要がある。
0143デフォルトの名無しさん
2005/04/20(水) 20:50:170144デフォルトの名無しさん
2005/04/20(水) 20:51:39assertが出るってことは、from<toってことですよね?
ってことは、それより以前にeraseが呼びだされる前にエラーがあるってことですか?
0145デフォルトの名無しさん
2005/04/20(水) 20:56:280146デフォルトの名無しさん
2005/04/20(水) 21:01:38何から何まで教えてくれると思ってるから
ここで何でもかんでも聞くんだろうな
0147デフォルトの名無しさん
2005/04/20(水) 21:07:250148デフォルトの名無しさん
2005/04/20(水) 21:16:230149デフォルトの名無しさん
2005/04/20(水) 21:21:310150デフォルトの名無しさん
2005/04/20(水) 21:21:410151デフォルトの名無しさん
2005/04/20(水) 21:22:320152デフォルトの名無しさん
2005/04/20(水) 21:31:20その教科書を毎日見てきた世代ですが。
0153デフォルトの名無しさん
2005/04/20(水) 21:37:56それは、残念だったな。
0154デフォルトの名無しさん
2005/04/20(水) 22:15:370155sage
2005/04/20(水) 22:20:33[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] その他の制限:初心者なので双方向リストのアドレス取得方法が分かりません。
ぼるじょあ様よろしくお願いします。
0156デフォルトの名無しさん
2005/04/20(水) 22:24:490157デフォルトの名無しさん
2005/04/20(水) 22:25:58ぼるじょあに聞いてるんだから、他の奴はだまってろ
0158ぼるじょあ ◆yBEncckFOU
2005/04/20(水) 22:27:290159デフォルトの名無しさん
2005/04/20(水) 22:28:28[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日までです
よろしくお願いします
0160デフォルトの名無しさん
2005/04/20(水) 22:31:05無能・無才は素直に単位落としとけよ
0162デフォルトの名無しさん
2005/04/20(水) 23:54:190163デフォルトの名無しさん
2005/04/20(水) 23:55:13あるファイル、例えば
2 6 -7 0 0 6 48
4 5 3 -1 0 8 12
9 0 -7 5 1 9 -2
があった場合に何行何列かを表示するプログラムを
作って欲しいです。ちなみに行数によって列数は変わり
ません。条件としてはmalloc関数を使ってほしいです。
だれかお願いしますm(__)m
0164デフォルトの名無しさん
2005/04/21(木) 00:09:393値の中央値(2番目に大きい数)をもとめるアルゴリズムを
C言語で実装せよ。(if文を使うこと)
以下を参考にして3×3のマスにおける○×ゲームの表示プログラムを
作成したい。とりあえず以下のように出力させるには?
どこに×をおきますか?:2 2
○○○
○×○
○○○
0165デフォルトの名無しさん
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);
}
となっています。
明日提出なので、できればよろしくお願いします。
0166デフォルトの名無しさん
2005/04/21(木) 00:15:30{
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分もかけてしまった。
0167デフォルトの名無しさん
2005/04/21(木) 00:20:22それをやったらbad allocationになるんですよ。
0168デフォルトの名無しさん
2005/04/21(木) 00:20:38明日提出でやばいです・・・。
お願いします。
0169デフォルトの名無しさん
2005/04/21(木) 00:40:44ぼるじょあじゃないけど問1と問2答えといたよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/327.c
0170デフォルトの名無しさん
2005/04/21(木) 00:44:18具体的に例題ファイルの場合にはどうなればいいのか説明できますか?
例題ファイルの場合、
3行7列と 画面に表示すればいいということでしょうか?
それだとmalloc関数を使う必要がないので違いますよね
0171デフォルトの名無しさん
2005/04/21(木) 00:47:17163の問題の意味が全然わからない
0172デフォルトの名無しさん
2005/04/21(木) 01:00:23作りたいプログラムはファイルの中身を表示するのが目的です。
下のプログラムで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;
}
017497
2005/04/21(木) 01:10:06ちょっとやってみたけどそのエラーは別な場所で起きてるみたい。
直しといたんであげとくよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/328.txt
0176デフォルトの名無しさん
2005/04/21(木) 01:55:39それとも説明がわかりにくかったですかね?
0177デフォルトの名無しさん
2005/04/21(木) 02:01:14>2次元行列ma[][]を表示したいようにしたいのです
>printf("%d行%d列\n", ROW, COL);
だから、どっちなんだと…
>条件としてはmalloc関数を使ってほしいです
>プログラムさえできればmalloc関数は使わなくても大丈夫です
これも矛盾してるしな。
行と列の数が分かればそれでいいのか?
それとも、配列の中身のデータが必要なのか?
と>170は聞いているんだ。質問に答えろよ。
読み込む前には行や列の数が分からん、なんて分かってる。
例として、>163を読み込んだときにはどういう結果が出力されるべきなのかを書け。
課題に「ただし、mallocを使う事」とか「ただし、データは一度配列に読み込む事とする」みたいな条件がついてるならそれもな。
0178デフォルトの名無しさん
2005/04/21(木) 02:17:43>だから、どっちなんだと…
>行と列の数が分かればそれでいいのか?
>それとも、配列の中身のデータが必要なのか?
両方表示していただきたいです。
>これも矛盾してるしな。
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[][]に格納して欲しいです。
これで大丈夫ですか?
0179デフォルトの名無しさん
2005/04/21(木) 02:20:51ma[][]じゃなくてdata[][]でした。どちらでもいいです。
すみません。
0180デフォルトの名無しさん
2005/04/21(木) 05:49:18つくってみたよ。動いたからあげてみる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/329.txt
読み込んだデータをまたつかうんならデータ構造に問題あるぽい。
テスト環境はLinuxのgccね。
0181デフォルトの名無しさん
2005/04/21(木) 08:22:42ありがとうございます。うれしいかぎりです。
でも、またassertionが出るようになったのですが・・・。
Debug Assertion Failed!
C:...\Microsoft Visual Studio 8\...\VC\include\vector
Line:223
Expression'vector literators incompatible
0182デフォルトの名無しさん
2005/04/21(木) 08:36:15そのassertionってSTLのvectorからでてる様に見えるんだが。俺の気のせいかなぁ。
0183デフォルトの名無しさん
2005/04/21(木) 08:42:09そうそう。
その通りだと思います。
それって、STLのVectorが違うってこと?
でも、今までも、他のSTLから出てるエラーはあって、
自分のプログラムを治したら、出なくなったっていうのは、あるんですけど・・・。
0184デフォルトの名無しさん
2005/04/21(木) 09:16:42>>170 は私が作ったへぼソースw
まるで自分が作ったかのように質問してるし。
良識を疑うよw
>>180 乙です。
0186デフォルトの名無しさん
2005/04/21(木) 09:20:15>malloc関数はどうでもいいです。
>個人的に使わないと無理かなと思っただけなんで。
^^^^^^^^^^
嘘を付くな嘘を。
0187デフォルトの名無しさん
2005/04/21(木) 09:26:16そういうことではなくて、
このソースそのものがvectorに取って代わるものなんではないの?ってこと
なのに、vectorのassertionを出すっていうのは、おかしくないのかなと思っただけ。
どっちもincludeしてたりするのなら、やめた方がいいと思うんだけど。
俺の認識がおかしいならスルーしてくださいな。
0188デフォルトの名無しさん
2005/04/21(木) 09:36:05両方のvectorクラスをincludeしてると予想して書くけど、
名前空間が違うから、基本的には両方includeしてても、
おかしいことにはならないと思う。
けど、同様の機能を提供するものをincludeしてるという状況の為、
意識しないミスによって、例えば自作vectorクラス側のオブジェクトを
STL::vectorとして扱ってしまっている場所が出てしまう可能性がある。
上記のassertionもその手のバグじゃないかと疑っているということです。
018970
2005/04/21(木) 10:19:46作成していただいたソースをなんとか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;
}
019070
2005/04/21(木) 10:20:08static 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;
}
019170
2005/04/21(木) 10:22:09のstrには試験的に作ったVBからの呼出し元で
明示的に「あいうえおかきくけこさしすせそ」を格納しており
パラメタとしては正常に引き継がれておるようです。
0192デフォルトの名無しさん
2005/04/21(木) 10:25:26テストコードが悪い(多分)
>>182
テストコードを見たら、STLのvectorと独自のvector両方に対してテストしてる模様。
0193デフォルトの名無しさん
2005/04/21(木) 10:27:44確かにSTLのvectorをincludeしてる。
019470
2005/04/21(木) 10:34:04unsigned char * buf;/// = malloc((char)strlen(str) * 2);
コンパイル通す為にお馬鹿な事をしていました。
ここを直したらうまく動きました。お騒がせしました。
0195デフォルトの名無しさん
2005/04/21(木) 10:34:040196デフォルトの名無しさん
2005/04/21(木) 10:49:18ごめんなさい。言うの忘れてました。
もし、capacityがなくなったら、そのたびに、2倍にするそうです。
だから、bad reallocationってメッセージが出てるのでしょうか?
0197デフォルトの名無しさん
2005/04/21(木) 10:52:09まず何が起きてるのか言ってくれ。
はっきりいってわけがわからない。
0198デフォルトの名無しさん
2005/04/21(木) 11:03:19さっきの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にするってことなんだけど、
そこから来てる、エラーなのかなって思ったのです。
0199デフォルトの名無しさん
2005/04/21(木) 11:15:14>>174のやつ使ってる?
0200デフォルトの名無しさん
2005/04/21(木) 11:16:26reallocationはcapacityを2倍にしようとするんだけど、
その2倍のcapacityがmax_sizeを超えていたら、max_sizeは新しいcapacityを
取られるべきだそうです。
defaultによって、メモリーがなくなったときに、new[],delete[],がthrowする。
size_type max_size(void) constに関して、throw std::length_errorが必要だそうです。
本当、手間取らせちゃってごめんなさい。
0201デフォルトの名無しさん
2005/04/21(木) 11:22:32はい。
そうすると、198で言った風になります。
0202デフォルトの名無しさん
2005/04/21(木) 11:28:38defaultによって、メモリーがなくなったときに、
new[],delete[],がstd::bad_allocをthrowする。
私の日本語表現、おかしくて、読みずらいかもしれません・・・・。
0203デフォルトの名無しさん
2005/04/21(木) 11:29:51おれは問題なくテスト通ってるけどな。
今使ってるソース見せてよ。
0204デフォルトの名無しさん
2005/04/21(木) 11:34:12これです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/330.cpp
0205デフォルトの名無しさん
2005/04/21(木) 11:37:05insert(pointer before, size_type howMany, const_reference x)
が直ってない
0206デフォルトの名無しさん
2005/04/21(木) 11:40:25これじゃ、不十分なんでしょうか?
0207デフォルトの名無しさん
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日の授業で提出なので御願いします;
0208デフォルトの名無しさん
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 っていう関数は使ってないんですよね。
なので、ないがしろにしてたけど、これのせいの気がするんですが・・・。
0209デフォルトの名無しさん
2005/04/21(木) 12:05:11あ、それを直しても、198でいうようなのが出てきます。
assertとかは出ないんですけど・・・。
0210デフォルトの名無しさん
2005/04/21(木) 12:06:17int pid;
pid=fork();
if(pid==0){
cout<<"a";
}
else{
cout<<"b";
}
}
上記のコードだと、実行後 aa と出力されてしまいます。
forkから、親側pidにはプロセスID、子側pidには0が返るはずなので、
親はbを、子はaを出力すると思うのですが、私は何か勘違いを
しているのでしょうか?
0211デフォルトの名無しさん
2005/04/21(木) 12:06:56void 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);
}
}
0212デフォルトの名無しさん
2005/04/21(木) 12:07:43じゃあ、もう一回直したやつをアップしてみて。
0213デフォルトの名無しさん
2005/04/21(木) 12:12:01http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/331.cpp
なんでも、すいません。
本当、助かります。
0214デフォルトの名無しさん
2005/04/21(木) 12:13:57すいませんが、212さんのoutputかexe fileアップしてもらっていいですか?
0215デフォルトの名無しさん
2005/04/21(木) 12:15:47const_refernce copy(x)
->
const value_type copy(x)
0216デフォルトの名無しさん
2005/04/21(木) 12:16:090217デフォルトの名無しさん
2005/04/21(木) 12:22:39そうするとassertが出るので、const_referenceであってると思います。
>>216
そうですよね。
自分でも、嫌になってるから、皆さんには、もっと迷惑かけてると思います。
すいません。
0218デフォルトの名無しさん
2005/04/21(木) 12:36:04const_referenceだったら何も修正されないじゃん。
そのassertの内容は?
0219デフォルトの名無しさん
2005/04/21(木) 12:56:20template<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からのエラーになります。
0220デフォルトの名無しさん
2005/04/21(木) 13:06:300221デフォルトの名無しさん
2005/04/21(木) 13:09:58それでいい。
STLのvectorがassertするのは多分>>192
022270
2005/04/21(木) 13:17:00「結果」という漢字が正常に変換されません。
0223210
2005/04/21(木) 13:18:230224207
2005/04/21(木) 13:19:49void 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);
}
}
ってやったらコアダンプしちゃいました;;
どこが悪いんでしょうか・・・
0225デフォルトの名無しさん
2005/04/21(木) 13:31:14char string2[] ="good";
char string3[] ="bad";
0226デフォルトの名無しさん
2005/04/21(木) 13:47:49長い間付き合っていただいて、ありがとうございました。
なんか悪いので、締め切りまであと15時間あるので、
自分なりにやってみます。
本当にありがとうございました。
0227207
2005/04/21(木) 13:53:31224はだめで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);
}
0228デフォルトの名無しさん
2005/04/21(木) 13:57:16動かしてみた
baと表示された
0229>>226
2005/04/21(木) 14:01:40VC8を使わないか、Releaseモードにすれば大丈夫。
0230デフォルトの名無しさん
2005/04/21(木) 14:26:25ありがとうございました。
>>170 は私が作ったへぼソースw
>まるで自分が作ったかのように質問してるし。
>良識を疑うよw
自分が作ったなんて一言も書いてないです。
もしそのように感じたらすみませんでした。
>>malloc関数はどうでもいいです。
>>個人的に使わないと無理かなと思っただけなんで。
^^^^^^^^^
>嘘を付くな嘘を。
嘘ではないです。宿題を出された日に大学で教授にmalloc関数を
使えばできるよ。と言われたので個人的に解釈してmalloc関数を
使わなければできないと思ったのでそのように書いたのです。
------------------------------------------------------------
言い訳みたいな文になってしまってすみません。
本当にありがとうございました。
0231デフォルトの名無しさん
2005/04/21(木) 14:47:22それは、宿題の範疇を超えるんだが(^^;;
簡単に説明すると、
・文字列トークンは普通、(書換えできない)文字列へのポインタとして扱われる。
・例外として文字列配列の初期子として書かれたときは、その文字列配列の初期値を決める。
・配列の名前だけ書く([]を着けない)と、最初の要素へのポインタとして扱われる。
わからんよーなら、丁寧な教科書なら図解つきで載ってるんで、読んでおくれ。
0232118辺り
2005/04/21(木) 15:17:04なんだよ、C++でいいならそのまま使えよ。
Cかと思ってmalloc()辺りの説明したけど、文字列の扱い慣れてないみたいだから
>190みたいな阿呆なコード書いてるんだろうし。
0233デフォルトの名無しさん
2005/04/21(木) 15:50:28明日学校行って、他のコンパイラーでやってみます。
本当ありがとうございました。
0234デフォルトの名無しさん
2005/04/21(木) 15:51:48>229を理解してその台詞? いくらなんでも酷すぎるなぁ。
0235デフォルトの名無しさん
2005/04/21(木) 16:46:05>>Releaseモードにすれば
マジであほなんで、その仕方がよく分からなかったけど、また聞くと悪いから、
VC8以外のコンパイラーで一度試してみようかなって思っただけです。
0236デフォルトの名無しさん
2005/04/21(木) 16:49:14今ままでずっと書いてもらったコードを理解するために、色々調べてて
返事おくれました。
STLの授業始まったばかりで、まだ定かではないことがたくさんあって・・・。
ほんと、ありがとうございました。
0237デフォルトの名無しさん
2005/04/21(木) 16:50:24前にもIDEの使い方くらい勉強しとけって書かれてたよなぁ。
レスがその場凌ぎ以外のなんにも役に立ってないわけだ。
0238デフォルトの名無しさん
2005/04/21(木) 17:33:14ちゃんと勉強するやつがここに来るわけないだろw
0239デフォルトの名無しさん
2005/04/21(木) 17:38:04マジレスすると、私事なのですが、学校が進むの早いんですよ。
去年の10月にC++の最初、basic classから始まって、
data structure,STL&SLと、とんとんと。
その場凌ぎ以外のなんにも役に立ってないわけじゃなくて、
進むの学校が進むの早すぎて、あれもこれもとやること多すぎで、
消化不良起こしてるんです。
まだC++初めて6ヶ月しか経ってないので。
もちろん、このクラスの以外にも3クラス取ってるわけで・・・。
でも、コンパイラーのこと、書かれていた基礎知識が抜けていて、
マズイのは、ご指摘どうり、自分でも承知しているので、
週末にでも時間作れるように努力して、勉強します。
024070
2005/04/21(木) 18:03:49レスありがとうございます。
AHOなソースにしてしまい申し訳ありません。
何故か当環境でコンパイルすると、ズラーとエラーが出てきてしまいました。
『結果』という文字がなぜうまくいかないのかヒントお願いいたします。
0241デフォルトの名無しさん
2005/04/21(木) 18:23:550242232らしい
2005/04/21(木) 18:26:05文字列は、char変数には入らない。
stringでエラーを起こしているなら、
#include <string>
すればいい。
教えるの面倒だから、元の方でエラーをなくす努力をしてくれ。
0243デフォルトの名無しさん
2005/04/21(木) 18:51:17ModenやらFAQやら禿本やらboostやらと読んだが…
自分が適当にやってるのを他のせいにするなと言いたい
やる気さえあれば誰だって出来る。よっぽどアホでない限りな
0244デフォルトの名無しさん
2005/04/21(木) 19:01:520245デフォルトの名無しさん
2005/04/21(木) 19:09:39Ψ2p=1/sqrt(PI)*γ2^(5/2)*r*e^(-γ2*r)*cosθ
という式で|Ψ(x,y,z)|^2を、数値的に求め
その結果から|Ψ(x,0,z)|^2のグラフを
gnuplotでえがくプログラムを組む課題です。
どのようなプログラムを組めばよいでしょうか。
0246デフォルトの名無しさん
2005/04/21(木) 19:20:52[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;
0247デフォルトの名無しさん
2005/04/21(木) 19:42:11LinuxかMacかwindowsかそのほかのUNIXか。
0248デフォルトの名無しさん
2005/04/21(木) 19:50:06テンプレに従え。C++なのかCなのかも分らないので宿題として正答はできない。
0249デフォルトの名無しさん
2005/04/21(木) 20:04:143つの商品なのにpr[2]ではおかしいでしょ。
prは品物の値段を入れる変数でaは添え字でしょ。
入力された品物の値段をどこに入れるの。
考えてね。
0250デフォルトの名無しさん
2005/04/21(木) 20:14:11for(a=0;a<=2;a++){
scanf("%d",&a);
ループに使ってる a で scanf するな!
っていうか pr[] に scanf に汁!
>(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。
goke 初期化汁!
0251245
2005/04/21(木) 20:29:26[1] 授業単元:なし
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:fedora core
[3.2] コンパイラ(バージョン):不明
[3.3] 言語:C
[4] 期限:4月末日
0252デフォルトの名無しさん
2005/04/21(木) 20:41:020253デフォルトの名無しさん
2005/04/21(木) 20:43:45オ�hル
0254デフォルトの名無しさん
2005/04/21(木) 20:44:050255デフォルトの名無しさん
2005/04/21(木) 20:58:29どうも合計数がきちんと表示されません。
以下のどこかだと思いますが、どこがおかしいのでしょうか?
do{
printf("No%d: = ",++y);
scanf("%d",&z);
sum += z;
putchar('\n');}
while(y < 3);
printf("合計値は… : %d です!\n\n",sum);
0256デフォルトの名無しさん
2005/04/21(木) 21:02:08[2] 問題文(含コード&リンク):
1.キーボードから整数を入力させ、奇数か偶数かを判定するプログラムを作りなさい。
2.同じく整数を入力させ、素数であるかどうかを判定するプログラムを作りなさい。
[3] 環境
[3.1] OS:Win2000
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C
[4] 期限:明日朝まで
よろしくお願いします
0257デフォルトの名無しさん
2005/04/21(木) 21:02:33たいていは初期化
0258デフォルトの名無しさん
2005/04/21(木) 21:04:24if( 数 % 2 )
0259デフォルトの名無しさん
2005/04/21(木) 21:06:19神様!!!できました!!!
=0って宣言しなくても勝手に0が入ると思ってたorz
0260デフォルトの名無しさん
2005/04/21(木) 21:17:44[2] 問題文(含コード&リンク):int string_to_number(char *p):引数として与えられた文字列pの先頭から整数値を取り出して返す関数。ただし先頭が符号でも数字でもなければ0を返す。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ(バージョン):分かれません
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:特になし
0261デフォルトの名無しさん
2005/04/21(木) 21:34:07先頭以外に数字以外の別の文字があった場合はどうする?
0262デフォルトの名無しさん
2005/04/21(木) 21:38:59未定義なんだから、別に鼻の穴から悪魔が出てきても(ry
0263デフォルトの名無しさん
2005/04/21(木) 22:05:41return atoi(p);
}
0264207
2005/04/21(木) 22:22:53いまポインター関係の本を読んでみてます;
理解するのにちょっと時間がかかりそうですが頑張ります;
ご丁寧にありがとうございました♪
0265デフォルトの名無しさん
2005/04/22(金) 00:14:59#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;
}
0266デフォルトの名無しさん
2005/04/22(金) 00:25:49intの桁あふれとかは考慮しなくてもいいですか、まぁ宿題レベルだからいいのか
0267デフォルトの名無しさん
2005/04/22(金) 00:33:160268デフォルトの名無しさん
2005/04/22(金) 00:44:52ハァ?
265 でなら while() で判断、だろ?
0269デフォルトの名無しさん
2005/04/22(金) 00:59:58いや、むしろ漏れは 267 の strcmp での対策とやらが知りたい
おながい教えて
0270デフォルトの名無しさん
2005/04/22(金) 02:45:37[2] 問題文(含コード&リンク): nを与えてn!を計算するプログラムを作成せよ
[3] 環境
[3.1] OS:windous
[3.2] コンパイラ(バージョン):VisualC++
[3.3] 言語:C++
[4] 期限:無期限
お願いします
0271デフォルトの名無しさん
2005/04/22(金) 02:54:10nはいくつまで?
0272デフォルトの名無しさん
2005/04/22(金) 02:55:390273デフォルトの名無しさん
2005/04/22(金) 02:57:39unsignedの方がいい
0274デフォルトの名無しさん
2005/04/22(金) 03:17:19#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;
}
0275デフォルトの名無しさん
2005/04/22(金) 03:24:360276デフォルトの名無しさん
2005/04/22(金) 08:18:30template<unsigned n> inline unsigned f()
{
if (n > 1) {
return n * f<n ? n - 1 : 1>(); //テンプレート引き数がn-1だとダメなのなんで?
}
return 1;
}
0277デフォルトの名無しさん
2005/04/22(金) 08:23:40書き直したから貼っておこう
0278デフォルトの名無しさん
2005/04/22(金) 16:26:09[2] 問題文 標準入力で指定されたファイルからテキストを入力、
そして標準出力に出力せよ。
*同じ文字が連続して2回入力されたときには1文字消去して出力せよ。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:今月中
です。
「同じ文字が連続して2回入力されたときには1文字消去して出力せよ」
というところがなかなか出来ません。よろしくお願いします。
0279デフォルトの名無しさん
2005/04/22(金) 16:28:29今月中までなら、もうすこし自分で考えれ。
0280デフォルトの名無しさん
2005/04/22(金) 16:31:46ありがとうございます。そんな簡単な方法があったんだなんて盲点でした。
>>265
まだ習ってない内容も含んでいますが理解できるようがんばりたいです。
0281デフォルトの名無しさん
2005/04/22(金) 16:41:323回以上連続している場合はどう解釈すればいい?
a.あくまでも2回ごとに1文字消去 つまり3,4回連続なら2文字になる
b.最初の1文字だけ表示2文字目以降は消去 つまり3,4回連続でも1文字
0282デフォルトの名無しさん
2005/04/22(金) 17:24:33[2] 問題文(含コード&リンク): わかりません
[3] 環境
[3.1] OS: わかりません
[3.2] コンパイラ(バージョン): わかりません
[3.3] 言語:C/C++/どちらでも可 のいずれか わかりません
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか わかりません
[5] その他の制限: わかりません
よろしくお願いします。
0283デフォルトの名無しさん
2005/04/22(金) 17:30:25よろしくお願いします。
0285デフォルトの名無しさん
2005/04/22(金) 17:44:03じゃあそれ以外の未解決分お願いします。
0286デフォルトの名無しさん
2005/04/22(金) 18:20:10おーい、factorialは整数のみで定義できる関数だからfloatなどの場合は定義すべきじゃないよ。それは糖だよ。
0287デフォルトの名無しさん
2005/04/22(金) 18:46:36#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;
}
}
0288デフォルトの名無しさん
2005/04/22(金) 18:58:58> #include <stdlib.h>
> #include <string.h>
イラネ
0289デフォルトの名無しさん
2005/04/22(金) 19:00:25うるせー
0290デフォルトの名無しさん
2005/04/22(金) 19:01:250291デフォルトの名無しさん
2005/04/22(金) 19:09:02約42290レスの中からまとめるの?ご苦労様。
質問する奴らはそんなもの見ないけどな。
0292デフォルトの名無しさん
2005/04/22(金) 19:10:060293デフォルトの名無しさん
2005/04/22(金) 19:26:07問題をまとめるとせいぜい1000題以内だと思う。
0294デフォルトの名無しさん
2005/04/22(金) 19:28:52その中から問題と解答だけを抽出するならそれほど時間が掛からないと思う。
0295デフォルトの名無しさん
2005/04/22(金) 19:32:40がんばってくれ。
0296デフォルトの名無しさん
2005/04/22(金) 19:41:11それはわかっているけどね。
ただ巨数になりやすいから、結果をdoubleでも出せるようにしたかっただけ。
n = 10.5 とかでも計算しちゃうけど、それはやらないでねw
あと、テンプレート引数にはしかるべき演算子を定義した巨大数クラスも取れるので、いいじゃん。
0297デフォルトの名無しさん
2005/04/22(金) 19:48:49誤差で13! != 13.0!になったが。
0298297
2005/04/22(金) 19:52:040299デフォルトの名無しさん
2005/04/22(金) 19:54:030300>>299
2005/04/22(金) 19:57:010301デフォルトの名無しさん
2005/04/22(金) 20:22:37SFINAEを使えば継承もできるようですね。おおよそHaskellと似たような事もできることが分りました。
ありがとうございます。
0302デフォルトの名無しさん
2005/04/22(金) 20:27:250303デフォルトの名無しさん
2005/04/22(金) 21:19:48質問あるたびに誘導ばかりしていると新しいものが生まれないからほどほどに
0305278
2005/04/22(金) 22:19:54ありがとうございます!
頭が悪いのでパット見分からないのですが、考えてみます!
0306デフォルトの名無しさん
2005/04/22(金) 22:37:20俺みたいにこのスレをみて実力ためしに問題といてる人間にとっては
勉強になります。ぜひまとめサイト御願いします。m(_ _)m
0307デフォルトの名無しさん
2005/04/22(金) 23:04:290308デフォルトの名無しさん
2005/04/22(金) 23:17:46f<0>が実体化された時点で、f<(unsigned)-1>も実体化されるから
0309デフォルトの名無しさん
2005/04/22(金) 23:26:21�_�g�a�d�a�d �`�i�f�d�j�d
0310デフォルトの名無しさん
2005/04/22(金) 23:37:26template <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;
}
0311デフォルトの名無しさん
2005/04/23(土) 01:18:020312デフォルトの名無しさん
2005/04/23(土) 01:19:190313デフォルトの名無しさん
2005/04/23(土) 01:24:46ISO/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;"
0314デフォルトの名無しさん
2005/04/23(土) 01:32:31さらに f<(unsigned)-2>, f<(unsigned)-3> ...
と実体化されてゆき、コンパイルが破綻するから。
もしくはコンパイルを破綻させないために設定してある
テンプレートの深さの制限を超えるから。
0315デフォルトの名無しさん
2005/04/23(土) 01:40:00template< unsigned n > unsigned
f() {
return n * f< n - 1 >();
}
template<> unsigned
f< 0 >() {
return 1;
}
int main() {
std::cout << f< 6 >();
}
0317デフォルトの名無しさん
2005/04/23(土) 01:45:58そういうこと
評価はランタイム、実体化はコンパイルタイム
0319デフォルトの名無しさん
2005/04/23(土) 11:12:46へー、それは新たに追加されたってこと?
0321デフォルトの名無しさん
2005/04/23(土) 15:06:21あんたの頭。
それはさておき、入力後すぐにプログラムが終了しているなら入力したファイル名をフルパスにして再挑戦してみよ。
0322デフォルトの名無しさん
2005/04/23(土) 15:07:12何が何に追加されたと思って質問しているのかね。
0323デフォルトの名無しさん
2005/04/23(土) 16:05:29[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題がわかりません。
知恵を貸してください。よろしくお願いします。
0324デフォルトの名無しさん
2005/04/23(土) 16:58:29void 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);
}
0325324
2005/04/23(土) 17:03:24int main() -> int main(void)
0326デフォルトの名無しさん
2005/04/23(土) 17:15:40すまんまちがえた>>314じゃなくて>>313ですた
んで、これは>>313はこの版のCからそうなったの?それともずいぶん前から?
0327デフォルトの名無しさん
2005/04/23(土) 17:18:33#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;
}
}
0328デフォルトの名無しさん
2005/04/23(土) 17:20:05>>313はc++。
c99にも同様の規定がある。
0329デフォルトの名無しさん
2005/04/23(土) 17:28:01>313はC++。
0330デフォルトの名無しさん
2005/04/23(土) 17:46:40素早い回答ありがとうございます。
すみません、質問なのですが
while(scanf("%d", &n) > 0 && n > 0)
のscanfの部分をnに変えてしまってはマズイでしょうか?
whileの条件の中にscanfというのは使った事がなくわかりません。
プリント文で値は?と質問した後に、入力させる方式にしたいと思っています。
0331デフォルトの名無しさん
2005/04/23(土) 17:54:56少しは自分でやったり考える心は無いのか
0332デフォルトの名無しさん
2005/04/23(土) 17:55:11その部分は、
「まず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のエラーチェックは省いた)
0333デフォルトの名無しさん
2005/04/23(土) 17:58:27スミマセン、考えても分からなかったもので…。
>>332
丁寧にありがとうございます。
break文を用いた方法でやってみたいと思います。
>>327もそうですよね?
本当にありがとうございました。
0334デフォルトの名無しさん
2005/04/23(土) 23:30:20fh=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の倍数じゃないとうまく表示されないのはわかっているのでがうまくできないのです。
どなたかいいサイト、参考書、やり方などご教授お願いします;;
0335デフォルトの名無しさん
2005/04/24(日) 00:08:23宿題なのか?
0336デフォルトの名無しさん
2005/04/24(日) 00:30:43宿題なんです つwT
0337デフォルトの名無しさん
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] その他の制限:
0338デフォルトの名無しさん
2005/04/24(日) 12:45:53ありがと
0339デフォルトの名無しさん
2005/04/24(日) 20:45:24テンプレ厨は邪魔だから氏ねよ
0340デフォルトの名無しさん
2005/04/24(日) 20:53:43とりあえずこの書き込みも邪魔
0341デフォルトの名無しさん
2005/04/24(日) 21:04:400342デフォルトの名無しさん
2005/04/24(日) 21:06:54pgr
0343以下、名無しにかわりましてVIPがお送りします
2005/04/24(日) 21:10:36/ ̄ ̄ ̄ ̄ ̄\ 承知のとおり、5/8(日)はJr板と対戦することになりました。
ノ´ `ヽ 対戦日は、素晴らしい豪脚でν速を叩きのめした競馬板をも超える
ノ /'''ヽヽ ヽ 強力で激しいラシの嵐でJr板を沈める所存であります。
| / ヽヽヽ ヽ そういうわけで、皆さんの変わらぬご愛顧のほどよろしくお願いします。
| / `ヽ| |´ヽ ヽ なお、支援物資(特におっぱい)がありましたら、いつでもうpして下さい。
| | ‐‐―¬ ー―‖
| ⊂ 」 || / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|ノ \ <^> / | < こんなところにいてなんだけど、VIPクオリティってなに?
| ∧ \ _____^_//レ \________________________
レ´| ノ\;;;;;;;;;∀;ヽ
|_ \;JPN;;|ア ●2ちゃんねる全板人気トーナメントinVIP●
. | |\ |;;12;;/|| http://ex10.2ch.net/test/read.cgi/news4vip/1114265328/
★ 全ての板にVIPクオリティを in ニュー速VIP ★
0344以下、名無しにかわりましてVIPがお送りします
2005/04/24(日) 22:35:45他の組の対戦を見て、いよいよ我々も悠長に構えていられなくなりました。
対戦日は、競馬板が豪脚でν速を差しきってしまったので、
我々は「韋駄天」ことサイレンススズカのような怒涛の逃げでJr板を沈める所存であります。
そういう訳で、皆さんの変わらぬご愛顧のほどよろしくお願いします。
支援物資(特におっぱい)がありましたら、いつでもうpして下さい。
あなたのおっぱいが、ひょっとしたら勝ちぬけの突破口になるかもしれません。
∧_∧ ∧_∧ ┌──────────────
(゙゙ヽ ´∀`)')('(´∀` /゙゙) )) < グローバルVIPクオリティ!!!
(( \ / ヽ / .└──────────────
((⌒) ( ) (⌒))
``ヽ_,) (,__,ノ゙
● 2ch全板人気トーナメント in VIP ●
http://ex10.2ch.net/test/read.cgi/news4vip/1114348627/
★ 全ての板にVIPクオリティを in ニュー速VIP ★
0345デフォルトの名無しさん
2005/04/24(日) 22:36:53[2] BM法のアルゴリズムを説明せよ
[4] 4/25
よろしくお願いします
0346デフォルトの名無しさん
2005/04/24(日) 22:43:18却下
0347デフォルトの名無しさん
2005/04/24(日) 23:39:36[2] 問題文(含コード&リンク): 日本経済を立て直せ
[3] 環境
[3.1] OS: 代議制
[3.2] コンパイラ(バージョン): ―
[3.3] 言語: 日本語
[4] 期限: 早急
[5] その他の制限: 右傾・左傾は不可
0348デフォルトの名無しさん
2005/04/24(日) 23:41:08今が日本の実力。
バブルが異常だっただけだ。
0349デフォルトの名無しさん
2005/04/25(月) 00:33:521行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
0350デフォルトの名無しさん
2005/04/25(月) 00:34:22{
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];
}
}
0351デフォルトの名無しさん
2005/04/25(月) 00:35:00for (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);
}
0352デフォルトの名無しさん
2005/04/25(月) 00:42:571行3列と3行7列をかけたら1行7列じゃねえの?
0353デフォルトの名無しさん
2005/04/25(月) 01:44:51[2] 問題文(含コード&リンク): 40桁の数を素因数分解するプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語: C
[4] 期限: 秘密
[5] その他の制限: 任意の多倍長整数演算ライブラリを使用しても良い。自作もOK。
0354デフォルトの名無しさん
2005/04/25(月) 01:58:14氏ね
0355デフォルトの名無しさん
2005/04/25(月) 02:02:12どうかお願いします
0356デフォルトの名無しさん
2005/04/25(月) 02:05:55UBASICでも入れてリストをそのまま多倍長クラスにでも移せ。
UBASIC
ttp://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm
ここにいろいろな素因数分解プログラムがあるから、せっせと移植すれ。
0357デフォルトの名無しさん
2005/04/25(月) 02:06:58どうかCのプログラムとして完成させてください。
0358デフォルトの名無しさん
2005/04/25(月) 08:40:12随分秘密が多いな。
任意の多倍長整数演算ライブラリを使用していいんだろ?
だったらそれを使えば後はどっかで素因数分解のソースを探せばいいだけじゃん。
0359353
2005/04/25(月) 17:38:20int型を使った整数演算で数体ふるい法を使った素因数分解のプログラムを教えてくださいませんか?
0360353
2005/04/25(月) 17:39:560361デフォルトの名無しさん
2005/04/25(月) 17:40:56仕事に使うんだったら、金払って誰か他の人に頼めよ。
0362デフォルトの名無しさん
2005/04/25(月) 17:56:32仕事ではありません。
大学の課題です。
0363デフォルトの名無しさん
2005/04/25(月) 18:24:09期待しているのだが。
0364デフォルトの名無しさん
2005/04/25(月) 18:28:24この当たりのソースはどうだ?C言語で書かれていて、一般数なら120桁まで
求められそうだが。
http://www.math.ttu.edu/~cmonico/software/ggnfs/
General Number Field Sieve source code でぐぐれば無数に見つかるぞ。
上のは一番最初に出てきたやつ。
0365デフォルトの名無しさん
2005/04/25(月) 18:49:35まとめ中。
忙しいので後回しにしているが、需要があったんだな。
Wikiでいいよね。
ところで、WEBページ用にどの無料鯖を使えばいいだろうか。オススメってある?
0366デフォルトの名無しさん
2005/04/25(月) 19:34:32[2] 問題文:
�@フィナボッチ数を20番まで求め、配列に格納し、その後に印字するプログラムを作成せよ。なお、出力は10個ごとに改行せよ。
�A40以下入力データを引き数にして、フィナボッチ数を求める部分を関数とするプログラムを作成せよ。
[3] 環境
[3.1] OS: Win Xp
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年4月28日まで/無期限
[5] その他の制限: 特になし
高校の宿題なのですが自分にはさっぱりで困っています・・
こんなへたれな自分に救いの手をおねがいします・
0367デフォルトの名無しさん
2005/04/25(月) 20:13:49#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;
}
0368367
2005/04/25(月) 20:17:120369367
2005/04/25(月) 20:19:08�Aは >> 367 の fib でいいよな。
�@はどうだろうな。 >> 367 のNを20にすれば一応望みの出力結果は出るが。
0370367
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;
0371デフォルトの名無しさん
2005/04/25(月) 20:55:51さんくす&おつされさま。
一応、答える側だったりするんで・・・まとめページのどこそこ参照とかやれるといいなと。
それに、良い問題&良い回答って勉強になる。
Wikiでいいんじゃないかしらん。
Wikiの使えるよさげな無料鯖はわからん。(すまん)
0372デフォルトの名無しさん
2005/04/25(月) 21:00:45void 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;
}
0373デフォルトの名無しさん
2005/04/25(月) 21:29:26同じ計算を何度もするから効率悪い。
>>372は改善している
0374デフォルトの名無しさん
2005/04/25(月) 21:37:08どの部分?
0375デフォルトの名無しさん
2005/04/25(月) 21:40:450376デフォルトの名無しさん
2005/04/25(月) 21:47:52void *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;
}
0377デフォルトの名無しさん
2005/04/25(月) 22:04:10372のほうが、再起コールでオーバーヘッドあるように見える。
0378デフォルトの名無しさん
2005/04/25(月) 22:13:22>>367 > >>372
その差2倍
0379デフォルトの名無しさん
2005/04/25(月) 22:16:12乙+期待している
0380377
2005/04/25(月) 22:16:46kn-1 と kn-2 のとり方ね。
0381デフォルトの名無しさん
2005/04/25(月) 23:45:13それほんと?
計ってみたら>>372の方が10倍くらい時間かかってるんだけど。
0382デフォルトの名無しさん
2005/04/25(月) 23:53:06コンパイル環境によるんだろうな。
0383デフォルトの名無しさん
2005/04/26(火) 00:28:180384デフォルトの名無しさん
2005/04/26(火) 00:40:04>>372は最適化よりも関数呼び出しのオーバーヘッドの方が大きいと思う。
0385デフォルトの名無しさん
2005/04/26(火) 00:41:490386デフォルトの名無しさん
2005/04/26(火) 00:53:00MathematicaでMathLinkを使うのが早い。
0387デフォルトの名無しさん
2005/04/26(火) 01:37:19>フィナボッチ
>フィナボッチ の検索結果のうち 日本語のページ 約 672 件中 1 - 20 件目 (0.11 秒)
...orz
0388デフォルトの名無しさん
2005/04/26(火) 02:01:42>>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;}
0389デフォルトの名無しさん
2005/04/26(火) 02:18:46int 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));
}
0390デフォルトの名無しさん
2005/04/26(火) 03:06:31>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;}
0391デフォルトの名無しさん
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;}
0392デフォルトの名無しさん
2005/04/26(火) 03:25:40f() {
return f< n - 1 >() + f< n - 2 >();
}
template<> unsigned
f< 1 >() {
return 1;
}
template<> unsigned
f< 2 >() {
return 2;
}
C++ なのが難点
0393デフォルトの名無しさん
2005/04/26(火) 08:43:51くだ質に書こうと思ったけど、ココの方が確実な気がしたので質問させて下さい。
C++で多次元配列を引数にする方法って何かありますか?
多次元と言うか、2次でいいんですが。
int *A[] ってポインタ化しないと無理ですかね?
0394デフォルトの名無しさん
2005/04/26(火) 08:53:34構造体やクラスのメンバに配列を持てばできる
ただしオーバーヘッドはでかくなると思うぞ
0395デフォルトの名無しさん
2005/04/26(火) 09:34:27vectorのvectorにしたら?
>>394
とは言え、でかいか?
0396デフォルトの名無しさん
2005/04/26(火) 10:38:48void foo(const int (&array)[5][8])
{
}
0397393
2005/04/26(火) 10:55:00レスさんくすこ。
とりあえずstructで作り始めてみましたが、あんまりよくないかな。
作るだけなら楽な道だと思いますが。一度出来たらいろいろ試してみます。
ありがとうございました。
0398デフォルトの名無しさん
2005/04/26(火) 11:42:24http://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つの素数からなる合成数とかまず�_
あとエラー処理は全く考えてない。
0399デフォルトの名無しさん
2005/04/26(火) 16:56:44そこでconst参照ですよ。
0400デフォルトの名無しさん
2005/04/26(火) 17:21:36決定性アルゴリズムではまず無理だ。
20桁以上だと確率的なアルゴリズムを考えないとダメ。
0401デフォルトの名無しさん
2005/04/26(火) 18:48:18暇つぶしにやってみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/335.txt
0402デフォルトの名無しさん
2005/04/26(火) 21:06:01[2] 問題文(含コード&リンク): 最大公約数を求める関数を作成せよ
[3] 環境
[3.1] OS: Vine linux 3.0
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語: C
[4] 期限: 4/27
[5] その他の制限: 特にありません。
0403デフォルトの名無しさん
2005/04/26(火) 21:11:19int GCD(int a,int b){
return a?f(b%a,a):b;
}
0404デフォルトの名無しさん
2005/04/26(火) 21:12:290405デフォルトの名無しさん
2005/04/26(火) 21:18:050406デフォルトの名無しさん
2005/04/26(火) 21:22:420407デフォルトの名無しさん
2005/04/26(火) 21:26:57int 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;
}
0408407
2005/04/26(火) 21:28:28int n = 1;
while (b) {if (b&1) n = n*a; b = b >> 1; a = a*a;}
return n;
}
0409403
2005/04/26(火) 21:28:34int GCD(int a,int b){
return a?GCD(b%a,a):b;
}
(/ω\)ハズカシーィ
0410デフォルトの名無しさん
2005/04/26(火) 21:31:010411デフォルトの名無しさん
2005/04/26(火) 22:57:300412デフォルトの名無しさん
2005/04/26(火) 23:10:46末尾再帰自体は昔からCでできますが何か?
0413デフォルトの名無しさん
2005/04/26(火) 23:16:41[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] その他の制限: 特になし。
どなたかご教授下さい。
0414デフォルトの名無しさん
2005/04/26(火) 23:36:40double 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;
}
0415デフォルトの名無しさん
2005/04/26(火) 23:37:28Cに末尾再帰最適化が実装されるのはいつですか
0416413
2005/04/26(火) 23:42:42ご回答ありがとうございます。
初心的な質問ですが、プログラムの頭に
#include <stdio.h>
は必要ないのですか?
0417デフォルトの名無しさん
2005/04/26(火) 23:46:02必要
0418デフォルトの名無しさん
2005/04/26(火) 23:49:19必要だと思えばつけよ。
ここの回答が、常に完全な形で与えられると思うな。
0419デフォルトの名無しさん
2005/04/26(火) 23:50:200420デフォルトの名無しさん
2005/04/27(水) 00:06:060421デフォルトの名無しさん
2005/04/27(水) 00:50:42double 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の出題者がこれをねらいにしてるわけじゃなさそうだから
他ので大丈夫だとは思うが
0422デフォルトの名無しさん
2005/04/27(水) 01:06:03sum=sum+1.0/((double)i*i); でいいべ
0423デフォルトの名無しさん
2005/04/27(水) 01:37:39[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時
0424423
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;
}
}
0425423
2005/04/27(水) 01:39:01print 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("");
}
0426423
2005/04/27(水) 01:40:46main 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;
}
長文失礼しました。
よろしくお願いします。
0427デフォルトの名無しさん
2005/04/27(水) 02:52:26[2] N*Nの魔法陣を作成せよ。(ただし、Nは奇数とする
[3] 環境
[3.1] Unix
[3.2] gcc
[3.3] C
[4] 期限:できるだけ早く
2次元配列に斜めに代入していき、配列がblankならその下の配列に移動して、、、というやり方
らしいのですが、さっぱりです。ソースを書いていただけるとうれしいです。
0428デフォルトの名無しさん
2005/04/27(水) 03:15:23#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;
}
0429427
2005/04/27(水) 03:27:370430デフォルトの名無しさん
2005/04/27(水) 03:56:32何をしたいのか意味が分からんので
ヒントは無視して、ソースから適当に判断したから
検討違いだったらスマソ
あと、コンパイル&実行してないからミスってるかも知れんので
エラーが出たら自分で直してね
#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;}
0431デフォルトの名無しさん
2005/04/27(水) 03:57:23int 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 ; }
0432デフォルトの名無しさん
2005/04/27(水) 04:46:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/336.txt
無向グラフ対応済み。
インデックスが0からになってる。
0433423
2005/04/27(水) 05:44:23>>432
ありがとうございます。
自分的にはmallocとsizeofをつかって頂点を制限なく取れるように
しようとしていたのですがどれくらいの領域を確保すればよいかよく分からなくて困ってました。
やっぱり素直にNMAXを増やしたほうがよかったんですね。
ありがとうございました。
0434デフォルトの名無しさん
2005/04/27(水) 11:05:21[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] その他の制限: なし
よろしくお願いします。
0435デフォルトの名無しさん
2005/04/27(水) 11:20:55>>401
0437デフォルトの名無しさん
2005/04/27(水) 11:49:29void 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++;
}
}
0438デフォルトの名無しさん
2005/04/27(水) 11:51:360439デフォルトの名無しさん
2005/04/27(水) 12:00:17void 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;
}
0440デフォルトの名無しさん
2005/04/27(水) 12:28:34EBCDIC の呪いにかかって死んでしまえ
0441デフォルトの名無しさん
2005/04/27(水) 14:03:28#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);
}
}
0442デフォルトの名無しさん
2005/04/27(水) 14:03:54Cell* 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;
}
0443デフォルトの名無しさん
2005/04/27(水) 16:59:19ASCIIコード表見て書きました
すみません…
0444デフォルトの名無しさん
2005/04/27(水) 17:04:16素直に islower() 使えばいいのに
0445デフォルトの名無しさん
2005/04/27(水) 17:05:350447デフォルトの名無しさん
2005/04/27(水) 17:17:05ごめんなさい
0448デフォルトの名無しさん
2005/04/27(水) 18:45:33#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;
}
0449デフォルトの名無しさん
2005/04/27(水) 18:47:05int 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;
}
0450デフォルトの名無しさん
2005/04/27(水) 21:35:38プロの皆さん。初心者に一分で教えてください。
# ./a.out
どこに×を置きますか?:2 2
□□□
□×□
□□□・
どこに○を置きますか?:3 1
□□□
□×□
○□□
0451デフォルトの名無しさん
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);
0452デフォルトの名無しさん
2005/04/27(水) 21:37:57テンプレに従え。
0453デフォルトの名無しさん
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);
}
0454デフォルトの名無しさん
2005/04/27(水) 21:40:440455デフォルトの名無しさん
2005/04/27(水) 21:43:07[2] 問題文(含コード&リンク): 上に貼り付けちゃいました。
[3] 環境
[3.1] OS: LINUX
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年4月28日
[5] その他の制限: なし
お願いします。
0456デフォルトの名無しさん
2005/04/27(水) 21:51:30gccとかなら古くから実装されてるが。
多分O2以上の最適化オプションで末尾再帰最適化もする。
0457デフォルトの名無しさん
2005/04/27(水) 21:54:29それじゃ再帰を使った方がきれいで速いコードが書けちゃうんですか?!
まだ学校でも再帰って習ってないです
0458デフォルトの名無しさん
2005/04/27(水) 22:06:31常にそうとは限らない。
ループを使った方が良い場合も多い。
0459デフォルトの名無しさん
2005/04/27(水) 22:19:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
ここの67に張っておいた。
このウプロダはじめてでよくわからん。
0460デフォルトの名無しさん
2005/04/27(水) 22:44:09ありがとうございます!
・・・が、451と453にうめてほしかったんです。
0461デフォルトの名無しさん
2005/04/27(水) 22:47:53[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]明日までなんでかなりあせってます・・
こんなヘタレに教えてください!お願いします!
0462デフォルトの名無しさん
2005/04/27(水) 22:58:31入力された通話料金をそのまま出力すればいいのか?
0463デフォルトの名無しさん
2005/04/27(水) 23:03:46しかしそれだと簡単杉か…
0464デフォルトの名無しさん
2005/04/27(水) 23:04:520465デフォルトの名無しさん
2005/04/27(水) 23:06:060466デフォルトの名無しさん
2005/04/27(水) 23:08:170467ゆう
2005/04/27(水) 23:22:25[2] 問題文(含コード&リンク):50Hzの正弦波に一様乱数を重ねた信号のフーリエ変換をするプログラムを作る。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン):?
[3.3] 言語:C
[4] 期限:2005年05月11日
[5] その他の制限:問題の意味がチンプンカンプンです。
高速フーリエ変換と一様乱数発生のプログラムはわかります。
0468デフォルトの名無しさん
2005/04/27(水) 23:29:10女ならまずおっぱいうpだ
0469デフォルトの名無しさん
2005/04/27(水) 23:35:21double 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ヘルツのところだけ突出し、のこりは一様乱数の影響で各周波数がほぼ一定の値になると思うよ。
0470デフォルトの名無しさん
2005/04/27(水) 23:36:420471デフォルトの名無しさん
2005/04/27(水) 23:53:57とりあえず、通話時間と区分を入力して計算するプログラム。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/338.txt
0472461
2005/04/28(木) 00:11:070473デフォルトの名無しさん
2005/04/28(木) 00:18:51http://www.idemitsu.co.jp/moconet/michi_no_eki/jiman/images/2005-01/02-1.jpg
0474メモリダイヤル名無しさん
2005/04/28(木) 02:09:10[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] その他の制限:
0475474の続きです
2005/04/28(木) 02:14:59名前の場合は前方一致、電話番号は'P'および'-'を無視した結果を表示。
条件に一致したメモリダイヤルを抜きだして表示すう事。
�Cファイルはテキストフォーマットとする
一行目にメモリダイヤルを10進数表記で
二行目以降にそれぞれのメモリダイヤルをTABで区切って
電話番号 TAB 名前 で保存できる事。
ファイルからの読み込みが行える事。
途中まで作成したんですが、もうお手上げです。
どなたかご教授お願いします。
下記URLにメモリダイヤルという名前でアプロダしてます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
よろしくお願いします!
0476475の続きです
2005/04/28(木) 02:17:22許容外の文字が入力されたらエラーで返したいです。
つーか、これ課題にしてはむずかしすぎないですか??
0477デフォルトの名無しさん
2005/04/28(木) 02:50:32もまえの説明がまずいのでよくわかんないな
問題文はオリジナルか?
"メモリダイヤル"ってなんだ? 配列でいうところのインデックスか?
とりあえず struct Data が最大1000件、ってことでいいのか?
0478メモリダイヤル名無しさん
2005/04/28(木) 10:14:58説明悪くてすいません。
メモリダイヤルは電話帳です。
配列でいうインデックスです。
struct Dataが最大1000件です。
この電話帳に最大で1000件登録できるという事です。
よろしくお願いします。
0479デフォルトの名無しさん
2005/04/28(木) 19:04:16VCはどうですか?
0480デフォルトの名無しさん
2005/04/28(木) 20:59:01関数のプロトタイプって与えられたもの?
ととりあえず聞いてみる
0481デフォルトの名無しさん
2005/04/28(木) 22:40:42単純なコード順ならまぁ、楽だが、五十音順だとちと厄介だ。
0482教えてください!
2005/04/29(金) 01:39:05問題:
ある検索プログラムでは、以下の検索式の定義に従って検索結果が表示されます。
記号: *
例: A*B
働き: AもBも含まれる(AND検索)
+
例: A+B
働き: AまたはBが含まれる(OR検索)
#
例: A#B
働き: Aは含むがBは含まない(NOT検索)
()
例) (A+B)*C
働き) AまたはBが含まれて、かつCを含む。()内を優先
[入力例]
犬、猫以外の哺乳類のペットについて調べたい。
⇒ ペット*哺乳類#(犬+猫)
[質問]
「ラーメン」を含むか、または「ファミレス」「ファーストフード」
を含まない、「東京」にある「ランチ」を調べたい。
⇒ ???
注:「」内は入力例でいう犬や猫などの検索キーワードとして使用します。
お願いします。考えてみてください!
0483デフォルトの名無しさん
2005/04/29(金) 02:21:46> Aは含むがBは含まない(NOT検索)
A#B = a and not b ってこと?
(東京*ランチ*ラーメン)+(東京*ランチ#(ファミレス+ファーストフード))
0484デフォルトの名無しさん
2005/04/29(金) 02:22:53ランチ*東京
「ファミレス」(または)「ファーストフード」を含まない
#(ファミレス+ファーストフード)
東京*ランチ+(ラーメン#(ファミレス+ファーストフード))
こういうこと?C/C++プログラミングというより論理学みたいだけど
ベン図書いてやってみた方がいいんじゃないかなぁ…
0485デフォルトの名無しさん
2005/04/29(金) 02:34:28こんな感じが考えてみるとどうか
東京 and ラメン and ランチ
or
東京 and ラーメン and not (ファミレス or ファーストフーd)
東京とラーメンは共通なのがポイント。ここからね。
共通の部分はまとめて真・雷・悦・淀で4つの相。
全体量は不変として無量となす、逆帝神として小桜・大寅となす。
堂はらって揺、陣ふさいで呈。〜死亡が確認された方々〜
大曲市 毛峰 穂図 さん(79) 死亡
大曲市 ミタ さん(74) 死亡
大曲市 屋敷 雄二兵 さん(48) 死亡
大曲市 屋敷 酸線 さん(20) 死亡
大曲市 屋敷 非風 さん(18) 死亡
不過市 大本 ハリガ さん(12) 死亡
八牟田町 ’ さん(56) 死亡
八牟田町 湯田 屋今 さん(54) 死亡
落合村 平井 杵 さん(29) 死亡
落合村 さん(1) 死亡
落合村 アラタ コエ さん(49) 死亡
落合村 アラタ さん(43) 死亡
0486教えてください!
2005/04/29(金) 02:40:21考えてもらいありがとうございます。
おそらく入力例の用に答えるという意味では
484の
東京*ランチ+(ラーメン#(ファミレス+ファーストフード))
の様な答えだと思うのですが・・・
0487デフォルトの名無しさん
2005/04/29(金) 02:56:06個人的には
#(ファミレス+ファーストフード) よりも
#ファミレス#ファーストフード を推したい。
この辺は特に指定されてなきゃ好みの問題だが。
0488デフォルトの名無しさん
2005/04/29(金) 03:03:010489メモリダイヤルです
2005/04/29(金) 03:19:43関数は、私が勝手に考えたものなんで変更していただいてもかまいませんよ。
>481
ひらがなは50音順になってなくても、大丈夫らしいです。
英字、数字、ひらがなの順番で昇順、降順ができれば問題ないとの事。
最終手段として、英=1、数字=10、ひらがな=100
のように定義しようかと思ってるんですが。。。
なかなかよいアルゴが浮かばないです。。。
0490デフォルトの名無しさん
2005/04/29(金) 03:53:31いきなりソートを書こうとするな。
まずは名前の大小(前後)関係を比較する関数を書け。
比較、スワップはそれだけで単体の関数になってないとソートの関数のソースが十倍以上複雑になる。
ここを関数にしてあれば、アルゴリズムやデータ構造、ソートの基準変更したい時の変更が最小で済むしな。
比較は、一文字ずつ比較する関数を書くといい。
最初は一文字目どうし、同じなら二文字目…と再帰を使って決着付くまで後ろに進んでいくわけだ。
一文字ずつの比較なら、ペアの字種の組み合わせは9通り。この程度ならifを9個並べてもいい。
速度は気にするな。どうせファイル読み(書き)、画面表示、ソートで時間がかかっちまうんだから。
0491490
2005/04/29(金) 03:54:54再帰使う必要は無いな。ループで事足りるか。
再帰マニアなのでつい趣味に走ってしまった。
0492デフォルトの名無しさん
2005/04/29(金) 04:19:491 質問が曖昧(つーか、日本語が曖昧)
解釈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 )」
0493デフォルトの名無しさん
2005/04/29(金) 04:44:58>>482の質問の質問の内容としては、恐らく
「東京」and「ランチ」and(「ラーメン」or(not(「ファミレス」((and)or(or))「ファーストフード」))
のような解釈で良いと思われるが、
A#Bの解釈が「Aは含むがBは含まない(A and ( not B) )」と言うアホな仕様の為
「東京」*「ランチ」+(「ラーメン」#(「ファミレス」+「ファーストフード」)) は
「東京」and「ランチ」or(「ラーメン」and(not(「ファミレス」and「ファーストフード」)))となるため
>>482の質問の答えとしては間違えていると思われ
つー訳で自信は無いが…と言うか、考えるだけで頭が変になりそうなので…
「東京」*「ランチ」# ( (「ファミレス」((*)or(+))「ファーストフード」) #「ラーメン」)
0494デフォルトの名無しさん
2005/04/29(金) 04:54:53[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] その他の制限:特になし
だいたいできたんですけどなんかおかしくなるのです・・
よろしくおねがいします
0495デフォルトの名無しさん
2005/04/29(金) 05:47:44void check(int x,int y)
{
if( (x<=10&&x>=-10) && (y<=10&&y>=-10)){
printf("inside\n");
}else{
printf("outside\n");
}
}
0496495
2005/04/29(金) 05:53:02void 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");
}
}
0497デフォルトの名無しさん
2005/04/29(金) 09:12:34#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);
思いつきなんで、間違ってたらごめんなさい
文字コード表でも見て比較関数作ってください
0498デフォルトの名無しさん
2005/04/29(金) 14:37:07再帰だってループだろ。
0499デフォルトの名無しさん
2005/04/29(金) 14:41:150500デフォルトの名無しさん
2005/04/29(金) 14:45:06どうちがうの?
0501490
2005/04/29(金) 15:38:29ループってのはfor(while)ループのつもりで使った。
確かに再帰も繰り返し処理ではあるので、ループの一種と言えそうだけど。
再帰の場合、関数呼び出しのせいで速度が低下する場合がある。
最適化でコンパイラが何とかしてくれる事を期待してもいいけど。
0502デフォルトの名無しさん
2005/04/29(金) 19:00:42心配すべきは、スタック。
0503メモリダイヤルです
2005/04/29(金) 19:30:20ありがとうございます。
それでしたらstrcmp関数を使って、while文でループさせたらいいですか?
データ件数が少ないので、これくらいでしたら速度の劣化は気にしてないです。
でも、名前の場合は使用文字がひらがな英数(シフトJIS)での
前方一致なんで、9通りではおさまらない気がするんですが。
ソースいただけたら助かります。。。
501>
私、関数つくりすぎてますか?
省略できる部分があれば、ご指摘いただけたら助かります。
スタックは自分でも少し気にしてます。。。
0504デフォルトの名無しさん
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すれば良いのか?など、問題だらけです。
答えを貼り付けられるのは逆に困ってしまうので、最長経路について詳しく解説されている
サイトがあればお教えいただきたいです。
最短経路やセールスマン、最長片道切符は見つかるのですが・・・。
0505デフォルトの名無しさん
2005/04/30(土) 00:00:12ノードに一意なキーを割り振って、ハッシュなどを使ってノードを通過したかどうかを判定する。
javaならTreeSetとか。
0506メモリダイヤルです
2005/04/30(土) 01:11:48ありがとうございます!
関数int up_cmpの内容は理解できるんですが、
クイックソートはどこに挿入したらいいのでしょうか?
普通に比較関数の中に組み込めばよろしいのでしょうか?
よろしくお願いします。
0507デフォルトの名無しさん
2005/04/30(土) 01:25:43もまえ自分で
>全件表示の時に名前、電話番号による昇順、降順ソートが可能な事
って買い取るぞ
そこだ
0508メモリダイヤルです
2005/04/30(土) 01:36:21すいません!本当に助かります。
ありがとうございます!!
もし私が作ったソースでまずい部分があればご指摘いただけたら助かります。
ここは、私ならこうする、みたいな部分はありますか?
自分ではシンプルにまとめたつもりなんですが。
よろしくお願いします。
0509デフォルトの名無しさん
2005/04/30(土) 01:48:58{
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つから構成する
0510デフォルトの名無しさん
2005/04/30(土) 01:57:08ちとわかりにくかったな
検索して、見つかったそいつを編集するか削除するか、って流れにしたい
0511メモリダイヤルです
2005/04/30(土) 02:03:28ありがとうございます。
インターフェイスの事を考えたら、確かにそうですよね。。。
修正、削除で余分なメモリ使いたくないですし、
ハードの事を考えたら、いちいちファイルに保存するのも問題が
ある気がしたので、fopen、fclose以外は
構造体の添字でファイルに保存させずにまわす事にしました。
早速menuとprintallを修正します。
0512デフォルトの名無しさん
2005/04/30(土) 02:04:01ぜったいダメってことはないが、グローバル変数
Data g_table[SZ_TABLE];
int g_count;
関数のプロトタイプ宣言
void printall();
と実際
void printall(Data *dp)
が違う
0513メモリダイヤルです
2005/04/30(土) 02:19:28ご指摘ありがとうございます。
グローバル変数の使い方に問題があるのでしょうか?
関数printallの中でのg_countの使い方がマズイ、という事ですか??
すいません、よく理解できないんですが。。。
0514デフォルトの名無しさん
2005/04/30(土) 02:27:35死ぬ
0515メモリダイヤルです
2005/04/30(土) 02:44:39教えていただいておきながら恐縮なんですが、
qsortの部分で、第1引数と第2引数が関数宣言と一致しません、とエラーがでるんですが
どういう意味なんでしょうか??
自力で修正してみますので、無理でしたらご指摘お願いします。
0516メモリダイヤルです
2005/04/30(土) 02:46:53文に誤りがありました。
×自力で修正してみますので、無理でしたらご指摘お願いします。
○自力で修正してみますが、もし私が無理でしたらご指摘お願いします。
0517メモリダイヤルです
2005/04/30(土) 02:48:40意味がわかりました(^^;
確かにそうかもしれませんね。
考慮します。
0518デフォルトの名無しさん
2005/04/30(土) 07:06:37qsortに渡しているデータの型が適正でない。
0519デフォルトの名無しさん
2005/04/30(土) 07:57:110521デフォルトの名無しさん
2005/04/30(土) 16:51:08void 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");
}
}
0522デフォルトの名無しさん
2005/04/30(土) 19:25:08>x,yは実数とする
>>494
まぁ、残りは誰がやらなくても分かるよね…
0523522
2005/04/30(土) 19:43:13最近ぬるくなってきたな…
つー訳で、お詫びに
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");}
0524デフォルトの名無しさん
2005/04/30(土) 23:46:32[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> しか使ったことが無いです。
難しすぎでまったくできないです。
どうかお力を貸してください…。
0525デフォルトの名無しさん
2005/04/30(土) 23:48:28じゃあ、いい機会だから、stdlib.h と、string.hと、ctype.hも覚えろ。
0526デフォルトの名無しさん
2005/05/01(日) 00:16:540527デフォルトの名無しさん
2005/05/01(日) 00:22:35google::複素数 hoge()
{ return google::4次方程式::solve(方程式); }
0528デフォルトの名無しさん
2005/05/01(日) 01:32:02[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()関数において結果を出力
0529デフォルトの名無しさん
2005/05/01(日) 01:33:080530デフォルトの名無しさん
2005/05/01(日) 01:46:38int 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;}}
0531デフォルトの名無しさん
2005/05/01(日) 01:52:58線形台数だろうか? うん、きっとそうだ。
0532デフォルトの名無しさん
2005/05/01(日) 02:12:48#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;
}
0533メモリダイヤルです
2005/05/01(日) 02:56:23strcmpとwhileで、一文字ずつ比較する関数をつくってみたんですが、うまくいきません。
関数inputuで許容文字以外は省く関数を作ってみたんですけど、動いてくれないし。。。
これ以上は全然わからないです。
どなたか助けてください。。。
0534デフォルトの名無しさん
2005/05/01(日) 08:51:08名前の前方一致 → strncmp
電話番号の部分一致 → strstr
0535デフォルトの名無しさん
2005/05/01(日) 11:24:10#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にする以外の解決方法は無いのですか?
0536デフォルトの名無しさん
2005/05/01(日) 11:40:10しゅくだいか?それ。
class Thread {
// :
inline static unsigned __stdcall run( void* arg ) {
((Thread*)arg) -> runImpl();
}
virtual void runImpl() = 0;
// :
};
このようにしなさい
0537デフォルトの名無しさん
2005/05/01(日) 11:48:20要するに>535の答えは「無いです」って事。
諦めてstaticにするアルネ。
0538デフォルトの名無しさん
2005/05/01(日) 11:52:12for (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を使用しています。
この場合どういった原因が考えられるのでしょうか?
教えてください。よろしくお願いします。
0539デフォルトの名無しさん
2005/05/01(日) 11:55:270540デフォルトの名無しさん
2005/05/01(日) 12:02:290542デフォルトの名無しさん
2005/05/01(日) 12:06:51[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環境がないので、さっぱりです。
どなたか模範解答の方お願いできませんか?
0543デフォルトの名無しさん
2005/05/01(日) 12:11:55プログラムの構造を見直せばいいのでは
0544デフォルトの名無しさん
2005/05/01(日) 12:15:00>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;
}
0545デフォルトの名無しさん
2005/05/01(日) 12:20:34でも x^2 こういう書き方とか一切教えてもらってなかったです。
まぁ、自分で学ぶことを怠っていたせいですけど、、、
でも、本当にありがとうございました。
0546デフォルトの名無しさん
2005/05/01(日) 12:22:47> でも x^2 こういう書き方とか一切教えてもらってなかったです。
問題はそこじゃない。
0547デフォルトの名無しさん
2005/05/01(日) 12:24:15#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はコンパイラじゃないな
0548デフォルトの名無しさん
2005/05/01(日) 12:25:05これが正しい→f(x)=x*x-x*y-y*y
という意味ですね。すみませんでした。
0549デフォルトの名無しさん
2005/05/01(日) 12:26:58もういいよ…
0550デフォルトの名無しさん
2005/05/01(日) 12:31:34丁寧な回答ありがとうございました。
もっと言葉の意味とか、書き方とか
勉強しなければなりませんね。
0551デフォルトの名無しさん
2005/05/01(日) 12:33:05間違ってましたか?
すみませんm(_ _)m
0553537
2005/05/01(日) 12:50:32いや,そこで>536というソリューションな(;´Д`)
>536のrunImpl()がオーバーライドできるから
それでもういいだろ。
# どうしてもrunをオーバーライドしたいなら,メソッド名を変えればいいわけで。
0554デフォルトの名無しさん
2005/05/01(日) 14:11:450555デフォルトの名無しさん
2005/05/01(日) 14:12:52浮動小数点型は、末尾にどうしても誤差が付く。
カウント用の変数を別に用意するのがお勧めだな。
for(i=0;i<=200;i++) {
t=0.1*i
...
}
0556デフォルトの名無しさん
2005/05/01(日) 14:16:50int 関数1(int* 整数1, int* 整数2)
{
rewind(stdin);
return scanf("%d %d", 整数1, 整数2);
}
0557デフォルトの名無しさん
2005/05/01(日) 14:33:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/341.c
アルゴリズム:ピボット選択月ガウス消去法
0558デフォルトの名無しさん
2005/05/01(日) 14:41:030559デフォルトの名無しさん
2005/05/01(日) 14:47:25main() {
int まいやひー, まいやふー;
if ( まいやはっは( &まいやひー, &まいやふー ) == 2)
{
ごりごりここにかく
}
return ららら;
}
0560デフォルトの名無しさん
2005/05/01(日) 14:50:180561デフォルトの名無しさん
2005/05/01(日) 14:53:090562デフォルトの名無しさん
2005/05/01(日) 14:54:170563デフォルトの名無しさん
2005/05/01(日) 14:57:450564デフォルトの名無しさん
2005/05/01(日) 15:01:010565デフォルトの名無しさん
2005/05/01(日) 15:07:25誰か救い珠恵
0566デフォルトの名無しさん
2005/05/01(日) 15:14:24処理
0567デフォルトの名無しさん
2005/05/01(日) 21:35:19[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] その他の制限:なし
どのようなルーチンを組めばよいのでしょうか?
表示部分だけでよいので、ご教授お願いします。
0568524
2005/05/01(日) 22:04:57このような解き方もあるとは知らなかったです。
大変勉強になりました。
ソースを自分なりに理解して、勉強したいと思います。m(_ _)m
0570デフォルトの名無しさん
2005/05/01(日) 22:23:09nの最大値は9で良いのか?
それとも、10以上になった場合の表示方法はAにするとか?
取り合えず、最大値と、二桁以上の振る舞いを例を出して
0571567
2005/05/01(日) 22:34:11レスありがとうございます。
情報が足らずに、追加レス申し訳ないです。
表示方法は0123には限定せず、0, 1, 2, 3でも良いです。
つまり2桁以上の数が含まれても、全通りの並びを表示させたいのです。
0, 10, 9, 12, 7, …のようにです。お願いします。
0572デフォルトの名無しさん
2005/05/01(日) 22:39:04#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;
}
0573572
2005/05/01(日) 22:44:50boolとtrueとfalseをそれぞれintと1と0に書き換えておいてくれ。
0575デフォルトの名無しさん
2005/05/01(日) 23:41:37寧ろ、
#include <stdbool.h>
or
enum {false, true} bool;
0576デフォルトの名無しさん
2005/05/02(月) 00:13:430577デフォルトの名無しさん
2005/05/02(月) 00:14:260578デフォルトの名無しさん
2005/05/02(月) 00:22:52それはありません(笑
自信過剰でなければ、みなさんは私の影響を受けているでしょう。この愚民ども
0579デフォルトの名無しさん
2005/05/02(月) 00:24:290580デフォルトの名無しさん
2005/05/02(月) 00:31:100581デフォルトの名無しさん
2005/05/02(月) 00:33:460582デフォルトの名無しさん
2005/05/02(月) 00:48:000583デフォルトの名無しさん
2005/05/02(月) 00:48:26○未だ
0584デフォルトの名無しさん
2005/05/02(月) 00:54:46書くとすると、どのようなコードになるのでしょうか?
0585デフォルトの名無しさん
2005/05/02(月) 01:00:160587デフォルトの名無しさん
2005/05/02(月) 01:40:53ほい
考え方としては、こんなもん(タイポがあったらスマソ)
現在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;}
0588デフォルトの名無しさん
2005/05/02(月) 01:42:260589デフォルトの名無しさん
2005/05/02(月) 01:53:380590デフォルトの名無しさん
2005/05/02(月) 02:03:28>[3.3] 言語:C
頑張って、Cに直してあげてね
0591デフォルトの名無しさん
2005/05/02(月) 02:16:09で十分だな。
0592デフォルトの名無しさん
2005/05/02(月) 02:25:52絶対返って見にくくなってるだけだと思うのだが
0593デフォルトの名無しさん
2005/05/02(月) 04:06:52第2に引数の文字が最初にみつかったポインタを返しますけど
上に検索する場合はどうしたらいいのですか?
要約しますと、strstrは指定したポインタから下に向かって検索しますが上に向かう場合はうんぬんということです
0594デフォルトの名無しさん
2005/05/02(月) 04:10:00標準にはないから、自分で strrstr とかでも名付けて実装汁
0595デフォルトの名無しさん
2005/05/02(月) 04:28:41このぐらい用意しててほしいもんだ
0596デフォルトの名無しさん
2005/05/02(月) 04:46:00char* 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;
}
こんな簡単だけどな
0597デフォルトの名無しさん
2005/05/02(月) 04:54:03>while (m) {last = m; m = strstr(m + 1, test); }
ここを使わせてもらいます
0598デフォルトの名無しさん
2005/05/02(月) 05:02:06vectorってarray of charとれます?
つまり、
vector <char [256]> name;
ってできます?
あと、このときどうやったら、
char str[256];
cin.getline(str, 256);
この、strをベクター nameにいれれますか?
お願いします。
0599デフォルトの名無しさん
2005/05/02(月) 05:19:49char[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);
とでもやっとけ
つか
俺 し か い な い 予 感 !!
0600デフォルトの名無しさん
2005/05/02(月) 07:38:04int 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);のラインがスキップされてしまうんですが、なぜだかわかりますでしょうか?
0601デフォルトの名無しさん
2005/05/02(月) 10:27:270602デフォルトの名無しさん
2005/05/02(月) 17:36:49[2] 問題文(含コード&リンク):
■■プロセス間通信とシグナル■■
一つのプログラムで二つのプロセスを作成して下さい.
一つ目のプログラムは待機状態にして下さい.
二つ目のプロセスで,ファイルに文字列を書き込み,
書き込みを終了したら一つ目のプロセスにシグナルを送信します.
一つ目のプロセスがシグナルを受信すると,
そのファイルから書き込まれた内容を取得します.
そして,文字列を大文字に変換し出力します.
[3] 環境
[3.1] OS: LINUX
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年5月5日
[5] その他の制限: なし
よろしくお願いします。
0603デフォルトの名無しさん
2005/05/02(月) 21:21:41#include <stdio.h>
int main(void) {
system("echo \"Hello, world\n\ >tr a-z A-Z");
return 0;
}
0604デフォルトの名無しさん
2005/05/02(月) 21:23:040605デフォルトの名無しさん
2005/05/02(月) 22:13:46http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/342.c
0606デフォルトの名無しさん
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文、関数、配列、構造体
と初歩的なので難しい記述はできるだけ避けるようお願い致します。
よろしくお願いします
0607デフォルトの名無しさん
2005/05/02(月) 23:29:15開始位置が 最初のポインタ-テスト文字列長 でテスト
あとは1文字づつ遡りながら
ところで、遡った検索はいつ止めるんだ?w
0608デフォルトの名無しさん
2005/05/02(月) 23:40:30strrの命令に従うのなら、受け渡すポインタは文字列の始まりで
検索開始位置を'\0'まで進めてから、遡って検索を始め
終了位置は、受け渡されたポインタでOK
0609デフォルトの名無しさん
2005/05/02(月) 23:55:15で、ユーザーに入力させて何がしたいのだ?
0611607
2005/05/03(火) 00:02:00>593 からはそのようなことは読み取れません
っーか593本人が答え!
0612デフォルトの名無しさん
2005/05/03(火) 00:07:12>strstr関数は第1引数の文字列のポインタから末尾までを検索して
>第2に引数の文字が最初にみつかったポインタを返しますけど
strchr?
0613デフォルトの名無しさん
2005/05/03(火) 00:54:34たしかにC++です。
何がしたいのか・・・多分、キーボードから入力し、それを表示させるだけかと思います
構造体に関数を使う練習です
よろしくお願いします。
0614609
2005/05/03(火) 01:24:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/343.cpp
0615デフォルトの名無しさん
2005/05/03(火) 01:39:310616デフォルトの名無しさん
2005/05/03(火) 02:22:32一様乱数をただ重ねるだけでいいの?0を平均とした正規乱数の方がいいんじゃないの?
0617デフォルトの名無しさん
2005/05/03(火) 08:21:30C++
[2] 問題文(含コード&リンク):
キーボードから実数を一つ入力し、小数点以下第2位で四捨五入した数値を表示するプログラムを作成しなさい。作成したプログラムが、正負両方の入力に対して正しい結果を与えることを確認しなさい。
[3] 環境
[3.1] OS:ME以上
[3.2] コンパイラ(バージョン): visual c++
[3.3] 言語:C++
[4] 期限:5月5日まで
[5] その他の制限: コンソールアプリケーション表示で
0618デフォルトの名無しさん
2005/05/03(火) 09:19:010619デフォルトの名無しさん
2005/05/03(火) 09:36:180620human 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] その他の制限:
問題文少し
「ルール」
人間とゾンビが自分の半径以内を探索する。
人間が範囲内にゾンビを見つけたら、スピードを加速して逃げる。
ゾンビが範囲以内に人間を見つけたら、スピードを加速して、人間をつかまえる。
ただし、人間のスピード>ゾンビのスピードなので、食う食われるはなし。
本当、マジでお願いします。
0621デフォルトの名無しさん
2005/05/03(火) 13:35:52やってないからただ言うだけだけど、
double tempに読み取って百倍して、int xにいれる。
tempを十倍したものをint yにいれる。
if(x%10>=5){
y++;
}
double answer = y/10;
表示で少数第一位まで表示する仕方は知ってるよね?
こうやったらできると思う。
0622デフォルトの名無しさん
2005/05/03(火) 13:37:09やってからいえやー糞やろ?
0623デフォルトの名無しさん
2005/05/03(火) 20:06:10ありがとうございました
0624デフォルトの名無しさん
2005/05/03(火) 20:07:49wwwwwwwwwうぇwwwwうぇwwwwwwww
wwwうはっwうぇおkwwwwwwwwwwwwwww
wwwうぇおkwwwwwwっっっっうはっwwwwww
おkうぇwwwwwwうぇwwwwwwwwwwww
0625デフォルトの名無しさん
2005/05/03(火) 20:20:55悲惨なコードですが…
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=23741
0626デフォルトの名無しさん
2005/05/03(火) 21:14:46double foo;
if (scanf("%lf", & foo) == 1) {
printf("%.1f\n", foo);
}
0627デフォルトの名無しさん
2005/05/03(火) 21:31:30なんだお前,「w」とか「うは」とか
あれか!新手のブレインファックか!
0628494
2005/05/03(火) 22:27:20onlineの条件がどれも合わないようなので・・
0629デフォルトの名無しさん
2005/05/03(火) 23:05:35>>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)?
に汁
0630デフォルトの名無しさん
2005/05/04(水) 00:39:35[2] 問題文: 長さlの配列の内容を要素n個分後ろにずらす関数.
(n個目までの要素と、n個目以降の要素を入れ替える関数)
[3] 環境
[3.1] OS: リナックス
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:来週の月曜日
[5] その他 なし
配列が苦手で苦戦しています。
皆様の知恵をお貸しください。
0631デフォルトの名無しさん
2005/05/04(水) 00:42:50[A][B] のブロックに分けてそれぞれを反転
→[AR][BR] としたら全体を反転
→[B][A]
0632デフォルトの名無しさん
2005/05/04(水) 00:48:350123456789:添字
abcdefghkm:中身
が
(1) hkmabcdefg(後ろのが前にくる)か
(2) ***abcdefg(*は0か特定の何か)か
とかあるけど(1)でいいかな?
あと l はコンパイル時に固定でいいですか?
0633デフォルトの名無しさん
2005/05/04(水) 00:51:42(1)で
>あと l はコンパイル時に固定でいいですか?
ダメ
0634デフォルトの名無しさん
2005/05/04(水) 01:07:53#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;}
0635デフォルトの名無しさん
2005/05/04(水) 01:10:20なにゆえ l*2 ?
0637デフォルトの名無しさん
2005/05/04(水) 01:20:25中身を2度コピーし必要な所から切り取るため
(考えるのが面倒だったから)
>l=10 n=3のとき
>0123456789:添字
>abcdefghkm:中身
を例にすると、
abcdefghkmabcdefghkm(一時的に二重にコピーする)
10-3番目のところから、10文字切り取る
hkmabcdefg
0638デフォルトの名無しさん
2005/05/04(水) 01:24:20本当に眠くて、考える頭がない…
0639デフォルトの名無しさん
2005/05/04(水) 01:25:350640デフォルトの名無しさん
2005/05/04(水) 01:37:41俺は>>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]));
}
0641デフォルトの名無しさん
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");
}
0642デフォルトの名無しさん
2005/05/04(水) 02:05:27パンツが破れてるので、しまえまへん
0643human vs zombie
2005/05/04(水) 03:53:50>>620
どなたか助けてください。
お願いします。
ヒント等でもいいです。
お願いします!
0644デフォルトの名無しさん
2005/05/04(水) 10:19:16わからん
0645デフォルトの名無しさん
2005/05/04(水) 10:50:00そう言う分量の多いものは、ただ助けてと書いても読んだ方は何を助ければいいのか判らないし
途中までのコードを読んで残りを作るのも全部作るのも面倒。
要点を絞ってどこがどう判らないと書いてくれると調べてみる気になるのだが。
0647human vs zombie
2005/05/04(水) 11:43:15それはさておき、
human zombieのクラス(たぶんクラス)がどんな風になるか、
想像つかないのです。
教えて貰っていいですか?
0648デフォルトの名無しさん
2005/05/04(水) 13:20:11お前のグチャグチャな(しかも間違った)ソースを理解するのには、
少なくとも2週間はかかる。
0649デフォルトの名無しさん
2005/05/04(水) 13:30:270650デフォルトの名無しさん
2005/05/04(水) 13:40:58どんな汚いソースでも、あの程度の行数で2週間なんて…お前クビ
0651デフォルトの名無しさん
2005/05/04(水) 13:43:53奴の質問に答えてから言えや
0652デフォルトの名無しさん
2005/05/04(水) 14:08:45俺別にクビでいいよーハハハ
金のならないことは言うまでもなく、ほんのちょっとの自己満足の為になんでめんどくさいことしなきゃならんのだwww
0653デフォルトの名無しさん
2005/05/04(水) 14:16:12それならいっそのことレスしなきゃいいのに。顔真っ赤だな。
0654デフォルトの名無しさん
2005/05/04(水) 14:17:40馬鹿を相手にするなよバカ。
0655デフォルトの名無しさん
2005/05/04(水) 14:20:29俺には君の方が真っ赤に見える
0656デフォルトの名無しさん
2005/05/04(水) 14:32:58[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日
初歩的な質問ですがお願いします。
0657デフォルトの名無しさん
2005/05/04(水) 14:37:31#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;
}
0658デフォルトの名無しさん
2005/05/04(水) 14:46:00迅速な回答ありがとうございましたm(__)m
0659デフォルトの名無しさん
2005/05/04(水) 14:56:57#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;
}
0660デフォルトの名無しさん
2005/05/04(水) 16:18:16[2] 問題文(含コード&リンク): ベッセル関数及びノイマン関数の第0次から第5次まで図時せよ。
[3] 環境
[3.1] OS: winxp
[3.2] コンパイラ(バージョン): 何でも。
[3.3] 言語:Cでお願いします。
[4] 期限:2005年05月05日12時まで
[5] その他の制限:
本当に全く何を言っているのかもわからりません、どうしてもご教授いただきたくここへきました、大変困っていますよろしくお願い致します。
0661デフォルトの名無しさん
2005/05/04(水) 16:24:43> 図時せよ。
スレ違い
0662デフォルトの名無しさん
2005/05/04(水) 16:38:16[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] その他の制限:特にありません。何分素人です、お願いします教えてください。
0663デフォルトの名無しさん
2005/05/04(水) 16:55:03include <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;
}
0664デフォルトの名無しさん
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);
0665デフォルトの名無しさん
2005/05/04(水) 17:02:12662さんありがとうございます!
早速ためしてみます!
0666デフォルトの名無しさん
2005/05/04(水) 17:03:44663の立場は...
0667660
2005/05/04(水) 17:05:14お願い致します。
0668デフォルトの名無しさん
2005/05/04(水) 17:06:47Cで、しかもWindowsで図示するのはすごくメンドイ。
0669デフォルトの名無しさん
2005/05/04(水) 17:07:06じゃ、どういう風に図示すればいいのか。
何か指定のグラフィックライブラリがあるのならそれを示せ。
0671660
2005/05/04(水) 17:10:41指定のグラフィックライブラリ?
全く何も知識がないアホなので全く分かりません。すいません、
tempre?
なんかこんな感じの名前のソフトで書けといわれたことしかわかりません。
何もわからなくてすいません、女子大では誰に聞いてもわからないのです。
0672デフォルトの名無しさん
2005/05/04(水) 17:13:50スレ違い。
0673デフォルトの名無しさん
2005/05/04(水) 18:43:36「プログラミング言語」なんて単位を取ろうなんて気を起こしたのか・・・
それがわからないのは俺が高卒だからかな?
0674デフォルトの名無しさん
2005/05/04(水) 18:53:45と一応大卒の俺が言ってみる
0675デフォルトの名無しさん
2005/05/04(水) 18:55:58おっぱいをうp出来るくらいは出来るだろう
0676デフォルトの名無しさん
2005/05/04(水) 19:01:48スレ違い。オナテク板池
0677デフォルトの名無しさん
2005/05/04(水) 19:25:35[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(土)です。
プログラム習ってないのに習った人と同じ授業だからって宿題出されて泣きそうです
0678デフォルトの名無しさん
2005/05/04(水) 19:39:12> F(Y)=1-eの(-λX)乗の分布関数を使い、Y=-1/λlog(1-X)
Y=1-{eの(-λX)乗}
を展開したら
X=-1/λ・log(1-Y)
って事?
とにかく判りにくいので問題文を丸写ししてください。
(そりゃぁ、分布関数を習っている人はTとかすぐに判るんでしょうけど。)
0679デフォルトの名無しさん
2005/05/04(水) 21:30:330680デフォルトの名無しさん
2005/05/04(水) 21:54:110681デフォルトの名無しさん
2005/05/04(水) 22:09:58とりあえず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
0682デフォルトの名無しさん
2005/05/04(水) 22:42:15問題はヒント〜依然までです。一様乱数を使うと聞きました!Tはおそらく時間でλをギブンしてTを入れると到着回数が出るらしいのですが…
0683デフォルトの名無しさん
2005/05/04(水) 23:12:33この式のどこに t を代入しろと?
ここで質問する時は(結果的に過剰になろうとも)プログラム以外の知識は無いと思うくらいの条件を提示して欲しい。
あと関係ないが、λを given するはおかしい。
0684デフォルトの名無しさん
2005/05/05(木) 00:01:220685683
2005/05/05(木) 00:14:37「分布関数」「N(0,t)」の意味・定義式、それと F(Y) や Y=… との関係
これについて答えてくれ。今のままではどこに乱数を使うのかさえさっぱりわからん。
あと「λを given する」は、文法的に誤っていると言いたかっただけなのだが。
0686デフォルトの名無しさん
2005/05/05(木) 00:54:44Tの値をscanさせる。
randで乱数発生させる。
Yとλは配列を使う。
関数はmainとは別にユーザー関数で定義してmainにポインタ使って呼び出す。
出力もfor文と配列使って一括表示させる。
0687683
2005/05/05(木) 00:58:44http://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つについてどこに着いたかを表示する。
0688683
2005/05/05(木) 01:06:49統計学なんていうからには Mersenne Twister は必須(でないにしろ、標準の rand() はありえない)だろうから
MTを使ってる。
仕様が違ってる様だったらその旨書き込んでくれ。できればどのような出力が欲しいかを教えて欲しい。
あとは定数の意味。(見て分かるとは思うが、日本語を入力できない所で書いてそのままアップしちまった)
NUBMER…シミュレートする物体の総数
LAMBDA…λ
SCALE…統計を取る一つ一つの幅
COUNTNUMBER…統計を取る枠の数-1。 最後の枠には枠外のもの全てが含まれる。
0689528
2005/05/05(木) 01:15:53お答えいただきありがとうございました。
が、しかし入力はscanfで入力したいのですがソースが習っていないようなもので複雑すぎてわかりませんでした。
是非お助けお願いします。
簡単な文の組み合わせで初心者向けに作れるようにお願いします
0690デフォルトの名無しさん
2005/05/05(木) 01:26:05ここからX:[0,1](←数直線上の点?)上の一様乱数を発生させます。
上の分布関数にX=F(Y)と代入すると、X=1-e(-λY)乗になります。これを変形すると、Y=の式になりここから乱数を発生させる(?)
T=100とか入れてT秒までに何カウントあったか?というプログラムらしいです。
親切にどうもありがとうございます!こんな親切にしてもらい感激です。
0691デフォルトの名無しさん
2005/05/05(木) 03:18:29どうにもこうにもわからないが
まず直線か2次関数を図示するサンプルを書いて >>1 のアップローダにアップしてほしい
そこから弄って問題の関数のグラフを図示するソース書ける方がでるかもしれません。
テキスト処理、小規模ファイル処理、数値計算と違ってグラフィックはライブラリ他で方法が
異なるのでこちらで何か適当につくっても出題者が納得する解答でない可能性が高い。
最悪何も提示されない場合>>656の様なテキストベースのグラフでよければなんとかしてくれる
方も出てくると思います。
0692human vs zombie
2005/05/05(木) 07:43:53zipファイルの中のコードに間違いはありません。
それをコンパイルすると、zipファイルの中のP2-W32-Starterと同じものが出来上がります。
それは単にランダムに動く点を作っているだけです。
それにhumanとzombieのクラスを加えて、問題文のような動きをさせればいいのですが…。
0693human vs zombie
2005/05/05(木) 07:44:28>>620
0694デフォルトの名無しさん
2005/05/05(木) 08:35:28vector<死骸>,vector<人間>作って
static関数で範囲内にいるかの判定関数作って
メンバ関数のsimulateで判定関数呼び出して
相応の処理すればいいんじゃない
まあ問題の解説の6がよくわからなかったから
放置ですが
あとMainの方はいじらなくていいとおもうよ
0695デフォルトの名無しさん
2005/05/05(木) 08:40:13そういえばこれだとかなり効率悪そうだな…
判定で1000*1000か…
だからMasterListなんか作るのかな
0696デフォルトの名無しさん
2005/05/05(木) 09:34:55human も zonbie もDemoPointから派生させるだけでいいんじゃないのかい?
速度だけvirtual setvelocity()みたいな仮想関数にしてhuman と zonbieでそれぞれ速度を変えるとかした。
描画関数書き足したら実際に(独立しては)動いてる。
で、これの本題って1000×1000の計算をopenGLを利用して計算するのてこと?
0697デフォルトの名無しさん
2005/05/05(木) 09:48:29あとDemoPoint::simulate()の中でx,yが変化してないからいじった。この辺よく判らなかった。
0698デフォルトの名無しさん
2005/05/05(木) 11:46:46int 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秒までに何カウントあったか?というプログラムらしいです。
「何が」何カウントあったかを数えるのかが分からん。
0699デフォルトの名無しさん
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の端に行ったとき、
半径がその現在存在してるリストを超えて探索しなければならないことです。
0700デフォルトの名無しさん
2005/05/05(木) 12:33:19http://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のクラスを作った後、
それが機能しないことに気づきました。
わずらわしければ、とってもかまいません。
自分でも、現在進行形でやっていて、この後も、自分でもずっとやっていますが、
明日までに出来るかどうか分かりません。
よろしくお願いします。
0701デフォルトの名無しさん
2005/05/05(木) 12:37:02人間1000人と、ゾンビ1000人、合計2000人をコントロールするのです。
>>DemoPoint::simulate()
DemoPointは、単なる最初のスターターで、
GLUTが正しくこの課題にそって動くかどうかテストするものです。
最初に、1000人と1000人を作るとき、これがヒントになります。
でも、human class zombie classを作ってしまえば、それは必要はないかなって
思うんですけど、どうでしょうか・・・。
0702human vs zombie
2005/05/05(木) 12:52:55yappa kou kana...
http://www.geocities.com/anycplus/list.htm
0703human vs zombie
2005/05/05(木) 14:03:45http://www.geocities.com/anycplus/List.htm
連続投稿すいません。
0704デフォルトの名無しさん
2005/05/05(木) 14:34:13DemoPoint::simulateをvirtualにして、継承したHumanとZombieを作った。
コントラクタで色を変えて、みるとうまくいったが、
simulateの方の挙動がうまくいかない。難しいな。
あと、見た限りだとメモリの掃除してないな。
0705human vs zombie
2005/05/05(木) 14:49:30ただアシスタントがこうすれば良いといっただけなので、
もし使わないほうが楽なら、それでも良いのです。
でも、存在してる関数などを上手く使ってとのことです。
hardcodeは作るなとのこと。
でも、自分にとっては、どこからがhardなのかも・・・・。
0706デフォルトの名無しさん
2005/05/05(木) 15:13:520707デフォルトの名無しさん
2005/05/05(木) 15:26:10すまんが俺には手におえん。
誰か出来るヤシいないのか?
0708デフォルトの名無しさん
2005/05/05(木) 15:57:04>>698
(´・ω・`) 無視されてる・・・
0709human vs zombie
2005/05/05(木) 16:22:52アシスタントに取り付いて、聞いたところ、classよりstructの方が良いかもとのこと。
それで、これをゲットしました。
0710デフォルトの名無しさん
2005/05/05(木) 16:24:22す、すいません(´・ω・`)書きこみしてる時にかぶっちゃった…Y=-1/λlogXなら1入っても大丈夫ですかね?プログラムまったくやったことないので続きもお願いしたいです(´・ω・`)おそらくYのカウント数がほしいのですが
0711デフォルトの名無しさん
2005/05/05(木) 16:45:08logX を計算するときに 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 における位置が確定しているので、その分布統計を取る。
という流れで作ってた。判断ミス・誤りがあれば、どこがどう間違っているのかを伝えて欲しい。
これまでのやりとりだと何をやりたいのかがさっぱり分からん。
プログラムやったことあるとか無いとか関係なく、色んな点で説明不足すぎる。
0712デフォルトの名無しさん
2005/05/05(木) 16:56:27× } while(scanf("%d", &t) != 1 && t > 0);
○ } while(scanf("%d", &t) != 1 || t <= 0);
ついでに更なる説明要求
>T=100とか入れてT秒までに何カウントあったか?というプログラムらしいです。
・時間は連続的に流れることが想定されているのか、整数秒毎に状態が遷移することが想定されているのか。
・しつこいようだけどもう一度。「時間とX,Yの式との関係はどうなっているのか」
0713human vs zombie
2005/05/05(木) 17:02:20http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/356.cpp
0714デフォルトの名無しさん
2005/05/05(木) 17:10:230715デフォルトの名無しさん
2005/05/05(木) 17:27:00すいません…明日先生に詳しく問題聞いてきます!
0716デフォルトの名無しさん
2005/05/05(木) 17:30:270717デフォルトの名無しさん
2005/05/05(木) 23:35:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/357.txt
判定と逃げる方向とかもろもろ直したら動く気がする
やってて飽きた('A`)
0718デフォルトの名無しさん
2005/05/05(木) 23:50:43[2] 問題文(含コード&リンク):
3つの入力された数字の中から最大の数を出力しなさい
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン): ?
[3.3] 言語:C
[4] 期限:2005年5月8日まで
[5] その他の制限:
まだまだ勉強途中であまり理解できませんでした
回答例の方お願いいたします
0719デフォルトの名無しさん
2005/05/05(木) 23:52:21int max = num1;
if(max<num2) max=num2;
if(max<num3) max=num3;
0720デフォルトの名無しさん
2005/05/05(木) 23:52:31とりあえずintのキャストをfloorに
0721720
2005/05/05(木) 23:54:01717です
邪魔してスマソ
0722デフォルトの名無しさん
2005/05/05(木) 23:55:02アホすぎ
0723デフォルトの名無しさん
2005/05/06(金) 00:05:22#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]));
}
0724デフォルトの名無しさん
2005/05/06(金) 00:15:23ところで、このプログラミングを
Windows上で動かす方法ってありますか?
0725デフォルトの名無しさん
2005/05/06(金) 00:16:460726デフォルトの名無しさん
2005/05/06(金) 00:16:49コンソール、って事ではなくて?
0727デフォルトの名無しさん
2005/05/06(金) 00:19:190728デフォルトの名無しさん
2005/05/06(金) 00:19:28なので、同じようにWindows上でもやりたいのですが、、、
0729デフォルトの名無しさん
2005/05/06(金) 00:22:26コンパイラを入れていればできるし、入れていないならば
入れれば出来る。入れたいならば次のスレの冒頭を参照。
Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/
0730デフォルトの名無しさん
2005/05/06(金) 00:24:280731デフォルトの名無しさん
2005/05/06(金) 00:25:040732デフォルトの名無しさん
2005/05/06(金) 00:26:19ユーザーにやさしいデスクトップ環境を、すべてフリーソフトウェアで作ろう、
というのが GNOME の目的です。GNOME は GNU プロジェクトの一部で、また、
オープンソース(tm)の定義を満たすフリーソフトウェアです。このデスクトップ
環境では、ちょっとしたユーティリティから、おおがかりなアプリケーションまで
統一感のあるルック&フィールを持っています。GNOME 準拠のアプリケーションは
GTK+ を GUI ツールキットとして採用しています。
0733689
2005/05/06(金) 01:12:28なぜtがでてくるのかわかりません。あと数字が10個しか入力できないのにそのカウントが見当たりません。
関数の定義の部分が複雑すぎて編集しようがありません。
HELP!!
0734デフォルトの名無しさん
2005/05/06(金) 01:27:11そーとは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]);
0735デフォルトの名無しさん
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にサンクス。
0736734訂正
2005/05/06(金) 02:23:14int 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
0737human vs zombie
2005/05/06(金) 02:28:34ありがとうございます。
717さんのコードを見ているんですが、
どこをどう直したらいいのか、さっぱり。。。
もしだいたいどこを直せばいいのか分かっていたら、
教えてもらっていいですか?
0739デフォルトの名無しさん
2005/05/06(金) 02:35:49教えてもわからんだろう。
0740human vs zombie
2005/05/06(金) 02:43:09そうなのかぁ・・・・。はぁ。
今、717がくれたコードを解読してるんですが、
あと数時間で締め切りなんです。
自分で出来る限りやろうと思ってるのですが。。。
0741デフォルトの名無しさん
2005/05/06(金) 03:35:54アシスタントとか付いてるっていうし
0742デフォルトの名無しさん
2005/05/06(金) 03:44:40クラスには教える教授と採点とかそのクラスの雑用をするアシスタント(大学院生)
がいます。
0743デフォルトの名無しさん
2005/05/06(金) 04:33:56おkっうぇwwwwwwwwwwwwっうぇwwwwww
wwwwwwうぇwwwwwwwwwwwwうはっ
っっwwwwwwwwwwwwっうぇwwwwうはっ
うはっっっっwwwwwwwwwwwwwうぇうぇw
www
0744デフォルトの名無しさん
2005/05/06(金) 04:59:33新手のビールス?
0745デフォルトの名無しさん
2005/05/06(金) 05:41:53★山田ウィルス対策スレ2
http://qb5.2ch.net/test/read.cgi/operate/1114695735/
0746デフォルトの名無しさん
2005/05/06(金) 07:38:460747デフォルトの名無しさん
2005/05/06(金) 09:39:40typedef std::list HumanPtrs;
こんなこと可能だったのか?
0748human vs zombie
2005/05/06(金) 10:02:21可能かどうかは、たぶん可能かと。
アシスタントの人は、宿題は一通りプログラムし終えて、
我々の宿題を採点するので・・・。
アシスタントのプログラムは、それで動いたんだと思う。
まぁ、ただstd::listを使っても良いと思いますが・・・。
とにかく動かないことには始まらないというのが、教授のモット−なんです。
これ、なんとしてでも完成させたいというか、
自分が無理なら、そのコードを見て勉強したいんですよね・・・。
0749デフォルトの名無しさん
2005/05/06(金) 10:14:580750デフォルトの名無しさん
2005/05/06(金) 10:15:51typedef std::list<Human> HumanPtrs;のようにテンプレート引数を指定しないと駄目だろ。
0751デフォルトの名無しさん
2005/05/06(金) 10:31:54[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] 期限:本日中
よろしくお願いします。
0752デフォルトの名無しさん
2005/05/06(金) 12:04:37こういうのも聞かないとわからないの?
0753メモリダイヤルです& ◆cl6EOCayao
2005/05/06(金) 12:13:06前回は色々ありがとうございました。
ここまではできたんですが、これ以上どうにもなりません。
課題の条件と一致できない部分が多々あるので、ご教授下さい。
課題の内容など詳しい事は"メモリダイヤル2"の名前で
以下URLにアプロダしてますので、わかる方よろしくお願いします。
0754デフォルトの名無しさん
2005/05/06(金) 12:30:50ありがとうございます!
0755& ◆2xA98CT86Y
2005/05/06(金) 12:38:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
よろしくお願いします。
0756メモリダイヤルです
2005/05/06(金) 12:40:36http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
メモリダイヤルです。よろしくお願いします。
0757デフォルトの名無しさん
2005/05/06(金) 12:55:54wwwwwwwwwwwwwww
っうぇうはっwww
wwwwwwwwwwwwっっおkwwwっうぇwwwwwwwwwwww
おkwwwwwwwwwwwwwwwwww
0758デフォルトの名無しさん
2005/05/06(金) 13:37:06もしいたら、質問したいです。
0759デフォルトの名無しさん
2005/05/06(金) 14:42:53おまえ日本人なのか?
英語で質問するときあるし
毎回マルチしてるし
ハッキリ言って害悪だから。逝ってちょうだい。
0760デフォルトの名無しさん
2005/05/06(金) 14:43:35#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; }
0761デフォルトの名無しさん
2005/05/06(金) 14:44:00int 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;
}
眠いからこれで勘弁して。
0762デフォルトの名無しさん
2005/05/06(金) 15:01:05a,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時間くらいかかるヘタレなので
あとはまかすた
0763デフォルトの名無しさん
2005/05/06(金) 15:11:01何言ってんの、はげ。
しらねーなら、黙ってなさいな。
0764デフォルトの名無しさん
2005/05/06(金) 15:21:32> 何言ってんの
ってマジで日本語しらんのか?
質問の仕方知らないなら質問するなって
つうかマルチ先で答えてくれてる人いるじゃん
そっちの相手してあげたら?
日本語分からない外人なんだか
英語が上手な基地外日本人なんだか
おまえどっちだ?
0765デフォルトの名無しさん
2005/05/06(金) 15:30:40出来るでしょうか?
0766デフォルトの名無しさん
2005/05/06(金) 15:33:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/359.txt
だいぶ良くなったかも…
0767デフォルトの名無しさん
2005/05/06(金) 15:34:49ヒント:ランダム
0768デフォルトの名無しさん
2005/05/06(金) 15:41:57[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
0769デフォルトの名無しさん
2005/05/06(金) 16:01:41#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;
}
0770[1/2]
2005/05/06(金) 16:32:25#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;
}
0771[2/2]
2005/05/06(金) 16:33:18{
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;
}
0772770&771
2005/05/06(金) 16:37:260773デフォルトの名無しさん
2005/05/06(金) 16:37:320774デフォルトの名無しさん
2005/05/06(金) 16:42:56どういうところがまずいのかご教授ください。おねがいします。
0775デフォルトの名無しさん
2005/05/06(金) 16:53:02プロなら失格だwwwwwww
0776≠773
2005/05/06(金) 16:53:42一度、コンパイラの警告レベルを引き上げてコンパイルして味噌。
それでも理解できなかったら初心者スレ辺りで聞いてくれ。
0777デフォルトの名無しさん
2005/05/06(金) 16:54:080779デフォルトの名無しさん
2005/05/06(金) 16:55:57ああ、なるほど。
以後気をつけますよ。
よく考えたら、自分で改造してもらったほうが上達するかな。
今度から省力しつつ書きます。かけたらね。
0780デフォルトの名無しさん
2005/05/06(金) 17:01:430781デフォルトの名無しさん
2005/05/06(金) 17:04:00>>776
多少のwarningはなんとか!!
コメントは、確かにわかりにくいかもしれないです。
きをつけます。はい。
0782デフォルトの名無しさん
2005/05/06(金) 17:08:00>>780
コードだけでわかってもらえるような気がしなかったからつけてみました。
二度手間ってことは、喜んでいいんしょうか・・・。
馬鹿ですいません。
0783デフォルトの名無しさん
2005/05/06(金) 17:08:30コンパイラは警告しか返さないが、それに甘えていいレベルの間違いじゃない。
0784デフォルトの名無しさん
2005/05/06(金) 17:09:29大丈夫、コメントが無駄なだけで、ソースが判り易いと言う訳じゃないから。
0785デフォルトの名無しさん
2005/05/06(金) 17:24:47うーん。どこが間違ってるかちょっとわからない。(コメントは確かにCでは不手際だったけど、
見た感じメモリリークもしてないし、そこら辺は気をつけたつもりなんだけど、どこだろ・・・。
>>784
精進します。
0786デフォルトの名無しさん
2005/05/06(金) 17:31:06[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);
}
としたのですが、次のようなエラーが出ます。
0787つづき
2005/05/06(金) 17:31:37kadai26.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
どこを改善したらよいか教えてください。
0788デフォルトの名無しさん
2005/05/06(金) 17:37:04defineディレクティブは改行までが有効。
そこで、見掛け上改行したい場合は改行をエスケープする必要がある。
つまり、
#define swap(type, a, b){\
type a, b, c;\
...
とする必要がある。
#勿論、最後はエスケープしちゃダメよ。
0789デフォルトの名無しさん
2005/05/06(金) 17:37:170790デフォルトの名無しさん
2005/05/06(金) 17:40:25#define swap(type, a, b) type a, b, c;c = a;a = b;b = c;
これで通らなかったら、知らない。
0791デフォルトの名無しさん
2005/05/06(金) 17:42:03直したら通りました。ありがとうございます。
0792デフォルトの名無しさん
2005/05/06(金) 17:44:13ほかにも色々あるのに通ったのかYO!!
0793デフォルトの名無しさん
2005/05/06(金) 17:51:03strdup()は非標準。
引数を取らない関数はchar *StrGetFromConsole(void)のようにvoid書け。(もしC++だったら要らないが)
Reverseはintを返す意味がわからない。voidでいいだろ。
int main(void)でも問題ない。
main()内のmalloc()の引数はsizeof (char *) * numだろ。mallocの戻り値のキャストは不要。
その直後のmemsetは不要。
そもそも問題に文字列3つとあるのだからchar *bufs[MAX_COUNT];で十分。
0794デフォルトの名無しさん
2005/05/06(金) 17:56:27コンパイルが通っただけだろ。
あと何箇所かなおさないと期待した動作はしないぞ。
0795デフォルトの名無しさん
2005/05/06(金) 17:57:51[2] 問題文(含コード&リンク):
(1)標準入力に現れた数字の出現回数を表示するプログラムを作成せよ.
(2)標準入力に現れた行数をカウントするプログラムを作成せよ.
(3)標準入力に現れた行数をカウントするプログラムを作成せよ.
[3] 環境
[3.1] OS:win xp
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C言語
[4] 期限 :特になし
[5] その他の制限:
標準入力の定義が理解できず戸惑ってます。お願いします。
0796785
2005/05/06(金) 18:17:36これは知らなかった。すいません。勉強になります。
>>main()内のmalloc()の引数はsizeof (char *) * numだろ。mallocの戻り値のキャストは不要。
多分どっちも4を返すと思うんですが。これはちょっとわからない。型が違うのはちょっと怖いな。
>>その直後のmemsetは不要。
これは、メモリスマッシュ(だっけ??)防止のための保険の意味合いが強いです。
無くても動くには動きますね。コーディングスタイルというところでしょうか。
>>そもそも問題に文字列3つとあるのだからchar *bufs[MAX_COUNT];で十分。
これは納得。*bufs[MAX_COUNT];で良いかはわかりませんけど。
0797デフォルトの名無しさん
2005/05/06(金) 18:22:59int *p = malloc(sizeof (int) * N);なんだからchar **p = malloc(sizeof (char *) * N);だろ。
あと、calloc()使えば0クリア済みのメモリが得られる。改めてmemsetする必要がない。
0798デフォルトの名無しさん
2005/05/06(金) 18:29:30Cでは、stdio.hに定義されていて、標準入力はstdin。
その実態はFILE*なので、読み込み関係のf系関数は使える。
書き込めるかは知らない。
概念としては、ストリームというもので、ある種の流れを制御することを目的としている。
知らなくても使えるけどね。
0799デフォルトの名無しさん
2005/05/06(金) 18:37:11あ!そうだった。盲目になってました。ごめんなさい。
callocのことも忘れてた。
勉強になりました。ありがとう。
0800デフォルトの名無しさん
2005/05/06(金) 18:43:35#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 );
}
0801デフォルトの名無しさん
2005/05/06(金) 19:20:24ファイル末尾に改行がないと、行数を間違う。
で、fgetc()を使わないのは何故?
0802デフォルトの名無しさん
2005/05/06(金) 19:32:380804デフォルトの名無しさん
2005/05/06(金) 19:49:58うわ、見逃してました。>>800さん、どーもー。
後は自分で考えてみます。
0805デフォルトの名無しさん
2005/05/06(金) 20:33:35#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;
}
0806デフォルトの名無しさん
2005/05/07(土) 01:47:44>(2)標準入力に現れた行数をカウントするプログラムを作成せよ.
>(3)標準入力に現れた行数をカウントするプログラムを作成せよ.
何で誰も突っ込まないの…
0807デフォルトの名無しさん
2005/05/07(土) 01:54:450808>>677の相手をしていた人
2005/05/07(土) 04:47:13なんとなく出題内容は読めた。ただ上記のようにまだ寝てないんで、
起きたらさっさと作る。ついでにあんたの駄目出しもまだ残ってるんで付け加えるよ。
正午頃までには終わる…と思う。
…一応訊いておくが、使用する関数に制限は無いな?「入力には scanf を使え」みたいなやつ。
0809メモリダイヤル2です
2005/05/07(土) 05:14:58どなたか、マジでお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
上記URLに当方が途中まで作成したソースがあります。
作り直していただいてもかまわないので。。。
使用文字など、#defineで定義できたりしないですよね??
0810デフォルトの名無しさん
2005/05/07(土) 05:31:49おkうぇwうはっうはっっうはっwうはっwwwwwwwwwwww
おkwwwwwwっうはっうはっうはっ
おkwwwwwwおkうぇwwwwwwwwwwww
おkおkおkwwwwwwwwwwwwwおkおkおk
うぇ
0811人間とゾンビ
2005/05/07(土) 11:46:07ありがとうございます。
>>http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/359.txt
これ、いろいろ試したのですが、STLのListからAssertが出るんですけど?
でませんか?
0812808
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;
}
0813デフォルトの名無しさん
2005/05/07(土) 15:26:30[2] 問題文(含コード&リンク): 2次方程式を解くプログラムを作成せよ。
プログラムの仕様:1、浮動小数点a,b,cをキーボードより入力する。
2、解の公式を利用し計算、出力せよ。
また解の種類(実数解、重解、虚数解)がわかるようにすること。
3、計算結果が正しいかどうかを判定できるように検算部分を追加せよ。
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限: 特になし。
普通に解の公式に代入して計算させると計算結果が小数で表示されるので
割り切れるときはいいのですが検算に影響がでてうまく行きません。
アドバイスなどよろしくお願いします。
0814デフォルトの名無しさん
2005/05/07(土) 15:38:13こんなかな?
if (判別式 == 重解ふくむ実数解)
検算する = true;
いろいろ計算;
if (検算する)
if ((f(x) - y) < 許容範囲) {
だいたい、おk;
誤差表示;
} else
だめです;
0815デフォルトの名無しさん
2005/05/07(土) 15:40:57ありがとうございます!(・∀・)
0816デフォルトの名無しさん
2005/05/07(土) 15:44:03(3)の仕様があいまいだな
顧客として失格帰れww
0817デフォルトの名無しさん
2005/05/07(土) 15:47:14数字がかぶらないように別々にするにはどうしたらよいですか?
0818デフォルトの名無しさん
2005/05/07(土) 15:49:350819デフォルトの名無しさん
2005/05/07(土) 15:59:35ついでに聞きたいのですが、T=に値を入れたらカウントが表示されますか?Tの文字がないもので不安になってしまいました。
0820デフォルトの名無しさん
2005/05/07(土) 16:02:35100個の配列を作り、そこに1〜100の数字を入れておいて、
添え字を乱数で発生して50個選ぶ。
一度選んだ数字はゼロなどにしておき、これを選んだら無視して
再度選べばよい。
もしくは100個の配列をランダムシャッフルして先頭から50個
取ってもよい。
0821813
2005/05/07(土) 16:10:03レスありがとうございます。
検算の許容範囲を決めるのはいいアイデアですね!
試しにやってみます。
ただどんなやり方でも虚数解が絡んでくるとややこしいことになりますね^^;
虚数を「解なし」としてお終いにしてしまえば手っ取り早くて楽なんですが。
>>816さん
レスありがとうございます。
たしに(3)はあいまいですよね
あと虚数解の計算に関しても適当に工夫するように言われました。
一応私は解の公式で計算して最後に虚数の「i」をつけるようにしてみたんですが
これだと検算でつまります。
解なしとしていいのか、計算するべきか・・・適当っていうのも困りものですね。
学校の課題なんで講師が「お前らがどこまでできるか見てやろうじゃない」と思って
わざとこういう問題を出しているんだと思いますが。
今度から夕飯なにがいい?って聞かれても「なんでもいいよ」とは答えないようにしますw
0822デフォルトの名無しさん
2005/05/07(土) 16:17:41b^2-4acの結果で重解、虚数解が判定できるだろう。
3パターンの解出力-検算ルーチンをつくれば問題なし。
0823デフォルトの名無しさん
2005/05/07(土) 16:22:30計算結果が正しいか判定せよ、って、間違った式で逆算されたら意味無いw
0824813
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になれば正解かなと思っているのですが
これだと明らかに割り切れなくて小数になった場合など解がおかしくなります。
私はこの検算の方法が間違っているような気がするのですがどうでしょう
0825デフォルトの名無しさん
2005/05/07(土) 16:46:33もうそろそろ自分で考えるということを覚えよう。
君の文面とプログラム内の変数との対応を書いておく。
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式の条件をプログラム化しただけ
0826デフォルトの名無しさん
2005/05/07(土) 16:46:58手で検算してる時はどうよ?
多少の誤差は目をつぶるだろう?
それと同じ事をプログラムですればいいのさ。
0827デフォルトの名無しさん
2005/05/07(土) 16:53:11実数を有限桁で計算する限り、0にならないことがあるのは当然。
0にならなくても十分小さいことが確認できればよい。
さらに解を改良したければ、数値計算法を勉強すれ。
0828デフォルトの名無しさん
2005/05/07(土) 16:55:22虚数解の場合の判定は x=y±iz と考えた式展開
a(y±iz)²+b(y±iz)+c
=f(y)-az²±i(2ayz+bz)
を実部、虚部バラバラに計算して
if(絶対値 < EPS)
でどうよ?
0829デフォルトの名無しさん
2005/05/07(土) 17:02:180830デフォルトの名無しさん
2005/05/07(土) 17:02:18あ、C++はだめだったか。
0831デフォルトの名無しさん
2005/05/07(土) 17:02:571つ解を求めて2つ目を b / a - (1つ目の解) で求める。
んで、
重解は2つの解を比較して判定。
虚数解は虚数部分をみる。
検算は(1つ目の解) * (2つ目の解) * a が c に十分近いかどうかで判定。
ってやる。俺だったらね。
0832デフォルトの名無しさん
2005/05/07(土) 17:10:14>1つ解を求めて2つ目を b / a - (1つ目の解) で求める。
1つ解を求めて2つ目を -b / a - (1つ目の解) で求める。
0833デフォルトの名無しさん
2005/05/07(土) 17:33:22もしかして削除したらおかしくならないか?
文字列の終わりがコピーされていないようだが
別のところで配列で[MAX]確保してんのに[MAX+1]を見てるのはなぜ?[MAX-1]のtypoか?
0834追記
2005/05/07(土) 17:34:24「編集」は「削除」と同様に、対象を指定して行うのでは?
0835さらに追記
2005/05/07(土) 17:38:280836さらにさらに追記
2005/05/07(土) 17:40:02最大文字列長を超えたチェックするなら入力ルーチンでやらないか?普通
0837デフォルトの名無しさん
2005/05/07(土) 19:04:38単純な香具師でよければ 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未満の乱数を返す関数
0838837
2005/05/07(土) 19:10:48>一度選んだ数字はゼロなどにしておき、これを選んだら無視して
>再度選べばよい。
迂闊な乱数発生装置だといつまでたってもおわらんぞw
0839デフォルトの名無しさん
2005/05/07(土) 19:22:51#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 ];
}
}
}
0840デフォルトの名無しさん
2005/05/07(土) 21:45:16というか全体的にネタだが。
>>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;
}
0841よろしくお願いします!
2005/05/07(土) 21:46:34for (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");}
0842よろしくお願いします!
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】 期限:明日まで
よろしくお願いします。
0843ここまでは自分で作りました�@
2005/05/07(土) 21:58:38#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;
0844ここまでは自分で作りました�A
2005/05/07(土) 21:58:59for(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");
}
0845デフォルトの名無しさん
2005/05/07(土) 22:11:06[2] 問題文(含コード&リンク):
Visual C++を用いて多倍精度の電卓(四則演算)を作成せよ。
1.Windowsの電卓と同じような精度
2.ビット操作(ヒント)
3.簡単なアルゴリズムの説明
演算部分がわかりません。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C++
[4] 期限:2005年5月9日
[5] その他の制限:
よろしくお願いします
0846デフォルトの名無しさん
2005/05/07(土) 22:33:31http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/365.txt
全角が絡んだ文字処理は苦手です
コメントとしてはインクリメントについて勉強してくれ
0847デフォルトの名無しさん
2005/05/07(土) 22:38:51xxxx+yyy[enter]許すのか?
0848デフォルトの名無しさん
2005/05/08(日) 00:55:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/368.c
ピボット交換機能だけつけた
0849デフォルトの名無しさん
2005/05/08(日) 02:04:13演算部分が肝だろうが(w
0850デフォルトの名無しさん
2005/05/08(日) 02:22:26#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);
}
0852デフォルトの名無しさん
2005/05/08(日) 04:10:06ピボット選択のところは
for (k=0; k<N; ++k) {
temp1 = a[i][k];
a[i][k] = a[l][k];
a[l][k] = temp1;
}
じゃないの?
0853メモリダイヤル
2005/05/08(日) 13:17:50ご指摘ありがとうございます。
入力関数を使用する事により、
許容文字以外を受け付けないようにしたかったんです。
構造体の添字は、こちらのミスでした。
おっしゃるように、g_countを使う事により、
指定したデータの編集を行いたいんです。
846>さん
ありがとうございます!!
大変助かります。
理解できない所が少しあるんですが、
対象を指定して編集(修正、削除など)を行う場合は
どのようにしたらよろしいんでしょうか?
g_countを使用したらいいでしょうか?
名前の許容文字はひらがな英数(シフトJIS)なんですが、
それ以外の文字を受け付けないようにするには関数input()で
if文を使い、シフトJISのコード表で条件判断を行わせるのでしょうか?
質問ばかりですいませんが、ご教授くださいませ。
よろしくお願いします。
0854デフォルトの名無しさん
2005/05/08(日) 15:39:42for( k=i; k<N; k++ ){
temp1 = a[k][i];
a[k][i] = a[k][l];
a[k][l] = temp1;
}
でしたね。>>852ご指摘ありがとう。
0855デフォルトの名無しさん
2005/05/08(日) 16:45:10>g_countを使用したらいいでしょうか?
NO
配列の添え字を別の変数で指定汁!
>if文を使い、シフトJISのコード表で条件判断を行わせるのでしょうか?
YES
ttp://www.hidecnet.ne.jp/~sinzan/tips/c/c_tip10.htm
↑この辺をパクレ
っつーか自分でググレよw
0856デフォルトの名無しさん
2005/05/08(日) 17:39:28[2] 問題文:
配列を用いて各自のID#、名前(英小文字)を
キーボードから入力し、最後の各配列データの内容と
番地を出力するプログラムと、実行結果を出力して
レポートとせよ。
ポインタを用いること
[3] 環境
[3.1] OS:Windows Xp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:今年の5月9日正午まで。その後提出した場合は減点
[5] その他の制限:無し
ポインタが良く理解できないんです。賢者の方々よろしくお願いします。
0857デフォルトの名無しさん
2005/05/08(日) 17:42:11ポインタ p = &a[0]
++p
*pはa[1]となっている
0858856
2005/05/08(日) 17:43:47配列を用いて各自のID#(7桁数字のみ)、
名前(英小文字)を キーボードから入力し、
各配列データの最後の内容と番地を出力する
プログラムと、実行結果を出力して
レポートとせよ。
ポインタを用いること
問題文はこちらを見てください。おねがします。
0859デフォルトの名無しさん
2005/05/08(日) 20:31:53#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;
}
0860デフォルトの名無しさん
2005/05/08(日) 20:32:520861デフォルトの名無しさん
2005/05/08(日) 20:41:14% と変換文字の間にオプションでつけることができる、 10 進の整数で表わされた最大フィールド幅をおくこともできる。
もし幅が与えられないのなら、(以下で述べる例外を除いて) デフォルト値である「無限大」が使用される。
それ以外の場合、この数字を上限として、多くの文字が変換の過程で読み込まれる。変換が始まる前に、ほとんどの変換がスペースやタブを読みとばす。
このときのホワイトスペースはフィールド長に数えられない。
0862859
2005/05/08(日) 20:42:400863デフォルトの名無しさん
2005/05/08(日) 20:53:18あーーー、そんな感じだったのか。
もっと凝ったの作ってた。OTL
0864デフォルトの名無しさん
2005/05/08(日) 22:08:00>859 のは先頭でないかい?
0865デフォルトの名無しさん
2005/05/08(日) 22:46:170866845
2005/05/08(日) 23:33:35お願いします。
0867デフォルトの名無しさん
2005/05/08(日) 23:53:480868デフォルトの名無しさん
2005/05/08(日) 23:56:04こんなんでいい?
0869デフォルトの名無しさん
2005/05/08(日) 23:59:19区切って読めばいいじゃん
「どなたかアドバイスだけでもいいので、(上記の問題について)教えてください。」
って感じで解釈できるだろ?
0870デフォルトの名無しさん
2005/05/09(月) 01:25:37四則演算はどのようなビット演算によって行われているかを調べて
任意のビット数で演算できるように自分でビット演算の仕組みを作る
0871デフォルトの名無しさん
2005/05/09(月) 02:17:02[2] 問題文
4元連立方程式を解け。
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ(バージョン):Visual C++ 6.0
[3.3] 言語:C
[4] 期限:2005年5月9日11:00まで
[5] その他の制限:特にないです
もしわかるかたいたらお願いします。
0872デフォルトの名無しさん
2005/05/09(月) 02:35:42一般的にクラメルの公式だろ・・・・
といいたいが数�VCやってないとわからないわな。
0873デフォルトの名無しさん
2005/05/09(月) 02:39:46既出
0874デフォルトの名無しさん
2005/05/09(月) 02:47:14おkwwwっwwwうはっwwwうぇうぇwwwwww
うぇおkwwwっうぇwwwうぇwwwwwwwwwwww
っwwwwwwwwwwwwwwwwwwwwww
wwwwwwうはっwwwwwwおkっwwwwwwwwwwww
0875デフォルトの名無しさん
2005/05/09(月) 02:53:54良く見たら上のほうに書いてありますね。すいませんでした。
557のプログラム実行してみたのですがエラーがでてしまいます。
どこを直せばいいのでしょうか
0876デフォルトの名無しさん
2005/05/09(月) 03:15:11あんたの頭。
こちとらエスパーじゃないんだからどんなエラーか判るわけねぇだろ。
0877デフォルトの名無しさん
2005/05/09(月) 03:21:580878875
2005/05/09(月) 03:35:470879デフォルトの名無しさん
2005/05/09(月) 03:41:38だとしたら救いようのないアホ。
0880デフォルトの名無しさん
2005/05/09(月) 06:25:18関数のプロトタイプがない
戻り値のない関数がある
てなとこ。具体的なエラー内容をかいてね。
0881デフォルトの名無しさん
2005/05/09(月) 12:52:18[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] 制限は特にありません
0882デフォルトの名無しさん
2005/05/09(月) 13:47:22「3つ目」 って何だよ
0883デフォルトの名無しさん
2005/05/09(月) 13:47:28h = m = s = 0;
s = c + f;
m = s / 60;
s %= 60;
m += b + e;
h = m / 60;
m %= 60;
h += a + d;
これって中学数学の時差とかそういうレベルだな。
0884デフォルトの名無しさん
2005/05/09(月) 13:56:412.33 1.24
こんなふうに、1行に2つの数が間にスペースをはさみ保存されてて
それが200行ほどあります。配列A[1][1]に一行目の最初の数、
A[1][2]に1行目の2つ目の数のように入れていくには
どうすればよいですか? お願いします
0885デフォルトの名無しさん
2005/05/09(月) 13:59:28i += 2;
0886デフォルトの名無しさん
2005/05/09(月) 14:00:46テンプラ使え
0887デフォルトの名無しさん
2005/05/09(月) 14:01:11int 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 );
}
0888デフォルトの名無しさん
2005/05/09(月) 14:21:56配列を0から初めていないのは何故?
0889884
2005/05/09(月) 14:25:36A[2][1] A[2][2]
・
・
と風にいれて、ファイルの中身の数字全部入れるには
どうすれば?
0890デフォルトの名無しさん
2005/05/09(月) 14:36:23>>886
0891デフォルトの名無しさん
2005/05/09(月) 14:55:37#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;
}
0892デフォルトの名無しさん
2005/05/09(月) 14:57:080893デフォルトの名無しさん
2005/05/09(月) 15:03:39#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;
}
0894デフォルトの名無しさん
2005/05/09(月) 15:11:31>>888 にも回答汁!
それとも、ネタか?
0895デフォルトの名無しさん
2005/05/09(月) 15:12:340896デフォルトの名無しさん
2005/05/09(月) 15:17:22BASIC上がりか?VBでも>>895のようにしないと添え字は 0 から
スタートするしなあ・・・
0897デフォルトの名無しさん
2005/05/09(月) 15:44:37え〜ととくに理由はないです・・
0898デフォルトの名無しさん
2005/05/09(月) 15:49:08釣れますか?
0899デフォルトの名無しさん
2005/05/09(月) 15:56:25wwwwwwwwwwwうぇwwwうはっwwwっうぇ
っっうぇwwwおkwwwwwwwwwwwwwww
うはっwwwうぇwwwうぇwwwうぇwww
0900テキストボックスの幅
2005/05/09(月) 16:32:17のですが・・
アプリを立ち上げてみるとテキストボックスの下に配置してある
プルダウンメニューの中身が空(空白)になってしまいます。
どなたかテキストボックスの幅を伸ばしてもプルダウンメニューの
表示に影響を及ばさないやり方をご教授していただけないでしょうか。
緊急で困っておりますので宜しくお願いします。
0901デフォルトの名無しさん
2005/05/09(月) 16:36:48お前、そこら中にスレ違いの質問ばらまいてんじゃねーよ。
うんこ氏ね。
0902デフォルトの名無しさん
2005/05/09(月) 16:51:340903デフォルトの名無しさん
2005/05/09(月) 17:14:12ありがとうございます!!
0904メモリダイヤルです
2005/05/09(月) 19:55:59色々なアドバイスありがとうございました!
残る部分は
修正、削除とも対象を指定して編集したい。
名前の昇順、降順が、数字、英字、ひらがなの順番になるんですが、これを
英字<数字<ひらがな の順番にしたい。
電話番号が#<*<0・・・の順番になるんですが、これを
*<#<0・・・・<9にしたい。
名前の入力をひらがな英数(シフトJIS)のみにしたい。
ファイルを2行目から読み込ませたい。
名前の検索を先頭文字一致にしたい。
電話番号の検索で、'-'および'P'以降を無視させたい。
どのように変えたらよろしいでしょうか?
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?
0905デフォルトの名無しさん
2005/05/09(月) 20:06:10[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] その他の制限は特にありません
0906デフォルトの名無しさん
2005/05/09(月) 20:16:320907デフォルトの名無しさん
2005/05/09(月) 20:21:58[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] その他の制限は特にありません
よろしくお願いします。
0908デフォルトの名無しさん
2005/05/09(月) 20:22:100909デフォルトの名無しさん
2005/05/09(月) 20:40:09( ゚∀゚)彡 new! delete!
⊂彡
0910& ◆cl6EOCayao
2005/05/09(月) 20:52:25色々なアドバイスありがとうございました!
残る部分は
修正、削除とも対象を指定して編集したい。
名前の昇順、降順が、数字、英字、ひらがなの順番になるんですが、これを
英字<数字<ひらがな の順番にしたい。
電話番号が#<*<0・・・の順番になるんですが、これを
*<#<0・・・・<9にしたい。
名前の入力をひらがな英数(シフトJIS)のみにしたい。
ファイルを2行目から読み込ませたい。
名前の検索を先頭文字一致にしたい。
電話番号の検索で、'-'および'P'以降を無視させたい。
どのように変えたらよろしいでしょうか?
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?
0911デフォルトの名無しさん
2005/05/09(月) 21:24:03ソラリスにはurandomがあるのかどうかわかんねぇしぃ
擬似乱数の初期化はclockでもいいのか?
いやダメだな
5%区切りって中途半端だし精度落ち
いや難しいと思うよ。
0912907
2005/05/09(月) 21:32:20乱数の初期化はsrand、生成はrand関数でやるのが条件です。書いとけばよかったですね。
ただ仰る通り確率ごとにコードを返すのがよくわからないんですよね・・・
0913デフォルトの名無しさん
2005/05/09(月) 21:58:11外の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]);
}
0914デフォルトの名無しさん
2005/05/09(月) 22:02:26tango[1][]以下が空のままです。
の誤りでした。ややこしくしてしまい申し訳ないです。
0915デフォルトの名無しさん
2005/05/09(月) 22:15:190がスペースってどんな文字コードつかってるの?
0916デフォルトの名無しさん
2005/05/09(月) 22:23:17そういやスペースは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);
}
0917デフォルトの名無しさん
2005/05/09(月) 22:31:54[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日
0918デフォルトの名無しさん
2005/05/09(月) 23:08:32scanfでなくてgetsを使ってみ
0919デフォルトの名無しさん
2005/05/09(月) 23:20:31long long int 型
を使おうと思ったのですが、「宣言に型が多すぎる」とエラーが出てしまいました。
どうすればよいでしょうか?よろしくお願いします。
0920デフォルトの名無しさん
2005/05/09(月) 23:25:25gets() 勧めるなよ
0921デフォルトの名無しさん
2005/05/09(月) 23:26:30そのコンパイラは多分 long long int に対応していない。
0922デフォルトの名無しさん
2005/05/09(月) 23:29:56__int64
を使って見ましょう
0923919
2005/05/09(月) 23:30:16テンプレ通りに質問していなくて申し訳ないです。
コンパイラはborland C++です。
対応していないのですか…。
何か方法はないでしょうか?
0925919
2005/05/09(月) 23:46:10と宣言したとき、
printf("%…",a)
の…部分は何にすればよいのでしょうか??
0926デフォルトの名無しさん
2005/05/09(月) 23:49:06[2] 問題文(含コード&リンク):英文をキーボードから入力し、単語毎に分割して、各単語と語数を表示
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ(バージョン): BCC
[3.3] 言語:C
[4] 期限:2005年5月11日まで
語数とはその単語の頻度
0927デフォルトの名無しさん
2005/05/10(火) 00:10:450928デフォルトの名無しさん
2005/05/10(火) 00:15:570929デフォルトの名無しさん
2005/05/10(火) 00:17:30その代わりリスト構造。ハッシュはオープンハッシュね。
これなら、単語数がいくら増えても対応できるし。
0930デフォルトの名無しさん
2005/05/10(火) 00:20:11#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の倍数で割った場合計算誤差で偏らないか気になる。。。
0931デフォルトの名無しさん
2005/05/10(火) 00:32:07>偏らないか気になる
>>907程度の問題なら、誤差の範囲だろう
が、
>int n,r,c;
の「n」は、>>907でも、必要ないね
0932デフォルトの名無しさん
2005/05/10(火) 00:35:28_int64 じゃなくて __int64 な。
printf("%I64d\n", a);
0933デフォルトの名無しさん
2005/05/10(火) 00:44:23long long a=1234567890123456789LL;
printf("%ld%#09ld\n",(long)(a/1000000000L),(long)(a%1000000000L));
printf("%I64d\n",a);
どっちかでなんとかならん?
0934デフォルトの名無しさん
2005/05/10(火) 01:01:18ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/373.c
0935デフォルトの名無しさん
2005/05/10(火) 01:21:28[2] 問題文(含コード&リンク):
子プロセスを30秒間ゾンビにするようなプログラムを作れ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:明日
わけわかめお願いします
0936デフォルトの名無しさん
2005/05/10(火) 01:24:110937デフォルトの名無しさん
2005/05/10(火) 01:25:270938デフォルトの名無しさん
2005/05/10(火) 01:32:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/374.txt
但し一行入力のみに対応。ctrl+zなどで終わるまで解析するとか、ワードラップ
に対応させるとかは自分でやってくれ。ctrl+zの方は簡単にできると思う。
0939デフォルトの名無しさん
2005/05/10(火) 01:39:38○ハイフネーション
0940デフォルトの名無しさん
2005/05/10(火) 01:41:09#include <unistd.h>
int main(void )
{
int i;
if( fork() == 0 )
exit(1);
else{
sleep(30);
wait(&i);
}
}
0941デフォルトの名無しさん
2005/05/10(火) 01:41:17waitpidを使え。
0942デフォルトの名無しさん
2005/05/10(火) 01:42:49こっちじゃない?
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
0944デフォルトの名無しさん
2005/05/10(火) 01:58:12[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文、あと配列を習った程度です。
よろしくお願いします。
0945デフォルトの名無しさん
2005/05/10(火) 02:05:39あー大文字と小文字は区別してるからね。
区別しないバージョンはこちら。ついでにctrl+zが押されるまで多行入力に
対応しといた。バグ残ってるかもしれんけど。コピーペーストで同じような
事を二度やらせてるが、目障りだったら別関数にでもしてくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/375.txt
0946デフォルトの名無しさん
2005/05/10(火) 02:24:51"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;
}
0947デフォルトの名無しさん
2005/05/10(火) 02:32:11#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;
}
0948919
2005/05/10(火) 07:40:460949デフォルトの名無しさん
2005/05/10(火) 11:24:52[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`;)頼む
0950デフォルトの名無しさん
2005/05/10(火) 11:29:450951デフォルトの名無しさん
2005/05/10(火) 11:31:41いまいち日本語がわからん
0952デフォルトの名無しさん
2005/05/10(火) 11:36:020953デフォルトの名無しさん
2005/05/10(火) 12:04:45これを削るのだな。
これがあるだけでまったくわけわからん文章になるなw
0954('A`;)
2005/05/10(火) 12:28:45int 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;
}
0955デフォルトの名無しさん
2005/05/10(火) 12:32:190956デフォルトの名無しさん
2005/05/10(火) 13:39:180958デフォルトの名無しさん
2005/05/10(火) 22:24:210959デフォルトの名無しさん
2005/05/10(火) 22:35:55sumprime n = foldr1 (+) (sieve [2..n])
sieve [] = []
sieve (x:xs) = x:sieve [a | a<-xs, a `mod` x /= 0]
0960デフォルトの名無しさん
2005/05/10(火) 22:49:07ここはC/C++の宿題スレだっての
0961デフォルトの名無しさん
2005/05/10(火) 23:08:510962デフォルトの名無しさん
2005/05/10(火) 23:13:26[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] その他の制限:
サッパリ分かりません、どうかお願いします
0963デフォルトの名無しさん
2005/05/10(火) 23:18:460964デフォルトの名無しさん
2005/05/10(火) 23:36:22[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] その他の制限:特になし。
どなたかご教授お願いします。
0965デフォルトの名無しさん
2005/05/11(水) 00:00:15#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;
}
0966964
2005/05/11(水) 00:06:08ありがとうございます!
おかげさまで助かりました。
0967デフォルトの名無しさん
2005/05/11(水) 01:56:09べたべたですね
#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 );
}
0968944
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] その他の制限: まだ授業が始まって数回なので、配列を習ったところです。
前回、ありがとうございました。
よろしくお願いします。
ジョセファスだけでわかりますかね…
0969デフォルトの名無しさん
2005/05/11(水) 03:08:16継子立てだね。
アルゴリズムに詳しくなければ判らないと思う。
適当な解説ページでもポイントするべし。
0970969
2005/05/11(水) 03:11:55>>968
つーことで、これ見て頑張れ。
ttp://www004.upp.so-net.ne.jp/s_honma/josephus/josephus.htm
0971デフォルトの名無しさん
2005/05/11(水) 03:53:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/376.c
おねむなので、いまいち自信なし
0972デフォルトの名無しさん
2005/05/11(水) 05:25:17二分探索で新たな数値の追加のしかたが分かりません
よろしくおねがいします
0973デフォルトの名無しさん
2005/05/11(水) 05:37:42常にソートされた配列に新しい項目を追加する場合、
追加すべき位置を見つけ出すために二分探索はを使う.
ソートされてる配列データを用意してその真中あたりの値を
追加するようにすればおk.
まさか stdlib.h にある bsearch() 自体も自分で作りなおせってこと?
0974デフォルトの名無しさん
2005/05/11(水) 10:01:20って今回のはデータの操作だからいいのか
0975デフォルトの名無しさん
2005/05/11(水) 11:02:06ありがとうございます助かりました〜。
0976デフォルトの名無しさん
2005/05/11(水) 11:47:38bsearchで追加すべき位置って見つけられる?
末尾に追加してソートってのが楽といえば楽。
でも馬鹿みたい。
0977デフォルトの名無しさん
2005/05/11(水) 11:57:17まあがんばれ。>>972
0978デフォルトの名無しさん
2005/05/11(水) 13:21:59問題文(含コード&リンク):月曜日(第1日目)〜日曜日(第7日目)の1週間、毎日ジュースを売る。
毎日の販売時間中に、確率8.5%で大雨が降り続きます。このときは、1杯のジュースも売れません。
水曜日と日曜日には、時々、観光バスがジューススタンドの近くに止まりすべてのジュースが売れてしまいます。
水曜日に観光バスが来る確率は20%、日曜日は50%です。ただし雨の日には観光バスは来ません。毎日の売り上げを記録し、1週間の利益の総額を画面表示しなさい。
OS: Winxp
コンパイラ(バージョン):gcc
言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:今日
お願いします。
0979デフォルトの名無しさん
2005/05/11(水) 13:27:35ジューススタンドの最大供給量は?
ジューススタンドに補給するタイミングは?
0980978
2005/05/11(水) 13:33:111日の客 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
0982デフォルトの名無しさん
2005/05/11(水) 14:01:450983デフォルトの名無しさん
2005/05/11(水) 14:03:010984デフォルトの名無しさん
2005/05/11(水) 14:10:160985デフォルトの名無しさん
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] その他の制限: まだ授業始まったばかりなので演算を習ったところです。
初歩的な質問ですいませんが、よろしくお願いします。
0986デフォルトの名無しさん
2005/05/11(水) 14:25:020987985
2005/05/11(水) 14:28:550988デフォルトの名無しさん
2005/05/11(水) 14:37:43[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] 期限:明日
どなたかご教授宜しくお願いします。
0989デフォルトの名無しさん
2005/05/11(水) 14:59:26[2] 問題文
英文をファイル入力で読み込み、7文字以上の英単語は大文字に変換して標準出力せよ。
なお、入力にはfscanfを、出力にはprintfを用いること。
[3] 環境
[3.1] OS:winxp
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語C
期限 今週末
宜しくお願いします
0990デフォルトの名無しさん
2005/05/11(水) 15:21:38VC++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 ); }
0991デフォルトの名無しさん
2005/05/11(水) 15:32:44どういうのを英単語と呼ぶのかわからんが、とりあえず英小文字が繋がったもの、ということで
#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;
}
0992デフォルトの名無しさん
2005/05/11(水) 15:43:33既出だね。宿題スレの過去ログを探して味噌。
0993989
2005/05/11(水) 15:44:05例えば、
This problem is inportant.
という英文が書かれたファイルを読み込んだときに
This PROBLEM is INPORTANT.
という風に変換して標準出力したいのです。
0994デフォルトの名無しさん
2005/05/11(水) 15:46:120995デフォルトの名無しさん
2005/05/11(水) 15:54:360996デフォルトの名無しさん
2005/05/11(水) 16:00:39http://pc8.2ch.net/test/read.cgi/tech/1115794784/
0997デフォルトの名無しさん
2005/05/11(水) 16:30:44日本語変だね
bsearchも分かってないし
0998デフォルトの名無しさん
2005/05/11(水) 17:42:090999デフォルトの名無しさん
2005/05/11(水) 17:48:431000デフォルトの名無しさん
2005/05/11(水) 17:50:1710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。