- 1 名前:デフォルトの名無しさん [2007/11/05(月) 20:38:18 ]
- あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 【前スレ】 C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1193150915/
- 522 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:07:31 ]
- >>520
ダブルクリックでおk
- 523 名前:デフォルトの名無しさん [2007/11/14(水) 23:08:50 ]
- >>522
いや、ごもっともなんだけどね。。。 どういう命令をすればやってくれるのかなって思って。
- 524 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:12:27 ]
- >>520
#include <stdlib.h> int main() { system("%systemroot%\\NOTEPAD.EXE"); return 0; }
- 525 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:12:47 ]
- >>523
system
- 526 名前:デフォルトの名無しさん [2007/11/14(水) 23:16:57 ]
- >>524, 525
ありがとお。こんなの知らなかったお。
- 527 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:21:59 ]
- >>477
当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。 乱数は M系列乱数、ガウス分布化は局座標法を使用しています。 仕入れ部数を600部から1000部まで1ずつ変化させ、それぞれに 大して 6 万回の試行を行い、平均を算出しています。 さらに、ピークをわかりやすくするために隣接3区間の平均をもって 平準化しています。(が、はっきりしませんでした。) 結果だけのべると、800 より少し多いところ(830〜850) に極大があるようです。 実行すると仕入れ部数と利益が対になって出力されます。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5262.txt (参考文献)C言語による最新アルゴリズム事典/奥村晴彦/技術評論社 1991 ISBN4874084141
- 528 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:32:29 ]
- >>474 課題1-4
合格最低人数を引数にして合格最低点を求めるプログラムを作成しなさい。 但し、引数のとりかたは付録を参照すること。 void border(int count) { char number[7]; int score; score = 101; while (count > 0 && scanf("%s %d", number, &score) == 2) count--; printf("%d\n", score); }
- 529 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:33:08 ]
- >>479
#include <stdio.h> #include <math.h> int main() { int n; printf(" n n*n 1/n sqrt(n) n∧(3/1)\n"); for (n=1 ; n<=25 ; n++) { printf("%2d ",n); printf("%3d ",n*n); printf("%.5f ",(float)1/n); printf("%.5f ",sqrt((float)n)); printf("%.5f ",powf((float)n, (float)1/3)); printf("\n"); } return 0; }
- 530 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 00:31:07 ]
- >>474 課題1-1
99999 以下の整数の引数をとり、受験番号を C00001 から順に C00002 のように引数の数だけ発生させ、 さらに各受験番号に対して乱数で発生させた点数を組み合わせたテストファイルを作るプログラムを作りなさい。 但し、点数は、 0 点から 5 点までを乱数で 20 回発生させ和を取ることで求めなさい。 引数のとりかた、乱数の発生の仕方は付録を参照のこと。 void list(int count) { int number, score, i; for (number = 1; number <= count; number++) { score = 0; for (i = 0; i < 20; i++) score += myrand(); printf("C%05d %d\n", number, score); } }
- 531 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:24:00 ]
- >>479
当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。 C++ の書式設定を駆使しています。3 項演算子をネストさせています。 ので、宿題の答えとしては難ありですが、細かいところまで題意を満たす ためには致し方なかったのでした。すみません。 詳しめの参考書を見てください。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt
- 532 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:36:26 ]
- [1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): unsigned long long 型の x, y に対して x^2 を y で割った余り計算しなさい。 ただし x^2 がオーバーフローする 可能性があることに注意すること。 [3] 環境 [3.1] OS: Windows (Cygwin) [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: どちらでも可 [4] 期限: 16日まで [5] その他の制限: 特にありません おねがいします
- 533 名前:デフォルトの名無しさん [2007/11/15(木) 01:57:19 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5264.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5265.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: C [4] 期限: 11/16 pm5:00 [5] その他の制限: 特にありません。 よろしくお願いします。
- 534 名前:デフォルトの名無しさん [2007/11/15(木) 02:14:51 ]
- メイン関数において、2つの放物線
y=ax2+bx+c y=px2+qx+r の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。 関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場 合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が 有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数 から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個 存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。 よろしくお願いします。。
- 535 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:48:36 ]
- 移項して判別式で判定すりゃいいんだから、>>433のを適当に変えればいいだけだろ。
- 536 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:54:15 ]
- >>534
あの、>>460 に問題がありましたら何がまずいのか教えてください。
- 537 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:58:19 ]
- >>474 課題1-3
点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。 プログラムにおいて点数表の容量を制限してはいけない。 コンピュータのメモリが許す限り大きな点数表も表示できること。 int compare(const char *a, const char *b) { return atoi(b + 7) - atoi(a + 7); } void rank(void) { int size, count; char *buffer; fseek(stdin, 0L, SEEK_END); size = 10; count = ftell(stdin) / (size + 1); buffer = (char *)calloc(count, size); fseek(stdin, 0L, SEEK_SET); fread(buffer, size, count, stdin); qsort(buffer, count, size, compare); fwrite(buffer, size, count, stdout); free(buffer); }
- 538 名前:デフォルトの名無しさん [2007/11/15(木) 07:02:14 ]
- >>532
#include <iostream> using namespace std; #define N 4294967295 // 2^32 - 1 unsigned int amari(unsigned int x, unsigned int y){ int k=x-y; if(k<0)k=-k; if(x>k)x=k; k=N/x; int p=x/k,l=x%k; return ((x*k)%y)*p+((x*l)%y)%y;} main(){ int x=97,y=123; cout<<amari(x,y)<<" "<<(x*x)%y; }
- 539 名前:538 [2007/11/15(木) 07:28:16 ]
- バグがあったよ
- 540 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 07:44:16 ]
- あと型が違うんじゃね?
- 541 名前:デフォルトの名無しさん [2007/11/15(木) 10:01:04 ]
- >>494
07KC189
- 542 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 11:57:29 ]
- 画像の指定範囲を決めてそこだけを出力するプログラム教えてください。
- 543 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:21:54 ]
- [1] 授業単元: 確率論
[2] 問題文: ここに書きました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5266.txt 図はこうです toku.xdisc.net/cgi/up/vcc/nm13048.jpg.html [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月15日24:00 [5] その他の制限: お願いします。
- 544 名前:538 [2007/11/15(木) 13:48:07 ]
- #include <iostream>
using namespace std; typedef unsigned long int Nsu; Nsu N; Nsu amari(Nsu x, Nsu y){ int a; x%=y; a=x-y; if(a<0)a=-a; if(x>a)x=a; a=N/x; int p=x/a, q=x%a , r=0; for(int i=0;i<p;i++){r+=(a*x)%y; r%=y;} r+=(q*x)%y; r%=y; return r;} main(){ N=-1; Nsu x,y; x=(1<<16)-17; y=(1<<14)-3; cout<<amari(x,y)<<" "<<(x*x)%y; }
- 545 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:14:41 ]
- >>541
存在しない学籍書いてるんじゃねーよ 04kc〜06kcのどれかだろ? 2年〜4年のどれかなんだから
- 546 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 16:45:36 ]
- >>543
とりあえず「重き」ってなんなんだ? 「重さ」だよな…… それともオレの知らない専門的な言い回しなのか……
- 547 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 16:51:37 ]
- >>543
>>257 >>258 でダメな理由は?
- 548 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:04:22 ]
- 重みじゃないの?
- 549 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:07:26 ]
- >>544
x%y が0の場合にゼロ除算
- 550 名前:デフォルトの名無し [2007/11/15(木) 17:27:31 ]
- 1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 文字列を正数に変換せよ。 入力が空の場合は処理を終了。「入力されていません」と表示。 入力の最大入力桁数は4バイトとし、桁あふれに対して「4文字で入力してください」と表示。 入力が半角数字以外に対しては「半角数字以外入力できません」と表示。 入力がゼロの場合は「0は入力できません」と表示。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: C言語 [4] 期限: 今週中にお願いします。 [5] その他の制限: 特にありません
- 551 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:37:23 ]
- >>550
突っ込むべき部分があるな 入力の最大入力桁数は四バイト? それとも四文字? -129のような文字列は129に変換? 129を変換したあとの数字は、1290? それとも0129?
- 552 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 18:56:30 ]
- >>550
#include<stdio.h> #include<string.h> #include<ctype.h> int get_value(void){ char buf[4+1+1]; // 4文字オーバーチェック + 終端 \0 int i, value=0, buflen; fgets(buf, sizeof(buf), stdin); buflen=strlen(buf); if(buf[buflen-1]=='\n') buf[--buflen]='\0'; if(buflen<=0){ puts("入力されていません"); return -1; } if(buflen>4){ puts("4文字以内で入力してください"); return -1; } for(i=0;buf[i];i++){ if(!isdigit(buf[i])){ puts("半角数字以外入力できません"); return -1; } value=value*10+buf[i]-'0'; } if(value==0) puts("0は入力できません"); return value; } int main(void){ int value; value=get_value(); if(value>0) printf("\n%d\n", value); return 0; }
- 553 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 19:41:05 ]
- [1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt サンプルプログラムは、窓口が1個で,行列が窓口の前にできる場合に,時間と共に窓口の前にできる行列の様子を調べるものである. (1)サンプルプログラム内の乱数処理を srand関数とrand関数を使用するように書き換えなさい。 (2)参考プログラムを元に,パラメータs, q, aを構造体のメンバ として扱うプログラムBに変更しなさい. (3)作成したプログラムを変更し,窓口が2個の場合にも(すなわち1個または2個の場合に)対応できるようにしなさい。 このとき,窓口の個数(1または2)もパラメータLやM, シミュレーション時間と同様に入力して指定できるようにしなさい. なお,新しく到着した客は,最も短い行列(待っている人が少ない窓口)に並ぶものとする. 全ての窓口の行列が同じ長さの場合には,一様な確率 (窓口が2個の場合は1/2の確率)で並ぶ窓口を決定するものとする. (4)窓口が3個以上にも対応できるようにしなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C [4] 期限: 明日までです… [5] その他の制限: 特に無いと思います
- 554 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 20:10:23 ]
- >>547
実際はね、重きじゃなくて入力データなんです。 入力データ(配列でいうとdata[50][5])が移動間を動く感じなんですけど 各状態にデータがあって、その入力データを各状態のデータによって 計算して出された値を各移動確率とかけるというわけなんですけど。 で書いてくださったプログラムにおいて、 for(cnt=0;cnt<50;cnt++){それを50回 for(i=0;i<7;i++)cal_next_gs(list[i]);は7つの状態間で1回の移動につき確率計算 } ってのはわかるんです。1次元配列として引数として渡せば できるのかなーと今思いました。 for(cnt=0;cnt<50;cnt++){それを50回 for(i=0;i<7;i++)cal_next_gs(list[i],data[cnt]);は7つの状態間で1回の移動につき確率計算 } void cal_next_gs(struct gstate *gs,float data[5]) { //計算して移動確率を計算 } でいけそうな感じがします。
- 555 名前:デフォルトの名無しさん [2007/11/15(木) 21:27:17 ]
- >>527
ありがとうございました。
- 556 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:38:48 ]
- >>554
何をいいたいのか、いまいち分からないんだが、 どんな入力に対してどんな出力が欲しいの? 電気回路上の電流のシミュレーション?
- 557 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:58:18 ]
- 入力に対して隠れマルコフモデル(HMM)を使って確率を出すんですけど、
この例では3状態のHMMと2状態のHMMを使って最終的にendにたどりつくとこの 状態の確率が出力値となるんです。 で1つの移動に対して入力1フレームを正規分布によって評価し確率を出す。 その正規分布をHMMで評価するんです。 そのHMMには平均分散、移動確率とあるんですけど、 平均分散を正規分布で用いて確率をだして、移動確率をかけて 最終的な移動の確率となるんです。 前につくってもらったのが移動確率でのみの計算でした
- 558 名前:デフォルトの名無しさん [2007/11/15(木) 22:01:52 ]
- 神経衰弱を行うゲームを作成すること。
ただし、カードは52枚全て使用し、絵柄の 区別は無いものとする。 このプログラムをお願いします。(^_^)
- 559 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:02:55 ]
- すみません、どなたか>>489をお願いします。
自分でもあつかましいと承知しているのですが、 どうにも分からないので・・・。 コンパイラ名はVS2005のようです。 よろしくお願いします。
- 560 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:12:59 ]
- 557ですけど
頼んだのは移動してくる確率が2つだったらグリッドで計算できたんですけど 3つの場合どうすればいいのかわからなくて。 しかも下のやつも計算しなくてはならなくて。 なので質問させていただきました
- 561 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:30:13 ]
- >>543
>この(startから状態1への移動確率)X(重き)と >(状態1の状態確率)X(状態1から状態1への移動確率)X(重き)と、(状態11の状態確率)X(状態11 >から状態1への移動確率)X(重き)の和が状態1の状態確率となります。 状態1ってループしてるけど単純にこれでいいの? (状態1の状態確率)X(状態1から状態1への移動確率)X(状態1から状態1への移動確率)X(重き) ... とかは考えなくてもよし?
- 562 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:36:35 ]
- >>543
>>246 の問題だと矢印にくっつく数値(状態遷移確率)が固定だったのを 時間(移動回数)によって矢印にくっつく数値(状態遷移確率)を変化させたいと言う事でいい?
- 563 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:40:42 ]
- >>561
考えなくていいです。 >>562 そうです。 実際は入力に対して各HMMの1つの状態の平均分散から 正規分布により出力確率を出してそのHMMから移動確率を出して 確率X移動確率なんですけど 簡単のために、出力確率を重きとしてるわけです。
- 564 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:43:05 ]
- 移動確率を出す関数だけ。
enum states { START, FIRST, SECON, THIRD, TENTH, ELEVE, E_N_D }; enum states movProbMap( enum states from, enum states to ) { return from == START ? (to == FIRST ? 0.5 : to == TENTH ? 0.5 : 0.0) : from == FIRST ? (to == FIRST ? 0.6 : to == SECON ? 0.3 : to == ELEVE ? 0.1 : 0.0) : from == SECON ? (to == SECON ? 0.7 : to == THIRD ? 0.3 : 0.0) : from == THIRD ? (to == THIRD ? 0.8 : to == E_N_D ? 0.2 : 0.0) : from == TENTH ? (to == TENTH ? 0.6 : to == ELEVE ? 0.4 : 0.0) : from == ELEVE ? (to == ELEVE ? 0.7 : to == FIRST ? 0.2 : to == E_N_D ? 0.1 : 0.0) : 0.0; }
- 565 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:44:10 ]
- 激しく無意味だな。スマン無視してくれ。
- 566 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:47:07 ]
- >>564
これは一体何でしょう? 実数を返したいんじゃないの???
- 567 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:55:57 ]
- enum states -> double
で。
- 568 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:10:49 ]
- >>543
使い方は data.txt をリダイレクトするだけ lzh 内のファイル名間違えたけど気にしない ans478 < data.txt ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5268.lzh
- 569 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:32:51 ]
- >>568
ありがたいんですけど これちょっと使いかたわからなくて。 gcc ans478.cして実行のときになにか入力しないといけないんですか?
- 570 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:35:27 ]
- 本来なら
ans478 と打って実行するところを ans478 < data.txt のようにしてdata.txtを標準入力にリダイレクト
- 571 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:36:42 ]
- >>489
#include<stdio.h> int main(void){ int i, num, max=0; for(i=20071114;i<=20071114+6-1;i++){ scanf("%d", &num); if(num>max) max=num; } printf("%d\n", max); return 0; }
- 572 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:39:49 ]
- >>570
できました。。。 さっきできなかったのに。 ありがとうございます。 自分で作りなおしてから できなかったらこれも試してみます
|

|