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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:40:55 ]
あなたが解けない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++の宿題を片付けます 109代目
pc11.2ch.net/test/read.cgi/tech/1212895856/

528 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:07:53 ]
>>514
> long型を対象にして2から2^31-1までの素数を求めてみよ。
PCの性能にもよるけど、物理的に時間が掛かるんで却下。

529 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:12:20 ]
>>526
yes

530 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:22:56 ]
>>499
BITREE_NODE *inputBITree(char *str[], int len, int *end){
〜〜省略〜〜
*end = i + i;
return p;
}

*end = i + i; を *end = i + 1;
に変更

531 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:41:29 ]
>>522
>wikiのマスターマインド(Hit&Blow)

実行してみたんですが、どうやって終わらせるんですか?

532 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:42:56 ]
Ctrl と c 同時押しすれば終わるんじゃない

533 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:47:29 ]
>>528
70.3秒かかったよ
これって長すぎる?

アルゴリズムはエラトステネスの篩使用

534 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:54:44 ]
>>533
>>514の条件はエラトステネスの篩じゃないだろ

535 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:58:59 ]
エラトステネスの篩じゃね?

536 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:00:12 ]
全然違う



537 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:00:27 ]
ふるいじゃないよ

538 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:11:13 ]
>>530
ありがとうございます。数字はしっかりでました!
実行例にある

入力データ [ 6 [ 8 [ 1 _ _ ] 5 _ _ ] ] [3 _ [ 9 _ _ ] ] ]

というのはどうやって出せばいいのでしょうか?

539 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:13:27 ]
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7035.txt
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland C++Compiler V2.31
 [3.3] 言語: C
[4] 期限: 08年6月25日(水曜日・明日)
[5] その他の制限: 特に無し

就活で浦島状態です、助けてください

540 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:14:54 ]
>>539
浦島状態って。
C#ならまだしも、いつの時代の人?

541 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:34:36 ]
>>538
printBITree(p, 0, 0);
値の間にスペース入れたいならprintSubtreeの中をいじくる

542 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:37:42 ]
>>539
#include <stdio.h>
int main(void)
{
char str[110], *p[10], temp[11];
int i, j, cnt[10] = {0}, n = 0;
p[0] = str;
for(i=0; i<10; i++) {
printf("入力文字列==>");
fgets(temp, sizeof temp, stdin);
for(j=0; temp[j]; j++) if(temp[j] == '\n') temp[j] = '\0';
if(strcmp(temp, "end")==0 || strcmp(temp, "END")==0) break;
for(j=0; j<n; j++) {
if(strcmp(p[j], temp)==0) {
cnt[j]++;
break;
}
}
if(j==n) {
char *dst = p[n], *src = temp;
while(*dst++=*src++);
p[n+1] = dst;
cnt[n]++;
n++;
}
}
printf("*** 集計結果 ***\n");
for(i=0; i<n; i++) printf("%s : %d\n", p[i], cnt[i]);
return 0;
}

543 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:52:47 ]
#include <string.h>忘れてた

544 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:55:44 ]
strcmp関数は作ってしまえ

545 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:09:56 ]
[1] 授業単元:計算機
[2] 問題文(含コード&リンク):
8パズルを解く上で、状態の重複をチェックするにはどのようなプログラムを加えればよいか考えよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 明日
どなたかよろしくお願いします。

546 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:14:14 ]
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
ポインタの課題で、数値の大小を判別するプログラムです。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7036.txt
[3] 環境
 [3.1] OS: VineLinux
 [3.2] コンパイラ名とバージョン: GNOME gcc
 [3.3] 言語: C言語
[4] 期限:6/25 PM:2時



547 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:17:08 ]
>>506
よろしく

548 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:18:30 ]
8パズルとやらをググってみたけど
>状態の重複
ってどんな状況だ?
こんなんか?
bool bCheckOverlap(int x, int y){
if(puzzle[x][y]>0){
return false;
}
return true;
}

549 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:22:59 ]
動かしたとき同じ状態に戻らないようにするためのチェックじゃない?

