C/C++の宿題を片付けます 77代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
0508デフォルトの名無しさん
2006/11/28(火) 01:52:52それは既に宿題ではないんではないだろうか
0509デフォルトの名無しさん
2006/11/28(火) 01:53:420510デフォルトの名無しさん
2006/11/28(火) 01:57:47小さい方から足してるだろうな?積み残しが出るぞ。
0511デフォルトの名無しさん
2006/11/28(火) 01:59:27e^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ちゃんと100000から計算していってるよ
0513デフォルトの名無しさん
2006/11/28(火) 02:03:55ハヤクシロや
0514デフォルトの名無しさん
2006/11/28(火) 02:08:44おいおい。寝ぼけてるのか?
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あ、なるほどな
ののしるがいいさ さげすむがいいさ
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:520518デフォルトの名無しさん
2006/11/28(火) 02:42:10レベルの低い素人は口を挟むな
0519デフォルトの名無しさん
2006/11/28(火) 02:45:48[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:300521デフォルトの名無しさん
2006/11/28(火) 03:29:18#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:250523デフォルトの名無しさん
2006/11/28(火) 03:48:25ループかけるまえに
1を宣言して
ループしたのを足していけばいいんだお
0524デフォルトの名無しさん
2006/11/28(火) 03:50:170525デフォルトの名無しさん
2006/11/28(火) 04:00:31n=1の時
y=1+x
n=2の時
y=1+x*(1+x)
n=3の時
y=1+x*(1+x*(1+x))
・
・
・
0526516
2006/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);
}
0527516
2006/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));
}
0528516
2006/11/28(火) 05:48:15while(i<N&&y>DBL_EPSILON) y/=++i;
↓
while(i<NMAX&&y>DBL_EPSILON) y/=++i;
0529473〜475
2006/11/28(火) 08:05:16どなたか解いてもらえないでしょうか。
0530デフォルトの名無しさん
2006/11/28(火) 08:50:15前の日の晩に質問するなんて無謀な
今から知り合い増やそう
0531デフォルトの名無しさん
2006/11/28(火) 08:57:52node root;
// idx番目の要素を操作対象に設定
node *target = &root;
for(i=0;i<idx;i++)
target = target->next;
// 追加
InsertMigi(target, n);
// 削除
Remove(target);
printfやscanfくらい自分で書け
0532478
2006/11/28(火) 09:13:53ですが…わからないものばかりで…
defineやらreturnやらvoidというのは習ってないんです。
すみません。
100000はscanfから読み込んでやるはずだったんですが、
説明不足ですみません。
答えは 2.71828に近づきます。
もしよろしければ、もう一度おねがいしたいのですが…
0533デフォルトの名無しさん
2006/11/28(火) 09:17:540534デフォルトの名無しさん
2006/11/28(火) 09:25:25習ってないからといって使っていけないというわけでもないし、ぐぐれば理解できるだろ
scanfで読み込むように書き直すくらい自分でできるだろうし
0537デフォルトの名無しさん
2006/11/28(火) 11:29:56// idx番目の要素を操作対象に設定をどこにいれていいのかわからないです
何度もすみません
0538デフォルトの名無しさん
2006/11/28(火) 12:47:36[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:400540デフォルトの名無しさん
2006/11/28(火) 13:32:030541デフォルトの名無しさん
2006/11/28(火) 13:41:15http://www.linux.or.jp/JM/html/LDP_man-pages/man3/random.3.html
M系乱数のはず。
0542デフォルトの名無しさん
2006/11/28(火) 14:09:12[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 関数を使うこと
関数の中身はブラケット演算子なしでポインターだけで書く
よろしくお願いいたします。
0543a
2006/11/28(火) 14:23:34ドから入力させ,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[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の公式は習った。
0545544
2006/11/28(火) 15:27:460546デフォルトの名無しさん
2006/11/28(火) 16:39:32VCC++だと#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));
}
0547546
2006/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[2] 問題文(含コード&リンク): ファイルを読み込み、各行が逆順に出るようなプログラムを書きなさい。作成したプログラムに対して、空の入力と、作成したプログラム本体のソースコードを入力し、出力結果を報告しなさい。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: mingw-jp
[3.3] 言語: C++
[4] 期限: 明日の午後8時(2006年11月29日(水))
[5] その他の制限: 一行の文字数や、行数の制限を行わない。
同じファイルを二回以上オープンしない。但し、メモリに異常が発生した場合は、検知し、確実に異常終了させる。
分かる方、いたらお願いします!!
0549デフォルトの名無しさん
2006/11/28(火) 19:43:41このスレを検索
0550デフォルトの名無しさん
2006/11/28(火) 19:45:55そりゃ不可能だ。
仮にメモリ異常が単にmalloc()/new失敗と言う意味に解釈したとしても、
その状況で確実に異常終了できるかどうかは実はOS次第だからな。
0551デフォルトの名無しさん
2006/11/28(火) 19:49:29[2] 問題文:
点数をいれるとSABCDを出力するプログラムを作りなさい。ただし
100〜90点 S
89〜80 A
79〜70 B
69〜60 C
59点以下 D
とする。以下の実行結果を参考にして考えよ。
./kadai 70 80 85
1教科目はBです。
2教科目はAです。
3教科目はAです。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラとバージョン: gcc
[3.3] 言語:C言語
[4] 期限:11月29日20時まで
当方プログラミング歴2ヶ月で今回の課題がさっぱりわからないので
誰か分かる方がいらっしゃいましたら助力お願いします。
0552デフォルトの名無しさん
2006/11/28(火) 20:12:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3048.c
0553537
2006/11/28(火) 20:17:27ありがとうございました
0554デフォルトの名無しさん
2006/11/28(火) 20:19:53#include<stdio.h>
const char *hyouka(int value){
if(value>100) return "unknown";
if(value>=90) return "S";
if(value>=80) return "A";
if(value>=70) return "B";
if(value>=60) return "C";
return "D";
}
int main(int argc, char *argv[]){
int i, value;
for(i=1;i<argc;i++){
sscanf(argv[i], "%d", &value);
printf("%d教科目は%sです。\n", i, hyouka(value));
}
return 0;
}
0555デフォルトの名無しさん
2006/11/28(火) 20:42:180556デフォルトの名無しさん
2006/11/28(火) 21:11:11期限には間に合いませんがよろしくお願いします。
0557デフォルトの名無しさん
2006/11/28(火) 21:50:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3049.txt
0558デフォルトの名無しさん
2006/11/28(火) 22:10:280559デフォルトの名無しさん
2006/11/28(火) 22:11:46new()が使われてない場合はこれじゃだめかも。
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
void putReverse(ifstream& infile)
{
string s;
try{
while(!infile.eof()){ getline(infile, s); cout << string(s.rbegin(), s.rend()) << endl;}
}
catch(bad_alloc){
cerr << "メモリ確保失敗";
infile.close();
abort(); //エラーコード返すとかじゃなく、お望み通り異常終了。
}
}
int main(int argc, char* argv[])
{
if(argc != 2){ cerr << "読み込むファイルを一つ指定してください"; return -1;}
ifstream inFile(argv[1]);
if(inFile.fail()){ cerr << "ファイルを開けません"; return -2;}
putReverse(inFile);
return 0;
}
0560デフォルトの名無しさん
2006/11/28(火) 22:14:002.模範解答をTAに作るように命令。
3.TAがここで問題を丸投げ。
4.生徒が問題を受け取る。
5.生徒がここで問題を丸投げ。 ← いまここ
0561デフォルトの名無しさん
2006/11/28(火) 22:18:47全米が震撼した
0562デフォルトの名無しさん
2006/11/28(火) 22:26:020563デフォルトの名無しさん
2006/11/28(火) 22:29:41[2] 問題文(含コード&リンク):∫ e^x/x dx(x:1→3)の値を台形およびシンプソンの公式により求めよ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11/30
[5] その他の制限: 等分数は2から倍々と増やしていき、積分値が変化しなくなるまで行うこと。
等分数を最初に設定して計算することは出来たのですが、
制限の>>等分数は2から倍々と増やしていき、積分値が変化しなくなるまで行うこと。
これのやり方が分かりません。
誰か分かる方がいらっしゃいましたらよろしくお願いします。
0564デフォルトの名無しさん
2006/11/28(火) 22:33:59なんでだよwww
>等分数を最初に設定して計算することは出来た
ここが一番の山じゃねーか
もう終わったようなもんだろwwwwwwwww
あとはforループで、2^iで分割して、
今の値-前の値の絶対値が十分小さかったら終了でいいじゃん
0565デフォルトの名無しさん
2006/11/28(火) 22:34:38そのふたつだけじゃなくて
>>42
も同じ課題だと思う
0566デフォルトの名無しさん
2006/11/28(火) 22:53:25質問者じゃないけど、こういうのもアリですかね?
const char* hyouka(int value)
{
switch (value / 10) {
case 10:
case 9:return "S";
case 8:return "A";
case 7:return "B";
case 6:return "C";
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:return "D";
default:return "unknown";
}
}
0567デフォルトの名無しさん
2006/11/28(火) 22:59:02>>42じゃなくて>>40じゃね?
0568デフォルトの名無しさん
2006/11/28(火) 23:01:09あ、
>>40だった。スマソ
0569デフォルトの名無しさん
2006/11/28(火) 23:12:07[2] 問題文(含コード&リンク):
出版社M社で自社のライトノベル・DVD購入者に対し懸賞を行うことになった。
応募券を切り取り、ハガキに貼ってを送ってきた人に対し
10人にオリジナル図書カードを
50人にオリジナルストラップを
100人にオリジナルステッカーをプレゼントすることになった。
公平を期すためにC言語で乱数を用い当選者を決定させたい。
ここで応募してくる人は過去の傾向からみて1000人以下であると考えられる。
※なおライトノベル、DVD両方の応募券がついている客は
DVDのみの応募券、ライトノベルのみの応募券がついているユーザーの2倍の当選確率である。
※なお、同一人物(同じ名前)での2重当選はありえない。(当選は1人1回である)
※またA君、B君、C君は前回の懸賞で特賞が当たっているため、今回応募があっても当選しない。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Boland
[3.3] 言語: C
[4] 期限: 2006.12.01
[5] その他の制限: なし
よろしくお願いいたします。
0570デフォルトの名無しさん
2006/11/28(火) 23:14:05問題文それだけ?
0571デフォルトの名無しさん
2006/11/28(火) 23:15:17提示された物は全てです
0572デフォルトの名無しさん
2006/11/28(火) 23:15:52入力するデータが欲しい
0573デフォルトの名無しさん
2006/11/28(火) 23:15:59[2] 問題文(含コード&リンク):
y=sin(2x)×cos(x)について区間0≦x≦π/4での積分値を計算するプログラム
を作成せよ。
計算結果として、積分範囲・刻み数・積分結果を出力させること。
刻み数は
#define n 20
とする。
πはM_PIとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の朝10時00分までです。
[5] その他の制限: 特にないです。
よろしくお願い致します。
0574デフォルトの名無しさん
2006/11/28(火) 23:16:32問題文そのまま?
なんか色々省略してない?
0575デフォルトの名無しさん
2006/11/28(火) 23:23:35A君B君C君をはじけばいいらしいです。
D君以降は適当にDVDのみ、ノベルのみ、両方適当でいいっていってました
>>574
とくに省略はしていません
0576デフォルトの名無しさん
2006/11/28(火) 23:24:02じゃぁ先生にこんな問題文じゃ解けないって突き返せ
0577デフォルトの名無しさん
2006/11/28(火) 23:24:43[2] 問題文(含コード&リンク):
以下は入力された整数値の大小に基づいて2分木を生成するものである。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3050.txt
すべてのノードの左の子と右の子を交換する関数void ReverseTree(struct BTREE *ptr)
を再帰呼び出しによって実現せよ。この手続き後にTraverseTreeを実行すると数値は降順に表示されるはずである。
また、指定データと同じ値のデータを持つノードの個数を出力するint CountData(struct BTREE *ptr,int searchdata)を
再帰呼び出しによって完成させよ。
Reverse Tree
[3] 環境
[3.1] OS: Windows Xp
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日夜
[5] その他の制限:
お願いします!
0578デフォルトの名無しさん
2006/11/28(火) 23:29:32台形公式でよければ >>212 を少し変更すればおk
return 4/(1+x*x);
↓
return sin(2*x)*cos(x);
printf("%f\n", f_integral(0, 1, 1000));
↓
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
0579デフォルトの名無しさん
2006/11/28(火) 23:48:39void ReverseTree(struct BTREE *ptr) {
struct BTREE *temp;
if (ptr == NULL) return;
ReverseTree(ptr->left);
ReverseTree(ptr->right);
temp = ptr->left;
ptr->left = ptr->right;
ptr->right = temp;
return;
}
int CountData(struct BTREE *ptr, int searchdata) {
if (ptr == NULL) return 0;
return CountData(ptr->left, searchdata) + CountData(ptr->right, searchdata) + (ptr->data == searchdata);
}
0580デフォルトの名無しさん
2006/11/28(火) 23:51:31ありがとうございます。
for文の中を前の値==今の値とかやって悩んでましたw
0581デフォルトの名無しさん
2006/11/29(水) 00:00:30#include <math.h>
#include <stdio.h>
#define n 20
double f(double x) {
return sin(2 * x) * cos(x);
}
int main(void) {
int i;
double a = 0., b = M_PI / 4, h = (b - a) / n, s = 0.;
for (i = 1; i < n; ++i) s += f(a + i * h);
s *= 2;
s += f(0) + f(n);
s *= h / 2;
printf("%f", s);
return 0;
}
0582デフォルトの名無しさん
2006/11/29(水) 00:05:04応募者が賞品の数より少ない場合、
1.A君、B君、C君でも当選する?
2.賞品の当選の優先順位は決まってる?
ちなみに全員ハズレにするのもアリ?
0583デフォルトの名無しさん
2006/11/29(水) 00:09:14お前、ふだんからいい仕事してるんだろうな
0584デフォルトの名無しさん
2006/11/29(水) 00:11:56#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
int main(int argc, char* argv[]) {
if (argc != 2) return 1;
std::ifstream ifs(argv[1]);
std::string line;
while (std::getline(ifs, line)) {
std::copy(line.rbegin(), line.rend(), std::ostream_iterator<char>(std::cout));
std::cout << std::endl;
}
return 0;
}
↑と↓を実行して、求める結果が得られた方を提出せよ。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <list>
#include <string>
int main(int argc, char* argv[]) {
if (argc != 2) return 1;
std::ifstream ifs(argv[1]);
std::string line;
std::list<std::string> list;
while (std::getline(ifs, line)) list.push_back(line);
std::copy(list.rbegin(), list.rend(), std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}
0585573
2006/11/29(水) 00:22:07ありがとうございます。
講義で台形公式の話をしていたので、台形が公式で十分というか台形公式の
方が良いです。
ただ、エラーが出てコンパイルできません。
>>581
ありがとうございます。
しかし、値が1つしか表示されません。
0586デフォルトの名無しさん
2006/11/29(水) 00:25:04>>1も読めないのか?わざとなのか?
0587デフォルトの名無しさん
2006/11/29(水) 00:27:10[2] 問題文(含コード&リンク): int型で有効長lenの配列arrに対し、要素を巡回的に後にずらす関数 arr_cycle(arr, len) を作成する。
例えば、 arr[] = {0, 1, 2, 3} のとき、この関数によって arr[] = {3, 0, 1, 2} と更新される。最後の要素を先頭に挿入すればよい。
[3] 環境
[3.1] OS: windows XP
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C言語
[4] 期限: 明日昼12時
[5] その他の制限: 授業で配列に入ったばかり。
0588587
2006/11/29(水) 00:28:4011月29日昼12時まででお願い致します。
0589585
2006/11/29(水) 00:31:22double f_integral(double a, double b, long n)
の部分に構文エラーが4つあります。
')' が '定数' の前にありません。
'{' が '定数' の前にありません。
'<不明>'
')'
です。
#define n 20
を追加したからでしょうか?
>>578さんが教えて下さった
return 4/(1+x*x);
↓
return sin(2*x)*cos(x);
と
printf("%f\n", f_integral(0, 1, 1000));
↓
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
以外に何を変更して良いか解らなくて。
0590デフォルトの名無しさん
2006/11/29(水) 00:42:41課題
・nが変数として使われてるのに#define n 20なんかしたらどうなるか考えてみる
0591デフォルトの名無しさん
2006/11/29(水) 00:46:59>>応募者が賞品の数より少ない場合、
>>1.A君、B君、C君でも当選する?
当選しません
>>2.賞品の当選の優先順位は決まってる?
決まっていません
>>ちなみに全員ハズレにするのもアリ?
アリです
よろしくお願いいたします。
0592デフォルトの名無しさん
2006/11/29(水) 00:51:36#include<stdio.h>
int main(void){
printf("当選者ナシ\n");
return 0;
}
0593589
2006/11/29(水) 00:51:52あ、確かに変数として使われてますね。
そのエラーは納得できたのですが、講義では数値積分法には台形公式による
方法があります、と言っていただけで、具体的にどのようなものなのか
教わってないので、>>578さんが教えて下さったプログラム(>>212のプロ
グラム)の意味が全く解らなくて…。
0594デフォルトの名無しさん
2006/11/29(水) 00:55:39そこでは検索エンジンへの接続は禁止されているのではないか
などと思うことがある
>>593
ttp://72.14.253.104/search?q=cache:5TcXrS4nz80J:www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/Daikei.htm+%E5%8F%B0%E5%BD%A2%E5%85%AC%E5%BC%8F&hl=ja&gl=jp&ct=clnk&cd=3
0595デフォルトの名無しさん
2006/11/29(水) 00:56:07あと >>212 がレスつけてる先を見てみれば?
0596デフォルトの名無しさん
2006/11/29(水) 00:56:44そのエラー直して解けたんならイインジャマイカと言ってみるt。
0598593
2006/11/29(水) 01:11:41あ、詳しく説明されてますね。課題が完成しても、これからも使いそうなの
で、そこで少し勉強しようと思います。ありがとうございます。
>>595
>>581さんのも台形公式だったのですか。
>>596
まだ、完成してないです。
>>597
いえいえ。ありがとうございます。
#include<stdio.h>
#include <math.h>
#define M_PI 3.14
double f(double x) {
return sin(2*x)*cos(x); }
double f_integral(double a, double b, long n) {
double h, ai;
double ret=0.0;
long i=20; h=(b-a)/n;
for(i=0;i<=n;i++) {
ai=a+i*h; ret+=f(ai); }
ret-=(f(a)+f(b))/2; ret*=h;
return ret; }
int main(void) {
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
return 0; }
修正してみて、コンパイルしたらメイン関数の中でnが定義されてません、
と表示されたので、メイン関数で
int n;
を追加したら、コンパイルは通ったのですが一つしか表示されません。
これは、for文で20回表示するようにしたら完成、ということなのでしょうか?
0599581
2006/11/29(水) 01:22:36やり直し。台形公式。
#include <math.h>
#include <stdio.h>
#define n 20
double f(double x) {return sin(2 * x) * cos(x);}
double trapezoidal(double a, double b, int d) {
double s = 0., h = (b - a) / d; int i;
for (i = 1; i < d; ++i) s += f(a + i * h);
s *= 2; s += f(a) + f(b); s *= h / 2;
return s;
}
int main(void) {
printf("積分範囲:%f...%f, 刻み数:%d, 積分結果:%f\n", 0., M_PI / 4, n, trapezoidal(0, M_PI / 4, n));
return 0;
}
0600デフォルトの名無しさん
2006/11/29(水) 01:36:45#include <stdio.h>
typedef int T;
void swap(T* x, T* y) {T temp = *x; *x = *y; *y = temp;}
void arr_cycle(T* arr, unsigned int len) {
unsigned int n = 1;
T *first, *last;
n = len - n % len;
for(first = arr, last = arr + n; ; ) if (first == last || first == --last) break; else swap(first++, last);
for(first = arr + n, last = arr + len; ; ) if (first == last || first == --last) break; else swap(first++, last);
for(first = arr, last = arr + len; ; ) if (first == last || first == --last) break; else swap(first++, last);
}
void print_array(int* t, unsigned int n) {
unsigned int i;
for(i = 0; i < n; i++) printf("%d", t[i]);
printf("\n");
}
int main(void) {
int arr[] = {0,1,2,3};
arr_cycle(arr, sizeof(arr) / sizeof(arr[0]));
print_array(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
0603デフォルトの名無しさん
2006/11/29(水) 01:59:19Sleipnir利用者なんかは本当に一部機能を制限されてるからな
知らずにGoogleフル機能だと思ってたら泣ける
0604デフォルトの名無しさん
2006/11/29(水) 02:54:15void arr_cycle(int *arr, int len)
{
int i, temp;
temp = a[len-1];
for(i=len-1;i>0;i--) arr[i] = arr[i-1];
a[0] = temp:
}
0605デフォルトの名無しさん
2006/11/29(水) 03:54:26[2] 問題文:0から9999までの整数をキーボードから入力し、それが何桁であるかを
表示するプログラムを書く。
[3] 環境
[3.1] OS:WindowsXP
[3.2] lcc
[3.3] 言語:C
[4] 期限:2006年11月29日18:00まで
どうかよろしくお願いします。
0606デフォルトの名無しさん
2006/11/29(水) 04:22:16#include<stdio.h>
#include<math.h>
void main(){
int x;
scanf("%d",&x);
printf("%d桁\n",(int)log10(x)+1);
}
0607デフォルトの名無しさん
2006/11/29(水) 04:38:10#include <stdio.h>
int main(void)
{
int i, n;
scanf("%d", &n);
for(i=0; n; i++, n/=10);
printf("%d桁", i);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています