C/C++の宿題片付けま ..
75:デフォルトの名無しさん
09/05/21 23:31:41
>>43
// gcc --input-charset=cp932 --exec-charset=cp932
#include <stdio.h>
int main() {
int i;
float daikei[][3] = {
0,2,2,
2,4,2,
4,6,2,
6,8,2,
}, menseki, goukei = 0.0;
for(i=0; i<sizeof(daikei)/sizeof(daikei[0]); i++) {
menseki = (daikei[i][0]*daikei[i][0] + daikei[i][1]*daikei[i][1]) * daikei[i][2] / 2.0f;
goukei += menseki;
printf("(%d)a=%.0f^2 b=%.0f^2 h=%.0f 面積=%.0f\n",
i, daikei[i][0], daikei[i][1], daikei[i][2], menseki);
}
printf("合計面積=%.0f", goukei);
return 0;
}
76:デフォルトの名無しさん
09/05/21 23:40:32
>>59です。
>>61さん、ありがとうございます。
77:デフォルトの名無しさん
09/05/21 23:41:30
>>63
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ついでに自由課題も。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
中部大学工学部情報工学科の岡崎明彦教授の講義ね。ぐぐったらすぐ出てきた。
78:デフォルトの名無しさん
09/05/21 23:46:59
>>63へ
>>68->>71は19年度の同じような課題で教授が殆ど作ったやつ。
79:デフォルトの名無しさん
09/05/21 23:50:24
>>77
ほんとだC言語応用 マクローリン展開でみつかった。
意外と簡単に見付かるんだね。
80:79
09/05/21 23:58:13
でも年代が違う問題が出てくるんやね。
81:デフォルトの名無しさん
09/05/22 00:00:12
スレチだが
マクローリン展開って2radぐらいまでならそんなに誤差無いんだな
意外だった
82:デフォルトの名無しさん
09/05/22 00:09:13
膜ろりン展開
83:デフォルトの名無しさん
09/05/22 00:10:09
>>79
「sinxの近似値を5項程度によるマクローリン展開で求める関数」でぐぐったら
2つめに今年のが出てきた
84:デフォルトの名無しさん
09/05/22 00:13:21
>>81
浮動小数点は積み残し誤差があるから計算して出たそれぞれの
項をソートして小さい方から順に足した方が誤差が少ないぞ
やってみ
85:デフォルトの名無しさん
09/05/22 00:16:01
そんな手間かけるならsin(x)使うわ
欲しいのは高速動作だ
86:デフォルトの名無しさん
09/05/22 00:19:28
いやそりゃそうだが
x86FPUにもFSINあるしな
ここは宿題スレだからマクローリン展開をコンピューターに
やらせてみましょうって事なんじゃない?
87:デフォルトの名無しさん
09/05/22 00:26:38
>>63は>>74と>>77どっちを使うんだろうね。
自分としては>>77の方が分かりやすいけど。
88:デフォルトの名無しさん
09/05/22 02:37:41
>>62
お手軽にするならゲームツクール系でいいと思う
89:デフォルトの名無しさん
09/05/22 02:53:17
>>87
メイン関数のループが迂遠な感じだな、77のは。
90:デフォルトの名無しさん
09/05/22 03:02:10
>>65 >できるだけ簡単なもの <それなりに>
#include <stdio.h>
void max_min(int *data, int num, int *max, int *min){
int lmax = 0, lmin = 100;
for(num--; num >= 0; num--) {
if(data[num] > lmax) lmax = data[num];
if(data[num] < lmin) lmin = data[num];
}
*max = lmax;
*min = lmin;
}
int main() {
int i, max, min, data[10];
for(i=0; i<10; i++) {
printf("%d:",i+1);
if(scanf("%d", &data[i]) != 1) {
scanf("%*s"); i--; continue;
}
if(data[i] == -1) break;
if(data[i] < 0 || data[i] > 100) i--;
}
max_min(data, i, &max, &min);
printf("max=%d min=%d\n", max, min);
return 0;
}
91:kenco
09/05/22 03:06:33
[1] 授業単元:数値計算法
[2] 問題文(含コード&リンク):非線型方程式 f(x)=x^n-a=0 を考える。nは学生番号の下一桁の数字に2を加えたもの。aは誕生日の西暦の下2桁とする。
f(x)=0の実数解の近似値xを以下の条件を満足させる精度でニュートン法を用いて求めよ。
|f(x)-0|<1.0*10^(-8)
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: C-Compiler
[3.3] 言語: どちらでも可
[4] 期限: 23日まで
[5] その他の制限: なるべく簡単なもので作ってください。
92:デフォルトの名無しさん
09/05/22 03:30:54
>>44
URLリンク(kansai2channeler.hp.infoseek.co.jp)
93:デフォルトの名無しさん
09/05/22 04:21:56
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
行列A={{0,1,2},{3,4,5},{6,7,8}}
行列B={{100,200,300},{400,500,600},{700,800,900}}
のとき、A+Bを表示するプログラムを作れ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月25日
[5] その他の制限: 初心者に分かりやすいようにお願いします
94:デフォルトの名無しさん
09/05/22 04:59:18
>>91
#define N (8.0 + 2.0)
#define A 82.0
#define EPS 1e-08
#define LIMIT 50 /* 計算打ち切り回数 */
#include <stdio.h>
#include <math.h>
double f(double x)
{
return pow(x, N) - A;
}
double g(double x)
{
return N * pow(x, N - 1.0);
}
int main(void)
{
double x = 1.0, dx;
int i;
for (i = 0; i < LIMIT; i++) {
dx = x;
x -= f(x) / g(x);
if (fabs(x - dx) < fabs(dx) * EPS) {
printf("解 = %.8f\n", x);
break;
}
}
if (i == LIMIT)
printf("収束しませんでした\n");
return 0;
}
95:デフォルトの名無しさん
09/05/22 05:22:17
>>93
URLリンク(kansai2channeler.hp.infoseek.co.jp)
96:44
09/05/22 10:16:33
>>92
ありがとうございます。
97:デフォルトの名無しさん
09/05/22 14:46:03
[1] 授業単元:C言語プログラミング
[2] 問題文:10以上の種類の品物(果物など)を、その数が多い順にソートするプログラムを
「バブルソート」を用いて作成せよ。
ソート結果の表示にはどの品物が何個かも表示させること。
品物の種類・個数は任意とするが、なるべくばらけさせること。
品物が同じ個数だった場合の順番は特に指定しない。
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限:2009/5/25まで
[5] その他の制限:特に無し
98:デフォルトの名無しさん
09/05/22 16:04:42
>>97
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define numberof(s) (sizeof(s) / sizeof(s[0]))
typedef struct { char *name; int number;} ITEM;
ITEM item[] = {
{"めんたい味", 0},{"コーンポタージュ味", 0},{"なっとう味", 0},{"チーズ味", 0},{"テリヤキバーガー味", 0},
{"サラミ味", 0},{"やさいサラダ味", 0},{"チキンカレー味", 0},{"とんかつソース味", 0},{"エビマヨネーズ味", 0},
{"たこ焼味", 0},{"チョコレート味", 0},{"キャラメル味", 0},{"ココア味", 0},{"ぶたキムチ味", 0},{"牛タン塩味", 0}
};
int main()
{
int i, j;
srand(time(NULL));
for (i = 0; i < numberof(item); i++) {
item[i].number = (int)((rand() / ((double)RAND_MAX+1.0f)) * 99) + 1; printf("%s, %d\n",item[i].name,item[i].number);}
printf("---------------------------------------------------\n");
for (i = 0; i < numberof(item) - 1; i++) {
for (j = numberof(item) - 1; j > i; j--) {
if (item[j].number > item[j - 1].number) {ITEM tmp = item[j]; item[j] = item[j - 1]; item[j - 1] = tmp;}
}
}
for (i = 0; i < numberof(item); i++) printf("%s, %d\n",item[i].name,item[i].number);
return 0;
}
99:デフォルトの名無しさん
09/05/22 17:57:00
>>98
うまい棒?
100:デフォルトの名無しさん
09/05/22 19:30:11
10種類以上の果物名、思い付かん
101:デフォルトの名無しさん
09/05/22 19:35:54
>>100
リンゴの品種名だけでおk
102:デフォルトの名無しさん
09/05/22 20:12:26
アルプス乙女,ぐんま名月,ゴールデンデリシャス,シナノスイート,ジョナゴールド,
ジョナゴールド,つがる,デリシャス,ふじ,旭,王林,紅玉,国光,秋映,祝,
世界一,千秋,北斗,陽光,陸奥
20種類、ごく一部を除いて、どんなリンゴかはわからないw
103:デフォルトの名無しさん
09/05/22 20:32:15
ジョナゴールドが2個あるんすけど。
104:デフォルトの名無しさん
09/05/22 21:00:02
>ジョナゴールドが2個あるんすけど。
見逃した。済まない。
ー1 +7
さんさ,高嶺,スターキングデリシャス,ハックナイン,新世界,藤牧,シナノレッド
105:デフォルトの名無しさん
09/05/22 21:27:11
クイックソートなんですが
106:デフォルトの名無しさん
09/05/22 21:30:45
>>105
は?
107:デフォルトの名無しさん
09/05/22 21:36:31
>>105
依頼はバブルソートとあるが、
>>98はクイックソートなのか?
108:デフォルトの名無しさん
09/05/22 21:37:18
ご参考に
URLリンク(www.bohyoh.com)
109:デフォルトの名無しさん
09/05/22 22:25:48
>>98はバブルソートじゃないか
何を寝ぼけた事を言ってんの?
110:デフォルトの名無しさん
09/05/22 23:06:33
[1] 授業単元:
ヒューマンインターフェースとプログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows/Linux/等々)
Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
Visual C++ 2008 Express Edition
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5/25
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
なし
よろしくおねがいします。具体的にあげられてる修正ポイントだけでもかまいません。
111:デフォルトの名無しさん
09/05/22 23:15:47
猫でもわかるキー入力www
112:デフォルトの名無しさん
09/05/22 23:20:32
>>110
気づいた一点だけ。
そこまでコンソールのgetsにこだわる必要は無いと思う。
たとえばトリガーキーを押すとモードメニューに入って、モードを選んで、開始。
そんな感じにならないかねぇ。
MYGETSがちょっと不細工に感じるのはまちがってるかなぁ。。。
あとプロポーショナルフォントを使うのは筋違いだと思う。
こんなとこかな。
113:デフォルトの名無しさん
09/05/23 00:03:44
MyGetsに入る前にその前の入力メッセージは棄てなあかんね。
WM_DESTROYでfpのnullチェックしてないので、モードに入る前に終了すると例外。
WM_QUITを受け取ったGetMessageは0を返すので、MyGetsはTRUEを返し、再びメッセージ待機(Windowがないので終われない)。
基本的に待機するような処理は別スレッドに作るべき。
また待機スレッドのSleepは本物のSleepではなくEventをWaitし、終了要求などではそのEventをシグナル状態にする。
じゃないとSleepが完了するまで終われなくなる。
114:113
09/05/23 00:08:34
>MyGetsに入る前にその前の入力メッセージは棄てなあかんね。
ちょっと書き方おかしかったかも。要は反応待ちに入る以前のキー押下は棄てないかんってこと。
115:デフォルトの名無しさん
09/05/23 00:24:38
[1] 授業単元:
[2] 問題文
今テキストファイルAが1つとBが10個あるとする。
Aには
haru
natsu
aki
fuyu
とかかれ
Bにはそれぞれのテキストに以下のような文字列がかかれている
wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo
iouaiojoiajwioejio121j3oi1j2iojlajia
これらをまとめ
テキストCに
aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行]
natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行]
になるようなプログラムをかけ
ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。
[3] 環境 [3.1] OS:linux
[3.2] gcc
[3.3 C
[4] 期限: 5/23
116:デフォルトの名無しさん
09/05/23 00:27:50
>>115
問題文が意味不明
まとめ方のルールを明確にしないと誰も解けないよ
117:デフォルトの名無しさん
09/05/23 00:46:41
テキストCに
haru\tBのテキスト1つ目の中身\n
natsu\tBのテキスト2つ目の中身\n
aki\tBのテキスト3つ目の中身\n
のように書き込んでほしいのですが。
Bのテキストが非常に長いんです。1テキストファイル20kバイトくらいでして
118:デフォルトの名無しさん
09/05/23 00:55:31
>>117
Bのテキストファイルが10個ある、と言うことなら、B01〜B10ってしていいかい?
Aのテキスト1行目と、B01の全体をタブで繋いで1行にし、Cに出力。
Aのテキスト2行目と、B02の全体をタブで繋いで1行にし、Cに追記。
これをB10まで繰り返す。これであってる?
119:デフォルトの名無しさん
09/05/23 00:59:32
要はBの1行がバッファサイズをオーバーするくらい長いってことじゃん?
120:デフォルトの名無しさん
09/05/23 01:02:08
テキストのサイズはそれほど重要ではないよ。
要は、何をして欲しいかを明確にする事。
121:デフォルトの名無しさん
09/05/23 01:05:28
>>115
後、期限が今日なら、締切時間も書いておいた方が良いかな。
122:デフォルトの名無しさん
09/05/23 01:12:37
>>117
だ〜か〜ら〜、〜のようにっていう表現は問題文にならないって。
テキストAとやらには4行しかないのにテキストBとやらは延べ10行あるんだろ?
5行目以降はどう纏めるんだい?
123:デフォルトの名無しさん
09/05/23 01:16:31
>>110
精度を上げるには「timeBeginPeriod〜timeEndPeriod」や「QueryPerformanceCounter」を使う手がある。
ビジーループにしてGetAsyncKeyStateでキー状態を検知すればメッセージ処理のオーバーヘッドは避けられると思う。
スレッドの優先度を上げるという方法もあるといえばある。
124:デフォルトの名無しさん
09/05/23 01:18:33
>>118
そうです。
Bのテキストは長いんですけど1行です。
一番最後に改行がはいるだけです。
125:デフォルトの名無しさん
09/05/23 01:25:41
>>124
ファイル名は適当に決めておいていいかい?
>>122の指摘する危惧だけど、Aには10行データがある前提でいいかい?
126:デフォルトの名無しさん
09/05/23 01:45:56
Aには4行としまして
Bは1行に10行分くらい文字列がならんでるとおもってください。
で、Bは4ファイルあるとすればちょうどいいかと。
127:デフォルトの名無しさん
09/05/23 01:53:11
>>126
なんというか、まあ、久しぶりに絶句させてもらったよ。
課題が出されたんだよな?
それを一字一句変えずに、「全部」書けよ。
お前の頭の中ではちょうどいいかも知れんが、
お前が今までのやり取りではっきりさせたのは
ファイルAとやらが4行あるってことだけだぞ?
128:デフォルトの名無しさん
09/05/23 01:55:02
なんか杜撰な課題だな。ちゃんと投げられないだけか?
129:デフォルトの名無しさん
09/05/23 01:56:48
Bのテキストファイルが普通にコピーできないほどの長さだから
説明しにくい。
130:デフォルトの名無しさん
09/05/23 01:58:53
Bの長さはどうとにでもなってさっきから言ってるんだからから、
そこを無視して説明しろよ氏ね。
131:デフォルトの名無しさん
09/05/23 01:59:10
20KBで?
132:デフォルトの名無しさん
09/05/23 02:03:59
>>129
は?お前の説明は要らない。
課題をそのまま書き出せよ。
あとな、1行の長さなんてどうだって良いんだよ。
「一行の長さは不定です」
「あ、っそ」
で済むことなんだよ。
重要なのは、
「プログラムの実行前にどんなデータがあって」
「プログラムの実行後にどんなデータがあるか」
ってことなんだよ。
ファイルAには>>115にあるように4行分のデータがある。
これは分かった。
んでファイルBってのはなんだよ?
133:デフォルトの名無しさん
09/05/23 02:12:12
1行にコピーできないくらいの長さの文字列がある
134:デフォルトの名無しさん
09/05/23 02:12:46
ダメだこりゃ
135:デフォルトの名無しさん
09/05/23 02:17:53
何だ、Bは4つになったのかw
>>126
1行に10行分文字列があるって意味がわからんが。
2000文字位あると勝手に理解するけどいいね。
ソースをコンパイルして実行する環境はあるのか?
136:132
09/05/23 02:19:24
>>134
俺は>>133は>>115でないって信じたいw
>>133
とりあえず、問題を明らかにしようか。
ファイルBは何個か存在する。
だからここでは後ろに番号をつけるとする。
例えば、ファイルBが3つある場合、
ファイルBのそれぞれをB1,B2,B3としよう。
そして、ファイルBの行番号をアンダースコアの後に数字をつけることで表そう。
例えばB1の1行目はB1_1、2行目はB1_2となる。
ついでにファイルAの一行目はA_1と表すようにしよう。
んで、ここからが本題。
ファイルCを作るにあたって、
A_1と同じ行になるファイルBの行は何か?選択肢から選べ
選択肢1:
A_1 B1_1
A_1 B2_1
A_1 B3_1
・・・
A_1 Bi_1
選択肢2:
A_1 B1_1
A_1 B1_2
A_1 B1_3
・・・
A_1 B1_j
選択肢3:上二つは違います。
137:デフォルトの名無しさん
09/05/23 02:20:33
ツンデレだねぇ。なんか後出しがあると思うけど
138:デフォルトの名無しさん
09/05/23 02:26:57
>>115
今の内に課題の条件をキチンと説明しておかないと
誰かが早とちりしてプログラムを書いてしまって後出しで
条件を付けても誰も相手にしてくれないかもしれんぞ
今までそういう事が何回もあった
後出し条件というのは相当嫌われる
139:デフォルトの名無しさん
09/05/23 02:28:31
Bはこういうファイルです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
140:デフォルトの名無しさん
09/05/23 02:30:44
短いファイルでこれくらいです
これが60kバイトくらいです
最大で778kバイトくらいまで
141:デフォルトの名無しさん
09/05/23 02:34:18
>>140
だ〜か〜ら、長さはどうだっていい。
ファイルBは全部でいくつある?
ファイルB全ては1行しかないんだな?
142:デフォルトの名無しさん
09/05/23 02:34:52
そうです。
143:デフォルトの名無しさん
09/05/23 02:36:16
2行目にも答えろよwwwwwwww
144:デフォルトの名無しさん
09/05/23 02:37:17
っていうか、正確に言うとAの行数とBのファイル数は一致してるのか?
一致してるなら可変か固定か?
固定なら何個だ?
145:デフォルトの名無しさん
09/05/23 02:38:15
すいませんけど
>>124 >>126
146:デフォルトの名無しさん
09/05/23 02:40:17
これって釣りだよね?
と、思いたい。割と本気で。
147:デフォルトの名無しさん
09/05/23 02:40:56
もういいわ
148:デフォルトの名無しさん
09/05/23 02:43:13
>>139
Bが10個あると書いてあるのになんで一つだけなんだ?
10個ともまとめて貼れよ
Aはわかったらか
149:デフォルトの名無しさん
09/05/23 02:49:14
エスパーするとAの行数4つでBのファイル数が4つ。
Bは全て1行(改行一つ)だが、>>115主観で言うと通常の1行の10倍あるよ。
まぁ、エスパーするだけして違ってたらイヤだから手はつけんが。
150:デフォルトの名無しさん
09/05/23 02:52:37
>>145
これを試してみてくれ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ファイル名は"A","B01"〜"B04","C"としているが、適切な名前にするか、
実行時に対象ファイルをその名前にしてくれ。
で、要求とどう違うか書いてくれ。
151:デフォルトの名無しさん
09/05/23 02:57:17
すいません。Bを最後読み込み表示してAの単語をいれてを4回まわしたらいいだけでしたね
152:デフォルトの名無しさん
09/05/23 02:59:48
>>151
落ち着いて、相手に分かる言葉で頼む。
153:デフォルトの名無しさん
09/05/23 03:04:06
>>115
1つだけ聞かせてくれ。
これは、学校の講義で宿題として出されたものなのか?
自分がこういうことをやりたいだけなのか?
154:デフォルトの名無しさん
09/05/23 03:04:28
Aの単語表示\tBのファイルの全ての文字を読み込んで表示
を4回繰り返してテキストにとる
155:デフォルトの名無しさん
09/05/23 03:07:07
つまりBは10個あると書いてあるけど一個しかないんだね
156:デフォルトの名無しさん
09/05/23 03:14:53
>>145
もうあれだ、system関数でシェルスクリプト呼んじゃえ。
cat B0[1-4] | paste A - > C
でお望みのものができるから。
157:デフォルトの名無しさん
09/05/23 04:03:23
>>75さんありがとうございます。
158:デフォルトの名無しさん
09/05/23 04:06:05
>>95 ありがとうございました
この問題もわからないので教えてください
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
(1)[0,1]の一様乱数x,yを発生させるプログラムを作れ
(2)[0,1]の一様乱数x,yを発生させ、x^2+y^2<1となる確立を求めろ
(一様乱数を発生させる試行を繰り返し、(上式を満たす回数)/(試行回数)から確立を求める)
またπの数値を求めろ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月25日
宜しくお願いします
159:デフォルトの名無しさん
09/05/23 08:37:50
>>158
URLリンク(kansai2channeler.hp.infoseek.co.jp)
標準関数std::rand()はやや性能が悪いため
コンピュータ・アルゴリズム事典(奥村晴彦著)より乱数の改良を
行うようにした
160:デフォルトの名無しさん
09/05/23 12:02:48
>>059 (1) 提出期限過ぎてるけど、2整数か?の突っ込みは無しで。
#include <stdio.h>
int main() {
int n, c;
printf("2進数を1つ以上入力してください:最後は1000\n");
do {
for(n = 0; ;) {
c = getchar();
if (c == '0' || c == '1') {
n <<= 1;
n |= (c == '1') ? 1 : 0; /* 1/0 を入力 */
} else if (c == EOF)
return 1;
else
break;
}
printf("%d ", n);
if(c == '\n') puts("");
} while(n != 0x8); /* 1000 (binary) */
return 0;
}
161:デフォルトの名無しさん
09/05/23 12:13:32
問題を誤読してる気がする。
162:デフォルトの名無しさん
09/05/23 12:19:46
[1] 授業単元: 情報リテラシー
[2] 問題文: 10から110までの乱数を100個作り、
同時ににアスキーコードで文字に変換して小文字だけを大文字にせよ
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: 富士通
[3.3] 言語:C言語
[4] 期限:[2009年05月26日h:16:30まで]
[5] その他の制限: アスキーコードやら何やら今一良く分かりません。
よろしくお願いします。
163:デフォルトの名無しさん
09/05/23 12:44:55
>>162 珍しいコンパイラwww
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main(void)
{
int i, x;
int max=110, min=10;
for(i=0;i<100;i++)
{
x=rand()%(max-min+1)+min;
if(islower(x)) x=toupper(x);
printf("%c", x);
}
return 0;
}
164:デフォルトの名無しさん
09/05/23 12:53:40
京大?
165:デフォルトの名無しさん
09/05/23 13:00:49
Faithless C compiler とか
>>163
種蒔かんで良いのか?
166:110
09/05/23 13:05:38
>>112
>>113
>>123
アドバイスありがとうございます。
課題中で具体的に示されてある修正点だけでいいので、どなたかプログラムを修正してもらえないでしょうか?
提出期限は明後日なのですが、実際にプログラムを動かして色々と考察を書かないといけないので・・
よろしくお願いしますm( _ _)m
167:デフォルトの名無しさん
09/05/23 13:20:58
後だしでなく必ず勝つ。
x=rand()/(RAND_MAX+1.0)*(max-min+1)+min;
168:デフォルトの名無しさん
09/05/23 17:07:20
>>151
// Usage: my_paste a1 b1 b2 b3 b4 ... > c1
// a: 行数はb(max)行 bの数と一致しない場合は途中まで処理する。
// b: 行数は1行のみ。改行で終わる。サイズは大きくても良い。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *inA, *inB, *outC = stdout;
char bufA[80]; // ファイルA読込用(1行を読込めるサイズが必要)
char bufB[256]; // ファイルB読込用(複数回に分けて読み込むので適当で良い)
int i, readsize;
if(argc < 3) return -1;
inA = fopen(argv[1], "r");
if (inA == NULL) { fprintf(stderr, "Can't open %s\n", argv[1]); exit(1); }
for (i = 0; i < argc-2; i++) {
inB = fopen(argv[i+2], "r");
if (inB == NULL) { fprintf(stderr, "Can't open %s\n", argv[i+2]); break; }
// Aを1行読込み、改行を取り除き、末尾にTabをつけてCに出力
if(fgets(bufA, sizeof(bufA), inA) == NULL) { fclose(inB); break; }
bufA[strlen(bufA) - 1] = 0;
fprintf(outC, "%s\t", bufA);
// Bをバッファサイズ単位で読込み、Cに追記する(必要な回数繰返す)
while ((readsize = fread(bufB, 1, sizeof(bufB), inB)) > 0) {
fwrite(bufB, 1, readsize, outC);
}
fclose(inB);
}
fclose(inA);
return 0;
}
169:デフォルトの名無しさん
09/05/23 17:18:34
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows/Linux/等々) linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[5] その他の制限
問題文のプログラムはls -aslを実行するプログラムである。これを参考にオプション -a -F -l -dを引数とした場合に
lsコマンドと同じ動作をするようなプログラムmylsを作れ。
・statシステムコールではなくlstatシステムコールを用いる
・オプションは-aといった引数に続けて指定、-aFl、-laといった複数オプションにも順不同に対応
・myls - aといった場合にはUsageを表示する
・UID、GIDは数字のままでいい
オプション指定にgetopt関数を使って
while((option = getopt(argc, argv, "aFld")) != -1){
switch (option){
case...
って書こうとしてるんだけど、case 'a':を書こうとした時に下にあるvoid関数のどの部分で
ls -aと同じ動作をしているのかが分からない。どなたかお願いします。
170:デフォルトの名無しさん
09/05/23 17:40:37
>>169 Part125_994
URLリンク(kansai2channeler.hp.infoseek.co.jp)
171:162
09/05/23 17:48:45
>>163
ありがとうございます。
172:デフォルトの名無しさん
09/05/23 18:58:19
1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月25日
[5] その他の制限:条件の判定にif(1.0!=(1.0+e))のようなif文を用いる
eはεのこと
よろしくお願いします。
173:デフォルトの名無しさん
09/05/23 19:13:25
[1]授業単元:アルゴリズム
[2]問題文(含コード&リンク)
問7-6
12x12のセルを持つ迷路がある。
スタートからゴールまでの最短経路を探したい。
(1)フローチャートを書け。
(2)実際に最短経路を調べ、表示するプログラムを書け。
ヒント
迷路は二次元配列で出来ている。
スタートやゴールのセル、壁のセルは最初は分からないようになっている。
手順としてはスタート地点の探索→経路の探索→バックトレースによる最短経路の探索、と行えばいい。
[3]:環境
[3.1]OS:XPsp2
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:5月26日8:00
[5]その他の制限:ソースコードにはしっかりコメントを記述すること、と言われました。
また迷路を生成するプログラムは無くても良いそうです。
C言語に関しては配列を学んだ所までです。(構造体やポインタはまだやってません。)
最悪フローチャートだけでも構いません。よろしくお願いします。
174:デフォルトの名無しさん
09/05/23 19:19:43
迷路探査は、ネット調べればソースごとあるぞ。
175:デフォルトの名無しさん
09/05/23 19:20:11
>>172 Part125_146
#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
double e1, e2;
unsigned int n;
e1 = 1.0;
printf("%.15e %.15e\n", DBL_MIN, DBL_EPSILON);
for(n=1; n<4294967295u; n++) {
e2 = e1 / 10.0;
if(1.0 == (1.0 + e2)) break;
e1 = e2;
}
printf("%.15e %d\n", e1, n-1);
}
176:173
09/05/23 19:35:12
>>174
言葉足らずで申し訳ありません……
迷路探索のソースはいくつか探すことが出来たのですが、
更に最短経路を探すものが見つからなくて今回お願いしました……
177:デフォルトの名無しさん
09/05/23 19:45:01
>>176
普通の迷路なら経路はただ一つなんじゃない?
経路が複数あるって、巡回路の最適解を求めるような問題?
178:173
09/05/23 19:57:20
>>177
上手く言えませんが壁の配置によっては経路が複数あります
袋小路とかも含めて総当たりで経路を調べる、のだとしたら巡回路の問題なのかもしれません
すみません、あまりよくわかってません……
179:デフォルトの名無しさん
09/05/23 20:01:59
>>173
再起関数で、深さをカウントしていって、144段(縦*横)以上になったら打ち切れば良いよ。
で手数をへらして検索。
180:デフォルトの名無しさん
09/05/23 20:48:53
>>173
最短経路が必要な場合は、2DRPGの最短移動アルゴリズムを使えばいいよ。
12x12の配列Aをワークとして用意する。型はintでいいや。
Aはすべて-1で初期化しておく。
まずスタート地点の決定。これは総当たりだから省略。
現在の探索深度を示すワーク int depth を用意して0に初期化する。
さて探索だけど、
1.スタート地点を現在値nowPositionに設定して、それに対応するAに0を代入する。
2.Aを全探索して、値がdepthになっているものがあれば、
その上下左右(斜めも移動できるなら斜めも)に移動可能かどうかを
調べる。移動可能で、かつその位置に対応するAが-1なら、その位置に
depth+1を書き込む。
移動可能な位置がゴールなら終了。4へ。
3.A全体を操作し終わるまで調べて、ひとつもdepthがなければ終了。ゴールには到達できない。
1つでもdepthがあれば、++depthして、2を繰り返す。
4.ここからが最短経路探索。
まずゴールには到達しているから、ゴールのdepthは分かってる。
そこから 上下左右のAの値が depth-1 になっている位置が最短経路。
複数ある場合の処理は好きなようにすればいいが、今回は単純に最初に
みつかった場所へ移動すればいいだろう。
5.これを繰り返してスタートに到達するまで続ける。なおスタートには必ず到達できる。
181:デフォルトの名無しさん
09/05/23 20:51:41
>>180
すまん
×1.スタート地点を現在値nowPositionに設定して、それに対応するAに0を代入する。
○1.スタート地点に対応するAに0を代入する。
182:デフォルトの名無しさん
09/05/23 20:55:26
ちなみに医学部の卒業研究見学したけど、怖かった。
犬を生きたまま仰向けで四肢を固定し、毛を剃って電気メスで腹を切る。
肋骨をノコギリで切って、心臓にいろいろな電気信号を与えて生体の反応を調べる。
もちろん全身麻酔はしてるけど、生体の反応を損ねないようにギリギリの量にしてるから、ピクピク動いてた。
183:デフォルトの名無しさん
09/05/23 21:12:16
>>179
>>173
>手順としてはスタート地点の探索→経路の探索→バックトレースによる最短経路の探索、と行えばいい。
を満たせなくね?
184:デフォルトの名無しさん
09/05/23 21:21:39
スタート地点も探索で見つけないといけない?
予め指定がないと、何処から始めたら良いものやら。
185:デフォルトの名無しさん
09/05/23 21:34:53
多分出題者が間違ってるんだろうが、バックトレースじゃなくてバックトラックだろうな。
186:デフォルトの名無しさん
09/05/23 21:35:20
流石にスタート地点は総当たりじゃないかなあ
そうでなかったらうーん
187:デフォルトの名無しさん
09/05/23 21:53:30
>>173
やってみた
基本的に >>180 の内容
URLリンク(kansai2channeler.hp.infoseek.co.jp)
188:デフォルトの名無しさん
09/05/23 22:19:36
>>187
「構造体やポインタはやってない」の制限にひっかかってるよw
189:185
09/05/23 22:22:45
ごめん。オレが勘違いしてたようだ。
バックトレースって、ゴールから逆にたどるって意味だなきっと。
>>180のやり方で良さそうだね。
190:187
09/05/23 22:24:36
>>173
>>188 の指摘を受けて >>187 の修正版
URLリンク(kansai2channeler.hp.infoseek.co.jp)
191:172
09/05/24 00:24:38
>>175
ありがとうございました
192:175
09/05/24 01:02:49
>>172 間違い。1.0!=1.0+εとなる最小のεではなかった。
#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
double e1, e2;
unsigned int n;
e1 = DBL_MIN;
printf("%.15e %.15e\n", DBL_MIN, DBL_EPSILON);
for(n=1; n<4294967295u; n++) {
e2 = e1 * 10;
if(1.0 != (1.0 + e2)) break;
e1 = e2;
}
printf("%.15e %d\n", e1, n-1);
}
193:172
09/05/24 11:56:33
>>175
>>192
訂正ありがとうございます
194:デフォルトの名無しさん
09/05/24 13:51:50
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語:C++
[4] 期限: 5月26日朝
[5] その他の制限:よろしくおねがいします
195:デフォルトの名無しさん
09/05/24 15:46:05
>>170
ありがとうございます。
196:デフォルトの名無しさん
09/05/24 16:44:53
>>194
なんでうpろだ使ったんだwwwww
197:デフォルトの名無しさん
09/05/24 16:57:13
wwwwwww
うけたwwwww
198:デフォルトの名無しさん
09/05/24 17:51:42
一行伝えるのに資源使いすぎw
199:デフォルトの名無しさん
09/05/24 18:47:24
宿題スレで分岐限定法の課題はあったでしょうか?
あったのであれば、教えてもらいたいです。
200:194 の心の声
09/05/24 19:38:49
>>196
ろだにあげておくとweb検索で引っかかりにくいし、
どういう問題を依頼したかスレのログに残らないから。
そんな事も分からないのに問題解けるのかよw
201:デフォルトの名無しさん
09/05/24 19:41:44
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5/26日午前9時
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタ配列まで習ってます
PCで規制が掛かっていたので携帯からの書き込みで申し訳ありません
202:デフォルトの名無しさん
09/05/24 19:57:33
>>201
課題1
my_sort_strings()は、どうやって並べ替える文字列を取得すれば良いですか?
203:デフォルトの名無しさん
09/05/24 20:08:03
引数を何にするのかも問題のうちだろ、jk
204:デフォルトの名無しさん
09/05/24 20:16:14
>>203
並べ替えの対象となるポインタ配列はmainのローカル変数
my_sort_strings()は引数なし
205:デフォルトの名無しさん
09/05/24 20:19:37
>>204
なんでそうなるんだ?
> 課題1
> 文字配列のソートを行って出力する以下のプログラムを完成させよ
> ただし、my_sort_stringsはポインタ配列とそのよう素数を因数として、
> 登録されている文字配列を昇順に並べ替える関数である。
因数は引数の間違いで
関数プロトタイプはこうなるだろ
void my_sort_strings(char **p,int n);
206:デフォルトの名無しさん
09/05/24 20:20:25
アホか、問題文では省略されてる引数を補って書くんだよw
207:デフォルトの名無しさん
09/05/24 20:21:23
わかるとは思うが206は204あてな
208:デフォルトの名無しさん
09/05/24 20:28:14
プロトタイプまで書かれていても、それを書き換えても良いのかね?
私なら、まず確認のためにどうするか聞くが。
209:デフォルトの名無しさん
09/05/24 20:38:21
そんなことより課題2を読む限り
課題1は先頭の一文字だけでソートするべきなのか?
210:デフォルトの名無しさん
09/05/24 20:39:24
みたいだね。
2見る前に書いたらmin_index()がまんま2の仕様になってたw
211:デフォルトの名無しさん
09/05/24 21:36:02
C++始めたばかりのド素人なんですが質問させてください。
「数直線上で4つの整数を入力して二種類の区画を指定し、その区画が重なるか否かを
判定するプログラム」
【出力結果例
区画A:2 5
区画B:1 3
重なる 】
となるプログラムを作成してみたんですが、↓のでいいでしょうか?
正確な問題文や細かい所は都合により今は見れないので、不明瞭な点もあるかと思いますが、
よければ添削お願いします。あと、使うのはIf文のみでお願いします。
212:デフォルトの名無しさん
09/05/24 21:36:47
#include <iostream>
using namespace std;
int main()
{
int x1,x2,x3,x4;
cout << "区画A:”;
cin >> x1 >> x2;
cout <<"区画B:”;
cin >> x3 >> x4;
If(x4<x1 && x3<x1 && x4<x2 && x3<x2){
cout<<"重ならない”<<endl;
If(x2<x3 && x1<x3 && x2<x4 && x1<x4){
cout<<"重ならない”<<endl;
}
else{
cout<<"重なる”<<endl;
}
return 0;
}
213:デフォルトの名無しさん
09/05/24 21:40:57
テンプレに沿っていないので正規の質問とはみなされていない故
オブジェクション。
これは断じてC言語やC++言語の問題ぢゃなく、論理(ロジック)
の問題。
214:デフォルトの名無しさん
09/05/24 21:51:31
If文は使えないな
215:デフォルトの名無しさん
09/05/24 21:53:12
失礼しました。
授業単元:基本プログラミング
問題文:>>211
OS:Windows
コンパイラ名:g++
言語:C++
期限:明日の午後6時まで
その他の制限:If文のみ使用
です!
ロジックも含めて、文法が合ってるかや無駄な部分がないかなどの意見も頂けたらと思い
質問させて頂きました、スレ違いでしたら申し訳ないありませんでしたorz
216:デフォルトの名無しさん
09/05/24 21:57:58
1の右端が2の左端より大きくて1の左端が2の右端より小さいとき重なる
217:デフォルトの名無しさん
09/05/24 22:13:18
>>216の言うとおり、重なるときを考えた方がわかりやすい
あと、本当にx1<x2,x3<x4になってるか入力値のチェックも欲しい
218:211
09/05/24 22:30:14
>>216>>217
なるほど…
そっちのやり方も今試してみたんですが、x1x2x3x4の値はそれぞれ自由なので、
例えば出力結果
区画A:15 6
区画B:7 −8
重なる
にもなるようにしないといけないので、整数の入力値の場合分けがかなり面倒になって
プログラムが>>211より長くなってしまうかなと思ってるんんですがどうでしょう…
といっても、>>211のプログラムとロジックで矛盾や穴などが無いかも自分では自信が無いのですが…
なにぶん今はプログラムを実行できる環境にいないので机上の空論状態なんですorz
219:デフォルトの名無しさん
09/05/24 22:36:28
>>211
区間の両端の数値は区間の中なのか外なのかが決まってないと
区間A:1 4
区間B:4 6
のとき重なっていると見なすかどうかが決められない。
区間A:1 1
区間B:1 6
も同様。両端の値は区間の中なの?外なの?
220:デフォルトの名無しさん
09/05/24 22:38:07
>>219
>>212だとどちらも重なるだろ
221:デフォルトの名無しさん
09/05/24 22:41:38
>>218
x1,x2とx3,x4をそれぞれ小さい順に並べ替える
if ((x3 < x1 && x1 < x4 || x3 < x2 && x2 < x4) ||
(x1 < x3 && x3 < x2 || x1 < x4 && x4 < x2)) {
重なっている
}
222:デフォルトの名無しさん
09/05/24 22:46:00
>>218
先に大小みて入れ替えるほうが簡潔でわかりやすいと思うが
if(x1 > x2) { int temp = x1; x1 = x2; x2 = temp;}
if(x3 > x4) { int temp = x3; x3 = x4; x4 = temp;}
if(x1 < x4 && x2 > x3) cout << "重なる";
else cout << "重ならない";
223:デフォルトの名無しさん
09/05/24 22:51:40
>>219
あ、言葉足らずでごめんなさい、端が点と点で重なってる場合も重なってるとみなされます
>>221
おお、なるほど
それだとif文も一つで済んでいいですね!
参考になりました、ありがとうございます!
224:デフォルトの名無しさん
09/05/24 22:56:53
>>222
ごめんなさい、まだ授業でtempを習ってないもので…
でも後学のためになりました、ありがとうございます
225:デフォルトの名無しさん
09/05/24 22:56:56
すべての数が不一致であることを前提とする。4つの数で
最大の元が属する区画名をA,最小の元が属する区画名をBとする。
A=Bの時は重なる
A<>Bの場合、区画Aで4数最大のものでないものをy
区画Bの元で4数最小でないものをzとする。
重なるのはy<zの場合のみ
上のことをコーディングすれば良いんぢゃ?
(変数は常に値渡しされるとは限らないから関数内で
勝手に変更することはC++では許されない。念の為)
226:デフォルトの名無しさん
09/05/24 23:01:01
>>220 >>211 数値の型がわかんなかったのでテンプレで。数値の入力部分は好きにどうぞ。
#include <iostream>
template <class T> class Range {
public:
Range() {}
Range(const T& v0, const T& v1) { create(v0, v1); }
Range(const Range<T>& s) { *this = s; }
virtual ~Range() {}
const Range<T>& operator=(const Range<T>& s) { min_ = s.min_; max_ = s.max_; return *this; }
void create(const T& v0, const T& v1) { if(v0 < v1) { min_ = v0; max_ = v1; } else { min_ = v1; max_ = v0; } }
bool isIntersect(const Range<T>& s) const {
if(min_ <= s.min_) {
return max_ >= s.min_; // 接するのも交わりと見なす
//return max_ > s.min_; // 接するものは交わりとは見なさない
} else {
return s.isIntersect(*this);
}
}
private:
T min_;
T max_;
};
int main()
{
Range<int> r0(2,5);
Range<int> r1(1,3);
if(r0.isIntersect(r1)) {
cout << "重なる" << endl;
} else {
cout << "重ならない" << endl;
}
}
227:デフォルトの名無しさん
09/05/24 23:04:34
沢山のアドバイスありがとうございました!
色々と参考になりました
お陰様でいっぱしの形になって提出できそうです
これからも精進します(`・ω・´)
228:デフォルトの名無しさん
09/05/24 23:07:15
>>221
>>222
うっ、if文のみ使用って、判定にswitchとかを使うなという意味じゃないのか・・・
ごめん。
229:デフォルトの名無しさん
09/05/24 23:09:15
>>212 == >>216 で合ってる。医女
230:デフォルトの名無しさん
09/05/25 00:18:47
>>201 min_index() を使ってない my_strcmp() の使い方が分からなかったので strcmp() と同じだと仮定
課題1
void my_sort_strings(char **p,int n)
{
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j+1<n-i;j++)
{
if(*p[j]>*p[j+1]) swap_strings(p, j, j+1);
}
}
}
課題2
void lexicograhic_sort(char **p,int n)
{
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j+1<n-i;j++)
{
if(my_strcmp(p[j], p[j+1])>0) swap_strings(p, j, j+1);
}
}
}
231:デフォルトの名無しさん
09/05/25 01:09:02
自由課題:可憐な カレン ダーを作ってくれ
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5337日前に更新/150 KB
担当:undef