550 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:25:05 ]
>>546
A
void func(int *a, int *b);

B
void func(int *a, int *b)
{
if(*a < *b) {
int temp = *a:
*a = *b;
*b = temp;
}
}

551 名前:545 mailto:sage [2008/06/24(火) 01:26:32 ]
>>549さんの仰るとおり、過去と同じ状態になっていないかチェックして無駄な処理をしないようにというものです。
言葉足らずで申し訳ありません。

552 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:32:44 ]
>>550
ありがとうございます。
「void func(int *a, int *b);」こうやって宣言するんですね、この段階で自分はつまづいてました。
またこちらもお願いできますでしょうか?これで課題がすべて終わるのでお願いします。
[1] 授業単元: アルゴリズム
[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秒)

(解説)
main関数側で各関数を用意し、計算する関数を呼び出す。
結果の表示は関数の呼び出しが終わった後、main関数側で行えばよい。
秒→時間、分、秒の計算は単純に割り算の商と余りを用いればよい。
[3] 環境
 [3.1] OS: VineLinux
 [3.2] コンパイラ名とバージョン: GNOME gcc
 [3.3] 言語: C言語
[4] 期限:6/25 PM:2時

553 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:39:25 ]
>>545
1 2 3
4 5 6
7 8 -
という状態なら123456780という数字を覚えておくとか。
3 4 2
1 7 -
8 5 6
という状態なら342170856という数字
こういうのをソートされた線形リストにいれておけばまあ悪くないのでは?

554 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:42:38 ]
>>552
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7038.c

555 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:46:55 ]
>>545

[1]回答レベル:ヒント
[2]コード:なし
[3]環境:省略
[4]コメント:
つ9進数

556 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:49:16 ]
>>554
本当に回答がお早いです。自分もそれくらいになりたいですorz
なにはともあれ、ありがとうございます。
本当に助かりました。



557 名前:553 mailto:sage [2008/06/24(火) 02:01:26 ]
>>553
線形リストじゃ手が長くなった場合の探索コストが大きいかな。メモリも食うし。
静的に9^9Byte≒370MB確保しておくのもなんだかアレだしなんか良い案あるかしら

558 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 02:04:30 ]
[1] 授業単元: C言語演習U
[2] 問題文(含コード&リンク):
n個の文字列C0, C1, C2, ... ,Cn-1を読み込んだ後、C0, C1, C2, ... ,Cn-1を
アルファベット順に並び替える関数を作成し、main関数でこの関数を呼び出すようにせよ。
ここでいうアルファベット順とは、例えば"Report Ha Dase"と入力すると、
" aaDeeHoprRst"のように大文字と小文字がある場合は小文字が先にくるように
アルファベットの並べ替えを行なう。
(ヒント)
文字列を読み込んで、アスキーコード順に並び替えを行なう。
ただし、大文字と小文字が混在するので、そこは各自テクニックが必要。
なお、入力文字列中の「空白」は並び替え後、先頭にくる。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限:2008.6.24 午後6時までの急ぎでお願いします。m(_ _)m

559 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:14:08 ]
>>558
空白、アルファベット以外は出現順
#include <stdio.h>
#include <string.h>

void alphabetsort(char *dst, const char *src)
{
int count[256] = {0}, idx, i;
char *p, label[256] = " aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
idx = strlen(label);
for( ; *src != '\0'; src++){
p = strchr(label, *src);
if(p) count[p - label]++;
else{ label[idx] = *src; count[idx] = 1; idx++; }
}
for(i = 0; i < 256; i++) while(count[i]-- > 0){ *dst = label[i]; dst++; }
*dst = '\0';
}

int main(void)
{
char buf[100], dst[100], *p;
fgets(buf, sizeof(buf), stdin);
p = strchr(buf, '\n');
if(p) *p = '\0';
alphabetsort(dst, buf);
printf("%s\n", dst);
return 0;
}

560 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:15:24 ]
>>558
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7039.c

