[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/05 20:54 / Filesize : 366 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/10/01(水) 07:28:51 BE:151474728-PLT(18888)]
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 115代目
pc11.2ch.net/test/read.cgi/tech/1217741118/

155 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 02:40:07 ]
ありゃageになってたすまぬ

156 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 04:21:05 ]
ttp://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0
> 2008年8月、史上最大の素数探求のための分散コンピューティング・プロジェクトである
> GIMPSによって、その時点で史上最大とされる素数が発見された。これは知られている中で
> 46番目のメルセンヌ素数、243112609 - 1 であり、十進記数法で表記したときの桁数は
> 1297万8189桁に及ぶ。
上記の史上最大とされる素数を求めるプログラムきぼんぬ

157 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 09:32:16 ]
>>156
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7764.c


158 名前:157 [2008/10/08(水) 09:51:30 ]
2^nの1桁目は0にならないから最後1引くのにループはいらなかった

159 名前:157 [2008/10/08(水) 09:54:31 ]
#define END_POINT 243112609

#define END_POINT 43112609
の間違いだな(>>156のをそのままコピペしてしまった)

160 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:22:20 ]
>>156
#include <stdio.h>
#define MER_P 43112609
int main(void)
{
int i;
printf("(2^%d) - 1 =\n", END_POINT);
for (i = 0; i < MER_P; i++)
{
printf("1");
}
printf("\n(2進数)\n");
return 0;
}


161 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:23:22 ]
間違えた
#include <stdio.h>
#define MER_P 43112609
int main(void)
{
int i;
printf("(2^%d) - 1 =\n", MER_P);
for (i = 0; i < MER_P; i++)
{
printf("1");
}
printf("\n(2進数)\n");
return 0;
}


162 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:38:31 ]
>163
問題は正確に

165 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:12:03 ]
すみません。
VC++をいじってるんですが、double型の値を画面に表示させると
「0.000000」といった感じで小数部が6桁表示されてしまいます。
この小数部の表示桁数を制限したいのですが、何か良い関数など
があれば教えて下さい。
よろしくお願い致します。

167 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:16:43 ]
printf("%5.2lf",12.34);
ってやったらどうだろう

168 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:27:28 ]
それは間違いだ
いやc99ならいける
というレスが続きそうな気がするので先に言っておこう

169 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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] 期限: 無期限

よろしくお願いします

177 名前:176 [2008/10/09(木) 15:14:43 ]
失敬
開発環境はMicrosoft Visual Studio 2005です

178 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:21:39 ]
>>176
情報が足りなさすぎるということに気づけないレベルなんだなあ。
単位落としちゃえよ。

180 名前:デフォルトの名無しさん [2008/10/09(木) 19:56:21 ]
>>179


181 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 22:31:09 ]
[1] 授業単元: C言語
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7765.txt
TCPサーバー kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt
TCPクライアント 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 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 22:33:32 ]
すみません

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

でした


183 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:32:14 ]
>>185
つ数学板

Cの課題とは言えない

187 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:33:31 ]
>>185
せめてnはいくつから始めるのかだけでも言え
それがないと漸化式が解けん

188 名前:デフォルトの名無しさん [2008/10/10(金) 00:36:49 ]
>>186
 数学板行ったらCにいけゆわれました;

>>187
 すみません、nは0からです;

189 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:58:56 ]
>>185
a(0)とb(0)の初期値は?

191 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:21:24 ]
>>193
 ありがとうございます!!助かりました!!

195 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:36:07 ]
>>195
 いえいえ全然ダメじゃないです!本当にありがとうございます!

197 名前:デフォルトの名無しさん [2008/10/10(金) 01:39:40 ]
>>189
ありがとうございました。
ちなみに各customerのコードはどのように入力すればいいのですか?
初心者ですいません。

>>191
すみません、言語はC++でした。
書き間違えてしまいました。
お手数おかけしました。


198 名前:181 mailto:sage [2008/10/10(金) 01:52:36 ]
>>183
すいません言葉足らずでした
改めて貼り直します

[1] 授業単元: C言語
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7765.txt
TCPサーバー kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt
TCPクライアント 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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 06:56:37 ]
>>198
TCPサーバー:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7769.txt
TCPクライアント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7770.txt


200 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 16:39:02 ]
>>202
単線だけでいいんじゃないの
機能つけるときりがないよ
アンドゥとか特に無理



204 名前:デフォルトの名無しさん [2008/10/10(金) 17:14:13 ]
>>203
返事ありがとうございます
やはり、アンドゥ機能などは難しいのですかね?
今までc言語はやった事があったのですが
それに比べるとVC++は色々ややこし過ぎて困っています。

