トップページ⇒tech
1001コメント402KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(12)
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

【前スレ】
C/C++の宿題を片付けます 76代目
http://pc8.2ch.net/test/read.cgi/tech/1162771475/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0449デフォルトの名無しさん2006/11/27(月) 03:36:49
>>448
> 数値配列
初耳の言葉だ
もっと説明モトム
0450デフォルトの名無しさん2006/11/27(月) 03:53:51
>>449
例えば、void test(double matrix[10][10], double *matrixPtr[10][10])
ってイメージで、matrix[10][10]を関数に入力して、
計算した結果をmatrixPtr[10][10]に出力するって感じです。

多分根本的なところが間違ってると思われますが、
void型の関数で不特定多数の、main関数で使える値を出すには
どうすればいいんでしょうか?
かなり日本語喋れってかんじだと思いますが、どうかよろしくお願いします・・・
0451デフォルトの名無しさん2006/11/27(月) 09:02:47
>>450
渡された配列の中身を書き換えるだけなら、わざわざ double *matrixPtr[10][10]
ってポインタ配列にする意味がわからん。mallocで確保でもするのか?
0452デフォルトの名無しさん2006/11/27(月) 10:43:21
値を変更するためにポインタにしなきゃいけないと思ってるんじゃない?
配列を引数にするってことがどういうことかわかってないんだろ。
04534422006/11/27(月) 10:44:03
<<447
早速の返答ありがとうございます。
でもこれって#include <stdio.h>だけで作れないですか?
最初の[5]で書いとくべきだったんですけどすみません。
多分、単語を切り取って文字数を出力し、文字数mを添字とする配列要素を
インクリメントしていく、という流れになると思うんですが・・・
本当に申し訳ないですが、よろしかったらお願いします。
0454デフォルトの名無しさん2006/11/27(月) 10:59:19
>>453
C++って書いておいてそれはねーだろw
0455デフォルトの名無しさん2006/11/27(月) 13:54:15
これはひどいwwwwww
0456デフォルトの名無しさん2006/11/27(月) 14:09:22
ワロタ
0457デフォルトの名無しさん2006/11/27(月) 15:43:38
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
20061109のように日付を入力すると、曜日を出力するプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:わかりませんがCygwinというものを使っています
 [3.3] 言語:C
[4] 期限:11月中
[5] 習っている内容からすると、putchar,getcharを用いて作成しなければいけないようです

よろしくお願いします
0458デフォルトの名無しさんNGNG?2BP(200)
>>457
使用する暦の種類と適用期間が分からないとやりようがない。
0459デフォルトの名無しさん2006/11/27(月) 16:01:07
宇宙世紀でお願いします。
0460デフォルトの名無しさんNGNG?2BP(200)
宇宙世紀に曜日の概念なんかあるんか?
04614572006/11/27(月) 16:41:01
西暦で、適用期間は特に指定されてないので適当に決めていいと思います・・・
0462デフォルトの名無しさん2006/11/27(月) 16:52:56
せめて日付から曜日を決定する計算式くらい出せよ
0463デフォルトの名無しさん2006/11/27(月) 16:52:57
コズミックイラで
0464デフォルトの名無しさん2006/11/27(月) 16:54:17
>>461
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
char cmd[100];
sprintf(cmd, "/bin/date -d '%s' +%%A", buf);
return system(cmd) >> 8;
}
0465デフォルトの名無しさん2006/11/27(月) 17:01:11
>>460
宇宙世紀1年には地球の人口が90億に達するそうだ
現在の傾向のまま人口が推移するとあと30年後ぐらい
0466デフォルトの名無しさん2006/11/27(月) 17:07:57
// 非環境依存版
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
struct tm tmp;
sscanf(buf, "%4d%2d%2d", & tmp.tm_year, & tmp.tm_mon, & tmp.tm_mday);
tmp.tm_year -= 1900;
tmp.tm_mon -= 1;
tmp.tm_hour = tmp.tm_min = tmp.tm_sec = 0;
mktime(& tmp);
strftime(buf, sizeof(buf), "%A", & tmp);
fputs(buf, stdout);
return 0;
}
0467デフォルトの名無しさん2006/11/27(月) 17:18:31
[1] 授業単元: 中級プログラミング
[2] 問題文(含コード&リンク):

