C/C++の宿題を片付けます 116代目at TECH
C/C++の宿題を片付けます 116代目 - 暇つぶし2ch390:デフォルトの名無しさん
08/10/16 18:45:15
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のようなデータが大量に格納されているファイルがある.
[ダウンロード URLリンク(www.vox.tutkie.tut.ac.jp) ]
このファイルを読み込み,数値(キー)と英単語(データ)をセットにして
1データとして2分木へ格納し、数値(キー)にある値を指定して検索を行えば、
その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。
ふたつめ
上記で使用したtest.list を読み込み,数値(キー)と英単語(データ)をセットにして
1データとしてリストへ格納し、数値(キー)にある値を指定して検索を行えば、
その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。
そして、上記の木構造による実装との検索時間を比較せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2008年10月19日24:00まで]


391:390
08/10/16 18:46:22
5] その他の制限:
1. 格納できるデータ量は(メモリの許す限り)上限はない.
2. 対応する英単語が見付からない場合は、その旨を表示すること。
3. データは,「数値,英単語\n」(\nは改行)で定義されるものとする.
4. データが格納されたファイルは、プログラムの引数で指定できるようにせよ。
5. データは2分木に格納せよ。
6. 数値(キー)に重複はない。
7. 数値(キー)は8桁以内である。もしファイルに9桁以上の数値が入っていた場合はエラーを出力して終了せよ。
8. 数値(キー)に数字以外の文字(アルファベットなど)が含まれていた場合は,エラーを出力して終了せよ.
9. 検索時の入力にも9桁以上の数値や数字以外の文字が入力された場合はエラーを出力して終了せよ.
10. 英単語は25文字以内である。もしファイルに25文字以上の英単語が入っていた場合はエラーを出力して終了せよ。
ふたつめ
 # リストによる実装において、データの挿入は数値(キー)によるソートは行わず、単純にファイルに出現した順番にリストに追加していって下さい。
# リストによる実装での検索も、単純にリストの先頭から比較していくような単純なアプローチで結構です。
# 1回の検索では検索時間の差がないでしょうから、10000回くらい繰り返して下さい。なお、test.list のデータ数は130万個あります。

よろしくお願いします。

392:374
08/10/16 18:46:38
>>384
ありがとうございます
ヒントにしてもうちょい考えてみます

393:デフォルトの名無しさん
08/10/16 21:26:24
>>373
ありがとうございました。
これを参考に、自分なりにもう少し頑張ってみます



394:デフォルトの名無しさん
08/10/16 22:02:18
>>380
bmpのフォーマットは?

395:デフォルトの名無しさん
08/10/16 23:06:39
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
UDPサーバURLリンク(kansai2channeler.hp.infoseek.co.jp)
UDPクライアントURLリンク(kansai2channeler.hp.infoseek.co.jp)
問題文(2問あります)URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月17日午後13:00まで
[5] その他の制限:特になし

よろしくお願いします

396:デフォルトの名無しさん
08/10/17 00:43:47
[1] 授業単元:プログラミング技術
[2] 問題:30000以下の数字を入力して、「○時間、○分、○秒」と出力するプログラムを作りなさい。
<時間を分にして、分は秒にして、秒は分の答えの余り>
[3] 環境
 [3.1] OS:Windows XP
 [3.2] Ultla C
 [3.3] 言語:C
[4] 期限
特にありません

よろしくお願いします。

397:デフォルトの名無しさん
08/10/17 01:17:09
>>396
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
printf("%2d時間%02d分%02d秒", x / 3600, x % 3600 / 60 , x % 3600 % 60);
return 0;
}


398:デフォルトの名無しさん
08/10/17 01:28:59

[1] 授業単元:C
[2] 問題:n=1
4973/n*2で始まり、4973/n*2の計算の答えが1になるまでnを増やしていき
1になったところで今まで出した数字を全部足した答えを出すプログラム。
少数は切り捨て。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限 [10/17/07:00まで]

   2     4     8         4096
(4973/n*2)+(4973/n*2)+(4973/n*2)+・・・・(4973/n*2)
 2486  + 1243  +  621  +・・・・  1   =4965
手計算だと最後のnは2048になって答えが4965になったのですが。
プログラムについてはさっぱりなので助けてください。。。

399:デフォルトの名無しさん
08/10/17 01:36:21
>>398
あ、n*2じゃなくて、2^nです。

400:デフォルトの名無しさん
08/10/17 01:41:42
こんなでいい?
#include<stdio.h>

int main(){
int sum,ex;

for(sum=0,ex=2; 4973/ex >= 1; ex*=2){
sum += 4973/ex;
}
printf("%d\n",sum);
return 0;
}

401:デフォルトの名無しさん
08/10/17 01:50:56
include <stdio.h>
int main()
{
int n, sum = 0;
for (n = 1; 4973 / (1 << (n - 1)) != 1; ++n) {
sum += 4973 / (1 << (n - 1));
}
sum += 1;
printf("%d : %d", n, sum);
return 0;
}


402:401
08/10/17 01:51:44
すいません間違えました

403:デフォルトの名無しさん
08/10/17 01:54:33
そんなすっきりなプログラムが!!

ありがとうございます!!

404:デフォルトの名無しさん
08/10/17 01:56:50
>>402
ぇ?答えの4956もでましたけど・・・

405:404
08/10/17 01:58:31
あ、>>400の方と>>401の方を読み間違えた自分が恥ずかしい…

406:デフォルトの名無しさん
08/10/17 03:26:13
>>392
if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 )

if( (tmp *= (a * small_x[i] - small_y[i])) <= 0.0 )
な気がする

407:デフォルトの名無しさん
08/10/17 04:04:02
>>380

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

全BMPフォーマット対応は面倒だから、条件付き、
良く読んで理解して使用のこと

408:デフォルトの名無しさん
08/10/17 04:51:51
>>407 ん~~~

409:デフォルトの名無しさん
08/10/17 07:23:29
[1]授業 c
[2] 問題: 1単語を入力し、その単語のスペルを判定する。その判定を Ctrl-D を入力するまで続ける。判定は、ファイル ``eng.txt'' にその単語が存在する場合に限り、スペルが正しいと判定する。
[3] 環境
 [3.1] OS:linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限 10/19 16:00

関数は何を使ってもいいです。
何日も考えたのですがぜんぜんわかりませんでした。
どなたかお願いします

410:395
08/10/17 07:26:17
すみません
問題文2問あるといっておいて4問ありました
B1とB2のみで構いません

多少遅れても大丈夫なので引き続きよろしくお願いいたします

411:デフォルトの名無しさん
08/10/17 07:40:04
>>395
UDPサーバ:URLリンク(kansai2channeler.hp.infoseek.co.jp)
UDPクライアント:URLリンク(kansai2channeler.hp.infoseek.co.jp)

412:410
08/10/17 07:48:20
>>410ちょっと訂正
UDPサーバ:URLリンク(kansai2channeler.hp.infoseek.co.jp)
UDPクライアント:URLリンク(kansai2channeler.hp.infoseek.co.jp)

413:396
08/10/17 07:59:31
>>397
ありがとうございました

414:デフォルトの名無しさん
08/10/17 08:29:04
400と401の両方とも、条件部とループ内部で同じ計算をしてるのが無駄

415:デフォルトの名無しさん
08/10/17 10:31:23
>>412
ありがとうございました

416:デフォルトの名無しさん
08/10/17 11:13:35
>>411
そんなの最適化されるんじゃないの?

417:デフォルトの名無しさん
08/10/17 11:15:12
>>411じゃなくて>>414

418:デフォルトの名無しさん
08/10/17 15:40:59
>>409
URLリンク(kansai2channeler.hp.infoseek.co.jp)

419:デフォルトの名無しさん
08/10/17 15:51:15
[1]C言語実習
[2]問題文

以下のコードは、2つのプログラム(同一動作)のコードを
まとめたものです。(各ソースにおいて、行の順番は変えていません)
このコードを2つのプログラムに分解して、それぞれコンパイルが
通り、同一の動作をするようにして下さい。
また処理内容についても簡単にコメントして下さい。
コード
URLリンク(kansai2channeler.hp.infoseek.co.jp) Linux/Gnu-C4.0/C
[4]無制限だそうです。難問だそうです。よろしくお願い致します。

420:デフォルトの名無しさん
08/10/17 15:55:13
>>416
よく知らないんだが、どのコンパイラでどのオプションつけるとこれが最適化されるの?

421:デフォルトの名無しさん
08/10/17 16:14:39
>>419
#include <stdio.h>
int is_prime(int p){
int i;
if(p<=1)
return 0;
if((p==2)||(p==3))
return 1;
if((p%2==0)||(p%3==0))
return 0;
for(i=3;i*i<=p;i+=2)
if(p % i==0)
return 0;
return 1;
}
int main(void){
int i,c=0;
for(i=1;i<=1000000;i++){
if(is_prime(i))
c++;
if(i%100==0)
printf("%d %d\n",i,c);
}
return 0;
}
素数の個数を求めるプログラム
残りはエラトステネスの篩だな


422:デフォルトの名無しさん
08/10/17 17:57:37
>>420
僕もよく知らない、ってかよく知らないのに突っ込まないでください><
基本的に、共通部分式の削除が行われるんじゃないですか?

423:デフォルトの名無しさん
08/10/17 18:25:25
418さんありがとうございました
感謝です

424:デフォルトの名無しさん
08/10/17 20:01:06
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク): BMI値を判定するプログラムを作成する
               入力:身長t(m),体重w(kg)
出力:判定結果{やせ,標準,肥満}
               身長をt(m),体重をw(kg)としたとき,
               BMI=w/tの二乗
               
               BMI値が18.5未満⇒やせ
               BMI値が18.5以上かつ25.0未満⇒標準
               BMI値が25.0以上⇒肥満

               #include <stdio.h>
int main(void) {
float t, w;
printf("t = "); scanf("%f", &t);
printf("w = "); scanf("%f", &w);
????????????????????????????????←この部分が解りません。
               }
[3] 環境 Visual C++
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
 [3.3] 言語: C言語
[4] 期限: 2008年10月20日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数,条件分岐(if文,if-else文)は習いました。
  お願い致します。

425:デフォルトの名無しさん
08/10/17 20:06:21
int main(void) {
    float t, w, bmi;
    printf("t = "); scanf("%f", &t);
    printf("w = "); scanf("%f", &w);
    bmi = w / t / t;
    if (bmi < 18.5) printf("やせ\n");
    else if (bmi < 25.0) printf("標準\n");
    else printf("肥満\n");
    return 0;
}