561 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:30:18 ]
>>559
>>560
両方、ありがとうございます。
どちらもせっかく作ってもらったので、両方使いたいところですが
今回は>>560さんのコードを使わせていただきます。
コード中の説明やコードの作りが分かりやすかったので

>>559さんのコードもアスキーコード使用が基本的で良かったのですが、
文字列の並び替え部分が若干難しかったので、今回はごめんなさい。

562 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:40:13 ]
文字列を並び替える関数であって、並び替えた文字列を表示する関数じゃないと思うんだが。

563 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:43:49 ]
それなら、順番に表示する部分を配列に格納すりゃ良い

564 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:49:39 ]
n個の文字列って指定からガン無視してるソースに突っ込むなんてw

565 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:58:18 ]
でたよ、ソースを書きもせず、自分のアイデアも提示せずに
批判しかしない基地外。

566 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:59:34 ]
>>561 本人?が良しとした時点で後からいちゃもんつけてもなぁ・・・
後は本人が出来るなら、適当にやるだろうし。



567 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:11:23 ]
並び替えならバブルソートだ!
void swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
void sort(char *str)
{
int i, j, len = strlen(str);

for(i=len-1; i>0; i--) {
for(j=0; j<i; j++) {
if(tolower(str[j]) > tolower(str[j+1])) swap(str + j, str + j + 1);
else if(tolower(str[j])==tolower(str[j+1])) {
if(isupper(str[j]) && islower(str[j+1])) swap(str + j, str + j + 1);
}
}
}


568 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:13:02 ]
ソースを書かずに口出しする奴の方がどうかとw

569 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:14:08 ]
>>561
>>567のコードを使ったら、>>559,>>560両方から殴られることを
覚悟したほうがいい。w

570 名前:質問者のマナー遵守のお願い mailto:sage [2008/06/24(火) 06:40:52 ]
宿題を片付けるという趣旨とは言えども、回答テンプレに沿っていない
すなわち、コードの品質に対する明示が無かったり、コメントが一切
無くコードそのものやコードへのリンクだけの場合は、参考に留める
だけに留め、あくまでも独力でトライすることをおすすめします。
多くのコードは良心的で真面目ですが、中には>>438のような悪辣
なコードもありますので、参考以上の扱いをすると災難に合う場合も
あります。

なお、小さなプログラムコードの場合、簡単にその優劣は判断出来ま
せん。コードは数学の問題と異なり、一度解いてしまえばおしまい
というわけではなく、何度も実行されて書き直されて真価が評価され
るものです。
宿題を自力で解けないレベルの人がその優劣の判断を出来ると
は到底思えません。
複数の回答が出た場合でも、それに優劣を付けていると取られかね
ない言動を取ることは質問者は絶対に避けて下さい。

571 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:44:23 ]
自分のソースにミスがあった場合、ソース書かなくても突っ込んでくれると有難いがな。

572 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 08:56:20 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6983.txt
              ヒント:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7040.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler
 [3.3] 言語:C言語
[4] 期限:水曜まで
[5] その他の制限:ポインタまで習いました

ヒントをくれました。それでもわからないのでよろしくお願いします

573 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 09:41:26 ]
[1] 授業単元:プログラミング

[2] 問題文 
   3×3の行列の掛け算を行う関数を作り、標準入力から入力した行列を掛け算するプログラムを書け
       (ヒント 2重配列が必要。 double matrix[3][3];を使用)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月26日まで
[5] その他の制限:
 おねがいします><

574 名前:491 mailto:sage [2008/06/24(火) 10:00:41 ]
自己解決しますた

いないかもしれないけど、協力して下さった方々 どうもです

575 名前:456 mailto:sage [2008/06/24(火) 10:54:36 ]
>>486
わかりやすい回答ありがとうございます!
次からは自分でもできるよう参考してがんばります。