画面を左右に分けて、描画とパレットのように分けて作ろうと思っているのですが
雛形みたいなのはあるのでしょうか?

205 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:34:20 ]
1] 授業単元:C++
[2] 問題文:ファイルから波形を読み込み、FFTした結果をテキスト出力する
プログラムを作成せよ。

波形のデータは以下のようなものです。
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 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:35:12 ]
>>204
宿題できてんじゃん。
色・ふとさ固定、undoできないなどの機能制限がたくさんあるが、それは立派なペイントソフトだよ。

さらに機能追加をしたいのであれば必要に応じてデバイスコンテキストに関する質問その他を
やってけば?宿題スレじゃなく。


207 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 01:02:05 ]
どなたか>>100お願いできませんか

208 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 02:44:59 ]
>>207
鬱になったので、途中から手を抜いてしまった。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7772.zip
PerlでもRubyでも好きなの使った方がラクダと思うけどキリンか。

209 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 02:57:37 ]
>>204
汚いけど、これじゃだめ??


kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7773.zip

210 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 02:59:33 ]
>>204じゃなくて>>207でした(´・ω・`)

211 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 08:13:31 ]
>>202
線じゃなくて、点を打つようにすると太さ変えるのも楽になる
お絵かきチャットでは、線と線を結んでる場合が多いけど
ローカルで使えるペイントソフトはたいてい点を打って点を繋いでると思われる
点をつなげるのは、結構めんどい

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

212 名前: ◆ZnBI2EKkq. mailto:sage [2008/10/11(土) 12:00:32 ]
[1] 授業単元:情報処理A
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7774.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Cygwin gcc 3.4.4
 [3.3] 言語:C
[4] 期限:2008年10月17日 16:00まで
[5] その他の制限:scanf関数は禁止、再帰呼び出しを用いること、エラー処理を入れること

今もやっているのですが、とても期限までに終わる気がしません。。。
誰か助けてください。


213 名前:デフォルトの名無しさん [2008/10/11(土) 15:35:33 ]
[1] 授業単元:c++ builder
[2] 加算平均を求めよ
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン: c++ builder5
 [3.3] 言語: どちらでも可
[4] 期限:2008年10月13日まで

テキスト1には   テキスト2には   テキスト3には
   8         3        4
   5         4        7
   7         9        9
   8         8        5 
   9         3        4
   9         8        9

という形で与えられており、これをOpendialogで読み込んで加算平均しMemo1に

5.33333
8.33333

5.33333
8.66666

のように計算したものを出したいのですがどのようにすればよいでしょうか?
全然わからなくて何度か自分なりにつくっているのですが、うまくいきません。
どなたか助けてもらえませんか
読み込みはなんとかできそうですが加算平均の配列の計算のプログラムの作り方が
どうしてもわかりません。
よろしくお願いします。



214 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:00:03 ]
>>213 Opendialog っていうのが分からなかった
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define NUMBER_OF_FILES 3
int main(void){
FILE *fp_in[NUMBER_OF_FILES], *fp_out;
char *filename_in[NUMBER_OF_FILES]={"テキスト1", "テキスト2", "テキスト3"}, *filename_out="Memo1";
double value[NUMBER_OF_FILES], sum;
int i;
for(i=0;i<NUMBER_OF_FILES;i++){
if((fp_in[i]=fopen(filename_in[i], "r"))==NULL){
fprintf(stderr, "\nError: %s cannot open.\n", filename_in[i]);
exit(1);
}
}
if((fp_out=fopen(filename_out, "w"))==NULL){
fprintf(stderr, "\nError: %s cannot open.\n", filename_out);
exit(2);
}
while(1){
for(i=0,sum=0.0;i<NUMBER_OF_FILES;i++){
if(fscanf(fp_in[i], "%lf", &value[i])!=1) break;
sum+=value[i];
}
if(i<NUMBER_OF_FILES) break;
fprintf(fp_out, "%g\n", floor(sum/NUMBER_OF_FILES*100000)/100000);
}
for(i=0;i<NUMBER_OF_FILES;i++) fclose(fp_in[i]);
fclose(fp_out);
return 0;
}

215 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:01:28 ]
>>212
マージャン知らないと不利な課題だな。

216 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:07:36 ]
>>212
www5f.biglobe.ne.jp/~kenmo/program/majang/yaku/yaku.html

参考になるかも?

217 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:49:40 ]
>>207 >>100
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7776.zip
一応動くようにしてみた。コマンドライン引数は、すべて実装しているわけではない。
後は好きなようにしてくれ。

218 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 17:14:43 ]
>>207 >>100
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7777.zip
>>217 の細かい修正とエラー処理追加しておいた。荒れそうなので、これくらいにしておく(鬱)。

219 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 20:58:59 ]
>>218ありがとうございます。
>>209ファイル入力、標準出力はうまくいきました。
標準入出力、ファイル入出力を成功させるにはどうしたらいいでしょうか。


220 名前:デフォルトの名無しさん [2008/10/11(土) 21:08:15 ]
[1] 授業単元: 測量学
[2] 問題文:"度"形式から"度分秒"形式への変換
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。
 [3.3] 言語: C言語
[4] 期限: 10月13日(月)まで
[5] その他の制限: 簡単な関数のみでお願いします。

(例)
35.2361 → 35°14′9.96″
変換式は、まず
35.2361の小数点部分の0.2361×60=14.166
この結果の整数部分の14が分になります。
そして、14.166の小数点部分の0.166×60=9.96
この結果の9.96が秒になります。
初期値35.2361も出力値35°14′9.96″も文字列です。
初期値が35.2361ではなく、何が初期値でも通用するようにしてください。
また、初期値の小数点以下が2361と4桁と決まっているわけでもありません。

221 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 21:46:26 ]
>>220
pc11.2ch.net/test/read.cgi/tech/1221144557/312-315

222 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:01:49 ]
>>220
#include<stdio.h>
#include<math.h>

void convert(char *dms, const char *deg)
{
double x, d, m;
sscanf(deg, "%lf", &x);
x = fabs(modf(x, &d) * 60);
x = modf(x, &m) * 60;
sprintf(dms, "%g°%g′%g″", d, m, x);
}

int main()
{
static const char deg[] = "-35.2361";
char dms[100];
convert(dms, deg);
printf("%s\n", dms);
return 0;
}

223 名前:213 [2008/10/11(土) 22:03:42 ]
>>214
即レスありがとうございます。大変感謝しています;;
Opendialogはc++builder5のダイアログでファイルを開くというコマンドを示しています
わざわざプログラムを書いていただいたのですが、これをc++builderに
置き換えていくことができませんでした。すいません;;
自分でも今まで書いていたのですが、Memo1には-2と一行書き出されるだけでした;
多分読み込んだ配列の計算としての基本的な計算とプログラムが間違っていると思うのですが、
自分ではどこが間違っているのかわかりませんでした。。
どなたかよければ教えていただけないでしょうか。よろしくお願いします><



224 名前:213 [2008/10/11(土) 22:08:40 ]
void __fastcall TForm1::Button1Click(TObject *Sender) ファイルを開いてテキスト1を読み込む
{
OpenDialog1->Execute();

Fname1 = OpenDialog1->FileName;

Edit1->Text = Fname1;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) テキスト2を読み込む
{
OpenDialog1->Execute();

Fname2 = OpenDialog1->FileName;

Edit2->Text = Fname2;
}

225 名前:213 [2008/10/11(土) 22:09:10 ]
void __fastcall TForm1::Button3Click(TObject *Sender) テキスト3を読み込む
{
OpenDialog1->Execute();

Fname3 = OpenDialog1->FileName;

Edit3->Text = Fname3;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender) 3つのテキストを加算平均してMemo1に書き出す
{
AnsiString kasan;
char Fname1[5],Fname2[5],Fname3[5];

for(m=0;m<=5;m++);
{
kasan = (Fname1[m] + Fname2[m] + Fname3[m])/3;
}

Memo1->Lines->Add(kasan);



226 名前:213 mailto:sage [2008/10/11(土) 22:10:31 ]
長文失礼しました。。
こんな感じです。


227 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 03:30:31 ]
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <fstream>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
private: // ユーザー宣言
AnsiString Fname1;
AnsiString Fname2;
AnsiString Fname3;

228 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 03:31:35 ]
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

これがUnit1.hね

それからUnit1.cpp

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname1 = OpenDialog1->FileName;
Edit1->Text = Fname1;
}

229 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 03:32:24 ]
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname2 = OpenDialog1->FileName;
Edit2->Text = Fname2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname3 = OpenDialog1->FileName;
Edit3->Text = Fname3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
std::ifstream ifs[3];

ifs[0].open(Fname1.c_str());
ifs[1].open(Fname2.c_str());
ifs[2].open(Fname3.c_str());
for (int i = 0; i < 6; i++) {
double sum, t1, t2, t3;

ifs[0] >> t1;
ifs[1] >> t2;
ifs[2] >> t3;
sum = (t1 + t2 + t3) / 3;
Memo1->Lines->Add(AnsiString(sum));
}
}

230 名前:213 mailto:sage [2008/10/12(日) 03:59:24 ]
>>227>>228>>229
ありがとうございました!
おかげで正しく算出することができました><

231 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 04:15:13 ]
[1] 授業単元:アルゴリズム
[2] 引数nに対して、1/nの小数表示を逆配列と動的配列を用いた形でプログラムせよ
  kk.kake.info.waseda.ac.jp/ads08/Cbasics/one-n-th.html
[3] 環境
 [3.1] OS: Windows
 [3.2] cygwin gcc 3.4
 [3.3] 言語: C
[4] 期限: [2008年10月12日00:00まで]
[5] 特になし

全然わかりません……どなたか助けて頂けると幸いです……

232 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 13:29:10 ]
>>231
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7778.c

233 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 14:05:25 ]
>>232
動きました!
あぁ…なんといっていいやら……ありがとうございます!!
これからプログラムの挙動について考えてみたいと思います




234 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:21:40 ]
てs

235 名前:デフォルトの名無しさん [2008/10/12(日) 21:59:38 ]
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データをファイルから読み込み(ファイル名をキーボードから入力して読み込ませる)、辞書順に並べ替えて最終結果のみを表示するプログラムを作成せよ。
ただし、データは改行で区切られており、文字列の最大長を64文字、データの最大個数を1000個(1000行)とする。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc (バージョン不明です)
 [3.3] 言語: C言語
[4] 期限: 2008年10月14日23:59まで
[5] その他の制限: バブルソートの基本らしいのですが…str〜、getsなど使用する関数や、とりあえず、配列とポインタを使わないといけないんだろう、など断片的なものにしか自信が、持てずプログラムを組んでみたものの実行できません…orz
助けてください…。


236 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:05:11 ]
>>235
問題文には含んでないけど
結局バブルソートは自分で書かなきゃだめなのか?
平たくいえばqsortとstrcmp使っていいか?


237 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:15:10 ]
>>236
qsortという関数はまだ習っていないのでなるべく控えたいのですが、strcmpは自分がプログラムを組んでみた時にも使用しましたので使っていただいて大丈夫です。
早速ありがとうございます。

238 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:31:36 ]
>>235
#include<stdio.h>
#include<string.h>
#define WORD_NUM_MAX 1000
#define WORD_LEN_MAX 64
int main(void){
char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p;
char filename[256];
int i, j, word_num;
FILE *fp;
printf("Input filename : ");
scanf("%255[^\n]", filename);
if((fp=fopen(filename, "r"))==NULL) return 1;
for(word_num=0;word_num<WORD_NUM_MAX;word_num++){
if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break;
if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0';
}
fclose(fp);
for(i=0;i<word_num;i++){
for(j=0;j+1<word_num-i;j++){
if(strcmp(word[j], word[j+1])>0){
strcpy(tmp, word[j]);
strcpy(word[j], word[j+1]);
strcpy(word[j+1], tmp);
}
}
}
for(i=0;i<word_num;i++) puts(word[i]);
return 0;
}

239 名前:デフォルトの名無しさん [2008/10/12(日) 23:21:54 ]
[1] 授業単元:c++ builder
[2] 3科目4人分の得点と科目ごと、個人ごとの平均点を配列を使って作れって
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン: c++ builder5
 [3.3] 言語: どちらでも可
[4] 期限:2008年10月13日まで



240 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:57:56 ]
>>239
とりあえずgccでは動いた。

#include <stdio.h>

int main(int argc, char *argv[]) {
int score[4][3] = {{90,73,82},{60,50,55},{71,59,80},{95,88,80}};
int i,j;

double personAvg[4];
double classAvg[3];

printf("人別平均\n");

for(i=0; i<4; i++) {
for(j=0; j<3; j++) {
personAvg[i] += score[i][j];
}
personAvg[i] /= 3;
printf("%f\n", personAvg[i]);
}

printf("科目別平均\n");

for(j=0; j<3; j++) {
for(i=0; i<4; i++) {
classAvg[j] += score[i][j];
}
classAvg[j] /= 4;
printf("%f\n", classAvg[j]);
}
}

241 名前:デフォルトの名無しさん [2008/10/13(月) 00:07:50 ]
>240
ありがとうございました・・・

世の中すてたもんじゃないっておもいました・・
本当に困ってたので・・・

242 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:17:33 ]
>>241
妙な授業単元に問題文
ついでに抜けてる部分を修正できると思えない人間
言葉からにじみ出てくる、「俺は悪くないよ」オーラ
世の中ろくなもんじゃないよ

243 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:28:25 ]
それは本当の優しさなのだろうか。





244 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:53:39 ]
下記の問題をやっていただける方いませんか?よろしくお願いします
[1]
情報処理
[2]
ある自然数nがある。
このnを和に分解するすべての場合を列挙しなさい。
なお、以下の例のように順列でも組み合わせでもかまわない。

n = 4
1 1 1 1
1 1 2
1 2 1
1 3
2 1 1
2 2
3 1

n = 4
1 1 1 1
1 1 2
1 3
2 2
3 1

[3]
 [3.1] Linux
 [3.2] gcc4.0
 [3.3] C言語
[4]
10月15日23:59
[5] 再帰について習いました

245 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:18:06 ]
>>244
#include<stdio.h>
#define N_MAX 100
int g_result[N_MAX];
void bar(int result_num, int n){
int i;
if(n<=0){
for(i=0;i<result_num;i++) printf(" %d", g_result[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++){
g_result[result_num]=i;
bar(result_num+1, n-i);
}
}

void foo(int n){
int i;
if(n>N_MAX) return;
for(i=1;i<=n-1;i++){
g_result[0]=i;
bar(1, n-i);
}
}
int main(void){
int n=4;
printf("n = %d\n", n);
foo(n);
return 0;
}

246 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:55:57 ]
じゃあ僕は組み合わせで。

#include<stdio.h>
#include<string.h>
int partition(int n,int m,char *exp);
int main(void){
int i,n,c;
do{
printf("nを入力してください。 n=");
scanf("%d",&n);
c=0;
for(i=n;i>0;i--) c += partition(n,i,"");
printf("Total:%d\n",c);
}while(n != 0);
return 0;
}
int partition(int n,int m,char *exp){
int i,c=0;
char ex[100]="";
if(n==m){
printf("%s%d\n",exp,m);
return 1;
}
if(m==0) return 0;
if(n>m){
sprintf(ex,"%s%d+",exp,m);
for(i=m;i>0;i--) c += partition(n-m,i,ex);
return c;
}
return 0;
}

247 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:57:17 ]
>>245
どうもありがとうございました。

248 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:58:05 ]
>>246
こちらもどうもありがとうございました。

>>245,246
ソースを理解していきたいです。

249 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 11:00:03 ]
どなたか >>205 お願いできませんでしょうか・・

250 名前:デフォルトの名無しさん [2008/10/13(月) 12:54:17 ]
[1] 授業単元: C
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7781.txt
[3] 環境
 [3.1] OS: WindowsXP 
[3.2] コンパイラ名とバージョン:VB2008
 [3.3] 言語: C++
[4] 期限: 10/14まで
[5] その他の制限: 特になし。

どなたか、お願いします。

251 名前:デフォルトの名無しさん [2008/10/13(月) 14:09:18 ]
>>249
ネットでぱくれ

252 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:34:26 ]
2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。

という問題です。
//二次方程式の根を計算するプログラム
#include <stdio.h>
void main () {
double a, b, c, d;
printf("3つの数字を入力してください");
scanf("%d %d %d", &a ,&b ,&c);
d = b*b-4*a*c;
printf("二次方程式の根は%d\n",d);
}

のように書いたのですがすべて答えが同じになってしまいます
お願いします。

253 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:36:35 ]
%d →%f



254 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:38:04 ]
>>252
> 2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。
>
> という問題です。
> //二次方程式の根を計算するプログラム
> #include <stdio.h>
> void main () {
> double a, b, c, d;
> printf("3つの数字を入力してください");
> scanf("%d %d %d", &a ,&b ,&c);
> d = b*b-4*a*c;
> printf("二次方程式の根は%d\n",d);
> }
>
> のように書いたのですがすべて答えが同じになってしまいます
> お願いします。

> scanf("%d %d %d", &a ,&b ,&c);
scanf("%lf %lf %lf", &a ,&b ,&c);

> printf("二次方程式の根は%d\n",d);
printf("二次方程式の根は%f\n",d);


255 名前:235 [2008/10/13(月) 16:30:13 ]
>>238
お礼が遅れてすいません、ありがとうございます。
…しかしながら…自分の説明不足のせいで大変申し訳ないのですが、
問題文中の「辞書順」=「大文字小文字も区別する」ということなのです…。
つまり、
A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<z
このように並べ替えたいのです。
>>238さんのプログラムを参考に自分でももう少し考えてみますが、あまり自信がないので手助けしていただけたら幸いです…。

大変申し訳ないです。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<366KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef