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

このエントリーをはてなブックマークに追加
162デフォルトの名無しさん:2008/10/08(水) 13:13:55
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
すごろくプログラムを作成しなさい。ただし,下記の条件を満たすものとする。
・すごろくのコマとしてユーザクラスを作成しなさい。
・すごろくのコマを移動させる場所としてマスクラスを作成しなさい。
・main関数でユーザクラスの実体(2つ以上)とマスクラスの実体(5つ以上)を生成しなさい。
・ここで,マスには,「スタート」「ゴール」「1つ進む」「1つ戻る」「2つ進む」「2つ戻る」「スタートへ戻る」「何もしない」の条件があるとする。
・さらに,ユーザは初期状態で「スタート」とし「ゴール」になったら終了とする。
・乱数でサイコロ(1つ)の数字を出しすごろくを行い,片方がゴールしたら終了とする(ちょうどゴールにとまらなくてもよい)。なお,すごろくをプレイしている状況は表示すること。
・あとはすごろくとして成り立っていればどのようにプログラミングしてもよい(他のクラスが必要な場合は追加してもよい)。


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio
 [3.3] 言語:C++
[4] 期限: ([2008年10月16日
163デフォルトの名無しさん:2008/10/08(水) 22:33:18
[1] 授業単元:C言語入門
[2]
#include <stdio.h>

int add(int x, int y)
{
return x+y;
}

int main()
{
int a, b, c;
}
printf("calc a + b\n");
printf("input a b\n");
scanf("%d%d", &a, &b);
c = add(a,b);
printf("result: %d + %d = %d\n", a, b, c);
return 0;
}

void accum(int *x, int y)
{
*x = *x + y;
}
このポインタを使って上の関数addを用いずに同じ動作をするプログラムを作れ。

お願いします(__)
164デフォルトの名無しさん:2008/10/08(水) 22:38:31
>163
問題は正確に
165デフォルトの名無しさん:2008/10/08(水) 22:40:21
#include <stdio.h>
void accum(int *x, int y)
{
*x = *x + y;
}
int main()
{
int a, b;
printf("calc a + b\n");
printf("input a b\n");
scanf("%d %d", &a, &b);
printf("result: %d + %d", a, b);
>>163

accum(&a, b);
printf(" = %d\n", a);
return 0;
}

166デフォルトの名無しさん:2008/10/08(水) 23:12:03
すみません。
VC++をいじってるんですが、double型の値を画面に表示させると
「0.000000」といった感じで小数部が6桁表示されてしまいます。
この小数部の表示桁数を制限したいのですが、何か良い関数など
があれば教えて下さい。
よろしくお願い致します。
167デフォルトの名無しさん:2008/10/08(水) 23:16:43
printf("%5.2lf",12.34);
ってやったらどうだろう
168デフォルトの名無しさん:2008/10/08(水) 23:27:28
それは間違いだ
いやc99ならいける
というレスが続きそうな気がするので先に言っておこう
169デフォルトの名無しさん:2008/10/08(水) 23:29:23
>>168
C99なら…それでもC99ならきっとなんとかしてくれる…
170お願いします:2008/10/08(水) 23:58:33
【質問テンプレ】
[1] 授業単元: アルゴリズムデータ構造2
[2] 問題文(含コード&リンク): 52枚のトランプを5人に配るシミュレーション
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。
 [3.3] 言語: C言語
[4] 期限: 10月13日(月)まで
[5] その他の制限: 配列でswap関数を使って作ってもらいたいです。
171お願いします:2008/10/09(木) 00:16:55
>>170 アップローダの使い方がいまいち分からなかったので
ソースを貼ります このプログラムを書き換えてください。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i;
char *card[]={"Club","Diamond","Heaart","Spade"};
char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
srand(time(NULL));
i=rand()%52;
printf("%s%s\n",card[i/13],numb[i%13]);
return 0;
}
172デフォルトの名無しさん:2008/10/09(木) 00:37:56
>>171
こんなんでおk?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int*a,int*b){int c = *a;*a=*b;*b = c;}
int main(void)
{
&nbsp; &nbsp; int i,n;
&nbsp; &nbsp; char *card[]={"Club","Diamond","Heaart","Spade"};
&nbsp; &nbsp; char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
&nbsp; &nbsp; int cards[52];
&nbsp; &nbsp; for(i=0;i<52;++i)
&nbsp; &nbsp; &nbsp; &nbsp; cards[i] = i;
&nbsp; &nbsp; srand(time(NULL));
&nbsp; &nbsp; //カードをシャッフルする
&nbsp; &nbsp; for(i=0;i<52;++i)
&nbsp; &nbsp; &nbsp; &nbsp; swap(cards+i,cards+rand()%(52-i)+i);
&nbsp; &nbsp; for(i=0;i<52;++i)
&nbsp; &nbsp; &nbsp; &nbsp; printf("%cさん %s%s\n","ABCDE"[i%5],card[cards[i]/13],numb[cards[i]%13]);
&nbsp; &nbsp; return 0;
}
173デフォルトの名無しさん:2008/10/09(木) 00:39:59
ぎゃあ表示がバグってる。
たぶん空白だけだと思うけど念のためにもう一度。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int*a,int*b){int c = *a;*a=*b;*b = c;}
int main(void)
{
    int i,n;
    char *card[]={"Club","Diamond","Heaart","Spade"};
    char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    int cards[52];
    for(i=0;i<52;++i)
        cards[i] = i;
    srand(time(NULL));
    //カードをシャッフルする
    for(i=0;i<52;++i)
        swap(cards+i,cards+rand()%(52-i)+i);
    for(i=0;i<52;++i)
        printf("%cさん %s%s\n","ABCDE"[i%5],card[cards[i]/13],numb[cards[i]%13]);
    return 0;
}
174デフォルトの名無しさん:2008/10/09(木) 04:00:50
1から指定した数までを足し算で計算するプログラム教えてくれ。
175デフォルトの名無しさん:2008/10/09(木) 04:06:52
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d", a * (1 + a) / 2);
return 0;
}
176デフォルトの名無しさん:2008/10/09(木) 15:08:33
[1] 授業単元:ランダムウォークと配列
[2] 問題文(含コード&リンク): 左右に動く点がありそれが連続で右に動いた回数をカウントし出力
一連続は**回 二連続は++回
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ名とバージョン:Visual Basic 2005
 [3.3] 言語: C++
