C/C++の宿題を片付け ..
[2ch|▼Menu]
446:デフォルトの名無しさん
07/05/19 15:06:30
>>440
URLリンク(kansai2channeler.hp.infoseek.co.jp)

lzhの中身はソース1つとP.txt、SPJ.txt

クオリティ低い・・・。
仕事でこんなコード書いてたら殴られそうだ。

447:デフォルトの名無しさん
07/05/19 15:15:04
>>445
mallocがNULLを返した時点で即座に終了するようになっていることを失念していたw
指摘ありがとう。

URLリンク(kansai2channeler.hp.infoseek.co.jp)
ついでに、キューが空のときpushが誤動作するのを修正。この問題では顕在化しないけど。

448:デフォルトの名無しさん
07/05/19 15:32:37
>>446
ありがとうございました ホントに助かります
殴られたら耐えます

449:#
07/05/19 17:42:46
[1] 授業単元:アルゴリズム
[2] 問題文:
レポート課題内容: 実行時引数として算術式を前置記法で与える。演算子は + と *,演算数は英字1字とする。
その算術式を表す二分木を作り,その先行順,中央順,後行順,レベル順での走査して,つぎのように出力するプログラムを作れ。
 例: ./a.out "*+a**bc+def"
    * + a * * b c + d e f
    a + b * c * d + e * f


[3] 環境
 [3.1] OS:Windows/XP
 [3.2] コンパイラ名とバージョン:cygwin
 [3.3] 言語:C
[4] 期限: 5月21日
[5] その他の制限: リンクによるリスト処理の形
どなたかお願いします

450:デフォルトの名無しさん
07/05/19 21:15:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):20元ほどの連立方程式を部分ピボット選択法をとりいれて解けるプログラムをつくりなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Studio.net 2003
 [3.3] 言語: C
[4] 期限: 5月21日22時まで
[5] その他の制限:特に無し。

お願いします。


451:デフォルトの名無しさん
07/05/19 21:52:33
>>449
URLリンク(kansai2channeler.hp.infoseek.co.jp)

リンクによるリスト処理の形というのが何のことかイマイチ分からない・・・

>>450
プログラム云々というより数学がorz

452:デフォルトの名無しさん
07/05/19 22:44:45
>>450
部分ピボット選択法って何だ?ガウスの消去法の事か?

453:デフォルトの名無しさん
07/05/20 00:47:44
>>452
そうです。説明不足すみません。

454:デフォルトの名無しさん
07/05/20 01:03:19
>>450
URLリンク(kansai2channeler.hp.infoseek.co.jp)

455:デフォルトの名無しさん
07/05/20 01:41:37
>>454
本当にありがとうございます!

456:デフォルトの名無しさん
07/05/20 08:56:46
【質問テンプレ】
[1] Basic プログラミング
[2] 次の4つの関数を作りなさい:
  
1.Integerのみで構成されたArrayの中から、ユーザー任意のIntegerのみを
  消去する(複数個ある場合も考えること)
2.ArrayAとArrayBがあるとして、Aの中のIntegerが全てBの中に含まれているかを
  調べ、含まれていたらメッセージをOutputする。
3.Arrayを小さいIntegerから大きいIntegerの順に並び変える。
4.Arrayを大きいIntegerから小さいIntegerの順に並び変える。
  
[3] 環境
 [3.1] OS: Windows 
 [3.2] 不明です
 [3.3] 言語: C++
[4] 期限: 5/29/07までお願いします
[5] その他の制限:まだ初めて2ヶ月目なのであまり進んだことは使えません。
  Forループ、if、Switchを習い終えたレベルです。
  どうかよろしくお願いします。

457:デフォルトの名無しさん
07/05/20 08:59:36
BasicプログラミングでC++とはこれ如何に?

458:456
07/05/20 09:00:56
期限: 5/19/07まででした、訂正します。

459:456
07/05/20 09:02:17
あーーまた間違えてしまった 期限: 5/23/07までです。何回も申し訳ありません。

460:456
07/05/20 09:04:25
>>457

紛らわしくてすみません、アメリカの大学に在学してまして
クラスの名前がBasic Programingなのです。プログラミングの最初に取る基本のクラスです。

461:デフォルトの名無しさん
07/05/20 09:14:15
まあ、宿題には変わりないからそこらへんは気にしない。

462:デフォルトの名無しさん
07/05/20 09:14:38
っつーか、大学の名前出せ。こんなところを頼っているようじゃ
そんな生徒はとっとと日本に帰国させた方が良いと通報しとくからw

463:デフォルトの名無しさん
07/05/20 09:43:06
>>456
ホームシックだからって、宿題を装ってまでして気を紛らわそうとするなよw
もっと構ってくれる板たくさんあるぞ!

464:デフォルトの名無しさん
07/05/20 09:52:06
御託はいいからさっさと宿題処理しろよハゲ。

465:デフォルトの名無しさん
07/05/20 10:52:52
>456
消去するって具体的にはどうすんの?
値を0にするだけ?それともそこに後ろの値を詰めるの?

466:456
07/05/20 11:20:02
>>465
ただ消去しろ、とのことなので
0でも詰めるのでもないと思います。
空きのArrayにしろと言う事だと思いますが、そのようなことは可能なのでしょうか?

467:デフォルトの名無しさん
07/05/20 11:21:31
該当するデータがあったら抹消、空いたところに数値を先頭に向かって詰めろと?
不要になった部分のメモリも開放しろと?

468:デフォルトの名無しさん
07/05/20 11:22:07
空きのArrayなんか存在しません。

469:デフォルトの名無しさん
07/05/20 11:25:29
>>467
不要になった部分のメモリも開放しろということだと思います