576 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:08:56 ]
>>573 環境: 2005 Express + SDK
#include <stdio.h>
int main() {
int i, j, k;
double matrix1[3][3], matrix2[3][3],matrix3[3][3];
for(i=0;i<3;i++) {
printf("INPUT 3 numbers. (%d of 3):", (i%3)+1 );
scanf("%lf%lf%lf", &(matrix1[i][0]), &(matrix1[i][1]), &(matrix1[i][2]));
}
for(i=0;i<3;i++) {
printf("INPUT 3 numbers. (%d of 3):", (i%3)+1 );
scanf("%lf%lf%lf", &matrix2[i][0], &matrix2[i][1], &matrix2[i][2]);
}

for(i=0;i<3;i++)
printf("%lf\t%lf\t%lf\n", matrix1[i][0], matrix1[i][1], matrix1[i][2]);
putchar('\n');
for(i=0;i<3;i++)
printf("%lf\t%lf\t%lf\n", matrix2[i][0], matrix2[i][1], matrix2[i][2]);
puts("");
// A(i,k) * B(k,j) = C(i,j)
for(i=0;i<3;i++)
for(j=0;j<3;j++) {
matrix3[i][j] = 0.0f;
for(k=0;k<3;k++)
matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
}
for(i=0;i<3;i++)
printf("%lf\t%lf\t%lf\n", matrix3[i][0], matrix3[i][1], matrix3[i][2]);
}



577 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:16:06 ]
>>408
いろいろ試してみたが、AMDのプロセッサ(AthlonX2)はL1 Data
Cacheが2Way-Set AssosiativeのためにCore 2 Duoのような
8Way-Set Assosiativeのマシンに特定の場面で大幅に負ける事がある。

データ・テーブルも今回は2個だがこれが10個〜20個と増えてくると
AMDとIntelではあまり差がなくなってくるだろう。

578 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:41:06 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7041.txt
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ名とバージョン:Borland C++Compiler
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:特になし

お願いします!

579 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:12:49 ]
>>578
#include <stdio.h>

float interest(float r, int n)
{
float ret = 1.0;
int i;

for(i=0; i<n; i++) ret *= (1 + r / 100);

return ret;
}

int main(void)
{
float r;
int y, n;

printf("利率(r):");
scanf("%f", &r);
printf("金額(y):");
scanf("%d", &y);
printf("期間(n):");
scanf("%d", &n);

printf("返済金額は%d円です", (int)(y * interest(r, n)));

return 0;
}

580 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:16:30 ]
>>577
ちょっとスレ違いになるかも知れないが、何故L1Chacheの構造が
原因であると断定できるのか教えて欲しいと思います。

581 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:17:30 ]
1] 授業単元:
[2] 問題文(含コード&リンク):
次々に入力される値を合計する処理である。
変数dtにデータを入力する処理を繰り返し行い、
入力終了後その合計sumと平均aveを出力する。
なお、入力データは正の整数とし、
入力するデータがなくなったら、
終わりの印として負の値を入力する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限:
[5] その他の制限:

582 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:18:58 ]
1] 授業単元:
[2] 問題文(含コード&リンク):
次の説明を読んで、プログラムを作成しなさい。

小数で入力される気温のデータを5℃単位の整数に丸めたい。
キーボードからdouble型変数kに気温を入力し、
丸めた数値はint型変数gに求め、gを画面に出力する。

ただし入力データに負の気温はないものとする。

また必要なら、
計算途中の中間結果を格納するint型変数wなど、
適宜変数を用意すること。

【実行例】
温度を入力 22.4
約20度です

温度を入力 22.5
約25度です

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限:
[5] その他の制限:なし
2問ありますが、よろしくお願いします

583 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:46:07 ]
>>581
#include <iostream>

int main()
{
int dt, i = 0, sum = 0, ave;

while(1) {
std::cin >> dt;
if(dt<0) break;
sum += dt;
i++;
}

if(i!=0) {
ave = sum / i;
std::cout << "合計:" << sum << "平均:" << ave << std::endl;
}
}

584 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:54:48 ]
>>582
#include <iostream>