どこに書いていいか迷いました。
実はもうコンパイルするだけのはずなのですが、コンパイラが通らずに詰まっています。
関数呼び出しとその引数の書き方の問題だと思うのですが、どうにもエラーがなくなりません。
よろしくお願いします。

ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28784

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: c
0468デフォルトの名無しさん2006/11/27(月) 17:24:54
>>467
まずコンパイルエラーもうpしなさい
04694672006/11/27(月) 17:33:44
>>468
すみませんでした。main関数内の
encode_caesar(*str);
decode_caesar(*str);
について「ポインタの型が合わない」だったかのエラーが出ていました。
変に引数なんかをいじると関数内でさらに複数行に渡ってエラーが出たりします。
エラーがあいまいなのは家に帰ってしまってCを動かせる環境にないためですorz
0470デフォルトの名無しさんNGNG?2BP(200)
>>461
ユリウス暦かグレゴリオ暦かくらい書け。
0471401=4042006/11/27(月) 18:13:10
>>439
するあいてがいません
>>440
ありがとうございます。
0472デフォルトの名無しさん2006/11/27(月) 18:15:18
>>457
cygwinでコンパイルしてるときなんてコマンド打ってんだよ
コマンド名からコンパイラ名くらい分かるだろ?

#include <stdio.h>

int youbikeisan(int date);

void main(){
int date;
scanf("%d",&date);
char youbi[][3]={"土","日","月","火","水","木","金"};
printf("その日は%s曜日です\n",youbi[youbikeisan(date)]);
}

int youbikeisan(int date){
int h,y;
h=date/1000000;
y=(date%1000000)/10000;
return (y+(y/4)+(h/4)-h*2+(13*((date%10000)/100+1)/5)+date%100)%7;
}
0473デフォルトの名無しさん2006/11/27(月) 19:23:21
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文 この状態から以下の関数を参考にしてリストの追加と削除ができるようにプログラムを追加する。出力のたびにリストの追加と挿入を「追加しますか?削除しますか?」と確認されるようにする。
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2006年11月28日午後2時
[参考プログラム]
int InsertMigi(node *current,int data){
/*currentで示されるノードの直後にデータを挿入する*/
node *p = CreateNode();//要素を入れる箱を用意
if(current == end){
q = end->next;
}
q->number = data;
q->next = current->next;
current->next = q;
return(EXIT_SUCCESS);
}
int Remove (node *current){
node *q;
q = current->next;
if(q == end){end = current;}
current->next=q->next;
free(q);
return(EXIT_SUCCESS);
}
0474デフォルトの名無しさん2006/11/27(月) 19:23:51
[問題文]
#include<stdio.h>
#include<stdlib.h>
typedef struct Node_template{
int number;
struct Node_template *next;
}node;
node *start = NULL;
int push(int data){
node *ptr = start;
start = (node *)malloc(sizeof(node));
if(start == NULL){
fprintf8stderr,"Nomore memory");
exit(1);
}
start->number = data;
start->next =ptr;[
return(EXIT_SUCCESS);
}
0475デフォルトの名無しさん2006/11/27(月) 19:25:36
[問題文続き]
int main(void){
int input_data;
int i;
node *p;
while(fprintf(stdout,"\n Enter an integar")
,scanf("%d",&input_data) == 1
){
push(input_data);
}
fprintf(stdout,"\nMemory Image\n");
i = 0;
for(p = start;p != NULL;p = p->next){
fprintf(stdout,"[%3d] = %5d\n",i,p->number);
i=i+1;
}
return(EXIT_SUCCESS);
}
0476デフォルトの名無しさん2006/11/27(月) 20:48:51
>>467
バグだらけだったので勝手に色々いじった。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3047.c
04774672006/11/27(月) 21:00:34
>>476
バグだらけ…orz
いやしかし大変助かりました。そういえば数字や記号が来た場合の処理に全く思考が及んでいませんでしたが、
isalphaという関数は初めて知りました。勉強になりました。
ありがとうございました。
0478デフォルトの名無しさん2006/11/27(月) 23:17:47
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
nを100000にして、 納i=0,n](-1)^i/i! を計算し、その逆数を
表示しなさい。
つまり 1/x=納i=0,n](-1)^i/i! のxを求めるということです。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:なるべく早めにお願いします。
[5] まだ習い始めたばかりでよくわからないのですが、
whileを使うみたいです。
なるべく簡単におねがいします。
よろしくお願いします。
0479デフォルトの名無しさん2006/11/27(月) 23:48:30
[1]情報処理応用
[2]http://www.sys.wakayama-u.ac.jp/om/
これの課題
[3][3.1]WindowsXP
[3.3]C++言語
[4]28日
[5]まったくわからないのでお願いします
0480デフォルトの名無しさん2006/11/27(月) 23:50:56
>>479
君の行っている大学はわかったが問題がどこにあるのかサッパリわからないのだが
04814792006/11/27(月) 23:52:54
すいませんアドレス間違ってました
http://www.wakayama-u.ac.jp/~miw/ApIp/06/9/9.html
これです
0482デフォルトの名無しさん2006/11/27(月) 23:54:24
>>479
問題が何なのかさっぱり分かりません
まったくわからないのでお願いします
04834782006/11/27(月) 23:54:49
付けたしはまずいですよね?
0484デフォルトの名無しさん2006/11/28(火) 00:11:32
>>481
この問題はBCB専用じゃないかね?
0485デフォルトの名無しさん2006/11/28(火) 00:30:18
とりあえず学校に通報するという事でOK?
0486デフォルトの名無しさん2006/11/28(火) 00:32:18
勝手にやってろ
0487デフォルトの名無しさん2006/11/28(火) 00:40:48
通報しても意味無い。ここで教えてもらっても
リアルで人にやってもらっても同じなんだし