>>468
無知なもので、すみません。
たとえばサイズ5のArrayに4つまでしかDataをインプットしなかったら
最後の一個は空きにはならないのでしょうか?

470:デフォルトの名無しさん
07/05/20 11:35:58
っつーか、最初に格納するデータの要素の個数は決まってない?
データを入力しながら動的にメモリを確保していくやり方で良いんかい?

471:デフォルトの名無しさん
07/05/20 11:38:49
URLリンク(www.geocities.jp)
こういった内容も授業でやったん?

472:デフォルトの名無しさん
07/05/20 11:40:09
最初にユーザー任意でサイズは決めるものと思ってもらって大丈夫です。

473:デフォルトの名無しさん
07/05/20 11:42:02
>>471
いえ、Delete Operatorは、まだ習っていません。


474:デフォルトの名無しさん
07/05/20 11:43:52
もしDeleteやその他を使わなければいけない、もしくは使ったほうが遥かに楽
などでしたら、使っても差し支えないと思います。

475:デフォルトの名無しさん
07/05/20 11:49:31
とりあえず、配列の取り扱いが分かれば
あとは並び替えなんてのはありきたりなソートのライブラリを使ってしまえば良いし。
C++はさっぱりだから俺はパス、すまそ orz

476:デフォルトの名無しさん
07/05/20 11:57:11
ライブラリを使うのは多分ダメなので
ループを使ってチェックをするやり方だと思います。
皆さんにとっては簡単な問題なのに、尋ね方が悪く手間取らせてすいませんでした。

477:デフォルトの名無しさん
07/05/20 12:06:13
いーやいやいやいやいや、自分で定義したライブラリを。
っつーか、使えるものを使うってのは当たり前じゃね?
変に条件を絞るってなら、その条件を言ってもらわんと。
ソートのアルゴリズムの指定もありか?

478:デフォルトの名無しさん
07/05/20 12:12:52
迷惑かけて申し訳ありません。
今、調べたらソートのアルゴリズムの指定がありました。

大きい順に並べる時、
A B C D E F
まずAと(BCDEF)を比べて、Aより大きいものがあれば交換。
つぎにBと残りを比べて大きいものがあれば交換、CでDで
という感じです。

479:デフォルトの名無しさん
07/05/20 12:20:21
要するに基本選択法ね。
URLリンク(www.miyagi-ct.ac.jp)



480:デフォルトの名無しさん
07/05/20 12:35:58
アドレスが切れてるみたいですが、基本選択法で間違いありません。
それと何回も申し訳ないのですが、Pointerはまだ習っていないので使えません。
よろしくお願いします。

481:デフォルトの名無しさん
07/05/20 12:42:02
切れてるって、冒頭のh抜きってだけやん・・・あんたやばいよ。
情報処理の取り扱いに慣れてないな。今すぐ専攻している学問をやめて
ほかの路線を考えた方が良いぜ?こんな俺でも3流以下の大学中退だからw

482:デフォルトの名無しさん
07/05/20 13:02:54
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
if文、 if~else~文、 if~else if~else文、 switch文、 三項演算子、をすべて用いてクイズを作成しなさい
反復文は使えないものとし、同じ問題はでないものとする
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/25まで
[5] その他の制限: 特になし

よろしくお願いします。

483:デフォルトの名無しさん
07/05/20 13:13:02
>>481
すみません言葉が足りませんでした
教えていただいたページが存在しなかったので
アドレスのリンクが切れていると言ったつもりでしたが・・・


484:デフォルトの名無しさん
07/05/20 14:05:53
期限: 5/23/07
とりあえず現地時刻のってことだろうから、ワシントンD.Cの時刻を参考にした場合
URLリンク(www.worldtimeserver.com)
日本時間から13時間差し引いた時刻となるから、まぁ、日本時間でその期日で間に合っていりゃ良いか。
誰か頼む。俺はちと寝る。時差ぼけじゃ〜〜なくてただの徹夜明け orz

485:デフォルトの名無しさん
07/05/20 14:09:18
バブルソート

486:デフォルトの名無しさん
07/05/20 14:11:00
>>485
違うって、そりゃ各々の隣接する要素同士の比較、交換やろ?w

487:デフォルトの名無しさん
07/05/20 14:15:34
>>456>>466
deleteは習ってない、ソートする課題がある、ということは、
Arrayは固定長で、要素を消す時は前詰めして
要素数を別変数で管理する方法だと思うがどうか?

488:デフォルトの名無しさん
07/05/20 14:32:06
>Forループ、if、Switchを習い終えたレベルです
なんかVBくさい

489:デフォルトの名無しさん
07/05/20 14:44:33
>>484
日本時間で23日の午後4時までです。
お疲れのところすみませんでした。


490:デフォルトの名無しさん
07/05/20 14:52:09
>>487

>Arrayは固定長で、要素を消す時は前詰
はい長さは固定で、消した後については特に指定がないので
前詰めで大丈夫だと思います。

>要素数を別変数で管理
理解が足りなくてすみません
array[i]のようにした後、iと固定サイズでループを作ったりすることでしょうか?

491:デフォルトの名無しさん
07/05/20 15:02:10
>要素数を別変数で管理
num = 有効な要素の数
ってことじゃないの?
a[0] = 100
a[1] = 200
a[2] = 300
a[3] = 400
num = 4
↓a[1]を消して詰める
a[0] = 100
a[1] = 300
a[2] = 400
a[3] = 400
num = 3

492:デフォルトの名無しさん
07/05/20 15:15:43
面倒なので全部algorithmでやってしまえ〜

493:デフォルトの名無しさん
07/05/20 15:22:41
小生の環境では>>479はきちんと表示される

494:デフォルトの名無しさん
07/05/20 15:46:15
国外からのアクセスを拒否ってるんじゃない?

