[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日
[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を用いずに同じ動作をするプログラムを作れ。
お願いします(__)
>163
問題は正確に
#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;
}
すみません。
VC++をいじってるんですが、double型の値を画面に表示させると
「0.000000」といった感じで小数部が6桁表示されてしまいます。
この小数部の表示桁数を制限したいのですが、何か良い関数など
があれば教えて下さい。
よろしくお願い致します。
printf("%5.2lf",12.34);
ってやったらどうだろう
それは間違いだ
いやc99ならいける
というレスが続きそうな気がするので先に言っておこう
>>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;
}
>>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)
{
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;
}
ぎゃあ表示がバグってる。
たぶん空白だけだと思うけど念のためにもう一度。
#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から指定した数までを足し算で計算するプログラム教えてくれ。
#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] 期限: 無期限
よろしくお願いします
177 :
176:2008/10/09(木) 15:14:43
失敬
開発環境はMicrosoft Visual Studio 2005です
>>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;
}
>>176 情報が足りなさすぎるということに気づけないレベルなんだなあ。
単位落としちゃえよ。
180 :
デフォルトの名無しさん:2008/10/09(木) 19:56:21
あと30分で終わらせとか(><
184 :
デフォルトの名無しさん:2008/10/10(金) 00:10:16
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回目に算出できましたが、プログラムに仕方がわかりません;
>>185 せめてnはいくつから始めるのかだけでも言え
それがないと漸化式が解けん
188 :
デフォルトの名無しさん:2008/10/10(金) 00:36:49
>>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;
}
>>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
>>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;
}
>>193 ありがとうございます!!助かりました!!
>>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;
}
>>195 いえいえ全然ダメじゃないです!本当にありがとうございます!
197 :
デフォルトの名無しさん:2008/10/10(金) 01:39:40
>>189 ありがとうございました。
ちなみに各customerのコードはどのように入力すればいいのですか?
初心者ですいません。
>>191 すみません、言語はC++でした。
書き間違えてしまいました。
お手数おかけしました。
198 :
181:2008/10/10(金) 01:52:36
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を使用しない
線の描画などはできましたが、ペンの太さや色の変更、 操作のやり直しなどが分かりません
どなたかよろしくお願いします
>>202 単線だけでいいんじゃないの
機能つけるときりがないよ
アンドゥとか特に無理
204 :
デフォルトの名無しさん:2008/10/10(金) 17:14:13
>>203 返事ありがとうございます
やはり、アンドゥ機能などは難しいのですかね?
今までc言語はやった事があったのですが
それに比べるとVC++は色々ややこし過ぎて困っています。
画面を左右に分けて、描画とパレットのように分けて作ろうと思っているのですが
雛形みたいなのはあるのでしょうか?
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
>>204 宿題できてんじゃん。
色・ふとさ固定、undoできないなどの機能制限がたくさんあるが、それは立派なペイントソフトだよ。
さらに機能追加をしたいのであれば必要に応じてデバイスコンテキストに関する質問その他を
やってけば?宿題スレじゃなく。
>>202 線じゃなくて、点を打つようにすると太さ変えるのも楽になる
お絵かきチャットでは、線と線を結んでる場合が多いけど
ローカルで使えるペイントソフトはたいてい点を打って点を繋いでると思われる
点をつなげるのは、結構めんどい
アンドゥは、やり方がいくつかある
画像として管理するか
数値データとして管理するか、かな。
突貫でいいなら画像として管理するのを作ったほうが楽かもしれない
どちらが得意かによる