426:デフォルトの名無しさん
08/10/17 20:55:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 10/18

すいません。なかなかうまくいきませんよろしくお願いします

427:デフォルトの名無しさん
08/10/17 21:03:49
いくつかレスをもらっても何も進歩してないことにがっかりした

428:デフォルトの名無しさん
08/10/17 21:29:19
>>426
ちゃんとみてないけど、
if(*(s+i)==' '){
の行を
if(*(s+i)==' ' || *(s+i)=='?' || *(s+i)=='!' …){
ってやっていけばいいんじゃね

429:デフォルトの名無しさん
08/10/17 21:52:12
ということを>>336-337が。

430:デフォルトの名無しさん
08/10/17 22:13:26
>>426
#include<stdio.h>
#include<string.h>
#define MAX 256
int main(void){
int len=0, max=0, moji;
char s[MAX+1], l[MAX+1]="";
while((moji=getchar())!=EOF){
if(strchr(" \t\n?!.,()", moji) || len>=MAX){
if(len>max){
strcpy(l, s);
max=len;
}
len=0;
}else{
s[len++]=moji;
s[len]='\0';
}
}
printf("The longest word is \"%s\"\n", l);
return 0;
}

431:デフォルトの名無しさん
08/10/17 23:41:45
個人的にはif elseよりswitchの方が好きだ。

432:デフォルトの名無しさん
08/10/18 00:09:20
個人的にはふさわしい方を使うのが好きだ。

433:デフォルトの名無しさん
08/10/18 00:15:54
>>390
二分木の方だけやってみた
URLリンク(kansai2channeler.hp.infoseek.co.jp)

434:デフォルトの名無しさん
08/10/18 10:37:12


[1] 授業単元:先輩の課題
[2] 問題文(含コード&リンク):
5.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7



みたいなtxtファイルがあるとします。

これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。
そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理するプログラムを書け

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual studio 2008
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: なし

435:デフォルトの名無しさん
08/10/18 12:18:31
>>434
意味不明
文章を見直せ

436:デフォルトの名無しさん
08/10/18 12:25:05
[1] 授業単元:先輩の課題
[2] 問題文(含コード&リンク):
5.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7



みたいなtxtファイルがあるとします。

これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。
そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理を
ファイルの終わりまで繰り返すプログラムを書け

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual studio 2008
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: なし

これでわかりますかね。すいません

437:デフォルトの名無しさん
08/10/18 12:33:08
>>436
#include <stdlib.h>
#include <stdio.h>
void f(double *d)
{
}
int main(int argc, char *argv[])
{
FILE *fp;
double data[4];
if (argc != 2) return 1;
if (!(fp = fopen(argv[1], "r"))) {
return 1;
}

while (fscanf(fp, " %lf %lf %lf %lf",
&data[0], &data[1], &data[2], &data[3]) == 4) {
f(data);
}
return 0;
}


438:デフォルトの名無しさん
08/10/18 12:34:52
>>437
ありがとうございます。
列が100ぐらいあるときは%lfを百個打つのはめんどくさいんですが・・・
なんとかなりませんか?

439:デフォルトの名無しさん
08/10/18 12:44:10
>>438
Ctrl+Vを99回押すだけだろ

440:デフォルトの名無しさん
08/10/18 12:44:49
>>439
そうなんですが・・・ソースが汚いのかなぁとおもいまして・・・

441:デフォルトの名無しさん
08/10/18 12:45:04
9回コピーして10個まとめたのをあと9回コピー

442:デフォルトの名無しさん
08/10/18 12:51:09
>>440
見た目の問題かい
ループで回したらいいじゃん
while (!feof(fp))
{
for (i = 0; i < 100; i++)
{
if (fscanf(fp, "%lf", &data[i]) != 1)
{
printf("error");
return 0;
}
}
f(data);
}


443:デフォルトの名無しさん
08/10/18 12:58:08
>>442
どうもありがとうございました

444:デフォルトの名無しさん
08/10/18 13:01:02
もうひとつ質問させていただきます。

入力ファイルの途中に

5.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7

52.3 121.1 123.0 56.8
45.3 121.1 123.0 56.8
4.6 21.4 9.2 6.7

改行で空いてる行があったとしても正常に動きますか?ためしたところ問題ないようにみえましたが・・・

445:デフォルトの名無しさん
08/10/18 13:02:07
>>444
正常の定義は?
エラーを出して止まるのが正常なのか
書式を無視するのが正常なのか

446:デフォルトの名無しさん
08/10/18 13:07:44
>>445
空白の行を無視して次の行から配列に代入する処理というのが正常です

447:デフォルトの名無しさん
08/10/18 19:03:24
[1]授業 c言語
[2] 問題:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限 10/20

448:デフォルトの名無しさん
08/10/18 19:56:05
&s[i].id
s[i].name
&s[i].score[j]

449:デフォルトの名無しさん
08/10/18 22:10:12
[1] 授業単元:プログラミング基礎
[2] 問題文
体重と身長をキーボードから入力し、BMIを計算して出力するプログラムを書け。
BMIの計算はユーザ定義の関数を用いて行い、データの型にはdoubleを用いよ。
ただし、BMIの計算式は以下の通り。
BMI=体重(kg)/身長(m)^2   例:65kg/(1.70m * 1.70m) =22.49

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年10月21日まで
[5] その他の制限: かなり初歩の段階みたいです。

よろしくお願いします。

450:デフォルトの名無しさん
08/10/18 22:27:55
>>449
>>424-425

451:デフォルトの名無しさん
08/10/18 22:31:24
>>449
#include<stdio.h>
double bmi(double weight, double height)
{
return weight / (height * height);
}
int main()
{
double weight, height;
printf("体重(kg)?");
scanf("%lf", &weight);
printf("身長(m)?");
scanf("%lf", &height);
printf("BMI=%g\n", bmi(weight, height));
return 0;
}

452:デフォルトの名無しさん
08/10/18 22:56:20
>>450>>451
すいません。説明不足でしたがelseやifなんかはまだ習ってないくらい初歩なので
>>424-425はよくわからないんです。
お早いレスで助かりました。ありがとうございます。

453:デフォルトの名無しさん
08/10/19 02:08:14
>>425
こんなに早くやって下さり、本当に有難う御座いました。
助かりました。

454:デフォルトの名無しさん
08/10/19 05:04:55
>>453
elseやifについてどう思うかを>>452に伝えてやってくれまいか

455:デフォルトの名無しさん
08/10/19 13:54:08
[1] 授業単元:プログラミング
[2] 問題文:
"A>B"と入力すると"AはBより大きい"のように、不等式を文章に変換するプログラムを作成せよ。また、入力データと実行結果は以下の通りとし、変換された文章をテキストファイルに順番に出力すること。

実行結果
データ1:A>B
データ2:B<C
データ3:A<C
○○○.txtに出力しました

○○○.txt
AはBより大きい
BはCより小さい
AはCより小さい

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:10/21
[5] その他の制限:可能な限り初歩的なものでお願いします

456:デフォルトの名無しさん
08/10/19 14:38:08
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fpr, *fpw;
char s1[1000], s2[1000], c;
if (argc != 3) { fprintf(stderr, "引数にこでたのむ\n"); return 1; }
if (!(fpr = fopen(argv[1], "r"))) {fprintf(stderr, "ファイルが\n"); return 1; }
if (!(fpw = fopen(argv[2], "w"))) {fprintf(stderr, "ファイルが\n"); return 1; }
while (fscanf(fpr, " %[^<> ] %c%s", s1, &c, s2) == 3) {
switch (c) {
case '<':
fprintf(fpw,"%sは%sより小さい\n", s1, s2);
break;
case '>':
fprintf(fpw,"%sは%sより大きい\n", s1, s2);
break;
default:
fprintf(stderr, "なかみが\n"); return 1;
}
}
fclose(fpr);
fclose(fpw);
return 0;
}


457:デフォルトの名無しさん
08/10/19 15:42:56
[1]授業 c言語
[2] 問題:
 URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 3.1 OS:linux
 3.2 gcc
 3.3 言語:C
[4] 期限 10/20
 
  すいません、よろしくお願いします。

458:デフォルトの名無しさん
08/10/19 15:48:02
>>447
>>448


459:デフォルトの名無しさん
08/10/19 16:04:58
>>457
まず、リスト①はmain関数の外で定義な。中でもいいけど、個人的には外の方が分かりやすい。
 
で、○○○は上から順に
&s[i].id
s[i].name
&s[i].score[j]

あんまり偉そうなこといいたくないが、これって構造体の基本問題だろ??
できるだけ自分で解けるようにしないと後々、辛い目にあうぞ。

460:457
08/10/19 17:07:53
>>459
ウザいです。
偉そうな口を聞いて欲しくないです。

461:デフォルトの名無しさん
08/10/19 17:20:54
>>460
本当のことだろーが
構造体の基礎の基礎も出来てないやつが喚くな餓鬼め

462:457
08/10/19 17:23:18
>>461
スレ違いです。出て行ってください。

463:457
08/10/19 17:25:13
そういうのは止めてください
>>458
どうもすいませんでした
>>459
ありがとうございます


464:デフォルトの名無しさん
08/10/19 18:22:51
>>457
>>1
> なりすましを防ぐため、トリップを使ってください。

465:デフォルトの名無しさん
08/10/19 19:44:19
ワロタ

466: ◆iTaRIJflUs
08/10/20 00:09:33
[1] 授業単元:C言語プログラミング
[2] 問題文
<その1>
以下のようなプログラムを作成しなさい.

2×10の2次元配列を定義し、1行目の配列([0][0~9])に1から10までの数字を格
納し、2行目の配列([1][0~9])に2の倍数を2から20まで格納し、配列に格納した
数字を画面出力するプログラム。


<その2>
以下のようなプログラムを作りなさい

10人の学生の成績が以下のようになっている。
int score[]={90,28,35,80,72,55,76,90,96,42}
このとき、0から9までの学生の偏差値を計算せよ。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年10月21日朝9時まで
[5] その他の制限: まだまだ初歩の段階です。

どなたかお願いします。

467:デフォルトの名無しさん
08/10/20 01:52:12
>>466
int num[2][10];
int i, j;
for( i = 0; i < 2; i++ ) {
 for( j = 0; j < 10; j++ ) {
  num[i][j] = (j + 1) * (i + 1); /* (1~10) × ( 1 or 2) */
  printf( "%2d ", num[i][j]);
 }
 printf("\n");
}


468:デフォルトの名無しさん
08/10/20 02:14:52
>>466 その2
#include <stdio.h>
#include <math.h>

int main(void)
{
int score[]={90, 28, 35, 80, 72, 55, 76, 90, 96, 42};
int i, n = sizeof(score) / sizeof(score[0]);
double sum = 0., sqsum = 0., mean;

for (i = 0; i < n; i++) {
sum += score[i];
sqsum += score[i] * score[i];
}
mean = sum / n;

printf("標準偏差 = %f\n", sqrt(fabs(sqsum / n - mean * mean)));

return 0;
}

469:デフォルトの名無しさん
08/10/20 08:39:37
[1] 授業単元:プログラミング
[2] 問題文:x=1y=2 が関数swapをもちいてx=2、y=1となる。関数swapを呼び出す前後のx,yのアドレスを表示し、アドレスが渡されていることをしめせ。

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:visual2005 c
 [3.3] 言語:C
[4] 期限:10/23
お願いします



470:デフォルトの名無しさん
08/10/20 08:44:26
【質問テンプレ】
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
前もって用意された暗号化された文のテキストファイルと暗号化されていない文のテキストファイルがあります。
暗号化されたテキストファイルの始めの3文字はXXXとなっています。
プログラムは最初の3文字をよんで、XXXだったらそのファイルを解読して新たなファイルに保存、
XXXじゃなかったらそのファイルを暗号化して新たなファイルに保存しなさい。
尚、テキストファイルが1000文字以上だったらexitすること。
(暗号はa→c,b→dのようなshift2です。)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: Dev-C++
 [3.3] 言語: C++
[4] 期限: 今日中
どうやってファイルの最初の3文字を判断するのかがまず分かりません..。
どなたか教えて下さい。

471:デフォルトの名無しさん
08/10/20 11:33:38
[1] 授業単元:プログラミングC++
[2] 問題文:学籍番号、名前、姓、が記入されたリストを入力し、これを名前、姓、学籍番号の順に出力するC++ プログラムを書き、正しく動くことを確かめよ。
動作確認のためには、「実行ファイル < データリスト」のようにデータファイルを作り、コマンドラインでリダイレクションによりデータ入力せよ。
s10000001 Taro Aizu
s10000002 Jiro Aizu
s10000003 Nuri Aizu
s10000004 Taro Kin
s10000005 Atami Bandai
s10000006 Kogen Bandai
s10000007 Choucreme Hirota
s10000008 Kitakata Ramen
s10000009 Beko Aka
s10000010 Jo Tsuruga
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン:g++
 [3.3] 言語:C++
[4] 期限: 2008年10月23日00:00まで
[5] その他の制限:特になし

472:デフォルトの名無しさん
08/10/20 12:15:46
>>471の補足ですが、ループを使うのが条件です

473:デフォルトの名無しさん
08/10/20 14:10:40
>>470
1000文字未満だったらfreadでchar[1000]に読み込んではじめの三文字見ればよくね?

474:デフォルトの名無しさん
08/10/20 18:10:38
授業単元: C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp) 
条件は関数 void sort3 の引数は3つの int 型の値であるが,これをポインタ変数を受け取る関数に書き換える.交換の作業はすべて関数内で処理し,main 関数では交換作業を行わないものとする