int main()
{
int g, w;
double k;

std::cout << "温度を入力";
std::cin >> k;

for(g=0; g<k; g+=5);
if(g - k > 2.5) g -= 5;

std::cout << "約" << g << "度です" << std::endl;
}

585 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:27:16 ]
>>581
[1]コード品質:未チェック
[2]コード:直接記入
#include <stdio.h>
#include <stdlib.h>
int main(void){
int sum,count=0,current;
char s[32],*ss;
do{
if (ss==fgets(s,32,stdin)) continue;
while(*ss){ if( (*ss=13)||(*ss=10) )*ss=0;ss++;}
if(( current=atoi(s) )<0)continue;
count++;sum+=sum+current;
printf("%6d:value=%6d sum=%6d average=%lf¥n",count,current,sum,
(double)sum/(double)count);
}while(0);
retrun(0);
}
[3] 環境:Linux/Gcc/C++
[4]コメント:上記コードはC++でもコンパイルできる筈です。
C++はCのほぼスーパーセットです。ループの中で、stdinから文字列
を読み込み、atoi関数で整数に変換しています。平均の計算はdoubleで
行っています。駄コードですがご参考にどうぞ。

586 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:35:16 ]
駄コードってレベルじゃねーぞ



587 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:48:46 ]
>>585みたいな明らかにおかしい、見てるだけで頭が痛くなるようなコードにも
ソースを書かなきゃ文句言っちゃいかんのか?

588 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:53:10 ]
チラシの裏にでも書いてろ

589 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 15:25:15 ]
>>541
できました!ありがとうございます。
ところで、資料に書いてあったようにbitree.hを作ってインクルードする意味ってなんなんでしょうか?
また、bitree.hを作る場合は、bitree.hに一応
int main(int args, char **argv);
BITREE_TYPE sumValue(BITREE_NODE *p);

なども書き加えておいたほうがよいのでしょうか?意味はない気がしますが・・

590 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:18:17 ]
かなり考えましたが、綺麗な形の木じゃない場合の計算がわからなかったのでお願いします。
[1] 授業単元:プログラミング
[2]問題リンク:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7042.txt
[3]期限:2008年6月27日

591 名前:デフォルトの名無しさん [2008/06/24(火) 16:19:08 ]
このスレをいろんな大学に通報すればいいんですねわかります

592 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:53:51 ]
通報なんかしなくてもこんな所で丸投げする奴はどうせ卒業できん

593 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:28:14 ]
>>585 点○虫か。コード品質なんて項目要らない。
>>581
#include <stdio.h>
#include <stdlib.h>

int main(void){
// int sum, count=0, current;
  int sum=0, count=0, current;
  char s[32], *ss;
  do{
//   if (ss == fgets(s, 32, stdin))
    if (!(ss = fgets(s, 32, stdin)))
      continue;
    while(*ss){
//     if( (*ss=13) || (*ss=10) )
      if( (*ss==13) || (*ss==10) )
        *ss = 0;
      ss++;
    }
    if(( current = atoi(s) ) < 0)
      continue;
    count++;
//   sum += sum + current;
    sum += current;
    printf("%6d:value=%6d sum=%6d average=%lf\n",
      count, current, sum, (double)sum/(double)count);
// }while(0);
  }while(current >= 0);
// retrun(0);
  return(0);
}

594 名前:お願いします [2008/06/24(火) 19:20:36 ]
C++言語を使ってスタックを実現するクラスを定義し,その実行を確認するプログラム(main関数)を書く.

クラス名はstackとする.

要素のデータの型はintとする.
格納できる要素の最大数は10とする.
公開されているインターフェースは下記のものとする.

void push(int data);
int pop();

初期設定は,以下のいずれかにより行う.
(1) クラスのコンストラクタ(constructor)の機能を用いる.
(2) 初期設定用のインターフェース(init)を定義し,スタックを使用する前に,initを呼び出す.

機能確認のためのインターフェース(たとえばスタック内のデータを表示させる)を追加してもよい.

上記の仕様を満たさない(インターフェース名が上記と一致しない等)プログラムは対象としない.