[4] 期限: 無期限

よろしくお願いします
177176:2008/10/09(木) 15:14:43
失敬
開発環境はMicrosoft Visual Studio 2005です
178デフォルトの名無しさん:2008/10/09(木) 17:20:26
>>176
#include <iostream>
#include <cstdlib>
int main()
{
int i, j, n, r1 = 0, r2 = 0, state = 0;

std::cout << "繰り返し回数 = ";
std::cin >> n;

for (i = 0; i < n; i++) {
j = std::rand() % 2; // 0で左、1で右
if (j == 1) // 右へ動いた
switch (state) {
case 0: // 左へ動いた直後か右へ二回動いた直後
r1++;
state = 1;
break;
case 1:// 右へ一回動いた直後
r1--;
r2++;
state = 0;
break;
default:
break;
}
else
state = 0;
}
std::cout << "一連続は" << r1 << "回 " << "二連続は" << r2 << "回" << std::endl;
}
179デフォルトの名無しさん:2008/10/09(木) 17:21:39
>>176
情報が足りなさすぎるということに気づけないレベルなんだなあ。
単位落としちゃえよ。
180デフォルトの名無しさん:2008/10/09(木) 19:56:21
181デフォルトの名無しさん:2008/10/09(木) 22:31:09
[1] 授業単元: C言語
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7765.txt
TCPサーバー http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt
TCPクライアント http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月10日(金)まで
[5] その他の制限:問題文に記述

よろしくお願いいたします
182デフォルトの名無しさん:2008/10/09(木) 22:33:32
すみません

TCPクライアント http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7767.txt