[3] 環境
 [3.1] OS: Windows/Linux
 [3.2] コンパイラ名とバージョン: 任意
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:2008年10月23日まで




475:デフォルトの名無しさん
08/10/20 18:33:20
[1] 授業単元:プログラミング
[2] 問題文:
Newton--Raphson法を用いて
X*X*X-7X*X+16X-10=0
の解を求めよ。

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:10/24
[5] その他の制限:初心者です。なるべく基本的な構造でお願いします。

476:デフォルトの名無しさん
08/10/20 18:48:16
>>474
void sort3(int *x, int *y, int *z)
{
int tmp;

if (*y < *x) { tmp = *x; *x = *y; *y = tmp; }
if (*z < *y) { tmp = *y; *y = *z; *z = tmp; }
if (*y < *x) { tmp = *x; *x = *y; *y = tmp; }
}

477:デフォルトの名無しさん
08/10/20 19:07:40
#define GOSA 0.00001
#define F(X) (X*X*X-7*X*X+16*X-10)
#define dF(X) (3*X*X-14*X+16)

int main(){
double x=10,y;

while(1){
printf("計算経過 %f\n",x);
y=F(x);
if(y>-GOSA)if(y<GOSA)break;
x -= y/dF(x); }
}

478:デフォルトの名無しさん
08/10/20 19:22:25
#define GOSA 0.00001
#define F(X) (X*X*X-7*X*X+16*X-10)
#define dF(X) (3*X*X-14*X+16)

int main(){
double x=10,y;
do{
x -= y/dF(x);
printf("計算経過 %f\n",x);
y=F(x);
}while(y<-GOSA || y>GOSA);
}

479:デフォルトの名無しさん
08/10/20 23:25:55
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:無期限
[5] その他の制限:関数・配列は習いましたが、ポインタは知りません。

自分で書いてみたのですが、例えば15を打つと
「素数ではありません」「素数ではありません」「素数です」とでてしまいます。

480:デフォルトの名無しさん
08/10/20 23:36:28
else{
for(i=3;i<=no;i+=2){
if ((no%i)==0){
puts("素数ではありません");
break;
}
else{
puts("素数です");
break;
}
}
}


481:デフォルトの名無しさん
08/10/20 23:57:28
>>479

int main(){
unsigned long int i ;
unsigned long no = 0;
printf("1から%luまで入力可能です\n", ULONG_MAX);
do {
printf("正の整数:");
scanf("%lu", &no);
if (no <= 0) {
puts("0以外、正の整数を入力してください") ;
} while(no <= 0) ;

if (no == 2) {
puts("素数です");
}
else if (no == 1 || no%2 == 0) {
puts("素数ではありません");
}
else {
for ( i = 3; i * i <= no; i += 2) {
if (no % i == 0) {
puts("素数ではありません");
return 0;
}
}
puts("素数です");
}
return 0;
}


482:デフォルトの名無しさん
08/10/21 00:06:50
>>480 481
ありがとうございます!


483:デフォルトの名無しさん
08/10/21 02:39:36
>>469
エスパーするとこうかな?関数swapを自分で書いて、呼び出す側とその関数内それぞれでアドレスを表示。

#include <stdio.h>
/* aの指すデータとbの指すデータを交換する */
void swap( int *a, int *b) {
int temp = *a;

printf( "swap() : &a = %p, &b = %p\n", a, b);

*a = *b;
*b = temp;
}

int main(void) {
int x = 1, y = 2;

printf( "main() : x = %d, y = %d, &x = %p, &y = %p\n", x, y, &x, &y);
swap( &x, &y);
printf( "main() : x = %d, y = %d, &x = %p, &y = %p\n", x, y, &x, &y);

return 0;
}


484:デフォルトの名無しさん
08/10/21 08:16:08
>>483
俺は
int* temp = a;
a = b;
b = temp;
かと思った


485:デフォルトの名無しさん
08/10/21 12:43:13
>>473
ありがとうございました。調べてみます。

486:デフォルトの名無しさん
08/10/21 12:53:22
>>476
それでコンパイルすると3つ目の整数を入力してから入力した整数が小さい順に出力されるようにしたいんだけどそれだとエラー起きてしまうのですが・・・

487: ◆3VUXqvbfSY
08/10/21 13:04:05
【質問テンプレ】
[1] 授業単元:計算機プログラミングII
[2] 問題文(含コード&リンク):
  単精度実数型配列(float)を宣言する。その配列にn個のデータを入力する。その配
  列名をポインタとして用いて,入力したn個のデータの最大値と最小値を求め,その
  結果とそれら値が何番目に入力されたかを出力するプログラムを作成せよ。
  ただし,複数回の異なる場合について実行してみること。データ入力の際,値が昇順
  または降順にならないようにすること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
    (注) gcc -Wall -ansi -std=c89 -pedantic ファイル名.c のようにしてコンパイル
 [3.3] 言語:C
[4] 期限:2008年10月23日10:30まで
[5] その他の制限:ポインタを習い始めたばかり,for文やif文,関数,配列,文字列の基礎は学習済み

おねがいします。

488:デフォルトの名無しさん
08/10/21 14:14:37
>>486
関数のプロトタイプ宣言
void sort3(int *x, int *y, int *z);

呼び出し
sort3(&n1, &n2, &n3);

489:デフォルトの名無しさん
08/10/21 17:19:27
>>487
どうやって入力するのかわからなかったけど、
とりあえず標準入力から一行ずつ float の値を一つ読み込こんでいくようにしておいた

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

490:デフォルトの名無しさん
08/10/21 18:11:11
簡単なゲームを作っているのですが、今まで使っていたアイコンは32×32だったので、それを16×16のサイズにしようと思い、そのサイズの画像を取り込んだら、32×32のサイズに拡大されて表示されてしまうのですがどうしたらよいのでしょう?
アイコンファイルってサイズ指定するとこないですよね?

491: ◆3VUXqvbfSY
08/10/21 18:30:43
【質問テンプレ】
[1] 授業単元:計算機プログラミングII
  対象:学部2年次
[2] 問題文(含コード&リンク):問題2( /2問)
  次に示す手順により,入力されたデータのデータの総和を求めるプログラムを作成せよ。
  (1) 適当な要素数の倍精度実数型配列(double)を宣言する。
  (2) 上記(1)で宣言された配列の先頭アドレスをポインタ変数に代入する。ポインタ
    変数を利用して上記(1)で宣言した配列に対して,キーボードから実数データを
    入力する。ただし,Ctrl-Dが入力されたら,データの入力を終了する。
  (3) ポインタ変数を利用して,参照アドレスを移動しながら入力されたデータの
    総和を計算する。
  (4) 入力したデータおよびそれらの総和を表形式で出力せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
    (注) gcc -Wall -ansi -std=c89 -pedantic ファイル名.c のようにしてコンパイル
 [3.3] 言語:C
[4] 期限:2008年10月23日10:30まで
[5] その他の制限:ポインタを習い始めたばかり,for文やif文,関数,配列,文字列の基礎は学習済み

お願いします。

492:デフォルトの名無しさん
08/10/21 19:03:53
>>491
いいオプションがついてるな。
ってことはいい先生って事だ。たぶん。

493:デフォルトの名無しさん
08/10/21 19:13:49
2枚の画像を読み込んで、それを引き算をして、その引き算した画像を出力するプログラムをお願いします。

494:デフォルトの名無しさん
08/10/21 19:35:27
[1] 授業単元:データー構造とアルゴリズム設計
[2] 入力された文字を,リストを用いて順次格納する.’-’が入力された時に文字の入力を終
了し,それまでに格納された全ての文字を表示するプログラム
(例)
a ←入力
b ←入力
c ←入力
- ←入力
c ←出力
b ←出力
a ←出力

[3] 環境
 [3.1] OS:Linux ver3.1
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 来週まで
[5] その他の制限:特にありません


495:デフォルトの名無しさん
08/10/21 19:38:47
もう1つ
[1] 授業単元:データー構造とアルゴリズム設計
[2] 入力された小文字のアルファベットを,リストを用いて順次格納する.’-’が入力された
時に文字の入力を終了し,それまでに格納された全ての文字を表示するプログラムを作成
せよ.ただし,リストに格納する際,リストの最後に追加するようにせよ.
(例)
a ←入力
b ←入力
c ←入力
- ←入力
a ←出力
b ←出力
c ←出力

[3] 環境
 [3.1] OS:Linux ver3.1
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 来週まで
[5] その他の制限:特にありません



496:デフォルトの名無しさん
08/10/21 19:39:23
お願いします。

497:デフォルトの名無しさん
08/10/21 20:56:21
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
 ① 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と平均値から突飛している値=最大値を求めなさい。最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。
 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。
 この作業をファイルの最後の2097152個目の値までやりなさい。

 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。
 ヒント:malloc関数

 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。)
 URLリンク(kissho4.xii.jp)
 DLKey:data


 ② 求めた最大値を2次元配列でpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を出力させ、2行目からは次の1024個中から求めた最大値を出力させなさい。
 同様に3行目、4行目、・・・と順次最大値を出力させなさい。
   例:peak.txt
     472 234 800 578 ・・・・
     677 347 554 532 ・・・・
     843 637 347 551 ・・・・
     ・
     ・
     ・
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: LSI-86
 [3.3] 言語: C
