C/C++の宿題片付けます 138代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題片付けます 137代目
http://pc12.2ch.net/test/read.cgi/tech/1276810079/
0153デフォルトの名無しさん
2010/07/19(月) 21:15:55[2] 問題文(含コード&リンク):
name(名前: char型配列), height(身長: float型変数), bloodType(血液型: char型変数)をメンバに持つ構造体を宣言し, 128名分が記憶可能になるようその構造体の配列を定義せよ.また,その配列に対して値を入力し,
さらに表示できるようにせよ.構造体のメンバ値を表示するには、ひとつの構造体の各メンバの値を表示する関数を作成すること。
% ./bodyData
1人目のデータ: 立命太郎 175.5 A
2人目のデータ: 野路花子 169.0 B
3人目のデータ: 衣笠一郎 180.4 O
4人目のデータ: 0 0 0 ← 0 0 0 と入力すると終わる.
名前 身長 血液型
立命太郎 175.5 A
野路花子 169.0 B
衣笠一郎 180.4 O
%
ヒント: 各人の名前、身長、血液型のデータを1行で入力するためには、参考12.1に示されたfgets()関数で、これらを1度に取り込み、最初の空白までを名前とみなし、次の空白までを身長とみなし、次に改行までを血液型をみなせばよい。これらを別々の文字列として、
必要に応じて整数や浮動小数点数に変換し、構造体のメンバに設定すること。
ヒント: ひとつの構造体の各メンバの値を表示する関数に構造体を引渡すことを繰り返えせばよい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/20まで
[5] その他の制限:とくにありません
0154デフォルトの名無しさん
2010/07/19(月) 21:17:12[2] 問題文(含コード&リンク):
>>153を基にデータを身長の高い順に出力するよう変更せよ.
% ./orderByHeight
… ← 入力は前課題と同じなので省略.
名前 身長 血液型
衣笠一郎 180.4 O
立命太郎 175.5 A
野路花子 169.0 B
%
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/20まで
[5] その他の制限:とくにありません
0155デフォルトの名無しさん
2010/07/19(月) 21:19:020156デフォルトの名無しさん
2010/07/19(月) 21:20:27[2] 問題文(含コード&リンク):
入力したDNA塩基配列中に,atgという並びがいくつあるか調べるプログラムを作成せよ.但し,入力には t, c, a, g以外の文字も入っている.塩基以外の文字は無視すること.
【実行例】
% ./a.out
1gattatgtga
11tgccgatatc
21gatatgattc
(ここで ^D を押す)
#ATG is 3
%
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありません
0157デフォルトの名無しさん
2010/07/19(月) 21:23:44[2] 問題文(含コード&リンク):
入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ.
【実行例】
% ./a.out
tataatccg ← 入力し,リターンを押して ^D
Thymine (t) : 3
Cytosine (c) : 2
Adenine (a) : 3
Guanine (g) : 1
%
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありません
0158デフォルトの名無しさん
2010/07/19(月) 21:47:020159デフォルトの名無しさん
2010/07/19(月) 21:49:10どなたかお願いできませんか。
0160デフォルトの名無しさん
2010/07/19(月) 21:56:57解いてやりたいが、低脳で問題が全く理解できない
0161デフォルトの名無しさん
2010/07/19(月) 22:11:59>>157
>>http://pc12.2ch.net/test/read.cgi/tech/1276810079/937, >>http://pc12.2ch.net/test/read.cgi/tech/1276810079/941
941 名前:デフォルトの名無しさん[sage] 投稿日:2010/07/16(金) 14:22:36
>>937
#include <stdio.h>
#define LEN 128
int main(void)
{
char buf[LEN], *p;
int t, c, a, g;
t = c = a = g = 0;
gets(buf);
p = buf;
while (*p) {
switch (*p) {
case 't': t++; break;
case 'c': c++; break;
case 'a': a++; break;
case 'g': g++; break;
}
p++;
}
printf("Thymine (t) : %d\nCytosine (c) : %d\nAdenine (a) : %d\nGuanine (g) : %d\n", t, c, a, g);
return 0;
}
0162デフォルトの名無しさん
2010/07/19(月) 22:14:12>>156
http://pc12.2ch.net/test/read.cgi/tech/1276810079/943, http://pc12.2ch.net/test/read.cgi/tech/1276810079/954
954 名前:デフォルトの名無しさん[sage] 投稿日:2010/07/16(金) 18:19:08
#include <stdio.h>
#include <string.h>
#define N 100
int main(void)
{
int cnt = 0;
char s[] = "atg", s2[] = "tcag", buf[N], *p1, *p2;
p1 = buf;
while (scanf("%99s", p1) != EOF)
while (*p1)
p1++;
p1 = p2 = buf;
while (*p1) {
while (strchr(s2, *p1) == 0)
p1++;
*p2++ = *p1++;
}
*p2 = *p1;
p1 = buf;
while (strstr(p1, s)) {
cnt++;
p1 = (strstr(p1, s));
p1++;
}
printf("#ATG is %d\n", cnt);
return 0;
}
0163デフォルトの名無しさん
2010/07/19(月) 22:14:54ATM回答書いたものだが、前スレの出題者が条件を全部書かなかったばかりに
ちょっと不完全な部分があるので改造して提出ドゾー。
0164デフォルトの名無しさん
2010/07/19(月) 22:17:10http://pc12.2ch.net/test/read.cgi/tech/1276810079/923
http://pc12.2ch.net/test/read.cgi/tech/1276810079/930
http://pc12.2ch.net/test/read.cgi/tech/1276810079/932
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10841.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10842.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10843.txt
0165デフォルトの名無しさん
2010/07/19(月) 22:18:56http://pc12.2ch.net/test/read.cgi/tech/1276810079/923
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10840.c
0166デフォルトの名無しさん
2010/07/19(月) 22:26:12[2] 問題文(含コード&リンク):
配列a[n],配列b[n]と配列の大きさnを渡すと配列の要素を入れ換えるプログラムをポインタを用いて作成せよ.
例えば,a[3]={1,2,3},b[3]={101,102,103}とするとき,結果として,a[3]={101,102,103},b[3]={1,2,3}となるようにせよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありません
0167デフォルトの名無しさん
2010/07/19(月) 22:29:47問題の意味がよくわからんが、こんなんでいいのか?
#include <stdio.h>
int main(void) {
char src[32];
int *ptr_i;
double *ptr_d;
int i;
for(i = 0; i < 32; i++) {
src[i] = i;
}
ptr_i = (int *)src;
ptr_d = (double *)src;
for(i = 0; i < 8; i++) {
if ((char *)ptr_i == (char *)ptr_d) {
printf("ptr_d:");
ptr_d++;
} else {
printf(" ");
}
printf("%p) = 0x%x\n", ptr_i, *ptr_i);
ptr_i++;
}
return 0;
}
0168デフォルトの名無しさん
2010/07/19(月) 22:36:47http://codepad.org/I7AxHHCg
>>140
http://codepad.org/m5DcvLvu
結構ひどいコードになった…。
0169デフォルトの名無しさん
2010/07/19(月) 22:38:50どなたかお願いしますorz
0170デフォルトの名無しさん
2010/07/19(月) 23:23:00http://codepad.org/3rvWtcIG
0171デフォルトの名無しさん
2010/07/19(月) 23:29:31http://codepad.org/NvySXrk6
0172デフォルトの名無しさん
2010/07/19(月) 23:34:220174デフォルトの名無しさん
2010/07/19(月) 23:50:13[2] 問題文(含コード&リンク):
基底クラスとして Shape、その派生クラスとして Rectangle (正方形)を定義し、
正四角形の辺の長さの合計と面積を計算する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VisualStudio2005 コマンドプロンプト
[3.3] 言語: C++
[4] 期限: 2010/7/20 8:50
[5] その他の制限: 基底クラスとMainは変更不可。加筆は、ソースコメント「問題箇所」で示します。
派生クラスを加筆しましたが、以下のエラーが出ます。
どう直せばいいか分かりません。お願いします。
enshu6_3.cpp(32) : error C2512: 'Shape' : クラス、構造体、共用体に既定のコンストラクタがありません。
課題はこの後投稿します。
0175デフォルトの名無しさん
2010/07/19(月) 23:52:05#include <math.h>
// クラス Shape
class Shape {
protected:
int n; // 辺の数
double l; // 辺の長さ
public:
Shape(int, double); // コンストラクタ
double hen(); // 辺の長さの合計
virtual double menseki() = 0; // 面積の計算(純粋仮想関数)
};
//問題箇所start
class Rectangle : public Shape
{
public:
Rectangle(){}
Rectangle(int n, double l ){} //: Shape(int, double) {} // コンストラクタ
double hen(){ return n * l; }
virtual double menseki(){ return l * l; }
};
//問題箇所end
int main()
{
double x;
scanf("%lf", &x);
Rectangle r(4, x);
printf("%.3f %.3f\n", r.hen(), r.menseki());
}
0176デフォルトの名無しさん
2010/07/19(月) 23:53:00hit計算部
X if ((s[k] == guess[l]) && (k != l)) {
○ if (s[k] == guess[k]) {
blow計算部
○ //break;
0177デフォルトの名無しさん
2010/07/19(月) 23:59:38while (--n >= 0) {
*a ^= *b;
*b ^= *a;
*a ^= *b;
a++;
b++;
}
}
0179デフォルトの名無しさん
2010/07/20(火) 00:09:30swap (a, a, sizeof(a)/sizeof(int));
とやると、破綻しないか?
0180デフォルトの名無しさん
2010/07/20(火) 00:12:51int *aa=a;
int *bb=b;
while (--n >= 0) {
*aa ^= *bb;
*bb ^= *aa;
*aa ^= *bb;
aa++;
bb++;
}
}
0181デフォルトの名無しさん
2010/07/20(火) 00:14:540182デフォルトの名無しさん
2010/07/20(火) 00:16:200183デフォルトの名無しさん
2010/07/20(火) 00:18:13どこでききかじったかしらないが、
swap(a, a, sizeof(a)/sizeof(int));
と書いてしまうと、a が 0 になってしまわないか?
0184デフォルトの名無しさん
2010/07/20(火) 00:33:25ありがとうございます!できました!
ちょっと気になるのは、派生クラスの加筆が問題だったのですが、
基底クラスにも加筆しているところです。
派生クラスだけの加筆では解決できないのでしょうか。
0185デフォルトの名無しさん
2010/07/20(火) 00:36:070186デフォルトの名無しさん
2010/07/20(火) 00:37:17文字列sの中の文字の順番を逆にコピーした文字列dを作るc言語の関数str_revcopy(d,s)を書け。
関数の返す値はコピーをした先のdとする。
ただし文字列sを逆順にコピーするのに十分な記憶領域があらかじめ確保されていて、その先頭がdで指されていると仮定する。
さらに、dとsの記憶領域には重なりがないとする。例えば
str_revcopy(d,"ABCDE")は文字列"EDCBA"を返し、
str_revcopy(d,"This is a pen")は文字列".nep a si sihT"を返し、
str_revcopy(d,"")は文字列""を返す。
派生クラスを public に継承させている状態なので、
基底クラスのメンバ変数 n, l を基底クラス、派生クラスのどちらのコンストラクタで初期化するべきか、
という判断になります。派生クラス側で全部初期化するのであれば、次のようになるかと思います。
http://codepad.org/3LbwV44M
0188デフォルトの名無しさん
2010/07/20(火) 00:50:53[2] 問題文(含コード&リンク):
n個の実数(double型)を配列に読み込んだ後,配列を指すポインタを用いて,最大値と最小値を探索するプログラムを作成せよ.また,入力した値の平均値もポインタ変数を用いて計算せよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありません
0189デフォルトの名無しさん
2010/07/20(火) 01:15:21>>1
0190デフォルトの名無しさん
2010/07/20(火) 01:17:10ありがとうございます。基底クラスで初期化するのが一般的みたいですね。
助かりました!
0191デフォルトの名無しさん
2010/07/20(火) 01:30:490192デフォルトの名無しさん
2010/07/20(火) 01:45:56[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10878.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:7/20まで
[5] その他の制限:
よろしくお願いします。
0193186
2010/07/20(火) 01:49:33[2] 問題文(含コード&リンク):
文字列sの中の文字の順番を逆にコピーした文字列dを作るc言語の関数str_revcopy(d,s)を書け。
関数の返す値はコピーをした先のdとする。
ただし文字列sを逆順にコピーするのに十分な記憶領域があらかじめ確保されていて、その先頭がdで指されていると仮定する。
さらに、dとsの記憶領域には重なりがないとする。例えば
str_revcopy(d,"ABCDE")は文字列"EDCBA"を返し、
str_revcopy(d,"This is a pen")は文字列".nep a si sihT"を返し、
str_revcopy(d,"")は文字列""を返す。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VisualStudio コマンドプロンプト 2010
[3.3] 言語:C
[4] 期限:7月20日16時
[5] その他の制限:特になし
0195デフォルトの名無しさん
2010/07/20(火) 02:35:53>関数の返す値はコピーをした先のdとする。
あいかわらず問題文ちゃんと読めてないなw
>d[++j] = '\0';
ひどすぎるw
ご指摘感謝、これでどうですか?
http://codepad.org/vfeg18JP
0197デフォルトの名無しさん
2010/07/20(火) 08:13:37暇があるなんて。稼ぎについては聞かないが、こんなことしてリア充な訳無いだろうしw
0198デフォルトの名無しさん
2010/07/20(火) 08:30:47横レスだが、個人的にはこの方が好き。
char *str_revcopy(char *d, char *s)
{
int len, i = 0;
len = strlen(s);
while (len)
d[--len] = s[i++];
d[i] = '\0';
return d;
}
0199デフォルトの名無しさん
2010/07/20(火) 11:14:36[2] 問題文(含コード&リンク):
n個の実数(double型)を配列に読み込んだ後,配列を指すポインタを用いて,最大値と最小値を探索するプログラムを作成せよ.また,入力した値の平均値もポインタ変数を用いて計算せよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありませ
0200デフォルトの名無しさん
2010/07/20(火) 11:15:57[2] 問題文(含コード&リンク):
配列a[n],配列b[n]と配列の大きさnを渡すと配列の要素を入れ換えるプログラムをポインタを用いて作成せよ.
例えば,a[3]={1,2,3},b[3]={101,102,103}とするとき,結果として,a[3]={101,102,103},b[3]={1,2,3}となるようにせよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありません
0201デフォルトの名無しさん
2010/07/20(火) 11:55:45[2] 問題文(含コード&リンク):
複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力するプログラムを作成せよ.
【実行例】
何個の文字列を入力しますか?:4
入力文字列[1]:AAA
入力文字列[2]:BBB
入力文字列[3]:CCC
入力文字列[4]:DDD
繋ぎ合わせる順番:
2
4
3
1
結果: BBBDDDCCCAAA
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:途中までやったのですがうまくいきません。文字列を繋ぎ合わせる順番を入力し結果を出力するプログラムというのが難しいです。
0202デフォルトの名無しさん
2010/07/20(火) 11:57:30int
main(void)
{
int i, j, p,q,seq[4], n;
char s[NN][100];
loop(i, NN) {
printf("何個の文字列を入力しますか?[%d]=", i);
scanf("%s", s[i]);
}
printf("繋ぎ合わせる順番を入力してください\n");
loop(i, NN) {
scanf("%d", &n);
seq[i] = n;
}
printf("結果 -> ");
loop(i, NN) {
loop(j, NN) {
loop(p,NN){
if (seq[j] == i + 1)
printf("%s", s[j,p]);
}
}
}
return 0;
}
0203デフォルトの名無しさん
2010/07/20(火) 12:13:390204デフォルトの名無しさん
2010/07/20(火) 12:16:09>>173
>>197
自己紹介ありがとうございます。
0205 ◆xIIUupxBXw
2010/07/20(火) 12:19:14[2] 問題文(含コード&リンク):
一行ごとにテキストファイル名が無限に書いてあるテキストファイルがある。
このファイルを読みだして書いてあるファイル名のファイル内容をすべて表示するプログラムを作れ
一行ごとに書いてあるファイルの最後は改行で終わっているものとする。
[3] 環境
[3.1] OS: Windows
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7月21日午前中
[5] その他の制限: とくにありません
0206デフォルトの名無しさん
2010/07/20(火) 13:25:46C++に詳しい人、書き換え頼む。
http://codepad.org/C4PXq60o
0207デフォルトの名無しさん
2010/07/20(火) 13:28:13#include <stdio.h>
#include <stdlib.h>
void chomp(char *cs) {
int i = strlen(cs) - 1;
for (;0 <= i && (cs[i] == '\r' || cs[i] == '\n'); i--) cs[i] = '\0';
}
void print(char *filename) {
#define SIZE 1024
static char buff[SIZE];
FILE *f = fopen(filename, "r");
if (!f) return;
for (;fgets(buff, SIZE, f);) printf("%s", buff);
fclose(f);
#undef SIZE
}
0208デフォルトの名無しさん
2010/07/20(火) 13:29:00int main(int argc, char **argv) {
FILE *f;
#define MAX_PATH 256
char filename[MAX_PATH + 1];
if (argc < 2) {
printf("%s: no input files\n", argv[0]);
exit(EXIT_FAILURE);
}
if (!(f = fopen(argv[1], "r"))) {
printf("%s: cannot read %s\n", argv[0], argv[1]);
exit(EXIT_FAILURE);
}
for (;fgets(filename, MAX_PATH, f);) {
chomp(filename);
print(filename);
}
#undef MAX_PATH
fclose(f);
return 0;
}
0209 ◆xIIUupxBXw
2010/07/20(火) 13:42:42仕事が早くて非常に感謝します
0210デフォルトの名無しさん
2010/07/20(火) 13:54:300211デフォルトの名無しさん
2010/07/20(火) 14:06:25え?トリップ付けてないけど、あんたの自己紹介で間違いないの?
リア充ではない引きこもり乙
0212デフォルトの名無しさん
2010/07/20(火) 15:30:20[2] 問題文(含コード&リンク):
n個の実数(double型)を配列に読み込んだ後,配列を指すポインタを用いて,最大値と最小値を探索するプログラムを作成せよ.また,入力した値の平均値もポインタ変数を用いて計算せよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/21
[5] その他の制限:とくにありません
0213デフォルトの名無しさん
2010/07/20(火) 15:33:01# main関数では以下の関数だけを呼ぶだけにする.
# 整数nを読み込み,n個の配列に実数を読み込む関数.input(int *, double *)
# 整数nとn個の配列を渡すと,総和,平均を計算する関数.calcu(int, double *, double *, double *)
# 総和と平均を印字する関数output(double, double)
【プログラム(q8-0.c)】
#include <stdio.h>
void input(int *, double *);
void calcu(int, double *, double *, double *);
void output(double, double);
int main(void) {
int n;
double a[10];
double xsum, ave;
input(&n, a);
calcu(n, a, &xsum, &ave);
output(xsum, ave);
return 0;
}
0214デフォルトの名無しさん
2010/07/20(火) 16:19:49色々ひでーなw やるき(゚�听)オキネ
0215デフォルトの名無しさん
2010/07/20(火) 16:28:04それ作れないで授業受ける意味あるの?
まあ自分のことだからいいけどさ
0216デフォルトの名無しさん
2010/07/20(火) 17:06:24...
#define N 10
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
int main(void){
int i, j, a[N][N];
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
a[i][j] = min(min(i, j), 9 - max(i, j));
/*...
*/
return 0;
}
0217デフォルトの名無しさん
2010/07/20(火) 17:53:05//kadai6
for(int i = 0; i < 5; ++i) {
for(int j = i; j < 10 - i; ++j) {
a[i][j] = a[j][i] = a[9-i][j] = a[j][9-i] = i;
}}
//kadai8
for(int i = 0, k = 0; i < 5; ++i) {
for(int j = i; j < 10 - i; ++j) a[i][j] = k++;
for(int j = i + 1; j < 9 - i; ++j) a[j][9 - i] = k++;
for(int j = 9 - i; j > i; --j) a[9 - i][j] = k++;
for(int j = 9 - i; j > i; --j) a[j][i] = k++;
}
http://codepad.org/EdDFTD5R
>>198
nice ですね。
>>197
自己紹介ありがとうございます。
0219デフォルトの名無しさん
2010/07/20(火) 18:54:11お前の自己紹介で間違ってなかったのかw
0220デフォルトの名無しさん
2010/07/20(火) 19:09:59お前も同類だろw
0221デフォルトの名無しさん
2010/07/20(火) 19:17:28[2] 問題コード
秒数を与えると,それが何時間何分何秒にあたるかを計算する関数 void calctime(int sec, int *hp, int *mp, int *sp); を作れ.たとえば calctime(3725, &h, &m, &s); として呼び出すと h = 1, m = 2, s = 5 となる.但し,1時間2分5秒は3725秒である.
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
0222デフォルトの名無しさん
2010/07/20(火) 19:40:12#include <stdio.h>
void calctime(int sec, int *hp, int *mp, int *sp){
*sp=sec%60; *mp=sec/60; *hp=*mp/60; *mp%=60;
}
int main(){
int sec, h, m, s;
h=m=s=0;
sec = 3725;
calctime(sec, &h, &m, &s);
printf("%d時%d分%d秒\n",h,m,s);
}
0223デフォルトの名無しさん
2010/07/20(火) 19:42:22ありがとうございます。助かります!
0224デフォルトの名無しさん
2010/07/20(火) 19:50:05[2] 問題文(含コード&リンク): 航空会社が持っている小型航空機(座席数:24)のフライトに座席を割り当てるシステムをプログラミングせよ。
この航空機の座席は中央に通路を挟み左右にそれぞれ2座席ずつの列が計6列ある。
座席は 1A, 1B, 1C, 1D, ..., 6A, 6B, 6C, 6D で表示され、 1, 2列目が喫煙区画で、 A, D が窓側、 B, C が通路側を示している。
プログラムはまず最初に次の選択メニューを表示する。
喫煙席を希望する方は 1 をタイプしてください。
禁煙席を希望する方は 2 をタイプしてください。
喫煙/禁煙の選択が終わると、 窓側か通路側かの選択を求める。
窓側を希望する方は 1 をタイプしてくださ。
通路側を希望する方は 2 をタイプしてください。
希望に沿える席がすべて予約済みで割り当てられない場合には、窓側又は通路側の希望については無視して割り当てる。
ただし, 「窓側(あるいは通路側)はすでに満席のため通路側(窓側)で予約します」というメッセージを出力し、
以下のように座席番号と喫煙席/禁煙席の区分が書かれた搭乗券を(この課題では画面上に)出力する。
--------
2A 禁煙
--------
0225デフォルトの名無しさん
2010/07/20(火) 20:03:21[2] 問題コード
三角形の3頂点の座標,(x1,y1),(x2,y2),(x3,y3)を読み込んで 3つの内角の角度θ1,θ2,θ3をdeg単位(°)で計算し,印字するプログラムを作成せよ.
但し,double型変数 θ1,θ2,θ3へのポインタ変数とdouble型変数 x1,y1,x2,y2,x3,y3を引数とする関数を作成し,main関数では同関数を呼び出すようにせよ[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
0226デフォルトの名無しさん
2010/07/20(火) 20:04:20乗客がOKすれば(窓側/通路側の希望はできるだけ尊重した上で)空いている座席を割り当て搭乗券を出力し、しなければ「3時間後に次のフライトがあります。」というメッセージを出力して終了する。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio2008
[3.3] 言語:C++
[4] 期限:2010/07/26まで
[5] その他の制限:なし
どなたか親切な方…よろしくお願いします。
0227デフォルトの名無しさん
2010/07/20(火) 20:05:240228デフォルトの名無しさん
2010/07/20(火) 21:28:19勝つとモンスターのヒットポイント、アタックポイント、ガードポイントを
それぞれアップするという機能を追加して作っていただきたいのですが。
よろしくお願いします。
http://codepad.org/REwumesl
>>197
自己紹介ありがとうございます。
0230デフォルトの名無しさん
2010/07/20(火) 21:45:54>>206 ?
0231デフォルトの名無しさん
2010/07/20(火) 21:58:09[2] 問題コード
人数nを読み込んだ後,n個のfloat型配列を動的に確保し,配列に身長のデータを読み込んでいき,
入力された身長を10cmごとにわけたヒストグラムを生成するプログラムを作成せよ.
但し,nの読み込みとn個の動的メモリ確保はmain関数内で行い,身長の読み込み及び,印字する部分は関数として作成せよ.
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
http://codepad.org/16zuXnfY
>>197
自己紹介ありがとうございます。
0233デフォルトの名無しさん
2010/07/20(火) 22:06:500234デフォルトの名無しさん
2010/07/20(火) 22:17:08どなたか>>46おねがいします。
http://codepad.org/FcARwSFG
>>197
自己紹介ありがとうございます。
0236デフォルトの名無しさん
2010/07/20(火) 22:34:50[2] 問題コード
nを読み込み,n個のint型配列を動的に確保,n個の配列はn人の勇者とする.以下仕様に従ったプログラムを作成せよ.
•それぞれの勇者にヒットポイントを与える.
•敵のヒットポイントを与える.
•乱数を発生し,誰の攻撃かを決定する.
•攻撃をする際に,会心の一撃,普通の攻撃,ミスを乱数で決定する.
•相手に与えるダメージを乱数で決定する.
•敵の攻撃の場合,何人にどれだけ攻撃をするかを乱数で決定する.
•敵のヒットポイントが無くなるか,勇者が全滅したら終了とする
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
>>234
http://codepad.org/TaipQ6dl
>>197
自己紹介ありがとうございます。
0238デフォルトの名無しさん
2010/07/20(火) 22:43:44http://codepad.org/OeyZc2cC
0240デフォルトの名無しさん
2010/07/20(火) 23:00:13>>228の付加条件では、
> 2.構造体のメンバ変数を1つ以上増やすこと。
を満たせないと思うが。
0241デフォルトの名無しさん
2010/07/20(火) 23:01:12「勝つと」という条件だけではなぁ。
そもそもゲームの中身が分からない件。
0242デフォルトの名無しさん
2010/07/20(火) 23:02:38いや、多分関数が用意できれば良くて、
それを呼び出す(戦闘を行って勝つ)必要はないような気がする。
0243デフォルトの名無しさん
2010/07/20(火) 23:14:24http://codepad.org/XhStFj1R
1.関数を新たに1つ作成すること
IsRunAway()を追加。
逃走可能かどうかを調べる関数。
モンスターのスピードポイントが、プレイヤーのスピードポイントを上回れば、逃走可能。
2.構造体のメンバ変数を1つ以上増やすこと。
int sp; //スピードポイント(※追加)
素早さを表すスピードポイントを追加。
>>228とは違うけど、こんな感じ?
0244デフォルトの名無しさん
2010/07/20(火) 23:21:30条件はなんでも良かったので助かりました。
他の方も返答いただきありがとうございました。
それにしても、皆さん作るのが速くてうらやましいです。
0247229 ◆QZaw55cn4c
2010/07/21(水) 00:25:39間違えておりました。訂正します。
http://codepad.org/obITTN9G
>>197
自己紹介ありがとうございます。
0248デフォルトの名無しさん
2010/07/21(水) 09:14:07[2] http://www.dotup.org/uploda/www.dotup.org1041113.c
[3] 環境
[3.1] mac
[3.2] 学校のパソコンなんでわかりません、たぶんgcc
[3.3] C
[4] 7/22
[5] 4次のルンゲクッタ法で
d^2x/dt=-x/√(x^2+y^2)^3
d^2y/dt=-y/√(x^2+y^2)^3
を解きたいのですがどうもうまくいきません。
上の部分でルンゲクッタ法の関数を直していただきたいです。
0249248
2010/07/21(水) 09:15:52d^2x/dt^2=-x/√(x^2+y^2)^3
d^2y/dt^2=-y/√(x^2+y^2)^3
です。訂正しなくてもわかると思いマスが・・・
0250デフォルトの名無しさん
2010/07/21(水) 10:47:190251デフォルトの名無しさん
2010/07/21(水) 10:57:16[2] 問題コード
nを読み込み,n個のint型配列を動的に確保し, n回サイコロを振った結果をその配列に格納せよ.
その後,偶数が出た回数と奇数が出た回数,1から6までの出た目の確率を表示せよ.但し,nの読み込みとn個の動的メモリ確保はmain関数内で行い,サイコロの配列読み込み部分と計算の部分,表示の部分はそれぞれ関数として作成せよ.
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
0252デフォルトの名無しさん
2010/07/21(水) 11:48:37>>207-208のfgetsを_fgetsに置き換えたりするのは…駄目?
char *_fgets(char *cs, int n, FILE *f){
int c;
char *p;
for (p = cs; --n > 0 && (c = getc(f)) != EOF; ) if ((*p++ = c) == '\n') break;
*p = '\0';
return (c == EOF && p == cs) ? NULL : cs;
}
上記_fgetsはK&Rのものをパクりました。あと、エラー処理も、
if (argc < 2) {
fprintf(stderr, "%s: no input files\n", argv[0]);
exit(EXIT_FAILURE);
}
if (!(f = fopen(argv[1], "r"))) {
fprintf(stderr, "%s: cannot read %s\n", argv[0], argv[1]);
exit(EXIT_FAILURE);
}
こうしたほうがちょとだけマシ。
■ このスレッドは過去ログ倉庫に格納されています