でした
183デフォルトの名無しさん:2008/10/09(木) 23:33:58
あと30分で終わらせとか(><
184デフォルトの名無しさん:2008/10/10(金) 00:10:16
[1] 授業単元: C++
[2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7768.txt
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月11日(土)まで
[5] 問題文が英語ですいません。期限が短いのですがお願い致します。
185デフォルトの名無しさん:2008/10/10(金) 00:26:53
[1] 授業単元:C言語
[2] 問題文:a(n+1)=3a(n)+4b(n)
b(n+1)=2a(n)+3b(n)
  の漸化式で1.4142135を算出するプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月10日 朝7時まで
[5] その他の制限:特になし

手計算だと5回目に算出できましたが、プログラムに仕方がわかりません;
186デフォルトの名無しさん:2008/10/10(金) 00:32:14
>>185
つ数学板

Cの課題とは言えない
187デフォルトの名無しさん:2008/10/10(金) 00:33:31
>>185
せめてnはいくつから始めるのかだけでも言え
それがないと漸化式が解けん
188デフォルトの名無しさん:2008/10/10(金) 00:36:49
>>186
 数学板行ったらCにいけゆわれました;

>>187
 すみません、nは0からです;
189デフォルトの名無しさん:2008/10/10(金) 00:44:22
>>184
#include <iostream>
using namespace std;
int main() {
    for (;;) {
        string name;
        int credit_standing, amount_owed, minimum_payment;
        cin >> name >> credit_standing >> amount_owed;
        if (cin.eof()) break;
        if (credit_standing > 6)
            minimum_payment = (amount_owed <= 20) ? amount_owed
                            : (amount_owed <= 100) ? 10
                            : 0.1 * amount_owed;
        else
            minimum_payment = amount_owed;
        cout << name << " with credit standing " << credit_standing
             << " must pay " << minimum_payment << endl;
    }
    return 0;
}
190デフォルトの名無しさん:2008/10/10(金) 00:58:56
>>185
a(0)とb(0)の初期値は?
191デフォルトの名無しさん:2008/10/10(金) 00:59:43
>>184 なんだCだったか
#include <stdio.h>
int main() {
    char name[32];
    int credit_standing, amount_owed, minimum_payment;
    while (scanf("%31s %d %d", name, &credit_standing, &amount_owed) == 3) {
        if (credit_standing > 6)
            minimum_payment = (amount_owed <= 20) ? amount_owed
                            : (amount_owed <= 100) ? 10
                            : 0.1 * amount_owed;
        else
            minimum_payment = amount_owed;
        printf("%s with credit standing %d must pay %d\n",
               name, credit_standing, minimum_payment);
    }
    return 0;
}
192デフォルトの名無しさん:2008/10/10(金) 01:06:07
>>190
a(0)=7
b(0)=5 です。
193デフォルトの名無しさん:2008/10/10(金) 01:11:24
>>192
#include <stdio.h>
double fa(double a_n, double b_n)
{
return 3 * a_n + 4 * b_n;
}
double fb(double a_n, double b_n)
{
return 2 * a_n + 3 * b_n;
}
int main()
{
double an = 7, bn = 5;
double tmp;
int i;
for (i = 0; i < 10; ++i) {
tmp = fa(an, bn);
bn = fb(an, bn);
an = tmp;
}
printf("%.10f\n", an / bn);
return 0;
}
194デフォルトの名無しさん:2008/10/10(金) 01:21:24
>>193
 ありがとうございます!!助かりました!!
195デフォルトの名無しさん:2008/10/10(金) 01:21:40
>>185 素直に再帰したいけどこれじゃダメなのかな
#include <stdio.h>
int a(int); int b(int);
int a(int n) {
    if (n == 0) return 7;
    else return 3 * a(n-1) + 4 * b(n-1);
}
int b(int n) {
    if (n == 0) return 5;
    else return 2 * a(n-1) + 3 * b(n-1);
}
int main() {
    printf("%.10lf\n", (double)a(10) / b(10));
    return 0;
}
196デフォルトの名無しさん:2008/10/10(金) 01:36:07
>>195
 いえいえ全然ダメじゃないです!本当にありがとうございます!
197デフォルトの名無しさん:2008/10/10(金) 01:39:40
>>189
ありがとうございました。
ちなみに各customerのコードはどのように入力すればいいのですか?
初心者ですいません。

>>191
すみません、言語はC++でした。
書き間違えてしまいました。
お手数おかけしました。
198181:2008/10/10(金) 01:52:36
>>183
すいません言葉足らずでした
改めて貼り直します

[1] 授業単元: C言語
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7765.txt
TCPサーバー http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt
TCPクライアント http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7767.txt
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月10日(金)13:00まで
[5] その他の制限:問題文に記述

引き続きよろしくお願いいたします
199デフォルトの名無しさん:2008/10/10(金) 06:56:37
200デフォルトの名無しさん:2008/10/10(金) 12:03:51
>>199
ありがとうございました
201デフォルトの名無しさん:2008/10/10(金) 12:16:32
なぜうp先は関西2ちゃんねらーなんですか
202デフォルトの名無しさん:2008/10/10(金) 15:52:19
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): ペイントソフトを作る
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: Visual studio .NET 2003
 [3.3] 言語: c,c++
[4] 期限: 2週間後の火曜まで
[5] その他の制限: MFCを使用しない

線の描画などはできましたが、ペンの太さや色の変更、 操作のやり直しなどが分かりません
どなたかよろしくお願いします
203デフォルトの名無しさん:2008/10/10(金) 16:39:02
>>202
単線だけでいいんじゃないの
機能つけるときりがないよ
アンドゥとか特に無理
204デフォルトの名無しさん:2008/10/10(金) 17:14:13
>>203
返事ありがとうございます
やはり、アンドゥ機能などは難しいのですかね?
今までc言語はやった事があったのですが
それに比べるとVC++は色々ややこし過ぎて困っています。

画面を左右に分けて、描画とパレットのように分けて作ろうと思っているのですが
雛形みたいなのはあるのでしょうか?
205デフォルトの名無しさん:2008/10/10(金) 19:34:20
1] 授業単元:C++
[2] 問題文:ファイルから波形を読み込み、FFTした結果をテキスト出力する
プログラムを作成せよ。

