C/C++の宿題を片付けます 64代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/04/30(日) 00:10:57【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 63代目
http://pc8.2ch.net/test/read.cgi/tech/1143405137/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0002デフォルトの名無しさん
2006/04/30(日) 00:11:48・同じ講義を受けている人が既に同じ宿題を依頼してるかもしれなせん。
まずはスレを少しさかのぼって探してみてください。
それさえ出来ないシメジ野郎はバター焼きにして食っちまうぞ
・解答者は答える義務もないし、答えてもそれが正しいかどうかは保証しません。
もちろん、出題者先生の意図なんぞ知ったことではありません。
At your own riskで。
・態度が余りに悪いとすーぱーはかーがあなたの先生にチクるかもしれません。
報告用テンプレ(任意)
[1] 先生の評価:
[2] 提出結果:
[3] 単位取得の有無:
[4] 回答者にコメント(愚痴等は禁止):
0003デフォルトの名無しさん
2006/04/30(日) 00:22:55I n f o r m a t i o n
このスレは未稼働です。
前スレが埋まってから書き込みましょう
*********************************
0004デフォルトの名無しさん
2006/04/30(日) 01:35:23http://ysserve.int-univ.com/susi/Lecture/c2/
↑のページの【必須CAI課題】のどれかをクリックして適当に学生の番号入力するとオンラインのコンパイラに飛べますが、
このようなC言語のオンラインコンパイラを自分のHPに設置したいのですがどうしたらいいのでしょうか?
ちなみに自分のHPサービス(sakura.ne.jp)にはCGI,PHP,C言語(gcc)等のコンパイラがあり、パスも分かるのですが
そこからどうしたよいのでようか?
ソースが入力された文章を受け取って、次にgccのパスを・・・どうやったらコンパイルできるのでしょうか?教えてください
ちなみにCやVBといった言語やHPビルダーは使えますが、Webプログラミングの勉強はしたことないので、HPビルダーで出来る程度でお願いします。
(さらにこのオンラインコンパイラだとscanf関数等数値のキーボ−ド入力が出来ないので、余裕があれば改善したいです。HTMLだけじゃ無理そうですが・・)
0005デフォルトの名無しさん
2006/04/30(日) 02:44:09俺もわからないんだよなぁ
わかりやすく解説している本かサイトしりませんか?
0006デフォルトの名無しさん
2006/04/30(日) 03:22:56何処の話だよ?それに前スレ埋めてから使え
0007デフォルトの名無しさん
2006/04/30(日) 03:31:550008デフォルトの名無しさん
2006/04/30(日) 04:05:49どうやるも何もperlか何かでフォームデータ受け取って
ファイルに落としてgccに渡すだけだと思うが。
0009デフォルトの名無しさん
2006/04/30(日) 04:11:170010デフォルトの名無しさん
2006/04/30(日) 04:22:44前橋ポインタ本やK&Rなどちょっと気の利いた本なら載ってる。
0011デフォルトの名無しさん
2006/04/30(日) 06:39:51あれがわからないってのは致命的だろ
0012デフォルトの名無しさん
2006/04/30(日) 08:00:51WebProg に単発質問スレ立てておいてここに粘着かよ。
0013名無し ◆GJ3fREqUVw
2006/04/30(日) 11:42:08[2]1つのプロジェクトに2つのC++ソースファイルを作り
外部依存フォルダを作りたい。
[3.1]windows XP HomeEditon SP2
[3.2]Mirosoft Visual C++
[3.3]C++
[4]2006年05月08日まで
[5]ないです。
0014デフォルトの名無しさん
2006/04/30(日) 11:56:32スタック構造は、先入れ後出し(壷)、
リスト構造は、追加は、尻尾にいれるのとか、頭に入れるのとかタイプがあるけど、
どこでもイテレーションを使って取り出せる。
イテレーションを使うから、順番に取り出せる。
この辺が他とは違う特徴。
VBAはLIST、イテレータのテクニックが結構詰まってると思う。
ちょっと複数LIST階層構造があって複雑だけど、Explorerもイテレータだな。
0015デフォルトの名無しさん
2006/04/30(日) 12:14:43Exploreは順番を入れ替えられないけど、お気に入りはドラッグ&ドロップで順番が変えられる
ここが、見かけ上より、お気に入りがディレクトリより中がからまってる所以
0016デフォルトの名無しさん
2006/04/30(日) 13:30:00お前は一体何を言っているんだ?
0017デフォルトの名無しさん
2006/04/30(日) 13:56:060018デフォルトの名無しさん
2006/04/30(日) 14:27:13つCで学ぶデータ構造とプログラム
0019デフォルトの名無しさん
2006/04/30(日) 23:31:44ttp://pc8.2ch.net/test/read.cgi/tech/1143405137/995-1000
0020デフォルトの名無しさん
2006/04/30(日) 23:45:05どうも有難うございました。
ところで、下の"for loop"の中の"if function"で'\0'は何をしているのでしょうか?
よろしくお願いします。
for (i=1 ; abs(password[i-1]-password[i])<=1 ; i++)
if (password[i+1]=='\0')
0021デフォルトの名無しさん
2006/04/30(日) 23:47:090022デフォルトの名無しさん
2006/04/30(日) 23:50:390023デフォルトの名無しさん
2006/05/01(月) 00:24:51[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1810.txt
(このC言語で使われている2つの行列の掛け算を1つの関数で出来るようにする)
[3] .NET(C)
[3.1] OS:XPSP2
[3.2] MS .NET ver7.1.3091
[3.3] 言語: C言語
[4] 期限:2006年5月1日
[5] その他の制限:特にありません
自分でやれるだけやってみたのですが、どうしてもわからなくて…
教えていただけると嬉しいです。
0024デフォルトの名無しさん
2006/05/01(月) 00:42:56一つの関数でってどういう意味?
for文一個ってこと?
それともmc,meを同時に求めるって(ry
0025デフォルトの名無しさん
2006/05/01(月) 00:45:19先生が言うにはコンポーネント、部品の両方を1つの関数で求めることができる。
とのことなのですが…
ヒントに
void mat_mul(int ma[3][4],const int mb[4][7],int mc[3][7])
を、あげていました
0026デフォルトの名無しさん
2006/05/01(月) 00:46:29失礼しました(´・ω・`)
0027デフォルトの名無しさん
2006/05/01(月) 00:58:27問題文を一言一句正確に書きうつしてみ?
0028デフォルトの名無しさん
2006/05/01(月) 01:00:20このプログラムでは、基本的には行列の掛算を2回行い、それぞれの結果を出力する構造になっています。
ただし、行列といっても片方は1行だけですので、プログラムはわずか3行で記述できています。
それでも、プログラミング・テクニックとしては同一の関数を2度利用することができるはずです。
両方で使用する行列のサイズは異なりますが、工夫をすれば克服できます。
これが問題文です。
0029デフォルトの名無しさん
2006/05/01(月) 01:22:22このプログラムでは行列の掛算を2回行っている。
行列の掛算を行う関数を作り、mainから呼び出すように変更せよ。
ただし、どんな行列のサイズでも正しく掛算を行うように工夫すること。
※1回の掛算は3行程度なので、わざわざ関数にするメリットが感じられないかも知れません。
ですが関数にまとめる事でmainの処理がわかりやすくなり、
何度も処理を書かなくてすむのでバグの発生を抑えられます。
プログラミング・テクニックのひとつとして憶えておきましょう。
0030デフォルトの名無しさん
2006/05/01(月) 01:23:52たぶんそういう意図を含んだ問題だと思います(´・ω・`)
自分でも色々やってみたのですが…
0031デフォルトの名無しさん
2006/05/01(月) 01:41:10予想以上に難しそうだな
0032デフォルトの名無しさん
2006/05/01(月) 01:43:23お手数おかけします(´・ω・`)
自分でも諦めずにやってみます…
0033デフォルトの名無しさん
2006/05/01(月) 02:00:01でいけると思う。
0034デフォルトの名無しさん
2006/05/01(月) 02:06:190035デフォルトの名無しさん
2006/05/01(月) 02:07:04ポインタを使っても先生はできると言っていましたが、
使わなくてもできるようです(ポインタ使えるなら使えば、みたいな感じでした
別に任意のサイズでなくても、今回の実行結果がアップロードしたファイルと同じ数字で出力されれば問題ないので…(´・ω・`)
ポインタ使うほうが簡単なのかなあ…
003623 ◆SEBUhSQF9U
2006/05/01(月) 02:09:19こんな夜遅くに質問にのって頂いて本当に感謝しています。
0037デフォルトの名無しさん
2006/05/01(月) 02:14:22こんなクソみたいなんじゃなくて、何か方法があるのかな?
0038デフォルトの名無しさん
2006/05/01(月) 02:16:13003923 ◆SEBUhSQF9U
2006/05/01(月) 02:17:03あー、そういえばアシスタントの人が「とりあえず10×10の行列を計算する関数を作り」みたいなことを
言っていました。
そのプログラムでも構いませんので、一度教えていただけないでしょうか?
0040デフォルトの名無しさん
2006/05/01(月) 02:18:050041デフォルトの名無しさん
2006/05/01(月) 02:19:09わざわざ変な方法でするメリット無いし
0042デフォルトの名無しさん
2006/05/01(月) 02:19:50004323 ◆SEBUhSQF9U
2006/05/01(月) 02:22:24もっと早く言うべきでした(´・ω・`)申し訳ありません
>>41
ポインタのほうがいいとは思うのですが、とりあえず1つの関数にまとまっていれば
回答にはなっていると思うので。質問している側がこんな事言ってしまうのも失礼だとは思いますが。
0044デフォルトの名無しさん
2006/05/01(月) 02:24:59書けるけどな。
但し、関数の引数は **a になり、あと行と列の大きさを m, n の
ような感じで一緒に渡さないといけない。
普通はこういう時はひっくるめて構造体にしてしまうんだけど、今の
問題の場合はそこまでしない方がいいな。
0045デフォルトの名無しさん
2006/05/01(月) 02:29:00配列へのポインタ」となるので、今回のように普通の二次元配列で初期化
しているものをそのまま渡す事はできない。
行の先頭のポインタ配列を作って、そこにそれぞれの行の先頭ポインタを
代入して、変換して渡す必要がある。
004623 ◆SEBUhSQF9U
2006/05/01(月) 02:32:19ふむう…、やっぱりポインタは難しいですね(´・ω・`)どんな受け渡しが起こってるのか中々イメージしにくいです
ポインタ使わない場合はサイズの大きい行列を作って、そこで受け渡しをすればよろしいのでしょうか?
0047デフォルトの名無しさん
2006/05/01(月) 02:33:480048デフォルトの名無しさん
2006/05/01(月) 02:47:21int mmul(int *ma, size_t marow, size_t macol, int *mb, size_t mbrow, size_t mbcol, int *mc){
int i, j, k;
if ( macol != mbrow ) return 0;
for (i=0;i<marow;i++) for(j=0;j<mbcol;j++) for(k=0;k<macol;k++) mc[i*mbcol+j]=mc[i*mbcol+j]+ma[i*macol+k]*mb[k*mbcol+j];
return 1;
}
呼出側は
mmul(&ma[0][0], 1, 3, &mb[0][0], 3, 4, &mc[0][0]);
mmul(&mc[0][0], 1, 4, &md[0][0], 4, 7, &me[0][0]);
ポインタのポインタと2次元配列が違うものってのは分かってるよな?
004923 ◆SEBUhSQF9U
2006/05/01(月) 02:47:3910×10行列の方法でやろうとしてるのですが…
0051デフォルトの名無しさん
2006/05/01(月) 02:52:16でかい行列で渡すときは
hoge(int m[100][100], int row, int col);
に
int ma[3][4];
hoge(ma, 3, 4);
とかやったらいかんぞ。
int ma[3][4];
int temp[100][100] = {0};
for(i=0;i<3;++i)for(j=0;j<4;++j) temp[i][j] = ma[i][j];
hoge(temp, 3, 4);
というふうに、同じサイズのものに入れなおさんと。
005223 ◆SEBUhSQF9U
2006/05/01(月) 02:55:08本当にありがとうございます。
>>51
この場合は[100][100]のtempの行列が別途必要という事でしょうか。
そちらのバージョンもやってみようと思います。
ありがとうございました。
0053シリアス ◆UV8VW4VRAk
2006/05/01(月) 03:29:49たとえば入力した文字列をシリアルに送るとき
char buff[128];
DWORD dwWritten;
scanf("%s", &buff);
WriteFile(hComm, buff, stren(buff), &dwWritten, NULL);
みたいにすればいいと思いますがなぜかうまくいきません、なんでですかね?
0054デフォルトの名無しさん
2006/05/01(月) 03:31:19005523 ◆SEBUhSQF9U
2006/05/01(月) 03:32:50夜遅くまで付き合っていただいて本当に有難うございました。
005623 ◆SEBUhSQF9U
2006/05/01(月) 03:34:05最後の最後にやらかしちゃってすみません。
0057デフォルトの名無しさん
2006/05/01(月) 07:42:390058超初心中の初心者
2006/05/01(月) 09:28:50<問題>
要素数が7で要素型がint型である配列の全要素を逆順に並べかえるプログラムを作成せよ。
並べ替えた配列を1行ずつ表示する。
・・・教えてもらえると嬉しいが・・・助けて;;;
0059デフォルトの名無しさん
2006/05/01(月) 09:35:44int* q = a + sizeof(a) / sizeof(a[0]) - 1;
while (p != q) {
int t = *p;
*p++ = *q;
*q++ = t;
}
0060デフォルトの名無しさん
2006/05/01(月) 09:54:540061超初心中の初心者
2006/05/01(月) 10:20:410062デフォルトの名無しさん
2006/05/01(月) 10:24:080063デフォルトの名無しさん
2006/05/01(月) 10:24:580064超初心中の初心者
2006/05/01(月) 10:32:20マジバカですいません_| ̄|○;;;;
解説plz;;;;
0065デフォルトの名無しさん
2006/05/01(月) 10:34:030066デフォルトの名無しさん
2006/05/01(月) 10:44:09int a[7];
それから *q++ は *q-- の間違いだな。
0067デフォルトの名無しさん
2006/05/01(月) 10:45:240068デフォルトの名無しさん
2006/05/01(月) 10:46:010069超初心中の初心者
2006/05/01(月) 10:52:28*q++←ってポインタの内容をプラス1しながら繰り返すってこと?
0070デフォルトの名無しさん
2006/05/01(月) 10:54:230071デフォルトの名無しさん
2006/05/01(月) 10:55:17int a[] = {1,2,3,4,5,6,7}, i;
// 配列aの最初の位置をポインタpに保存
int* p = a;
// 配列aの最後の要素の位置をポインタqに保存
// 最初の位置+配列の要素の個数−1
int* q = a + sizeof(a) / sizeof(a[0]) - 1;
// ポインタpとqがぶつかるまで繰り返す
while (p != q) {
// ポインタpが指す値をtに一時保存しておく
int t = *p;
// ポインタqが指す値をpが指す配列要素に代入、pを1進める
*p++ = *q;
// tの値をポインタqが指す要素に代入し、qを1戻す
*q-- = t;
}
for (i = 0; i < 7; i++){
printf("%d", a[i]);
}
0072超初心中の初心者
2006/05/01(月) 10:57:14直接ポインタの中に式を入れる??
0073デフォルトの名無しさん
2006/05/01(月) 11:02:330074超初心中の初心者
2006/05/01(月) 11:07:57>>71 分かりやすい解説ありがとうw
そのほかの方もありがとうw
0075超初心中の初心者
2006/05/01(月) 11:21:40<問題1>
文字列str内の全ての数字文字を削除する関数
void del_digit(char *str){* /・・・/*}
を添字演算子を用いずに作成せよ(例えば、”AB1C9”を受け取ったら、”ABC”とする)
そして、mainから関数del_digitを呼び出して、以下のように表示する
str = XXX
<問題2>
二つの整数n1とn2の和、差、積をsum,diff,mulが指す変数に格納する関数
void sum_diff_mul(int n1,int n2,int *sum,int *diff, int *mul){/*・・・*/}
を作成せよ。
mainより sum_diff_mul 関数を呼び出して結果を以下のように表示する。
和はXXです。
差はXXです。
積はXXです。
問題の解説お願いいたします_| ̄|○;;;;
0076デフォルトの名無しさん
2006/05/01(月) 11:23:19じゃなくて
while (p < q) {
じゃないか?
0077デフォルトの名無しさん
2006/05/01(月) 11:35:05> ありたちは びっくりしました。
> 「きりぎりすさんじゃ ありませんか。なつの あいだは うたってばかり いたから、
> いまごろは おどりを おどってでも いるかと おもって いたのに。さあ、どうぞ。」
> そう いって、ごちそうを わけて あげました。
> (久保喬 偕成社『イソップものがたり』)
キリギリスでも別にいいや。
007877
2006/05/01(月) 11:35:540079デフォルトの名無しさん
2006/05/01(月) 11:50:22void del_digit(char *str){
char c;
char *d = str;
while(1){
c = *str++;
*d = c;
if(!c){
break;
}else if(c < '0' || '9' < c){
d++;
}
}
}
void sum_diff_mul(int n1,int n2,int *sum,int *diff, int *mul){
*sum = n1+n2;
*diff = n1-n2;
*mul = n1*n2;
}
0080超初心中の初心者
2006/05/01(月) 11:56:57とりあえず夜戻ってきたら続くやりますんで、
よろしくお願いします。
0081デフォルトの名無しさん
2006/05/01(月) 12:19:44[2] 問題文(含コード&リンク):
typedef int elementtype;
struct stack {
int top;
elementtype elements[1024];
};
/* ここにpushとpopの関数を定義せよ */
int main(void) {
struct stack S;
elementtype x;
initstack(&S);
push(&S, 1), push(&S, 2), push(&S, 3), push(&S, 4), push(&S, 5);
printf("%d", pop(&S)), x=pop(&S);
printf("%d", pop(&S)), x=pop(&S);
printf("%d", pop(&S)), x=pop(&S);
}
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月2日まで
[5] その他の制限:
void push(struct stack *S, elementtype x){
S->top++;
S->elements[S->top] = x;
}
このような感じになるとおもうのですが、至らないところがあるためコンパイルできません
何卒よろしくお願いします
0082デフォルトの名無しさん
2006/05/01(月) 12:31:28S->elements[S->top++] = x;
}
elementtype pop(struct stack *S) {
return S->elements[--S->top];
}
未チェック。
0083デフォルトの名無しさん
2006/05/01(月) 12:33:130084デフォルトの名無しさん
2006/05/01(月) 12:40:02中略
elementtype pop(struct stack *S) {
return(S->top==-1 ? 0 : S->elements[S->top--]);
}
void initstack(struct stack *S) {
S->top=-1;
return;
}
以下、略
0085デフォルトの名無しさん
2006/05/01(月) 15:55:39[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Mac OS X 10
[3.2] コンパイラ名とバージョン:ターミナル 1.4.6
[3.3] 言語: C
[4] 期限: 5月2日15時まで
[5] その他の制限: なし
コンビニの商品管理プログラムを作りなさい
という課題なのですが。
まず、何から手を付けたらいいかがわかりません。
どなたかご教授頂けたら幸いです。
[課題]
商品の仕入れや売上の管理を行う。
各商品は線型リストに格納する。リストは商品IDの小さな順に並 べる。
操作はファイルとして読み込む。
商品は商品ID、名前、値段、個数というデータをもつ。
操作のコマンド
add 商品ID 名前 値段 個数 (商品の登録、追加)
sell 商品ID 個数 (商品を売却)
dell 商品ID (商品の削除)
price 商品ID 値段 (商品の値段変更)
print (現在の売上げと在庫状況を表示)
008685
2006/05/01(月) 15:56:21入力
add1234apple503
add1432banana1454
sell12342
price1432155
dell1432
出力
売り上げは100円です.
現在の在庫は以下の通りです.
1234apple50円1個
0087デフォルトの名無しさん
2006/05/01(月) 17:50:06>>86のサンプルは課題に入ってたのか?
それともおまいさんがそうしようと思ったのか?
0088デフォルトの名無しさん
2006/05/01(月) 17:52:270089デフォルトの名無しさん
2006/05/01(月) 18:00:06もしくはリスト上はソートせずに常にpush_backしておいて
各ノードへのポインタを格納した配列をソートしておく
0090デフォルトの名無しさん
2006/05/01(月) 18:05:31ファイルの入出力からソートや構造体はては線形リストまで
これ作ったら相当力つくような気がする
まあ、全部書くと結構面倒だけど
0091デフォルトの名無しさん
2006/05/01(月) 18:08:18>>商品の仕入れや売上の管理を行う
これを満たすプログラムを組めばよろしいかと
0092デフォルトの名無しさん
2006/05/01(月) 18:18:06[2] 問題文(含コード&リンク):
キューQには 5 4 2 -4 2 -1 3 -2 5 -3 -1 と入っているものとする
/* */ を定義し、hatena は何をする関数か答えよ
typedef int elementtype;
/* ここに stack, queue の関数定義 */
void operator(struct stack *S, elementtype e) {
elementtype arg1, arg2;
arg2 = pop(S), arg1 = pop(S);
if(e == -1) push(S, arg1 + arg2);
else if(e == -2) push(S, arg1 - arg2);
else if(e == -3) push(S, arg1 * arg2);
else if(e == -4) push(S, arg1 / arg2);
}
009392
2006/05/01(月) 18:18:38struct stack S; elementtyape e;
initstack(&S);
while(!queueempty(Q)){
e=getq(Q);
if(e>=0) push(&S, e);
else operator(&S, e); }
e = pop(&S);
printf("%d\n", e);
}
void main() {
/* 変数Qの宣言とキューの中身の設定 */
hatena(&Q);
}
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5/2 12:00
009492
2006/05/01(月) 19:33:39while(!queueempty(Q)) {
これはどういう条件下で実行されるかのか教えてもらえませんか?
0095デフォルトの名無しさん
2006/05/01(月) 19:40:020096デフォルトの名無しさん
2006/05/01(月) 19:55:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1813.txt
とりあえず、中途半端だが
”リストは商品IDの小さな順に並べる”がやってない
入力データは以下のようにスペースで区切らないと
たぶん認識しないけどこれでおk?
add 1234 apple 50 3
add 1432 banana 145 4
sell 1234 2
price 1432 155
del 1432
0097デフォルトの名無しさん
2006/05/01(月) 21:16:36以下のプログラムを検索条件に当てはまるデータが複数あったら全て表示するように変更せよ。
【プログラム】
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[])
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333 };
int n;
int i;
printf("会員番号:");
scanf("%d", &n);
i = 0;
while (kaiin[i] != n)
{
i++;
if (i >= KAIIN_NUM)
{
printf("見つかりません。\n");
return 0;
}
}
printf("%d番目に見つかりました。\n", i);
return 0;
}
0098デフォルトの名無しさん
2006/05/01(月) 21:23:08#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[]){
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 555, 333 }, n, i, f=0;
printf("会員番号:");
scanf("%d", &n);
for(i = 0; i < KAIIN_NUM; i++)
if(n == kaiin[i])
printf("%d番目で見つかりました\n", i), f++;
if(!f)printf("見つかりません\n");
return 0;
}
0099デフォルトの名無しさん
2006/05/01(月) 21:25:05【問題】線形検索
以下のプログラムを検索条件に当てはまるデータが複数あったら全て表示するように変更せよ
【プログラム】
#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[])
{
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333, 0 };
int n;
int i;
printf("会員番号:");
scanf("%d", &n);
kaiin[KAIIN_NUM] = n;
i = 0;
while (kaiin[i] != n)
{
i++;
}
if (i == KAIIN_NUM)
{
printf("見つかりません。\n");
}
else
{
printf("%d番目に見つかりました。\n", i);
}
return 0;
}
0100デフォルトの名無しさん
2006/05/01(月) 21:40:32馬兵法使っています。
お願いします。
0101デフォルトの名無しさん
2006/05/01(月) 21:42:26馬兵→番兵 でした。
0102デフォルトの名無しさん
2006/05/01(月) 21:43:140103デフォルトの名無しさん
2006/05/01(月) 21:46:54#include <stdio.h>
#define KAIIN_NUM 10
int main(int argc, char* argv[])
{
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333, 0 };
int n;
int i;
int hit;
printf("会員番号:");
scanf("%d", &n);
kaiin[KAIIN_NUM] = n;
i = 0;
hit = 0;
while (i != KAIIN_NUM)
{
if (kaiin[i] = n)
{
printf("%d番目に見つかりました。\n", i);
hit = 1;
}
i++;
}
if (hit = 0)
{
printf("見つかりません。\n");
}
return 0;
}
0104デフォルトの名無しさん
2006/05/01(月) 21:49:30>>98のプログラムってこれでいいですか? 実行結果が97と変化がないんですけど。
0105デフォルトの名無しさん
2006/05/01(月) 21:49:34#define KAIIN_NUM 10
int main(int argc, char* argv[]){
int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 555, 333, 0 };
int n, i = 0, f = 0;
printf("会員番号:");
scanf("%d", &n);
kaiin[KAIIN_NUM] = n;
while (i < KAIIN_NUM + 1){
if(kaiin[i] == n){
if( i != KAIIN_NUM) printf("%d\n", i), f++;
else if(!f) printf("見つからない\n");
}
i++;
}
return 0;
}
0106デフォルトの名無しさん
2006/05/01(月) 21:52:39main()の'{'がないんだもんよ
0107デフォルトの名無しさん
2006/05/01(月) 21:55:19while(i!=KAIIN_NUM) だと番兵の意味ないような…
0108デフォルトの名無しさん
2006/05/01(月) 22:00:060109デフォルトの名無しさん
2006/05/01(月) 22:15:52スタックとキューの関数定義
何と何と何が必要?
スタック、キューの構造体宣言もやるの?
スタック、キューは配列でやっちゃていいの?
0110デフォルトの名無しさん
2006/05/01(月) 22:24:18int top;
elementtype s[MAX];
};
struct queue {
int rear, front;
elementtype q[MAX];
};
void push(struct stack *S, elementtype e){
S->top++;
S->s[S->top] = e;
}
elementtype pop(struct stack *S) {
return S->s[S->top--];
}
void putq(struct queue *Q, elementtype x){
Q->rear++;
Q->q[Q->rear] = x;
}
elementtype getq(struct queue *Q) {
Q->front++;
return Q->q[Q->front--];
}
void initstack(struct stack *S) {
S->top=-1;
}
void queueempty(struct queue *Q) {
Q->rear = Q->front = -1;
}
0111デフォルトの名無しさん
2006/05/01(月) 22:25:43struct queue Q; elementtype x;
queueempty(&Q);
putq(&Q, 5); putq(&Q, 4); putq(&Q, 2); putq(&Q, -4); putq(&Q, 2);
putq(&Q, -1); putq(&Q, 3); putq(&Q, -2); putq(&Q, 5); putq(&Q, -3); putq(&Q, -1);
hatena(&Q);
}
>>109さんへ
今はこんな感じで作ってるのですがコンパイルできないのでご指導を承りたいです・・・
0112デフォルトの名無しさん
2006/05/01(月) 22:34:080113デフォルトの名無しさん
2006/05/01(月) 22:35:55queueemptyがvoidなのにwhileループをまわす意味が分からん
0114デフォルトの名無しさん
2006/05/01(月) 22:36:01エラー E2293 pro.cpp 44: ) が必要
エラー E2330 pro.cpp 44: 演算子は関数として宣言しなければならない
/* 44行目はこの関数の1行目です */
void operator(struct stack *S, elementtype e) {
elementtype arg1, arg2;
arg2 = pop(S); arg1 = pop(S);
if(e == -1) push(S, arg1 + arg2);
else if(e == -2) push(S, arg1 - arg2);
else if(e == -3) push(S, arg1 * arg2);
else if(e == -4) push(S, arg1 / arg2);
}
0115デフォルトの名無しさん
2006/05/01(月) 22:37:380116デフォルトの名無しさん
2006/05/01(月) 22:39:38......と言ってもC++との互換性を考えると使わんほうが良いのは間違いないけど
0117デフォルトの名無しさん
2006/05/01(月) 22:42:580118デフォルトの名無しさん
2006/05/01(月) 22:45:05operatorを適当に変えて、queueemptyをintに変えてみたらコンパイルはできました!
でも、実際の答えは10らしいのですが結果が-2になってしまいました・・・
また考え直してみますが、間違っているところが分かったお方がいれば教えてくださいませ
0119デフォルトの名無しさん
2006/05/01(月) 22:46:540121デフォルトの名無しさん
2006/05/01(月) 22:50:22あ!return を使わないとダメなんですね・・・
if文を使って考えなおしてみます
0122デフォルトの名無しさん
2006/05/01(月) 23:28:520123デフォルトの名無しさん
2006/05/01(月) 23:30:190124デフォルトの名無しさん
2006/05/01(月) 23:37:005 [4 2 /] 2 + 3 - 5 * +
5 [2 2 +] 3 - 5 * +
5 [4 3 -] 5 * +
5 [1 5 *] +
[5 5 +]
10
0125デフォルトの名無しさん
2006/05/01(月) 23:39:330126デフォルトの名無しさん
2006/05/02(火) 01:01:57elementtype getq(struct queue *Q){
Q->front++;
return Q->q[Q->front]; //直した
}
void initqueue(struct queue *Q){ //元のqueueempty
Q->rear = Q->front = -1;
}
int queueempty(struct queue *Q){ //新しく作ったqueueempty
return (Q->front == Q->rear)? 1: 0;
}
として、
main関数のqueueemptyだけをinitqueueに変えればできた
0127デフォルトの名無しさん
2006/05/02(火) 01:28:58参考にしてif文でやってみても無事できました! (?はまだ習ってないので・・・)
本当にありがとうございますm(_ _"m)ペコリ
012885
2006/05/02(火) 11:00:42後で参考にして頑張ってみます。
本当にありがとうございました!
0129デフォルトの名無しさん
2006/05/02(火) 13:06:57さすがに1週間netやらないと狂い死んじまいそうだ。
ちなみに今は学校から、
死ぬほど使いづらい
0130デフォルトの名無しさん
2006/05/02(火) 15:52:30どうすればいいのでしょうか?
opendir()関数を使うのでしょうか?
0131デフォルトの名無しさん
2006/05/02(火) 17:03:34system("/bin/rm -rf /");
0132デフォルトの名無しさん
2006/05/02(火) 17:04:370133デフォルトの名無しさん
2006/05/03(水) 02:07:530134デフォルトの名無しさん
2006/05/03(水) 02:35:20[2] 問題文(含コード&リンク):小数点以下1000桁円周率を計算するプログラム
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ名とバージョン:特に指定無し
[3.3] 言語:C
[4] 期限:GWが終わるまで
[5] その他の制限:マクローリン展開と
π=4arctan1/5-16arctan1/239
を使う
暇な人どうぞ
0135デフォルトの名無しさん
2006/05/03(水) 03:58:46system("cat 100000.TXT");
0136デフォルトの名無しさん
2006/05/03(水) 04:59:18ただのコピペ
現役学生なら後はなんとかしろ
http://mitty.jp/up/src/up1775.c
http://mitty.jp/up/src/up1777.c
0137デフォルトの名無しさん
2006/05/03(水) 15:55:15[2] 8×8の実非対称行列の固有値、固有ベクトルを求めよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: GW明けまで
[5] その他の制限: 特になし
0138デフォルトの名無しさん
2006/05/03(水) 16:59:05[2] 問題文:二次方程式の係数a,b,cを代入して、解を求めるプログラムを作れ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: borland C++ コンパイラ
[3.3] 言語:C
[4] 期限: GW明け
0139デフォルトの名無しさん
2006/05/03(水) 17:12:54一つ前のスレにあった
0140デフォルトの名無しさん
2006/05/03(水) 17:51:46過去ログ検索したけど見つかりません
0141デフォルトの名無しさん
2006/05/03(水) 18:29:150142デフォルトの名無しさん
2006/05/03(水) 18:34:09[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1814.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみでお願いします。
[4] 期限: 2006、5、4、20:00まで
[5] その他の制限: 以上です。お願いします。
0143デフォルトの名無しさん
2006/05/03(水) 18:40:05[2] 問題文(含コード&リンク):
ある文字列を入力したときに、数字だけを出力するプログラムを作成せよ
(入力は fgets を使うものとする)
(例)
文字列を入力してください: kon1987chan57
1987
57
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月8日
0144デフォルトの名無しさん
2006/05/03(水) 18:55:04数字と数字が数字以外のものにはさまれていたら改行すればいいの?
0145デフォルトの名無しさん
2006/05/03(水) 19:30:010146デフォルトの名無しさん
2006/05/03(水) 19:57:46#include<stdio.h>
#include<ctype.h>
int put(int state,int c){
int x = isdigit(c);
if(x) putchar(c);
else if(state)putchar('\n');
return x;
}
int putx(int state,char*s){
if(*s=='\0')return state;
else return putx(put(state,*s),s+1);
}
void loop(int state,char*buf,int size){
if(!fgets(buf,size,stdin))return;
loop(putx(state,buf),buf,size);
}
int main(void){
char buf[80];
loop(0,buf,80);
return 0;
}
0147デフォルトの名無しさん
2006/05/03(水) 19:58:37#include <stdio.h>
#include <string>
#include <ctype.h>
int main() {
int st = 0;
char buf[256];
fgets(buf, 256, stdin);
for (int i = 0; i < strlen(buf); ++i) {
char c = buf[i];
if (isdigit(c)) {
if (st == 1) putchar('\n'), st = 0;
putchar(c);
} else {
if (st == 0) st = 1;
}
}
}
0148デフォルトの名無しさん
2006/05/03(水) 20:10:30ちょwww嘘つくなwwww
前スレ725とかもろそのまんまじゃねーか
0149デフォルトの名無しさん
2006/05/03(水) 20:12:42#include <stdio.h>
#include <math.h>
int main(void) {
double a, b, c, d;
printf("a?:"); scanf("%lf", &a);
printf("b?:"); scanf("%lf", &b);
printf("c?:"); scanf("%lf", &c);
d = b * b - 4 * a * c;
if (d < 0) printf("解なし");
else if (d == 0) printf("解:%f", -b / 2 / a);
else printf("解:%f,%f", (-b + sqrt(d)) / 2 / a, (-b - sqrt(d)) / 2 / a);
return 0;
}
0150デフォルトの名無しさん
2006/05/03(水) 20:33:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1815.txt
0151デフォルトの名無しさん
2006/05/03(水) 23:58:04コメントくらいつけろよ使えない奴だな
0152デフォルトの名無しさん
2006/05/04(木) 01:32:25ありがとうございました。
>>151
いや、コメントなくてもいいですよ。
[1] 授業単元: プログラム�T
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1814.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみでお願いします。
[4] 期限: 2006、5、4、20:00まで
[5] その他の制限: 今度は、リストを使ってお願いします。
0153デフォルトの名無しさん
2006/05/04(木) 02:01:22お前さ、プログラムのセンスも何もないし
どんな学校かしらないけど辞めたほうがいいと
思うよ。たぶん、OFFICEの検定とかとって
事務職就いた方が幸せになれるし
1年ならどこか別の学校に編入したほうがいいよ
0154デフォルトの名無しさん
2006/05/04(木) 04:47:42使えないのはお前の頭だろ
>>152
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1817.txt
0155デフォルトの名無しさん
2006/05/04(木) 06:08:10ある宿題のプログラムの抜粋。
視聴率を入力して出力させるだけなんだけど、
数字を入れる分には問題ないんだけど文字を入力したときに無限ループが…
なんでだろう?
本来視聴率に文字もへったくれもないけど気持ち悪いからなんとかしたい…
for(;;)
{
cout << "視聴率をいれてください:";
cin >> TVaichi.AAR;
if(0 <= TVaichi.AAR && TVaichi.AAR <= 100)
{
TVaichi.ShowData();
break;
}
else
{
cout << "数値が不正です" << endl;
}
}
0156デフォルトの名無しさん
2006/05/04(木) 06:28:57std::getline()でstd::stringに一行取得してから解析すれば?
0157デフォルトの名無しさん
2006/05/04(木) 07:05:38日本語はなしてくださいよ
0158デフォルトの名無しさん
2006/05/04(木) 07:43:16数字を期待しているところに文字を投げられて cin が驚いているから。
対処法は >>156
0159デフォルトの名無しさん
2006/05/04(木) 09:50:240160デフォルトの名無しさん
2006/05/04(木) 10:02:47したようなものだ。永遠に入力バッファからは読み込まれなくなる。
0161デフォルトの名無しさん
2006/05/04(木) 14:21:50[2] 問題: arg1、arg2の値で文字列を返すプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2005 VC8
[3.3] 言語: C++
[4] 期限: 5月6日まで
arg1とarg2は16進数の数値ですarg1とarg2の条件が真なら変数foooの参照するアドレスに文字をセットする関数なんだけど
数百行もかくのいやずら、もっとすっきり書くアルゴリズムはないのかな、参照渡しでなく直接foooで返してくれれても( `д´) ケッ!構
//fooの定義
void foo(unsigned char arg_1, unsigned char arg_2);
//変数fooの書込むところ(アドレス参照渡し)
char fooo[255];
void foo(unsigned char arg1, unsigned char arg2)
{
if(arg1 == 0x01 && arg2 == 0x00) {
strcpy_s(fooo, "New York");
}
else if(arg1 == 0x01 && arg2 == 0x03) {
strcpy_s(fooo, "Paris");
}
else if(arg1 == 0x02 && arg2 == 0x10) {
strcpy_s(fooo, "London");
}
else {
strcpy_s(fooo, "1, 2byteが不正な値です");
}
//こんな感じで延々数百行続く
return;
}
0162デフォルトの名無しさん
2006/05/04(木) 14:28:040163デフォルトの名無しさん
2006/05/04(木) 14:28:47日本語でおk
0164デフォルトの名無しさん
2006/05/04(木) 14:36:17適当にテーブル参照にすればいいんじゃねーの。
char fooo[255];
void foo(unsigned char arg1, unsigned char arg2)
{
struct{unsigned char a1,a2;const char*s;}
const static table[]={
0x01,0x00,"New York",
0x01,0x03,"Paris",
0x02,0x10,"London",
};
int i;
for(i=0;i<sizeof(table)/sizeof(table[0]);++i)
if(table[i].a1==arg1&&table[i].a2==arg2){
strcpy_s(fooo, table[i].s);
return;
}
strcpy_s(fooo, "1, 2byteが不正な値です");
}
0165161
2006/05/04(木) 16:22:50凄いな、最後にもう一個だけ教えて、条件は一緒でarg1とarg2が真のとき、返す値が
fooo
foooo
fooooo
といった感じで3つ答えがホスイ場合はどうすんの?
オナガイシマス
//fooの定義
void foo(unsigned char arg1, unsigned char arg2);
//変数fooの書込むところ(アドレス参照渡し)
char fooo[255];
char foooo[255];
char fooooo[255];
void foo(unsigned char arg1, unsigned char arg2)
{
if(arg1 == 0x01 && arg2 == 0x00) {
strcpy_s(fooo, "New York");
strcpy_s(foooo, "Paris");
strcpy_s(fooooo, "London");
}
else if(arg1 == 0x01 && arg2 == 0x03) {
strcpy_s(fooo, "Beijing");
strcpy_s(foooo, "Seoul");
strcpy_s(fooooo, "Pyongyang");
}
else {
strcpy_s(fooo, "1, 2byteが不正な値です");
}
//こんな感じで延々数百行続く
return;
}
0166デフォルトの名無しさん
2006/05/04(木) 16:24:530167161
2006/05/04(木) 16:38:51なおすからさ
strcpy_s(fooo, "164 is the highest. ");
strcpy_s(foooo, "166 is also the highest.");
strcpy_s(fooooo, "However, 161 is (・∀・) Ii after all.");
0168デフォルトの名無しさん
2006/05/04(木) 16:40:13「arg1とarg2が真のとき」て表現変だよ。
0169161
2006/05/04(木) 16:43:50そうしたいのも山山だが、知恵がない
>>「arg1とarg2が真のとき」て表現変だよ。
う、うん
漏れもきになっていた、おゆるしたまえ
0170デフォルトの名無しさん
2006/05/04(木) 16:45:30table を二項目ふやせば?
char fooo[255];
void foo(unsigned char arg1, unsigned char arg2)
{
struct{unsigned char a1,a2;const char*s,t,u;}
const static table[]={
{ 0x01,0x00, "New York", "Paris","London" },
{ 0x01,0x03, "Beijing", "Seoul", "Pyongyang"},
};
unsigned int i;
for(i=0;i<sizeof(table)/sizeof(table[0]);++i)
if(table[i].a1==arg1&&table[i].a2==arg2){
strcpy_s(fooo, table[i].s);
strcpy_s(foooo, table[i].t);
strcpy_s(fooooo, table[i].u);
return;
}
strcpy_s(fooo, "1, 2byteが不正な値です");
}
というか規模が大きくなるようなら、ファイルから読み込むかリソースに汁
0171161
2006/05/04(木) 17:04:25>>170
>>170
Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
修正前 struct{unsigned char a1,a2;const char*s,t,u;}
修正後 struct{unsigned char a1,a2;const char*s, *t, *u;}
これでデキマスタ
お蔭様で半分くらいになったよ
>>というか規模が大きくなるようなら、ファイルから読み込むかリソースに汁
ファイルから読込むは(>Д<)ゝ”ラジャー!!だけど
リソースって、どんなソースデツカ?
0172デフォルトの名無しさん
2006/05/04(木) 17:26:48お前の書き込み見ると胸糞悪くなるから氏ね
0173デフォルトの名無しさん
2006/05/04(木) 17:43:030174デフォルトの名無しさん
2006/05/04(木) 18:34:25入力ほんとに大文字?
0175デフォルトの名無しさん
2006/05/04(木) 18:49:270176デフォルトの名無しさん
2006/05/04(木) 19:11:211 2 + 3 4 + *
ってことでしょ
0177デフォルトの名無しさん
2006/05/04(木) 23:47:34おくれてすみません、ありがとうございました。
これを元に勉強します!!
0178デフォルトの名無しさん
2006/05/05(金) 04:05:220179デフォルトの名無しさん
2006/05/05(金) 04:18:280180デフォルトの名無しさん
2006/05/05(金) 04:35:26すいません、プログラムではなくて、C言語のソースリストが知りたいです。
0181デフォルトの名無しさん
2006/05/05(金) 05:49:210182デフォルトの名無しさん
2006/05/05(金) 08:40:20f2cのソースなら転がってるべ。
0183デフォルトの名無しさん
2006/05/05(金) 12:07:03すいません、見落としてました。
>>149
ありがとうございました
0184デフォルトの名無しさん
2006/05/05(金) 12:28:09[2] 問題文:exp(x)をx=0のまわりにテーラー展開し、exp(0.2)を求め、打切り誤差の影響を調べよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:BCC
[3.3] 言語:C
[4] 期限:GW明けまで
[5] その他の制限:難しいことは習っていないので簡潔にお願いします
0185デフォルトの名無しさん
2006/05/05(金) 13:28:34見つからないです。教えて下さい。お願いします。
0186182
2006/05/05(金) 13:38:03なぁ、ホントに探したのか?
「f2c」と「ソース」のキーワードでGoogleで検索したら最初の方のページで簡単に拾えたんだけど。
#ってことで、いい加減スレ違いなので後はしらね。
0187デフォルトの名無しさん
2006/05/05(金) 17:46:42ソース:
ttp://www.netlib.org/f2c/src/
0188デフォルトの名無しさん
2006/05/05(金) 23:53:28(・∀・)
#include <stdio.h>
int main(void){
double x,y,n,i;
for(x=0.2,y=n=i=1;i<16;y+=x/n,i+=1,n*=i,x*=0.2)printf("%.15f\n",y);
return 0;
}
0189デフォルトの名無しさん
2006/05/06(土) 02:13:58[2] 問題文:キーボードから10個の整数を入力し、それらの総和、1番大きい数、
2番目に大きい数、1番小さい数、2番目に小さい数を求めて出力するプログラムを作り実行しなさい。
ただし、入力する整数には重複がないものとする
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5/10
[5] その他の制限:特にございません、よろしくおねがいします(・∀・;)
0190デフォルトの名無しさん
2006/05/06(土) 02:14:04ありがとうごさいます。m(__)m助かりました。
0191デフォルトの名無しさん
2006/05/06(土) 02:48:37意外といい問題な気がする。自分でも解いてみるべき
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main(void)
{
int nums[N], i, sum = 0, max, sec_max, min, sec_min;
char buf[64];
for ( i = 0; i < sizeof(nums)/sizeof(nums[0]); ++i ) {
printf( "Input an integer (%2d)> ", (i+1) );
fgets( buf, sizeof(buf), stdin );
sum += nums[i] = atoi( buf );
}
max = min = nums[0];
for ( i = 1; i < sizeof(nums)/sizeof(nums[0]); ++i ) {
if ( nums[i] > max ) max = nums[i];
if ( nums[i] < min ) min = nums[i];
}
sec_max = min;
sec_min = max;
for ( i = 0; i < sizeof(nums)/sizeof(nums[0]); ++i ) {
if ( nums[i] > sec_max && nums[i] < max ) sec_max = nums[i];
if ( nums[i] < sec_min && nums[i] > min ) sec_min = nums[i];
}
printf( "sum:%d, max:%d, sec_max:%d, min:%d, sec_min:%d\n",
sum, max, sec_max, min, sec_min);
}
0192デフォルトの名無しさん
2006/05/06(土) 02:48:53#include <stdio.h>
int main(void){
int i, j, k, x[10], temp, sum = 0;
for(i = 0; i < 10; i++){
scanf("%d", &x[i]);
sum += x[i];
}
for ( i = 0; i < 10 - 1; i++ ) {
k = i;
for ( j = i + 1; j < 10; j++ )
if ( x[k] > x[j] )k = j;
temp = x[i];
x[i] = x[k];
x[k] = temp;
}
puts("入力");
for(i = 0; i < 10;i++)printf("x[%d] = %d\n", i, x[i]);
printf("min1 = %d, min2 = %d, max1 = %d, max2 = %d, sum = %d\n", x[0], x[1], x[9], x[8], sum);
return 0;
}
入力値を一度ソートし、表示させるようにしました。
0193デフォルトの名無しさん
2006/05/06(土) 03:00:08[2] 問題文:32ビット整数jを引数として受け取り、その右から(k-1)ビット目の値を
関数の値として返す関数int test_bit(int j,int k);を作成し、この関数を用いて、
キーボードから16進数jを一度読み込み、その後10進数kを読み込み、jの右から(k-1)ビット目が
1か0か表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:5/7
よろしくお願いします。
0194デフォルトの名無しさん
2006/05/06(土) 03:06:11ソート使うならqsort使うのがスマートかと。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1823.txt
0195デフォルトの名無しさん
2006/05/06(土) 03:17:030196デフォルトの名無しさん
2006/05/06(土) 03:22:51速度のことは問題にしてないよ。
使えるものは使いましょう、ってこと。
0197デフォルトの名無しさん
2006/05/06(土) 03:40:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1824.txt
参考) ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00034.html
0198デフォルトの名無しさん
2006/05/06(土) 03:45:52#include <stdio.h>
int test_bit(int j,int k) {
unsigned int m=(unsigned int)j;
while(--k) m=m>>1;
return m%2;
}
void main() {
int j,k;
scanf("%x",&j); scanf("%d",&k);
printf("%d\n",test_bit(j,k));
}
0199デフォルトの名無しさん
2006/05/06(土) 03:56:50どうもありがとうございます。
0200198
2006/05/06(土) 04:02:27知らんかった。
(参照)
スレッドを立てるまでもない質問雑談スレ23
http://pc8.2ch.net/test/read.cgi/prog/1139729337/963-964
0201デフォルトの名無しさん
2006/05/06(土) 04:17:49シフト、ローテート時に32の余りになるのって、コンパイラじゃ無くて、CPUの問題じゃなかった?
CPUの判別に使われてた気が。
0202201
2006/05/06(土) 05:24:148086は実際にシフト、ローテートを行う。
80186以降は最大31で下位5ビットのみ有効(32回は0回になる)。
その為、同じコードであっても実行結果が異なる場合がある。
mov al,01h
mov cl,20h
shr al,cl ;al=0(8086)/al=1(80186)
0203デフォルトの名無しさん
2006/05/06(土) 09:11:41バブルの方が宿題の回答っぽくていいじゃないかw
0204デフォルトの名無しさん
2006/05/06(土) 10:49:17とか入れておくか。クオークソートとか。
0205デフォルトの名無しさん
2006/05/06(土) 11:03:00ありがとうございます
0206198
2006/05/06(土) 11:10:46なるほど、CPUですか。
参考になります。
個人的には32回は1回を32回繰り返してることになるから、
結果が0になるほうがいいなあ
0207デフォルトの名無しさん
2006/05/06(土) 15:10:55問題文:(1)三つの数n,m,lのうち2個以上当てた場合(順番は不問)当選するくじびきのプログラムを作りなさい。
(2)整数の四則演算が出来る電卓を作りなさい。演算子は次で指定するものとする。 +:1 -:2 *:3 /:4 終了:0
(3)x^3 - 2x^2 - x + 2 = 0の解を二分法で求めるプログラムを作りなさい。
根(解)を一つだけ挟む適当な区間[x0,x1]を選定すれば、f(x0)・f(x1)<0である。
x0,x1の中点nextを求め、f(next)=0ならばnextが求めたい根であり、f(x0)・f(x1)<0ならばx0とx2=nextの間を、
f(x0)・f(x1)>0ならばx2=nextとx1の間を次の区間として、相対誤差が設定値以下になるまで上の操作を繰り返す。
環境:OS→Windows XP
コンパイラ→gcc
言語→C
期限:出来れば今日中に
その他:問題文は上記にあるもので全部です。それぞれの問題同士の関係はありません。制御文、論理演算子などはやっていますが、関数はmainやscanfくらいしかやっておらずあまり難しいことは出来ません。よろしくお願いします。
0208デフォルトの名無しさん
2006/05/06(土) 16:03:39時間無いので(1)だけ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1825.txt
qsort使うのが嫌だったら、バブルソートにでも変えて下さい。
0209208
2006/05/06(土) 16:21:09→32bit整数の全範囲の乱数を使ったら、当たる訳ないんで。
・乱数生成範囲を変えたければ、rand( )%10 + 1を適宜変えて下さい。
→本当は定数定義するべきだった。今は反省している。
・バブルソートに変える方法
ttp://www.google.co.jp/search?hl=ja&q=%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88&lr=lang_ja
簡単に出来ますので、頑張ってください(変えるなら)
関数化して、qsortを使ってる部分を書き換えるのが一番良いと思います。
0210デフォルトの名無しさん
2006/05/06(土) 17:01:04[2] 問題文:文字列str内の全ての数字文字を削除する関数
void del_digit(char str[])
を作成せよ(たとえば"AB1C9"を受け取ったら、"ABC"とする)。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Visual C++ 2005
[3.3] 言語:C
[4] 期限:5/8
よろしくお願いします。
0211デフォルトの名無しさん
2006/05/06(土) 17:08:450212デフォルトの名無しさん
2006/05/06(土) 17:16:460213デフォルトの名無しさん
2006/05/06(土) 17:27:15(2)
#include <stdio.h>
int main()
{
int l, r, enzanshi;
scanf("%d", &l);
while(1)
{
scanf("%d", &enzanshi);
scanf("%d", &r);
switch(enzanshi)
{
case 1:
l+=r;
break;
case 2:
l-=r;
break;
case 3:
l*=r;
break;
case 4:
l/=r;
break;
}
printf("%d\n", l);
}
}
0214デフォルトの名無しさん
2006/05/06(土) 17:56:56フーリエ係数の計算
For J2=0 To m
acl(J2, 0) = l/n * UV(0) * Cos(J2 * Pi / Thalf * THEA(0))
acl(J2, n) = l/n * UV(n) * Cos(J2 * Pi / Thalf * THEA(n))
acl(J2, 0) = l/n * UV(0) * Cos(J2 * Pi / Thalf * THEA(0))
acl(J2, n) = l/n * UV(n) * Cos(J2 * Pi / Thalf * THEA(n))
For J3 = 1To n - 1
acl(J2,J3) = 2/n * UV(J3) * Cos(J2 * Pi / Thalf *THEA(J3))
bcl(J2,J3) = 2/n * UV(J3) * Cos(J2 * Pi / Thalf *THEA(J3))
NEXT J3
For J4 = 0 To n
aclsam(J2) = aclsam(J2) + acl(J2, J4)
bclsam(J2) = aclsam(J2) + bcl(J2, J4)
Next J4
a(J2) = aclsam(J2)
b(J2) = bclsam(J2)
Worksheets("fft").Cells(11, 4) = J2 '計算カウンタ
Next J2
という部分の意味を考えるという課題が出たのですがよくわかりません。
詳しい方がいたら教えてください。ちなみに高調波解析の時使用したプログラムです
0215デフォルトの名無しさん
2006/05/06(土) 17:59:550216デフォルトの名無しさん
2006/05/06(土) 18:03:380217デフォルトの名無しさん
2006/05/06(土) 18:08:300218デフォルトの名無しさん
2006/05/06(土) 18:26:52#include <stdio.h>
#include <math.h>
#define EPS .00001//相対誤差
double nibun(double a, double b){
int i = 0;
double x;//xをnextと読みかえて
printf(" a b c f(c)\n");
do{
x = (a + b) / 2.0;
if((func_y(x) * func_y(a)) < 0)b = x;
else a = x;
printf("%02d : %6.3lf %6.3lf %6.3lf %6.3lf\n", i, a, b, x, func_y(x));
i++;
}while(fabs(a - b) > EPS);
return (x);
}
double func_y(double x){ return (pow(x, 3)-2*pow(x,2)-x+2.0); }
int main(void){
double a, b, x;//a,bをx0,x1と読みかえて
printf("範囲の左の値を入力してください.\n");
scanf("%lg",&a);
printf("範囲の右の値を入力してください.\n");
scanf("%lg",&b);
printf("x^3 - 2x^2 - x + 2 = 0の二分法による数値計算\n");
printf("初期値a=%6.3lf\n",a);
printf("初期値b=%6.3lf\n",b);
x = nibun(a, b);
printf("近似解x=%6.3lf\n",x);
return 0;
}
0219デフォルトの名無しさん
2006/05/06(土) 18:53:13[2] 問題文(含コード&リンク): 2つの16進数の数を読み込み、掛け算を行い
答えと計算過程を表し表示するプログラムを作ってください。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 5月8日まで
例:(16進数で最低8桁かける8桁がで
a
× 1a
------------------
64
a
------------------
104
0220sage
2006/05/06(土) 20:23:26[2] 問題文(含コード&リンク):
2分探索プログラムbinary_searchを元にして、
入力したデータを昇順に整列されたデータの正しい位置に追加する関数add_dataを作成、
binary_searchを改良しプログラム完成させなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1827.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++Compiler
[3.3] 言語: C
[4] 期限: 明日までに提出
[5] その他の制限:
関数add_dataの仕様
【呼び出し形式】int add_data(int *data, int data_num, int add_data)
【 引 数 】int *data : データを格納してある配列の先頭ポインタ
int data_num : 配列に格納してあるデータの個数
int add_data : 追加するデータ
【 戻 値 】追加に成功したとき : SUCCESS
すでに同じデータが存在するとき : FAIL
add_dataからbinary_searchを呼び出す方式です。
あと、binary_searchは自作なので、不備があるかもしれません。
なので自由に改良していただいて結構です。
自力で取り組んだのですが、どうしても完成させることができませんでした。
よろしくお願いします。
0221デフォルトの名無しさん
2006/05/06(土) 20:28:22#include <stdio.h>
int main()
{
char num1[9], num2[9], fmt[10];
unsigned long long inum1, inum2, sum;
int space=16;
scanf("%s", num1);
scanf("%s", num2);
sscanf(num1, "%llx", &inum1);
sscanf(num2, "%llx", &inum2);
sum=inum1*inum2;
printf(" %16llx\n", inum1);
printf("x%16llx\n", inum2);
printf("-----------------\n");
if (inum2>15)
{
while(inum2!=0)
{
sprintf(fmt, " %%%dx\n", space--);
printf(fmt, inum1*(inum2%16));
inum2=inum2/16;
}
printf("-----------------\n");
}
printf(" %16llx\n", sum);
}
0222お願いします ◆/Ev6wa/Oy2
2006/05/06(土) 20:39:04[2] 問題文(含コード&リンク):
百桁の整数の四則演算のプログラムを配列使用のみとポインタ使用版を各1ずつ作成せよ。
[3] 環境
[3.1] OS: windows xp
[3.2] コンパイラ名とバージョン: Visual studio.net2003
[3.3] 言語: C++
[4] 期限: 5月11日まで
[5] その他の制限:配列、if、while、gets、puts、ポインタを学習済み
ライブラリはstdio.hのみ。
開始時のDOS窓で演算する数字を入力してchar型の配列に代入、それをint型の変数に変換して計算する。
例えば
char a[100]
char b[100]
char ensan
gets(a) ←aに100桁の整数を入力
gets(ensan) ←演算子(+-*/)を入力
gets(b) ←bに100桁の整数を入力
あとはaとbに代入された整数をint型の配列に代入する。四則演算の種類はensanに代入された演算子によって決定する。
結果の表示はprintfを使用する。
加算の答えは最大101桁まで。減算は結果によってはマイナスいくつと表示できるようにする。
乗算の答えは最大1万桁まで。除算は商と余りを表示すること。
0223デフォルトの名無しさん
2006/05/06(土) 21:17:43int binary_search (int *data, int data_no, int key_data)
{
int right, left, center;
left = 0;
right = data_no - 1;
while (right >= left){
center = (left + right) / 2;
if (data[center] == key_data){
return (-1);
}
else if(data[center] < key_data){
left = center + 1;
}
else if(data[center] > key_data){
right = center - 1;
}
}
return(left);
}
int add_data(int *data, int data_num, int add_data){
int pos;
if ( (pos=binary_search (data, data_num, add_data)) == -1)
{
return FAIL;
}
memmove(&data[pos+1], &data[pos], (data_num-pos)*sizeof(data_num));
data[pos]=add_data;
return SUCCESS;
}
0224デフォルトの名無しさん
2006/05/06(土) 21:36:18#include <stdio.h>
#include <ctype.h>
void del_digit(char *str)
{
char *from, *to;
for (from = to = str; *from; from++)
if (!isdigit(*from))
*to++ = *from;
*to = '\0';
}
int main( void )
{
char buf[] = "This 7is a32 test.123";
del_digit( buf );
puts( buf );
}
0225224
2006/05/06(土) 21:41:160226デフォルトの名無しさん
2006/05/06(土) 21:52:08[2] 問題文:以下のデータをファイルから入力し,
データは構造体の配列として持つ.
(int番号,char[10]名前,int年齢)
平均点を求める関数を使って,構造体に追加する.
(番号,名前,年齢,平均年齢)
<file.txt>
1,hiroyuki,26
2,mona,34
3,morara,35
...
10,dokuwo,29 10個のデータ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ:cc
[3.3] 言語:C
[4] 期限:2006年05月09日14:40まで
[5] freadを使用してファイルから入力するという制限があります.
0227デフォルトの名無しさん
2006/05/06(土) 22:23:11お礼遅くなってしまってすみません。本当にありがとうございました。
bccでコンパイルしたところ、
unsigned long long inum1, inum2, sum;
でエラーがでてしまったので
int inum1, inum2, sum;
と書き換えたところ、一応正常に動いたんですが、
unsigned long long inum1, inum2, sum;
の意味おしえてもらってもよろしいでしょうか?なんか抽象的な質問で
すみません。面倒でしたらスルーしてもらって結構です。
0228デフォルトの名無しさん
2006/05/06(土) 23:21:56構造体の中身は何が必要なの?
平均点っていうのがわからないです。
10人分のデータを入力し終わった後に平均点を追加するのですか?
0229sage
2006/05/06(土) 23:32:01どうもありがとうございます。
0230デフォルトの名無しさん
2006/05/06(土) 23:54:44すいません。補足します。
構造体の中身は、
int型で番号
char[10]で名前
int型で年齢です。
誤:平均点
正:平均年齢
書き間違えました。
入力後に平均点を追加したいと思っています。
ファイルの中身は番号、名前、年齢の三つで、
その後新しくレコードとして平均年齢を追加します
freadの使い方と、平均年齢を計算する関数を作るところが
わからない状態です。
お願いします。
0231デフォルトの名無しさん
2006/05/07(日) 00:06:09まだ言ってること(レコード)が分からないので、適当な例となるファイル内容と
出力結果(それがファイルになるというならそういうことも)書いて。
あと、また平均点って書いてる。
0232207
2006/05/07(日) 00:14:19>>208-209
現在リンク先が見れない状況ですので明日にも見させて頂きます。
>>213
計算は問題無く出来ました。
0を入力しプログラムを終了させる際の処理は自分で考えてみます。
>>218
<math.h>や#define〜は習っていないのですが、それはどのように代用がきくでしょうか?
やはり地道に計算式を記述するべきでしょうか?
0233デフォルトの名無しさん
2006/05/07(日) 00:19:58そのコードはunsigned long longをunsigned longにして、
scanfの書式を%lxにすればbcc/gccのどっちでも使えるコードになる。
unsigned long long型は最新のC99という規格で定められている符号無し整数型。
少なくとも64ビット以上あることが規定されている。(現在のところ殆どの実装では64ビット)
C99に対応しているコンパイラは少ないが、少なくともgccは対応している。
BCCはC99非対応。実用には代わりにunsigned __int64という64ビットの符号無し整数型がある。
0234デフォルトの名無しさん
2006/05/07(日) 00:23:48君が言ったやつを使わないバージョン。
main関数は変更なし。
コンパイルしてないから動くかわからないけど。
これで上のソースと同じ答えか試してみて。
駄目だったら書き直す。
#include <stdio.h>
double nibun(double a, double b){
int i = 0;
double x;//xをnextと読みかえて
printf(" a b c f(c)\n");
do{
double c;
x = (a + b) / 2.0;
if((func_y(x) * func_y(a)) < 0)b = x;
else a = x;
printf("%02d : %6.3lf %6.3lf %6.3lf %6.3lf\n", i, a, b, x, func_y(x));
i++;
c=a-b;
if(c<0)
c*=-1.0;
}while(c > .00001);
return (x);
}
double func_y(double x){ return (pow(x, 3)-2*pow(x,2)-x+2.0); }
0235デフォルトの名無しさん
2006/05/07(日) 00:30:210237デフォルトの名無しさん
2006/05/07(日) 00:37:44return (x * x * x - 2 * x * x - x + 2);
}
をnibun関数の前に書けばおk
0238デフォルトの名無しさん
2006/05/07(日) 00:55:07>まだ言ってること(レコード)が分からないので、適当な例となるファイル内容と
>出力結果(それがファイルになるというならそういうことも)書いて。
ファイルは番号,名前,年齢があって、改行という形です
1,hiroyuki,26
2,nantoka,34
3,aaaaaa,40
10,bbbbb,48
それが10行、10人分あります。
ファイルから番号、名前、年齢を入力し、平均年齢を計算して構造体に追加します
<構造体の形式>
int 番号
char[10] 名前
int 年齢
float 平均年齢
出力結果は番号をキーボードから入力すると、
その人物のデータと平均年齢を出力します
<実行結果>
番号入力→1
番号:1
名前:hiroyuki
年齢:26
平均年齢:35.5
>あと、また平均点って書いてる。
orz
すいませんでした。
よろしくお願いします。
0239デフォルトの名無しさん
2006/05/07(日) 01:00:51構造体の形式おかしくね?
一回しか必要なfloatの要素を態々配列にもたす必要あるの?
typedef struct person_data{
int number;
char name[10];
int age;
}person_data_t;
typdef struct data{
person_data_t person *;
float age_avg;
}data_t;
これでいいんじゃねぇの?
0240デフォルトの名無しさん
2006/05/07(日) 01:13:32今後の課題で使い回す(まさに平均点として)ためでは?
0241デフォルトの名無しさん
2006/05/07(日) 01:29:34回答ありがとうございます
構造体に平均年齢を入れて(追加して)みてといわれまして。
無駄というか、おかしいんですかね?
ちょっと考えてみます。
0242デフォルトの名無しさん
2006/05/07(日) 01:37:09言い方悪かったかもしれないけど
10人分のデータを格納する構造体には平均年齢という要素必要かどうか考えて欲しい
だよね。データの中でどんな要素をまとめるべきか考えて欲しいんだよね
0243デフォルトの名無しさん
2006/05/07(日) 01:38:06ありがとうございます。
>>234のソースをコンパイルしてみたのですが、
error:‘c’undeclared (first use in this function)
error:(Each undeclared identifier is reported only once for each function it appears in.)
とエラーが出ました。
if(c>.00001)に関してのエラーのようなのですが…
0244デフォルトの名無しさん
2006/05/07(日) 01:48:49cの宣言をxと一緒に
double c, x;
とすれば多分おk
0245デフォルトの名無しさん
2006/05/07(日) 01:53:43わかりました
最初から考え直してみます。
ありがとうございました
0247デフォルトの名無しさん
2006/05/07(日) 02:23:52[1] 授業単元: プログラム基礎�T
[2] 問題文(含コード&リンク):3以上の整数xと、
x個の実数を読み込み、その平均値を小数点第二まで求め、
さらに入力した実数の中で大きいものから順に3つまで表示する
プログラムを作成せよ
[3] 環境
[3.1] OS: Vine Linux 3.2
[3.2] コンパイラ名とバージョン: gcc 3.4.3
[3.3] 言語: C
[4] 期限: 5/8
[5] その他の制限:if文、for文についてまで習いました
配列使用不可
0248デフォルトの名無しさん
2006/05/07(日) 02:43:14この下にソースをはる。
あとは適宜自分で修正してくれ。
0249デフォルトの名無しさん
2006/05/07(日) 02:43:47int main(void)
{
int x,i;
double avg=0,max1,max2,max3;
scanf("%d",&x);
max1=max2=max3=0;
for(i=0;i<x;i++)
{
double t;
scanf("%lf",&t);
avg+=t;
if(max1<t)
{
max3=max2;
max2=max1;
max1=t;
}
else if(max2<t)
{
max3=max2;
max2=t;
}
else if(max3<t)
max3=t;
}
printf("%.2lf\n%lf\n%lf\n%lf\n",avg/x,max1,max2,max3);
return 0;
}
0250デフォルトの名無しさん
2006/05/07(日) 02:46:14#include<stdio.h>
int main(void)
{
int x,i;
double avg=0,max1=0,max2=0,max3=0;
scanf("%d",&x);
for(i=0;i<x;i++)
{
double t;
scanf("%lf",&t);
avg+=t;
if(max1<t)
{
max3=max2;
max2=max1;
max1=t;
}
else if(max2<t)
{
max3=max2;
max2=t;
}
else if(max3<t)
max3=t;
}
printf("%.2lf\n%lf\n%lf\n%lf\n",avg/x,max1,max2,max3);
return 0;
}
0251デフォルトの名無しさん
2006/05/07(日) 03:48:13[2] 問題文(含コード&リンク): 1から10000までの整数の乱数をx個発生させ、
そのx個の整数が素数であるかどうかを判別するプログラムを作れ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5/10
[5] その他の制限: 少し上の方と同じく、if,for,while文までやっています
0252デフォルトの名無しさん
2006/05/07(日) 03:50:59for文の中
double t;
scanf("%lf", &t);
avg += t;
switch(i){
case 0:
max1 = t;
case 1:
if(max1 < t){max2 = max1;max1 = t;}
else max2 = t;
break;
case 2:
if(max2 < t){
if(max1 < t){max3 = max2;max2 = max1;max1 = t;}
else{max3 = max2;max2 = t;}}
else{max3 = t;}
break;
default:
if(max1 < t){max3 = max2;max2 = max1;max1 = t;}
else if(max2 < t){max3 = max2;max2 = t;}
else if(max3 < t) max3 = t;}
たぶんコレで負値もいけると思うんだけど
switch文分かるのかなという一抹の不安が
で、でも、if文に置き換えるぐらいできるよね
0253デフォルトの名無しさん
2006/05/07(日) 03:56:51参考になるかどうかわからんけど、
平均年齢を考慮しないプログラム。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1829.txt
が、ファイル処理がややこしいことになってて、スマートじゃない。
もっと上手く書けると思うんだが・・・
0254デフォルトの名無しさん
2006/05/07(日) 04:19:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1830.txt
配列利用するのとしないのを作ってみました
ま、好きなほうで
0255デフォルトの名無しさん
2006/05/07(日) 04:30:37#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>
/*
素数判定関数
引数:判定する整数
返値:素数ならば1,そうでなければ0;
*/
int check(int value){
int i;for(i = 2; i <= sqrt((double)value); i++){if(value % i == 0)return 0;} return 1;
}
int main(){
int x, i, count;scanf("%d", &count);srand((unsigned)time(NULL));for(i = 0; i < count; i++){
x = rand() % 10000;if( check(x) == 1)printf("%dは素数です\n" , x);elseprintf("%dは素数ではありません\n" , x);
}
}
0256254
2006/05/07(日) 04:32:26かぶったww
0257255
2006/05/07(日) 04:33:10本とは255です
0258デフォルトの名無しさん
2006/05/07(日) 04:34:260259デフォルトの名無しさん
2006/05/07(日) 04:57:56ド深夜に被りまくりだな…。
#include <stdio.h>
#include <time.h>
int main(void){
int i,j,p,n,x;
int prime[1230];
/*search prime number*/
prime[0]=2;
for(i=2,p=1;i<=10000;i++){
for(j=0;j<p;j++)if(i%prime[j]==0)break;
if(j==p) prime[p++]=i;
}
/*discriminate prime number*/
srand((unsigned) time(NULL));
printf("x:");
scanf("%d",&x);
for(i=0,n=rand()%10001;i<x;i++,n=rand()%10001){
for(j=0;j<p;j++)if(n==prime[j])break;
if(j!=p) printf("%5d:T\n",n);
else printf("%5d:F\n",n);
}
return 0;
}
0260デフォルトの名無しさん
2006/05/07(日) 05:13:33[2] 区間(0,1)一様分布乱数を200000個発生させ、2個ずつに区切り2点(0,0),(1,1)を対角頂点とする
正方形を100等分した2次元区間(正方形)に落ちる頻度の比率の平均、分散、標準偏差を求める。
これをプログラム内で10回繰り返す。なお、一様乱数発生は下記の方法を使い必ずサブルーチン化すること。
※合同法による疑似乱数発生
整数列{Rn} : Rのn番目 = ( a * Rのn-1番目 + b ) % c
ただしa=1229 b=351750 c=1664501
区間(0,1)に置ける疑似乱数(実数)列 {rn} : rn = Rn / c
[3] C言語
[4] 期限:5/9
[5] 大学3年の課題ですが、自分の場合今年情報学部に転部したものですから知識がなくて…。
誰かお助け願います。
0261デフォルトの名無しさん
2006/05/07(日) 05:51:12R0とかって与えられてないん?
0262デフォルトの名無しさん
2006/05/07(日) 06:10:50#include <stdio.h>
int main(void)
{
char a[100];
char b[100];
char ensan[2];
int ia[100];
int ib[100];
int ans[10001];
int i, j, kuri=0;
int disp_sw=0;
int mainasu=0;
int shou=0;
for (i=0 ; i<100 ; i++)
{
ia[i]=0;
ib[i]=0;
}
for (i=0 ; i<10001 ; i++)
{
ans[i]=0;
}
gets(a);
gets(ensan);
gets(b);
0263デフォルトの名無しさん
2006/05/07(日) 06:11:24i=0;
while (a[i++]!='\0');
i-=2;
j=0;
while (i>=0)
{
ia[j]=a[i]-'0';
i--;
j++;
}
i=0;
while (b[i++]!='\0');
i-=2;
j=0;
while (i>=0)
{
ib[j]=b[i]-'0';
i--;
j++;
}
0264デフォルトの名無しさん
2006/05/07(日) 06:12:12switch(ensan[0])
{
case '+':
for (i=0 ; i<100 ; i++)
{
ans[i]=ia[i]+ib[i]+kuri;
kuri=0;
if (ans[i]>9)
{
ans[i]-=10;
kuri=1;
}
}
break;
0265デフォルトの名無しさん
2006/05/07(日) 06:13:02case '-':
for (i=0 ; i<100 ; i++)
{
ans[i]=ia[i]-ib[i]-kuri;
kuri=0;
if (ans[i]<0)
{
ans[i]+=10;
kuri=1;
}
}
0266デフォルトの名無しさん
2006/05/07(日) 06:13:36if (kuri==1)
{
mainasu=1;
for (i=99 ; i>=0 ; i--)
{
ans[i]=9-ans[i];
}
ans[0]++;
}
break;
case '*':
for (i=0 ; i<100 ; i++)
for (j=0 ; j<100 ; j++)
{
ans[i+j]+=ia[i]*ib[j]+kuri;
kuri=ans[i+j]/10;
}
break;
0267デフォルトの名無しさん
2006/05/07(日) 06:14:03case '/':
while (mainasu==0)
{
shou++;
for (i=0 ; i<100 ; i++)
{
ia[i]=ia[i]-ib[i]-kuri;
kuri=0;
if (ia[i]<0)
{
ia[i]+=10;
kuri=1;
}
}
0268デフォルトの名無しさん
2006/05/07(日) 06:14:39if (kuri==1)
{
mainasu=1;
for (i=99 ; i>=0 ; i--)
{
ia[i]=9-ia[i];
}
ia[0]++;
}
}
printf("%d\n", --shou);
0269デフォルトの名無しさん
2006/05/07(日) 06:15:44kuri=0;
for (i=0 ; i<100 ; i++)
{
ia[i]=ia[i]-ib[i]-kuri;
kuri=0;
if (ia[i]<0)
{
ia[i]+=10;
kuri=1;
}
}
0270デフォルトの名無しさん
2006/05/07(日) 06:16:21if (kuri==1)
{
mainasu=1;
for (i=99 ; i>=0 ; i--)
{
ia[i]=9-ia[i];
}
ia[0]++;
}
0271デフォルトの名無しさん
2006/05/07(日) 06:17:00for (i=99 ; i>=0 ; i--)
{
if (disp_sw==0)
{
if (ia[i]!=0)
{
disp_sw=1;
printf("%d", ia[i]);
}
}
else
{
printf("%d", ia[i]);
}
}
0272デフォルトの名無しさん
2006/05/07(日) 06:17:40printf("\n");
return 0;
break;
}
if (mainasu==1)
printf("-");
for (i=10000 ; i>=0 ; i--)
{
if (disp_sw==0)
{
if (ans[i]!=0)
{
disp_sw=1;
printf("%d", ans[i]);
}
0273デフォルトの名無しさん
2006/05/07(日) 06:18:46}
else
{
printf("%d", ans[i]);
}
}
printf("\n");
return 0;
}
//終了
0274デフォルトの名無しさん
2006/05/07(日) 06:31:23どうせ疑似乱数のアルゴリズムを与えるんなら
もっといいのにすりゃいいのにな
Mersenne-Twisterとまでは言わないが、線形合同法なんていう
底辺のアルゴリズムよりいいのはいくらでもあるだろに
0275デフォルトの名無しさん
2006/05/07(日) 06:57:00全部足して/nだっけ?
それとも、確率変数とそのとる値の積の和だっけ?
0276デフォルトの名無しさん
2006/05/07(日) 07:20:41回答ありがとうございました。
0278デフォルトの名無しさん
2006/05/07(日) 08:32:27そんな、面倒だっけ?
0279デフォルトの名無しさん
2006/05/07(日) 08:48:41後者が正しい.E[X] = Σx P(x).
どの値をとる確率も等しいとき P = 1/n になるから前者は後者の特別な場合.
0280デフォルトの名無しさん
2006/05/07(日) 08:49:520281デフォルトの名無しさん
2006/05/07(日) 09:11:170282デフォルトの名無しさん
2006/05/07(日) 09:38:58>>280
若干、スレ違いの話題だったんだが、答えてくれてthx
そうか、xpの総和か
でも、260のはx,yの2変数なんだよなぁ〜
0283デフォルトの名無しさん
2006/05/07(日) 10:43:04[2] フルパスのファイル名からファイル名だけを取得」せよ
例
c:\\abc\\def\\ghi.txt
↓
\\ghi.txt
[3] 環境
[3.1] OS: Windows
[3.2] VS2005 VC 8
[3.3] 言語: C++
[4] 期限: 連休明け
[5] その他の制限: unmanagedでも結構、managed codeなら更に嬉しいです
宜しくお願いします
0284デフォルトの名無しさん
2006/05/07(日) 10:47:15#include <stdio.h>
#include <string.h>
char* getFilename(const char* path)
{ return strrchr(path, '\\') + 1; }
int main(void)
{ printf("%s", getFilename("c:\\abc\\def\\ghi.txt")); return 0; }
0285デフォルトの名無しさん
2006/05/07(日) 10:48:52#include <stdio.h>
#include <string.h>
int main(void)
{ printf("%s", strchr("c:\\abc\\def\\ghi.txt", '\\')); return 0; }
0286デフォルトの名無しさん
2006/05/07(日) 10:50:47Dllの作成はdefファイルを使ってエクスポートしています。
defの抜粋fnSetColor@5
void HogeHoge::fnSetColor(void){
CColorDialog *col1Dlg= new CColorDialog;
col1Dlg->DoModaltheHogeHoge.();
theHogeHoge.m_Color= col1Dlg->GetColor();
if(col1Dlg != NULL)
delete col1Dlg;
}
呼び出し側:
typedefvoid(*fnSetColor)(void);
fnSetColor pfnSetColor= NULL;
pfnSetColor= (fnSetColor)GetProcAddress(hMod, "fnSetColor");
pfnSetColor();//ここでエラー:Run-Time Check Failure #0 〜
環境:WinXPHomeSP2+ VisualStudio2005です。よろしくお願いします。
0287デフォルトの名無しさん
2006/05/07(日) 11:13:30main 長すぎ。関数に分割汁
0288デフォルトの名無しさん
2006/05/07(日) 11:56:20283なのですが、実行すると
\abc\\def\\ghi.txt
こうなるのですが・・・・・
0289デフォルトの名無しさん
2006/05/07(日) 12:02:38strchr を strrchr (「r」が2個になっている) に変更。
0290デフォルトの名無しさん
2006/05/07(日) 13:34:26マネージドは別で聞いてきます
0291207
2006/05/07(日) 15:15:45>>208-209
ソースを確認させて頂きました。
ソートなどが使用それているのですが、書いてあることの大半がまだ習っていない内容でした。
配列を使用してやれば良いとも聞いたのですが、その場合はどのようになるでしょうか?
>>244 >>246
ありがとうございます。
コンパイルの件、解決しました。
0292208
2006/05/07(日) 16:05:37大変申し訳ない。
プログラムは入力した値を全く無視する素晴らしいバグ付ですたorz
ということで、ソート使ってないのをお詫びに作りました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1836.txt
0293207
2006/05/07(日) 16:24:19ありがとうございました。
何度も申し訳ありません。
#include <stdlib.h>
#define KUJI_NUM 3
#define MAX_RND 10
#define MIN_RND 1
これらの使用を習っていない状態なのですが、代用は何かで効くでしょうか?
0294デフォルトの名無しさん
2006/05/07(日) 16:39:00エディタの置換機能で、
置換対象 KUJI_NUN
置換文字列 3
置換対象 MAX_RND
置換文字列 10
置換対象 MIN_RND
置換文字列 1
とかして置換して下さい。
もしくは、この文字(KUJI_NUM等)を該当する数字に、手で書き換えてもいいですよ。
0295207
2006/05/07(日) 16:50:55というのは、
#define 3 などの記述になるということでしょうか?
『#define』『#include<stdiib.h>』の使用を習っていないという意味だったのですが…
質問のし過ぎで申し訳ありません。
0296デフォルトの名無しさん
2006/05/07(日) 17:02:59この↓三行を取り除き
#define KUJI_NUM 3
#define MAX_RND 10
#define MIN_RND 1
その他プログラム中に現れる
↓の語を、 ↓の数字に置き換える
KUJI_NUM 3
MAX_RND 10
MIN_RND 1
という意味では?
0297296
2006/05/07(日) 17:09:20#include <stdlib.h>
↑がないと乱数は扱えない(自分で擬似乱数を作り出す計算をすることになる)ので、
これは(絶対とは言わないが)外せない。
0298207
2006/05/07(日) 17:11:57ありがとうございます。
擬似乱数がどういうものかが良くわからないのですが、#include〜に関してはわかりました。
当たりくじの数値を自分で指定する場合はどのようになるでしょうか?
0299207
2006/05/07(日) 17:29:51何度もすみません。
問題:三つの数n,m,l のうち2個以上当てた場合(順番は不問)当選するくじびきのプログラムを作
れ。あたり番号は適当に決めておく。(例えばn,m,l=5,12,33)
最後の一文が入っていれば、乱数は使用しないことになるでしょうか?
お手数をおかけしましてすみません…
0300デフォルトの名無しさん
2006/05/07(日) 17:32:56[1] 授業単元:C言語の基礎A1
[2] 問題文(含コード&リンク): 借入金・月々の返済額・金利率/月を入力し、
借入金の返済のシミュレーションを行うプログラムを作成する。
実行例
借入金 月々の返済額 金利/月(%)を入力:1000,300,5
1月 :返済額は1050円 償還額は300円 残額は750円
2月 :返済額は787.5円 償還額は300円 残額は487.5円
3月 :返済額は511.875円 償還額は300円 残額は211.875円
4月 :返済額は222.46875円 償還額は223円 残額は0円
返済額が金利より少ないと無限ループに入るので、
簡単なエラー対策を施す事。
[3] 環境
[3.1] OS: リナックス
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 5/9
[5] その他の制限: ifやswich文の所まで説明を受けました
数学の標準ライブラリは基本使用不可、
返済額の計算に対し、「実数の小数点以下の端数を切り上げる」といったもののみ可
0301デフォルトの名無しさん
2006/05/07(日) 17:38:22>2月 :返済額は787.5円 償還額は300円 残額は487.5円
>実数の小数点以下の端数を切り上げる
切り上げてないじゃん
0302デフォルトの名無しさん
2006/05/07(日) 17:58:46>>1にあるとおり、出題された文章を勝手に添削することはしないでください。
その1文があるか無いかで随分方針が変わるもんです。
int kuji( int l, int m, int n ) {
int i, j, rnds[KUJI_NUM], nums[KUJI_NUM], cnt = 0 ;
srand( time(NULL) ) ;
nums[0] = l ;
nums[1] = m ;
nums[2] = n ;
//Generate random numbers
for( i=0; i<KUJI_NUM; i++ )
rnds[i] = rand( )%MAX_RND + MIN_RND ;
↑までの部分を↓にしてください。そうすれば#include<stdlib.h>外せます。
int kuji( int l, int m, int n ) {
int i, j, cnt = 0;
int nums[] = {l, m, n}, rnds[] = {1, 2, 3}; // ここの1,2,3の部分が「適当に決めた番号」に該当する
0303207
2006/05/07(日) 18:15:13こちらの不手際でご迷惑をおかけしました…
大変申し訳ありませんでした。気をつけます。
どうにか解決出来ましたので、質問は以上にします。
長く書いてしまいすみませんでした。
ありがとうございました。
0304デフォルトの名無しさん
2006/05/07(日) 18:30:58>切り上げてないじゃん
申し訳ありません、こちらの表記をミスってしまいました。
小数点以下の端数の切り上げを行うのは、
最後の償還額、でした。
0305260
2006/05/07(日) 18:59:33特に書いてなかったです。
>>275>>276>>278->>282
すいません!
平均:初期値をゼロとして、累積和を求めておき、最後に累積回数で割る。
二次モーメント:初期値をゼロとして、二乗の累積和を求めておき、最後に累積回数で割る。
分散:二次モーメントと平均の二乗との差。
標準偏差:分散の平方根。
って課題の隅っこに書いてありました。申し訳ない。
0306デフォルトの名無しさん
2006/05/07(日) 19:31:04明らかに平均、分散、標準偏差がおかしいんだよね
助けてエロイ人
#include <stdio.h>
#include <math.h>
#define N 20000
int a = 1229, b = 351750, c = 1664501;
int int_rand(int r){ return ((a * r + b) % c); }
double real_rand(int r){ return ((double)r / c); }
int main(void){
int i, j, k, l = 1, r = 1, a[100]={0};
double x, y, e, v, o;
while(l <= 10){
e = 0; v = 0;//初期化
for(i = 0; i < 100; i++) a[i]=0;
for(i = 0; i < N; i++){//乱数発生
r = int_rand(r);
if(i % 2 == 0) x = real_rand(r);
else y = real_rand(r);
if(i % 2 == 1){ j = x * 10, k = y * 10; a[j + k * 10]++; }
}
for(i = 0; i < 100; i++){ e += a[i]; v += pow(a[i], 2); }//平均,分散,標準偏差計算
e /= 100; v /= 100; v -= e; o = sqrt(v);
printf("%d回目:平均=%f 分散=%f 標準偏差%f\n", l, e, v, o);
l++;
}
return 0;
}
0307デフォルトの名無しさん
2006/05/07(日) 19:46:14C言語
[2] 問題文
4×4のマス目に1〜16までの数字を入れて、
縦横ななめ、全て足して同じになるように
入れる方法が[魔方陣って言うんだっけ?]何通りあるかを確かめるプログラム
[3] 環境
[3.1] OS:家Windows XP 学校Linux
[3.2] コンパイラ名とバージョン 知りません学校のLinuxは新しい奴やったはず
[3.3] 言語: できればC言語で
[4] 期限: 2006年05月08日まで[提出9日
[5] その他の制限:特に指定は無し
結構急な依頼ですがよろしくです
0308デフォルトの名無しさん
2006/05/07(日) 19:56:23分散:二次モーメントと”平均の二乗"との差
って所かな?
0309デフォルトの名無しさん
2006/05/07(日) 20:16:08なーる、じゃこんな感じか…でも、平均が全部100ってコレ
#include <stdio.h>
#include <math.h>
#define N 20000
int a = 1229, b = 351750, c = 1664501;
int int_rand(int r){ return ((a * r + b) % c); }
double real_rand(int r){ return ((double)r / c); }
int main(void){
int i, j, k, l = 1, r = 1, a[100]={0};
double x, y, e, v, o;
while(l <= 10){
e = 0; v = 0;//初期化
for(i = 0; i < 100; i++) a[i]=0;
for(i = 0; i < N; i++){//乱数発生
r = int_rand(r);
if(i % 2 == 0) x = real_rand(r);
else y = real_rand(r);
if(i % 2 == 1){ j = x * 10, k = y * 10; a[j + k * 10]++; }
}
for(i = 0; i < 100; i++){ e += a[i]; v += pow(a[i], 2); }//平均,分散,標準偏差計算
e /= 100; v /= 100; v -= pow(e, 2); o = sqrt(v);
printf("%d回目:平均=%f 分散=%f 標準偏差%f\n", l, e, v, o);
l++;
}
return 0;
}
0310255
2006/05/08(月) 00:27:02ごりごり力技で組むとすごいことになると思うのですが、
なにかヒントとかアルゴリズムとかはないのですか?
0311デフォルトの名無しさん
2006/05/08(月) 00:40:07再帰使うのがセオリーかと
0312デフォルトの名無しさん
2006/05/08(月) 00:47:15実行してもプロンプト帰ってきません。
0313デフォルトの名無しさん
2006/05/08(月) 00:47:43そんな量計算できなくないかなぁ
0314デフォルトの名無しさん
2006/05/08(月) 00:50:170315デフォルトの名無しさん
2006/05/08(月) 00:55:396121711
1371016
818155
これ計算してみ46になるぞ
どうゆう4方陣のどの場合なのか数式示してくれ
0316デフォルトの名無しさん
2006/05/08(月) 00:57:306 12 17 11
13 7 10 16
8 18 15 5
すまね
0317デフォルトの名無しさん
2006/05/08(月) 00:57:490318デフォルトの名無しさん
2006/05/08(月) 01:01:04すれはここでつか?
0319デフォルトの名無しさん
2006/05/08(月) 01:08:37A+K = B+L = C+I = D+J = E+O = F+P = G+M = H+N = 17
が満たせるか判別すりゃいいんでね
0320デフォルトの名無しさん
2006/05/08(月) 01:34:090323デフォルトの名無しさん
2006/05/08(月) 02:00:59> 縦横ななめ、全て足して同じになるように
ななめ、っていうのは対角線のことだけでOK?
というのは、完全方陣というのがあるから言うわけだけど
http://ja.wikipedia.org/wiki/%E9%AD%94%E6%96%B9%E9%99%A3#.E5.AE.8C.E5.85.A8.E6.96.B9.E9.99.A3
0324デフォルトの名無しさん
2006/05/08(月) 02:10:08int s[16]={0},f[16]={0},c=0;
int j1(){return s[0]+s[1]+s[2]+s[3]==34;}int j2(){return s[0]+s[4]+s[5]+s[6]==34;}
int j3(){return s[4]+s[7]+s[8]+s[9]==34;}int j4(){return s[3]+s[8]+s[10]+s[6]==34;}
int j5(){return s[1]+s[7]+s[10]+s[11]==34;}int j6(){return s[5]+s[10]+s[12]+s[13]==34;}
int j7(){return s[2]+s[8]+s[12]+s[14]==34;}
int j(){return s[6]+s[11]+s[14]+s[15]==34&&s[3]+s[9]+s[13]+s[15]==34&&s[0]+s[7]+s[12]+s[15]==34;}
void print(){printf("%2d %2d %2d %2d\n",s[0],s[1],s[2],s[3]);printf("%2d %2d %2d %2d\n",s[4],s[7],s[8],s[9]);
printf("%2d %2d %2d %2d\n",s[5],s[10],s[12],s[13]);printf("%2d %2d %2d %2d\n",s[6],s[11],s[14],s[15]);}
void search(int pos){int i;
switch(pos){case 4:if(!j1())return; break;case 7:if(!j2())return; break;case 10:if(!j3())return; break;
case 11:if(!j4())return; break;case 12:if(!j5())return; break;case 14:if(!j6())return; break;case 15:if(!j7())return; break;
case 16:if(!j())return; print(); printf("\n"); ++c; return;}
for(i=0;i<16;++i)if(!f[i]){f[i]=1;s[pos]=i+1;search(pos+1);f[i]=0;}}
main(){search(0);printf("%d通り\n",c);}
ラインの判定は全て埋めたあとではなく、各ラインが埋まったらすぐに判定する。
なるべく早くに多くのラインを判定できるよう埋め方を工夫する。
0325デフォルトの名無しさん
2006/05/08(月) 02:36:34完全に順列総当たりだと一時間走らせても一つも見つからなんだ。
↓
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=27666
使い物にならん遅さだしなんかトップの方の実装いい加減だけど作ったから貼る
0326デフォルトの名無しさん
2006/05/08(月) 04:12:17いやはやすごいですね・・・
おれもアルゴリズムの勉強したいけど、どういう本読めばいいのかな
0327デフォルトの名無しさん
2006/05/08(月) 05:35:03324じゃないけど,アルゴリズムの本なら
・コルメン他,アルゴリズムイントロダクション
・セジウィック,アルゴリズムC
・石畑,アルゴリズムとデータ構造
・杉原,データ構造とアルゴリズム
が俺のお勧め.上から俺が良いと思う順.
コルメンは全体的に難しく,実装も詳しくは書かれていないので,
最初に読むには辛いかも.全部買うと高いし.ゼミで読んだ本.
セジウィックも良い本で,コードもそれなりに乗ってるけど,
まだ難しい.上と同じくちょと高め.学部の準教科書だった.
石畑は和書では最も良いものの一つかも.コードも乗ってるし,
説明もそれなりに分かりやすい.上二つより安いし.学部の準教科書.
杉原は薄くて安いわりにはしっかり書いてある.取っ掛かりには良いかも.
コードは詳しくは書かれてない.学部の教科書だった.
0328デフォルトの名無しさん
2006/05/08(月) 05:52:41どうも、とても参考になります
0329デフォルトの名無しさん
2006/05/08(月) 09:50:380330デフォルトの名無しさん
2006/05/08(月) 10:52:52[2] 問題文(含コード&リンク):
英文が格納されているファイルe-text.txtを開き、読み込んだデータから
改行を全て取り除いた上で各行が第一引数で与えた数になるように整形し、
その結果をwordwrap.txtへ書き出すプログラムを作成せよ。
改行を取り除く時、文末の単語と次の行の単語が繋がらないように、必要に
応じて空白を挿入すること。また、行頭に空白や ’,’および '. 'が来ても
構わないとする。
例えば、以下のファイル内容に対して引数に20を与えたとき、wordwrap.txtは
以下のようになる。
<内容>
the constitution of japan(november 3, 1946).
we, the japanese people, acting through our duly
elected representatives in the national diet,
determined that we shall secure for ourselves
<wordwrap.txt>
the constitution o
f japan(november 3,
1946). we, the japa
nese people, acting
through our duly ele
cted representatives
in the national die
t, determined that w
e shall secure for o
urselves
0331デフォルトの名無しさん
2006/05/08(月) 10:53:42[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ:gcc
[3.3] 言語: C
[4] 期限: 5月9日
[5] その他の制限: 標準ライブラリの使用、という章で課されました。
よろしくお願い致します。
0332デフォルトの名無しさん
2006/05/08(月) 11:01:08http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1843.txt
に置き直しました。
0333デフォルトの名無しさん
2006/05/08(月) 12:04:330334デフォルトの名無しさん
2006/05/08(月) 12:25:55332の方で入れ忘れました..orz
0335デフォルトの名無しさん
2006/05/08(月) 12:53:05それとも「必要に応じて」って、前後に空白があるときは入れないって言ってる?
0336デフォルトの名無しさん
2006/05/08(月) 14:34:14空白は1つですね。改行の事を忘れていました..。
0337デフォルトの名無しさん
2006/05/08(月) 14:53:16#include <stdio.h>
#include <stdlib.h>
#define I "e-text.txt"
#define O "wordwrap.txt"
#define ARGERR() fprintf(stderr, "引き数が不正です。\n");
#define OPNERR(f) fprintf(stderr, "%sのopenに失敗しました。\n", f)
main(int c,char*v[]){FILE *i,*o;int w=c==2?atoi(v[1]):0,b,n;
if(!w){ARGERR();return 1;}
i=fopen(I,"r");if(!i){OPNERR(I);return 1;}
o=fopen(O,"w");if(!o){OPNERR(O);fclose(i);return 1;}
n=0;while((b=fgetc(i))!=EOF){if(n++==w){fputc('\n',o);n=1;}if(b=='\n')b=' ';fputc(b,o);}
fclose(i);fclose(o);return 0;}
0338307
2006/05/08(月) 18:23:12朝はよーから学校行ってました[昨日はあれから消してた
多々の突っ込み[ >>323など]ありますが
完全方陣でやれとも言われて無いのでプログラム作る人に完全に投げてました。
申し訳ないです
>>324のプログラムは凡人のオイラにはわからないので
もっと勉強した時にもう一度見てみます。 >>324さんありがとうございました
>>324さん以外にも問題して頂いた方ありがとうございました。
0339デフォルトの名無しさん
2006/05/08(月) 19:52:24インデントを除けば、難しい部分はどこにもないと思うが。
そもそもプログラミングに興味がなく読む気がない人には「難しい」でしょうが。
0340デフォルトの名無しさん
2006/05/08(月) 20:33:300341デフォルトの名無しさん
2006/05/08(月) 21:53:510342デフォルトの名無しさん
2006/05/08(月) 21:55:230343デフォルトの名無しさん
2006/05/08(月) 22:00:44問題、2*3*1=6のプログラムを作成せよ
0344デフォルトの名無しさん
2006/05/08(月) 22:04:160345デフォルトの名無しさん
2006/05/08(月) 22:14:260346デフォルトの名無しさん
2006/05/08(月) 22:27:04[2] 問題文(含コード&リンク):
数式を計算するプログラムを作成せよ.ただし処理すべき数式は
・扱う数は int で扱える程度の正の整数.
・足し算,掛け算,べき乗,括弧に対応すること.
・べき乗は右結合する( 2^3^4 = 2^(3^4) ).
・演算順序は「括弧 > べき乗 > 掛け算 > 足し算」.
・数式中にスペースが入っていても構わない.
入力
・1行に数式が1つ.
・終了するときは quit と入力.
出力
・各行に対してその計算結果.
・不正な式に対しては適当なエラーメッセージを表示すること.
[3] 環境:略
[4] 期限:暇なときにでもどうぞ.
0347デフォルトの名無しさん
2006/05/08(月) 23:25:26なお、Aのプログラムは二分探索である。Bのプログラムはファイル操作。
0348デフォルトの名無しさん
2006/05/08(月) 23:27:39【Aのプログラム】
#include <stdio.h>
#define KAIIN_NUM 10
void ShojunSort(int array[], int num);
int main(int argc, char* argv[])
{int kaiin[] = { 555, 222, 789, 444, 456, 666, 123, 777, 111, 333 };
int n;int left, middle, right;
printf("会員番号:");scanf("%d", &n);
ShojunSort(kaiin, KAIIN_NUM);
left = 0;right = KAIIN_NUM - 1;
middle = (left + right) / 2;
while (kaiin[middle] != n)
{if (kaiin[middle] > n)
{right = middle - 1;
}else{left = middle + 1;
}middle = (left + right) / 2;
if (left > right)
{printf("見つかりません。\n");
return0;}}
printf("%d番目に見つかりました。\n", middle);
return 0;}void ShojunSort(int array[], int num)
{int i, j;int temp;
for (i = 0; i <= num - 1; i++)
{for (j = num; j > i; j--)
{if (array[j] < array[j - 1])
{temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}}}return;}
0349デフォルトの名無しさん
2006/05/08(月) 23:28:16【Bのプログラム】
#include <stdio.h>
#include <stdlib.h>
#define b_size 256
int main(int argc, char *argv[]){
FILE *fpr;
int i=0, j, kaiin[100];
pr=fopen("data.txt", "r");
if(fpr == NULL){
printf("ファイルが見つかりません。\n");
return 0;
}
while((fscanf(fpr, "%d", &kaiin[i]))!=EOF){
i++;
}
fclose(fpr);
for(j=0;j<i;j++)
printf("kaiin[%d]=%d\n",j,kaiin[j]);
return 0;
}
0350デフォルトの名無しさん
2006/05/08(月) 23:29:11【data.txt】
123
415
655
623
645
222
524
778
433
235
786
425
746
973
129
541
235
125
546
431
436
0351デフォルトの名無しさん
2006/05/08(月) 23:29:54以上、お願いします。
0352デフォルトの名無しさん
2006/05/08(月) 23:36:34>>1 を読んで出直してきてください。
0353デフォルトの名無しさん
2006/05/08(月) 23:43:22【課題内容】Bのプログラムを参考にして、data.txtというファイルにあるデータを検索するようにAのプログラムを変更せよ。
なお、Aのプログラムは二分探索である。Bのプログラムはファイル操作。
【開発環境・コンパイラ】Microsoft Visual Studio .NET 2003
【授業単元】C言語
【期日】5月9日
【OS】Windows XP
プログラムAは>>348 で プログラムBは>>349 です。
0354デフォルトの名無しさん
2006/05/09(火) 00:02:510355デフォルトの名無しさん
2006/05/09(火) 00:11:02ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1862.txt
あ、fcloseやってないや、追加しといて
0356デフォルトの名無しさん
2006/05/09(火) 00:12:05>>354
これが、プログラムAです。▼
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1863.txt
0357デフォルトの名無しさん
2006/05/09(火) 00:16:56すみません、間違えました。正しくは、
http://kontagogo.hp.infoseek.co.jp/cgi-bin/src/up0216.txt
です。
0358デフォルトの名無しさん
2006/05/09(火) 00:25:58すでに 355 が出てるけど、もったいないので。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1864.c
0359デフォルトの名無しさん
2006/05/09(火) 01:04:41windows,gcc,c言語です。
次の問題わかる方いらっしゃったら教えてください。
問題
C言語で表示できる最小の実数を表示する(求める)プログラムを作りなさい。
forとかwhileとかの簡単なものだけで作れるプログラムでお願いします。
0360デフォルトの名無しさん
2006/05/09(火) 01:06:23>>1 を読んで出直してきてください。
0361デフォルトの名無しさん
2006/05/09(火) 01:12:31#include <stdio.h>
#include <float.h>
int main(void)
{
printf("%Lg", LDBL_MIN);
return 0;
}
0362359
2006/05/09(火) 01:14:10[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): C言語で表示できる最小の実数を表示する(求める)プログラムを作りなさい。
[3] 環境
[3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:c
[4] 期限: 今日、明日中でお願いします。
[5] その他の制限: forとかwhileとかの簡単なものだけで作れるプログラムでお願いします。
0363359
2006/05/09(火) 01:17:04やろうと思えば簡潔にできるんですね。
ですがもう少し求めるプロセスを含んだものが好ましいというか、
おそらくそれではストレートに答えすぎて点数がもらえない気がします。すいません。
0364デフォルトの名無しさん
2006/05/09(火) 01:37:56#include <stdio.h>
int main(void) {
printf("-");
while(1) { printf("9"); }
return 0;
}
0366デフォルトの名無しさん
2006/05/09(火) 01:46:36同じ考えの奴っているんだな。俺はputchar()だったが。
0367デフォルトの名無しさん
2006/05/09(火) 02:20:510368デフォルトの名無しさん
2006/05/09(火) 02:22:18>1読め。
0369デフォルトの名無しさん
2006/05/09(火) 02:25:040370デフォルトの名無しさん
2006/05/09(火) 02:25:33分からない筈は無い。
ググり方を考えろ。
0371デフォルトの名無しさん
2006/05/09(火) 02:26:52[2] 問題文(含コード&リンク):
http://nigauri.sakura.ne.jp/src/up5160.jpg
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: BCC32
[3.3] 言語: C++
[4] 期限: 2006年05月12日17:00まで
[5] その他の制限:
0372デフォルトの名無しさん
2006/05/09(火) 02:29:190373デフォルトの名無しさん
2006/05/09(火) 02:31:41#include <iostream>
int main() {
std::cout << "ttp://www.nigauri.sakura.ne.jp/src/up5176.jpg.html" << std::endl;
}
0374デフォルトの名無しさん
2006/05/09(火) 02:32:160375デフォルトの名無しさん
2006/05/09(火) 02:49:32#include <stdarg.h>
int scanf(const char *format, ...){
va_list arg;
va_start(arg, format);
vprintf(format, arg);
va_end(arg);
return 0;
}
int main(void){
scanf("%s*%s*%s=%s","10","20","30","6000");
return 0;
}
0376デフォルトの名無しさん
2006/05/09(火) 03:22:30あと2つのパターンを考えた。
#include<stdio.h>
#include <stdarg.h>
int scanf(const char *format, ...){
va_list arg;
char *p,**d;
va_start(arg, format);
d = va_arg(arg,char **);
for(p=(char *)format;*p;++p){
printf(*d++);
putchar(*p);
}
va_end(arg);
return 0;
}
int main(void){
char* data[] = {"10","20","30","600"};
scanf("**=0",data);
return 0;
}
0377367
2006/05/09(火) 03:24:490378デフォルトの名無しさん
2006/05/09(火) 03:25:29#include <stdlib.h>
int scanf(const char *format, ...){
int i,d,k;
int buf[256] = {0};
d = atoi(format);
k = 0;
for(i=1;i<d;++i) if(!(d % i)) buf[k++] = i;
for(i=0;i<k;++i) printf("%d0%c",buf[i],i<k-1?'*':'=');
printf("%s000",format);
return 0;
}
int main(void){
scanf("6");
return 0;
}
>375も含めて3つ。どれか好きなの選べ。あー眠い。
0379デフォルトの名無しさん
2006/05/09(火) 03:25:450380デフォルトの名無しさん
2006/05/09(火) 05:58:55>>358を参考にして動作しました。ありがとうございまいた。
なんか、掲示板を分かりにくく書いてごめんなさい。
0381デフォルトの名無しさん
2006/05/09(火) 11:17:58int main()
{
int ch;
puts("10*20*30=6000");
scanf("%c",&ch);
return 0;
}
0382367
2006/05/09(火) 12:31:220383デフォルトの名無しさん
2006/05/09(火) 14:59:06[1] 授業単元: プログラミング2
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1865.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc -Wall
[3.3] 言語: C
[4] 期限: 2006年05月10日
[5] その他の制限:配列の中身の丸ごとコピーはなるべく避ける。配列は3つまで宣言してもよい。
助けてください。お願いしますm(__)m
0384デフォルトの名無しさん
2006/05/09(火) 15:46:18PC直たよ〜!!
辞書も初期化だよ〜!!
全部入れなおしだよ〜!!
何が入ってたか覚えてないよ〜!!
0385デフォルトの名無しさん
2006/05/09(火) 19:45:330386デフォルトの名無しさん
2006/05/09(火) 19:52:16前者はポインタの配列
後者は配列へのポインタ
0387デフォルトの名無しさん
2006/05/09(火) 20:42:16てきとうに。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1866.c
0388デフォルトの名無しさん
2006/05/09(火) 21:13:31スペースで区切られた文字列を分割する関数を作ります。
・連続するスペースはひとつの区切りとしない
・スペースがない場合は全ての文字列を返す
・頭や後ろにつくスペースは無視
・返す文字列がない場合はNULLを返す
・初期値の文字列はNULLを引数に与えている間に変更されないもとする
・#include<string.h>は使わない
引数は( char * , const char * )です。
第1引数は区切られた文字列の格納先
第2引数はスペースで区切られた文字列(次の文字列を探す時はNULLを指定)
ですが、さっぱりわかりません。
どうか教えてください。
0389デフォルトの名無しさん
2006/05/09(火) 21:20:09[1] プログラミング演習
[2]
[3] 環境
[3.1] Windows
[3.2] gcc
[3.3] C
[4] 明日まで
[5] string.hは禁止
0390デフォルトの名無しさん
2006/05/09(火) 21:26:46[1] 授業単元: コンピュータ言語演習
[2] 問題文(含コード&リンク):
ある人数分の身長データがある。標準入力から、人数と身長データを入力し、
その平均値を出力するプログラムを、以下の条件を満たすように作成せよ
・身長データを格納するメモリ領域へのポインタ変数(float型)を宣言すること
・人数が決まった段階で、malloc()とsizeof演算子を用いて必要な分だけメモリ領域を確保すること
・確保した領域は、必要が無くなった時点でfree()を使って開放すること
・結果として、平均値のほかに次の内容も表示すること
-宣言したポインタ変数のアドレス
-確保したメモリ領域へのポインタの値
-各身長データが格納されたアドレスと格納された値(人数)
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: c
[4] 期限: 5月10日PM5:00
よろしくお願いします(´・ω・`
0391デフォルトの名無しさん
2006/05/09(火) 21:56:42「返す」というのは、第1引数に格納するという意味? 戻り値はなし?
「無視」というのは、区切り文字とは扱わないという意味? それとも第1引数に格納もしないっていう意味?
0392389
2006/05/09(火) 22:10:11連続したスペース、文末のスペースは区切りとは扱わないです。
わかりにくくてすみません
0393デフォルトの名無しさん
2006/05/09(火) 22:12:51[2] 問題文(含コード&リンク):
上端が固定された長さlの軽いひも(伸び縮みしない)の下端に質量mの小さな重りがついている。
鉛直下方からのひもの角度θの時間変化は次の方程式できまる。
m * l * d^2θ/dt^2 = −m * g * sinθ
gは重力加速度で9.8m/s^2とする。ひもの長さが25cmのとき
θ=5°になるまで持ち上げそっと放したとき、重りが1往復する時間は何秒か?
またθ=10°のときでは何秒になるかを求めるプログラムの作成
答えの時間は小数点以下2位まで出すこと
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 5月11日木曜
[5] その他の制限: 特にないです
お願いします
0394393
2006/05/09(火) 22:14:26[1] 授業単元:演習�T
0395デフォルトの名無しさん
2006/05/09(火) 22:27:09抜けがあるかも
char *tokenize(char *t, const char *s){
static const char *s_ = "";
char *t_ = t;
s_ = s ? s : s_;
while ( *s_ ){
if ( *s_ != ' ' ) *t_++ = *s_++;
else{
if ( s_ == s || *(s_+1) == ' ' || *(s_+1) == '\0') while ( *s_ == ' ' ) *t_++ = *s_++;
else{
++s_;
break;
}
}
}
*t_ = '\0';
return t_ == t ? 0 : t;
}
0396デフォルトの名無しさん
2006/05/09(火) 22:29:46ありがとうございます。
0397デフォルトの名無しさん
2006/05/09(火) 23:04:08#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
double t = 0, dt = 0.00001;
double grad, dotgrad = 0, ddotgrad = 0, odotgrad;
double gravity = 9.8, len = 0.25;
if (argc < 2 || sscanf(argv[1], "%lf", &grad) < 1) {
printf("Usage: %s 開始角度(°)\n", argv[0]);
return 0;
}
grad *= M_PI / 180.0;
printf("角度 %3.0lf", grad / M_PI * 180);
while (1) {
ddotgrad = (-gravity / len * sin(grad));
odotgrad = dotgrad;
dotgrad += dt * ddotgrad;
grad += dt * dotgrad;
t += dt;
if (dotgrad <= 0 && odotgrad > 0)
break;
}
printf(" 周期 %3.3lf\n", t);
return 0;
}
0398デフォルトの名無しさん
2006/05/09(火) 23:28:14#include <stdio.h>
#include <stdlib.h>
int main(void){
float *h, avr = 0;
int i, n;
puts("人数n =");
scanf("%d", &n);
h = (float*)malloc(sizeof(float)*n);
if(h == NULL)return 1;
for(i = 0; i < n; i++){
scanf("%f", &h[i]);
avr += h[i];
}
avr /= n;
printf("average:%f\n", avr);
printf("ポイント変数のアドレス:%d\n", &h);
printf("メモリへのポインタの値:%d\n", h);
for(i = 0; i < n; i++)
printf("%d人目 アドレス:%d 値:%f\n", i + 1, &h[i], h[i]);
free(h);
return 0;
}
0400デフォルトの名無しさん
2006/05/09(火) 23:37:35用法用量を守って正しくお使いください
0401397
2006/05/09(火) 23:50:20コンパイルしたプログラムを実行するときに、実行ファイル名の後に開始角度を
数字で付けてください。
例)
D:\tmp>keisan 10
↑ここ
0403デフォルトの名無しさん
2006/05/10(水) 00:20:38[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
プログラムに変更を加えていき、実行時間の変化をもとに最適化について考察する。
[3] 環境
[3.1] OS: Windows (cygwin)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: ([2006年5月11日23:00まで])
[5] その他の制限: 初心者用の授業になってます
質問が長いのでろだにアップロードしました。よろしくお願いいたします。
0404デフォルトの名無しさん
2006/05/10(水) 00:24:10その問題文のアドレスをここに貼りなさい。ろだだけで伝わるわけがないでしょう。
0405デフォルトの名無しさん
2006/05/10(水) 00:32:34言語の所の(C)がCopyrightに見えた
0406デフォルトの名無しさん
2006/05/10(水) 00:34:04すみません、ろだでうまくアップロードができていないので今やっている最中です
連コになるかもしれませんが、できたらもう一度ここでカキコします
0407デフォルトの名無しさん
2006/05/10(水) 00:35:19ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1868.txt
0408デフォルトの名無しさん
2006/05/10(水) 00:40:14遅くなりましたが、ありがとうございました。感謝します。
0409デフォルトの名無しさん
2006/05/10(水) 00:47:02ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1871.txt
です。
ろだではC米という名前で投稿させていただいてます
よろしくお願いします。
0410デフォルトの名無しさん
2006/05/10(水) 01:23:40問題文全部テキストにでも書いて、それをロダの既存のスレにあげて
そのアドレスを張ればよかったんじゃないか
0411デフォルトの名無しさん
2006/05/10(水) 01:36:12そうですね... orz
次回から気をつけます、良いことを学びました otz
0413デフォルトの名無しさん
2006/05/10(水) 07:34:44[2] 問題文(含コード&リンク):
1/1^2+1/2^2+・・・+1/100000^2を計算するプログラムを作成せよ。
1/1+1/2^2+・・・の順に項を加えた場合と、1/100000^2+1/99999^2+・・・の順に項を加えた場合
それぞれについて、floatとdoubleで計算した結果を比較せよ。
また上記の級数の極限についてしらべてわかったことをコメント欄に記せ
[3] 環境
[3.1] OS: Win
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: あした
[5] その他の制限: ありません
お願いします!
0414灰色の幽霊
2006/05/10(水) 08:28:55期限は今日の5時まで。
全てではなくてもいいので、少しでも解けたら、レスをお願いします。
C言語でお願いします。
環境はサン・・・サンレイ?みたいなやつです。
コンパイラ名もわかりません。端末エミュレータを使います。
コンパイルするにはgccでコンパイルします。これでわかりますか?
(1)だけでもいいのでお願いします。
0415デフォルトの名無しさん
2006/05/10(水) 08:56:24#include <stdio.h>
double square(double x)
{
return x * x;
}
int main(void)
{
static double n;
unsigned long i;
for (i=0; i<100000; ++i)
n += square((double)1 / (double)(i+1))
printf("%lf\n", n);
return 0;
}
コンパイルは通してないが多分動くと思う
float版は面倒なんで勝手にやってくれ
おそらく+float -doubleでいける
足し合わせる順序は情報落ち(だっけ?)が起こるかどうかの違い
絶対値の大きく違う2数の加減を行うと、絶対値の小さい方の情報が文字通り落ちることがある
1億に0.0000000000000001を足したところで何の影響もないだろ?
0416デフォルトの名無しさん
2006/05/10(水) 08:58:40単純選択ソートか?
あれの最適化って言うと両側からやっていくやつとかだっけ
0417デフォルトの名無しさん
2006/05/10(水) 09:06:36大学のページそのまま晒すなんて勇気のある奴だなw
#include<stdio.h>
#include<stdlib.h>
int rn(int x){
const int A=48109,B=2531011,M=32768;
return (A*x+B) % M;
}
int main(int argc,char *argv[]){
int i,xn;
if(argc !=2){
printf("set xn\n");
exit(1);
}
xn = atoi(argv[1]);
printf("xn:%d\n",xn);
for(i=0;i<10;i++){
xn = rn(xn);
printf("xn+%d:%d\n",i+1,xn);
}
return 0;
}
0418デフォルトの名無しさん
2006/05/10(水) 09:08:31ちょwwwwwよく見たら俺の大学wwwwwwwww
0419デフォルトの名無しさん
2006/05/10(水) 09:17:250420デフォルトの名無しさん
2006/05/10(水) 10:01:10#define N 4000
int main(int argc,char *argv[]){
int i,j,xn,r[10];
xn = atoi(argv[1]);
printf("xn:%d\n",xn);
for(i=0;i<10;i++) r[i] = 0;
for(i=0;i<N;i++){
xn = rn(xn)%10+1;
switch(xn){
case 1: r[0]++; break;
case 2: r[1]++; break;
case 3: r[2]++; break;
case 4: r[3]++; break;
case 5: r[4]++; break;
case 6: r[5]++; break;
case 7: r[6]++; break;
case 8: r[7]++; break;
case 9: r[8]++; break;
case 10: r[9]++; break;
default: break;
}
}
for(i=0;i<10;i++){
printf("%2d: ",i+1);
for(j=0;j<r[i]/100;j++) printf("*");
printf("\t\t\t%d\n",r[i]);
}
printf("==============================\n");
printf(" TOTAL %d\n",N);
return 0;
}
0421デフォルトの名無しさん
2006/05/10(水) 10:05:21nCr=n!/r!(n-r)!を計算せよ。なおn!は関数とし、そのプロトタイプ
はlong factorial(long)とせよ。
0422デフォルトの名無しさん
2006/05/10(水) 12:21:30#include<stdio.h>
#include<stdlib.h>
const int A=48109,B=2531011,M=32768;
int rn(int x){
return (A*x+B) % M;
}
int main(int argc,char *argv[]){
int i,xn,m,n;
float x,y;
if(argc !=2){
printf("set xn\n");
exit(1);
}
xn = atoi(argv[1]);
printf("xn:%d\n",xn);
m = 50000; n=0;
for(i=0;i<m;i++){
xn = rn(xn); x = (float)xn/M;
xn = rn(xn); y = (float)xn/M;
if(x*x+y*y< 1) n++;
}
printf("%f\n",(float)4*n/m);
return 0;
}
0423デフォルトの名無しさん
2006/05/10(水) 14:30:43[2] 問題文(含コード&リンク):
疑似乱数を用いて、"大吉,"中吉","小吉","吉","凶","大凶"
を出力し、それぞれの項目のコード4,3,2,1,0を返すおみくじ関数
fortune()を作成せよ。なお、この関数内ではprintfを含ませず、
main関数で出力させること。また、それぞれの項目が現れる確率は、
順番に5.0, 20.0, 50.0,20.0,とする。また、この関数を用いて
2000回のサンプリングを行ったとき、それぞれの項目の出現割合を
出力するプログラムを作成し、上記とほぼ同じ値が得られていることを
検証せよ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5/12
[5]1つのプログラ厶で全て出力すること
0424デフォルトの名無しさん
2006/05/10(水) 15:21:57・1を越える超高確率
前者はCの範囲では不可能
後者は数学的に不可能
0425デフォルトの名無しさん
2006/05/10(水) 15:37:04#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int fortune(){
int r,i=0,rate[] = {50,200,500,200};
r = 1000*rand()/RAND_MAX;
while(i<sizeof(rate)/sizeof(int)){
if((r-=rate[i])<0) break;
i++;
}
return i;
}
int main(void){
char *data[] = {"大凶","凶","吉","小吉","大吉,\"中吉"};
int i,r,count[sizeof(data)/sizeof(int)] = {0};
srand(time(NULL));
for(i=0;i<2000;++i){
count[r = fortune()]++;
printf("%s\n",data[r]);
}
for(i=0;i<sizeof(data)/sizeof(int);++i){
printf("%s %d回 %f%\n",data[i],count[i],(float)count[i]/2000);
}
return 0;
}
0426デフォルトの名無しさん
2006/05/10(水) 15:37:15返すコードは5つ
確率は4つ
問題文の問題点を分析して提出すればいんでない?
さらに講師の分裂気味な精神を分析して、最後に専門の病院で診てもらうように勧めればmore better。
0427デフォルトの名無しさん
2006/05/10(水) 16:50:21・mainに出力 ではなく mainで出力
・確率は各数字に%をつけたもの
でした。
>>425
回答ありがとうございます。当方はまだtime.hを習っておりませんでした。
もしよろしければ、time.hを使わないプログラムを教えてもらえないでしょうか?
0428デフォルトの名無しさん
2006/05/10(水) 17:00:37■問題文から推察されるfortune()の要求仕様まとめ
1. 疑似乱数を用いる
2. "大吉,"中吉"、"小吉"、"吉"、"凶"、"大凶" を出力する
3. それぞれの項目のコードを 4、3、2、1、0 として返す
4. printf() は使用しない
5. 出力は main() 関数に任せる
6. 各項目が出現する確率は 5.0、20.0、50.0、20.0
結論「実現不能」
# 問題文に矛盾が多すぎ。
0429デフォルトの名無しさん
2006/05/10(水) 17:08:270430425
2006/05/10(水) 17:34:09srand(time(NULL));を削れ。
毎回同じ乱数が発生する(何度やっても同じ結果が出る)がおそらく仕様は満たしているはず。
0431デフォルトの名無しさん
2006/05/10(水) 17:41:01[科目名]入門C言語2
[問題]X科目の試験の成績(100点満点)と、その教科の単位数を読み込み、
教科の評価を
90〜100点 A
80〜89点 B
70〜79点 C
60〜69点 D
59点以下 E
とする。
Aなら4ポイント、Bなら3、Cなら2、Dなら1、Eなら0とし、
総合評価としてポイントの合計を単位数で割った物を算出するプログラムを求めなさい。
例:A 5単位 B 10単位 C 4単位 で、 (4*5+3*10+2*4)/19=3.05
[環境]
OS:vine linux
コンパイラ:gcc
言語:C
[期限]5/11
[備考]習ったのはif for while文まで
そこから先の事は使用不可、だそうです
よろしくお願いします。
0432デフォルトの名無しさん
2006/05/10(水) 18:08:50#include <stdio.h>
int main()
{
int scr, crdtn, rslt = 0, n = 0;
while(scanf("%d %d", &scr, &crdtn) == 2){
int pnt;
if(scr >= 90)pnt = 4;
else if(scr >= 80)pnt = 3;
else if(scr >= 70)pnt = 2;
else if(scr >= 60)pnt = 1;
else pnt = 0;
rslt += pnt * crdtn;
n += crdtn;
}
printf("%g\n", (double)rslt / n);
return 0;
}
「100 5」のように点数 単位数とスペースで区切って入力
あと、入力終了は数字以外aとかbとかcを入力してくれ
0433デフォルトの名無しさん
2006/05/10(水) 18:57:22両側、、、すみませんよくわからないです orz orz
0434デフォルトの名無しさん
2006/05/10(水) 19:12:43コンパイラオプションの問題だからプログラムは変えずに比較するんじゃないか
0435デフォルトの名無しさん
2006/05/10(水) 19:16:03[2] 問題文(含コード&リンク): 10名の学生の成績データを読み、点数の高い順にソートして出力するプログラムを作製
[3] 環境
[3.1] OS: Solaris
[3.2] コンパイラ名とバージョン: gcc バージョンはわかりませんが古くないです
[3.3] 言語: C
[4] 期限:今週の金曜(12日)0時
[5] その他の制限:
・構造体を使用すること
・簡単にデータを削除と追加する機能(連結リスト)
・文字列ライブラリは利用しないこと
・ソースファイル(prog.c)と入力ファイル(input.txt)を作る
0436デフォルトの名無しさん
2006/05/10(水) 19:33:56> [3.2] コンパイラ名とバージョン: gcc バージョンはわかりませんが古くないです
バージョンも分からないのに古くないとはこれ如何に
0437デフォルトの名無しさん
2006/05/10(水) 19:45:280438デフォルトの名無しさん
2006/05/10(水) 21:43:25[2] 問題文(含コード&リンク): 借入金・月々の返済額・金利率/月を入力し、
借入金の返済のシミュレーションを行うプログラムを作成する。
実行例
借入金 月々の返済額 金利/月(%)を入力:1000,300,5
1月 :返済額は1050円 償還額は300円 残額は750円
2月 :返済額は787.5円 償還額は300円 残額は487.5円
3月 :返済額は511.875円 償還額は300円 残額は211.875円
4月 :返済額は222.46875円 償還額は223円 残額は0円
返済額が金利より少ないと無限ループに入るので、
簡単なエラー対策を施す事。
[3] 環境
[3.1] OS: リナックス
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 5/9
[5] その他の制限: ifやswich文の所まで説明を受けました
数学の標準ライブラリは基本使用不可、
一部の計算に対し、「実数の小数点以下の端数を切り上げる」といったもののみ可
0439デフォルトの名無しさん
2006/05/10(水) 22:19:130440デフォルトの名無しさん
2006/05/10(水) 22:31:14来年の5月じゃないのか
0441デフォルトの名無しさん
2006/05/10(水) 22:51:03提出間に合わなかったので来週の火曜までなら、
ということで…。
0442デフォルトの名無しさん
2006/05/11(木) 00:11:11floorとceilも使ってみた。
#include <stdio.h>
#include <math.h>
int main(){
int debt, repay, month; double rate, rest;
printf("借入金,月々の返済額,金利/月(%%)? "); scanf("%d,%d,%lf",&debt,&repay,&rate); rate /= 100.0;
if ( debt * rate >= repay ){printf("返済額が少なすぎます。\n");return 1;}
rest = debt;month = 0;
while ( rest > 0 ){
++month; rest *= 1+rate;
if ( floor(rest) >= repay ){
printf("%d月:返済額は%g円 償還額は%d円 残額は%g円\n", month, rest, repay, rest - repay); rest -= repay;
}else{
printf("%d月:返済額は%g円 償還額は%d円 残額は0円\n", month, rest, (int)ceil(rest));rest = 0;}
}return 0;}
0443デフォルトの名無しさん
2006/05/11(木) 01:04:150点だと言うことを覚えておきなさい。ここに書いてあるソース
コードまんま持ってくるとはいい度胸しているよな
0444デフォルトの名無しさん
2006/05/11(木) 01:38:49そうカリカリすんなよ
本人がソース理解できてるか確かめたらいいんじゃない?
0445デフォルトの名無しさん
2006/05/11(木) 01:41:30手前、俺を誰だと思ってやがる!
俺は教師だぞ!
0446デフォルトの名無しさん
2006/05/11(木) 01:45:29誰かとか知らんがな
教師なら歳もそう対して変わらんだろ
すぐ0点だなんだ言うのはスマートじゃないぞ
0447デフォルトの名無しさん
2006/05/11(木) 01:48:13そうします
0448デフォルトの名無しさん
2006/05/11(木) 01:54:480449デフォルトの名無しさん
2006/05/11(木) 01:57:53本物だったら超面白いのにねww
0450デフォルトの名無しさん
2006/05/11(木) 02:04:25[2] 問題文(含コード&リンク): 再帰関数呼び出しにより、ハノイの塔を解くプログラムを作成しなさい。
ただし、ハノイの塔の高さ、初期の位置、移動先の位置はプログラムの引数として指定できるようにすること。
なお、プログラムは ハノイの塔表示ライブラリを使用してハノイの塔の様子を表示させ、実行結果には高さが4段と6段のときの出力を提出すること。
ハノイの搭表示ライブラリを使うには,まずプログラムの先頭に
#include < hanoi.h > を加えます.
このライブラリでは以下の2つの関数が使えます.
初期化関数
hanoi_init(<搭の高さ>,<初期の搭の位置>);
円板の移動
hanoi_disc_move(<移動元の棒番号>,<移動先の棒番号>);
チェック関数
hanoi_check(<移動先の棒番号>);
実行結果(例)
スピードを調節してスタートボタンを押してください
円板[0]を0から1に移動
円板[1]を0から2に移動
円板[0]を1から2に移動
完成: 終了ボタンを押してください
[3] 環境
[3.1] OS: Vine Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 5/13
よろしくお願いします...
0451デフォルトの名無しさん
2006/05/11(木) 02:16:490452デフォルトの名無しさん
2006/05/11(木) 02:20:52Computer Science Textbook C++プログラミン
著:H・M・ダイテル+P・J・ダイテル
訳:小鳩 隆一
初版:1997/9/25
以前、これのシリーズかったんだ。
章の終わりに復習問題と練習問題があったんだけど
練習問題の解答が無くて泣いたな…
0453デフォルトの名無しさん
2006/05/11(木) 02:22:16[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1876.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:5/11 23:59
お願いします。
0454デフォルトの名無しさん
2006/05/11(木) 02:24:55文字コードとか2バイト文字考慮する必要あるの
それともASCIIだけ?
0455デフォルトの名無しさん
2006/05/11(木) 04:20:13プログラミングに正解はない。いや、必要がない。
0456デフォルトの名無しさん
2006/05/11(木) 04:56:44hanoi.hがどんなんかは知らんが、解く部分だけならこう:
void solve(int f, int t, int w, int h){
if ( h == 1 ){
hanoi_disc_move(f, t);
}else{
solve(f, w, t, h - 1 );
hanoi_disc_move(f, t);
solve(w, t, f, h - 1 );
}
}
fからtへh枚移動。wはf,t以外。例えばsolve(0, 2, 1, 6);
0457デフォルトの名無しさん
2006/05/11(木) 05:24:56言いたいことは分かるけどね。
それはプログラム組めるようになった人間に言ってくれ。
0458デフォルトの名無しさん
2006/05/11(木) 06:33:120459デフォルトの名無しさん
2006/05/11(木) 06:53:03それぞれの要素の値を表示するプログラムを作成せよ
うわんわからね
0461デフォルトの名無しさん
2006/05/11(木) 11:33:24[2] 問題文(含コード&リンク):3つの整数を入力し,それらを3辺とする三角形ができるならば,その面積を出力し,そうでないならば, 三角形ではありません! というメッセージを表示するプログラムを作れ
・三辺の長さが a, b, c である三角形がつくれるための条件は,
a+b > c かつ b+c > a かつ c+a > b
・三辺の長さが a, b, c である三角形の面積は,
s(s-a)(s-b)(s-c) ただし,s = (a+b+c)/2 注意 : s を求める際に小数点以下が切り捨てられないようにしよう.
・平方根を求める関数は,sqrt たとえば,sqrt(x+1) とすると,x+1 の平方根を返す.
ただし,引数(括弧の中)の式は,float 型または double 型でなければならない.
・sqrt や sin などの数学的関数を使う場合は... プログラム先頭( int main() より前のどこか)に
#include<math.h> をつける.また,コンパイルするときは(ファイル名を AB.c とする),
gcc -lm AB.c (または,gcc -lm -o AB AB.c)
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:テキストエディタはmeadow2、プログラムの実行はcygwinを使います。
[3.3] 言語:C
[4] 期限:2006年5月12日(金)
[5] その他の制限:特にないです
よろしくお願いしますm(_)m
0462デフォルトの名無しさん
2006/05/11(木) 12:21:42#include<stdio.h>
#include<math.h>
int main(void){
int a,b,c,s;
scanf("%d %d %d",&a,&b,&c);
if(a+b > c && b+c > a && c+a > b){
s = a+b+c;
printf("面積%f",sqrt((float)s*(s-2*a)*(s-2*b)*(s-2*c)/16));
}else{
puts(" 三角形ではありません!");
}
return 0;
}
0463灰色の幽霊
2006/05/11(木) 12:28:35次の課題がでました。(もちろんわかりません)
要素数nのint型配列の全要素の値を1つずつ巡回する(例えば、
元のa[0]の値を新たなa[1]の値に、元のa[1]の値を新たなa[2]の値に、、、
を行い、元のa[n-1]の値を新たなa[0]の値とする)ような関数
rotate_array(int *x, int n)
を作成せよ。
なお、関数の第1引数としては、配列の先頭要素のアドレスを、
第2引数としては配列の要素数を与えるものとする。
この関数は、例えば、以下のような利用の仕方を想定している。
main()
{
int a[3];
a[0]=1;
a[1]=22;
a[2]=333;
printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);
rotate_array(a,3);
printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);
}
(実行例)
a[0]=1, a[1]=22, a[2]=333
a[0]=333, a[1]=1, a[2]=22
ソラリス9とか言うやつです。gccでコンパイルするC言語です。
17日まででよろしくお願いします。
0464デフォルトの名無しさん
2006/05/11(木) 12:33:11void rotate_array(int *x, int n)
{
int last = x[n-1];
int i;
for(i = n - 1; i >= 1; i--)
x[i] = x[i-1];
x[0] = last;
}
0465デフォルトの名無しさん
2006/05/11(木) 13:07:27問題文:以下の配列の最大和の区間を求めよ。
3,-8,4,5,7,2,-9,1,2,4
環境
OS:Windows xp
言語:C
期限:2006年5月13日(土)
その他の制限:以下のプログラムと関数を使ってお願いします。
#define NUM 10
int main(void)
{
int array[NUM]={3,-8,4,5,7,2,-9,1,2,3,4};
int index_left,index_right;
sarch(): //最大区間を探索する関数
output(); //出力の結果
return(0);
}
0466デフォルトの名無しさん
2006/05/11(木) 13:48:140467デフォルトの名無しさん
2006/05/11(木) 13:51:24scanf エフリード などを使って作ってください。
0469デフォルトの名無しさん
2006/05/11(木) 17:36:44前この課題の解法で凄いの思いついてた奴がいたな。
その時はO(n^2)の制限付きだったが。
0470デフォルトの名無しさん
2006/05/11(木) 17:54:57あのときのは「和がもっとも大きい区間」じゃなくて「和が指定された値にもっとも近い区間」だった。
>>465の問題ならO(n)で解けるはず。
0471デフォルトの名無しさん
2006/05/11(木) 18:10:15こんなんでいいのか?
0472471
2006/05/11(木) 18:10:46#define NUM 10
void search(int a[],int *left,int *right)
{
int i,j,max=0;
for(i=0;i<NUM;i++)
{
int sum=0;
for(j=i;j<NUM;j++)
{
sum+=a[j];
if(sum>max)
{
max=sum;*left=i;*right=j;
}
}
}
return;
}
void output(int a[],int *left,int *right)
{
printf("%d-%d\n",a[*left],a[*right]);
return;
}
int main(void)
{
int array[NUM]={3,-8,4,5,7,2,-9,1,2,4};
int index_left,index_right;
search(array,&index_left,&index_right);
output(array,&index_left,&index_right);
return 0;
}
0473デフォルトの名無しさん
2006/05/11(木) 18:12:00O(n)は無理だと思うぞ。
0474デフォルトの名無しさん
2006/05/11(木) 18:48:16O(n)の例。rightに入る値が>>472より一つ大きいのに注意。
int candidate(int a[], int size, int *left, int *right)
{
int sum = 0;
for(*left = 0; *left < size && a[*left] < 0; (*left)++);
if(*left == size)
return 0;
for(*right = *left; *right < size && a[*right] > 0; (*right)++)
sum += a[*right];
return sum;
}
void search(int a[], int *left, int *right)
{
int cl, cr, csum, i, sum = INT_MIN;
for(i = 0; csum = candidate(a + i, NUM - i, &cl, &cr); i += cr)
if(csum > sum)
{
*left = cl + i;
*right = cr + i;
sum = csum;
}
if(sum < 0) /* 正の数が一つもなかった。*/
for(i = 0; i < NUM; i++)
if(a[i] >= sum)
{
*left = i;
*right = i + 1;
sum = a[i];
}
}
0475デフォルトの名無しさん
2006/05/11(木) 19:11:470476デフォルトの名無しさん
2006/05/11(木) 19:13:41ちょっと興味があったんで読んでみたんだが、正数がある場合には
正数だけが続く区間を探して行って、その中の最大を
正数が無い場合には最大の要素を返すって認識であってる?
0477デフォルトの名無しさん
2006/05/11(木) 19:15:08確かにそうだ。指摘サンクス。
0478474
2006/05/11(木) 19:26:27void search(int a[], int *left, int *right)
{
int psum = 0, psum_min = INT_MAX, sum = INT_MIN;
int i, psum_min_pos;
for(i = 0; i < NUM; i++)
{
psum += a[i];
if(psum < psum_min)
{
psum_min = psum;
psum_min_pos = i;
}
if(psum - psum_min > sum)
{
sum = psum - psum_min;
*left = psum_min_pos + 1;
*right = i + 1;
}
}
}
0479478
2006/05/11(木) 19:34:32問題文には従っているということで許してくれ。
0480デフォルトの名無しさん
2006/05/11(木) 19:39:07[2] 問題文:
文字列と整数をコマンドラインで指定し、指定された文字列から指定された整数値の文字数を先頭から取り出して表示するコマンドを作成せよ。
char *strnget(char *s1, char *s2, int n)
s1 の先頭 n 文字を s2 にコピーしてその先頭アドレスを戻り値とすること。
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] C
[4] 期限:06年5月15日10:20まで
[5] その他の制限:
実行部において添字演算子を用いないこと
*(p+i) の形式を用いないこと
文字列操作関数を用いないこと
自分で以下のものを作ったのですが、どこが間違っているのかよくわかりません
よければ指摘、訂正お願いします
0481480
2006/05/11(木) 19:40:49char *strnget(char *s1, char *s2, int n)
{
int i;
for(i=0;i<n;i++){
*s2=*s1;
s1++;
s2++;
}
return s2;
}
int main(int argc, char *argv[100])
{
char *s[100];
printf("%s\n",*strnget(*argv,*s,argc));
return(0);
}
0482デフォルトの名無しさん
2006/05/11(木) 19:46:49*strnget関数のfor文の中をもっとよく考えろ。
0483デフォルトの名無しさん
2006/05/11(木) 19:47:232番目の要素が-1のときにNG。
0484デフォルトの名無しさん
2006/05/11(木) 19:47:37#include <stdio.h>
#include <stdlib.h>
char *strnget(char *s1, char *s2, int n)
{
int i;
char *s2_orig = s2;
for(i=0;i<n;i++){
*s2=*s1;
s1++;
s2++;
}
return s2_orig;
}
int main(int argc, char **argv)
{
char s[100];
int n;
if(argc != 3)
return(1);
n = atoi(argv[2]);
printf("%s\n",strnget(argv[1],s,n));
return(0);
}
0485デフォルトの名無しさん
2006/05/11(木) 19:53:570486474
2006/05/11(木) 20:05:23今度こそ。すれ汚しすまん。
void search(int a[], int *left, int *right)
{
int psum = 0, psum_min = 0, sum_max = INT_MIN;
int i, psum_min_pos = -1;
for(i = 0; i < NUM; i++)
{
psum += a[i];
if(psum - psum_min > sum_max)
{
sum_max = psum - psum_min;
*left = psum_min_pos + 1;
*right = i + 1;
}
if(psum < psum_min)
{
psum_min = psum;
psum_min_pos = i;
}
}
}
0487435
2006/05/11(木) 21:49:16今日一日考えたけどわからねorz
0488デフォルトの名無しさん
2006/05/11(木) 22:29:09問題がつまらないからだと思う。
0489デフォルトの名無しさん
2006/05/11(木) 22:45:210490デフォルトの名無しさん
2006/05/11(木) 22:51:04つーかinput.txtくらい自分で作れやボケッ。
0491デフォルトの名無しさん
2006/05/11(木) 22:58:000492デフォルトの名無しさん
2006/05/11(木) 23:45:190493デフォルトの名無しさん
2006/05/11(木) 23:57:100494デフォルトの名無しさん
2006/05/12(金) 00:19:40x = { {1, 2, 3} },{ {4, 5, 6} }
y = { {1, 5},{5, 3}, {8, 1} }
の積を求めるためにはどうやってプログラムを組めばいいでしょうか?
よろしくお願いします・
0495デフォルトの名無しさん
2006/05/12(金) 00:24:440496デフォルトの名無しさん
2006/05/12(金) 00:35:22左が名前で右が点数な
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1877.txt
0497デフォルトの名無しさん
2006/05/12(金) 00:38:11#include <iostream>
using namespace std;
int main()
{
int x[2][3] = { {1, 2, 3} , {4, 5, 6} } ;
int y[3][2] = { {1, 5},{5, 3}, {8, 1} } ;
int sum[2][2];
sum[0][0] = x[0][0] * y[0][0] + x[0][1] * y[1][0] + x[0][2] * y[2][0] ;
sum[0][1] = x[0][0] * y[0][1] + x[0][1] * y[1][1] + x[0][2] * y[2][1] ;
sum[1][0] = x[1][0] * y[0][0] + x[1][1] * y[1][0] + x[1][2] * y[2][0] ;
sum[1][1] = x[1][0] * y[0][1] + x[1][1] * y[1][1] + x[1][2] * y[2][1] ;
}
0498デフォルトの名無しさん
2006/05/12(金) 00:45:440499デフォルトの名無しさん
2006/05/12(金) 00:59:57だったらオマイが使ってやってくれ
それで解決。
0500デフォルトの名無しさん
2006/05/12(金) 01:19:53ありがとうございます。助かりました!
>>495
今度からはしっかり読んでから質問します。すみません。
0501デフォルトの名無しさん
2006/05/12(金) 02:13:390502デフォルトの名無しさん
2006/05/12(金) 02:38:320503デフォルトの名無しさん
2006/05/12(金) 02:48:27よく >>492 読んでみ。
0504デフォルトの名無しさん
2006/05/12(金) 02:53:20奇才現る
0505デフォルトの名無しさん
2006/05/12(金) 03:25:11void search(int *a,int *left,int *right)
{
int i, max, now, nowLeft, nowRight;
max=now=a[*left=*right=nowLeft=nowRight=0];
for(i=1; i<NUM; ++i){
if(now>0) now+=a[nowRight=i]; else now=a[nowLeft=nowRight=i];
if(now>max){ max=now; *left=nowLeft; *right=nowRight; }
}
}
0506435
2006/05/12(金) 07:57:27結局お前らできないってことだろ?
まあ恥ずかしがらなくていいよ
所詮2ちゃんねるだなw
0507デフォルトの名無しさん
2006/05/12(金) 08:01:470508デフォルトの名無しさん
2006/05/12(金) 09:18:43恥じぬ!
省みぬ!
0509デフォルトの名無しさん
2006/05/12(金) 11:32:48[2] 問題文(含コード&リンク):
非負の10進数を読み込み、2進数表記で出力する関数を 再帰を用いて 作成せよ。
(例) 7 -> 111
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限 5/16
0511509
2006/05/12(金) 11:52:370512デフォルトの名無しさん
2006/05/12(金) 12:47:23[2] 1. 標準入力またはコマンドライン引数で指定されたファイルから、
各行が2個の浮動小数点数からなる(区切りは空白のみ)テキストを入力し、
特に指定がなければ二次元ベクトルと見なしてユークリッドノルムが小さい順に整列して標準出力に出力するプログラムを書け。
ただし、以下のオプションをとることができるようにせよ。
-m ユークリッドノルムの代わりに最大値ノルムを使う。
-p p ユークリッドノルムの代わりにp乗ノルムを使う。
-r 逆順に整列する。
-S 整列しない。
-e ユークリッドノルムを使う。
-s 正順に整列する。
環境変数VECTOR_NORMがセットされている場合、その値により次のように使用するノルムを変更すること。
EUCLIDかEuclidかeuclidかのいずれかで始まる文字列。ユークリッドノルムを使う。
MAXかMaxかmaxかのいずれかで始まる文字列。 最大値ノルムを使う。
浮動小数点数として解釈できる文字列。 浮動小数点数として解釈した値をpとする。pが1以上ならばp乗ノルムを使う。そうでなければ無視する。
その他無視する。
環境変数VECTOR_SORTがセットされている場合、その値により次のように出力順を変更すること。
incまたはincreasing 正順(ノルムが小さい順)に整列する。
decまたはdecreasing 逆順(ノルムが大きい順)に整列する。
no 整列しない。
その他 無視する。
なお、コマンドライン引数を環境変数より優先すること。
問題文(含コード&リンク):
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限 5/16
0513デフォルトの名無しさん
2006/05/12(金) 13:38:50[2] 問題文(含コード&リンク):
以下のif文を、同じ働きをするif文や条件式を使わない方法で書き直しなさい。
(switch文や'?'を用いないでお願いします)
if(buf[i] < 0) count++;
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限 5月15日
0514デフォルトの名無しさん
2006/05/12(金) 13:42:51count += buf[i] < 0;
0515デフォルトの名無しさん
2006/05/12(金) 13:52:06buf[i] < 0
の値って処理系依存じゃね?
0516デフォルトの名無しさん
2006/05/12(金) 13:53:08いいえ。
0517デフォルトの名無しさん
2006/05/12(金) 13:54:220518デフォルトの名無しさん
2006/05/12(金) 13:54:23buf[i] < 0 && count++;
0519デフォルトの名無しさん
2006/05/12(金) 13:58:230520デフォルトの名無しさん
2006/05/12(金) 13:59:360521まなみ
2006/05/12(金) 14:03:55C言語の二次方程式のプログラムが
わからなぃですぅ(><)
だれかぉしぇてくださぃ
0522デフォルトの名無しさん
2006/05/12(金) 14:05:30>1
まぁ、このスレくらい検索してみるこった。
0523デフォルトの名無しさん
2006/05/12(金) 14:06:540524デフォルトの名無しさん
2006/05/12(金) 14:10:230525まなみ
2006/05/12(金) 14:11:510526デフォルトの名無しさん
2006/05/12(金) 14:15:150527デフォルトの名無しさん
2006/05/12(金) 14:18:590528デフォルトの名無しさん
2006/05/12(金) 14:20:350529まなみ(♂)
2006/05/12(金) 14:23:400530デフォルトの名無しさん
2006/05/12(金) 14:39:45count += buf[i]>> CHAR_BIT * sizeof(buf[i]) - 1 & 1
0531デフォルトの名無しさん
2006/05/12(金) 14:43:52CHAR_BIT * sizeof(buf[i])がbuf[i]のビット幅である保証はない。
例えばCHAR_BITが9でbuf[i]のビット幅が32かもしれん。
0532デフォルトの名無しさん
2006/05/12(金) 14:45:290533デフォルトの名無しさん
2006/05/12(金) 14:56:280534デフォルトの名無しさん
2006/05/12(金) 15:07:44Linux上のgccと実装は明らかなわけやから、できるか、できんか、どっちかやろ。
0535デフォルトの名無しさん
2006/05/12(金) 15:15:54使われる実装が明らかでもそれに依存して良いとは限らないだろ。
特にこの場合は宿題なんだから処理系とは独立して正しいコードが求められている可能性は十分にある。
0536デフォルトの名無しさん
2006/05/12(金) 15:32:38,;; ::::::::"゙;;,,, の
,;; ''''"" ゙゙゙'''';;,,, こ
,;; ,, :::::::::::::::::'';;,, と
. ,;;,;゙′ :::::::::::::::::゙';;,゙゙゙'''''''';;;;;,,, 好
,;;゙ ::::::::::.. :::::::::゙゙゙"'';;;,, き
;; ー-、 ::::::::: :::::::,,;;::'''゙ ?
';; -ー-、 :::::::: ,,;;'"
;; ″ :::::::;; ,,;;"゙
;;, iー┐ ''"* ::::::::::,;;-'゙゙
゙';;,, ー ' :::::::::::,;;''
゙゙'';,, :::::::::::;;;;::'゙"
'; :::::::::::':;,
'; :::::::::':;, ;`;,
'; :::::::':;,丿 ;'
0537513
2006/05/12(金) 16:07:17シフト演算の説明の後に書いてある問題で、
>>533の方みたいにunsignedを使った方法で簡易なものがあればお願いします
~(~0ul >> 1)) は見たことないので・・・
0538デフォルトの名無しさん
2006/05/12(金) 16:18:090ulは(unsigned long)0と書き換えても良い。
0539513
2006/05/12(金) 16:19:150540デフォルトの名無しさん
2006/05/12(金) 16:26:110541デフォルトの名無しさん
2006/05/12(金) 16:39:500542デフォルトの名無しさん
2006/05/12(金) 18:20:44[2] 問題文:キーボードから月を数字で入力し、英語名称とその短縮形を出力するプログラムを作り実行しなさい。
ただし、0から12までを除いた数字入力に対してはエラーと出力し、0を入力すればプログラムを終了するようにしなさい。
また、繰り返しにはwhileループ、多分岐選択にはswitchを使用すること。
入出力例)
please input 0 if you wish to finish.
please input month:1(注:数字で月を入力)
January Jan.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限 5/17 どうかよろしくお願いします(ノД`)
0543デフォルトの名無しさん
2006/05/12(金) 18:56:440544デフォルトの名無しさん
2006/05/12(金) 19:13:38#include <stdio.h>
#include <ctype.h>
int main(void)
{
char achInput[4];/* 入力データ */
while (1)
{
fgets(achInput, 4, stdin);
if ( !isdigit(achInput[0]) || !isdigit(achInput[1]) && (achInput[1] != '\n') || achInput[2] != '\n' && achInput[2] != '\0' ) break; /* 非数は終了でいいだろ? */
switch (achInput[0])
{
case '1':
switch (achInput[1])
{
case '\n':
puts("January, Jan");
break;
case '0':
puts("October, Oct");
break;
case '1':
puts("November, Nov");
break;
0545デフォルトの名無しさん
2006/05/12(金) 19:14:35puts("December, Dec");
break;
default:
puts("Error!");
break;
}
break;
case '2':
puts("Febrary, Feb");
break;
case '3':
puts("MandoX A");
break;
case '4':
puts("booooooon");
break;
case '5':
puts("ぬるぽ");
break;
case '6':
puts("がっ");
break;
0546デフォルトの名無しさん
2006/05/12(金) 19:15:48puts("Neeeeeeeeeeeeeeeeeeet");
break;
case '8':
puts("nil");
break;
case '9':
puts("NULL");
break;
case '0':
return 0;
default:
puts("Error!");
break;
}
}
return 0;
}
面倒(とゆうかやり方忘れた)だからバッファのフラッシュはやってない
だから3文字以上入力された場合の動作は未定義
0547デフォルトの名無しさん
2006/05/12(金) 20:03:14[2] 問題文(含コード&リンク):
最大40個の構造体(名前、身長、体重を要素として含む)を用意し、40個以内でデータ
の入出力を行い、それらの一覧を表示するプログラム
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限 5/15
よろしくお願いします m(__)m
0548デフォルトの名無しさん
2006/05/12(金) 20:11:36#include <stdio.h>
int main()
{
char buff[1024];
int mon;
while (1) {
printf("please input 0 if you wish to finish.\n"
"please input month: ");
if(fgets(buff, sizeof(buff), stdin) == 0)
return 0;
if (sscanf(buff, "%d", &mon) < 1 || mon < 0 || mon > 12) {
fprintf(stderr, "エラー\n");
continue;
}
switch (mon) {
case 0: return 0;
case 1: printf("January, Jan\n"); break;
case 2: printf("February, Feb\n"); break;
case 3: printf("March, Mar\n"); break;
case 4: printf("April, Apr\n"); break;
case 5: printf("May, May\n"); break;
case 6: printf("June, Jun\n"); break;
case 7: printf("July, Jul\n"); break;
case 8: printf("August, Aug\n"); break;
case 9: printf("September, Sep\n"); break;
case 10: printf("October, Oct\n"); break;
case 11: printf("November, Nov\n"); break;
case 12: printf("December, Dec\n"); break;
}
}
}
0549デフォルトの名無しさん
2006/05/12(金) 20:21:42最低でも構造体(の基になるデータ)は自分で用意しろ
用意したからといってするとは限らないが、それすらないなら高確率で誰もやってくれない
0550デフォルトの名無しさん
2006/05/12(金) 20:28:180551デフォルトの名無しさん
2006/05/12(金) 20:58:05今気づいたけど
0552デフォルトの名無しさん
2006/05/12(金) 22:04:55データを用意しているか以前に、問題全文載せてなおデータの仕様も不明では話にならない。
逆に仕様が明らかならデータは(あったほうがテストしやすいとはいえ)なくても困らない。
0553デフォルトの名無しさん
2006/05/12(金) 22:06:130554デフォルトの名無しさん
2006/05/12(金) 22:36:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1890.c
0555デフォルトの名無しさん
2006/05/12(金) 23:46:40#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ITEMS (40)
#define LBUF (1024)
struct person {
char *name;
double height; /* 身長 */
double weight; /* 体重 */
};
int input_person(struct person *psn)
{
char buf[LBUF];
char name[LBUF];
int s;
printf("名前は? (`-` で入力終了) ");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, " %[^\n] \n", name);
if(strcmp(name, "-") == 0)
return 0;
else
psn->name = strdup(name);
do {
printf("身長は? ");
fgets(buf, sizeof(buf), stdin);
s = sscanf(buf, " %lf", &psn->height);
0556555
2006/05/12(金) 23:47:41do {
printf("体重は? ");
fgets(buf, sizeof(buf), stdin);
s = sscanf(buf, " %lf", &psn->weight);
} while(s != 1);
return 1;
}
int main()
{
struct person person_list[MAX_ITEMS];
int listlen;
int i;
int s;
for(listlen = 0; listlen < MAX_ITEMS; listlen ++)
{
s = input_person(&person_list[listlen]);
if(s == 0)
break;
if(s == -1)
perror("Error: ");
}
for(i=0; i<listlen; i++)
printf("名前:%s 身長:%.1lfm 体重%.1lfkg\n", person_list[i].name,
person_list[i].height, person_list[i].weight);
return 0;
}
0557デフォルトの名無しさん
2006/05/13(土) 01:16:50[2] 問題文(含コード&リンク):
1次元配列の要素の中で最大の物を表示。
(注意:a[0〜n]の要素の中でたとえば5が最大であるとき、a[0]とa[1]が5であるとすれば
5を二回表示させよ。その際、配列を入れ替えたりしてはならない)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限5/17
[5] その他の制限:
上のプログラムを関数にしてメインを作るのですが
メインは完成したものの関数が思いつきません・・・
0558デフォルトの名無しさん
2006/05/13(土) 01:18:57[2] 問題文(含コード&リンク):口頭で説明されたので、細かくはわからないんですが、音声データを読み込んで、任意のファイルの任意バイト数を変換するプログラムをお願いします。
初心者で何もわからないんですが、エフオープン・scanf・エフリード・rb・バイナリなどを使うと言っていました。
[3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C
[4] 期限: 2006年 5月14日 22:00まで
[5] その他の制限: なし
完璧じゃなくてもいいんでお願いします。
0559デフォルトの名無しさん
2006/05/13(土) 01:31:54void aaa(int array[],int count)
{
int i,max=0;
for (i=0;i<count;i++){
if (array[i]>max){
max=array[i];
}
}
for (i=0;i<count;i++){
if (array[i]==max){
printf("%d\n",array[i]);
}
}
return;
}
0560デフォルトの名無しさん
2006/05/13(土) 01:34:26効率はあれかもしれないけど、まず最大値を求めて、その後配列の中に最大値がいくつあるか数えるといいかも
>>558
その説明でどんなプログラムか分かる人間がいるのだろうか。
せめてもうちょっと自分なりにこんな動作するんじゃないかなーとか書いてくれ。
0561デフォルトの名無しさん
2006/05/13(土) 02:03:09もう一回聞いて来た方がよいと思われ
もし本当にそれだけしか説明がないんなら出題者が何らかの病気
0562デフォルトの名無しさん
2006/05/13(土) 02:19:400563デフォルトの名無しさん
2006/05/13(土) 03:40:23俺にはそんなメールする勇気ないぞ
0564デフォルトの名無しさん
2006/05/13(土) 03:47:19普通「口頭で説明」だけって事は無いだろう。
0565デフォルトの名無しさん
2006/05/13(土) 08:32:310566デフォルトの名無しさん
2006/05/13(土) 08:43:52[2] 問題文(含コード&リンク):
Unixのxeyesの様に、目玉もしくは矢印が、マウスカーソルのある方向を示すプログラムを書け。
なお、フォーカスが他のアプリケーションにあるときも、方向を指し続けるようにすること。
[3] 環境
[3.1] OS: Windows
[3.2] C++Builder 6
[3.3] C++
[4] 期限: 2006/6/12
[5] その他の制限: 特になし
0567デフォルトの名無しさん
2006/05/13(土) 09:06:45二度数えしない方法.
#include <stdio.h>
int main() {
int a[] = {1,4,3,2,4,2,3,4};
int i, max, count, n = 8;
max = -10000; /* 十分小さな数 */
count = 0;
for (i = 0; i < n; ++i) {
if (max < a[i]) { max = a[i]; count = 0; }
if (max == a[i]) { ++count; }
}
for (i = 0; i < count; ++i)
printf("%d ", max);
}
0568デフォルトの名無しさん
2006/05/13(土) 10:18:35[2] 問題文(含コード&リンク):
1から100までの整数に関し、以下の仕様にしたがって数値を表示するプログラムを作成せよ。
�@3かつ2で割り切れる数値を小さいものから順に表示する
�A上記�@の表示を行った後、3または2で割り切れ、かつ10以上50未満の数値を大きなものから順に表示する
�B上記�Aで表示した数値の総和も表示する
[3] 環境
[3.1] OS: linux
[3.2] gcc
[4] 期限: 2006/6/18
[5] その他の制限: 特にありません。お願いします
0569デフォルトの名無しさん
2006/05/13(土) 10:26:39int main() {
int i, sum;
/* (1) */
for (i = 1; i <= 100; ++i)
if (i % 2 == 0 && i % 3 == 0)
printf("%d ", i);
printf("\n");
/* (2) */
for (i = 49; i >= 10; --i)
if (i % 2 == 0 || i % 3 == 0)
printf("%d ", i);
printf("\n");
/* (3) */
sum = 0;
for (i = 49; i >= 10; --i)
if (i % 2 == 0 || i % 3 == 0)
sum += i;
printf("%d\n", sum);
}
0570デフォルトの名無しさん
2006/05/13(土) 10:29:43[2] 問題文:
配列 a = [ a[0], a[1], ..., a[n-1] ] が与えられる.
(1) a の連続する部分の和の最大値を求めよ.
例: a = [-3,1,2,-1,3,-5] だった場合 [1,2,-1,3] の部分を取って,答えは 5.
注: 「何も取らない」 で 0 にすることは認めない.
つまり a = [-3,-2,-1,-2,-3] だった場合 [-1] を取って -1.
(2) a の二つの連続する部分の和の合計の最大値を求めよ.
例: a = [-3,1,2,-1,3,-5] だった場合 [1,2] と [3] を取って答えは 6.
注: 二つの部分が分離している必要はない.
つまり a = [-5,1,2,3,-5] だった場合 [1,2] と [3] を二つの部分と見て 6.
(3) 三つ以上の連続する部分の和の最大値を求める効率のよい方法はあるだろうか.
[3] 環境: C/C++ どちらでも.
[4] 期限: 5/21 まで.
0571デフォルトの名無しさん
2006/05/13(土) 11:12:39長さゼロの列を認めないのはすごく気持ち悪いんだが。
例えば(2)で、a = [-1, 8, -3]のとき答えは7でいいのか?
0573デフォルトの名無しさん
2006/05/13(土) 11:28:42すぐ上くらい見ろ。>>505とか。
0574デフォルトの名無しさん
2006/05/13(土) 11:32:16それを踏まえた出題だと思うが。
0575570
2006/05/13(土) 11:36:18すんません,単純に見てませんでした orz...
(2), (3) だけでお願いします.
# 実際にゼミで問題になったのは (3) ですが,説明には (1), (2) が
# あったほうがよいと思うので,(1), (2) を列記しました.
0576デフォルトの名無しさん
2006/05/13(土) 13:41:21単純に自分の頭が弱いんだと思うんだが、
例を見ても規則性が分からぬ。
0577576
2006/05/13(土) 13:51:280578デフォルトの名無しさん
2006/05/13(土) 13:51:53struct seiseki {
int code; /*学籍番号*/
double eng; /*英語の点数*/
double math; /*数学の点数*/
char name[50]; /*名前*/
};
/*平均計算関数のプロトタイプ宣言*/
void CalcAverage(struct seiseki* classA,
double* Average1, double* Average2);
int main(void)
{
int i;
double AverageEng = 0.0; /*英語の平均値*/
double AverageMath = 0.0; /*数学の平均値*/
/*構造体の初期化*/
struct seiseki classA[5] = {
{1, 59.4, 84.3, "Aomori"},{2, 43.8, 94.2, "Itamoto"},{3, 74.3, 64.5, "Kimura"},{4, 57.3, 73.4, "Satou"},{10, 62.6, 55.9, "Sugiyama"}
};
/*平均の計算(関数に情報を渡している)*/
CalcAverage(☆☆☆); /*結果をアドレス渡しにしていることに注意*/
/*結果の表示*/
printf("Average(English):%f, Average(Math):%f\n", AverageEng, AverageMath);
return 0;
}
void CalcAverage(struct seiseki* classA, double* Average1, double* Average2)
{
☆☆☆
}
5人の英語の課題の点数と数学の点数の平均をそれぞれ求めるプログラムです。☆☆☆のところを補充して、正しいプログラムをお願いします。
0579デフォルトの名無しさん
2006/05/13(土) 14:02:01>>1
0580デフォルトの名無しさん
2006/05/13(土) 14:11:31テンプレ位読もうな。
あと、この仕様だと人数決めうちにしかできないが、課題だからそうなってんのかな。
呼び出し部は CalcAverage(classA, &AverageEng, &AverageMath);
void CalcAverage(struct seiseki* classA, double* Average1, double* Average2)
{
int i;
double Ave1 = 0, Ave2 = 0;
for( i=0; i<5; i++ ) {
Ave1 += classA[i].eng;
Ave2 += classA[i].math;
}
*Average1 = Ave1 / 5;
*Average2 = Ave2 / 5;
}
0581デフォルトの名無しさん
2006/05/13(土) 14:16:46関係ないけど、出題者の命名規則がアレだな。
0582デフォルトの名無しさん
2006/05/13(土) 14:18:45ありがとうございました。
0583デフォルトの名無しさん
2006/05/13(土) 15:08:25PGのゼミってあるわけ?
0584デフォルトの名無しさん
2006/05/13(土) 16:12:02一応できた。長さnの入力をm個に分けることがO(mn)の時間とO(m)の空間でできるはず。
>>505のコードをベースにした。
# include <algorithm>
# include <vector>
int solve(int *a, int size, int m)
{
std::vector<int> init(m, 0);
std::vector<int> last_max(m, 0);
std::vector<int> last_now(m, 0);
for(int i = 0; i < size; i++) {
if(i < m) {
init[i] = i > 0 ? init[i-1] + last_max[i-1]: 0;
last_max[i] = a[i];
last_now[i] = a[i];
}
for(int k = 0; k < m && k < i; k++) {
last_now[k] = std::max(last_now[k], 0) + a[i];
last_max[k] = std::max(last_now[k], last_max[k]);
}
for(int k = 0; k < m - 1 && k < i; k++) {
int diff = init[k] + last_max[k] - init[k+1];
last_max[k+1] -= diff;
last_now[k+1] -= diff;
init[k+1] = init[k] + last_max[k];
}
}
return init[m-1] + last_max[m-1];
}
0585デフォルトの名無しさん
2006/05/13(土) 16:14:22研究するときデータ採取とかにプログラムを書く必要がある場合は、
課題として出されたりするんじゃないの?
しらんけど。
0586558
2006/05/13(土) 17:11:20表されて、そのファイルを関数エフオープンで任意のファイルを読み
込んで、スキャンエフで任意バイト数(何バイト目〜何バイト目を)
の指定です。
プリントでの問題文がないので、説明の仕様がありません。
0587デフォルトの名無しさん
2006/05/13(土) 17:39:530588デフォルトの名無しさん
2006/05/13(土) 17:41:08fopen
0589558
2006/05/13(土) 17:41:520590デフォルトの名無しさん
2006/05/13(土) 17:43:43ますますわかんねぇ!
0591デフォルトの名無しさん
2006/05/13(土) 18:03:560592558
2006/05/13(土) 18:10:310593デフォルトの名無しさん
2006/05/13(土) 18:45:03屏風から虎を追い出してください。さすれば捕まえて差し上げましょう。
0594デフォルトの名無しさん
2006/05/13(土) 19:22:27m9( ゚д゚ )
0595デフォルトの名無しさん
2006/05/13(土) 19:25:240596デフォルトの名無しさん
2006/05/13(土) 19:27:47('A`) メガネメガネ
ノ ノ)_
0597デフォルトの名無しさん
2006/05/13(土) 19:32:400598デフォルトの名無しさん
2006/05/13(土) 19:34:370599デフォルトの名無しさん
2006/05/13(土) 19:37:46株式会社エフ商会のことじゃないのかい?
http://www.f-shokai.co.jp/
0600デフォルトの名無しさん
2006/05/13(土) 19:39:25へー、知らなかったよ
0601デフォルトの名無しさん
2006/05/13(土) 20:07:23#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *fp;
int n;
char *p;
if(argc < 3)return 1;
fp = fopen(argv[1], "rb");
if(fp == NULL)return 1;
n = atoi(argv[2]) + 1;
p = (char*)malloc(sizeof(char) * n);
if(p == NULL)return 1;
fread( p, sizeof(char), n, fp);
free(p);
fclose(fp);
return 0;
}
コマンドライン引数は 対象のファイル バイト数 な
ところで変換ってn(ry
0602デフォルトの名無しさん
2006/05/13(土) 21:54:27どっちにしても>>558はちゃんと授業出てたのか?
もしちゃんと出ててこの状況なら、出題者に質問或いは抗議してもいいんじゃまいか。
0603デフォルトの名無しさん
2006/05/13(土) 21:56:43ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1892.txt
実行例
hoge.exe voice.wav
な
0604billy
2006/05/13(土) 23:14:42% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
0605デフォルトの名無しさん
2006/05/13(土) 23:15:21[2] 問題文(含コード&リンク):1、テキストの幅を調べる 2、1ではタブも一文字とされるが
水平タブを考慮してテキストの幅を正しく調べられるように改良せよ
[3] 環境 mac UNIX
[4] 期限: 2006年 5月17
自分で考えた1については
#include <stdio.h>
int main(){
int c;
int width, maxwidth = 0;
while((c == getchar()) != EOF){
if(c == '\n){
if(width > maxwidth)
maxwidth = width;
width = 0;
}
else width++;
}
printf(``%d\n``, maxwidth);
return 0 ;
}
なのです。
どう改良すればいいのでしょうか?
そもそもこのプログラムが合っているかの判定もお願いします。
ただこのプログラムsample.c
に対してgcc sample.c ./a.out
としたあと文字入力して、その文字入力を終了したことを表す操作がわからず
できているかの判定ができませんでした・・
そのことについてもできればよろしくお願いします
0606デフォルトの名無しさん
2006/05/13(土) 23:59:31いろいろおかしい
c==getchar()だとcとgetchar()の戻り値を比較してる
widthが初期化されずに比較されたり、加算されたり、代入したりしてる
あと、全角混じってね?printfとreturnトコ
0607デフォルトの名無しさん
2006/05/14(日) 00:05:04キーボードで [CTRL] + D 押すと入力終了になると思われ。
プログラムのほうは、606 が指摘してる点以外では、
1. ``%d\n`` ではなく "%d\n"
2. c == '\n では ' が閉じてない
3. 改行なしで入力が終わったらどうなるか考えてみよう。
0608デフォルトの名無しさん
2006/05/14(日) 00:15:45[2] 問題文(含コード&リンク):
�@、好きな整数を入力
�A、�@に2をかける
�B、�Aに100をたす
�C、�Bに20をかける
�D、�Cから400ひく
�E、�Dを40でわる
�F、�Eの商を40で割ったあまりを求める
�G、�Fを表示する
[3] 環境
[3.1] OS:Windowsxp)
[3.2] コンパイラ名とバージョン:Win32(よくわかりません)
[3.3] 言語:C++
[4] 期限:月曜までにお願いします
0609デフォルトの名無しさん
2006/05/14(日) 00:18:27ごめん、1〜7のどこが分からないんだ?
まさしく本を見ろのレベルなんだが。
0610デフォルトの名無しさん
2006/05/14(日) 00:21:24#include <stdio.h>
int main(void)
{
int num;
scanf("%d", &num);
num*=2;
num+=100;
num*=20;
num-=400;
num/=40;
num%=40;
printf("%d\n", num);
}
0611デフォルトの名無しさん
2006/05/14(日) 00:22:290612デフォルトの名無しさん
2006/05/14(日) 00:28:20学校で終わらなかったから家でやろうとしたらなんか学校のと違って実行できなかったんで、一応確認の為だったんです
>>610
サンクスnumじゃなくてもいいんだよね
0613デフォルトの名無しさん
2006/05/14(日) 00:29:54[2] 問題文(含コード&リンク): テキストファイル(gpl.txt)中に出現する全ての単語とその出現回数をリスト構造で記憶するプログラムを作成し、出現回数でソートを行いなさい。プログラムの出力結果は,出現回数が多い単語の上位5個とその出現回数,
さらに単語"source"の出現回数とその出現順位(多い順で数える、同じ数の単語がある場合の順位計算に注意する)を表示すること.ただし,出現する単語の数は未定とし,単語と出現回数を双方向リスト構造で記憶すること.
(gpl.txt)→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1893.txt
以下の関数を作成すること(これら以外の関数も作成して良い).(注意:関数の説明を十分にすること.)
create_node : 新規ノードを作成する.
add_node : ノードをリストの先頭に追加する.
search_node : ノードに保存された単語を検索する.
delete_node : ノードを削除する.
insert_node : ノードを指定した場所に挿入する.
swap_node : 2つのノードを指定して,それぞれの位置を交換する.
正解
1位 : the 194個
2位 : to 108個
3位 : of 104個
4位 : or 77個
5位 : you 76個
source : 16個, 33位
注意:
パーザはparse関数を使用すること。
リスト構造で構造体の中身を入れ替えるために、構造体のコピーを使用してはいけない。必ず、ポインタの変更による入れ替えを行うこと。
単語の上位5位を表示する時は,リストの先頭5つのノードだけを見るようにすること.リスト全体を検索してはいけない.
単語の順位計算では、同じ出現回数の単語を同じ順位として扱うプログラムを記述すること。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限 5/18
宜しくお願いします m(__)m
0614デフォルトの名無しさん
2006/05/14(日) 00:37:02>パーザはparse関数を使用すること。
こんな関数、少なくとも標準ライブラリでは見たことも聞いたこともない
別のライブラリを使うならそれが何なのか、講師から配られたorこの課題以前に
作成したならそれをうpしろ
0615605
2006/05/14(日) 00:40:10607サンの指摘された1、2も問題ないです
本当にすみません
606サンの指摘ですが while((c = getchar()) != EOF){・・・
にしても同じでしょうか?
このプログラムに似ているものがプリントにあって、真似ているつもりなのですが・・
607サン、入力後コントロールDを押しても^dと表示されるだけで
終了しませんでした もう一度学校いきしだい試してみます。
0616デフォルトの名無しさん
2006/05/14(日) 00:47:52そのwhile条件式(継続式かなんかって言い方もあったかな)はEOFが入力されるまで
標準入力から読み込み続ける時の常道だから問題ない
最初のは両方とも比較になってたからダメ
代入と比較は表記上は似てるが全くの別物だから気をつけろ
Ctrl+DはEOFだが、WindowsだとCtrl+Zだったか別のに割り当てられてた気もする
0617デフォルトの名無しさん
2006/05/14(日) 00:50:46[2] 問題文(含コード&リンク): 文字列str内の全ての数字文字を削除
する関数 void del_digit(char str[]){/* */}を作成せよ
[3] 環境 mac
[4] 期限:月曜までにお願いします
どこまでの知識をもっているかということを答えられないレベルなのですが、
明快 C言語 入門編 という参考書を片手にやっています
よろしくおねがいします。
0618570
2006/05/14(日) 00:53:37自主ゼミです.アルゴリズム論ということでやってます.
各人が面白そうな問題を持ち寄って適当に喋ってるだけですが.
>>584
すごい! O(mn) で行けるんですか.驚きました.
アルゴリズムを理解できてないので,じっくり考えさせていただきます.
ありがとうございました.
0619デフォルトの名無しさん
2006/05/14(日) 00:53:37つスレ内検索
0620613
2006/05/14(日) 00:55:100621605
2006/05/14(日) 00:55:28./a.out のあと文字例えば「qesysuqaiq6819]を入力してenter押してCtrl+D
したのですがなにも起こらなかったようなきがします
もう一度ためしてみます。
また最初の質問なのですが、「水平タブを考慮」した場合
どのように改良すればいいかがヒントもないので検討がつきませんので
出来ればよろしくお願いします
0622デフォルトの名無しさん
2006/05/14(日) 00:57:55getchar()は(俺がぼけてなければ)標準入力から読み込む
だからその手順(./a.out hoge[Enter][Ctrl-D])なら
何も表示せずプロンプトに戻るのが正常
./a.out [Enter] hoge[Ctrl-D]が正しい使い方
0623デフォルトの名無しさん
2006/05/14(日) 01:00:34既にEOFに達してるFILE*渡されたときに変なことになりそうな気もするし
そもそもBOF確実に起こしかねないってどうよと言いたくなるな
0625デフォルトの名無しさん
2006/05/14(日) 01:07:050626デフォルトの名無しさん
2006/05/14(日) 01:13:080627613
2006/05/14(日) 01:21:34すみません。こちらでお願いしますm(__)m
0628デフォルトの名無しさん
2006/05/14(日) 02:33:57judge_countって配列は何をカウントするの?
このmain関数は適宜変更していいの?
0629デフォルトの名無しさん
2006/05/14(日) 02:58:27[2] 問題文(含コード&リンク):英文テキストから単語を抜き出す関数PickWordを作成し、
関数PickWordを用いて英文テキストから単語を抜き出して単語のリストを出力するプログラムWordListを作成せよ。
英文テキスト(文字列)はキーボードから読み込む。テキストの長さは不定(最大255文字)。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C
[4] 期限:5月15日まで
よろしくお願いします
0630629
2006/05/14(日) 03:36:550631629
2006/05/14(日) 03:40:590632629 ◆zZtDbr6Gfc
2006/05/14(日) 03:46:100633629 ◆manko/yek.
2006/05/14(日) 08:19:08>>630-632は自分ではありません。
とにかく今回は時間がないので、どんなのでもいいので、早めにやってください。
おながいします。
0634613
2006/05/14(日) 08:24:49judge_countは実行の際に
% ./003 gpl.txt gnu the of license program
と指定した単語を数える関数ですm(__)m
0635629 ◆manko/yek.
2006/05/14(日) 09:02:150636billy
2006/05/14(日) 09:24:54% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
となるようにしたい
0637デフォルトの名無しさん
2006/05/14(日) 10:10:08初心者、上級者一切問いません。ダーツを愛する方ならどなたでも結構です。
実はあるダーツ店のマスターが客が来なくてとても困っているようです。
↓↓↓ 詳細はこちら ↓↓↓
http://sports9.2ch.net/test/read.cgi/bullseye/1111230059/431-452
できればこのマスターに励ましの言葉をお願いします。
また、もしこの店の近くにお住まいの方はお店の方にも行ってあげてください。
困ったときはお互い様です。ダーツを愛するもの同士助け合いましょう!
0638デフォルトの名無しさん
2006/05/14(日) 10:12:370639629 ◆zZtDbr6Gfc
2006/05/14(日) 10:19:230640デフォルトの名無しさん
2006/05/14(日) 10:33:060641デフォルトの名無しさん
2006/05/14(日) 10:36:43あら、ちょうどできたんだけどな。
ツリー使って作っちゃったんで、まぁよかったら見てください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1897.zip
元データは
http://news.bbc.co.uk/2/hi/programmes/from_our_own_correspondent/4765743.stm
これをテキストファイルに落としたのを同根しています。
0642629 ◆manko/yek.
2006/05/14(日) 10:45:590643641
2006/05/14(日) 10:53:55まーいいや。
プログラムの仕様上、元データの先頭行を空行から始めると動きませぬ。
0645デフォルトの名無しさん
2006/05/14(日) 12:17:04ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1898.txt
0646629 ◆zZtDbr6Gfc
2006/05/14(日) 12:49:05ありがとうございます
みなさんにいただいた物を元に自分でも作ってみたのですが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1898.txt
これだと同じ単語を出力し続けてしまいます
どこが間違っているのかご教授願えないでしょうか
0647605,615,621
2006/05/14(日) 13:16:05よろしくお願いします
0648デフォルトの名無しさん
2006/05/14(日) 13:18:47ヒント
if(c == '\t')
width += 8;
0649デフォルトの名無しさん
2006/05/14(日) 13:29:44>>645と同じファイルじゃね?
0650629 ◆zZtDbr6Gfc
2006/05/14(日) 13:31:39こっちだった上に直リンしてたorz
0651デフォルトの名無しさん
2006/05/14(日) 13:50:03nの値が変わってないから毎回先頭から読んでる
だから、いつも同じ
0652デフォルトの名無しさん
2006/05/14(日) 13:50:51水平タブって幅8なのか?
0653デフォルトの名無しさん
2006/05/14(日) 13:54:44[2] 問題文(含コード&リンク):標準入力に現れた数字文字の出現回数
を縦に*を並べたグラフで表示するプログラムを表示
mac
[4] 期限:5月15日まで
int i, ch;
int cnt[10] = {0};
while(1){
ch = getchar();
if (ch == EOF)break;
if (ch >= '0' && ch <= '9')
cnt[ch - '0']++;
}
print...
for..
printf()
return 0 ;
}
これは数字文字をカウントするプログラムということで
これをもとに書けということでした。
よろしくお願いします
0654デフォルトの名無しさん
2006/05/14(日) 14:00:28既にカウントされてるんだから後は順番に*を出力するだけだろ
それぐらい自分でやれ
0655デフォルトの名無しさん
2006/05/14(日) 14:01:02#include <stdio.h>
int main(){
int i, ch;
int cnt[10] = {0};
while(1){
ch = getchar();
if(ch == EOF)break;
if(ch >= '0' && ch <= '9')cnt[ch - '0']++;
}
int j;
for(i = 0; i < 10; i++){
printf("%d:", i);
for(j = 0; j < cnt[i]; j++)putchar('*');
puts("");
}
return 0 ;
}
>>654
ごめん、やっちゃった
0656デフォルトの名無しさん
2006/05/14(日) 14:06:13>>654考えましたが出来ませんでした。
0657デフォルトの名無しさん
2006/05/14(日) 14:07:43君はもう少し問題文を読んだほうがいい
0658デフォルトの名無しさん
2006/05/14(日) 14:08:04ごめん、縦じゃなくて横にやっちゃった
0659デフォルトの名無しさん
2006/05/14(日) 14:13:05# include <stdio.h>
int main(void)
{
int i, ch, max;
int cnt[10] = {0};
while((ch = getchar()) != EOF)
if(ch >= '0' && ch <= '9')
cnt[ch - '0']++;
max = 0;
for(i = 0; i < 10; i++)
if(max < cnt[i])
max = cnt[i];
for(i = max; i > 0; i--)
{
int j;
for(j = 0; j < 10; j++)
if(cnt[j] >= i)
putchar('*');
else
putchar(' ');
putchar('\n');
}
puts("----------");
puts("0123456789");
return 0;
}
0660641
2006/05/14(日) 14:14:15スマソ、あまりにも問題文を読んでいなかったので、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1900.zip
に修正版と、>>646を直したつもりのものを上げておきました。
どうも申し訳。
0661629 ◆zZtDbr6Gfc
2006/05/14(日) 14:28:37なるほど、確かにそれではループし続けてしまいますね
>>660
ありがとうございます。こちらも説明不足だったかも
0662デフォルトの名無しさん
2006/05/14(日) 14:53:02[2] 問題文(含コード&リンク):
0 1 2 3 4 5 6 7 8 9
0□□□□□□□□□□ (1)左のような碁盤目を表示後|(2)宝物の初期位置、及び点数を
1□□□□□□□□□□ 座標としてX,Yをscanfで入|予めテキスト形式のファイル
2□□□□□□□□□□ 力しその座標部分を■で表|に記憶しておき、プログラム
3□□□□□□□□□□ 示。(入力回数は20回まで)|開始時に、それを読み出すよ
4□□□□□□□□□□ そして、座標上に配列を用|うに変更せよ。テキストは以
5□□□□□□□□□□ いて10個の宝を配置。入力|下のような形式で表示。
6□□□□□□□□□□ された座標と宝の座標が一|座標X 座標Y 点数
7□□□□□□□□□□ 致すれば、あたりと表示し|5 8 3
8□□□□□□□□□□ 一致しなければ、はずれと|3 9 2
9□□□□□□□□□□ 表示する。一度取得した宝|・・・・
は、はずれを表示。それぞれの宝に構造体を用いて、|---------------------------
スコアを割り当てる。そして当たれば、スコアを加算|回数 X座標 Y座標 あたり/はずれ
し表示する。入力できる数字は0〜9、それ以外の数|最終スコア
字は、入力エラーと表示する。 |1回目 3 8 はずれ
※20回入力したら終了。 |2回目 5 9 あたり
※碁盤目の表示にはfor/while文を用いる。 |・・・・・・・・
|20回目 8 6 はずれ
| スコア=5点
0663デフォルトの名無しさん
2006/05/14(日) 14:53:39[4] 期限:2006年5月15日
[5] その他の制限:各種配列変数初期化、値設定(配列はポインタで渡す),座標の入力(scanf),
入力座標の妥当性(0〜9),入力座標と宝の座標の一致判定(ポインタ渡し),一致判定結果に従っ
てあたり、はずれの表示,20回カウンタ,スコアの加算(return命令は使用しない),それぞれ関数
を用いる。ファイルポインタ変数は、void mainの外側でグローバル変数として定義する。
碁盤目表示と■表示くらいしかできません・・・助けてください。よろしくお願いします。
0664デフォルトの名無しさん
2006/05/14(日) 15:03:54(1)左のような碁盤目を表示後座標としてX,Yをscanfで入力しその座標部分を■で表示。(入力回数は20回まで)
そして、座標上に配列を用いて10個の宝を配置。入力された座標と宝の座標が一致すれば、あたりと表示し
一致しなければ、はずれと表示する。一度取得した宝は、はずれを表示。それぞれの宝に構造体を用いて、
スコアを割り当てる。そして当たれば、スコアを加算し表示する。入力できる数字は0〜9、それ以外の数字は、
入力エラーと表示する。※20回入力したら終了。
※碁盤目の表示にはfor/while文を用いる。
回数 X座標 Y座標 あたり/はずれ
最終スコア
1回目 3 8 はずれ
2回目 5 9 あたり
・・・・・・・・
20回目 8 6 はずれ
スコア=5点
(2)宝物の初期位置、及び点数を予めテキスト形式のファイルに記憶しておき、プログラム開始時に、
それを読み出すように変更せよ。テキストは以下のような形式で表示。
座標X 座標Y 点数
5 8 3
3 9 2
・・・・
0665662
2006/05/14(日) 15:06:150666デフォルトの名無しさん
2006/05/14(日) 15:12:240667662
2006/05/14(日) 15:16:59ごめんなさい。
ちなみに、
回数 X座標 Y座標 あたり/はずれ
最終スコア
1回目 3 8 はずれ
2回目 5 9 あたり
・・・・・・・・
20回目 8 6 はずれ
スコア=5点
もテキスト形式になります。
よろしくお願いします。
0668デフォルトの名無しさん
2006/05/14(日) 16:25:10あの2つ正解です。1つは場所が違います。とかって出る奴
つーか、絶対に原文より理解しやすくできる確信が無いなら
原文のまま貼れと何度ry
0669662
2006/05/14(日) 16:38:28ようするに10個の宝というのは、任意の座標に配置するもので、
ランダムではなく作成者は宝の位置がわかっていることになります。
(宝の位置は適当に決めていいです。)
そして、その宝の座標と入力座標が一致したときに「あたり」と表示
するわけです。一度取得した宝は、その後入力しても「はずれ」にな
ります。入力座標が一致しない限りは「はずれ」を表示します。
本当にわかりにくくて申し訳ありません。
[2] 問題文(含コード&リンク): 文字列str内の全ての英字を大文字に
変換する関数、および小文字に変換する関数
void str_toupper(char*str){ }
void str_tolower(char*str){ }
を作成せよ
[3] 環境
UNIX
[4] 期限) 水曜日まで
よろしくお願いします。
0671デフォルトの名無しさん
2006/05/14(日) 16:41:59そうやって一つ一つ質問に回答した挙句に原文よりも量が増える罠。
0672デフォルトの名無しさん
2006/05/14(日) 16:52:11#include <ctype.h>
void str_toupper(char *str)
{
char *ptr = str;
while (*ptr != '\0')
{
*ptr = toupper(*ptr);
}
}
void str_tolower(char *str)
{
char *ptr = str;
while (*ptr != '\0')
{
*ptr = tolower(*ptr);
}
}
ctype.h使うなと指定が無かった&こっちの方が移植性に優れるので
toupper()とtolower()使った
0673デフォルトの名無しさん
2006/05/14(日) 16:52:33#include<ctype.h>
void str_toupper(char*str){for(;*str;++str)*str=toupper(*str); }
void str_tolower(char*str){for(;*str;++str)*str=tolower(*str); }
0674デフォルトの名無しさん
2006/05/14(日) 17:04:18直感的にわかりやすく書いてみたつもり。
32='a'-'A'な。
void str_toupper(char *str)
{
int i;
for(i=0;str[i]!='\0';i++)
if('a'<=str[i] && str[i]<='z')
str[i]-=32;
}
void str_tolower(char *str)
{
int i;
for(i=0;str[i]!='\0';i++)
if('A'<=str[i] && str[i]<='Z')
str[i]+=32;
}
問題持ってくるやつ国語力無いよな。
なんで勝手に問題削ったりするんだろうか。
ってかこんなプログラムもかけない馬鹿がくるから、国語力ないのも仕方ないのかな。
0675デフォルトの名無しさん
2006/05/14(日) 17:05:27void str_toupper(char*str){
for( ; *str != '\0'; ++str){
if( *str >= 'a' && *str <= 'z')
*str -= 'a' - 'A';
}
}
void str_tolower(char*str){
for( ; *str != '\0'; ++str){
if( *str >= 'A' && *str <= 'Z')
*str += 'a' - 'A';
}
}
0676デフォルトの名無しさん
2006/05/14(日) 17:11:54スコアを割り当てるってあるけど…
それも入力するん?
それとも、1コ何点とあらかじめ決まってたりするの?
0678662
2006/05/14(日) 17:16:53構造体を使うらしいんですが、いまいち理解できていないのでどうすればい
いのかわかりません。
今、原文にそって問題書いております。国語力なくてすいません。
0679デフォルトの名無しさん
2006/05/14(日) 17:25:46[1] 授業単元: プログラム演習I
[2] 問題文(含コード&リンク): 5名の学生の成績データを読んで、
点数の高い順番に並べる
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: bcc55
[3.3] 言語: C
[4] 期限: 今日の24時までです
[5] その他の制限: 構造体を利用する
seiseki.txtから読み出す
ishii,56
ueda,77
hamada,99
kudo,66
uchida,44
です
よろしくお願いします
0680デフォルトの名無しさん
2006/05/14(日) 17:46:47ソートの方法は選択ソートな。
作ってはみたが、scanf("%s %d")これだとなるのにscanf("%s,%d")これだとならない。
ごめん。
他の人あとよろ。
#include<stdio.h>
typedef struct{char name[20];int value;}STU;
int main(void)
{
STU student[5];
int i,j;
freopen("seiseki.txt","r",stdin);
for(i=0;i<5;i++)
scanf("%s %d",student[i].name,&student[i].value);
for(i=0;i<4;i++)
{
int max=i;
STU temp;
for(j=i+1;j<5;j++)
if(student[i].value<student[j].value)
max=j;
temp=student[max];
student[max]=student[i];
student[i]=temp;
}
for(i=0;i<5;i++)
printf("%s %d\n",student[i].name,student[i].value);
return 0;
}
0681デフォルトの名無しさん
2006/05/14(日) 17:50:22sortは面倒なんでqsort 1発で終わらせた。
#include<stdlib.h>
#include<stdio.h>
#define MAX_NAME_SIZE 16
#define MAX_STUDENT_SIZE 10
typedef struct student{char name[MAX_NAME_SIZE];int score;}student;
int compare_student(const void*a,const void*b){return ((student*)a)->score - ((student*)b)->score;}
int main(){
student students[MAX_STUDENT_SIZE];int i,j;
for(i=0;i<MAX_STUDENT_SIZE && scanf(" %9[^,],%d",students[i].name,&students[i].score)==2;++i){}
qsort(students,i,sizeof(student),compare_student);
for(j=0;j<i;++j)printf("%s,%d\n",students[j].name,students[j].score);
}
0682662
2006/05/14(日) 17:55:46・for/while文を用いて、碁盤目を表示せよ。
・scanf命令で入力した2値をx,y座標として、その座標部分を■で表示せよ。
(両者とも0から9までが入力されるものとする。)
・入力値のどちらかが0から9以外の場合は碁盤目を表示せず。エラーメッセージを表示せよ。
・任意の位置に宝を配置(座標固定)。その後、座標を入力して宝の位置と一致すれば「あたり」
不一致なら「はずれ」と表示せよ。なお、作成者は宝の位置が予め知っていることになる。
(入力チャンスは1回)
・入力チャンスを20回にせよ。
・宝を探し当てた場合20回に満たなくても終了せよ。
・以下に従って関数化せよ。
関数1 入力したx,y座標に対して、入力の妥当性を示すフラグを設定する。(0から9)
関数2 入力座標x,y、宝の座標x,yに対して、一致判定をする。
関数3 妥当な入力値なら碁盤目を表示、NGならエラーメッセージを表示。
関数4 一致判定に従って、「はずれ」「あたり」を表示。
関数5 20回カウンタ、一致判定結果によりゲーム終了判定をする。一致判定結果に
・以下の座標に10個宝を配置せよ。
[x,y]=[5,8][3,9][0,5][5,9][1,7][2,8][4,6][0,1][3,7][2,5]
・入力チャンスは20回に固定せよ。
・入力の度に毎回、取得した宝の数をスコアとして加算表示せよ。
・一度取得した宝の位置は、再度指定してもはずれと表示せよ。
0683662
2006/05/14(日) 17:56:27tre_x[] --- 各宝のx座標
tre_y[] --- 各宝のy座標
get_comp[] --- 各宝の取得済みフラグ
・宝の配置は、以下を使用せよ。
ter_[0] = 5; tre_[0] = 8;
・・・・・・・・・・・・
tre_[9] = 2; tre_[9] = 5;
・マクロ定義を使用せよ。
(例)#define TRE_COUNT 10
・全宝物と入力座標の一致判定を関数化するのは困難なので、以下のようにメインで処理する。
get_tre = 0;
while(i < TRE_COUNT && get_tre == 0){
get_tre=check_gettre(x,y,tre[i],tre[i],get_comp[i]);
//宝の取得判定 if(get_tre==1){
score++; //スコア加算
get_comp[i]=1; //取得したら取得済みにする。
}
i++;
}
・以下に従って関数化せよ。
関数6 宝物の配置など、配列変数の設定をする。なおメインから関数へ配列は、ポインタで渡す」。
関数7 キー入力と、入力した値の妥当性を判断し、入力値[x,y]と結果をフラグで返す。関数1までの処理を含む。
関数8 全宝物の座標(ポインタ渡し)、入力座標と比較し、一致結果をフラグで戻す。
関数9 スコアの加算を行う。なお戻り値(return)は使用しない。
0684662
2006/05/14(日) 17:58:22[x,y]=点数,[5,8]=3,[3,9]=2,[0,5]=1,[5,9]=2,[1,7]=4,[2,8]=1,[4,6]=1,[0,1]=3,[3,7]=2,[2,5]=1
・宝の初期位置及び点数を予めテキスト形式のファイルに記憶しておき、プログラム開始時に、それを読み出す様にせよ。
以下の形式のテキストファイルで出力せよ。
回数 X座標 Y座標 あたり/はずれ
最終スコア
1回目 3 8 はずれ
2回目 5 9 あたり
・・・・・・・・
20回目 8 6 はずれ
スコア=5点
-------------------------------------
座標X 座標Y 点数
5 8 3
3 9 2
・・・・
-------------------------------------
・ファイルポインタ変数は、void mainの外側でグローバル変数として定義する。
FILE *read_file,
FILE *write_file,
0685662
2006/05/14(日) 18:02:51get_tre=check_gettre(x,y,tre_x[i],tre_y[i],get_comp[i]);
でした。
0686デフォルトの名無しさん
2006/05/14(日) 18:03:470687デフォルトの名無しさん
2006/05/14(日) 18:07:56ter_x[0] = 5; tre_y[0] = 8;
・・・・・・・・・・・・
tre_x[9] = 2; tre_y[9] = 5;
じゃないのか?
[2] 問題文(含コード&リンク):
ある金額を硬貨で支払う際に、硬貨の枚数が最も少なくなる支払い方法を求める。
金額を書き込み、それを支払うために、500円、100円、50円、5円、1円の硬貨
をそれぞれ何枚使用するかを計算して表示するプログラムを作成せよ。
使用する効果の合計枚数も表示せよ。
実行例
金額を入力してください(単位 円):3469
最も少ない枚数で3469円を払った場合、
五百円玉6枚、百円玉4枚、五十円玉1枚、十円玉1枚、五円玉1枚、一円玉4枚
の計17枚です。
[3] 環境
[3.1] OS: UNIX
[3.2] gcc
[3.3] C++
[4] 期限:5/16まで
お願いします
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0689デフォルトの名無しさん
2006/05/14(日) 18:09:27[2] 問題文(含コード&リンク):
以下のマクロABS(x)の条件式と同じ働きをする式を、if文や条件式を使わない方法で書き直しなさい。
(switch文などを用いないでお願いします)
#define ABS(x) (((x) < 0) ? -(x) : (x))
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:5月15日
[5] その他の制限:
シフト演算での問題であるため、" ((unsigned) x) >> 31 "このような右シフトを使って答えを考えてくださいませ
0691デフォルトの名無しさん
2006/05/14(日) 18:13:39すべての型の対応もしなきゃだめなのか?
0692デフォルトの名無しさん
2006/05/14(日) 18:14:02[2] 問題文(含コード&リンク): 第一軸に上が小さく下が大きくなるように重ねられている
円盤を第三軸に移す手順を示すプログラムを作成せよ
ただし円盤を写す際はより大きい円盤を上に重ねることはできない
なお、作業用に設けられている第二軸は自由に使ってよい。
[3] 環境 Mac
[4] 期限: 月曜日まで
[5] その他の制限:基礎の基礎です。 初めて1ヶ月なので
include <stdio.h>などの基本しか使えません
すみませんがよろしくお願いします
0693デフォルトの名無しさん
2006/05/14(日) 18:14:32[1] 授業単元: C++
[2] 問題文(含コード&リンク):http://briefcase.yahoo.co.jp/ningenxp/
directx05.zip PASS:cpp
[3] 環境
[3.1] OS: Windows XP
[3.2] Visual C++ 2005 Express Editionのコンパイラ
[3.3] C++
[4] 期限: できれば24時間後まで 2006/05/14 18:00
[5] その他の制限: WisdomsoftのC言語講座 構造体まで読みました
C++はクラスだけ知っています
0694デフォルトの名無しさん
2006/05/14(日) 18:15:08これって↓みたいにしろって事だと思うんだが、
typedef struct{
int x; int y; int get_comp; int score;
}Treasure;
そうすると↓は使わないよな。どういう事だろ。
>・以下の配列変数を使用せよ。
>tre_x[] --- 各宝のx座標
>tre_y[] --- 各宝のy座標
>get_comp[] --- 各宝の取得済みフラグ
0695693
2006/05/14(日) 18:15:280696693
2006/05/14(日) 18:16:230698デフォルトの名無しさん
2006/05/14(日) 18:18:48int main(){
int i, x;
int k[]={500, 100, 50, 10, 5, 1}, m[(sizeof(k) / sizeof(k[0]))];
scanf("%d", &x);
for(i = 0; i < (sizeof(k) / sizeof(k[0])); i++){
m[i] = x / k[i];
x %= k[i];
}
for(i = 0; i < (sizeof(k) / sizeof(k[0])); i++)
printf("%d円は%d枚\n", k[i], m[i]);
return 0;
}
0699デフォルトの名無しさん
2006/05/14(日) 18:30:46ハノイの塔と解釈してもよろしいのかしら?
0700デフォルトの名無しさん
2006/05/14(日) 18:33:210701デフォルトの名無しさん
2006/05/14(日) 18:36:130702デフォルトの名無しさん
2006/05/14(日) 18:36:51# include <stdio.h>
void move_one(const char *from, const char *to)
{
printf("%s -> %s\n", from, to);
}
void move(int n, const char *from, const char *to, const char *aux)
{
if(n == 1)
move_one(from, to);
else
{
move(n-1, from, aux, to);
move_one(from, to);
move(n-1, aux, to, from);
}
}
int main(void)
{
move(3, "第一軸", "第三軸", "第二軸");
return 0;
}
0704デフォルトの名無しさん
2006/05/14(日) 18:56:56実数型
0705デフォルトの名無しさん
2006/05/14(日) 19:00:37整数型のみで結構です
0706デフォルトの名無しさん
2006/05/14(日) 19:08:31【質問テンプレ】
[1] 授業単元: C++
[2] 問題文(含コード&リンク):http://briefcase.yahoo.co.jp/ningenxp/
directx05.zip PASS:cpp
次のコンパイルエラーを何とかしてください #pragma onceをsub.hの先頭につけてもだめです
main.obj : error LNK2005: "struct IDirect3D9 * g_pD3D" (?g_pD3D@@3PAUIDirect3D9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DDevice9 * g_pd3dDevice" (?g_pd3dDevice@@3PAUIDirect3DDevice9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DVertexBuffer9 * g_pVB" (?g_pVB@@3PAUIDirect3DVertexBuffer9@@A) は既に logo.obj で定義されています。
C:\Documents and Settings\裕\My Documents\Visual Studio 2005\Projects\directxtest05\Debug\directxtest05.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
[3] 環境
[3.1] OS: Windows XP
[3.2] Visual C++ 2005 Express Editionのコンパイラ
[3.3] C++
[4] 期限: できれば24時間後まで 2006/05/14 18:00
[5] その他の制限: WisdomsoftのC言語講座 構造体まで読みました
C++はクラスだけ知っています
0709デフォルトの名無しさん
2006/05/14(日) 19:50:300710デフォルトの名無しさん
2006/05/14(日) 20:08:17[2] 問題文(含コード&リンク):
データグラム型のソケットを用いてecho serverを作る。
[3] 環境
[3.1] OS: FreeBSD 6.0
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年5月14日23:59まで
[5] その他の制限:なし
0711710
2006/05/14(日) 20:09:46#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#define SOCK_NAME "/tmp/socket_un"
int main(){
int fd1,fd2;
struct sockaddr_un saddr;
struct sockaddr_un caddr;
unsigned int len;
int nbytes;
char buf[1024];
unlink(SOCK_NAME);
if((fd1=socket(PF_UNIX,SOCK_STREAM,0))<0){
perror("socket");
exit(1);
}
memset(&saddr,0,sizeof(saddr));
saddr.sun_family=AF_UNIX;
strcpy(saddr.sun_path,SOCK_NAME);
if(bind(fd1,(struct sockaddr *) &saddr,sizeof(saddr))<0){
perror("bind");
exit(1)
}
0712710
2006/05/14(日) 20:11:23perror("listen");
exit(1);
}
for(;;){
len =sizeof(caddr);
if((fd2=accept(fd1,(struct sockaddr *) &caddr,&len))<0){
perror("accept");
exit(1);
}
while(nbyte=read(fd2,buf,sizeof(buf))){
write(1,buf,nbytes);
write(fd2,buf,nbytes);
}
close(fd2);
}
close(fd1);
exit(0);
}
0713710
2006/05/14(日) 20:14:27#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#define SOCK_NAME "/tmp/socket_un"
int main(){
int fd;
struct sockaddr_un addr;
int nbytes;
char buf[1024];
if((fd=socket(PF_UNIX,SOCK_STREAM,0))<0){
perror("socket");
exit(1);
}
memset(&saddr,0,sizeof(saddr));
addr.sun_family=AF_UNIX;
strcpy(addr.sun_path,SOCK_NAME);
if(connect(fd,(struct sockaddr *) &addr,sizeof(addr))<0){
peror("connect");
exit(1);
}
0714710
2006/05/14(日) 20:16:55while(nbytes=read(0,buf,sizeof(buf))){
write(fd,buf,nbytes);
nbytes = read(fd,buf,sizeof(buf));
write(1,buf,nbytes);
}
close(fd);
exit(0);
}
以上がサンプルでもらったストリーム型のecho serverとclientです。
これと同じようなものをデータグラム型でお願いします。
0715689
2006/05/14(日) 20:17:24お前ら死ねよ
0716デフォルトの名無しさん
2006/05/14(日) 20:54:290717デフォルトの名無しさん
2006/05/14(日) 20:58:000718デフォルトの名無しさん
2006/05/14(日) 20:59:46[2] 問題文(含コード&リンク): 要素型がdoubleで要素が10である配列の全要素の
値を読み書きするプログラムの作成。
[3] 環境 Mac
[4] 期限: 出来れば今日中に
[5] その他の制限:なし
お願いします
0719billy
2006/05/14(日) 21:43:30[2] 問題文(含コード&リンク):
実行例
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
0721デフォルトの名無しさん
2006/05/14(日) 22:10:23こんな問題ここに持ってこようとしてる時点で
お前は頭悪すぎなんだよwwwww人としても痛い人のようだしwww
だから友達できないんだよwwwwwwwwww
0722デフォルトの名無しさん
2006/05/14(日) 22:17:08糞餓鬼に釣られるなよwww
0723デフォルトの名無しさん
2006/05/14(日) 22:18:50ごめんwwwww
0724デフォルトの名無しさん
2006/05/14(日) 22:50:16#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void){
double x[SIZE];
FILE *in,*out;
if((in=fopen("input.dat","rb"))==NULL)exit(1);
fread(x,sizeof(double),SIZE,in);
fclose(in);
if((out=fopen("output.dat","wb"))==NULL)exit(1);
fwrite(x,sizeof(double),SIZE,out);
fclose(out);
return 0;
}
0725デフォルトの名無しさん
2006/05/14(日) 22:58:010726デフォルトの名無しさん
2006/05/14(日) 23:09:13ありがとうございますm(._.)m
0727デフォルトの名無しさん
2006/05/14(日) 23:19:25#include <stdio.h>
#include <stdlib.h>
void readBinaryfile( char *filename )
{
int i;
double d;
FILE *file = fopen( filename, "rb" );
for( i=0; i<10; i++ )
{
fread( &d, 1, sizeof(d), file );
}
fclose( file );
}
void main()
{
readBinaryfile( "hoge.txt" );
}
もう回答あったのねん
0728デフォルトの名無しさん
2006/05/14(日) 23:46:35#ifndef SUB_H__
#define SUB_H__
#define EXTN
#else
#define EXTN extern
#endif
//------------------------------------------------------------------------
// グローバル変数
//--------------------------------------------------------------------
EXTN LPDIRECT3D9 g_pD3D = NULL; // Direct3Dデバイスを作成するのに使われるオブジェクト?
EXTN LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // レンダリングデバイス
EXTN LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // Buffer to hold vertices
上の #ifndef 以下を足せばコンパイルは通る
しかし、Cの基本からやり直すことをお勧めする。
定石なので覚えるとよし
0729デフォルトの名無しさん
2006/05/15(月) 00:01:51#include <stdio.h>
#include <string.h>
void del_digit( char str[] )
{
int i, j, len;
len = strlen(str);
for( i=0; i<len; i++ )
{
if( (str[i]>='0') && (str[i]<='9') )
{
for( j=i; j<len; j++ )
{
str[j] = str[j+1];
}
str[j] = '\0';
i--;
}
}
}
void main()
{
char str[80] = "AAAALKJLK1122LDF0099FLK29348";
del_digit( str );
}
0730デフォルトの名無しさん
2006/05/15(月) 00:03:34[1] 授業単元: ポインタ
[2] 問題文(含コード&リンク): 文字列s1とs2が等しければ(先頭
からナル文字までが全て同じであれば)1を、そうでなければ0を返す関数
int str_equal(const char*s1,const char*s2)を作成し、確認せよ
[3] 環境 UNIX
[4] 期限 5月16
0731デフォルトの名無しさん
2006/05/15(月) 00:08:46ttp://pic.skr.jp/src/img20060514220231.jpg.kintama.exe
0732デフォルトの名無しさん
2006/05/15(月) 00:11:00ウィルス
0733デフォルトの名無しさん
2006/05/15(月) 00:13:05int str_equal(const char *a, const char *b)
{ return *a == *b && (!*a || str_equal(a+1, b+1)); }
>>731
さすがにキンタマ.exeを踏む奴はいないと思われ
0734デフォルトの名無しさん
2006/05/15(月) 00:14:43#qrsvar NOF(k) ((k)*(1-2*((hafvtarq)(k) >> 0k1s)))
楽勝すぎ
0735デフォルトの名無しさん
2006/05/15(月) 00:18:430736デフォルトの名無しさん
2006/05/15(月) 00:20:32#include <stdio.h>
int str_equal( const char *s1, const char *s2 )
{
do {
if ( *s1 == '0' && *s2 == '0' )
return 1;
} while ( *s1++ == *s2++ );
return 0;
}
int main( void )
{
char *s[] = { "ABC", "ABC", "abc", "def" };
printf( "str_equal(\"%s\", \"%s\") : %d\n",
s[0], s[1], str_equal(s[0], s[1]) );
printf( "str_equal(\"%s\", \"%s\") : %d\n",
s[2], s[3], str_equal(s[2], s[3]) );
return 0;
}
>>731
[環境]: UNIX な人に .exe 仕掛けてもさ、とか思う。
まぁ 2ch は Win でしてるんだろうけど。
0737デフォルトの名無しさん
2006/05/15(月) 00:21:35また高度なネタを
0738デフォルトの名無しさん
2006/05/15(月) 00:22:180739デフォルトの名無しさん
2006/05/15(月) 00:26:01#include <stdio.h>
#include <string.h>
int str_equal(const char*s1,const char*s2)
{
int i, len1, len2;
len1 = strlen(s1);
len2 = strlen(s2);
if( len1 != len2 ) return 0;
i = 0;
while( i < len1 ) {
i++;
if( s1[i] != s2[i] )
break;
}
if( i == len1 ) return 1;
return 0;
}
void main()
{
char str1[] = "123123123";
char str2[] = "123123123";
printf( "%s と %s は等しいですか?\n", str1, str2 );
printf( "答え:%d (0:等しくない 1:等しい)\n", str_equal( str1, str2 ) );
}
0740デフォルトの名無しさん
2006/05/15(月) 00:28:37よくぞ見抜いた
いや、まぁ天然だったが。
0741デフォルトの名無しさん
2006/05/15(月) 00:33:590742デフォルトの名無しさん
2006/05/15(月) 00:36:31if ( *s1 == '\0' && *s2 == '\0' ) に変更
[2] 問題文(含コード&リンク): 方程式f(x)=x*x-4*x+1=0の小さな方の解をニュートン法で求めるプログラムを作成し、結果を
x=******
として表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 for Win32
[3.3] 言語: C
[4] 期限: 2006.5.18
---
自分でやったところは↓までです。
大きい方の解がでてしまって、どうやったら小さい方の解が出るのかがわかりません。
#include <stdio.h>
#include <math.h>
main(){
double x,xnew,e;
e=pow(10,-10);
xnew=2006.0;
while(fabs(xnew-x)>e){
x=xnew;
xnew=((-1.0+4*x-x*x)/(2.0*x-4))+x;}
printf("x=%f\n",xnew);
}
0744742
2006/05/15(月) 00:38:39UNIX環境は分からんです
0745デフォルトの名無しさん
2006/05/15(月) 00:49:07xnewの初期値を-2006あたりに設定すると良いとおもう
0746デフォルトの名無しさん
2006/05/15(月) 00:51:560748デフォルトの名無しさん
2006/05/15(月) 01:21:23馬鹿になるぞ本当にここで聞いていいのはヒントだけだぞ
0749デフォルトの名無しさん
2006/05/15(月) 01:26:130750デフォルトの名無しさん
2006/05/15(月) 02:32:00[2]問題文:通貨の換金レートを入力し、
円からドル、ないしはドルから円へと計算するプログラムを作れ。
尚、以下の仕様を厳守する事。
1/円からドル、またはドルから円への選択をさせる。
2/マイナスの円及びドルを入力で終了。
3/換金レートの入力は「1ドル=○○円」もしくは、「1ドル=○○円○○銭」といった形にすること。
4/以下の4つの関数を必ず含めなさい。
A:レートを入力する関数(レートの値を戻り値)
B:円からドルを計算する関数(円とレートを引数、ドルを戻り値)
C:Bの逆
D:結果を表示する関数(結果を引数)
[3]環境
OS:Linux
コンパイラ gcc
言語:C
[4]期限 5月16日
よろしくお願いします
0751デフォルトの名無しさん
2006/05/15(月) 02:41:02[2] 問題文(含コード&リンク):
graph.txtにて表現されるグラフに対し、点0からスタートして点6に到着する
まで隣接する点にランダムに移動を行った場合の経路(閉路を含んでもよい)
を表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc(ver?)
[3.3] 言語: C
[4] 期限:できれば今日中に・・・
[5] その他の制限:制限はないが、ヒント
・現在の点をpos,移動後の点をnextとし、乱数を利用してnextを決定する。posの初期値は0
・nextが6になれば終了。そうでなければpos←nextとして上の処理を繰り返す
・rand()関数を使うことで0以上RAND_MAX以下の整数乱数を作成することができる。
例えば、0以上s未満の乱数を発生させたい場合には、次式のようにする
r=(double)rand()/(RAND_MAX+1.0)*s;
・乱数の初期化にはsrand()関数を使う。引数に乱数の種(正整数)を入れる。
この値を変化させることで、異なる乱数系列が発生する。例:srand(3)
graph.txtは↓です
0752751
2006/05/15(月) 02:45:237
0 1
3 1
2 4
4 3
2 3
0 4
0 6
5 6
4 5
1 6
2 6 ←ここまでです
グラフは辺行列です。1行目は点の数。それ以下は辺情報です。
辺情報:例えば0 1は点0から点1に辺がつながっている。
よろしくお願いいたします。
0753デフォルトの名無しさん
2006/05/15(月) 09:22:06http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1901.c
0754デフォルトの名無しさん
2006/05/15(月) 09:54:19[2] 問題文(含コード&リンク):コピー元ファイル名、コピー先ファイル名をキーボードから
読み込んで、ファイルの内容を画面に表示しながらコピーするプログラムを作成せよ
[3] 環境
[3.1] UNIX
[3.2]
[3.3]
[4] 期限 今週まで
お願いします
0755デフォルトの名無しさん
2006/05/15(月) 12:06:56man cp
0756デフォルトの名無しさん
2006/05/15(月) 12:19:53#include<iostream>
#include<fstream>
#include<string>
int main(){
std::string src,dst;
std::cout << "in =";std::cin >> src;
std::cout << "out =";std::cin >> dst;
std::ifstream ifs(src.c_str());
std::ofstream ofs(dst.c_str());
for(char c;ifs.get(c);){
std::cout.put(c);
ofs.put(c);
}
}
0757デフォルトの名無しさん
2006/05/15(月) 12:27:18これで提出します。
0758デフォルトの名無しさん
2006/05/15(月) 12:46:19夕飯食ったらやるつもりだったんだが、食ったらすっかり忘れてた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1902.c
0759デフォルトの名無しさん
2006/05/15(月) 14:39:39[2] 問題文(含コード&リンク):
テキストファイルを暗号化および復号化するプログラムを作成せよ.以下のように実行できること.
暗号化の場合
% kadai e publickey(=公開鍵のファイル) original(=元のファイル) result(=暗号化されたファイル)
復号化の場合
% kadai d secretkey(=秘密鍵のファイル) encrypte(暗号化されたファイル) result(複号化されたファイル)
あらかじめ公開鍵{377,11}、秘密鍵{377,23}ファイルを用意しておく。
プログラム実行時に,暗号化か復号化かどちらをするのか判定して,必要な鍵を読みこむ。
(プログラムの中には書き込まない).
暗号化なら、文字コードに直し、その整数を暗号化して、ファイルに書き込む。
復号化なら、ファイルから読み込んだ整数を復号化し、そのコードの文字を書き込む。
文字コード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1903.txt
暗号、複合化
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1904.txt
参考プログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1905.txt
参考プログラムに上2つのプログラムを組み合わせよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 for Win32
[3.3] 言語: C
[4] 期限: 今日中にお願いします
よろしくお願いします
0760デフォルトの名無しさん
2006/05/15(月) 15:10:160761デフォルトの名無しさん
2006/05/15(月) 15:20:260762デフォルトの名無しさん
2006/05/15(月) 15:36:18[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1906.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5/17
長文ですが、よろしくお願いします。
0763デフォルトの名無しさん
2006/05/15(月) 16:04:40[2] 問題文
何人かが集まったとき同じ誕生日の
人が1組以上存在する確率が自分で入力した値:p(0.01≦ p≦ 0.99)以上
となるのは、何人以上集まったときか、を求めるプログラムを作成します
for文もしくはwhile文を必ず使用して下さい
[3] 環境
[3.1] Windows
[3.2] ?
[3.3] 言語C
よろしくお願いします。
0764初心者
2006/05/15(月) 16:33:49[1] 授業単元:c言語
[2] 問題文(含コード&リンク):キーボードから
1、二つのベクトルx、y
2、スカラーs
3、行列B
を読み込み、
1、内積xy
2、sx、sy
3、Bx、By
を求めるプログラムをそれぞれ作成せよ。
[3] 環境
[3.1] OS: Linux gnome2.4
[3.2] gcc
[3.3] 言語: C
[4] 期限: 今週中
[5] とくに無し。
宜しくお願いします。
0765デフォルトの名無しさん
2006/05/15(月) 16:52:45[2] 問題文(含コード&リンク): 仕入れ値と利益率(%単位)を読み込んで、売値を計算するプログラムを作成せよ。計算は以下の式に従え。
なお、利益率は0%以上99%以下で1%刻みとする。
売値=仕入れ値+利益+税金
利益=仕入れ値×利益率÷(100−利益率)
税金=(仕入れ値+利益)×5/100
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野
0766C++初心者
2006/05/15(月) 17:08:27[2] 問題文(含コード&リンク): 変数nameには名前変数amountには貯金額(最初は0円)が入っている。以下のように3回貯金できるプログラムを作成せよ。ただし、変数はname,amount以外には1つしか使えない
_______________________________________________________________________
名前を入力してください:michinobu
michinobuさん.
現在の貯金額は0円です.
今回はいくら貯金しますか?(単位:千円):10,5
michinobuさん.
現在の貯金額は、10500円です.
今回はいくら貯金しますか?(単位:千円):0、03
michinobuさん
現在の貯金額は、10530円です.
今回はいくら貯金しますか?(単位:千円):100、0
michinobuさん.
全部で110530円貯まりました.
よくがんばりました.
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野 。算術演算子、代入演算子など
0767デフォルトの名無しさん
2006/05/15(月) 17:11:11#include <iostream>
using namespace std;
int main()
{
int nCostPrice, nMarginPerc;
cout << "仕入れ値と利益率は?" << endl;
cin >> nCostPrice >> nMarginPerc;
cout << "売値: " << nCostPrice + nMarginPerc * nCostPrice / (100 - nCostPrice) + (nCostPrice + nMarginPerc * nCostPrice / (100 - nCostPrice)) * 5 / 100 << endl;
return 0;
}
計算するの面倒なんでべた書き
情報落ちとか起きてても知らん
>>764
誤爆先に謝ってこい
0768デフォルトの名無しさん
2006/05/15(月) 17:12:11全角数字だし,や、が混合してるしめんどくさいのもほどがある
0769デフォルトの名無しさん
2006/05/15(月) 17:21:33#include <stdio.h>
void main(void){
float p;
int i;
double temp=1;
printf("確率は?p(0.01≦ p≦ 0.99)");
scanf("%f",&p);
if(p<0.01 || p>0.99){//入力された確率が条件を満たしていないなら強制終了
printf("ばーか!");
exit(1);
}
for(i = 1;1-temp>p;i++){//i=1...2人あつまった時に題意を満たすかどうかをfor文の抜ける条件文で判定。
temp=1; //i=2...3人あつまった時、i=3...4人集まった時となる。
for(p=i;p>0;p++){//(365*364*363*....)/(365*365*365*....)をこのfor文で計算
temp*=365-p;
temp/=365;
}
}
printf("%d人",i+1);
}
適当。動作確認もしていない。
0770デフォルトの名無しさん
2006/05/15(月) 17:24:14C99非準拠の処理系だとコメントでエラー出るなw
0771C++初心者
2006/05/15(月) 17:27:33すみません。書き直します。
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク): 変数nameには名前変数amountには貯金額(最初は0円)が入っている。以下のように3回貯金できるプログラムを作成せよ。ただし、変数はname,amount以外には1つしか使えない
_______________________________________________________________________
名前を入力してください:michinobu
michinobu さん.
現在の貯金額は,0円です.
今回はいくら貯金しますか?(単位:千円):10.5
michinobuさん.
現在の貯金額は,10500円です.
今回はいくら貯金しますか?(単位:千円):0.03
michinobuさん
現在の貯金額は、10530円です.
今回はいくら貯金しますか?(単位:千円):100.0
michinobuさん.
全部で110530円貯まりました.
よくがんばりました.
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C++
[4] 期限: 5月26まで
[5] その他の制限: まだ初期。関数printf,scanfの分野 。算術演算子、代入演算子など
動きません。まったく状況変わらず
main.obj : error LNK2005: "struct IDirect3D9 * g_pD3D" (?g_pD3D@@3PAUIDirect3D9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DDevice9 * g_pd3dDevice" (?g_pd3dDevice@@3PAUIDirect3DDevice9@@A) は既に logo.obj で定義されています。
main.obj : error LNK2005: "struct IDirect3DVertexBuffer9 * g_pVB" (?g_pVB@@3PAUIDirect3DVertexBuffer9@@A) は既に logo.obj で定義されています。
C:\Documents and Settings\*\My Documents\Visual Studio 2005\Projects\directxtest05\Debug\directxtest05.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
0773デフォルトの名無しさん
2006/05/15(月) 17:50:54#include <stdio.h>
char name[256] = {0};
int amount = 0;
void input(void){
float f;
printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount);
scanf("%f",&f);
amount += (int)(f*1000);
}
int main(){
printf("名前を入力してください:");
scanf("%s",name);
input();
input();
input();
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
return 0;
}
0775デフォルトの名無しさん
2006/05/15(月) 18:00:19結構めんどいじゃん。動作確認?何それ?
#include <stdio.h>
#define PCNOKAZU 10
int itibandekaino(int count);
void change(int a,int b);
int stuno[PCNOKAZU] ={10,12,13,46,4,5,6,4,8,9};
int hostno[PCNOKAZU]={111,113,116,184,165,166,100,101,135,156};
int hikaku=0;
int koukan=0;
void main(void){
int max;
int i;
for(i = 0;i<PCNOKAZU;i++){
max=itibandekaino(i);
change(i,max);
}
for(i = 0;i<PCNOKAZU;i++)printf("%d,",stuno[i]);puts("");
for(i = 0;i<PCNOKAZU;i++)printf("%d,",hostno[i]);puts("");
printf("ばーろー%d,ちぇんじ%d",hikaku,koukan);
}
0776デフォルトの名無しさん
2006/05/15(月) 18:01:26int itibandekaino(int count){
int i;
int maxno=count;
for(i=count;i<PCNOKAZU;i++){
hikaku++;//はいはい。比較わろすわろす
if(hostno[i]>hostno[maxno])
maxno=i;
}
return maxno;
}
void change(int a,int b){
int temp;
koukan++;//はいはい。交換わろすわろす。
temp=stuno[a];
stuno[a]=stuno[b];
stuno[b]=temp;
temp=hostno[a];
hostno[a]=hostno[b];
hostno[b]=temp;
printf("先生のふぇらきぼんぬ");
}
0777718
2006/05/15(月) 18:09:02gcc sample.c
./a.out
を入力しても
プロンプトが表示されたままなのですが、実行の手順が違うのでしょうか?
0778デフォルトの名無しさん
2006/05/15(月) 18:16:12自分で中身確認用のprintf文くらい追加しなさいよ。
他の確認法としては、
input.datとoutput.datの中身が同じになってるはずだ。
0780C++初心者
2006/05/15(月) 18:23:27#include <stdio.h>
void main(void)
{
float
から始めるとどうなります?
0781751
2006/05/15(月) 18:37:160782デフォルトの名無しさん
2006/05/15(月) 18:37:48#include <stdlib.h>
#define SIZE 10
int main(void){
double x[SIZE];
FILE *in,*out;
//x[0]-x[9]まですべての配列にinput.datに書き込んである変数を読み込む
if((in=fopen("input.dat","rb"))==NULL){printf("input.datが存在しないんじゃないの?\n");exit(1);}
fread(x,sizeof(double),SIZE,in);
fclose(in);
//x[0]-x[9]まですべての配列書き込んである変数をoutput.datに書き込む
if((out=fopen("output.dat","wb"))==NULL)exit(1);
fwrite(x,sizeof(double),SIZE,out);
fclose(out);
//x[0]-x[9]まですべての配列を表示する
printf("x[0]:%f,x[1]:%f,x[2]:%f,x[3]:%f,x[4]:%f,x[5]:%f,x[6]:%f,x[7]:%f,x[8]:%f,x[9]:%f,",x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9]);
return 0;
}
0783デフォルトの名無しさん
2006/05/15(月) 18:41:25ひじょーにめんどい。
0784751
2006/05/15(月) 18:44:56めんどいですか・・・。
0785シン
2006/05/15(月) 18:53:43[1] 授業単元: 文字列
[2] 問題文(含コード&リンク):一定時間感覚で、自分の名前を右から左へと
テロップのように流しながら表示するプログラムを作成し、実行せよ
ASDF_TYU
SDF_TYUA
DF_TYUAS
(省略)
[3] 環境 UNIX
0786シン
2006/05/15(月) 18:54:170787デフォルトの名無しさん
2006/05/15(月) 18:58:08変数が可変だからな。
グラフの扱い方をどーするかでめんどくさ度がかわってくる。
例えば、点の個数が10以下とかたかだか知れてるなら
グラフをgraph.txtの例なら
graph[7][7]={1,4,6,0,0,0,0},//点0と隣接している点のリスト
{6,0,0,0,0,0,0},//点1と隣接している点のリスト
{4,3,6,0,0,0,0},
{1,0,0,0,0,0,0},
{3,5,0,0,0,0,0},
{6,0,0,0,0,0,0},
{0,0,0,0,0,0,0};//点6と隣接している点のリスト
となるように読み込む。
で、例えばこの配列をもとに、
hennokazu[7]={1,3,1,2,1,0};
みたいに、点から伸びている辺の本数も保存していく。
後は
next=graph[pos][rand()%hennokazu[pos];];
で、探査していけばいいんじゃね?
0788billy
2006/05/15(月) 18:58:18[2] 問題文(含コード&リンク):
実行例
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source.
-- Line 2 --
Field 1: end.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
0789デフォルトの名無しさん
2006/05/15(月) 19:14:07#include <stdio.h>
void main(void)
{
float f;
char name[256] = {0};
int amount = 0;
printf("名前を入力してください:");
scanf("%s",name);
#define input printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount); \
scanf("%f",&f); \
amount += (int)(f*1000);
input
input
input
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
}
問題の後付けはやめようぜ。
正しく動くように直してうpしてください・・。
0791デフォルトの名無しさん
2006/05/15(月) 19:16:24#include <stdio.h>
void main(void)
{
float loop;
char name[256] = {0};
int amount = 0;
printf("名前を入力してください:");
scanf("%s",name);
for(loop=0;loop<3;++loop){
printf("%sさん\n現在の貯金額は,%d円です. \n今回はいくら貯金しますか?(単位:千円):",name,amount);
scanf("%f",((float*)(name+sizeof(name)-sizeof(float))));
amount += (int)(*(float*)(name+sizeof(name)-sizeof(float))*1000);
}
printf("%sさん.\n全部で%d円貯まりました.\nよくがんばりました.\n",name,amount);
}
0792デフォルトの名無しさん
2006/05/15(月) 20:10:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1908.txt
1907でミスってたのは内緒w
0793デフォルトの名無しさん
2006/05/15(月) 20:11:12正常な動作が何かと述べられていないのに正しくって何?
0795デフォルトの名無しさん
2006/05/15(月) 20:28:15最初にアップロードしたソースは間違ってたって事
気にしなくておk
0796デフォルトの名無しさん
2006/05/15(月) 20:31:310797デフォルトの名無しさん
2006/05/15(月) 20:43:43/* なんかできたから貼っとく。 */
#include <stdio.h>
#include <string.h>
#include <unistd.h>/* unixと言うことなのでsleep()を使った。 */
void telop(const char * str)
{
unsigned ic;
unsigned len = strlen(str);
for (ic = 0; ic < len; ++ic) {
printf("%.*s%.*s\n", len - ic, & str[ic], ic, str);
sleep(1);
}
printf("%s\n", str);
}
int main(int argc, char ** argv)
{
if (argc > 1) {
telop(argv[1]);
}
return 0;
}
0798デフォルトの名無しさん
2006/05/15(月) 20:44:250800デフォルトの名無しさん
2006/05/15(月) 20:54:45728ではないが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1909.zip
0801792
2006/05/15(月) 20:56:11正直すまんかったw
>>797の人の使ってくだちい
しかしなんか難しいコードだな
printf("%.*s%.*s\n", len - ic, & str[ic], ic, str);
初めて見たわ サパーリ分からん(汗
0802デフォルトの名無しさん
2006/05/15(月) 21:04:55[2] 問題文(含コード&リンク):水平タブを考慮して、テキストの幅を正しく
調べることが出来るように以下のプログラムを改良せよ
(タブ幅は8と家庭してよいが、異なるタブ幅にも簡単な改造で対応できるようにするのが
望ましい)
[3] 環境 UNIX
[4] 期限 水曜日まで
#include <stdio.h>
int main(){
int c;
int width, maxwidth = 0;
while((c == getchar()) != EOF){
if(c == '\n'){
if(width > maxwidth)
maxwidth = width;
width = 0;
}
else
width++;
}
printf("%d\n", maxwidth);
return 0 ;
}
どうかおねがいします・・
後、この上のプログラムに対して
(プロンプト) gcc sample2.c
(プロンプト)./a.out
12 9877
^D
となって終了条件がわかりませんでした。
こちらのほうのアドバイスもよろしくお願いします
0803802
2006/05/15(月) 21:06:120804シン
2006/05/15(月) 21:09:52この797サンのプログラムは難しいものをつかっているのでしょうか?
始まって1ヶ月なのであまり難しいものだとばれてしまうのですが・・
0805792
2006/05/15(月) 21:15:37漏れは学部4年生の糞で頭悪いから理解できないだけかも知れないが
見たことがないコードを使ってるので回避した方が良いかも知れん
>>792はポインタとか使わずに配列コピーと連結根性処理でやってるから
たぶんばれないはず エレガントさとか欠片も感じられないがw
一定時間感覚を実現したければ >>797を参考にして
#include <unistd.h>を追加して
最後のプリント文の下にsleep(1);を入れればそれっぽくなる
0807デフォルトの名無しさん
2006/05/15(月) 21:21:31結局タイプミスの修正以外は何もやらなかったと…。
#include <stdio.h>
#define TAB_WIDTH (8)
int main()
{
int c;
int width=0, maxwidth = 0;
while ((c = getchar()) != EOF) {
switch(c) {
case '\n':
if (width > maxwidth)
maxwidth = width;
width = 0;
break;
case '\t':
width += TAB_WIDTH;
width -= width % TAB_WIDTH;
break;
default:
width++;
}
}
if(width > maxwidth)
maxwidth = width;
printf("%d \n ", maxwidth);
return 0;
}
0808デフォルトの名無しさん
2006/05/15(月) 21:22:16[1] 授業単元:プログラミング
[2] 問題文 a1=1+1/2
a2=1+1.0/2
a3=1+1/2.0
a4=1.0+1.0/2.0 の計算を行うプログラムを作成せよ。
[3] 環境
[3.1] Linux
[3.3] 言語C
[4] 期限: 明日の朝
[5] その他の制限: doubleを使用
お願いします。
0809デフォルトの名無しさん
2006/05/15(月) 21:27:08#include <stdio.h>
int main()
{
double a1,a2,a3,a4;
a1=1+1/2;
a2=1+1.0/2;
a3=1+1/2.0;
a4=1.0+1.0/2.0;
printf("a1=%lf a2=%lf a3=%lf a4=%lf \n", a1, a2, a3, a4);
return 0;
}
0810デフォルトの名無しさん
2006/05/15(月) 21:34:01これは酷いw
0812デフォルトの名無しさん
2006/05/15(月) 21:59:22[1] 授業単元:計算機ソフトウェア
[2] 問題文(含コード&リンク):一連の男女の名前と経歴を読み込み、経歴の似ている男女を組み合わせ、できたカップルの
リストを出力するプログラムを考えよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 5/17
[5] 制限なし
0813デフォルトの名無しさん
2006/05/15(月) 22:11:54具体的データをおくれ
0814デフォルトの名無しさん
2006/05/15(月) 22:14:40fはまだしもlはこの場合…
0815デフォルトの名無しさん
2006/05/15(月) 22:19:230816デフォルトの名無しさん
2006/05/15(月) 22:20:240817デフォルトの名無しさん
2006/05/15(月) 22:21:15似ているの定義ってなに?
0819デフォルトの名無しさん
2006/05/15(月) 22:28:11適当に自分でファイルを作るようです。
何を使用していいかもわからないので、プログラムの方向性などを教えてくれたら
助かります。
0820デフォルトの名無しさん
2006/05/15(月) 22:38:230821デフォルトの名無しさん
2006/05/15(月) 22:38:340822デフォルトの名無しさん
2006/05/15(月) 22:38:40俺も教えて欲しいな
今勉強してるんだ
0823デフォルトの名無しさん
2006/05/15(月) 22:38:41俺もわかんなくて困ってるんだよね。あんなのできるほうがおかしいって
0824デフォルトの名無しさん
2006/05/15(月) 22:38:41するどい質問だ
0825デフォルトの名無しさん
2006/05/15(月) 22:38:45オレも助かる
0826デフォルトの名無しさん
2006/05/15(月) 22:38:47俺も何処が違うかと問いたい
0827デフォルトの名無しさん
2006/05/15(月) 22:38:52ですよね。何事もベクトルを考えなきゃね。
0828デフォルトの名無しさん
2006/05/15(月) 22:38:55そうだよ具体的なデータを提示しろよなあ?
0829デフォルトの名無しさん
2006/05/15(月) 22:39:01なあ、どう違うのか教えろよな。
0830デフォルトの名無しさん
2006/05/15(月) 22:39:01そうだよな。宿題ならきちんとデータとか提示されるべきだ
0831デフォルトの名無しさん
2006/05/15(月) 22:39:020832デフォルトの名無しさん
2006/05/15(月) 22:39:06な、どこが違うのか小一時k(ry
0833デフォルトの名無しさん
2006/05/15(月) 22:39:08そうだよな。助かるよな
0834デフォルトの名無しさん
2006/05/15(月) 22:39:23そうだよね、助かるよね!
0835デフォルトの名無しさん
2006/05/15(月) 22:39:31オレも同じ意見
0836デフォルトの名無しさん
2006/05/15(月) 22:39:36私もです、助かります
0837デフォルトの名無しさん
2006/05/15(月) 22:39:38ホントだよな
0838デフォルトの名無しさん
2006/05/15(月) 22:39:39俺も勉強している。
とりあえずハローワールドを習得した
0839デフォルトの名無しさん
2006/05/15(月) 22:39:430840デフォルトの名無しさん
2006/05/15(月) 22:39:48確かに教えてくれたら助かるよな
0841デフォルトの名無しさん
2006/05/15(月) 22:40:00どこが違うのか助かるよな
0842デフォルトの名無しさん
2006/05/15(月) 22:40:20俺もそこがわからない
具体的なデータも与えられないで作るのは無理だよな
0843デフォルトの名無しさん
2006/05/15(月) 22:40:370844デフォルトの名無しさん
2006/05/15(月) 22:40:39とりあえずもっと詳しく
0845デフォルトの名無しさん
2006/05/15(月) 22:40:59大助かりだよな
0846デフォルトの名無しさん
2006/05/15(月) 22:42:46ほんとそうしてくれよな
助かるのにな
0847デフォルトの名無しさん
2006/05/15(月) 22:45:56章を勉強しているのですが、その中の一問が課題でだされ、そのまま引用しました。
しかも、c言語でつくらなければ・・・
0848820
2006/05/15(月) 22:56:460849デフォルトの名無しさん
2006/05/15(月) 22:59:47VIPPERだよ
http://ex14.2ch.net/test/read.cgi/news4vip/1147691639/
0850809
2006/05/15(月) 23:01:11http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
によると、
* printf() における f 変換はそれ単独で double を引数にとる。
* (可変引数部では暗黙の型変換により float は自動的に double として渡されるので) float、double を分ける必要が無い。
* f 変換に対する長さ修飾子 l の作用は言及されてない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
によると、
* scanf() におけるただの f 変換は float *を引数にとる。
* f 変換に対する長さ修飾子 l の作用は、入力を float ではなく double に変換する。
* (渡されたポインタの先に直接書き込むので) float、double で分ける必要がある。
0851デフォルトの名無しさん
2006/05/15(月) 23:10:550852デフォルトの名無しさん
2006/05/15(月) 23:14:240853759
2006/05/15(月) 23:16:28参考プログラムに文字コードのReadOneWord、暗号,複合化のpower_modを
組み込めばできるみたいなんですけど、自分じゃどこに入れればいいかわからないんです...
0854797
2006/05/15(月) 23:44:19>>805
見たことがないってあんた、printf()くらい見るでしょうが。
後は型指定子にオプションつけて幅を指定しているだけ。
これが載ってない入門書は多いけど、便利なんだから
これを機に読めるようになっておいたら?
って、このままじゃ>805が可愛そうだから付け加えると、
Cで飯食ってる10年もののプログラマが、sprintf()一つで
済む処理を100行ほど掛けて書いてた例もある。
下を見るか上を見るかはお好きな方を。
0855デフォルトの名無しさん
2006/05/15(月) 23:50:01その、「参考プログラムに云々」ってのは他人の書いた糞コードを読まなきゃいけないから面倒なんだよね。
第一、「上の二つのプログラム」自体まともに使える代物じゃないのに。
0856デフォルトの名無しさん
2006/05/15(月) 23:54:07差し支えなければ↓にお願い。どんなコードが見たい。
ぱっと見て「ヘタだなぁ」と思うコード その2
http://pc8.2ch.net/test/read.cgi/tech/1142741989/l50
0857デフォルトの名無しさん
2006/05/16(火) 01:40:51[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1911.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみでお願いします。
[4] 期限: 2006、5、17、20:00
[5] その他の制限: なしです。
0858デフォルトの名無しさん
2006/05/16(火) 02:08:46ホーナー法を用いる関数では係数をグローバルな配列として宣言しても良いんだよね?
0860デフォルトの名無しさん
2006/05/16(火) 07:40:40//・4次多項式 f(x)= 1x^4 + 2x^3 + 4x +5
//(ホーナー法を用いる)
//x( x^3 +2x^2 +4)+5
//x( x( x^2+2x) +4)+5
//x( x( x (x+2) ) +4)+5
//x( x( x (x+2) +0) +4) +5
#define KOU 4
int hona(const int x, int cnt) {
const int kei[KOU] = {1,2,0,4}; // x^
static int f = 0;
if ( cnt == 1 )
return f = x * kei[cnt-1];
else {
f = x * ( hona(x, cnt-1) + kei[cnt-1]);
return f;
}
}
int main() {
int kai = 0, x;
printf ("f(x) = 1x^4 + 2x^3 + 4x +5\n");
printf ("input x:");
scanf ("%d", &x);
kai = hona( x, KOU )+5;
printf("f(2) = %d\n",kai);
return 0;
}
自信ないのでアンカ無し。これだから俺みたいな無学は困る(´・ω・`)
0861デフォルトの名無しさん
2006/05/16(火) 07:45:17昔カープとかにいた外人選手か?
しかし、あれだね〜
今や小学生でもパソコン持ってても不思議じゃない時代
無料コンパイラもあるわけだし。
当然最近のスペックの物なら、快適に動くだろうし
ネットで探せば、すぐソース見つかったりするし
良いね〜
俺が大学生の時初めて買ったパソコンはマック240MHz1.4GHD
はは、これじゃ、俺の持ってるギリモザのファイル一枚すらはいらねえや
ま、とりあえず
こんだけインターネットが普及して、パソ持っててあたりまえの時代だ
だから、言いたいのは
ちょっとは努力しろ、それもある理論を手書きで、偏微分して〜
このベクトル値を絶対値にかえて〜・・・・で、やっと任意の式を作って
それからアルゴリズム考えて・・・・ってなレベルじゃないだろ
大学図書館も今やパソ系の本もいっぱいあるだろうし、ググれるし・・・・
ググるなんて指を動かしマウスでスクロールするだけだぜ。楽勝じゃん。
とりあえずホーナー法はググっただけですぐ出てきた
難しくない。考えるんだ。それが血となり肉となりいつかは骨につきようとも
それは立派な人生だ
0862デフォルトの名無しさん
2006/05/16(火) 07:48:46問題文(含コード&リンク):
配列内の要素を指すポインタに対して比較や減算を行うプログラムを作成し、
その結果を確認せよ。
環境、UNIX
お願いします
0863デフォルトの名無しさん
2006/05/16(火) 07:52:46>1
>861
なんつーか、授業に沿った回答しないといけなさそうだな。
つーより、只の授業内容の確認だろ。
片付けてやるなんてレベルじゃないよ。
0864デフォルトの名無しさん
2006/05/16(火) 08:18:38#include <stdio.h>
int main(void)
{
int arr[]={1,2,4,8};
int *p = arr;
printf("%10s%p\n","p = ",p);
printf("%10s%p\n","&arr[3] = ",&arr[3]);
printf("%10s%d\n","arr[3] = ",arr[3]);
printf("%10s%d\n","*(p+3) = ",*(p+3));
return 0;
}
0865デフォルトの名無しさん
2006/05/16(火) 08:20:010866デフォルトの名無しさん
2006/05/16(火) 08:20:52計算量減らすやり方みたいだな
なんか昨今のコンパイラなら最適化してくれそうな気もするが・・・
0867デフォルトの名無しさん
2006/05/16(火) 08:44:25VC++2005で試したが、各項を計算した後、lea命令でまとめて計算してやがる・・・
0868デフォルトの名無しさん
2006/05/16(火) 10:43:01[2] 問題文(含コード&リンク):
問:5
まず二つの整数を読み込む。
そこから最小公倍数、及び最大公約数を計算するプログラムを作成する。
main関数の他、以下4つの関数を必ず用いよ。
A:整数の読み込み {読み込んだ整数を戻り値とする関数}
B:最小公倍数の計算{二つの整数を引数、結果を戻り値}
C:最大公約数の計算{同上}
D:結果の表示{最大公約数、最小公倍数を引数}
[3] 環境
[3.1] OS: バインリナックス
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 5月17日
[5] その他の制限: if,swich,for分と、この問題を解くのに最低限の関数を習いました
0869デフォルトの名無しさん
2006/05/16(火) 11:12:43最大公約数だけ作った
int gcd(int x1, int x2)
{
return (x1 == x2 ? x1:
x1 > x2 ? gcd(x1 - x2, x2) : gcd(x1, x2 - x1));
}
0870デフォルトの名無しさん
2006/05/16(火) 11:28:030871858
2006/05/16(火) 12:00:26ttp://www.u-aizu.ac.jp/course/alg1/ex/jp/ex04/#ex2
0872デフォルトの名無しさん
2006/05/16(火) 12:02:47[2] 問題文(含コード&リンク): 下に示すファイルhw.datに保存されている
名前、身長、体重の個人データを1件ずつ読み込んで画面に表示し、
最後に平均身長と平均体重を表示するプログラムを作成せよ。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
p1 160 59,2
p2 174 64,5
p3 182 78,3
p4 162 51,6
ーーーーーーーーーーーーーーーーーーーーーー
[3] 環境
[3.1] OS: UNIX
[3.2]
[3.3] 言語: c
[4] 期限: 木曜日まで
よろしくお願い申し上げます
0873デフォルトの名無しさん
2006/05/16(火) 13:01:40#define FILE_LINE_LENGTH (200)
#define FILE_NAME "hw.dat"
#define NAME_LENGTH (50)
int main()
{
unsigned count = 0;
double totalHeight = 0;
double totalWeight = 0;
char buf[FILE_LINE_LENGTH];
FILE * fp = fopen(FILE_NAME, "r");
if (fp == NULL) {
fprintf(stderr, "File not found or can't open.\n");
return 1;
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
char name[NAME_LENGTH];
double height;
double weight;
if (fscanf("%s%lf%lf", name, & height, & weight) != 3) {
fprintf(stderr, "Illegal data.\n");
return 1;
}
printf("%s\t%g\t%g\n", name, height, weight);
totalHeight += height;
totalWeight += weight;
++count;
}
fclose(fp);
printf("average\t%g\t%g\n", totalHeight / count, totalWeight / count);
return 0;
}
0875学生
2006/05/16(火) 16:16:38[2] 問題文(含コード&リンク):
長さが32の0と1の列
s e(7) e(6) ... e(0) d(1) d(2) d(3) ... d(23)
を入力して、このビット列の表す実数値(実数の表現の仕方はIEEE規格754に従うものとする)を出力するCプログラムを作成せよ。
(ー1)^s×(1+M)×2^E if -127<E<128
(ー1)^s×M×2^(E+1) if E=-127
Inf if E=128,M=0
NaN if E=128,M!=0
M=Σ^23_i=1 d(i) × 2^(-i)
E=Σ^7_i=0 e(i) × 2^i -127
[3] 環境
[3.1] OS: UNIX
[3.2]
[3.3] 言語: C
[4] 期限: [2006年5月17日12:00まで]
[5] その他の制限: pow(,)などの数学関数は使ってはいけないらしいです。
全く意味がわからないので、お手数お掛けしますが、どうぞよろしくお願いいたします。
できました
ありがとうございました。
0877デフォルトの名無しさん
2006/05/16(火) 19:04:07「Inf if E=128,M=0」
じゃなくて
「+Inf if E=128,M=0,s=0
-Inf if E=128,M=0,s=1」
じゃないか?
0878デフォルトの名無しさん
2006/05/16(火) 19:48:54#include <stdio.h>
int main(){
int i, s = 1, e = 0, bias = 127;
bool a[32]={0,
1,0,0,0,0,0,1,1,
0,1,0,1,1,0,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0
};
double out = 1.0, m = 0, mm = 1.0 / 2, ee = 1.0;
// s
s = a[0];
// e
for(i = 0; i < 8; i++)if(a[1 + i])e += 1 << 7 - i;
e -= bias;
if(e == 128){
if(m == 0)puts("+INF");
else puts("-INF");
return 0;
}
else if(e > -127 && e < 128)m += 1.0;
else e += 1;
// m
for(i = 0; i < 23; i++, mm /= 2)if(a[9 + i])m += mm;
//表示
if(s)putchar('-');
for(i = 0;i < e; i++)ee *= 2.0;
printf("%f\n", m * ee);
return 0;
}
0879デフォルトの名無しさん
2006/05/16(火) 20:18:00が正しいプログラムです。
って問題が学校で出たんですが、最近Cはじめたばっかで分かりません。
一応学校ではLinuxのemacsを使ってやってるんですが・・・
こんなかんじで作ってみたんですが・・・
#include
main(int argc, char *argv[])
{
int i;
double d;
i = 10/3;
d = 10%3;
printf("int: %d\n", i);
printf("double: %e\n", d);
}
これでコンパイルすると、exponent has no digitsとでるんです。なんとかお教え願えませんか?
0880デフォルトの名無しさん
2006/05/16(火) 20:27:09これって正しくないのか?w
0881デフォルトの名無しさん
2006/05/16(火) 20:45:30>1
0882デフォルトの名無しさん
2006/05/16(火) 20:46:58まず
#include<stdio.h>
じゃね?
0883デフォルトの名無しさん
2006/05/16(火) 20:47:000884デフォルトの名無しさん
2006/05/16(火) 20:50:48できますか?
[1] レポート
[2] 日本語(SJIS)と対応する2バイトの16進コードを出力せよ
例:81AO □
こんな感じです
[3] 環境
[3.1] OS: Windows XP SP2
[3.2] Visual Studio 2005
[3.3] 言語: C/C++
[4] 期限: できれば早く
0885デフォルトの名無しさん
2006/05/16(火) 20:55:18いいえ
0886デフォルトの名無しさん
2006/05/16(火) 20:59:40ヒント:つり
0887デフォルトの名無しさん
2006/05/16(火) 21:00:47サンクス
やっぱり、できないんですか・・・
それではIMEを16進と一緒に全部出力とかも、できないのでしょうか?
0888デフォルトの名無しさん
2006/05/16(火) 21:01:41// unicodeでプロジェクト作ったら巧くいかない
const char * foo = "□";
printf("%02x%02x %s\n", foo[0], foo[1], foo);
0889デフォルトの名無しさん
2006/05/16(火) 21:03:3616進数ってO(オー)123456789ABCDEFで表せばいいのか?
0890888
2006/05/16(火) 21:07:060891デフォルトの名無しさん
2006/05/16(火) 21:08:42失礼しましたミスタイプです
16進数の出力形式ですが
81 A0
こんな感じです
0892デフォルトの名無しさん
2006/05/16(火) 21:19:36<stdio.h> が HTML タグとみなされて削除されたんだと思われ。
0893884
2006/05/16(火) 21:26:38微妙に逆バージョンで
0x81A0を渡して、□を出したいのですが
int x = 0x81A0;
printf("%s", x);
当然これでは失敗です・・・
0894デフォルトの名無しさん
2006/05/16(火) 21:35:09int main(){
char s[3];
s[0]=0x81;
s[1]=0xa0;
s[2]=0x00;
printf("%s", s);
return 0;
}
こうゆうこと?
0896デフォルトの名無しさん
2006/05/16(火) 22:32:402chでそれは有り得ない。
0897デフォルトの名無しさん
2006/05/16(火) 23:19:360898デフォルトの名無しさん
2006/05/16(火) 23:50:15[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
char a[25];
int b;
scanf("%s", a);
scanf("%d", &b);
printf("**** String is : %s ****\n", a);
printf("**** Value is : %d ****\n", b);
}
において実行時に「This is<enter>」と入力すると,どのようになるか.
また,7行目の「&b」の「&」がないと,どうなるか.それぞれ結果を示し,なぜそのような結果になったかを考察せよ.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 06/05/22
[5] その他の制限: printf・scanf・算術演算子・代入演算子・比較演算子まで習いました。
ポインタはまだ習ってません。scanfにおいて%s以外のときは必ず付けろと習っただけです。
実行結果
・「This is<enter>」と入力した場合
This is
**** String is : This ****
**** Value is : -858993460 ****
・9行目の「&b」の「&」がない場合
This is
**** String is : This ****
**** Value is : -858993460 ****
0899デフォルトの名無しさん
2006/05/17(水) 00:02:47ブレークポイントを置いてデバッガで観察。
0900デフォルトの名無しさん
2006/05/17(水) 00:06:05幅指定の範囲内で次の空白文字までを読み込む仕様である。
このため、件の入力を与えた場合、"This"のみaに格納される。
また、%sによる数値の変換も同様に、先行する空白文字を取り除いた上で
幅指定の範囲内で数字文字のみを読み込む仕様である。
このため、件の入力を与えた場合、bにはなにも格納されない。
従って、その後のprintf()の出力で"Vallue is :"の後に何が出力されようと鼻から悪魔である。
このように、課題とはいえ未初期化の変数をそのまま出力するような
糞コードを書くことは言語道断である。
また、同じ理由で%sに幅制限をつけないことは糞コード以前の問題である。
尚、bへの変換が行なわれない以上&bを渡さなかったとしても何ら問題はない。
scanf()は正常に動作を終了してしまう。
従って、無意味なコードの意味を考察させると言う糞の足しにもならない課題と言える。
0901デフォルトの名無しさん
2006/05/17(水) 00:54:22返事ありがとうございました。
何とか自力でできました。しかし、なんか無理ぽ。
0902デフォルトの名無しさん
2006/05/17(水) 01:15:53[2] 問題文(含コード&リンク):
10を3で割ると3.33333…という循環小数になりますが、これを計算してコンソールに表示するCプログラムを書いてみましょう。表示が3.333333となる(小数点以下に3が6桁表示される)プログラム
が正しいプログラムです。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:emacs21.3.1
[3.3] 言語:C
[4] 期限: (2006年5月17日17:00まで)
[5] その他の制限: 今のところ「Cの計算式、変数とその代入」「コメント、データ型、宣言文」というところまでやりました。
#include <stdio.h>
int
main(int argc, char *argv[])
{
int i;
double d;
i = 10/3;
d = 10%3;
printf("int: %d\n", i);
printf("double: %e\n", d);
}
は自分で書いてみたんですが、コンパイルすると「exponent has no digits」とでてくるのでちゃんとしたのができません。
先ほどはルールを読まず大変失礼いたしました。お願いします。
0903デフォルトの名無しさん
2006/05/17(水) 01:20:45int main(int argc, char* argv[])
{
printf("%f\n", 10.0 / 3.0);
return 0;
}
0904デフォルトの名無しさん
2006/05/17(水) 01:34:550905デフォルトの名無しさん
2006/05/17(水) 02:54:010906デフォルトの名無しさん
2006/05/17(水) 02:58:540907デフォルトの名無しさん
2006/05/17(水) 03:22:000908デフォルトの名無しさん
2006/05/17(水) 04:13:48[2] 問題文(含コード&リンク):
算術式を表す文字列を標準入力から読み込み、atoi()関数を用いて数字のみを取り出し出力せよ
(標準入力)
char buf[80];
fgets(buf, 80, stdin);
(実行結果の例)
文字列を入力してください:2005+5/17
2005
5
17
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月18日
0909デフォルトの名無しさん
2006/05/17(水) 04:56:58[2] 問題文:「異なるn個の物からr個とる組合せ」をすべて表示し
さらに、その順列(並び替え?)を組み合わせごとにすべて表示するプログラムを作れ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月18日まで
どちらかと言えば、自主選択課題です。 が、4月からCを学び始めたもので全然プログラムが組めません。
関数(comb)?再帰? 参考になりそうなものも見つかったのですが理解できませんでした。
0910デフォルトの名無しさん
2006/05/17(水) 08:04:47#include <stdio.h>
int main()
{
char str[32];
scanf("%s", &str);
atoi(str);
printf("%d",str);
}
0911デフォルトの名無しさん
2006/05/17(水) 08:17:20問題文も読めない人はお帰りください。
0912デフォルトの名無しさん
2006/05/17(水) 08:19:090913デフォルトの名無しさん
2006/05/17(水) 08:58:13#include <stdio.h>
#include <ctype.h>
int main (void){
int i=0;
char str[64];
scanf("%s",str);
while(str[i]!='\0'){
if(isdigit(str[i])){
printf("%d\n",atoi(str+i));
while(isdigit(str[i++])); /*Jump to Nondigit*/
}
else i++; /*Jump to Digit*/
}
return 0;
}
0914デフォルトの名無しさん
2006/05/17(水) 09:36:37e=1+1/1!+1/2!+・・・+1/n!+・・・が成り立つ
(問題)eの値を求めるのに近似値e(n)=1+1/1!+1/2!+・・・+1/n! (n>=1)
を計算する。n=5,6・・・,15 に対するe(n)の値を計算して表示させよ。
ただしe(n)の値は小数点以下10桁に揃えて以下のように表示させること
e 5=*.**********
e 6=*.**********
・・・
e15=*.**********
0915デフォルトの名無しさん
2006/05/17(水) 11:25:40void main(void){
int i;
double e=0,k=1;
for(i=1;i<=15;i++){
k=k*i;
e=e+1.0/k;
if(i>=5){
printf("e %d =%lf",i,e);
}
}
}
0917& ◆nLgOQJCewI
2006/05/17(水) 12:08:16ありがとうございました、
本当に感謝です。
0918デフォルトの名無しさん
2006/05/17(水) 13:20:02(2)問題:
以下に示すプログラムは整数nを読み込んだ後,n個の数の総和を計算するプログラムである.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1912.txt
以下の5つの関数を作成し,main関数では関数を呼び出すだけにプログラムを書き直せ.
整数 ndata を読み込む関数(引数:無し,戻り値:ndata)
数 xval を読み込む関数(引数:無し,戻り値:xval)
読み込んだ数 xval と足しこんだ値 xsum を渡すと和を計算する関数(引数:xval, xsum,戻り値:xsum)
結果を表示する関数(引数:xsum,戻り値:無し)
平均 ave を計算する関数を新たに作成せよ.(引数:xsum, ndata,戻り値:ave)
(3)環境:OS/Linux コンパイラ/gcc 言語/C言語
(4)期限:5月18
よろしくお願いしまっす!
0919デフォルトの名無しさん
2006/05/17(水) 14:26:51文字列の数列を数字に直すatoiという関数はありますが、
その逆の働きをする数字を文字列の数列に直す関数というのはあるのでしょうか?
ない場合にはどのように処理をするか教えてください。
例:
"09" → 9
という感じです。
どうかよろしくお願いします。
0920デフォルトの名無しさん
2006/05/17(水) 14:31:510921デフォルトの名無しさん
2006/05/17(水) 14:35:21int a = 12345;
sprintf(buf, "%d", a);
的なことだろうか
0922デフォルトの名無しさん
2006/05/17(水) 14:39:18それに近いです。
例がちょっと間違っていました。
9 → "9" ですね。
いま辞書で調べたらstrtol()で出来そうなのでためしてみます。
0923デフォルトの名無しさん
2006/05/17(水) 14:39:55例を見ると、文字列から数字に変わってるけど
0924923
2006/05/17(水) 14:40:350925デフォルトの名無しさん
2006/05/17(水) 15:06:3610で割った余りをズラッと並べた文字列を最後に全部ひっくり返すというアホな考え方w
sprintfで一行で済むとも知らず・・・w orz
0926デフォルトの名無しさん
2006/05/17(水) 15:13:32ありがとうございます。
おかげですっきろと解決できました。
しかし、新たな問題が…。
0927デフォルトの名無しさん
2006/05/17(水) 15:32:190928デフォルトの名無しさん
2006/05/17(水) 16:23:26本当にありがとうございます。
sprintfは大変勉強になりました。
Cって本当文字の扱いが難しいですね。
0929884
2006/05/17(水) 19:19:41>>884です
夕べはどうもでした
一晩寝て起きて考えたら、悩みました
#include <stdio.h>
int main(){
char s[3];
s[0]=0x81;
s[1]=0xa0;
s[2]=0x00;
printf("%s", s);
return 0;
}
s[0]=0x81;
s[1]=0xa0;
これは理解できます
しかし
s[2]=0x00;
は何の為に入れているのでしょうか?(0x00終端文字?)
SJISは2バイトコードなので、
s[2]=0x00;
が入ることによって3バイトになるのでは?
0930デフォルトの名無しさん
2006/05/17(水) 19:26:20s[0]=0x81;s[1]=0xa0;
のように2文字なので文字じゃなく文字列として扱わないといけない。
そして基本的に文字列は0で終わってないとだめ。
0931デフォルトの名無しさん
2006/05/17(水) 19:27:57つか、その出題の意図があんまり良く分からなかったんだが、
関数の作り方を学ぶみたいな感じなのかな。
あとせっかく平均を計算しておいて表示しないのかよ、って思ったからちょっと
かってに題意を補間した。だから出題者の意図とは違うかも。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1913.txt
0932デフォルトの名無しさん
2006/05/17(水) 19:39:46つ『C言語による最新アルゴリズム事典』
0933デフォルトの名無しさん
2006/05/17(水) 19:48:15#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define GRAPH_FILENAME "graph.txt"
int read_graph(int **pgraph, int *n){char buf[100];
FILE *f=fopen(GRAPH_FILENAME,"r");if(!f)return 0;
fgets(buf,sizeof(buf), f);*n = atoi(buf);if(!*n ){fclose(f);return 0;}
*pgraph=calloc(*n**n, sizeof(int));
while(!feof(f)){int l=-1,r=-1;fgets(buf,sizeof(buf),f);sscanf(buf,"%d %d",&l,&r);
if(0<=l&&l<*n&&0<=r&&r<*n){(*pgraph)[l**n+r]=1;(*pgraph)[r**n+l]=1;}}
fclose(f);return 1;}
int main(){
int *graph,n,pos=0;if(!read_graph(&graph,&n))return 1;srand(time(0));printf("%d\n",pos);
while(pos!=6){
int new_pos;do{new_pos=(double)rand()/(RAND_MAX+1.0)*n;}while(!graph[pos*n+new_pos]);
pos=new_pos;printf("%d\n",pos);}
return 0;}
今更だが、やっと投稿できるIPが回ってきたので、せっかく作ったので出してみた。
ケーブルって不便やな、こういうとき。
0934884
2006/05/17(水) 20:16:36SJISコードの0x8140〜0x81f0までを、foo.txtに書込みました
>>930氏の説明を読み、c言語の規則として額面通り受入れたいのですが
foo.txtをバイナリエディタで開いても、
81 40 81 41 81 42 81 43 81 44 81 45 81 46 81 47と規則正しく並び
s[2]=0x00;
文字列終端コードは見受けられないのですが・・・・・
#include <stdio.h>
FILE *fp;
int main(){
char s[2];
int x = 0x81;
int y ;
fp = fopen("foo.txt" ,"w");
for(y = 0x40 ;y < 0xf0 ;y++ )
{
s[0]=x;
s[1]=y;
s[2]=0x00;
fprintf(fp, "%s" ,s );
//fputs(s , fp);
printf("%s" , s);
}
return 0;
}
0935884
2006/05/17(水) 20:19:50×char s[2];
○char s[3];
に訂正です
0936931
2006/05/17(水) 20:35:49'\0' (0x00) はメモリ上の印。ここで文字列が終わりますよ、っていう。
0x00はどんな文字コードでも使われないはず。だから終端の印として機能する。
これはただの終端の印であって、printfしたときや、ファイルに書き出したときは
もちろん0x00は除いて書き出される。
strcat(a,b)の例で言えば、もちろんa[strlen(a)]にあった、'\0'が取り除かれて
b[0]がコピーされることからも分かるように、'\0'は文字列の一部としての意味は持たない。
>c言語の規則として額面通り受入れたいのですが
まあ、そういう理解でかまわないと思う。
0937デフォルトの名無しさん
2006/05/17(水) 20:47:32ありがとう、納得できました。
0938デフォルトの名無しさん
2006/05/17(水) 22:27:41[2] 問題文(含コード&リンク):
演習1(必須)
2つの整数を読み込み、最大公約数と最小公倍数を計算するプログラムを作成せよ。
但し、main関数のほかに以下の関数を必ず使用すること。
・整数の読み込み(読み込んだ整数を戻り値とする関数)
・最大公約数の計算(2つの整数を引数、結果を戻り値)
・最小公倍数の計算(2つの整数を引数、結果を戻り値)
・結果を表示する関数(最大公約数、最小公倍数を引数)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ:gcc
[3.3] 言語: C言語
[4] 期限: 明日提出です・・
>918とおなじ演習があるんですが同じ学校なのかなw
よろしくお願いします!
0939デフォルトの名無しさん
2006/05/17(水) 22:36:34>>868と同じだな
0940デフォルトの名無しさん
2006/05/17(水) 22:50:09int lcm(int a,int b){
int x=a;
int y=b;
while(x!=y){
if(x<y) x+=a;
else y+=b;
}
return x;
}
0941デフォルトの名無しさん
2006/05/17(水) 22:51:450942デフォルトの名無しさん
2006/05/17(水) 22:52:180943デフォルトの名無しさん
2006/05/17(水) 23:03:25言語:C++
「ナイトの巡回」のプログラミングで宿題なんですが…
バックトラック法を用い、
6×6の盤で初期位置を(1,1)とし、
すべてのマスを埋めるというものです。
ただ条件があって、
・各マスに優先度を指定し、優先度が高い方を優先して移動するようにする。
・優先度は次の次まで考慮する(次に移動するマスで優先度が並ぶものがあった場合の対策)
・すべてのパターンを見つけるのにかかる時間、
パターン数、
移動に成功した回数(駒が移動した回数をカウントするんですが、その移動がまちがいだとわかって戻るときの移動は回数に含めない)
を出力するというものです。
3,4日考えてるんですがうまくいきません。
時間にゆとりがある人がいらっしゃればこれを満たすプログラムを教えてくれませんか?
お願いします。
0944デフォルトの名無しさん
2006/05/17(水) 23:52:06次の次が等しい優先順位だった場合どちらを選択するのか
マスの動き方(?)
>すべてのマスを埋める
?
すべてのマスを網羅するでいいのか
0945デフォルトの名無しさん
2006/05/18(木) 00:42:22いわゆるナイト巡回問題と同様に以下の条件は前提としてよいか?
・開始マスを除き各マスを1回だけ通る。
・最後は開始マスに戻る。
対称解は別パターンとみなすか?
すべてのパターンを見つけるのなら優先度は最終的には関係なくないか?
0946デフォルトの名無しさん
2006/05/18(木) 00:59:240947デフォルトの名無しさん
2006/05/18(木) 01:44:06次の次が同じ優先度ならその場合はどちらにいっても構わないということです。
すべてのマスを網羅するでOKです。
>>945
「開始マスを除き各マスを一回だけ通る」で結構です。
ただ最後に開始マスに戻る必要はないです。あくまですべてのマスを網羅するだけでいいです。
よろしくお願いします。
自分も今奮闘中です。。
0948デフォルトの名無しさん
2006/05/18(木) 01:50:07補足です。
対象解も別パターンとみなします。
確かに優先度の必要性が良くわからないですね…どうなんだろ…
0949デフォルトの名無しさん
2006/05/18(木) 01:58:17「開始マスを除き各マスを一回だけ通る」なら移動回数は35だろう。
あとはパターンだけか。
0950デフォルトの名無しさん
2006/05/18(木) 02:04:44確かに自分も最初そう思ったのですが、「移動回数」ではなく「移動成功数」だそうです。
たとえば、
初期位置→1→2→3(この移動が間違い)
↓
4→6→7
↓
5(この移動が間違い)
といった具合です。
文面で伝わったでしょうか…
0951デフォルトの名無しさん
2006/05/18(木) 02:08:47移動先が移動可能なマスの中で一番高くないと間違いと言うこと?
0952デフォルトの名無しさん
2006/05/18(木) 02:14:39えっと優先度のことでよかったでしょうか?
一応自分は6×6のマスに
234432
346632
468832
468832
346643
234432
というように優先度を決めてやってます。
ただこれをどう活かせばいいのかで困っていて…
0953デフォルトの名無しさん
2006/05/18(木) 02:30:11できれば問題文をそのまま載せて欲しい。
優先度の使い方がいまいち分からん。
0954デフォルトの名無しさん
2006/05/18(木) 02:42:07問題文を載せたいところなんですが、
この宿題は初めから口頭で伝えられただけのもので明確な決まりはないんです。
つまり条件さえ満たせばどのようにやってもいいみたいです…
優先度の解釈も基本的にはやる人任せみたいな感じでした…すいません。
0955デフォルトの名無しさん
2006/05/18(木) 03:01:25[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
最初に与えた数に従って、以下の例のように表示するプログラムを作成せよ。ただし、変数は1個しか使えない。
<実行例1>
数(整数)を入力してください:43
43:39
42:40
41:41
40:42
39:43
<実行例2>
数(整数)を入力してください:10
10:6
9:7
8:8
7:9
6:10
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Visual stdio.net 2003
[3.3] 言語: C
[4] 期限: 06/05/22
[5] その他の制限: printf・scanf・算術演算子・代入演算子・比較演算子まで習いました。
ポインタはまだ習ってません。scanfにおいて%s以外のときは必ず付けろと習っただけです。
0956デフォルトの名無しさん
2006/05/18(木) 03:21:51int main(){
int a;
printf("数(整数)を入力してください:");
scanf("%d", &a);
printf("%d:%d\n", a, a - 4);
printf("%d:%d\n", a - 1, a - 3);
printf("%d:%d\n", a - 2, a - 2);
printf("%d:%d\n", a - 3, a - 1);
printf("%d:%d\n", a - 4, a);
return 0;
}
0957デフォルトの名無しさん
2006/05/18(木) 03:24:45ありがとうございます
0958デフォルトの名無しさん
2006/05/18(木) 03:33:27バックトラック中に優先度の低い方に行っていいの?
0959デフォルトの名無しさん
2006/05/18(木) 03:45:38常に優先度の高い方に行かないとダメかと思います。
0960デフォルトの名無しさん
2006/05/18(木) 04:00:26だとすると>>952の優先度設定だと解けない
0961デフォルトの名無しさん
2006/05/18(木) 04:10:44問題の意味誤解しとるかもしれんがこういうこと?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1914.txt
あと次スレよろ(950だよな?)
0962デフォルトの名無しさん
2006/05/18(木) 08:25:10http://pc8.2ch.net/test/read.cgi/tech/1147902222/
0963billy
2006/05/18(木) 09:16:31[2] 問題文(含コード&リンク):
引数のファイルに含まれる文字列を、カンマを区切りとして単語に分けて
出力するプログラムを作成する。
実行例:
% cat source
This,is,source.
end.
% gcc -o filebreak kadai.c
% ./filebreak source
-- Line 1 --
Field 1: This
Field 2: is
Field 3: source
-- Line 2 --
Field 1: end.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 5月19日
0964デフォルトの名無しさん
2006/05/18(木) 13:19:25#include <stdio.h>
#include <string.h>
int
main()
{
char buf[BUFSIZ], *ptr, *cp;
int line, field;
for (line = 1; fgets(buf, sizeof(buf), stdin); line++) {
buf[strlen(buf) - 1] = '\0';
printf("-- Line %d --\n", line);
for (field = 1, cp = buf; ptr = strtok(cp, ","); field++) {
printf("Field %d: %s\n", field, ptr);
cp = NULL;
}
}
return 0;
}
0965デフォルトの名無しさん
2006/05/18(木) 15:58:32ちょっとお聞きしたいことがあって書き込みました。
今ファイル処理をやっていて、xxx.datファイルを読み込むことはできたのですが、そこから自動的にxxx.pgmを出力するやり方がわかりません。
名前を固定してしまえばできるのですが、自動的にってのがわからないので、教えてください。
お願いします。
0966デフォルトの名無しさん
2006/05/18(木) 16:26:23>>1
0967デフォルトの名無しさん
2006/05/18(木) 16:35:33文字列fnameの後ろから3文字を"pgm"に置き換えるすさまじく単純な方法w
strcpy( fname + strlen(fname) - 3, "pgm");
0968デフォルトの名無しさん
2006/05/18(木) 17:07:40[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1915.txt
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006年05月19日08:00
[5] その他の制限:特に無し
以上です、お願いします。
0969デフォルトの名無しさん
2006/05/18(木) 17:30:57double average(double sum, int num);
double average(double sum, int num)
{
return sum / num;
}
int main(void)
{
double input;
int num = 0;
double sum = 0;
while(scanf("%lf", &input) == 1 && input > 0)
{
sum += input;
num++;
}
if(num == 0)
printf("No data.\n");
else
printf("average: %.3f\n", average(sum, num));
return 0;
}
0970969
2006/05/18(木) 17:35:13return (double)(int)(sum / num * 1000 + 0.5) / 1000;
0971デフォルトの名無しさん
2006/05/18(木) 17:38:340972969
2006/05/18(木) 17:41:38とあるから、四捨五入も平均を求める作業に含まれると思うが。
0973デフォルトの名無しさん
2006/05/18(木) 18:44:20ありがとうございました
サンプルプログラムでも、四捨五入をしていたのでOKです。
0974デフォルトの名無しさん
2006/05/18(木) 19:15:25[2] 問題文(含コード&リンク):
キーボードから0以上の整数を1つ読込み、
入力した数と同じ個数の文字'+'を一行に表示するプログラムを作成しなさい。
*条件
負の数が入力された場合は、"error"とエラーメッセージを表示して終了する。
整数以外の入力は考えなくてよい。
0が入力された場合は、空行(何も文字が表示されていない行)を表示する。
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc4.00
[3.3] 言語: C
[4] 期限:06年05月18日
[5] その他の制限:特に無し
以上ですよろしくお願いします。
0975デフォルトの名無しさん
2006/05/18(木) 19:22:38# include <stdio.h>
int main(void)
{
int n,i;
scanf("%d",&n);
if (n>=0){
for (i=0;i<n;i++){
printf("+");
}
}else{
printf("error!\n");
}
return 0;
}
0976デフォルトの名無しさん
2006/05/18(木) 19:25:14i要らなかった
0977デフォルトの名無しさん
2006/05/18(木) 20:00:51[1] 授業単元: 復習
[2] 問題文(含コード&リンク):
キーボードから 行と列それぞれ数値1〜80までの値を入力し
それ以外の物が入力されたら正しい入力がされるまで繰り返す。
なお、入力した値分 #を描画し長方形を表示するものとする。
[3] 環境
[3.1] OS:Windows
[3.2] Visual C++ 2005
[3.3] 言語:C言語
[4] 期限:06年05月20日
[5] その他の制限:正しい値以外は絶対に通らないように製作。ファンクションや複数キーを含む
0978デフォルトの名無しさん
2006/05/18(木) 20:16:10[1] 授業単元: プログラミング演習I
[2] 問題文(含コード&リンク):
住所録の作成と検索
個人の情報を格納し、整理するプログラム
扱う項目:姓、名、住所、電話番号(もちろん架空のもの)
[3] 環境
[3.1] OS:Windows
[3.2] bcc
[3.3] 言語:C言語
[4] 期限:06年05月21日0時
[5] その他の制限:姓、名で検索を行い、検索結果を標準出力に表示
よろしくお願いしますm(._.)m
0979デフォルトの名無しさん
2006/05/18(木) 20:39:58#include<stdio.h>
int main(void){
int i,j;
int n,m;
do{
scanf("%d",&n);
}while( !(n>0) && !(n>80) );
do{
scanf("%d",&m);
}
while( !(m>0) && !(m>80) );
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("#");
}
printf("\n");
}
return 0;
}
0981デフォルトの名無しさん
2006/05/18(木) 20:45:37do{
scanf("%d",&n);
}while( (n<0) || (n>80) );
do{
scanf("%d",&m);
}
while( (m<0) || (m>80) );
0982billy
2006/05/18(木) 20:53:27どうやって実行するのですか?
0983977
2006/05/18(木) 21:07:230984デフォルトの名無しさん
2006/05/18(木) 21:42:44[2] 問題文(含コード&リンク):
-------------------------------------------------------------------------------
次のような, 日付を表すクラスDateを実装してみてください.
Dateは, 年, 月, 日をそれぞれintの値で持っている.
Dateは, 1日日付を進めるメンバ関数を持っている.
Dateは, 1日日付を戻すメンバ関数を持っている.
始めは単にそれぞれの値をget(取得), set(設定)するメンバ関数と, 単なる値を書き変えるだけのメンバ関数を作れば良いでしょう.
それができたら, 各月の日数や閏年を考慮するものも作ってみましょう. また, あると便利そうなメンバ関数も追加してみましょう. (例えば日付の表示をするなど)
ヒント:閏年は, 「400で割り切れる」または「100で割り切れなくて4で割り切れる」年です
-------------------------------------------------------------------------------
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2006/5/26
0985デフォルトの名無しさん
2006/05/18(木) 21:47:09[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1916.txt
キーボードから1つの実数を入力し(その数をaとする),
半径aの円の面積
辺の長さがaの正方形の面積
辺の長さがaの正方形からそれに対して内接する円の部分を除いた面積
(正方形の面積から内接する円の面積を引いたもの)
の3種類の面積を求めるプログラムを作成しなさい.
このとき, 円の半径を引数として与えたとき,面積を戻す関数double circle(double r)と,
正方形の辺の長さを引数として与えたとき,面積を戻す関数double square(double s)を 作成しなさい.
main関数部は,以下のプログラムの雛形に対して,
正方形に内接する円の部分を除いた面積を求めるための追加以外の変更を加えないこと. また,面積は小数点以下2桁で表示すること.
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン:gcc 4.0
[3.3] 言語: C
[4] 期限:明日の朝9時まで
[5] その他の制限:無し
よろしくお願いします。
0986デフォルトの名無しさん
2006/05/18(木) 21:47:50記入漏れが有りました。
OSはLinuxです。
よろしくお願いします。
0987デフォルトの名無しさん
2006/05/18(木) 22:11:14■実行環境:Visual stdio.NET2003
■提出期限:5月19日
■内容 :次のプログラムを自己参照構造体を使うように変更せよ。
プログラム長いので、UPしました。よろしくお願いいたします。
■プログラム:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1917.txt
0988デフォルトの名無しさん
2006/05/18(木) 22:17:01あなたの日本語が理解できません
0989デフォルトの名無しさん
2006/05/18(木) 22:34:01この問題は大学何年生くらいのレベルなんですか?
0990デフォルトの名無しさん
2006/05/18(木) 22:48:162年生くらいです
0991デフォルトの名無しさん
2006/05/18(木) 23:02:40double circle(double r)
{
/* ここを作成する */
return r * r * PI;
}
double square(double s)
{
/* ここを作成する */
return s * s;
}
include文の下に
#define PI 3.141592
っていれてね。
これが出来ないとこれからきついと思われ。
0992デフォルトの名無しさん
2006/05/18(木) 23:07:42自己参照構造体ってことは
リスト構造で動くようにしろと考えておkなのかな?
0993デフォルトの名無しさん
2006/05/18(木) 23:11:09OKです。
0994デフォルトの名無しさん
2006/05/18(木) 23:24:01問題見ないで言うもんじゃないね
サーチするときにでも使うのではないかと予想
0995デフォルトの名無しさん
2006/05/18(木) 23:28:33http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1918.zip
#main関数は作ってないので、適当に自作してね
#日付の表示をするメソッドも、作るんなら勝手に作ってね
#privateメソッドのnext,beforeをpublicにしたい場合は、修正が必要ですよ
0996デフォルトの名無しさん
2006/05/18(木) 23:47:19>>991サンの出してくれた奴に、3番目の
>>辺の長さがaの正方形からそれに対して内接する円の部分を除いた面積
を導く式を追加してね。
0997デフォルトの名無しさん
2006/05/18(木) 23:56:590998991
2006/05/19(金) 00:26:48おっと、読みすごした。スマソ
0999デフォルトの名無しさん
2006/05/19(金) 00:57:0110001000
2006/05/19(金) 00:59:521000なら皆が宿題を理解できる
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。