トップページ⇒tech
1001コメント424KB

C/C++の宿題片付けます 138代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?S★(526363)
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
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
[1] 授業単元:プログラミング基礎I
[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
[1] 授業単元:プログラミング基礎I
[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:02
1題ずつろだに上げる→まとめてURLをここに書く、とかしてくれるとありがたい
0156デフォルトの名無しさん2010/07/19(月) 21:20:27
[1] 授業単元:プログラミング基礎I
[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
[1] 授業単元:プログラミング基礎I
[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:02
>>117さん、ありがとうございました。
0159デフォルトの名無しさん2010/07/19(月) 21:49:10
>>49です。
どなたかお願いできませんか。
0160デフォルトの名無しさん2010/07/19(月) 21:56:57
>>159
解いてやりたいが、低脳で問題が全く理解できない
0161デフォルトの名無しさん2010/07/19(月) 22:11:59
>>135
>>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
>>147
>>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:54
ほんと重複がおおいな。夏休み前ってこんなもんだっけ?
ATM回答書いたものだが、前スレの出題者が条件を全部書かなかったばかりに
ちょっと不完全な部分があるので改造して提出ドゾー。
0164デフォルトの名無しさん2010/07/19(月) 22:17:10
>>134
http://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:56
>>132
http://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
[1] 授業単元:プログラミング基礎I
[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
>>49
問題の意味がよくわからんが、こんなんでいいのか?

#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:47
>>139
http://codepad.org/I7AxHHCg

>>140
http://codepad.org/m5DcvLvu


結構ひどいコードになった…。
0169デフォルトの名無しさん2010/07/19(月) 22:38:50
>>133>>136です。
どなたかお願いしますorz
0170デフォルトの名無しさん2010/07/19(月) 23:23:00
>>153
http://codepad.org/3rvWtcIG
0171デフォルトの名無しさん2010/07/19(月) 23:29:31
>>154
http://codepad.org/NvySXrk6
0172デフォルトの名無しさん2010/07/19(月) 23:34:22
>>46お願いします!!
0173 ◆QZaw55cn4c 2010/07/19(月) 23:44:25
>>152
http://codepad.org/2imSU288
0174デフォルトの名無しさん2010/07/19(月) 23:50:13
[1] 授業単元:C++基礎
[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 <stdio.h>
#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:00
>>143
hit計算部
X if ((s[k] == guess[l]) && (k != l)) {
○ if (s[k] == guess[k]) {

blow計算部
○ //break;
0177デフォルトの名無しさん2010/07/19(月) 23:59:38
void swap(int *a, int *b, int n){
while (--n >= 0) {
*a ^= *b;
*b ^= *a;
*a ^= *b;
a++;
b++;
}
}
0178 ◆QZaw55cn4c 2010/07/20(火) 00:07:31
>>174, >>175
http://codepad.org/4sstpRbo
0179デフォルトの名無しさん2010/07/20(火) 00:09:30
>>177
swap (a, a, sizeof(a)/sizeof(int));
とやると、破綻しないか?
0180デフォルトの名無しさん2010/07/20(火) 00:12:51
void swap(int *a, int *b, int n){
int *aa=a;
int *bb=b;
while (--n >= 0) {
*aa ^= *bb;
*bb ^= *aa;
*aa ^= *bb;
aa++;
bb++;
}
}
0181デフォルトの名無しさん2010/07/20(火) 00:14:54
いや、そういうことじゃなくて0になるってことか
0182デフォルトの名無しさん2010/07/20(火) 00:16:20
始めにif(a==b) return;を入れればいいな
0183デフォルトの名無しさん2010/07/20(火) 00:18:13
>>180
どこでききかじったかしらないが、
swap(a, a, sizeof(a)/sizeof(int));
と書いてしまうと、a が 0 になってしまわないか?
0184デフォルトの名無しさん2010/07/20(火) 00:33:25
>>178
ありがとうございます!できました!
ちょっと気になるのは、派生クラスの加筆が問題だったのですが、
基底クラスにも加筆しているところです。
派生クラスだけの加筆では解決できないのでしょうか。
0185デフォルトの名無しさん2010/07/20(火) 00:36:07
ローカル変数tmpを使って入れ替えるのがそんなにイヤか?
0186デフォルトの名無しさん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,"")は文字列""を返す。
0187 ◆QZaw55cn4c 2010/07/20(火) 00:47:30
>>184
派生クラスを public に継承させている状態なので、
基底クラスのメンバ変数 n, l を基底クラス、派生クラスのどちらのコンストラクタで初期化するべきか、
という判断になります。派生クラス側で全部初期化するのであれば、次のようになるかと思います。
http://codepad.org/3LbwV44M
0188デフォルトの名無しさん2010/07/20(火) 00:50:53
1] 授業単元:プログラミング基礎I
[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
>>186
>>1
0190デフォルトの名無しさん2010/07/20(火) 01:17:10
>>187
ありがとうございます。基底クラスで初期化するのが一般的みたいですね。
助かりました!
0191デフォルトの名無しさん2010/07/20(火) 01:30:49
>>167さんありがとうございました。
0192デフォルトの名無しさん2010/07/20(火) 01:45:56
[1] 授業単元:プログラミング応用
[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] その他の制限:
よろしくお願いします。
01931862010/07/20(火) 01:49:33
[1] 授業単元:アルゴリズム
[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] その他の制限:特になし
0194 ◆QZaw55cn4c 2010/07/20(火) 02:09:23
>>193
http://codepad.org/ipw04RJr
0195デフォルトの名無しさん2010/07/20(火) 02:35:53
↓
>関数の返す値はコピーをした先のdとする。
あいかわらず問題文ちゃんと読めてないなw

>d[++j] = '\0';
ひどすぎるw
0196 ◆QZaw55cn4c 2010/07/20(火) 08:02:15
>>195
ご指摘感謝、これでどうですか?
http://codepad.org/vfeg18JP
0197デフォルトの名無しさん2010/07/20(火) 08:13:37
◆QZaw55cn4c って確実に引きこもりニートだろ?こんなの相手にしていられる
暇があるなんて。稼ぎについては聞かないが、こんなことしてリア充な訳無いだろうしw
0198デフォルトの名無しさん2010/07/20(火) 08:30:47
>>196
横レスだが、個人的にはこの方が好き。
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
[1] 授業単元:C++基礎
[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
[1] 授業単元:プログラミング基礎I
[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
[1] 授業単元:C++
[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:30
>>201の途中までやったプログラムです。申し訳ありませんが、どなたかよろしくお願いします。

int
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:39
>>201 過去ログにあったなぁ・・・
0204デフォルトの名無しさん2010/07/20(火) 12:16:09
>>200
>>173

>>197
自己紹介ありがとうございます。
0205 ◆xIIUupxBXw 2010/07/20(火) 12:19:14
1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
一行ごとにテキストファイル名が無限に書いてあるテキストファイルがある。
このファイルを読みだして書いてあるファイル名のファイル内容をすべて表示するプログラムを作れ
一行ごとに書いてあるファイルの最後は改行で終わっているものとする。

[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 7月21日午前中
[5] その他の制限: とくにありません
0206デフォルトの名無しさん2010/07/20(火) 13:25:46
>>133,136
C++に詳しい人、書き換え頼む。
http://codepad.org/C4PXq60o
0207デフォルトの名無しさん2010/07/20(火) 13:28:13
>>205 (1/2)
#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:00
>>205 (2/2) >>204の続き
int 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
>>208
仕事が早くて非常に感謝します
0210デフォルトの名無しさん2010/07/20(火) 13:54:30
いえいえ
0211デフォルトの名無しさん2010/07/20(火) 14:06:25
>>204
え?トリップ付けてないけど、あんたの自己紹介で間違いないの?
リア充ではない引きこもり乙
0212デフォルトの名無しさん2010/07/20(火) 15:30:20
[1] 授業単元:C++基礎
[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
>>213
色々ひでーなw やるき(゚�听)オキネ
0215デフォルトの名無しさん2010/07/20(火) 16:28:04
平均値とか総和とかさ…
それ作れないで授業受ける意味あるの?
まあ自分のことだからいいけどさ
0216デフォルトの名無しさん2010/07/20(火) 17:06:24
>>107
...
#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
>>107
//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++;
}
0218 ◆QZaw55cn4c 2010/07/20(火) 18:51:09
>>201
http://codepad.org/EdDFTD5R

>>198
nice ですね。

>>197
自己紹介ありがとうございます。
0219デフォルトの名無しさん2010/07/20(火) 18:54:11
>>218
お前の自己紹介で間違ってなかったのかw
0220デフォルトの名無しさん2010/07/20(火) 19:09:59
>>219
お前も同類だろw
0221デフォルトの名無しさん2010/07/20(火) 19:17:28
1] 授業単元: C言語プログラミング
[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
>>221
#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
>>222
ありがとうございます。助かります!
0224デフォルトの名無しさん2010/07/20(火) 19:50:05
[1] 授業単元:C++プログラミング
[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
1] 授業単元: C言語プログラミング
[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:24
>>224の続きが>>226です
0228デフォルトの名無しさん2010/07/20(火) 21:28:19
>>192ですが、
勝つとモンスターのヒットポイント、アタックポイント、ガードポイントを
それぞれアップするという機能を追加して作っていただきたいのですが。
よろしくお願いします。
0229 ◆QZaw55cn4c 2010/07/20(火) 21:44:59
>>225
http://codepad.org/REwumesl

>>197
自己紹介ありがとうございます。
0230デフォルトの名無しさん2010/07/20(火) 21:45:54
>>225
>>206 ?
0231デフォルトの名無しさん2010/07/20(火) 21:58:09
1] 授業単元: C言語プログラミング
[2] 問題コード

人数nを読み込んだ後,n個のfloat型配列を動的に確保し,配列に身長のデータを読み込んでいき,
入力された身長を10cmごとにわけたヒストグラムを生成するプログラムを作成せよ.
但し,nの読み込みとn個の動的メモリ確保はmain関数内で行い,身長の読み込み及び,印字する部分は関数として作成せよ.

[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
0232 ◆QZaw55cn4c 2010/07/20(火) 22:04:43
>>213
http://codepad.org/16zuXnfY

>>197
自己紹介ありがとうございます。
0233デフォルトの名無しさん2010/07/20(火) 22:06:50
いつの間に自己紹介スレになったんだ、ここは
0234デフォルトの名無しさん2010/07/20(火) 22:17:08
何度も失礼します。
どなたか>>46おねがいします。
0235 ◆QZaw55cn4c 2010/07/20(火) 22:26:17
>>231
http://codepad.org/FcARwSFG

>>197
自己紹介ありがとうございます。
0236デフォルトの名無しさん2010/07/20(火) 22:34:50
1] 授業単元: C言語プログラミング
[2] 問題コード
nを読み込み,n個のint型配列を動的に確保,n個の配列はn人の勇者とする.以下仕様に従ったプログラムを作成せよ.

•それぞれの勇者にヒットポイントを与える.
•敵のヒットポイントを与える.
•乱数を発生し,誰の攻撃かを決定する.
•攻撃をする際に,会心の一撃,普通の攻撃,ミスを乱数で決定する.
•相手に与えるダメージを乱数で決定する.
•敵の攻撃の場合,何人にどれだけ攻撃をするかを乱数で決定する.
•敵のヒットポイントが無くなるか,勇者が全滅したら終了とする

[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 7月21日
[5] その他の制限: とくにありません
0237 ◆QZaw55cn4c 2010/07/20(火) 22:39:22
>>46
>>234
http://codepad.org/TaipQ6dl

>>197
自己紹介ありがとうございます。
0238デフォルトの名無しさん2010/07/20(火) 22:43:44
>>224
http://codepad.org/OeyZc2cC
0239デフォルトの名無しさん2010/07/20(火) 22:52:39
>>192 >>228です。
どなたかお願いします。
0240デフォルトの名無しさん2010/07/20(火) 23:00:13
>>239

>>228の付加条件では、

> 2.構造体のメンバ変数を1つ以上増やすこと。

を満たせないと思うが。
0241デフォルトの名無しさん2010/07/20(火) 23:01:12
>>239
「勝つと」という条件だけではなぁ。
そもそもゲームの中身が分からない件。
0242デフォルトの名無しさん2010/07/20(火) 23:02:38
>>241
いや、多分関数が用意できれば良くて、
それを呼び出す(戦闘を行って勝つ)必要はないような気がする。
0243デフォルトの名無しさん2010/07/20(火) 23:14:24
>>239
http://codepad.org/XhStFj1R

1.関数を新たに1つ作成すること

 IsRunAway()を追加。
  逃走可能かどうかを調べる関数。
  モンスターのスピードポイントが、プレイヤーのスピードポイントを上回れば、逃走可能。

2.構造体のメンバ変数を1つ以上増やすこと。

 int sp; //スピードポイント(※追加)
  素早さを表すスピードポイントを追加。

>>228とは違うけど、こんな感じ?
0244デフォルトの名無しさん2010/07/20(火) 23:21:30
>>243さん、ありがとうございます。
条件はなんでも良かったので助かりました。
他の方も返答いただきありがとうございました。
それにしても、皆さん作るのが速くてうらやましいです。
0245デフォルトの名無しさん2010/07/21(水) 00:03:22
どなたか>>224>>226をお願いします
02461072010/07/21(水) 00:05:27
>>216-217
ありがとうございます。
0247229 ◆QZaw55cn4c 2010/07/21(水) 00:25:39
>>225
間違えておりました。訂正します。
http://codepad.org/obITTN9G

>>197
自己紹介ありがとうございます。
0248デフォルトの名無しさん2010/07/21(水) 09:14:07
[1] C言語プログラミング
[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
を解きたいのですがどうもうまくいきません。
上の部分でルンゲクッタ法の関数を直していただきたいです。
02492482010/07/21(水) 09:15:52
すいません正しくは
d^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:19
208のをfgetcを使ったプログラムをお願いします。
0251デフォルトの名無しさん2010/07/21(水) 10:57:16
1] 授業単元: C言語プログラミング
[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
>>250
>>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);
    }

こうしたほうがちょとだけマシ。
■ このスレッドは過去ログ倉庫に格納されています