595 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 19:50:28 ]
#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<int> stack;
stack.push(1);
stack.push(2);
cout << stack.pop() << endl;
cout << stack.pop() << endl;
}

じゃ駄目ですか(><;

596 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 19:53:19 ]
>>594
#include<iostream>
#include<vector>
class stack{
public:
void push(int data){ if(m_data.size()<m_datanummax) m_data.push_back(data); }
int pop(){
int ret=-1;
if(m_data.size()>0){
ret=m_data[m_data.size()-1];
m_data.pop_back();
}
return ret;
}
void display(){ for(unsigned i=0;i<m_data.size();i++) std::cout << m_data[i] << std::endl; }
stack(){m_datanummax=10;}
stack(int datanummax):m_datanummax(datanummax){};
private:
std::vector<int> m_data;
unsigned m_datanummax;
};
int main(void){
stack a, b(5);
for(int i=0;i<20;i++){
a.push(i);
b.push(i);
}
a.display();
std::cout<<"-----"<<std::endl;
b.display();
return 0;
}



597 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 20:02:32 ]
添削屋が虫作ってどーすんだよw

598 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:23:54 ]
麻呂のクソースはいらんかえぇ〜

599 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:32:00 ]
>>589
main関数はヘッダで宣言したらダメ
sumValue関数はヘッダで宣言してもいい
bitree.hを作ってincludeさせてるのは勉強のためじゃない?
main関数と同じファイルに関数を定義してるなら普通はわざわざ宣言部をヘッダに分けない
main関数以外をbitree.cとかいうファイルにでも定義するならbitree.hを作る必要がある
分割コンパイルについて知りたいなら、ググるか他のC言語質問スレに質問しましょう

600 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:40:24 ]
>>590
完全2分木って書いてあるけど、綺麗な形の木じゃない場合ってことは
完全2分木ではない場合を考えろってこと?

601 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:40:44 ]
>>599
わかりました、ありがとうございました!

602 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:06:29 ]
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7043.txt
[3] 環境
 [3.1] OS:XP
 [3.3] 言語: C++
[4] 期限: 08年06月30日
[5] その他の制限:もしやっていただけるなら出来るだけ簡単に、分かりやすく(初心者でも理解できる構成)


603 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:10:31 ]
問1
A : [] B : 0 C : * D : * E : * F : 0 G : vc


604 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:21:00 ]
>>603
エスパーいないなー

605 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:21:45 ]
問3
A : d B : d C : s

606 名前:デフォルトの名無しさん [2008/06/24(火) 22:50:35 ]
1



607 名前:デフォルトの名無しさん [2008/06/24(火) 22:53:53 ]
[1] 授業単元:Cプログラミング
[2] 問題文(リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7044.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2008年06月25日いっぱい

608 名前:デフォルトの名無しさん [2008/06/24(火) 23:03:35 ]
[1] 授業単元:数学演習3
[2] 問題文(含コード&リンク):
3a-2b+ - d= 7
. 2b+2c+ d= 5
.a-2b-3c-2d=-1
. b+2c+ d= 6
上の行列をピポット選択を使い前進消去法で解くプログラムを作る。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualStudio2005
 [3.3] 言語:C
[4] 期限:2008年06月25日07:00まで
[5] その他の制限:特に制限はありません
以下が作っては見たもののアルゴリズムエラーでどこが悪いのかもわからない自作プログラム。
nijibox.ohflip.com/futabafiles/001/src/sa26951.txt

609 名前:608 ◆k4INPBPZ3E [2008/06/24(火) 23:04:30 ]
トリップ忘れてた

610 名前:デフォルトの名無しさん [2008/06/24(火) 23:11:40 ]
1] 授業単元:基礎プログラミング
[2] 問題文
(1)標準入力からint 型引数に文字コード (ASCII) を読み込むと, その文字が小文字 (a〜z) であれば大文字のコードを返し
   そうでないならば受け取ったコードをそのまま返す関数を設計し, その関数を利用するプログラムを作成しなさい