建前はここも匿名板なんだから殺人とかじゃないとチャラ
0488デフォルトの名無しさん2006/11/28(火) 00:44:24
>>487
何を勘違いしているんだ?
ここは教えるところなんかじゃないぜ
0489デフォルトの名無しさん2006/11/28(火) 00:46:47
自分でやった方が自分のためになると思うけど

一応ヒント

アドレス士官
0490デフォルトの名無しさん2006/11/28(火) 00:46:58
ここは宿題がやりたくてやりたくてたまらない人が集うスレであって
宿題を持ってきたやつがどうなろうと知ったこっちゃない
0491デフォルトの名無しさんNGNG?2BP(200)
とりあえず和歌山大学の学生は無条件で落とすことに決定。
0492デフォルトの名無しさん2006/11/28(火) 00:49:56
新卒落とされたね
0493デフォルトの名無しさん2006/11/28(火) 00:52:11
そして本人は公務員にしか眼中が無いという展開
0494デフォルトの名無しさん2006/11/28(火) 00:52:12
別に中小企業に落とされたとしても
痛くも痒くもないですよw
0495デフォルトの名無しさん2006/11/28(火) 01:08:20
1]win
2]gcc  Cのみ
3]2006'11'30

映像を取り込み、
その映像を基にして
長さを調べて表示する
プログラムを作成しろ

よれしくおねがいします
0496473〜4752006/11/28(火) 01:10:27
少し前に書き込みしたのですがどなたかお願いします。
もし問題に不手際があったらそれだけでも教えてもらえるととても助かります
0497デフォルトの名無しさん2006/11/28(火) 01:10:55
>>478
一応出来たけど答はいくらになればいいの?
0498デフォルトの名無しさん2006/11/28(火) 01:14:47
>>495
映像って具体的になんだ?
0499デフォルトの名無しさん2006/11/28(火) 01:14:50
>>495
写真に載っている物質の長さを求めるらしいです。

対象物とレンズの距離が毎度違うと思うので
分かりません

どうやってはかるの?
0500デフォルトの名無しさん2006/11/28(火) 01:16:24
2次元の映像に奥行きを求める?

0501デフォルトの名無しさん2006/11/28(火) 01:19:09
言い忘れてました。

ヒシャタイ
の実寸らしい
0502デフォルトの名無しさん2006/11/28(火) 01:22:38
市販されている3Dソフトの応用らしいのですが
意味がサッパリなので悩んでます
0503デフォルトの名無しさん2006/11/28(火) 01:26:37
>>495
はっきり言う
それは億単位の案件になるので
たった2日では無理です。
申し訳無い