[4] 期限: 2008年10月23日午後3時
[5] その他の制限: 特になし

よろしくお願いします。

498:デフォルトの名無しさん
08/10/21 22:04:04
よくわからないけど平均値どこ行ったの?

499:358
08/10/21 23:39:49
>>494,495
URLリンク(kansai2channeler.hp.infoseek.co.jp)
参考程度にしてくれ

>>497
ロダ死亡
LSIのは、むかし試食版とか使ったことあるけど、もうしらねぇ。
URLリンク(www1.axfc.net)
参考程度にしてくれ
DLkey : foo

500:デフォルトの名無しさん
08/10/22 00:02:22
ちょっと修正、勘違いしていた、気がしないでもない。
ついでに、全ソースもつけといたので、環境に合わせてコンパイルとリンクしてくれ
ロダ生きてたみたい
URLリンク(kissho1.xii.jp)
DLkey : foo
ってか、358ってなんだ、前のがそのまんまだった。

501:デフォルトの名無しさん
08/10/22 01:44:49
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):カレンダー風の出力
 下に示すようなカレンダー風の出力を行うプログラムをwhile文を使って作成してください。
              ・1~31までの範囲とします。
              ・printf関数で表示幅をそろえます。(右揃え)
                  
              1  2  3  4  5  6  7
              8  9 10 11 12 13 14
             15 16 17 18 19 20 21
             22 23 24 25 26 27 28
             29 30 31
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年10月23日(木)までお願いします。
[5] その他の制限: 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)は習いました。
お願いします。

502:デフォルトの名無しさん
08/10/22 02:23:57
>>498
平均値は最大値を求めるだけに使うので、出力とかはしなくていいんです。
↓(手書きで申し訳ないですけど・・・)イメージ的には↓
URLリンク(kissho.xii.jp)
DLkey:foo

>>499
>>500
ありがとうございます。早速、明日学校でコンパイルしてみます。
本当に助かりました。 

503:デフォルトの名無しさん
08/10/22 03:55:43
>>502
圧縮するという事を学ぼう。
テキストはzipに、bmpは形式を変更。

504:デフォルトの名無しさん
08/10/22 06:21:16
>>501

#include <stdio.h>
int main(void)
{
int i=1;
while(i!=32){
printf("%2d ",i);
if(!(i%7))
printf("\n");
i++;
}
return 0;
}

505::デフォルトの名無しさん
08/10/22 11:35:56
>>501
URLリンク(kansai2channeler.hp.infoseek.co.jp)

506:デフォルトの名無しさん
08/10/22 11:47:05
オブジェクト形式マクロを用いたNUMBER人の点数を配列tensuに
読込み,秀(90~100点),優(80~89点),良(70~79点),可(60
~69点),不可(0~59点),判定不能(0未満あるいは100点より
上)の人数を,それぞれ変数a,b,c,d,e,fに格納・表示し,更に最高
点,最低点,合計点,平均点を表示するプログラムを作成せよ.た
だし,最高点,最低点,合計点,平均点の計算において,判定不能
の点数は除外すること.
なおNUMBERの値は10とし,平均点は小数点以下第2位まで表示
すること.
という問題誰か教えてください。

507:デフォルトの名無しさん
08/10/22 11:48:05
[1] 授業単元:
[2] 問題文(含コード&リンク):

5.6 29.2 ・・・・25.2
2.7 ・・・



-1.0 mozi
6.7 ・・・・
という様に数値データが書かれたファイルを読み込む。各行に100個の正の実数が書かれている。
これを1次元配列data[100]に順番に入れて、表示する。

これをファイルの終わりまで行う。

-1.0から始まる行があるが、その行は読み飛ばし、次の行から処理を行うようにすること



[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C
[4] 期限:今日
[5] その他の制限: なし

508:デフォルトの名無しさん
08/10/22 11:55:37
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):文字列を入力すると,英小文字を大文字に変換して出力するプログラムをポイン
タを用いてつくりなさい。但し,ライブラリ関数toupper を用いないこと。また,文字
列の入力には,ライブラリ関数であるgets 関数を用いること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:08年10月23日23:00まで

よろしくお願いします。

509:デフォルトの名無しさん
08/10/22 12:47:36
[2]
・dx/dt = t という式についてx(t=0)=0として,x(t) をt=0 から1 まで求めるEuler法のプログラムを作れ.
時間刻み(h)をどの程度小さくすると,真値(解析解:x=0.5*t*t)にどの程度近づくかを調べよ.
・FitzHugh-Nagumo方程式の解軌跡を求めるプログラムを作成せよ.
・作成したプログラムを使って、興奮性を示すx,yの初期値を一組探しグラフで結果を示せ.
初期値も自由に設定して良いが、うまくパラメータが見つからない場合は、a=0.7, b=0.8, c=20, z=1.0 を使用すること.
dx/dt=c(x-x^3)/(3+y+z)
dy/dt=(a-x-by)/c


[3] 環境
 [3.1] Windows
 [3.2] コマンドプロンプト
 [3.3] C
[4] 明日17時
[5] わからないのを3つ載せましたが、1つでも構わないのでなんとかお願いします。

510::デフォルトの名無しさん
08/10/22 13:08:58
>>508
URLリンク(kansai2channeler.hp.infoseek.co.jp)

511:デフォルトの名無しさん
08/10/22 13:52:57
>>510

ありがとうございました!

512:デフォルトの名無しさん
08/10/22 14:32:51
わざわざ文字列の長さを求めなくてもAllCharactersToUpperのfor文の条件をstr[i]!='\0'にすればいいと思う。

513:デフォルトの名無しさん
08/10/22 14:50:28
>>509
Cじゃないけどエクセルで作ってみたw
URLリンク(kansai2channeler.hp.infoseek.co.jp)

514::デフォルトの名無しさん
08/10/22 15:14:32
>>507
URLリンク(kansai2channeler.hp.infoseek.co.jp)

515:デフォルトの名無しさん
08/10/22 15:41:27
2つの画像を読み込んで、1つ目の画像から2つ目の画像を引き算をした画像を作りたいんですが
どのような感じで作ればいいでしょう?

516:デフォルトの名無しさん
08/10/22 15:55:18
2つの画像を読み込んで、1つ目の画像から2つ目の画像を引き算するような感じで
作ればいいと思います

517::デフォルトの名無しさん
08/10/22 16:21:40
>>507
URLリンク(kansai2channeler.hp.infoseek.co.jp)

518:デフォルトの名無しさん
08/10/22 16:25:34
>>514
最初の1行しか読まれないんですが・・・

519::デフォルトの名無しさん
08/10/22 16:30:51
>>518
>>517で試してみて

520:デフォルトの名無しさん
08/10/22 16:32:18
>>519
3つめでしょうか?

521:デフォルトの名無しさん
08/10/22 16:36:01
>>518
プログラムざっとみたけど1行目しか読んでない

522:デフォルトの名無しさん
08/10/22 16:42:31
>>519
3つめでやったら、コンパイルは通るんですが、バッファーオーバーランでとまります・・・

523:デフォルトの名無しさん
08/10/22 16:50:24
do-while間のi初期化忘れてるな

524:523
08/10/22 16:53:21
投稿者が見てるか分からんが

i=0;          ←追加
do{
(略)
}while(dp = strtok(NULL,gDlim));

これで動くように一見見える

525:デフォルトの名無しさん
08/10/22 16:54:36
>>524
動きました。がやはり1行目しか読まれないみたいです

526:523
08/10/22 17:01:18
char *dp,*p,*gDlim = " \n\r";

char *dp,*p,*gDlim = " ";

これもミスっぽいな

527:デフォルトの名無しさん
08/10/22 17:17:20
>>504-505
お二人とも本当に有難う御座いました。
助かりました。

528::デフォルトの名無しさん
08/10/22 17:25:24
>>525
読み込むファイルアップしてみ

529:デフォルトの名無しさん
08/10/22 17:29:51
fgets後にstrtokで" \r\n"渡してるからじゃん?
これだと行頭しか処理されないよ。

530:デフォルトの名無しさん
08/10/22 17:31:44
strtokとか使う必要あんの?普通にfscanfのほうがよくね?とか無責任に言ってみる

531:517
08/10/22 17:39:35
行頭に-1.0がある行は無視するという条件だから
行中に-1.0があっても読み込むためにstrtokを使った
ちなみにfscanfつかったソースは#if 0~#endif
の間に残してある