495:デフォルトの名無しさん
07/05/20 15:52:57
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
下記@Aの銀行に「一億円」を預けた場合、何年と何ヵ月後にAの銀行の預金額を@の銀行の預金額が超えるか
@利率0.08% (複利)の銀行
A利率0.09% (単利)の銀行
反復文を用いて@A双方の毎月の預金額を表示し、Aの銀行の預金
額を@の銀行の預金額を超えた時点で反復文を終了後、「@の銀行は
●年●ヵ月後にAの銀行の預金額を超える」と表示しなさい。

また、上記@の銀行に「1億円」、Aの銀行に「9999万円」を預けた場合、
どちらが先に「1億200万円」になるか、前問と同じ処理を行い、最後に
「●の銀行が●年●ヵ月後に先に1億200万円貯まる」と表示しなさい。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/26まで
[5] その他の制限: 特になし

よろしくお願いします。

496:デフォルトの名無しさん
07/05/20 15:54:20
[1] 授業単元:C実習
[2]問題文
下記の実行結果になるプログラムを作成せよ。
1〜nまでの整数合計を求めるプログラム。
※while文を使用すること!
変数は下記を使用
int i ループカウンタ
int n 最終数を入力するエリア
int ans 合計算出エリア
<実行結果>
1からnまでの和を計算します
nを入力してください:(例5)

1から5までの和は(例15)です。

[環境3]
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++

よろしくおねがいします

497:496
07/05/20 15:56:44
期限は今日の夕方まででお願いしたいです

498:デフォルトの名無しさん
07/05/20 16:09:51
>>496

#include "stdio.h"
int main(){
int i,n,ans=0;
printf("1からnまでの和を計算します\nnを入力してください:");
scanf("%d",&n);
i=n;
while(i)ans+=i--;
printf("1から5までの和は%dです。\n",ans);
return 1;
}

499:デフォルトの名無しさん
07/05/20 16:10:26
>>496
#include <iostream>
using namespace std;
int main(void)
{
int n;
cout << "1からnまでの和を計算します。" << endl;
cout << "nを入力してください。" << endl;
cin >> n;
int ans = 0;
int i = 1;
while (i <= n) {
ans += i++;
}
cout << "1から" << n << "までの";
cout << "和は" << ans << "です。" << endl;
return 0;
}


500:デフォルトの名無しさん
07/05/20 16:51:09
>>498,499さん感謝です

501:デフォルトの名無しさん
07/05/20 16:54:58
正直、入門書終わったらネットで勉強が常ですか?

502:デフォルトの名無しさん
07/05/20 16:55:36
うん

503:デフォルトの名無しさん
07/05/20 17:00:52
( ̄〜 ̄;)なるほど、、本よりネットがメリットあるんですね

504:デフォルトの名無しさん
07/05/20 17:02:38
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

16進数の足し算表と掛け算表を作成せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: なし
[5] その他の制限: なし

よろしくお願いします

505:デフォルトの名無しさん
07/05/20 17:03:01
俺は入門からしてネットだったけどな。

506:デフォルトの名無しさん
07/05/20 17:15:52
C言語は入門からこのスレで宿題解いて勉強したぜ

507:デフォルトの名無しさん
07/05/20 17:25:10
しかしみさなんはいかほどまでに上達なさってるんすか?

508:デフォルトの名無しさん
07/05/20 17:28:08
烏賊にはかないません

509:デフォルトの名無しさん
07/05/20 17:29:06
今職業プログラマ 見習いだけど

510:505
07/05/20 17:36:45
俺も職業プログラマ。今年で3年目。
C/C++/C#/J2ME/J2SEやってる。

511:デフォルトの名無しさん
07/05/20 17:40:24
プログラマしんどいんですか??
人並に働ける会社なんですかね皆さんは

512:デフォルトの名無しさん
07/05/20 17:58:22
>>511
人並みっていうのは終電までには帰れる
とかそういうこと?

513:デフォルトの名無しさん
07/05/20 18:06:54
家でもプログラミングする変態だから参考にならないかもしれないけど
そんなにしんどくないよ
終電には間に合うし

514:デフォルトの名無しさん
07/05/20 18:11:05
だ、誰か・・・そろそろあの言葉を>>511へ言ってやってくれ

515:デフォルトの名無しさん
07/05/20 18:13:00
>>495
長くなってしまった。すまん。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

516:デフォルトの名無しさん
07/05/20 18:51:00
[1] 授業単元:
[2] 問題文:
@. ハノイの塔のボトムアップ(反復形)のプログラムを作れ。
プログラムは,maink関数と,hanoi関数(ともに再帰を含まない)とで構成する。
./a.out N の形に円盤の枚数 N を十九時引数として指定すると,N枚の円盤の山を右回りに隣の柱に移す最短手順を出力するようにせよ。

A.アジア地区予選の問題Gをお願いします
URLリンク(www.acm-japan.org)