0504デフォルトの名無しさん2006/11/28(火) 01:31:09
>>503
学校の宿題ですよw

大学内のみの流通のみで
物理学部に提供するらしい。
0505デフォルトの名無しさん2006/11/28(火) 01:32:13
>>503
あの条件から見積もりだすお前がすごい
0506デフォルトの名無しさん2006/11/28(火) 01:33:44
今日のSE大賞をあげよう
>>503
0507デフォルトの名無しさん2006/11/28(火) 01:40:33
とりあえず>>495は
>>1を声に出してよく読んで、テンプレを元にして書き直し
0508デフォルトの名無しさん2006/11/28(火) 01:52:52
大学のみの流通とは言え他者に提供するのなら
それは既に宿題ではないんではないだろうか
0509デフォルトの名無しさん2006/11/28(火) 01:53:42
>>497 exp(1.0)だろ、常識的に考えて。
0510デフォルトの名無しさん2006/11/28(火) 01:57:47
>>497
小さい方から足してるだろうな?積み残しが出るぞ。
0511デフォルトの名無しさん2006/11/28(火) 01:59:27
>>509
e^1は1/0!+1/1!+1/2!+1/3!・・・だろ?
478の課題は
1/0!-1/1!+1/2!-1/3!・・・の逆数を求めろって言ってるぜ
0512デフォルトの名無しさん2006/11/28(火) 02:02:17
>>510
ちゃんと100000から計算していってるよ
0513デフォルトの名無しさん2006/11/28(火) 02:03:55
おまえら糞か
ハヤクシロや
0514デフォルトの名無しさん2006/11/28(火) 02:08:44
>>511
おいおい。寝ぼけてるのか?

exp(x) = 1 + x + x^2/2 + x^3/3 + ...
exp(-1) = 1 - 1 + 1/2! - 1/3! + ...
1/exp(-1) = exp(1)
0515デフォルトの名無しさん2006/11/28(火) 02:10:52
>>514
あ、なるほどな

ののしるがいいさ さげすむがいいさ
0516デフォルトの名無しさん2006/11/28(火) 02:24:33
という訳でバグ取れたから貼るか
>>478

#include <stdio.h>
#define N 100000

main(){
double i=N,y=1;
while(i>=1) y=1-y/i--;
printf("%f\n",1/y);
}
0517デフォルトの名無しさん2006/11/28(火) 02:31:52
デフゥルトゥイラネだろ
0518デフォルトの名無しさん2006/11/28(火) 02:42:10
>>517
レベルの低い素人は口を挟むな
0519デフォルトの名無しさん2006/11/28(火) 02:45:48
[1] 授業単元:コンピュータプログラミング
[2] 問題文(含コード&リンク):正整数nと実数xを入力して、多項式
               1+x+xの二乗+xの三乗+…+xのn乗
               を計算するプログラムつくりなさい。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2006年11月29日
[5] その他の制限:関数定義使う
0520デフォルトの名無しさん2006/11/28(火) 03:00:30
ループだけじゃん
0521デフォルトの名無しさん2006/11/28(火) 03:29:18
>>519
#include <stdio.h>

double keisan(double x,int n);

main(){
double x;
int n;
printf("xを入力してください\n");
scanf("%lf",&x);
printf("nを入力してください\n");
scanf("%d",&n);
printf("f(%f,%d)の答えは%fです。",x,n,keisan(x,n));
}

double keisan(double x,int n){
double y=1;
for(int i=0;i<n;i++) y=1+x*y;
return y;
}
0522デフォルトの名無しさん2006/11/28(火) 03:46:25
ブブー
0523デフォルトの名無しさん2006/11/28(火) 03:48:25
計算式おかしい。
ループかけるまえに
1を宣言して
ループしたのを足していけばいいんだお
0524デフォルトの名無しさん2006/11/28(火) 03:50:17
y=1+x;
0525デフォルトの名無しさん2006/11/28(火) 04:00:31
>>523
n=1の時
y=1+x
n=2の時
y=1+x*(1+x)
n=3の時
y=1+x*(1+x*(1+x))
 ・
 ・
 ・