532:デフォルトの名無しさん
08/10/22 17:42:21
>>529
そうなんですか?やはり1行目しか読まれません

533:デフォルトの名無しさん
08/10/22 17:47:15
あと1行1列が2回表示されます・・・

534:デフォルトの名無しさん
08/10/22 17:53:07
>>533
だから読み込むファイルアップしてみ




535:デフォルトの名無しさん
08/10/22 17:57:21
>>534
見落としてました。

URLリンク(kansai2channeler.hp.infoseek.co.jp)
これです。横に100個って書いたんですが、12個のファイルしかなかったです。
先ほど頂いたソースは100のところを12に書き換えました。

536:デフォルトの名無しさん
08/10/22 17:59:29
>>534
俺も適当にddata.txt作ってみたけど1列目が2回出たなあ

537:デフォルトの名無しさん
08/10/22 18:03:30
実数が100個並ぶのにバッファは512かあ。

538:デフォルトの名無しさん
08/10/22 18:15:03
>>535
なんかこれでいいかわかんないけどつくってみた

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
FILE* fp;
char buf[1024],*cp;
double data[100];
int i,cnt;
if((fp = fopen("in.txt","r")) == NULL) return 1;
while(fgets(buf,sizeof(buf),fp) != NULL){
if(strnicmp("-1.0",buf,strlen("-1.0")) == 0) continue;
cp = buf; cnt = 0;
while((cp = strtok(cp," \t\r\n")) != NULL){
data[cnt++] = atof(cp); cp = NULL;
}
for(i=0;i<cnt;i++) printf("%f\n",data[i]);
}
fclose(fp);
}

539:デフォルトの名無しさん
08/10/22 18:19:14
return 0;
わすれちゃった。

540:デフォルトの名無しさん
08/10/22 18:42:16
>>538
うまくうごきました。ありがとうございます。

541:デフォルトの名無しさん
08/10/22 19:01:36
[1] 授業単元:C
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
問1.このプログラムではxの零乗が3x{0}と表示されるため3と出力されるようにする
問2.このプログラムでは入力の逆順に単項式が出力されるためそれを入力した順番に単項式が出力するようにする
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: お任せ
 [3.3] 言語: C
[4] 期限: 2008年10月24日hh:mmまで



542:デフォルトの名無しさん
08/10/22 19:25:10
画像を読み込み、引き算したプログラムを自分なりに作ったんですが

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define XL 900
#define YL 900