(2)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列の逆順に 並べか替えた文字列を表示し
   何も返さない関数を設計し, その関数を利用するプログラムを作成しなさい.
(3)char 型の配列の名前を2つ引数 P, R に受け取ると, P に記憶されている文字列を逆順に並べか替えた文字列を R に記憶して
   何も返さない関数を設計し, その関数を利用するプログラムを作成しなさい.
(4)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列が回文ならば 1 を, そうでなければ 0 を返す関数を設計し
   その関数を利用するプログラムを作成しなさい. ただし,前問の関数を利用すること.
(5)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列が回文ならば 1 を, そうでなければ 0 を返す関数を設計し
   その関数を利用するプログラムを作成しなさい. ただし,前々問の関数を利用せず, 直接,文字列中の文字を先頭と末尾から比較する方針を用いること.
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン:(cygwin)
 [3.3] 言語:C
[4] 期限:(明日の15時まで)
[5] その他の制限:

611 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:12:48 ]
>>607
#include <stdio.h>
int main(void)
{
int i, j, sum;

for(i=1, sum=0; i<=100; i++) sum += i;
printf("1から100までの整数の和は%d\n", sum);

for(i=1, sum=0; i<=100; i+=2) sum += i;
printf("1から100までの奇数の和は%d\n", sum);

for(i=1; i<=20; i++) {
if(i<10) for(j=0; j<i; j++) putchar(' ');
else for(j=20; j>i; j--) putchar(' ');
printf("%d\n", i);
}

return 0;
}

612 名前:607 mailto:sage [2008/06/24(火) 23:26:48 ]
>>611
ありがとうございます

613 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:34:49 ]
2進数変換の問題を出されました。。。基本的な部分は作ってみたのですが、完璧にできません…小数変換の工程などは手ではできるのですが…
どなたかご助力宜しくお願いします。


[1] 授業単元:実験
[2] 問題文(含コード&リンク):
10進数を2進数に変換するプログラムを作成せよ。
その際、入力する10進数が小数点ありの数値(例:2.56)でも変換可能なものとする。

[3] 環境
 [3.1] OS:XP
 [3.3] 言語: C
[4] 期限: 08年06月27日
[5] その他の制限:
基本的に習ったことの利用がメインなので、特殊な関数などは使えません。原始的なアルゴリズムでないとだめなようです。
もちろん、構造体、配列、ポインタなどの基本は習いました。



614 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:35:34 ]
作ってみたプログラムです。(また、どうしてもMSBに0が羅列してしまって…変換した数値のみを表示させたいのですが…。つまり、000000000000000000010110とかではなく10110と。)

#include <stdio.h>
const int BitSize = sizeof(int) * 8; // 整数型のビットサイズを算出
void dtob(int x) {
int bit = 1,
i;
char c[BitSize];

for (i = 0; i < BitSize; i++) {
if (x & bit)
c[i] = '1';
else
c[i] = '0';
bit <<= 1;
} // 計算結果の表示
printf("2進数: ");
for ( i = BitSize - 1; i >= 0; i-- ) {
putchar(c[i]);
}
printf("\n");
}

int main(){
int x = 0;
do {
printf("10進数を2進数に変換します(0で終了)\n");
printf("xの値: ");
scanf("%d", &x);
dtob(x);
} while (x != 0);
return 0;}

615 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:36:38 ]
あ、すみません、

>613 = >614

です。

616 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:44:06 ]
for(i=BitSize-1; c[i]=='0'; i--); //最初に1が出るまでスルー
for( ; i>=0; i--) putchar(c[i]);  //後は普通に表示



617 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:55:50 ]
>616

レスありがとうございます!
なるほど〜ちょっと改良してみます。

あとは小数点が問題ですね。。。
やっぱりとりあえず、整数部分と小数点以下をわけてスキャンしなきゃだめですよね

618 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:01:46 ]
>>604
ん?>>603間違えてる?