05265162006/11/28(火) 04:31:48
この方が良いな
>>478
#include <stdio.h>
#define N 100000

main(){
double i=N+1,y=1;
while(--i) y=1-y/i;
printf("%f\n",1/y);
}
05275162006/11/28(火) 05:28:09
最終版。
>>478に俺に感謝する心が1バイトでもあるなら是非これを提出して欲しい

#include <stdio.h>
#include <float.h>
#define Nmax 100000

double tenkai(double n){
double i=n+1,y=1;
while(--i) y=1-y/i;
return y;
}

double kousuu(void){
double y=1;
int i=1;
while(i<N&&y>DBL_EPSILON) y/=++i;
return i;
}

void main(){
double n=Nmax;
double n2=kousuu();
if (n2<N) printf("n=%.0fまで計算した結果%.16f\n愚かにも",n2,1/tenkai(n2));
printf("n=%.0fまで計算した結果%.16f\n",n,1/tenkai(n));
}
05285162006/11/28(火) 05:48:15
あ しまったNの名前変えたの忘れてた

while(i<N&&y>DBL_EPSILON) y/=++i;
↓
while(i<NMAX&&y>DBL_EPSILON) y/=++i;
0529473〜4752006/11/28(火) 08:05:16
すみません、周りの人もわからないっていっててもうお手上げなんです。
どなたか解いてもらえないでしょうか。
0530デフォルトの名無しさん2006/11/28(火) 08:50:15
>>529
前の日の晩に質問するなんて無謀な
今から知り合い増やそう
0531デフォルトの名無しさん2006/11/28(火) 08:57:52
>>473-475ってほとんど答えそのものだろ

node root;

// idx番目の要素を操作対象に設定
node *target = &root;
for(i=0;i<idx;i++)
target = target->next;

// 追加
InsertMigi(target, n);

// 削除
Remove(target);

printfやscanfくらい自分で書け
05324782006/11/28(火) 09:13:53
皆さんいろいろとありがとうございます!

ですが…わからないものばかりで…
defineやらreturnやらvoidというのは習ってないんです。
すみません。

100000はscanfから読み込んでやるはずだったんですが、
説明不足ですみません。

答えは 2.71828に近づきます。
もしよろしければ、もう一度おねがいしたいのですが…
0533デフォルトの名無しさん2006/11/28(火) 09:17:54
defineはともかく、returnとvoidを習ってないってのはありえなくない?
0534デフォルトの名無しさん2006/11/28(火) 09:25:25
>>532
習ってないからといって使っていけないというわけでもないし、ぐぐれば理解できるだろ
scanfで読み込むように書き直すくらい自分でできるだろうし
05354782006/11/28(火) 09:36:21
>>533
えっ!?そうなんですか…でも本当に習ってないんです。

>>534
わかりました。なんとかやってみます。
0536デフォルトの名無しさんNGNG?2BP(200)
「習ってない」をNGワードに。
0537デフォルトの名無しさん2006/11/28(火) 11:29:56
>>531
// idx番目の要素を操作対象に設定をどこにいれていいのかわからないです
何度もすみません
0538デフォルトの名無しさん2006/11/28(火) 12:47:36
[1] 授業単元:計算機演習2
[2] 問題文(含コード&リンク):4個の1桁の数字からなる順列を乱数で生成
キーボードから4個の数字の順列を入力
生成した順列と入力の順列を比較
位置が合っている場合はhit,位置が間違っている場合はblowとし、
ヒット数とブロー数を表示させる
順列があたるまで入力を繰り返すプログラムを作りなさい
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月5日 12時まで
[5] その他の制限: long random(void)まではヒントが与えられています。
宜しくお願いします。
0539デフォルトの名無しさん2006/11/28(火) 13:24:40
random() なんてあったっけ
0540デフォルトの名無しさん2006/11/28(火) 13:32:03
関数つくれって事だろ
0541デフォルトの名無しさん2006/11/28(火) 13:41:15
>>539-540
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/random.3.html
M系乱数のはず。
0542デフォルトの名無しさん2006/11/28(火) 14:09:12
[1] 授業単元: Cによるプログラミング実習II
[2] 問題文(含コード&リンク):
キーボードから入力された文章を単語単位で切り出し
総単語数と各単語の文字数を表示する
Cプログラムを書きなさい。単語の区切りは半角スペースのみとする。