int main(int argc, char**argv)
{
FILE *fp1, *fp2, *fp3;
int i;
float opx, px1, px2;

fp1 = open("argv[1]", "rb");
fp2 = open("argv[2]", "rb");
fp3 = open("argv[3]", "wb");

for(i=0; i<XL*YL; i++){

fread(&px1,sizeof(float),1,fp1);
fread(&px2.sizeof(float),1,fp2);
opx = px1-px2;
write(&opx,sizeof(float),1,fp3);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
コンパイルが通らず、エラーがでてしまいます;
アドバイスを頂けるとうれしいです

543:デフォルトの名無しさん
08/10/22 19:26:15
380
>>407
遅くなりましたが、回答ありがとうございました!!
もっと自分で学習せないかんですね・・・

544:デフォルトの名無しさん
08/10/22 19:27:58
fread(&px1,sizeof(float),1,fp1);
fread(&px2.sizeof(float),1,fp2);
write(&opx,sizeof(float),1,fp3);
&いるっけ?

545:デフォルトの名無しさん
08/10/22 19:28:47
ごめん、いるわw
勘違いでした

546:デフォルトの名無しさん
08/10/22 19:47:51
×fp1 = open("argv[1]", "rb");
○fp1 = open(argv[1], "rb");

×fread(&px2.sizeof(float),1,fp2);
○fread(&px2.sizeof(float),1,fp2);
        ^

547:デフォルトの名無しさん
08/10/22 19:48:27
ああ、まちがえた。
×fread(&px2.sizeof(float),1,fp2);
○fread(&px2,sizeof(float),1,fp2);
        ^

548:デフォルトの名無しさん
08/10/22 20:11:32
483 484 お二人ともありがとうございました。質問の内容がわかりにくくてすいません。
ありがとうございました

549:デフォルトの名無しさん
08/10/22 20:26:48
>>541
問1
最後のfor内を次のようにする

printf("%+d", pwork->coef);
if(pwork->degree_of_x)
printf("x^{%d}", pwork->degree_of_x);

問2
printf("Input the coefficient: ");の前にpmx->next = poly;を入れる
poly = pmx;の後ろのpmx->next = poly;を消す

550:デフォルトの名無しさん
08/10/22 21:22:28
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
 ① 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と平均値から突飛している値=最大値を求めなさい。最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。
 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。
 この作業をファイルの最後の2097152個目の値までやりなさい。
 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。
 ヒント:malloc関数

 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。)
 URLリンク(kissho6.xii.jp)
 DLKey:data
 
 ② 求めた最大値を2次元配列でpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を出力させ、2行目からは次の1024個中から求めた最大値を出力させなさい。
 同様に3行目、4行目、・・・と順次最大値を出力させなさい。
 例:peak.txt →  472 234 800 578 ・・・・
           677 347 554 532 ・・・・
           843 637 347 551 ・・・・
           ・
           ・
           ・
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: LSI-86
 [3.3] 言語: C
[4] 期限: 2008年10月23日午後3時
[5] その他の制限: 特になし

>>500 gccでコンパイルしてみたんですが、うまくいきませんでした。
エラー表示 → main.c:56: undefined reference to`_nao_DList_t_ctor'

よろしくお願いします。


551:デフォルトの名無しさん
08/10/22 21:25:05
>>497>>550 問題文修正しました
[1] 授業単元: 信号処理
[2] 問題文(含コード&リンク):
 ① 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と平均値から突飛している値=最大値を求めなさい。最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。
 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。
 この作業をファイルの最後の2097152個目の値までやりなさい。
 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。
 ヒント:malloc関数

 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。)
 URLリンク(kissho6.xii.jp)
 DLKey:data
 
 ② 求めた最大値を2次元配列でpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を出力させ、2行目からは次の1024個中から求めた最大値を出力させなさい。
 同様に3行目、4行目、・・・と順次最大値を出力させなさい。
 例:peak.txt →  472 234 800 578 ・・・・
           677 347 554 532 ・・・・
           843 637 347 551 ・・・・
           ・
           ・
           ・
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc または LSI-86
 [3.3] 言語: C
[4] 期限: 2008年10月23日午後3時
[5] その他の制限: 特になし

>>500 gccでコンパイルしてみたんですが、うまくいきませんでした。
エラー表示 → main.c:56: undefined reference to`_nao_DList_t_ctor'

よろしくお願いします。

552:デフォルトの名無しさん
08/10/22 21:31:09
[1] 授業単元: C++
[2] 問題文(含コード&リンク):

標準入力から山の名前とその標高を入力し、標高の高い順にソートして、山の名前を表示するプログラムを作れ。

STLのpairを使うこと。 


[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C++
[4] 期限: 明日
[5] その他の制限: 特になし


553:デフォルトの名無しさん
08/10/22 21:44:28
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):

void desc_array(int n, int *array)
{
int i;
for (i = n-1; i >= 0; i--)
array[i] = i;
}

降順にソートされた配列を作成したいが、上の関数では昇順に配列が作成されてしまうので誤りである。
そこで上の関数を正しい形に修正し、ディスプレイに表示し実際に降順となっていることを確かめられるプログラムを作れ。
(降順というのはたとえば、a[0] = 0, a[1] = -1, a[2]= -2, ..., a[n-1] = -(n-1)となっていればいい。)

[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月23日
[5] その他の制限:無し

お願いします。


554:デフォルトの名無しさん
08/10/22 21:56:59
>>551
あれ、だめだったのか。
Terminalから、makeするだけでいいはずなんだけどconfigure作ってなかったからかもしれないなぁ。
READMEファイルでも読んで、ダメだったらどうしよう。
URLリンク(kissho1.xii.jp)
DLkey : foo
処理の効率化とかヘッダファイルに使いかたとか書いといたので、うまくいかなかったらソース自体変更してみてね。

555:デフォルトの名無しさん
08/10/22 22:17:30
>>553
array[i] = i;

array[i] = -i;

556:デフォルトの名無しさん
08/10/22 22:20:37
>>554
:set backupdir=/tmp
とでもするといいよ。ってemacsでも~作るんだったらそっちはわかんね><

557:デフォルトの名無しさん
08/10/22 22:29:17
>>552
こんなん?
URLリンク(kansai2channeler.hp.infoseek.co.jp)

558:デフォルトの名無しさん
08/10/22 22:49:48
>>556
ありがたく追加させていただきました。
基本viを使っています。たまにvimになったり、geditになったりもしますが、emacsは使いません。
でも、S式っていいよね、とか言ってみるてst。

559:デフォルトの名無しさん
08/10/22 23:22:08
>>551
これでいい?
URLリンク(kansai2channeler.hp.infoseek.co.jp)

560:デフォルトの名無しさん
08/10/22 23:31:34
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):x^3-7x^2+16x-10=0 の解をニュートン法を用いて求めるプログラムを作りなさい。
[3] 環境 OS: Windows
[4] 期限: 2008.10.24

お願いします。


561:デフォルトの名無しさん
08/10/22 23:47:43
>>560
はい。
#include<stdio.h>
#include<math.h>
#define EPS 0.0001
//x^3-7x^2+16x-10
double f(double x){ return x*(x*(x-7)+16)-10; }
//3x^2-14x+16
double df(double x){ return x*(3*x-14)+16; }

int main(){
double x,next=0;
do{
x=next;
next = x - f(x)/df(x);
}while(fabs(next-x) > EPS*fabs(x));
printf("%f\n",next);
}

562:デフォルトの名無しさん
08/10/22 23:51:22
[1] 授業単元: C
[2] 問題文(含コード&リンク):
プログラムの冒頭で
#define YEAR 2005
#define MONTH 12
#define DATE 24
#define HOUR 00
#define MIN 00
#define SEC 00
#define STEP 20
と定義して、STEP秒毎の西暦、月、日、時、分、秒を99STEP分出力する関数を作成せよ。
「出力例」
01:2005/12/24/00:00:00
02:2005/12/24/00:00:20
03:2005/12/24/00:00:40
04:2005/12/24/00:01:00
    ・
    ・
    ・
99:
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: borland c++5.5
 [3.3] 言語: C
[4] 期限: ([2008年10月24日まで]
[5] その他の制限: なし

以上よろしくお願いします。

563:デフォルトの名無しさん
08/10/23 00:04:47
>>555
ありがとう。作成した配列をディスプレイに表示する所が分からないのですが、
printf内にどうやってdesc_arrayで作成したarray[i] = iの部分を書けばいいのでしょうか?

564:デフォルトの名無しさん
08/10/23 00:06:39
printf("array[%d] = %d,i,srray[i])

565:デフォルトの名無しさん
08/10/23 00:11:11
>>561
ありがとうございます。

566:デフォルトの名無しさん
08/10/23 00:19:41
すいません>>560ですが
コンパイルしようとすると
bccは内部コマンド、外部コマンド
操作可能なプログラムコマンドまたはバッチファイルとして認識しません。
と出るんですが、どうすればいいのですか??

567:デフォルトの名無しさん
08/10/23 00:25:41
bcc32じゃないの? つーかそもそもコンパイラはいってるの?

568:デフォルトの名無しさん
08/10/23 00:26:32
宿題以前だろ…

569:デフォルトの名無しさん
08/10/23 00:38:00
>>567>>568
すいませんでした・・・
解決しました。

570:デフォルトの名無しさん
08/10/23 00:40:20
>>562
URLリンク(kansai2channeler.hp.infoseek.co.jp)

571:デフォルトの名無しさん
08/10/23 00:42:54
>>562
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define YEAR 2005
#define MONTH 12
#define DATE 24
#define HOUR 00
#define MIN 00
#define SEC 00
#define STEP 160000
int main(){
int i;
char buf[1024];
struct tm date;
time_t now;
date.tm_year = YEAR - 1900;
date.tm_mon = MONTH - 1;
date.tm_mday = DATE;
date.tm_hour = HOUR;
date.tm_min = MIN;
date.tm_sec = SEC;
for(i=1;i<=99;i++){
if((now = mktime(&date)) == -1) return 1;
strftime(buf,sizeof(buf),"%Y/%m/%d/%X",&date);
printf("%02d:%s\n",i,buf);
date.tm_sec += STEP;
}
}

572:デフォルトの名無しさん
08/10/23 01:17:36
[1] 授業単元:C
[2] 問題文(含コード&リンク):3つの整数を入力し,それらを比較して,大,中,小を判定しなさい.
3つの整数が同じ値の場合,あるいは2つの整数が同じ値の場合でも
正確に判定ができるように対応すること.
全ての条件を場合分けするプログラムは不可とする.
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 10月30日13:00
[5] その他の制限: 特になし

お願いします

573:デフォルトの名無しさん
08/10/23 01:18:46
下記のように出力するプログラムをprintf,getsを用いて作成せよ.

./a.exe

学籍番号は? XXXXXXXXX
名前は? AAAA BBBB

学籍番号: XXXXXXXXX
名前 :AAAA BBBB

574:573
08/10/23 01:21:05
>>573の続き
↓じゃ出力のAAAAが出ないのですがどうしたらいいですか?

#include<stdio.h>

int main()
{
char st1[80];
char st2[80];

printf("学籍番号は?");
scanf("%s",st1);

gets(st2);

printf("名前は?");
scanf("%s",st2);

gets(st2);

printf("学籍番号:%s\n",st1);
printf(" 名前 :%s\n",st2);
}

575:デフォルトの名無しさん
08/10/23 01:23:25
>>574
scanfいらない

576:573
08/10/23 01:25:35
>>573の補足

学籍番号は? XXXXXXXXX      補足→ XXXXXXXXXはキーボードで打ちます
名前は? AAAA BBBB        補足→ AAAA BBBBはキーボードで打ちます

577:573
08/10/23 01:27:02
>>575
即レスありです。

両方ともいらないですか?

578:デフォルトの名無しさん
08/10/23 01:35:17
>>577
両方いらないです。

579:573
08/10/23 01:41:48
名前はちゃんと出ましたが学籍番号がちゃんと出ません><

580:デフォルトの名無しさん
08/10/23 02:02:51
>>579
記載ミスだと思ってスルーしてましたが
1つめのgetsの引数は st1 にしていますよね?

581:デフォルトの名無しさん
08/10/23 02:03:35
>>574
#include<stdio.h>

int main()
{
char st1[80];
char st2[80];

printf("学籍番号は?");
gets(st1);

printf("名前は?");
gets(st2);

printf("学籍番号:%s\n",st1);
printf(" 名前 :%s\n",st2);

return 0;
}


582:デフォルトの名無しさん
08/10/23 04:59:48
>>572
#include<stdio.h>
int main(void){
int a, b, c, flag = 0;
printf("Input Number (a,b,c) : ");
scanf("%d,%d,%d", &a, &b, &c);
if(a >= b) flag |= 0x01;
if(b >= c) flag |= 0x02;
if(c >= a) flag |= 0x04;
printf("大中小\n");
switch(flag){
case 0x01: printf("%2d%2d%2d\n", a, c, b); break;
case 0x02: printf("%2d%2d%2d\n", b, a, c); break;
case 0x03: printf("%2d%2d%2d\n", a, b, c); break;
case 0x04: printf("%2d%2d%2d\n", c, b, a); break;
case 0x05: printf("%2d%2d%2d\n", c, a, b); break;
default: printf("%2d%2d%2d\n", b, c, a);
}
return 0;
}

583:573
08/10/23 08:21:48
>>581
ありがとうございます。

584:デフォルトの名無しさん
08/10/23 09:54:51
>>564
#include<stdio.h>

void desc_array(int n, int *array)
{
int i;
for (i = n-1; i >= 0; i--)
array[i] = -i;

}

int main()
{
int n,i;
int *array;
n =8;
desc_array(n,array);

printf("array[%d] = %d",i,array[i]);
return 0;
}

mainの中のどこが違うんでしょうか?セグメントエラーを吐きます。

585:デフォルトの名無しさん
08/10/23 10:00:08
>>554
>>556
ありがとうございました。うまくコンパイルすることができました。
本当に助かりました。m(__)m

>>559
シンプルでわかりやすいプログラムありがとございます。
まだちゃんと解読してないんですけど、peak.txtの出力した最大値が
1024個中5個だけってことなんでしょうか? 一応、求めた平均値より突飛して高い値(最大値とする)
をpeak.txtに出力したいんですけど・・・最大値の数は特に指定はないです。

586:デフォルトの名無しさん
08/10/23 10:11:17
>>584
main() 無効なアドレスをさしている変数 array
たぶんやりたいのは、
#include <stdlib.h>を、#include <stdio.h>のしたあたりに追加。
n = 8;の後に、array = (int *)malloc(sizeof(int) * n);
if ( array == NULL ) {
fprintf(stderr, "Error : Bad alloc !\n");
exit(8);
}
その後、desc_array(n, array);
で、arrayを使わなくなったら、free(array);

587:デフォルトの名無しさん
08/10/23 10:17:06
MCIでデータ1データ2データ3を同時に鳴らした時、
コールバックでどのデータが終了したか
どうやって判断したらいいですか?

588:デフォルトの名無しさん
08/10/23 10:47:44
[1] 授業単元: 情報工学演習
[2] 問題文(含コード&リンク):
数独のような問題を解くプログラムと、ポーカーでの強さを判定するプログラム
詳細は下のテキストファイルに書いてあります
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月24日13時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
main関数は必ずテキストファイルに書いてあるもののままにしてください。
それ以外の部分もなるべくそのままでお願いします。
また、なるべく理解したうえで少し自分なりに手直したいので、
どんな手順で判定を行っているのかなど、軽く説明していただけると助かります。

できれば今日中にお願いします。急なお願いで申し訳ありません。

589:デフォルトの名無しさん
08/10/23 10:49:54
>>584
int *array;

int array[8];
にしたらいい


590:デフォルトの名無しさん
08/10/23 11:37:57
>>584
そもそも i に値がはいってないな。

591:デフォルトの名無しさん
08/10/23 12:22:37
>>585
なんか5個だと思い込んでたw
てか最大値って言葉わかりにくいー極大値とか外れ値とかそんな感じ??
飛び抜けて大きな値って平均値の何倍かとかで調べたいんですか?
よくわかんないので標準偏差の何倍かで調べるようにしてみました。
てかこのまえupした画像で考えると、グラフで飛び出した点を求めなきゃいけないとするといったん並べ替えるのはよくないのだろうか・・・??
URLリンク(kansai2channeler.hp.infoseek.co.jp)

592:デフォルトの名無しさん
08/10/23 12:56:53
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ユーザから2から100までのいずれかの整数を受け取り、1からその数までの総和を計算する
プログラムをfor文を使って書け。利用者が範囲外の数値を入力した場合、「値が範囲内にありません」
などのエラー表示を行え。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名 gcc
 [3.3] 言語: C
[4] 期限: 2008/10/25
[5] その他の制限:まだ初めて日が浅く、習ったのはif else文やforループくらいまでです。

よろしくお願いします。

593:デフォルトの名無しさん
08/10/23 13:03:19
1] 授業単元:c++ builder
[3] 環境
 [3.1] OS:Widows XP
 [3.3] 言語:C++
[4] 期限:2008/10/24
[5] その他の制限:Cの基本言語程度

Memo1に60行の配列の乱数を出したのですが、そのMemo1にある60行の乱数の平均の数を
Edit1に出すプログラムがどうしてもできません。
どなたか教えていただけないでしょうか。よろしくおねがいします。

594:デフォルトの名無しさん
08/10/23 13:19:31
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):100 個の整数型配列を宣言して,各要素に2~200 の偶数値を格納し,配列要素の
総和を求めて出力するプログラムをつくりなさい。ただし,配列への値の格納,総和の
計算ともポインタを用いて実行すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:08年10月24日24:00まで

どうかお願いします。

595:デフォルトの名無しさん
08/10/23 13:55:57
>>588 問2
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これでいい?
問題文にあった3つの動作例でしかチェックしてない。

596:デフォルトの名無しさん
08/10/23 14:07:55
[1] 授業単元:プログラム・C言語
[2] 問題文(含コード&リンク):
以下のようなプログラムを作成しなさい

まず標準入力から、姓と名をそれぞれ別のchar配列型変数で受取る。
次に別の空のchar配列型変数に名と姓の間にスペースを挿入して格納し、表示するプログラム。
※ヒント 
空のchar配列型変数に「名」を入れる時はstrcpy()、スペースと「姓」を追加する時はstrcat()を使う
とよい。

実行例
./a
family name? sato
first name? zin

zin sato

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名 gcc
 [3.3] 言語: C
[4] 期限: 2008/10/25
[5] その他の制限:まだ序の口レベルです。 #include <stdlib.h>のみでお願いします。

何卒よろしくお願いします。

597:デフォルトの名無しさん
08/10/23 14:19:28
>>592
#include <stdio.h>

int main(void)
{
int n, i, sum=0;

printf("値を入力してください\n");
scanf("%d", &n);

if(n < 2 || n > 100)
{
printf("値が範囲内にありません\n");
}
else
{
for(i=1; i<=n; i++)
{
sum += i;
}
printf("総和 = %d\n", sum);
}

return 0;
}

598:デフォルトの名無しさん
08/10/23 14:22:11
>>596
#include <stdio.h>
#include <string.h>

int main()
{
char family_name[16], first_name[16], name[32];

printf("family name? ");
gets(family_name);
printf("first_name? ");
gets(first_name);

strcpy(name, first_name);
strcat(name, " ");
strcat(name, family_name);

printf("%s", name);

return 0;
}

599:デフォルトの名無しさん
08/10/23 14:29:38
>>594
#include <stdio.h>

void Set(int *buf)
{
int i;

for(i = 0; i < 100; i++)
buf[i] = (i+1)*2;
}

int Sum(int *buf)
{
int i, sum = 0;

for(i = 0; i < 100; i++)
sum += buf[i];

return sum;
}

int main()
{
int buf[100];

Set(buf);

printf("%d", Sum(buf));

return 0;
}

600:デフォルトの名無しさん
08/10/23 14:40:52
>>595
返答ありがとうございます。

無理でしたら構いませんが、なるべく関数poker_hand内で全ての動作を
記述している形がよいので、できればその形に組みなおしていただきたいのですが
とりあえず参考にしつつ自分でも作ってみておきます。
問1に関してもできればnumber_place内で全て記述している形でお願いします。
無茶な要求をしてしまって申し訳ありません。

601:デフォルトの名無しさん
08/10/23 14:59:44
[1] 授業単元:CG(C言語使用)
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
OpenGLによるCGを用いたプログラムを、自由に設計する課題を作成。
条件として、「アニメーションが行えること」、「キーボード入力によって何らかの
操作が行えること」、「シェーディングやテクスチャマッピングを適切に使用できること」
です。前者2つとシェーディングは何とか理解出来ますが、テクスチャマッピングが
思うように設計できません。どなたか専門知識をお持ちの方、私が添付したプログラムのどの
辺にどのような関数をセットすればよいかなど、いわゆる作成方法についてご指導
お願いします。なお、テクスチャマッピングは壁を設計する予定です。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C++(bcc32)
 [3.3] 言語:C
[4] 期限:2008年10月23日22時半

なお、期限については今日中としますが、今日中に良い意見が集まらなければ明日も
募集する予定です。宜しくお願いします。

602:デフォルトの名無しさん
08/10/23 15:02:17
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

↑↑の画像の一番明るい場所を、
画像の中心を(0,0)とした座標として表示するプログラムを
つくりなさい。また、その明度の値も表示するようにしなさい。
例に示した画像はjpeg形式ですが、非圧縮bmp(白黒)
の場合でも可能です。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C
[4] 期限:今月中
[5] その他の制限:なし

よろしくお願いします。

603:デフォルトの名無しさん
08/10/23 15:08:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

文字列を入力し、その文字列が外部のテキストファイルに存在すれば、OK!と表示するプログラムを作れ

外部テキストは

apple
egg




のように10万個ほどの単語が書かれている。

効率的に探せるならば、C++のSTL等を用いてよい


[3] 環境
 [3.1] OS: Xp
 [3.2] VC 6.0
 [3.3] 言語: C++
 [4] 期限:明日
[5] その他の制限:


お願いします

604:592
08/10/23 15:12:26
>>597
早いレスで助かります。
どうもありがとうございました。

605:デフォルトの名無しさん
08/10/23 15:22:15
>>600
URLリンク(kansai2channeler.hp.infoseek.co.jp)
もうやだ。こんなプログラム見たくねえorz

606:デフォルトの名無しさん
08/10/23 15:33:58
ただのストレートでも 10 → A いけるんだとしった
ロイヤルの時だけだと思ってたわ

607:デフォルトの名無しさん
08/10/23 15:36:11
>>582
ありがとうございます

608:デフォルトの名無しさん
08/10/23 15:38:37
>>588
問1
URLリンク(kansai2channeler.hp.infoseek.co.jp)

合ってるといいなw

609:デフォルトの名無しさん
08/10/23 16:03:17
>>603
こんなでいい?
#include<iostream>
#include<fstream>
#include<string>
#include<set>
using namespace std;
typedef set<string> Dictionary;
int main(){
string word;
Dictionary dict;
ifstream ifs("in.txt");
if(!ifs.is_open()) return 1;
while(!ifs.eof()){
ifs >> word;
dict.insert(word);
}
ifs.close();
while(1){
cout << "Search:";
cin >> word;
if(dict.find(word) != dict.end()) cout << "OK!" << endl;
else cout << "Not found." << endl;
}
}

610:デフォルトの名無しさん
08/10/23 16:09:27
>>599

丁寧な回答ありがとうです!




611:デフォルトの名無しさん
08/10/23 17:50:21
[1] 授業単元:文字列の探索
[2] 問題文(含コード&リンク):
(1)ファイルの先頭からテキストを1行ずつ(1行の文字数は999文字以下とする)読み込み、
  何行目の何文字目に検索文字列の先頭が存在するか出力する。
(2)探索文字列中に同じ文字が複数含まれる場合について検索方法を改良する。

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

[3] 環境 
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc (ver不明です)
 [3.3] 言語: C言語
[4] 期限: 2008年10月27日23:59まで
[5] その他の制限:問題文中のプログラムの「//ここにボイヤームーア法」の場所を補ってプログラムを組む感じです。
どうかお願いします。。

612:デフォルトの名無しさん
08/10/23 19:16:59
>>602
libjpeg 使っていいんだったら
URLリンク(kansai2channeler.hp.infoseek.co.jp)

613:デフォルトの名無しさん
08/10/23 19:37:45
>>598

あなたのお陰で非常に助かりました。
ありがとうございます。

614:デフォルトの名無しさん
08/10/23 19:41:20
[1] 授業単元: アルゴリズムとデータ構造
[2] 問題文:次の関数のゼロ点を求めるプログラミングをせよ。
        f(x) = x^4-10x^3+ 35x^2-50^x+24
        探索区間はx = 0から5(数学的表現では、x = [0; 5))であり
        実数解が4個あることを留意せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月24日1300まで
[5] その他の制限:2分法を使って組んでいただけませんか。

615:デフォルトの名無しさん
08/10/23 20:49:21
>>614
#include <stdio.h>
#include <math.h>
double f( double x )
{
return pow(x,4) -10 * pow(x,3) + 35 * pow(x,2) - pow(50,x) + 24;
}
int main()
{
double x = 1.0;
printf( "f(%lf) = %lf\n", x, f(x) );
return 0;
}

616:614
08/10/23 20:54:54
>>615
おい
ふざけんな

617:デフォルトの名無しさん
08/10/23 21:09:28
【質問テンプレ】
[1] 授業単元:仕事
[2] 問題文(含コード&リンク):
"00 00 01 bd 80 80 ...."
とスペースや改行も含めた
テキストファイルから
0x00 0x00 0x01 のバイト列に
変換するコードをください

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++どちらでも可
[4] 期限: 2008/10/24 10:00
[5] その他の制限:特に無しです

よろおね

618:デフォルトの名無しさん
08/10/23 21:11:04
>>614
実数解が1個しか無いんだが。。。
#include <stdio.h>
#include <math.h>
#define DELTA 1e-4

double f(double x) { return pow(x, 4) - 10*pow(x, 3) + 35*pow(x, 2) - pow(50, x) + 24; }
int main(int argc, char *argv[])
{
double left = 0.0, right = 5.0, mid = 2.5;
if (f(left) * f(right) > 0) {
return 1;
}
while (fabs(f(mid)) > DELTA) {
mid = (left + right) / 2;
if (f(left) * f(mid) < 0)
right = mid;
else
left = mid;
}
printf("x = %f\n", mid);
return 0;
}

619:614
08/10/23 21:16:10
すいません関数が間違っていました
f(x)=x^4-10*x^3+35*x^2-50*x+24

620:デフォルトの名無しさん
08/10/23 21:27:33
[1] 授業単元:文字列
[2] 問題文(含コード&リンク):

mozi1_mozi2_mozi3のように_で区切られた文字列を標準入力から入力し、stringに格納する。

char *list1[5] = {"test","test2","test3","test4","test5"} と *list2[3] = {"hoge",hoge2","hoge3"} の文字列へのポインタの配列
がある。

mozi1はlist1の文字列と比較し、一致するものがあればその添え字を表示し、
mozi2はlist2の文字列と比較して、同様の動作をするプログラムを作れ。

mozi1がtest2であれば1を表示
mozi2がhoge3であれば2を表示する。一致するものがなければその旨を表示すること



[3] 環境 
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C++
[4] 期限: 2008年10月25日
[5] その他の制限

お願いします。

621:615
08/10/23 21:43:09
>>619
>>616

622:デフォルトの名無しさん
08/10/23 21:55:07
>>611
質問が
BM法ってリスト2つ使った奴じゃないと駄目?
それとも簡略版でいいのかしら

623:デフォルトの名無しさん
08/10/23 22:49:19
1] 授業単元: C++
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C++
[4] 期限:10月 24日(土)まで

期限が短いですがお願い致します。


624:デフォルトの名無しさん
08/10/23 22:53:58
ここってGUIも受け付けてもらえますか?

625:デフォルトの名無しさん
08/10/23 22:56:54
受け付けてもらえます

626:611
08/10/23 22:57:38
>>622
ありがとうございます。
講義内でも問題文に書かれた以上のことは言われなかったのですが、簡略版で大丈夫です。
とりあえず、「力まかせの探索」でなければ大丈夫とのことでした。

627:デフォルトの名無しさん
08/10/23 22:58:21
[1] 授業単元: 信号解析
[2] 問題文(含コード&リンク):

一定周期を持つ弱い外力f(t) とガウス分布するノイズξ(t) を受けながら、ポテンシャル
Vo(x) 中を動く玉の運動は、玉の座標をx(t) として、

τdx/dt = -dV/dx + ξ(t)
< ξ(t)ξ(t') > = A * б (t - t')
< ξ(t) > = 0 …①

で記述される。ここで、A はノイズの強さ、τ は系の時定数である。また、全ポテンシャル
V (x; t) は、時間と共に周期的にその形を変える:

V(x,t) = Vo(x) - f(t)x
= -1/2*ax^2 + 1/4*bx^4 - hxcos(wt)

で与えられる。
a = 1.0 * 10^(-3)、b = 1.0 * 10^(-5)、 h = 2 * 10^(-3)とする。
t = 0 において、玉はx = 10 にあるとする。
τ = 1.0 * 10^(-4)、ノイズの分散 A = 7.0*10^(-4)、ω = 2π/10とする。
①式を時間発展させて、玉の位置と周期的な外力f(t)に比例する量である10cos(ωt)をグラフに表せ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年10月24日23:59まで
[5] その他の制限: 特になし

 よろしくお願いします

628:デフォルトの名無しさん
08/10/23 23:00:13
>>624
では書きます。

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ファイルを開く・保存のコモンダイアログを使い、選択されたファイルをテキストに書き出すプログラムを作れ。
ファイルは複数選択される場合もある。
express版の場合、外部のリソースエディタは用いてかまわない。


出力されるファイル
test.bmp
data.wav
data2.wav




[3] 環境 
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual studio 2008
 [3.3] 言語: C or C++
[4] 期限: 2008年10月26日
[5] その他の制限

629:デフォルトの名無しさん
08/10/23 23:02:11
>>627 問題文修正しました
[1] 授業単元: 信号解析
[2] 問題文(含コード&リンク):

一定周期を持つ弱い外力f(t) とガウス分布するノイズξ(t) を受けながら、ポテンシャル
Vo(x) 中を動く玉の運動は、玉の座標をx(t) として、

τdx/dt = -dV/dx + ξ(t)
< ξ(t)ξ(t') > = Aб(t - t')
< ξ(t) > = 0 …①

で記述される。ここで、A はノイズの強さ、τ は系の時定数である。また、全ポテンシャル
V (x; t) は、時間と共に周期的にその形を変える:

V(x,t) = Vo(x) - f(t)x
= -1/2*ax^2 + 1/4*bx^4 - hxcos(wt)

で与えられる。
a = 1.0 * 10^(-3)、b = 1.0 * 10^(-5)、 h = 2 * 10^(-3)とする。
t = 0 において、玉はx = 10 にあるとする。
τ = 1.0 * 10^(-4)、ノイズの分散 A = 7.0*10^(-4)、ω = 2π/10とする。
①式を時間発展させて、玉の位置と周期的な外力 f(t) に比例する量である 10cos(ωt) をグラフに表せ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年10月24日23:59まで
[5] その他の制限: 特になし

 よろしくお願いします

630:デフォルトの名無しさん
08/10/23 23:03:31
この分野では、Sunday のアルゴリズムが究極では?


表 : 実行結果

: 時間 (秒) : 比較回数
-------------------------------
力任せ : 0.133 : 149,938
BM 法 : 0.046 : 30,168
BMH 法 : 0.041 : 29,728
quick : 0.033 : 25,094

URLリンク(www.geocities.jp)

631:デフォルトの名無しさん
08/10/24 00:41:06
名前を変えるほど改良されてる訳でもない気がしないでもない

632:デフォルトの名無しさん
08/10/24 01:09:30
Quick Search algorithm URLリンク(www-igm.univ-mlv.fr)

The C code
void preQsBc(char *x, int m, int qsBc[]) {
int i;

for (i = 0; i < ASIZE; ++i)
qsBc[i] = m + 1;
for (i = 0; i < m; ++i)
qsBc[x[i]] = m - i;
}


void QS(char *x, int m, char *y, int n) {
int j, qsBc[ASIZE];

/* Preprocessing */
preQsBc(x, m, qsBc);

/* Searching */
j = 0;
while (j <= n - m) {
if (memcmp(x, y + j, m) == 0)
OUTPUT(j);
j += qsBc[y[j + m]]; /* shift */
}
}



633:デフォルトの名無しさん
08/10/24 01:11:48
[1] 授業単元:C
[2] 問題文: (1)1~50までの整数の中から異なるいくつかをえらんび、
掛け合わせても一の位が0にならないようにする。選ぶことができる整数は40個。
上の文をプログラムで出力せよ。

(2)1~50までの全てを掛け合わせると末尾の0を数えるプログラムを書け。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 10月24日8:00
[5] その他の制限:特になし

(1)は2の倍数、5の倍数が少なくとも1個ずつ入ったときにだけ1の位が0になる
ので2の倍数と5の倍数が同居しないように計算します。

634:デフォルトの名無しさん
08/10/24 02:25:39
>>633
(2)
#include <stdio.h>

int main(void)
{
int i, c1 = 0, c2 = 0;

for(i=1; i<=50; i++) {
int temp = i;
for(; !(temp%2); c1++) temp /= 2;
for(; !(temp%5); c2++) temp /= 5;
}

printf("%d", c1 < c2 ? c1 : c2);

return 0;
}

635:デフォルトの名無しさん
08/10/24 02:55:22
>>634
あたまいいなあ

636:デフォルトの名無しさん
08/10/24 03:09:59
(2)は50を5^nで割った商を足してけばいいと思う
int cnt=0,t;
for(t=5;50/t;t*=5){
cnt+=50/t;
}
printf("%d\n",cnt);

637:デフォルトの名無しさん
08/10/24 03:12:31
理由は素因数として2より5の方が少ないから。
数字を並べてみて1~50までに因数の5がいくつあるか数えるには?

638:デフォルトの名無しさん
08/10/24 03:36:40
理由はもっともだが>>636にはハテナがたくさんだ

639:デフォルトの名無しさん
08/10/24 04:41:46
>>623
期限は10月24日(金)の11:00でした。
書き間違えてすみません。
よろしくお願いします。

640:639
08/10/24 06:35:26
期限はアメリカ東海岸時間(EST)の10月24日(金)の11:00です
日本時間だと10月25日の11:00になります。
再再度訂正すみません

641:デフォルトの名無しさん
08/10/24 06:43:17
すいません、C/C++以外の課題を聞けるスレってあります?

642:デフォルトの名無しさん
08/10/24 06:59:49
[1] 授業単元: C
[2] 問題文:
2つの固有値から2×2の行列を求めるプログラムを作りなさい。
固有値は整数のみとする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2]コンパイラ名とバージョン:Visual studio
 [3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:特になし

643:デフォルトの名無しさん
08/10/24 11:03:10
620をお願いします

644:デフォルトの名無しさん
08/10/24 11:44:17
[1] 授業単元:C言語 (ポインタ)

[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

[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:08年10月25日24:00まで
[5] その他の制限:C言語の基本的な関数のみでお願いします。


645:デフォルトの名無しさん
08/10/24 12:04:13
>>639
和訳くらいしたらどうなの・・・

646:602
08/10/24 12:33:22
>>612
回答ありがとうございます!
助かりました。



647:デフォルトの名無しさん
08/10/24 12:41:56
>>644
#include <stdio.h>
int hit_digit(int x,int d);
int main(void) {
int d,n,x;
printf("0~9 の数字d を入力して下さい:");
scanf("%d",&d);
printf("正の整数n を入力して下さい:");
scanf("%d",&n);
for(x=0;x<=n;x++) if(hit_digit(x,d)) printf("%d\n",x);
return 0;
}
int hit_digit(int x,int d) {
int y,z;
y=x;
z=x*x;
for(;y;y/=10) if(y%10==d) for(;z;z/=10) if(z%10==d) return 1;
return 0;
}


648:デフォルトの名無しさん
08/10/24 13:34:34
>>591
レス返信遅くなりました。
最大値というよりは極大値という感じですね。
飛び抜けて大きな値ってのは (平均値+5*ρ) 以上の値のことを指し示すのですが
ρってのが平均値の標準偏差です(たぶん)。

グラフで飛び出した点を求めたら、並べ替えなくていいそうです。

てかコンパイル通したら、peak.txtが出力されませんでした。今、プログラム解読中です(汗)


649:デフォルトの名無しさん
08/10/24 14:39:57
[1] 授業単元: C言語
[2] 問題文:縦軸「|」横軸「-」グラフ「*」
を使って±√xのグラフを書け
[3] 環境
 [3.1] OS:mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 10月26日
[5] その他の制限: 基本的な関数のみでお願いします

650:デフォルトの名無しさん
08/10/24 15:36:43
>>649
#include <stdio.h>
int main()
{
int x, y;
for (y = -4; y < 5; y++)
{
putchar('|');
for (x = 0; x < y * y; x++)
{
putchar(' ');
}
putchar('*');
putchar('\n');
}
return 0;
}


651:デフォルトの名無しさん
08/10/24 15:37:15
横軸忘れた

652:デフォルトの名無しさん
08/10/24 16:05:49
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
  トランプを切る方法の1つとして、トランプを2つにわけて両手でぱらぱらと切る方法がある。
  今、トランプは、ジョーカーを除いた52枚とする。もし、切り方のうまい人がいて、トランプ
  を正しく半分(26枚)にして、かつ交互に1枚ずつ切れるとする。
  この方法では、何回か行うと元に戻ることが知られている。さて、何回で元に戻るでしょうか。
  これを計算するプログラムを作成してください。

  与えられたヒント
  52個の要素をもつ配列P,Qを用意します。最初は、Pi←i+1(i=0,2,3,…,51)とデータをセットします。
  そして、Q2i←Pi(i=0,1,2,…,25)およびQ 2(i-26)+1←Pi(i=26,27,…,51)を行う。もし、Qの要素が
  1,2,3,…,52になっていたら終了であるが、そうでなければ、P←Qを行い、同じ手順を繰り返す。

[3] 環境
 [3.1] OS: Windows (cygwin使用)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 10月27日18:00時まで
[5] その他の制限: for文かwhile文でお願いします

653:デフォルトの名無しさん
08/10/24 16:27:02
株式会社損害保険ジャパン
スレリンク(saku2ch板)


1 名前:新甚 博史 広報室 室長代理 [HShinjin@sompo-japan.co.jp] :2007/07/27(金) 12:38 HOST:ZP144243.ppp.dion.ne.jp<8080><3128><8000><1080>
対象区分:[法人/団体]管理人裁定待ち
削除対象アドレス:
URLリンク(www2.2ch.net)

654:デフォルトの名無しさん
08/10/24 16:29:57
>>652
8回で戻ったけどあってる?


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