波形のデータは以下のようなものです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7771.txt

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限: [無制限]
[5] その他の制限:まだCの勉強が浅く、色々と検索してみましたがどうもバタフライ演算の
やり方が難しく分かりません。。何か説明不足があれば聞いてください。
FFTで詰まってしまい困っています。どうか、よろしくお願いしますm(_ _)m
206デフォルトの名無しさん:2008/10/10(金) 19:35:12
>>204
宿題できてんじゃん。
色・ふとさ固定、undoできないなどの機能制限がたくさんあるが、それは立派なペイントソフトだよ。

さらに機能追加をしたいのであれば必要に応じてデバイスコンテキストに関する質問その他を
やってけば?宿題スレじゃなく。
207デフォルトの名無しさん:2008/10/11(土) 01:02:05
どなたか>>100お願いできませんか
208デフォルトの名無しさん:2008/10/11(土) 02:44:59
>>207
鬱になったので、途中から手を抜いてしまった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7772.zip
PerlでもRubyでも好きなの使った方がラクダと思うけどキリンか。
209デフォルトの名無しさん:2008/10/11(土) 02:57:37
210デフォルトの名無しさん:2008/10/11(土) 02:59:33
>>204じゃなくて>>207でした(´・ω・`)
211デフォルトの名無しさん
>>202
線じゃなくて、点を打つようにすると太さ変えるのも楽になる
お絵かきチャットでは、線と線を結んでる場合が多いけど
ローカルで使えるペイントソフトはたいてい点を打って点を繋いでると思われる
点をつなげるのは、結構めんどい

アンドゥは、やり方がいくつかある
画像として管理するか
数値データとして管理するか、かな。
突貫でいいなら画像として管理するのを作ったほうが楽かもしれない
どちらが得意かによる