但し、単語数の上限は30、1単語数の最大の文字数は20と仮定する。

【実行例】
文を入力してください: This is an apple
合計4単語です。 各文字数は
This:4文字
is:2文字
  an:2文字
apple:5文字

[3] 環境
 [3.1] OS:Windows XP SP2 Pro
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:2006年12月01日19:00
[5] その他の制限:
文字の入力には gets 関数を使うこと
関数の中身はブラケット演算子なしでポインターだけで書く

よろしくお願いいたします。
0543a2006/11/28(火) 14:23:34
整数値を要素にもつk 行m 列行列A とm 行n 列行列B を定義し,それらの要素をキーボー
ドから入力させ,C = A×B を計算して画面表示するプログラムを作成しなさい.ただし,k,m,
n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2 を満たす任意の値を設定してよい
0544デフォルトの名無しさん 2006/11/28(火) 15:25:10
[1] 授業単元:Cプログラミング演習
[2] 問題文:疑点法を用いてf(x)=x-cosx=0の近似解を小数点以下15桁まで求めるCプログラム
擬点法とは f(a1)f(b1)<0 となるような近似解の組
x=a1 x=b1 から出発して、漸化式
   bk*f(ak)− ak*f(bk)
xk=――――――――――   (k=1,2,3,・・・)
     f(ak) − f(bk)

         (ak,xk) if f(ak)*f(xk)<0
(ak+1,bk+1)=
         (xk,bk) otherwise 

により、次々とより良い近似解x=xk(k=1,2,3・・)
をもとめていこうとするものです。このプログラムは
f(xk)=0 or x1,x2,x3・・が十分に収束したと判断できる
時点で終了する今回の出発点は
a1=0,b1=1とします
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2006年12月08日12:00まで
[5] その他の制限:
int型、double型、数学的関数を使う。constは使わない。
for,do-while構文習得。増分・減分演算子習得。
最初に#define f(x) ((x)-cos(x))
    #define EPSILON (1e-15)   を使う
Simpsonの公式は習った。
05455442006/11/28(火) 15:27:46
皆さん宜しくお願いします。
0546デフォルトの名無しさん2006/11/28(火) 16:39:32
>>544
VCC++だと#define EPSILON (1e-15)が解決できなかったので
代わりにfloat.hのDBL_EPSILON使ってある
気に入らなかったら自分で直して

#include <stdio.h>
#include <math.h>
#include <float.h>
#define f(x) ((x)-cos(x))
void main(){
double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b);
while(f(x)!=0&&fabs(x-xBefore)>DBL_EPSILON){
xBefore=x;
x=(b*fa-a*fb)/(fa-fb);
if(fa*f(x)<0) {
b=x;
fb=f(b);
}
else {
a=x;
fa=f(a);
}
}
printf("x=%.15fの時f(x)=%.15f\n",x,f(x));
}
05475462006/11/28(火) 16:50:06
改良版
#include <stdio.h>
#include <math.h>
#include <float.h>
#define f(x) ((x)-cos(x))

void main(){
double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b),fx=f(x);
while(fx!=0&&fabs(x-xBefore)>DBL_EPSILON){
xBefore=x;
x=(b*fa-a*fb)/(fa-fb);
fx=f(x);
if(fa*fx<0) {
b=x;
fb=fx;
}
else {
a=x;
fa=fx;
}
}
printf("x=%.15fの時f(x)=%.15f\n",x,f(x));
}
0548デフォルトの名無しさん2006/11/28(火) 19:20:49
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文(含コード&リンク): ファイルを読み込み、各行が逆順に出るようなプログラムを書きなさい。作成したプログラムに対して、空の入力と、作成したプログラム本体のソースコードを入力し、出力結果を報告しなさい。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: mingw-jp
 [3.3] 言語: C++
[4] 期限: 明日の午後8時(2006年11月29日(水))
[5] その他の制限: 一行の文字数や、行数の制限を行わない。
         同じファイルを二回以上オープンしない。但し、メモリに異常が発生した場合は、検知し、確実に異常終了させる。

分かる方、いたらお願いします!!
■ このスレッドは過去ログ倉庫に格納されています