[3] 環境
 [3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
 [3.3] 言語: C

[4] 期限: 5月21日23時
よろしくお願いします

517:デフォルトの名無しさん
07/05/20 19:01:39
再帰無しのハノイは(;´Д`)ハァハァだな

518:デフォルトの名無しさん
07/05/20 19:01:41
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
反復文を用いて、トランプゲーム(ババ抜き、7ならべなど)を実現するプログラムを作成しなさい
ゲームの種類はなんでもよい

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/26まで
[5] その他の制限: 特になし

よろしくお願いします。

519:デフォルトの名無しさん
07/05/20 19:11:41
>枚数 N を十九時引数として指定

にほんごでおけ

520:デフォルトの名無しさん
07/05/20 19:30:10
非再帰のハノイは昔このスレに書いた記憶があるが、見付からん

521:デフォルトの名無しさん
07/05/20 19:38:25
>>519
>516 はローマ字打ちと予測する
>枚数 N を十九時引数として指定
実行時引数
jikkoujihikisuu
jikk ujihikisuu
じっくじひきすう
十九時引数


522:デフォルトの名無しさん
07/05/20 20:12:35
非再帰ハノイは6から塔の番号を引いたり、何か変な工夫が
必要だった気がする。

523:sage
07/05/20 20:27:09
[1] 授業単元: プログラミング
[2] 問題文: 
       以下に与えられたg(x)に対して、与えられた「x」の最初の値「x0」から出発して、
       x=g(x)の形の方程式の解を不動点反復法によって求めよ。
       (1) g(x)=1/3*(x^2+1), x0=1
       (2) g(x)=3-(1/x), x0=1
       (3) g(x)=1/(x^2+1), x0=1
[3] 環境 
 [3.1] OS: (WindowsXP) 
 [3.2] コンパイラ名とバージョン: UNIX 
 [3.3] 言語: C言語 
[4] 期限: 5月21日:午前10時まで 

よろしくお願いします。 


524:デフォルトの名無しさん
07/05/20 20:42:09
>>523
#include <stdio.h>
#include <math.h>

#define EPS 1.0e-5
#define KMAX 1000

int main(void)
{
int ct = 0;
double x, xn;

x = 1; /* ここにx0を入れる */
while (1) {
ct++;
printf("%3d : %f\n", ct, x);
xn = 1. / 3 * (x * x + 1); /* ここにg(x)を入れる */
if (fabs(xn - x) < EPS) {
printf("Solution found.\n");
break;
}
if (ct > KMAX) {
printf("Error.\n");
break;
}
x = xn;
}

return 0;
}

525:デフォルトの名無しさん
07/05/20 20:59:00
ハノイの塔の手順を書き出してじっくり眺めると、
動かす円盤の番号と手順の2進数のビットパターンに関連があることが判る。
つまり、奇数手目には必ず最上位の円盤を動かすわけで、これが最下位ビット(bit0)に相当する。
同様に二手目、六手目などに第二位の円盤を動かすのが第二ビット(bit1)、四手目に第三ビット(bit2)……
従って、この方法を使えば任意の手数番目にどの円盤を動かすかは簡単に得られる。
そこまで判れば、どこからどこへ動かすかも同様に定数時間で得られる。

526:デフォルトの名無しさん
07/05/20 21:12:23
なんとか思い出せた。

>>516
URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>525
まさにその方法だ。

527:デフォルトの名無しさん
07/05/20 21:13:09
>>524
ありがとうございます!とても速いです!あこがれます!

528:デフォルトの名無しさん
07/05/20 21:20:18
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
入力した二つの値の掛け算を筆算形式で計算せよ。
ただし入出力ともに16進数とし符号なしとする。

[3] 環境
 [3.1] OS: Vine Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 5/22 21:00
[5] その他の制限: 特になし

よろしくお願いします。

529:デフォルトの名無しさん
07/05/20 21:22:05
>>524
早撃ちジャックと呼んであげようw

530:デフォルトの名無しさん
07/05/20 21:57:13
>>516
2006年のでいいの?

531:デフォルトの名無しさん
07/05/20 22:19:13
>>504
#include <stdio.h>
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
void prtable(int (*op)(int, int))
{
    int i, j;
    putchar(' ');
    for (j = 1; j < 0x10; ++j)
        printf("%3X", j);
    putchar('\n');
    for (i = 1; i < 0x10; ++i) {
        printf("%X", i);
        for (j = 1; j < 0x10; ++j)
            printf("%3X", (*op)(i, j));
        putchar('\n');
    }
}
int main(void)
{
    prtable(add);
    putchar('\n');
    prtable(mul);
    return 0;
}

532:デフォルトの名無しさん
07/05/20 22:26:52
>>531
dd

533:デフォルトの名無しさん
07/05/20 22:32:16
1授業単元:プログラミング実習
2問題文:配列を用いて100個までの値を入力し、その最大値、最小値、及び
全体の平均点を出すプログラムを作成せよ。
3環境:Linux3.2
gcc
C
4 2007年5月22日17時
5 ifやwhile、そして今日配列まで習いました。 関数とかはまだです

534:デフォルトの名無しさん
07/05/20 22:44:14
>>533
#include<stdio.h>
int main(){
int i, data[100], max, min, sum;
i = 0;
while(i<100){
scanf("%d",&data[i]);
i++;
}
max = data[0];
min = data[0];
sum = data[0];
i = 1;
while(i<100){
if(max < data[i]) max = data[i];
if(min > data[i]) min = data[i];
sum += data[i];
i++;
}
printf("最大値:%d\n",max);
printf("最小値:%d\n",min);
printf("平均点:%f\n",sum/100.0f);
return 0;
}
がんばって初心者っぽく書いてみた

535:デフォルトの名無しさん
07/05/20 23:08:36
>533
ぼるじょあスレで答えてもらってなかったか?

536:デフォルトの名無しさん
07/05/20 23:35:24
>>528は筆算ってことは、いちいち各桁ごとを、しかも16進数の形(文字配列のデータ同士)
のまま演算するようにしろと?10進数に戻して計算して、また16進数に戻す(というか書式で指定して表示)
した方が楽やん・・・。ってボヤいてみるテスト。誰かがんばれ〜。

537:528
07/05/20 23:52:06
>>536
そうなんです
一度10進法に変換して計算してはいけないって制限付でした・・・

538:デフォルトの名無しさん
07/05/21 00:00:42
>>536>>537
10進法に変換してから計算するってどういうこと?

539:デフォルトの名無しさん
07/05/21 00:03:22
>>528 >>537
#include<stdio.h>
int main(){
int a,b,c;
scanf("%x %x",&a,&b);
printf(" %x\nx %x\n----------\n",a,b);
c = b;
while(b>0){
printf("%x\n",a*(b%0x10));
b/=0x10;
}
printf("----------\n%x\n",a*c);
return 0;
}
それっぽく書こうとして力尽きた

540:デフォルトの名無しさん
07/05/21 00:13:03
>>538
例えばFF * FFの場合に255 * 255と変換してから計算して
積の65025を16進数に変換してFE01と表示することです

>>539
dです
これをいろいろ弄ってみたいと思います

541:デフォルトの名無しさん
07/05/21 00:15:09
>>540
んあー・・・。
プログラムないだとどっちみち「int型」で、10進も16進もないんだけど
筆算の表記を10進にしちゃダメ、ってことかな・・・

542:デフォルトの名無しさん
07/05/21 00:16:29
その条件だと文字列のまま計算しろってことじゃね?

543:デフォルトの名無しさん
07/05/21 00:18:44
だろうね。俺もそう思う。

544:デフォルトの名無しさん
07/05/21 00:20:41
漏れ的には
char nums[]={"0123456789ABCDEF"};
の配列を使って、入力された文字列がこの配列の要素の番号を値として計算するようにと考えたが
結局計算した結果を16進数に戻して結果を入れる文字配列に入れるとか・・・わけわからなくなって
それじゃ駄目?なのかと思ってあきらめた orz

545:デフォルトの名無しさん
07/05/21 00:24:14
>>541
すいません、説明の仕方が非常にまずかったみたいですね・・・
あくまで印字される値の見かけが10進数ならNGって事です・・・

546:デフォルトの名無しさん
07/05/21 00:25:25
うん。非常にまずい。

547:デフォルトの名無しさん
07/05/21 00:36:39
んじゃ、やっぱ10進数に換算してからまたそれを16進数に戻すやり方で。誰か頼む。
俺は諦めた orz

548:デフォルトの名無しさん
07/05/21 00:40:14
筆算形式だと必然的に文字列全体を数字に直接変換しないで計算することになると思うんだが。
文字を数字に変換するのは当然だけど、一桁ずつ計算していくってことだろ?

549:デフォルトの名無しさん
07/05/21 00:56:47
>>548

あまり必然でもない
>>539


550:デフォルトの名無しさん
07/05/21 01:03:23
>>528
やっつけ仕事。
ここまで作ったところで「桁数制限ががが」ということに気づいた。

最大4桁「ffff * ffff」まで。
エラー処理は入れてない。

URLリンク(kansai2channeler.hp.infoseek.co.jp)


551:デフォルトの名無しさん
07/05/21 01:07:44
>539は表示してるだけで、計算方式は筆算じゃねーだろ

552:デフォルトの名無しさん
07/05/21 01:11:16
>528 入力部分は割愛
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int char2int(char a) { return '0'<=a && a<='9' ? a - '0' : tolower(a) - 'a' + 10;}
int main(void)
{
char a[] = "FF", b[] = "FF", c[256] = {0};
int lena, lenb, lenc, i, j;
lena = strlen(a);
lenb = strlen(b);
for(i=0; i<lena; i++) {
int tempa = char2int(a[lena-1-i]);
for(j=0; j<lenb; j++) {
int tempb = char2int(b[lenb-1-i]);
c[i+j] += tempa * tempb % 16;
if(c[i+j]/16) {
c[i+j+1] += c[i+j]/16;
c[i+j] %= 16;
}
c[i+j+1] += tempa * tempb / 16;
if(c[i+j+1] / 16) {
c[i+j+2] += c[i+j+1]/16;
c[i+j+1] %= 16;
}
}
}
for(i=255; i>0; i--) if(c[i]) break;
lenc = i+1;
for(i=lenc-1; i>=0; i--) printf("%x", c[i]);
return 0;
}

553:デフォルトの名無しさん
07/05/21 01:11:25
>>551
ちゃんと一桁ずつ計算してるよ。
最後でサボって足し算の部分は無いけど。
ループ内の計算の計算結果を保存して、最後に足し算したら
筆算と同じ工程だと思うんだが。

必ずしも文字列変数は必要でない、というつもりなんだけど、
もしかして俺、「筆算」の方式を間違えて理解してる?

554:デフォルトの名無しさん
07/05/21 01:16:58
>553
bは一桁ずつでもaが一桁ずつじゃないじゃん。

555:デフォルトの名無しさん
07/05/21 01:20:33
>>539
c = b;
printf("----------\n%x\n",a*c);
ごまかせないだろw

556:デフォルトの名無しさん
07/05/21 01:21:04
>>554
筆算形式ってソコまでやって筆算なのか・・・。
俺は [a] × [bの各桁] をbの桁数だけやって
最後にそれらを足すのが筆算だと思ってた。

理解間違い、申し訳ない


557:デフォルトの名無しさん
07/05/21 01:22:19
Wikipedia項目リンク
筆算を理解していなかったなんで、ゆとり世代?なんてひっさん(悲惨)な、なんつって orz

558:デフォルトの名無しさん
07/05/21 01:32:17
>>552でa[]のほうをb[]より大きい桁にすると表示おかしくなるんだけど。

559:デフォルトの名無しさん
07/05/21 01:35:49
int tempb = char2int(b[lenb-1-i]);
じゃなくて
int tempb = char2int(b[lenb-1-j]);
でした。

560:デフォルトの名無しさん
07/05/21 01:39:03
なら、おっきした方と入れ替えするコードを入れてみては?

561:デフォルトの名無しさん
07/05/21 05:58:13
[1] 授業単元:
アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):
次の手順に従ってプログラムorder.cを作成せよ.

10個の整数データを図1の木構造に保存するときを考える.
まず,ポインタにより木を実現し,データを保存せよ.
(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順(行きがけ),中順(通りがけ),後順(帰りがけ)を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する
(再帰プログラミングで作成せよ).

図1(例)
==============================
     0
   /  \
  1     2
/│\  / \
3 4 5 6   7
     / \
    8   9
==============================

[3] 環境
 [3.1] Windows XP Pro
 [3.2] Visual Studio
 [3.3] C++
[4] 期限:2007/5/22

10個の整数データをテキストファイルから読み込んで、図1の木構造に数字をいれるみたいです。
よろしくおねがいしますm(_ _)m

562:デフォルトの名無しさん
07/05/21 06:55:55
それは何という木構造?

563:デフォルトの名無しさん
07/05/21 07:01:13
>>561
その探索法を使うなら二分木だと思うが、図間違ってないか?

564:デフォルトの名無しさん
07/05/21 07:13:31
>>561
数日前にも君みたいなのが居たが、、、
種類を特定しないで木構造とだけ言ったところで何の説明にもなってない。
また出鱈目にデータを繋げて木構造を構築したところでアルゴリズムとして何の意味も無い。
Wikipedia項目リンク

565:デフォルトの名無しさん
07/05/21 07:46:48
[1] 授業単元: C言語入門
[2] 問題文:
1〜100までの整数を半角スペースで区切って表示する。ただし、
3の倍数のときは「せんだ」
5の倍数のときは「みつお」
3の倍数かつ5の倍数のときは「せんだみつお」
「せんだみつお」に置き換えられた次の数のときは「ナハナハ」
と、置き換えて表示しなければならない。(表示時に「」は不要)
コーディングに要した時間をソース内にコメントとして記述すること。
[3] 環境
 [3.1] OS: 指定無し
 [3.2] コンパイラ名とバージョン: gcc, VisualC++など
 [3.3] 言語: C言語
[4] 期限: 5月21日:正午まで

566:デフォルトの名無しさん
07/05/21 07:57:28
>>565
所要時間5分くらい

#include <stdio.h>
#define MAX 100
void main(void) {
int i;
int naha=0;
for ( i=1; i<MAX+1; ++i ) {
if ( naha ) { naha=0; printf("ナハナハ "); continue; }
if ( (i%3==0) && (i%5==0) ) { printf("せんだみつお "); naha=1; continue; }
if ( i%3==0 ) { printf("せんだ "); continue; }
if ( i%5==0 ) { printf("みつお "); continue; }
printf( "%d ", i );
}
}


567:デフォルトの名無しさん
07/05/21 08:02:34
しかしなんつー課題だw

568:デフォルトの名無しさん
07/05/21 08:06:05
URLリンク(www.aoky.net)

569:デフォルトの名無しさん
07/05/21 08:14:53
#include <stdio.h>
int main(void)
   int i;
   for(i=1; i<=100; i++) {
      if(i%15==0) {
         printf("せんだみつお");
         printf("ナハナハ ");
         i++;
      }
      else if(i%3==0) printf("せんだ");
      else if(i%5==0) {
         printf("みつお");
         if((i-1)%3==0) {
            i++;
            if(i > 100) break;
            printf("ナハナハ ");
         }
      }
      else printf("%d ", i);
   }
   return 0;
}

3の約数と5の約数が連続したときもナハナハ入れてみた。
所要時間3分程度。

570:デフォルトの名無しさん
07/05/21 08:15:01
ナハナハ付けることでフラグ操作まで考えさせてるのか
実は「ふるい」としては良問?w

571:デフォルトの名無しさん
07/05/21 08:17:02
仕様から逸脱したコード書く香具師って痛いよね

572:デフォルトの名無しさん
07/05/21 08:18:29
>>569
それ、1-100 の範囲ではなく、
1-150 の範囲で出力させても大丈夫?


573:デフォルトの名無しさん
07/05/21 08:21:42
566のほうがスマートだ

574:デフォルトの名無しさん
07/05/21 08:29:41
continueはスマートじゃねえw

575:デフォルトの名無しさん
07/05/21 08:43:26
[1] 授業単元:画像工学
[2] 問題文(含コード&リンク):

1.64×64画像(raw データ形式)の横方向の一次元フーリエ変換を順次行う。
2.変換後の画像のパワースペクトル画像を計算する。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual C++ 2005
 [3.3] 言語: どちらでも可
[4] 期限: 2007年5月21日23:59まで

よろしくお願いします。


576:デフォルトの名無しさん
07/05/21 08:57:25
>>575
【raw データ形式】についてkwsk
IEEE754?
?bit
整数?


577:デフォルトの名無しさん
07/05/21 09:05:51
>>576
64×64は画像のサイズです。
説明不足ですみません。

578:デフォルトの名無しさん
07/05/21 09:07:27
>>561
単元から言って、データ構造やらそれを表現するデータファイルの仕様策定も
やるべき作業に含まれてるんかな?
ということで適当に作ってみたが。
動いてるけど、一般的に見て正しいかどうかは知らんよ。

URLリンク(kansai2channeler.hp.infoseek.co.jp)


579:575
07/05/21 09:15:43
>>576
整数(ピクセル?)です。

580:デフォルトの名無しさん
07/05/21 09:49:13
>>565
#include <stdio.h>
#define SENDA num%3==0
#define MITSUO num%5==0
int SendaMitsuoNahanaha(int num){
if(num != 1) switch(SendaMitsuoNahanaha(num-1)){
case 1: printf("ナハナハ "); return 0; break;}
if(0);
else if(SENDA && MITSUO) {printf("せんだみつお "); return 1;}
else if(SENDA) {printf("せんだ ");}
else if(MITSUO) {printf("みつお ");}
else {printf("%d ", num);}
return 0;}
int main(void){
SendaMitsuoNahanaha(100);
return 0;}
/* 90分くらい。完全敗北した気分だ...*/


581:デフォルトの名無しさん
07/05/21 10:19:31
90分はかかりすぎなうえにマクロ内に変数名直接書くな。
せめて引数つきマクロにせい。

582:デフォルトの名無しさん
07/05/21 12:11:32
時間割の宿題って過去にでた?
過去スレから探そうと思うんだが。

583:デフォルトの名無しさん
07/05/21 12:50:56
つーかマクロはカッコで囲めよな・・・・

584:デフォルトの名無しさん
07/05/21 13:52:22
通常の式と同じように扱うことを意図したマクロでは括弧を使うのが当然だが、
>>580みたいな局所的なテキスト置換の用途では、正しく使うにはいずれにせよ展開後の
テキストを具体的に知っておく必要があるから、括弧はどっちでもいいような。

585:デフォルトの名無しさん
07/05/21 14:25:15
どっちでもいいわけないだろうが。
利用側の識別子に依存するマクロってなんだそれ?

586:デフォルトの名無しさん
07/05/21 14:31:42
どーでもいい。>>565はせめてC++ならまだ面白かっただろうな。

587:デフォルトの名無しさん
07/05/21 15:19:11
[1] 授業単元: 情報2
[2] 問題文(含コード&リンク):
10 個の整数データを入力して,総和,平均値,最大値,最小値,分散および標準偏差を求める
プログラムを作成しなさい
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (Cygwin)
 [3.3] 言語: (C/)
[4] 期限: (2週間後)
[5] その他の制限: (なし)

お願いします。



588:デフォルトの名無しさん
07/05/21 15:28:10
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
1.2つの正の整数u, vの最大公約数gcd(u, v)を求めるユークリッドのアルゴリズムについて,
繰り返し版のプログラムをつくりなさい。尚,ユークリッドの方法は,「uがvより大きいならば,
uとvの最大公約数がvとu-vの最大公約数に等しい」ことに基づく。
関数のプロトタイプ宣言は次のようにしなさい。
  int gcd(int, int);
▼出力例
最大公約数を求めます!
2つの正整数を入力してください:124 432↵
124と432の最大公約数は4です
2.キーボードから0〜9の数字dと,正の整数nを読み込み,n以下の整数xで,
xとxの2乗の10進数表示の両方にdを含むものをすべて出力するプログラムをつくりなさい。
ただし,次のプロトタイプ宣言で示すように,整数xとdを仮引数として,
xとxの2乗の10進数表示の両方にdを含む場合に1,
そうでない場合に0を返す関数hit_digitを作成しなさい。
 int hit_digit(int x, int d);
▼出力例
0〜9の数字dを入力して下さい:7↵
正の整数nを入力して下さい:100↵
該当するものは次の通り:
27 74 76 87
全部で4個ありました

[3] 環境
 [3.1] OS:windows (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン:borland (gcc 3.4 VC 6.0等)
 [3.3] 言語:C (C/C++/どちらでも可 のいずれか)
[4] 期限: 今週日曜日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
2つありますがよろしくお願します。


589:デフォルトの名無しさん
07/05/21 16:03:59 BE:46584364-2BP(222)
>>588上段
#include<stdio.h>
int gcd(int u,int v){int tmp,res,r;if(u<v){tmp=u;u=v;v=tmp;}
if((r=u%v)==0){res=v;}else{res=gcd(v,r);}return res;}
int main(void){char tmp[256];int u,v,d;printf("最大公約数を求めます!\n");
printf("2つの正整数を入力してください:");fgets(tmp, 256, stdin);
sscanf(tmp, "%u %u", &u, &v);d=gcd(u,v);if(d!=1){
printf("%uと%uの最大公約数は%uです。\n",u,v,d);}else{
printf("%uと%uは互いに素です。\n",u,v);}return 0;}

590:デフォルトの名無しさん
07/05/21 16:21:59
1000までの素数を求めて出力するプログラムの作成を教えてください。
mod使う方法でお願いします」。



591:デフォルトの名無しさん
07/05/21 16:23:37 BE:29115353-2BP(222)
>>588下段
#include<stdio.h>
#include<stdlib.h>
int hit_digit_h(int x,int d){char tmp[256];char* p=tmp;
sprintf(tmp,"%i",x);while(*p!='\0'){if(*p==(d+'0')){
return 1;}p++;}return 0;}
int hit_digit(int x, int d){
return hit_digit_h(x,d) && hit_digit_h(x*x,d);}
int main(void){char tmp[256];int d,x,i,c=0;do{
printf("0〜9の数字dを入力して下さい:");fgets(tmp, 256, stdin);
d = atoi(tmp);}while(d<0||d>9);printf("正の整数nを入力して下さい:");
fgets(tmp, 256, stdin);x=atoi(tmp);for (i=0; i<=x; i++){
if(hit_digit(i,d)){printf("%i ",i);c++;}}if(c){
printf("\n%i個ありました。\n",c);}else{printf("\nありません。\n");
}return 0;}

592:デフォルトの名無しさん
07/05/21 16:26:45 BE:46585038-2BP(222)
>>590
#include<stdio.h>
int mod[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89,
97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593,
599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827,
829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,};
int main(void){int i;for(i=0;i<sizeof(mod)/sizeof(int);i++){
printf("%i ",mod[i]);}return 0;}

593:デフォルトの名無しさん
07/05/21 16:30:36
>>592
マジカヨw

594:デフォルトの名無しさん
07/05/21 16:36:25 BE:58230465-2BP(222)
何か問題でも?

595:デフォルトの名無しさん
07/05/21 16:53:30
>>592
そんならこれでよくね?
#include <stdio.h>
int main() { return puts(
"2 3 5 7 11 13 17 19 23 29 31 37 "
"41 43 47 53 59 61 67 71 73 79 83 89 "
"97 101 103 107 109 113 127 131 137 139 149 151 "
"157 163 167 173 179 181 191 193 197 199 211 223 "
"227 229 233 239 241 251 257 263 269 271 277 281 "
"283 293 307 311 313 317 331 337 347 349 353 359 "
"367 373 379 383 389 397 401 409 419 421 431 433 "
"439 443 449 457 461 463 467 479 487 491 499 503 "
"509 521 523 541 547 557 563 569 571 577 587 593 "
"599 601 607 613 617 619 631 641 643 647 653 659 "
"661 673 677 683 691 701 709 719 727 733 739 743 "
"751 757 761 769 773 787 797 809 811 821 823 827 "
"829 839 853 857 859 863 877 881 883 887 907 911 "
"919 929 937 941 947 953 967 971 977 983 991 997"
), 0; }

596:デフォルトの名無しさん
07/05/21 16:56:32 BE:157221599-2BP(222)
>>595
>mod使う方法でお願いします」。

とあったのでやむを得ず変数名にした。

597:≠595
07/05/21 17:10:31
#include <stdio.h>
int main()
{
const char * mod =
"2 3 5 7 11 13 17 19 23 29 31 37 "
"41 43 47 53 59 61 67 71 73 79 83 89 "
"97 101 103 107 109 113 127 131 137 139 149 151 "
"157 163 167 173 179 181 191 193 197 199 211 223 "
"227 229 233 239 241 251 257 263 269 271 277 281 "
"283 293 307 311 313 317 331 337 347 349 353 359 "
"367 373 379 383 389 397 401 409 419 421 431 433 "
"439 443 449 457 461 463 467 479 487 491 499 503 "
"509 521 523 541 547 557 563 569 571 577 587 593 "
"599 601 607 613 617 619 631 641 643 647 653 659 "
"661 673 677 683 691 701 709 719 727 733 739 743 "
"751 757 761 769 773 787 797 809 811 821 823 827 "
"829 839 853 857 859 863 877 881 883 887 907 911 "
"919 929 937 941 947 953 967 971 977 983 991 997";
printf("%s\n", mod);
return 0;
}
んじゃ、こんなもんでw


598:デフォルトの名無しさん
07/05/21 17:22:28
お前ら意地悪だなw

599:デフォルトの名無しさん
07/05/21 17:26:05
暗号なんかの実装だと既知素数はテーブル化されていることが多いよね。

600:デフォルトの名無しさん
07/05/21 17:35:55
いちいち求めるの面倒だもんな

601:デフォルトの名無しさん
07/05/21 17:49:01 BE:104814296-2BP(222)
面倒っつーか無駄だしね。

602:デフォルトの名無しさん
07/05/21 17:58:14
>>565
#include <stdio.h>
/* 3分ほど */
int main()
{
    int n;
   
    for(n = 1; n <= 100; n++){
        printf("%3d ", n);
        if(n % 5 == 0)
            printf("せんだ");
        if(n % 3 == 0)
            printf("みつお");
        printf("\n");
    }
   
    return 0;
}

603:602
07/05/21 17:59:42
仕様満たしてねえな俺w

604:デフォルトの名無しさん
07/05/21 18:02:07 BE:104814296-2BP(222)
ナハナハが抜けてるのくらい視力の問題だろw

605:デフォルトの名無しさん
07/05/21 18:06:07
>>565 やべえな。
#include    <stdio.h>
/* 人間失格 */
int        main()
{
    int    n, flag = 0;
    for(n = 1; n <= 100; n++){
        if(flag){
            printf("ナハナハ");
            flag = 0;
        }else{
            if(n % 15 == 0){
                printf("せんだみつお");
                flag = 1;
            }else if(n % 5 == 0)
                printf("せんだ");
            else if(n % 3 == 0)
                printf("みつお");
            else
                printf("%3d", n);
        }
        printf(" ");
    }
    return 0;
}

606:デフォルトの名無しさん
07/05/21 18:23:41
>>587
#include    <stdio.h>
#include    <math.h>
#define    N    10
int        main()
{
    double sum = 0, ave, powsum = 0, var, dev;
    int i, num[N], max, min;
   
    for(i = 0; i < N; i++)    scanf("%d", &num[i]);
    for(i = 0; i < N; i++)    sum += num[i];
    ave = sum/N;
    for(i = 0; i < N; i++)    powsum = pow(num[i] - ave, 2);
    var = powsum/N; //分散のつもり
    dev = sqrt(var);//標準偏差のつもり
    printf("sum = %f\nave = %f\nvar = %f\ndev = %f\n", sum, ave, var, dev);
   
    return 0;
}

607:デフォルトの名無しさん
07/05/21 18:29:33
>>587 眼科逝ってくる。
#include    <stdio.h>
#include    <limits.h>
#include    <math.h>
#define    N    10
int        main()
{
    double sum = 0, ave, powsum = 0, var, dev;
    int i, num[N], max = INT_MIN, min = INT_MAX;
   
    for(i = 0; i < N; i++)    scanf("%d", &num[i]);
    for(i = 0; i < N; i++){
        sum += num[i];
        if(num[i] > max)    max = num[i];
        if(num[i] < min)    min = num[i];
    }
    ave = sum/N;
    for(i = 0; i < N; i++)    powsum = pow(num[i] - ave, 2);
    var = powsum/N; //分散のつもり
    dev = sqrt(var);//標準偏差のつもり
    printf("sum = %f\nave = %f\nmax = %d\nmin = %d\nvar = %f\ndev = %f\n", sum, ave, max, min, var, dev);
   
    return 0;
}


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4178日前に更新/299 KB
担当:undef