619 名前:デフォルトの名無しさん [2008/06/25(水) 00:05:49 ]
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
登録番号(int no)と名前(char *name)と年齢(int age)を含む構造体person型のポインタ変数を宣言し、登録人数分だけの動的メモリ確保をせよ。そして、データをファイルから入力せよ。
ファイルの形式は、先頭に登録する人数とし、そのあとに人数分のデータを登録番号、名前、年齢の順に書いていく(下の例を参照。登録番号は入力順に1,2,3,4,5,・・・とする。そして、入力した全員データを表示せよ。)

(ファイルの例)
3
1 田中 20
2 太田 40
3 井上 35

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualStudio2005
 [3.3] 言語:C
[4] 期限: できるだけ早くお願いします。
[5]問題文でわかりにくいところがありましたら、聞いてください。

620 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:14:27 ]
>>614
んー?その課題ってそういう解き方を期待してるのかな。
それでもいいんだけど、初歩的な段階ということを考慮すると
整数部なら2で割ったあまりをせっせと詰めていくように思えた。
小数部は2倍したものの整数部を詰める、みたいな。

その段階でビット演算でできるという発想をしたなら優秀な
生徒さん(もしくは経験者)なんだなあって思う。
// 皮肉じゃないです。念のため

621 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:20:03 ]
何を習ったのかお前知ってるのかよw

622 名前:デフォルトの名無しさん [2008/06/25(水) 00:25:57 ]
[1] 授業単元:基礎プログラミング
[2] 問題文
キーボードから2つの自然数を入力し、入力した値が10以下で2の倍数なら足し算
それ以外はかけ算させた結果を表示させるプログラムを作成せよ。
但し、if文を用いて自然数以外を入力したらエラー文を表示させる。
[3] 環境
 [3.1] OS: Windows/linux
 [3.2] コンパイラ名とバージョン:VC++ 6.0/gcc
 [3.3] 言語: C
[4] 期限:6/27
[5] その他の制限:入力はscanf、出力はprintf stdio.h
よろしくお願いしますorz


623 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:26:37 ]
>>621
あーもーそういう煽りが欲しいわけじゃなくてな。
関数、ポインタ習いました。とか原始的なアルゴリズムで、とか前置きしなきゃならない段階でしょ?
その段階でビット演算を直感的に理解できる子は少ないでしょ。
わかんないかなー。

学生の頃周りがどうだったか、自分がどうだったか思い出しなよ。
学校では習ってません独学です、ならビット演算をスムーズに理解できたのはいつのことだった?

624 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:29:33 ]
>基本的に習ったことの利用がメイン
って書いてあるのに、ビット演算を習ってないと思うほうがおかしいだろ。

625 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:37:27 ]
ってか>>613にアドバイスしたらどうなん?

>>622
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7047.txt

626 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:38:02 ]
>623 >624 さん方

お二人ともすみません(汗)

自分の書き方がまぎらわしかったです・・・
ビット演算は習っていません。

柴田先生の本を読みまして、
内部表現とビット などの説明あたりを読んでいるときに
先生が以前ビット演算でやればサマートなんだけどな・・・ブツブツと
ボソっといってたのを思い出して、
それから少し自分で勉強してみました。

ですが、挫折しかけてこのサイトに、、です。(汗)

というか途中で疑問に思ったのですが、なんでC言語には2進数で表示する機能がないのでしょうか・・・?





627 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:40:40 ]
>>623
相手するだけ無駄
>>624
宿題解いてもらえなくて涙目なんですよね、わかります。
催促していいよw

628 名前:613 mailto:sage [2008/06/25(水) 00:41:18 ]
あ、ちなみに
原始的なアルゴリズム とはありますが、
たぶんビット演算くらいはOKかと思います。

先生は期待してはいないと思いますが…。

その、手計算でやるときのアルゴリズムと
まったくそのままのほうが、わかりやすいのだとは思うのですが、
違う方向性でやりはじめてしまったので…。

最終的にダメそうなら、ホントに原始的な方向でいくつもりですが。






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

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

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