C/C++の宿題を片付けます 97代目at TECH
C/C++の宿題を片付けます 97代目 - 暇つぶし2ch50:デフォルトの名無しさん
07/10/24 12:55:45
fgetsが定石なんだろうが、
俺はgetcharをこよなく愛してる

51:デフォルトの名無しさん
07/10/24 13:01:48
オレは scanf Loveだぜ

#include<windows.h>
#include<stdio.h>

int main(void){
int n;
printf("数を入力してください>");
while(scanf("%d",&n)<1){
scanf("%*s");
MessageBox(NULL, "数字を入力して下さい", "Error", MB_OK | MB_ICONERROR);
printf("\n入力がおかしいです。もう一度入力してください。>");
}
printf("\n%sです。\n",(n&1)?"奇数":"偶数");
return 0;
}

52:デフォルトの名無しさん
07/10/24 13:27:02
>>22
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

Microsoft(R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft(R) .NET Framework version 1.1.4322
で作動を確認(ロダの関係で拡張子を変更)

53:デフォルトの名無しさん
07/10/24 13:44:13
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
(1)モンテカルロ法を用いて、y=x^2,y=0,x=1で囲まれる領域の面積を求めよ。
(2)モンテカルロ法を用いて、半径1の球の体積を求めよ。


[3] 環境
[3.1] OS Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限:10/25の12時
[5] その他の制限:(1)(2)において発生させる乱数の数を10,100,1000…1000000
と増やし、それぞれの場合における結果を画面に表示させること。

どうかよろしくお願いします。

54:デフォルトの名無しさん
07/10/24 14:01:25
>>53
前スレのとは別の人?
(1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i, j, cnt;
double x, y;

srand(time(NULL));

for(i=10; i<=1000000; i*=10) {
for(j=0, cnt=0; j<i; j++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if(x*x >= y) cnt++;
}
printf("試行回数:%7d 面積:%f\n", i, (double)cnt / i);
}

return 0;
}


55:デフォルトの名無しさん
07/10/24 14:02:05
(2)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i, j, cnt;
double x, y, z;

srand(time(NULL));

for(i=10; i<=1000000; i*=10) {
for(j=0, cnt=0; j<i; j++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
z = (double)rand() / RAND_MAX;
if(x*x + y*y + z*z <=1) cnt++;
}
printf("試行回数:%-7d 球の体積:%f\n", i, cnt * 8.0 / i);
}

return 0;
}


56:デフォルトの名無しさん
07/10/24 14:10:30
scanfもちゃんと使えば、大分有用なんだけどね

57:デフォルトの名無しさん
07/10/24 14:12:52
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
リストへのポインタを引数としてとり、その内容を逆順に並べ替えたリストへの
ポインタを返す関数struct c *re(struct c *l)を再帰を用いて作成せよ。
並べ替え後に元のリストが破壊されていても構わない。
リストは連結リストで、その構造体は、
struct c{
int a;
struct c *n;
};
とする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 木曜日の15時までです。
[5] その他の制限: 必ず再帰を使うこと。

58:デフォルトの名無しさん
07/10/24 15:22:13
>>14です。

アドバイスを頂き>>16>>20を組み込みましたが、コンパイルが通りません。

エラーメッセージは関数:void d _wordに受け渡しがうまく行ってない趣旨のものがでました。

出来る方、問題回答お願いします。

それと昨晩、途中まで付き合ってくれた方ありがとうございます。

59:デフォルトの名無しさん
07/10/24 15:54:52
>>58
typo だと思われる
自分で探せるよね

60:デフォルトの名無しさん
07/10/24 16:23:41
>>57
struct c *re(struct c *l)
{
struct c *p;
if(l->n==NULL) return l;
p = re(l->n);
l->n->n = l;
l->n = NULL;
return p;
}


61:デフォルトの名無しさん
07/10/24 17:23:27
>>12
JAIST?

62:デフォルトの名無しさん
07/10/24 18:00:19
>>12
( ´∀`)つURLリンク(kansai2channeler.hp.infoseek.co.jp)

めんどくさいので、cat を fork&exec してやったw

jaist ではないのかな?
たしか某S先生の授業でそんな課題があったような・・・

63:デフォルトの名無しさん
07/10/24 18:17:29
[1] 授業単元: アルゴリズム C言語応用Ⅱ
[2] 問題文(含コード&リンク):
英文を入力すると、単語に分割して出力するプログラムを書く。
ただし、ピリオドとカンマは出力しないようにすること。
(実行例)
英文を入力してください:
There is , a textbook.

---
There
is
s
textbook
---

今回はプログラム作成にあたり、用意されているテンプレートにプログラムを付け加えプログラムを完成させよ。

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


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: CYGWIN gccバージョン不明)
 [3.3] 言語: C言語
[4] 期限: 無理を承知で明日の午前中までにお願いします。
[5] その他の制限: テンプレートに従ってプログラムを付け加えて完成させてください。

64:デフォルトの名無しさん
07/10/24 18:50:28
前スレで質問したものです
ただ単に不等号と&&→||のミスでした
お騒がせして申し訳ありません

65:デフォルトの名無しさん
07/10/24 18:56:01
[1] 授業単元: C++
[2] 問題文(含コード&リンク):ファイルのリンク:
URLリンク(spot.pcc.edu)
リンクに含まれるようなファイルを読み取って、金額(ファイルの一番右の項目)を州(ファイルの真ん中の項目)別に集計し、
アルファベット順にそれぞれの州の平均額を表示する。その後、全ての州の合計金額の平均を表示する。
最後に、最も平均金額の高かった州と、最も平均金額の低かった州を表示する。
注意: 町の名前(ファイルの一番左の項目)は、“Grants Pass” や “Klamath Falls”のように、空白で区切られているものが入ることもある。
[3] 環境 ?
 [3.1] OS: Windows
 [3.2] Dev C++ 4
 [3.3] 言語: C++
[4] 期限: 2007年10月27日深夜まで
[5] その他の制限: 標準ライブラリのみ使用可能。Getlineを使わず、Cinのみで作る方がよりよい。また、ファンクションは使用不可。

よろしくお願いします(_ _)

66:デフォルトの名無しさん
07/10/24 20:32:06
[1] 授業単元:線形台数
[2] 問題文(含コード&リンク):
対角行列の固有値を求めよ。
10次元の。
対角成分は3.4 2.3 5.1 8.2 2.21 -4.21 23.2 9.3 -21.2 0.2
  [3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月25日
[5] その他の制限: なし


67:デフォルトの名無しさん
07/10/24 20:46:35
>>65
>[5] その他の制限: 標準ライブラリのみ使用可能。Getlineを使わず、Cinのみで作る方がよりよい。また、ファンクションは使用不可。
ファンクション使用不可ってのを詳しく

68:デフォルトの名無しさん
07/10/24 20:58:41
>>66
対角行列の固有値は自明。
対角行列の固有値は対角成分そのもの。

つまり、
3.4 2.3 5.1 8.2 2.21 -4.21 23.2 9.3 -21.2 0.2
となる。

69:デフォルトの名無しさん
07/10/24 21:07:57
scanfは失敗したの残すし、改行残すから鬱陶しくて仕方ない。
ってことで、fgets使うとか、
戻り値を変数に格納した後、残った文字を全部食ってから次の処理とかでいいんじゃね?

70:デフォルトの名無しさん
07/10/24 21:11:41
>>65
アメリカの州の略号は
URLリンク(www.urban.ne.jp)
でいいの?

71:デフォルトの名無しさん
07/10/24 21:29:00
>>68
だよね。
URLリンク(case.f7.ems.okayama-u.ac.jp)
のページの式の中の|Σ|っていうのは対角成分をかけたものってことでいいのかな?

ある問題で正規分布を使っていて、|Σ|を対角行列の対角成分をすべてかけたものを
固有値として計算すると間違った答えになるんです。

だけど。|Σ|に(対角成分の1つだけ)を代入して計算すると正解になるんです。

72:デフォルトの名無しさん
07/10/24 21:30:37
ベクトルを作って、ベクトルを初期化して
$ gcc -lm a.c
# ./a.out
すると
0.000000 0.000000 2.080315

というよく分からないベクトルが作られます。
init_vectorにバグがあるのでしょうか?そうは見えないのですが・・・
他にプログラムの宿題があるのですが、ここらへんがとりあえずバグってるので
問題を簡単化して質問します。

URLリンク(www.uploda.org)

コンパイラは
gcc3.3.6です。緊急の宿題です

73:デフォルトの名無しさん
07/10/24 21:33:35
[1] 授業単元:C/C++宿題スレ
[2] 問題文(含コード&リンク):
書式付標準出力関数printfと同様の動作を示すprint関数を作りなさい。標準出力関数等を用いてよいが、printf関数は使用してはならない。
なお、終わった者はscanfと同様の動作を示すscan関数を作ってもよい。
[3] 環境
 [3.1] OS: 任意
 [3.2] コンパイラ名とバージョン: 任意
 [3.3] 言語: C言語
[4] 期限: 無期限
[5] その他の制限: これよりも、他の宿題を優先すること

74:デフォルトの名無しさん
07/10/24 21:33:46
>>72
8行目を見なおしてみては?

75:デフォルトの名無しさん
07/10/24 21:36:09
>>74
ありがとうございます。逆ですね。
いつもRuby使ってて、授業でC使う事になったこういうミスが・・・涙
だったらコンパイル通さないでくれよ・・・

76:デフォルトの名無しさん
07/10/24 21:40:51
>>73
これわひどいw

77:デフォルトの名無しさん
07/10/24 21:47:01
そういえば、可変引数を使う宿題てあまり見ないな

78:デフォルトの名無しさん
07/10/24 21:52:50
[1] 授業単元:文字列操作プログラム
[2] 問題文(含コード&リンク):
配列とポインタを使用し、文字列操作を行うプログラムを作成せよ。
①独自のstrlen関数mystrlen関数を自作する。
  文字列のポインタを受け取り、文字列の長さを返す関数を作成する。

②独自のstrcpy関数mystrcpy関数を自作する。
  文字列のポインタ2つを受け取り、文字列のコピーを行う関数を作成する。

③独自のatoi関数myitoa関数を自作する。
  数値を受け取り、指定された基数で文字列変換を行う関数を作成する。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C言語
[4] 期限:2007年10月26日朝5:00まで
[5] その他の制限:問題が初級編ということで、出来るだけ難しくならないよう
  お願いします。



79:デフォルトの名無しさん
07/10/24 22:19:35
[1] 授業単元:
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月26日10:00まで
[5] その他の制限: 特にありません。
         どうぞよろしくお願いします。

80:デフォルトの名無しさん
07/10/24 22:22:08
すみませんがよろしくお願いします。
さっぱりわかりません・・
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
次のソースコードを参照して、DateTimeClass の代入演算子を定義してください。
ただし、定義はクラスの外で行うものとします。
class DateClass
{
int year, month, day;
};

class TimeClass
{
int hour, min;
};

class DateTimeClass : public DateClass, public TimeClass
{
char* strDate;
char* strTime;
};

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 10/26いっぱい
[5] その他の制限:なし

81:前スレ972
07/10/24 22:27:39
問題の題名は「オペレータ オーバーロードを使ったプログラム作成」でした。
なのでオペレータオーバロードを使わなければいけないっぽい。。

82:デフォルトの名無しさん
07/10/24 22:31:25
>>78
>③独自のatoi関数myitoa関数を自作する。

myatoi関数?それともmyitoa関数?

83:デフォルトの名無しさん
07/10/24 22:34:31
>>78
URLリンク(kansai2channeler.hp.infoseek.co.jp)

84:デフォルトの名無しさん
07/10/24 22:34:48
>>82
>数値を受け取り、指定された基数で文字列変換を行う関数を作成する。
itoaだな
もしくはltostrとでもいうか

85:デフォルトの名無しさん
07/10/24 22:40:42
>>71
>|Σ|っていうのは対角成分をかけたものってことでいいのかな?
対角行列においてはその通り。

φA(λ) = |λI - A|= 0
を満たす値λがベクトルAの固有値。固有値は行列ではなく数値。
Iは対角単位行列。
Aがn×nの正方行列なら、重解を含めて、λはn個存在する。
個別のλのことを「固有値」と呼ぶ。

だから、
>ある問題で正規分布を使っていて、|Σ|を対角行列の対角成分をすべてかけたものを
>固有値として計算する
という部分がおかしい。

これ以上は数学板で聞いたほうがいいかも。

86:デフォルトの名無しさん
07/10/24 22:41:22
[1] 授業単元:Fizz Buzz問題
[2] 問題文(含コード&リンク):
1から100までの数字を順に表示しなさい
ただし3で割り切れる数の場合は数字の代わりにFizz、
5で割り切れる場合はBuzz、
3と5の両方で割り切れる場合はFizz Buzzと表示しなさい。
剰余演算を使うバージョンと、使わないバージョンを作ること。
ただし、あらかじめ該当数字を配列等に格納しておいてのチェックは無しとする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 10月25日PM1時
[5] その他の制限:
よろしくお願いします

87:デフォルトの名無しさん
07/10/24 22:45:51
就職試験対策キターーーー

88:デフォルトの名無しさん
07/10/24 22:48:37
>>79
void quicksort(int a[], int l, int r){
int comp(const void*a, const void*b){
if(*(int*)a < *(int*)b)
return -1;
else if(*(int*)a > *(int*)b)
return 1;
else
return 0;
}
qsort(a, r-l+1, sizeof(int), comp);
}

89:デフォルトの名無しさん
07/10/24 22:49:56
剰余を使わずに、もっとも短いコードをつくる 
出力は次のようにする
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23,
Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz, 31, 32, Fizz, 34,

90:デフォルトの名無しさん
07/10/24 22:50:37
関数内関数なんて使うなって一瞬言おうとしたけど、
そうゆうことなら許すw

91:デフォルトの名無しさん
07/10/24 22:52:40
>>86
「Fizz Buzz問題」 ネーミングがイカしてるな

#include <iostream.h>

int main (void)
{
int i;

for (i=1; i<=100; i++){
if (i%3==0 && i%5==0)
cout << "Fizz Buzz" << endl;
else if (i%3==0)
cout << "Fizz" << endl;
else if (i%5==0)
cout << "Buzz" << endl;
else
cout << i << endl;
}
}

92:デフォルトの名無しさん
07/10/24 22:52:48
>>73
#include <stdarg.h>
int print(const char*f, ...){
va_list a;
va_start(a, f);
vprintf(f,a);
va_end(a);
}

93:デフォルトの名無しさん
07/10/24 23:01:02
>>85
固有値ではないってことだね。
|Σ|は行列の値ってことか。

ってことは間違っている原因は|Σ|じゃないってことか。


94:73
07/10/24 23:01:09
>>92
すみません、後出しで悪いですが、
printfと同様の書式付き関数は使用しないで作ってください。
とにかく考えてくださりありがとうございます。

95:12
07/10/24 23:03:56
>>62
迅速な対応ありがとうございます。
参考にさせて頂きます。

96:デフォルトの名無しさん
07/10/24 23:04:06
#include<stdio.h>

main(){
int a=3,b=5,n;
for(n=1;n<101;n++){
if(n!=a && n!=b)printf(" %d,",n);
else {if(n==a){a+=3;printf(" Fizz");}
if(n==b){b+=5;printf(" Buzz");}
if(n<100)printf(",");
}}}

97:デフォルトの名無しさん
07/10/24 23:08:51
[1] 授業単元:コンピューターグラフィックス
[2] 問題文CGを作れ(自由課題)
ただし以下の評価項目に関して採点を行うのでこれを満たすようなCGを作成すること
1.CGアニメーションになっていること
2.マウスによってなんらかの操作ができる
3.ホップアップメニューが使用できること
4.シェーディングが適切に行われていること
5.テクスチャマッピングが使用されていること
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月6日
[5] その他の制限:あまりにも難しすぎる表現はNG
いきなり自由課題しろとか言われても俺にはイミフ
誰か助けてクレヨン

98:デフォルトの名無しさん
07/10/24 23:11:59
ナンセンス?

#include<stdio.h>

char * fizzBuzz( int n )
{
static char buffer[BUFSIZ];
return n % 15 == 0 ? "FizzBuzz" :
n % 5 == 0 ? "Fizz" :
n % 3 == 0 ? "Buzz" :
(sprintf( buffer, "%d", n ),
buffer);
}

int main()
{
int m = 0;
while( m != 100 )
{
++m;
printf("%s\n", fizzBuzz( m ) );
}
return 0;
}


99:デフォルトの名無しさん
07/10/24 23:12:31
>>97
それほんとにいきなり出されたのか?w

100:デフォルトの名無しさん
07/10/24 23:15:18
printf同様って・・・
300行くらいいるんじゃね?

101:デフォルトの名無しさん
07/10/24 23:15:38
剰余を使わず文字数が少なくてこう出力して
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19,

最後は , をつけないプログラム

102:デフォルトの名無しさん
07/10/24 23:16:19
>>80
strDate, strTimeをどう扱うかによって回答が変わるけど、
こんなのを期待されてそう。

DateTimeClass &operator = (DateTimeClass &a, const DateTimeClass &b)
{
(DateClass &)a = (const DateClass &)b;
(TimeClass &)a = (const TimeClass &)b;
strcpy(a.strDate, b.strDate);
strcpy(a.strTime, b.strTime);
return a;
}


103:デフォルトの名無しさん
07/10/24 23:16:43
>>97
どう考えてもOpenGLとかDirectXとかが必要になりそう気がする……
どう考えてもcだけじゃコンピュータグラフィックは作れなさそうな気がする……

104:デフォルトの名無しさん
07/10/24 23:18:49
>>99
今まではただ惑星とかロボット作ってそれをキーボード入力で動かしてたしてただけだった
だけど授業でシェーディングとかの話し始めて出た課題がこれ
参考にできるサイトなどなんでもいいので参考になるものを教えてください

105:デフォルトの名無しさん
07/10/24 23:20:32
>>97
OpenGLいるな。。。じゃあここはスレ違いか
失礼しました

106:デフォルトの名無しさん
07/10/24 23:20:48
>>104
wisdomsoft OpenGLでググれ
もしくは単位をあきらめる

107:デフォルトの名無しさん
07/10/24 23:22:14
>>100
7行スレで7行printfがあったとか何とかって言ってた。

108:デフォルトの名無しさん
07/10/24 23:22:26
>>104
てっきりプログラミングの授業の第一回目とかで出されたのかと思った>いきなり

109:デフォルトの名無しさん
07/10/24 23:23:04
>>102
ありがとうございます。
そのように解答します。

110:デフォルトの名無しさん
07/10/24 23:23:25
>>104
少なくともCでCGできる時点でこのスレの住人の3分の2くらいよりレベル上だろうな

111:デフォルトの名無しさん
07/10/24 23:23:32
[1] 授業単元:Fizz Buzz問題
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記のプログラムは、1製品にのみ対応したものであるが、複数製品に対応したものに
書き換えなさい。また製品数の目安は100製品程度とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 10月25日18時
[5] その他の制限:

よろしくお願いします


112:デフォルトの名無しさん
07/10/24 23:26:27
>>63
だれか、お願いします。
現在作成中でしたら、おとなしく待ってます。

113:デフォルトの名無しさん
07/10/24 23:28:43
>>106
ググって来るわ
OpenGLの課題片付けてくれるスレってある?

114:デフォルトの名無しさん
07/10/24 23:29:11
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
class BaseClass {
char* name;
public:
BaseClass(const char* p) {name = strdup(p);}
~BaseClass() {free(name);}
};

class MyClass : public BaseClass
{
int count;
public:
MyClass(const char* p, int n = 0) : BaseClass(p), count(n)
{
// ...
}
};

ソースコードを参考にして派生クラスでの生成と消滅の順序を画面に
表示するプログラムを作成してください。
プログラムを実行し、派生クラスと基本クラスのコンストラクタ、
デストラクタが呼ばれる順序を確認してください。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 10/26まで
[5] その他の制限:なし

お願いします。

115:デフォルトの名無しさん
07/10/24 23:44:55
>>101
とりあえず剰余有版はこれでOK?
剰余無し版はfizzBuzz関数の実装を変更すればいいし。
就職活動がんばってな

#include<stdio.h>

char * fizzBuzz( int n )
{
static char buffer[BUFSIZ];
return n % 15 == 0 ? "FizzBuzz" :
n % 5 == 0 ? "Fizz" :
n % 3 == 0 ? "Buzz" :
(sprintf( buffer, "%d", n ), buffer);
}

int main()
{
int m;
for( m = 1; m <= 100; ++m )
{
printf( (m == 100 ? "%s\n" : "%s,"), fizzBuzz(m));
}
return 0;
}


116:デフォルトの名無しさん
07/10/24 23:50:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記のプログラムは、1製品にのみ対応したものであるが、複数製品に対応したものに
書き換えなさい。また製品数の目安は100製品程度とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 10月25日18時
[5] その他の制限:

よろしくお願いします



117:デフォルトの名無しさん
07/10/24 23:50:19
>>111

>>86と同じ人?Fizz Buzz問題でも今回は内容Fizz Buzzじゃないんだ。

>>86はもういいの?

とりあえず1問答えてるし、先客が終わるまで待てて。

118:デフォルトの名無しさん
07/10/24 23:50:55
>>110
CGがなんぼのもんじゃい!

119:デフォルトの名無しさん
07/10/24 23:51:16
>>112
一応作ったけどそのテンプレおかしい気がする。
入力文字列の最後に空白付けないと止まらないかも。

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

120:デフォルトの名無しさん
07/10/24 23:53:36
>>84
HP-UXかHI-UXな人だな?

121:111
07/10/24 23:54:12
>>117
すいません。同一人物じゃないです。
>>86の人のテンプレコピペしたんで授業単元変えるの忘れました

122:デフォルトの名無しさん
07/10/24 23:55:50
>>101はもういないのか?

剰余無し版

#include<stdio.h>
#include<stdbool.h>

bool isMultipleOf( int n, int m )
{
int idx;
for( idx = 1; idx != 100; ++idx )
{
if( m == idx * n )
return true;
}
return false;
}
char * ff( int n )
{
static char buffer[BUFSIZ];
return isMultipleOf( 15, n) ? "FizzBuzz":
isMultipleOf( 5, n) ? "Fizz":
isMultipleOf( 3, n) ? "Buzz":
(sprintf(buffer,"%d", n ), buffer);
}


123:デフォルトの名無しさん
07/10/24 23:58:53
>>114
URLリンク(kansai2channeler.hp.infoseek.co.jp)

124:デフォルトの名無しさん
07/10/24 23:58:56
>>119
テンプレの
/* コンマかピリオドならstr2の位置を1つ左 */

}

}

/* str2(単語)に終端文字を追加 */
-------------------------------------------------------
上記の部分が
/* コンマかピリオドならstr2の位置を1つ左へ */

}
/* str1を1文字右に移動 */
}

/* str2(単語)に終端文字を追加 */
でした。
真ん中の/* str1を1文字右に移動 */を追加お願いします。

125:デフォルトの名無しさん
07/10/24 23:59:42
>>111

if(num<=300+0*10 && day>=inc_day)

の部分がヘン

というかこのプログラム、何をするプログラムなのかが一見してわからない

126:デフォルトの名無しさん
07/10/25 00:02:22
>>121
そなの?変なこと言ってすまん。

いまチャレンジしてるから、ちっと待って。

127:デフォルトの名無しさん
07/10/25 00:04:37
>>124
i++;
を追加してくれ。忘れてた。
まあ、それでも入力の最後に空白付けないといけないのは
変わらない気がするんだが。テンプレがそれならいいのかな。

128:デフォルトの名無しさん
07/10/25 00:05:46
>>125
日にちと商品の在庫不足数を数字のみで表示してるんじゃない?
商品のほうはランダムで数字作成してるみたいだし。
~日 在庫不足~個みたいな。でも、
>>複数製品に対応したものに
ってのがわからない。


129:デフォルトの名無しさん
07/10/25 00:08:09
>>128

>>111
if(num<=300+0*10 && day>=inc_day) inc_day=day+3;
で、あきらかに 0*10 という意味不明な演算をしている件について

130:93
07/10/25 00:08:40
>>85
正規分布を使いアルゴリズムに通して正解率を出すプログラムなんだけど
|Σ|を行列の値(対角成分の積)として計算すると全然正解率がでない。
どこがおかしいのかを見るために
試しに|Σ|に対角成分の和をいれてみて計算すると正解率98%だった。
ただ計算方法が違うのであっているかわからない。

正規分布について調べると|Σ|はΣの固有値とあるんです。

どうなんでしょうかね。

131:111
07/10/25 00:09:32
>>125
簡単に書くと、はじめ300個あった物が毎日80~120ずつ減っていき、
在庫が300+0*10以下になったら、その3日後に、350個プラスされるって感じです。
ちなみに、300+0*10の0の部分は1でも2でもなんでもよいです

132:デフォルトの名無しさん
07/10/25 00:15:22
>>125
別に変じゃなくないか?
numが一定値以下で、かつ現在発注中(到着待ち)じゃなけりゃ発注すんだろ?
inc_dayには発注日+3が入っているから、到着待ち中はday<inc_dayになる

133:デフォルトの名無しさん
07/10/25 00:16:59
>>127
「i++;」を付ける位置は以下で良いですか?

付けてみたのですが分割後に出力される最後の単語が文字化けしてしまいます。

後、テンプレ見直してみましたが、タイプミスや書き残しはもうないので仕様はこれでいいと思います。

/* コンマかピリオドならstr2の位置を1つ左へ */

}
/* str1を1文字右に移動 */
i++;
}

/* str2(単語)に終端文字を追加 */

134:デフォルトの名無しさん
07/10/25 00:17:32
プログラマは数学が苦手なんです。
プログラマはコーヒーとタバコが好きなんです。

135:デフォルトの名無しさん
07/10/25 00:18:36
>>131
納得したその計算してたのね。

136:86
07/10/25 00:19:18
>>86>>89>>91>>96>>98>>101>>>>115>>122
本当にありがとうございます
大変助かりげぶき



137:デフォルトの名無しさん
07/10/25 00:20:34
>>134
英語も苦手だよ。後、眠気覚まし+暇つぶしにガムもスキだよ。

138:デフォルトの名無しさん
07/10/25 00:30:39
>>133
i++はそこでいいよ。

テンプレどおりにやると入力の最後に空白入れないとバグる。
str1[i] != ' ' のとこを str1[i] != ' ' && str1[i] != '\0'
にすればたぶんOK.

139:86
07/10/25 00:30:55
ミス……
本当に助かりました
ありがとうございます

140:22
07/10/25 00:34:15
自分の問題に対してレスしてくれたり、といてくれた人達、
本当にありがとう!!
助かりました!!!!

141:デフォルトの名無しさん
07/10/25 00:37:59
>>138
提出の際に聞いてみます。

期限ぎりぎりで半ば諦めていたので、本当に感謝ありがとうです。

手直しも直ぐにやっていただき助かりました。

142:デフォルトの名無しさん
07/10/25 00:51:09
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
1:y=sin(x) x=0から4πまで、512分割して、yの値を求め、ファイルに書き込む。
2:y=sin(x-π/2) x=0から4πまで、512分割して、yの値を求め、ファイルに書き込む。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語:C
[4] 期限:なるべく早めに
[5] その他の制限: 特にないです。

よろしくお願いします。

143:デフォルトの名無しさん
07/10/25 01:00:46
#include<stdio.h>
#include<math.h>

main(){
int n;
FILE *fp=fopen("sin.txt", "w");
for(n=0;n<=512;n++)fprintf(fp,"sin(π×%d/512) = %f\n",n,sin(4*M_PI*(n+0.0)/512));
}

144:デフォルトの名無しさん
07/10/25 01:07:18
こっち訂正汁

for(n=0;n<=512;n++)fprintf(fp,"sin(4π×%d/512) = %f\n",n,sin(4*M_PI*(n+0.0)/512));
for(n=0;n<=512;n++)fprintf(fp,"sin(4π×%d/512 - π/2) = %f\n",n,sin(4*M_PI*(n+0.0)/512-M_PI/2));

145:デフォルトの名無しさん
07/10/25 01:13:41
#include<stdio.h>
#include<math.h>

main(){
FILE *fp=fopen("sin.txt", "w");
for(int n=0;n<=512;n++)fprintf(fp,"sin(4π×%d/512 - π/2) = %f\n",n,sin(4*M_PI*(n+0.0)/512-M_PI/2));
fclose(fp);
}

146:デフォルトの名無しさん
07/10/25 01:15:03
>>63
テンプレがおかしい。指示通りにやるとセグメントエラーを起こす。

147:デフォルトの名無しさん
07/10/25 01:17:10
>>111
まずはこんなので
URLリンク(kansai2channeler.hp.infoseek.co.jp)

148:デフォルトの名無しさん
07/10/25 01:32:23
>>147
ありがとうございます。
残念ながら、今はプログラミングができる環境じゃないので、明日試して見ます。

149:142
07/10/25 01:32:29
>>143>>144>>145
早速答えていただき、本当にありがとうございます!
助かりました!

150:デフォルトの名無しさん
07/10/25 01:47:38
>>146
一応、>>127のi++;の付け加えでちゃんと動いてくれるので、OKです。
コンパイル通って、動作も「,.」削除+空白削除+分割表示できてるので。

151:デフォルトの名無しさん
07/10/25 01:48:52
i++;じゃなくてstr1[i] != ' ' && str1[i] != '\0'の変更ですね。

152:147
07/10/25 02:07:00
>>111
念のため、

#define DAYS 10 // 販売期間
#define ITEMS 10 // 製品の種類数

の部分を

#define DAYS 1000 // 販売期間
#define ITEMS 100 // 製品の種類数

と書き換えると題意に沿った回答になる。
ただし、このとき、出力が最悪200000行になるので注意。

153:デフォルトの名無しさん
07/10/25 06:10:11
>>82
課題にはそのとおり書いてあったんですが・・。
自分には問題の①~③の意味がさっぱりで・・・。

>>83
それが答えってことになるのですか?

154:デフォルトの名無しさん
07/10/25 06:30:23
こたえだね。

155:デフォルトの名無しさん
07/10/25 07:17:13
答えかどうかもわからないって…

156:デフォルトの名無しさん
07/10/25 09:26:14
[1] 授業単元:情報システム基礎
[2] 問題文(含コード&リンク):このC言語で作られたプログラムをC++に変えて下さい
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: すいません、よくわかりません。
                     講義では「Microsoft Visual Studio .NET 2003」を使用しています
 [3.3] 言語: CからC++へ
[4] 期限: 明日が終わるまで
[5] その他の制限: 特になし

明日までと急なことで申し訳ありませんがお願いします。

157:デフォルトの名無しさん
07/10/25 09:59:01
>>156
本当にそんな問題が……?

158:デフォルトの名無しさん
07/10/25 10:04:20
>>156
すでにC++ですっていって提出しちゃえば?
問題が曖昧すぎ

159:デフォルトの名無しさん
07/10/25 10:18:09
プログラムは配布されたプリントから打ち込みましたが、
問題文は文章でなく口頭で出題されました。全くこの通りです。

すでにC++になっているんでしょうか?

160:156 ◆B5khfT.h4o
07/10/25 10:19:39
すいません、今更ですがトリップをつけるのを忘れていました

161:デフォルトの名無しさん
07/10/25 10:56:23
>>159
拡張子cppでコンパイルしてみな

162:デフォルトの名無しさん
07/10/25 11:03:08
class Helonを作ってコンストラクタで三辺の長さで初期化して
get()で返すとか、そういう風にすればどう?

あとprintfをcoutに無理矢理直すとそれらしく見える。別にprintfでも
C++の範囲内なのだが。

163:デフォルトの名無しさん
07/10/25 11:31:04
>>156
無理矢理C++にしてみた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

164:デフォルトの名無しさん
07/10/25 13:40:38
>>147
一つ目の製品はちゃんと発注するんですけど、二つ目以降は発注が行われないんですけど
どうすればいいんですか?

165:147
07/10/25 14:00:28
>>111 >>164

// 製品情報初期化
int ADD_NUM = (rand()%81)+FIRST_NUM;
int ADD_NUM_LOWER = (rand()%31)+50;
int ADD_DAYS = (rand()%5)+1;

の部分に

// 製品情報初期化
int ADD_NUM = (rand()%81)+FIRST_NUM;
int ADD_NUM_LOWER = (rand()%31)+50;
int ADD_DAYS = (rand()%5)+1;
inc_day = 0;

を書き足せばよかったみたい。

ということでソースは下記に。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>152も参考に。

166:デフォルトの名無しさん
07/10/25 14:06:31
>>165
できました。本当にありがとうございました。


167:65です
07/10/25 14:48:32
遅くなりました。すいません。
変数を州ごとに集計して平均を出す部分がよくわかりません。

>67
ファンクションについてはまだ授業で習っていないので、先生に避けたほうがいいと言われました。
でも、Voidとか変数のReferenceとか基本的なことは本で読んだので、使ってくださってもけっこうです。
提出するコードは、ファンクションを使わないように書き換えます。

>70
はい。州の略はその通りで大丈夫です。

168:デフォルトの名無しさん
07/10/25 15:30:40
>>147さん
URLリンク(kansai2channeler.hp.infoseek.co.jp)
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。

169:デフォルトの名無しさん
07/10/25 16:52:28
>>65 >>167
URLリンク(kansai2channeler.hp.infoseek.co.jp)

・しっかりとgetlineを使っている。
・line.substr(13, 2)とline.substr(23, 4)を使って読み込んでいるので、gasprices.txtの配置がずれたら限りなくアウト。

170:デフォルトの名無しさん
07/10/25 16:54:31
>>14
まだ、待っています。出来る方お願いします。

アドバイスはいくつか貰ったのですが、関数から関数への受け渡しがうまく行きません。

171:169
07/10/25 17:00:34
>>65 >>167 続き
・1行目にある #include <algorithm> は削除。
・出力は一応CSV のはず。
・アメリカの略号に誤入力があるかもしれない。
・アメリカの州って50だったっけ?

172:コンパイルは出来たがあってないぞ
07/10/25 17:06:21
#include<stdio.h>
#include<string.h>
void d_word(char st[], int pos, int len){
int l=strlen(st);
int i;
for(i=pos; i<=l-len; i++) {
st[i] = st[i+len]; }}

void search_del(char st1[], char st2[]){
int i, j;
int m1=strlen(st1);
int m2=strlen(st2);
for(i=0; i<=m1-m2; i++) {
for(j=0; j<m2; j++) {
if(st1[i+j] != st2[j])
break; }
if(j=m2) {
d_word(st1, i, m2);
m1 -= m2;
}}}

int main(){
char str1[256], str2[256];
printf("string? : ");
gets(str1);
printf("deleted word? : ");
gets(str2);
search_del(str1, str2);
puts(str1);
return 0;}

173:デフォルトの名無しさん
07/10/25 17:22:18
お願いします

問題【0からa-1までの整数の乱数をn個発生させ、発生した整数のヒストグラムを表示しなさい。
ただし。a<21とし、aとnはキーボードから入力する】
______________________________________________とりあえずいままで作成したコードです__________________________________
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main(void)
{
int n,a,b,i,val;
int c[21];
printf("0からa-1までの整数の乱数をn個発生させ、\n");
printf("発生した整数のヒストグラムを表示させます\n");
printf("1から21までの任意の整数aを入力してください。\n");
scanf("%d",&a);
printf("任意の正の整数nを入力してください。\n");
scanf("%d",&n);
if(a<=0||a>=22)
{printf("aの値を入力しなおしてください。\n");}
else{
val=(double)rand()/(RAND_MAX+1)*a;
if(n<=0) {printf("nの値を入力しなおしてください。\n");}
else { for (i=0; i<=(a-1); i++)
{printf("aが%dのとき、%d回\n",i,c[val]);
c[val]=c[val]+1;}
}
}
}___________________________________________________________________________________________________________________________

174:173
07/10/25 17:24:12
結果表示はヒストグラムというか
~は~回という形式にします

volとかそのへんの扱いかたがよく分からずに参っております
よろしくお願いいたします。

175:156 ◆B5khfT.h4o
07/10/25 17:26:49
レスしてくれた方やプログラムを作ってくれた>>163さん、ありがとうございました。
とりあえず課題を出したうえで、C++にするのはどういうことか詳しく聞いてみます。

176:65です
07/10/25 17:31:19
>169さん
丁寧にありがとうございます。
はい、アメリカの州は50です。
ところで、私は途中まで以下のようにコードを組み立てたのですが、以下のようなやり方でも、プログラムを完成させることはできますか?

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main (int argc, char **argv)
{
char peek;
ifstream myFile;
string cityName,
stateName;
float gasPrice;
myFile.open("gasprice_file.txt");
while((peek = myFile.peek () ) ! = EOF) {
myFile >> cityName;
myFile >> stateName;
myFile >> gasPrice;
If(! myFile) {
myFile.clear();
cityName = cityName + " " + stateName;
myFile >> sateName;
myFile >> gasPrice;
{
myFile.close();
return 0;
}


177:デフォルトの名無しさん
07/10/25 17:53:30
>>173
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(void)
{
int n=-1,a=0,b,i,val,c[21];
for(i=0;i<21;i++) c[i]=0;
srand((unsigned int)time(NULL));// 乱数の初期化
printf("0からa-1までの整数の乱数をn個発生させ\n");
printf("発生した整数のヒストグラムを表示します。\n");
printf("1から21までの任意の整数aを入力してください。\n");
while(!(a>0&&a<22)){
scanf("%d",&a);
if(a<1||a>21)
printf("aの値を入力しなおしてください。\n");
}
printf("任意の正の整数nを入力してください。\n");
while(n<0){
scanf("%d",&n);
if(n<0)
printf("nの値を入力しなおしてください。\n");
}
for(i=0;i<n;i++){
val=(double)rand()/(RAND_MAX+1)*a;
c[val]++;
}
for (i=0; i<=(a-1); i++)
printf("%d = %d回\n",i,c[i]);
}
表示はヒストグラムでなくてもいいのかな。

178:デフォルトの名無しさん
07/10/25 17:58:47
>>170
アドバイスって言うか>>20で回答もらってるじゃない。
・if(j=m2)をif(j==m2)
・printf("%d\n", st1);をprintf("%s\n", st1);
この2点の変更だけで動くはず。変更の仕方が間違ってるんだと思う。

179:デフォルトの名無しさん
07/10/25 18:06:46
>>177
whileの条件とループの中のifで2回判定するのはムダ

180:デフォルトの名無しさん
07/10/25 18:22:58
>>177の訂正。入力部分。

while(scanf("%d",&a),!(a>0&&a<22))
printf("aの値を入力しなおしてください。\n");
printf("任意の正の整数nを入力してください。\n");
while(scanf("%d",&n),n<0)
printf("nの値を入力しなおしてください。\n");

>>179の指摘したムダを省くと多分こうなると思います。

181:デフォルトの名無しさん
07/10/25 18:26:06
ってやっちまった。>>180だと文字入力したら無限ループしてしまう。
while(scanf("%d",&a),!(a>0&&a<22)){
printf("aの値を入力しなおしてください。\n");
fflush(stdin);
}
printf("任意の正の整数nを入力してください。\n");
while(scanf("%d",&n),n<0){
printf("nの値を入力しなおしてください。\n");
fflush(stdin);
}
こうでした。

182:デフォルトの名無しさん
07/10/25 18:34:53
>>178
この様にコード書いたけどコンパイラが通らないです。

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

183:デフォルトの名無しさん
07/10/25 18:38:11
>>182
見ずにコメント。1.改行コード 2.全角スペース
そろそろコンパイラが吐いたエラー貼ったらどうだ?

184:デフォルトの名無しさん
07/10/25 18:42:43
>>182
#include<string.h>を追加。もしかしてstr~の関数習ってない?

185:デフォルトの名無しさん
07/10/25 18:45:55
>>177
ありがとうございます

実行してみたところ、
0以外の数字が何度やっても0回になってしまいますが
これはどうすればよろしいのでしょうか?

186:デフォルトの名無しさん
07/10/25 18:50:01
>>183
エラーが無いので下に張りました。

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

>>184
追加しても効果なかったです。関数str~習ってます。

187:デフォルトの名無しさん
07/10/25 18:52:46
>>186
「エラーが無いので」×
「エラーが長いので」○



188:デフォルトの名無しさん
07/10/25 18:54:50
1] 授業単元:C言語
[2] 問題文:ファイルの内容を読み込んで、下記の例のように読み込んだ内容を
ディスプレイに表示させよ。

ファイルの内容
誕生年:2000
誕生月:1
誕生日:2
身長:120.0
体重:21.0
名字:Kouno
名前:Hiro

実行例
氏名 Kouno Hiroです。
生年月日は2000年1月2日です
身長120,0cm 体重21,0kgです
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月26日
[5] その他の制限: ライブラリ関数は使っても大丈夫です。

読み込むことはできたのですが、fgetsを使うと「誕生年:2000」と読み込んで
しまって2000だけ表示させることができません。

よろしくお願いします。

189:デフォルトの名無しさん
07/10/25 18:57:41
>>185
valにちゃんと値が入ってないのかな。
val=(double)rand()/(RAND_MAX+1)*a;

val=rand()%a;
に変えてみてください。

>>186
インデントを全角スペースでやってない?

190:デフォルトの名無しさん
07/10/25 19:04:06
>>189
盲点、スペースを全角でやっていました。

スペースを全て消したらコンパイルが通って、ちょんと動きました。

全角スペースでエラー返されるんですね、勉強になりました。

次からはスペースの全角/半角に気をつけます。

191:デフォルトの名無しさん
07/10/25 19:09:39
>>189
ありがとうございます!ちゃんとできました
助かりました

192:デフォルトの名無しさん
07/10/25 19:57:16
>>188
URLリンク(kansai2channeler.hp.infoseek.co.jp)

193:169
07/10/25 20:16:30
>>176
できます。あなたらならできます。

194:デフォルトの名無しさん
07/10/25 20:39:32
[1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク):
URLリンク(case.f7.ems.okayama-u.ac.jp)
にならって以下のデータ平均分散を用いて確率を出せ。10次元です。
データ
-18.858 1.046 -1.616 4.023 1.857 4.207 6.451 0.989
-3.807 0.744
平均 
-6.388222e+00 -1.383500e+01 -1.249702e+01 -3.617623e+00 2.185494e-01
3.840833e+00 6.477101e+00 -1.552781e+01 4.537848e+00 -2.995257e+00  
分散
1.504899e+01 2.376009e+01 2.176429e+01 2.650845e+01 2.850247e+01
5.442906e+01 3.594814e+01 7.991224e+01 2.946554e+01 3.397208e+01
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月26日まで
[5] その他の制限: なし


195:78&153
07/10/25 20:56:27
すいません、問題③に間違い&追加がありました。
実装仕様もあって、書いてたことが違ってました。
以下が訂正問題です。

[1] 授業単元:文字列操作プログラム
[2] 問題文(含コード&リンク):
配列とポインタを使用し、文字列操作を行うプログラムを作成せよ。
①独自のstrlen関数mystrlen関数を自作する。
  文字列のポインタを受け取り、文字列の長さを返す関数を作成する。

②独自のstrcpy関数mystrcpy関数を自作する。
  文字列のポインタ2つを受け取り、文字列のコピーを行う関数を作成する。

③独自のatoi関数myatoi関数を自作する。
  数値文字列のポインタを受け取り、数値を返す関数を作成する。

④独自のitoa関数myitoa関数を自作する。
  数値を受け取り、指定された基数で文字列変換を行う関数を作成する。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C言語
[4] 期限:2007年10月26日朝5:00まで

>>196に続く

196:78&153
07/10/25 20:56:58
>>195の続き

[5] その他の制限:実装仕様として、
①int mystrlen(const char*s)
第一引数:文字列のポインタ
 戻り値:文字列の長さを返す

②char*mystrcpy(char*s1,const char*s2);
第一引数:コピー先バッファのポインタ
 第二引数:コピー元文字列のポインタ
 戻り値:第一引数の文字列へのポインタを返す

③int myatoi(const char*nptr);
第一引数:変換元の数値文字列
 戻り値:変換された値を返す

④char*myioa(int value,char*buff,int radix);
第一引数:変換元の整数
 第二引数:変換後の数値文字列を格納するバッファのアドレス
 第三引数:基数(何進数で変換するか。2~36の範囲内で指定可能)
 戻り値:第二引数の文字列へのポインタを返す

と、なっております。
すいませんが回答の方をよろしくお願いします

197:デフォルトの名無しさん
07/10/25 21:03:26
>>66 = >>71 = >>93 = >>130 = >>194

198:デフォルトの名無しさん
07/10/25 21:28:40
>>195 >>196
いまさら?これから変更するの面倒だし
期限:2007年10月26日朝5:00
ってことは残り7時間、無理。
がんばれノシ

199:デフォルトの名無しさん
07/10/25 21:31:16
標準ライブラリ使っちゃダメって書いてないんだからそのまま引数渡せばいいだろ。

200:デフォルトの名無しさん
07/10/25 21:31:22
>>123
ありがとうございます!
感謝します!

201:デフォルトの名無しさん
07/10/25 21:36:03
よろしくお願いします。
[1] 授業単元:C++プログラミング
[2] 問題文(含コード&リンク):
次のクラス定義を参照して、関数 func 内の処理を記述してください。
関数 func 内では p が派生クラス MagazineMotorcycle のインスタンスを指すかどうかを調べて、
もしそうならメンバー関数 Reserve を呼び出してください。そうでなければ false を返してください。

class Magazine
{
public:
virtual bool Order(int amount = 1) = 0;
};
class MagazineMotorcycle : public Magazine
{
public:
bool Order(int amount = 1) {}
bool Reserve() {}
};
bool func(Magazine* p)
{
// 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
}

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 10/26 12:00
[5] その他の制限:なし


202:78&153
07/10/25 21:45:03
>>198
昨日書き込んで、今日間違い気づいたんですよorz
できればお願いします。自分にとっては、これってホントに初級編!?って
いうぐらい難しい

203:デフォルトの名無しさん
07/10/25 21:46:42
>>201
bool func(Magazine* p)
{
    // 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
    if (MagazineMotorcycle* mm = dynamic_cast<MagazineMotorcycle*>(p))
        mm->Reserve();
    return false;
}

これでおk?

204:デフォルトの名無しさん
07/10/25 22:03:47
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):stack.cpp 中のpushとpop関数を完成せよ。
stack.cpp:URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2003
 [3.3] 言語:c++
[4] 期限:2007年10月26日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理まで

どうかよろしくお願いします。

205:デフォルトの名無しさん
07/10/25 22:10:08
>>203
ありがとうございます。
こちらを提出してみます。

206:デフォルトの名無しさん
07/10/25 22:12:28
>>201
bool func(Magazine* p)
{
    // 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
    if (MagazineMotorcycle* mm = dynamic_cast<MagazineMotorcycle*>(p))
        return mm->Reserve();
    return false;
}

こんどこそおk?

207:デフォルトの名無しさん
07/10/25 22:26:15
>>204

// データvalをスタック x に積む
void push(int *x,int val)
{
    // (1) スタックがオーバフローかどうかをチェック
    if (stack_pointer < stack_size) {
        // (2) オーバフローでなければデータ val をスタック x につむ
        x[stack_pointer++] = val;
    }
}

// データをスタック x からおろす
void pop(int *x)
{
    // (1) スタックがアンダーフローかどうかをチェック
    if (stack_pointer > 0) {
        // (2) アンダーフローでなければスタックxからデータをおろして、
        // スタックポインターを調整    
        stack_pointer--;
    }
}

これでおk?

208:デフォルトの名無しさん
07/10/25 22:41:25
>>207おkです。感謝です。
本当にありがとうございます。
助かりました。

209:57
07/10/25 22:54:44
>>60
レスありがとうございます。
今日の朝、main関数を作って動かしてみたのですが、
おかしいです。
例えば、連結リストのaの値を10、11、12とすると、
11、10、56787
と、一番最後が変な数値になってしまいます。
並び替える前に表示すると、10、11、12となってちゃんと動作するので、
表示する関数は間違ってないと思います。
一応補足として、自分が扱っている連結リストは一番最初に、aに値が
含まれていない要素があり、その後からaに値が含まれる要素が並びます。

210:デフォルトの名無しさん
07/10/25 23:10:52
>>202
#include<stdio.h>
int mystrlen(const char *s)
{
int len=0;
while(*s++!='\0') len++;
return len;
}
int myatoi(const char *nptr)
{
int i,n=0,sign=0,len=0;
const char *s=nptr;
while(*s++!='\0') len++;
if(*nptr=='-'){
sign++; len--; *nptr++;
}
for(i=0;i<len;i++)
n=10*n+*nptr++-'0';
return sign ? -n : n;
}
mystrcpy,myitoaは>>83のままで仕様満たしてるのでそれ以外を。

211:デフォルトの名無しさん
07/10/25 23:11:09
>>147さん
URLリンク(kansai2channeler.hp.infoseek.co.jp)
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。


212:デフォルトの名無しさん
07/10/25 23:19:38
>>168さん、この生産管理プログラムの期限はいつまででしょうか。

213:78&153
07/10/25 23:21:11
>>83>>210
遅い時間に本当にありがとうございます。
お手数おかけ致しました。(TT)

214:デフォルトの名無しさん
07/10/25 23:21:23
>>209
糞リストの仕様を書かなかったほうが悪い。

215:デフォルトの名無しさん
07/10/25 23:22:42
お願いします!!

[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
 1:int型整数をchar型配列の文字列に変換するitoa関数を作れ
 2:long型整数をchar型配列の文字列に変換するltoa関数を作れ
 3:float型小数をchar型配列の文字列に変換するftoa関数を作れ
[3] 環境
 [3.1] OS: XP sp2
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C
[4] 期限: 明日26日(金)の16時まで

216:デフォルトの名無しさん
07/10/25 23:33:35
>>215
1.
char* itoa(int n){static char c[16];sprintf(c,"%d",n);return c;}
2.
char* ltoa(long n){static char c[16];sprintf(c,"%ld",n);return c;}
3.
char* ftoa(float n){static char c[16];sprintf(c,"%f",n);return c;}

217:デフォルトの名無しさん
07/10/25 23:34:03
>>215
itoaは >>83 にあるよ。ltoaはitoaとほとんど変わらん。
ftoaも小数点以下あるだけであんま変わらないな。

218:57
07/10/25 23:37:20
>>214
申し訳ないです。

リストの仕様は以下の様になります。
・リストは連結リストで片方向リストです。
・次の要素がない場合(リストの一番最後)は、次の要素へのポインタをNULLとします。
・リストの一番最初には、aに値が含まれていない要素があります。

よろしくお願いします。

219:デフォルトの名無しさん
07/10/25 23:42:13
木曜日の15時までです。

220:デフォルトの名無しさん
07/10/25 23:45:52
>>218
static struct c *re_internal(struct c *l)
{
struct c *p;
if(l->n==NULL) return l;
p = re(l->n);
l->n->n = l;
l->n = NULL;
return p;
}
struct c *re(struct c *l)
{
if(l->n) l->n = re_internal(l->n);
return l;
}

221:デフォルトの名無しさん
07/10/25 23:49:08
再帰は?

222:215
07/10/26 00:03:01
>>216
さすがにsprintfは使うわけにはいかないかと・・・w

>>217
ありがとうございます。
>>83を参考にしてやってみようと思います。

223:57
07/10/26 00:03:47
>>219
減点はするけど、出さないよりは、ましだから今週の課題と一緒に来週に
出しなさいと言われました。

>>220
ありがとうございます。
リストの仕様は>>218に書いた通りですが、
問題自体は>>57に書いた通り、再帰を使わないと…

224:デフォルトの名無しさん
07/10/26 00:08:57
>>220
re_internalの中でre呼び出してる

225:57
07/10/26 00:23:54
>>224
再帰って自分自身の関数を呼び出すんじゃないですっけ?
これだと、他の関数を呼び出してるだけな気がするのですが…
一つの関数で作ることって出来ないのですかね?


226:デフォルトの名無しさん
07/10/26 00:24:24
>>218 直した
static struct c *re_internal(struct c *l)
{
struct c *p;
if(l->n==NULL) return l;
p = re_internal(l->n); // <- この行
l->n->n = l;
l->n = NULL;
return p;
}
struct c *re(struct c *l)
{
if(l->n) l->n = re_internal(l->n);
return l;
}

>>224 thx

227:57
07/10/26 00:50:35
>>226
ありがとうございます。

228:デフォルトの名無しさん
07/10/26 00:58:09
リストの先頭にデータを入れないことによってどんな利点があるの?

229:168
07/10/26 00:58:45
>>147・212
28日までにお願いしたいんですけど・・・
よろしくお願いします。

230:デフォルトの名無しさん
07/10/26 07:29:15
1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2007年10月26日
[5] その他の制限: ライブラリ関数は使ってもおkです

徹夜で考えたんですが分からなかったのでお願いします

URLリンク(kansai2channeler.hp.infoseek.co.jp)のよに書いたのですが
セグメントエラーが出てしまいます。
ダメなところとかがあったら直して教えてください。

231:デフォルトの名無しさん
07/10/26 07:51:19
>>230
比較用演算子 == を使うこと.
if(fop=NULL)
if(fout=NULL)

あと、終盤で下記不要
> heikin=goukei/NUM;
> fprintf(fout,"番号\t平均点との差\n");
> for(i=0;i<NUM;i++)
> {
> fscanf(fop,"%d%d",&gakusei[i].bangou,&gakusei[i].seiseki);
> goukei=+gakusei[i].seiseki;
> }

最後は goukeiもNUMも整数なのでgoukei/NUMは整数となるのを防ぐ
heikin=(double)goukei/NUM;

232:デフォルトの名無しさん
07/10/26 08:09:19
>>230
14~21行目: 使わない変数 (fairu, cp, sirusi1, sirusi2) の宣言は外しましょう

21行目: heikin は int 型でいいんじゃない?
double 型で行きたい場合、int型変数 (seiseki, goukei等) との計算をするときにキャストとか考えた方が良い

24,26行目: scanf("%s", &open); → scanf("%s", open);
ポインタを習っているかは知りませんが、配列名は単独で使用するとポインタ型になります

30,42行目: if (fop=NULL) → if (fop == NULL)
C言語での比較演算子は == です

56行目: goukei=+gakusei[i].seiseki; → goukei += gakusei[i].seiseki;
演算子を見直しましょう

63~70行目: 平均2回計算してるから消そう

74行目: "%d\t%dn" → "%d\t%d\n"
改行文字は "\n" で表します

233:デフォルトの名無しさん
07/10/26 08:16:51
>>231さん
>>231さん
朝早くだったのにレスありがとうございます。

おかげ様でセグメントエラーも出ないで実行できました
来週中間試験があるので
もっと勉強しなきゃいけないなと思いました。

ホントにお世話様でした

234:デフォルトの名無しさん
07/10/26 08:46:17
中間試験って紙にコード書くの?

235:課題お願いします
07/10/26 09:05:21
[1] 授業単元:プログラミング演習
[2] 問題文:n個からr個を選ぶ組み合わせは、nCr = n!/r!(n-r)! ただし、n! = 1*2*3*…*(n-1)*nで求められる。そこで、n!を求める関数functorial(n)を定義し、それを3度呼び出す形で、組み合わせnCrをもおめるプログラムを作成せよ。
[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語: C
[4] 期限: 今日の昼までに。
[5] その他の制限: 授業で配列とポインタは習いました。この問題は「関数」というセクションの問題です。大学の授業なのであまり難しくなり過ぎないようにお願いします。


236:235
07/10/26 09:07:30
書き間違いorz
[2] 問題文:n個からr個を選ぶ組み合わせは、nCr = n!/r!(n-r)! ただし、n! = 1*2*3*…*(n-1)*nで求められる。そこで、n!を求める関数functorial(n)を定義し、それを3度呼び出す形で、組み合わせnCr を求めるプログラムを作成せよ。

237:デフォルトの名無しさん
07/10/26 09:09:55
int function(int n)
{
return n<2 ? 1 : n * function(n-1);
}

int nCr(int n, int r)
{
return function(n) / function(r) / function(n-r);
}


238:デフォルトの名無しさん
07/10/26 09:11:28
一瞬で片付くというのもある意味爽快だ

239:デフォルトの名無しさん
07/10/26 09:20:03
>>234
中間試験は筆記と実技があって
実技は端末からサーバーにアクセスして書きます。

実技は今のままじゃ、受かる気がしません…
ファイル処理、ポインタがかなりヤバイです

240:デフォルトの名無しさん
07/10/26 09:23:34
関数名functorialだw
階乗ならfactorialだし、関数ならfunctionだからfuncだけみて間違っちまった。

241:デフォルトの名無しさん
07/10/26 10:59:15
1] 授業単元: プログラミング
[2] 問題文:3人の昼食代を入力し、その平均を関数aveにて計算し、
「割り勘で△円」と表示するプログラム
(定義例:double ave(double c1,double c2,double c3))
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月26日まで] できれば早いほうがうれしいです。
[5] その他の制限:定義例を使ってください
if,while,switch,forは習いました

お願いします

242:デフォルトの名無しさん
07/10/26 11:01:22
なんで金額がdoubleなんだよ・・・

243:デフォルトの名無しさん
07/10/26 11:05:00
>>234
別人だけど、フロッピーでソース提出とか、メールで添付とかもあるけど、一番多いのは紙。

正直、このご時勢で紙でやるのは馬鹿だと思う。

244:デフォルトの名無しさん
07/10/26 11:14:18
>>242
小数点出てもいいらしいです。要はaveを使って計算したいのだと思います。

245:デフォルトの名無しさん
07/10/26 11:18:40
俺の高校は紙にVBA書かされたぜ

246:デフォルトの名無しさん
07/10/26 11:19:06
>>243
国がやってる情報処理系の資格試験は、全部紙だぞ?

247:デフォルトの名無しさん
07/10/26 11:24:49
先日はありがとうござました。

[1] 授業単元: C言語演習Ⅱ
[2] 問題文(含コード&リンク):
前回の授業で"姓/名"という形式の文字列を入力すると、これを姓と名を表す2つの文字列に分割するプログラムを作成した。

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

このプログラムを関数を用いた形に書き換えようと思い、次のプログラムを作成した。

このプログラムを実行すると、おかしな出力になってしまった。

問題1:このプログラムのどこが間違っているのか、その理由を答えよ。
    (ヒント:pt_s,pt_mはローカル変数)
問題2:プログラムを書き直せ。
    (配列を渡す方法、ポインタのアドレスを渡す方法などある)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限:29日(月)

248:デフォルトの名無しさん
07/10/26 11:34:38
>>239
うちも紙~

さすがにプログラムを卓上で作りコード全部書けは無いけど、
5~6行くらいの穴埋めでプログラムを完成させよとか。

249:デフォルトの名無しさん
07/10/26 11:59:09
流石に資格試験でソース全部書けは無いだろ。
あったら死ねるけどw
普段書かない記号とか書かなきゃならんし、
インデント一つ追加しようと思ったらその間書き直しだし、
書いてる事がタイプ以上に考えてる事に追いつかないし、
変数名チェックも全部自分でしなけりゃならんから面倒だし。

250:デフォルトの名無しさん
07/10/26 12:01:52
>>239
うちは進んでるよ。
テストプログラムを当日教室で下してきて実行すると、P検みたいなプログラムが走って画面左半分が問題書いてあって、右半分の上がコマンドプロンプト?で下がテキストパッドになってる。

問題にある仕様のプログラムをテキストパッドで作って、「実行」ボタンがその下にあるから押すとコマンドプロンプトで自動的にコンパイル+実行してくれる。

作ってる途中のものを試しでコンパイルする度、実行はうざかった。

問題全部作ったら問題1番最後の回答終了を押すと自動で結果をサーバーに送信して、プログラム終了。

ファイヤーウォールに引っ掛かって提出できないとか、提出時に回線が込んでて提出できないとかで、良悪あるけどね。

251:デフォルトの名無しさん
07/10/26 13:04:09
>>250
なんだかすごい環境だな。

252:デフォルトの名無しさん
07/10/26 13:09:33
>>239
高専電気科の情報の授業では
ごく普通にPCでやってるぞ
しかも、授業で書いたコードを参照してもいいというオマケ付きで。

授業理解度を確かめるのならこういう方式でもよさげな気がする。

253:デフォルトの名無しさん
07/10/26 13:12:10
>>241
これは……一見するととても簡単そうなプログラムに見える……
そう見えるのはオレだけか……?

254:デフォルトの名無しさん
07/10/26 14:03:27
strcpyの使い方で質問があるんですが、
strcpy(a+(変数),b+(変数));
これはどういう意味でしょうか?+が特に分からないんですが…
a、bは配列です

255:デフォルトの名無しさん
07/10/26 14:06:41
>>250
せっかくプログラミングやってんだから、
講師の側でもそんな感じでテスト用プログラム作って欲しいもんだな

>>252
そういう方式もいいよなあ
実際のプログラミングだとソース参照し放題、ネットで調べ放題なわけで
それでもできない人がいるんだから、十分実力測れるだろう
プログラミングは暗記じゃない

256:デフォルトの名無しさん
07/10/26 14:38:19
>>254
その配列a, bの +変数分以降のみの文字列をコピーするという意味。
変数が 2 だったらaの先頭 2 文字は変化しない。

257:デフォルトの名無しさん
07/10/26 15:04:04
>>256
分かり易い解説ありがとうございました

258:235
07/10/26 15:23:52
>>237
ありがとうございました!!

259:デフォルトの名無しさん
07/10/26 16:17:50
>>247
元のプログラムではポインタ変数は仮引数なので呼び出し元に結果が反映されない
#include <stdio.h>

void namesplit(char [], char **, char **);

int main(void){
char full[200];
char *pt_sei, *pt_mei;

printf ("姓/名で入力せよ:");
scanf("%s", full);

namesplit(full, &pt_sei, &pt_mei);

printf("姓:%s\n 名:%s\n", pt_sei, pt_mei);
return 0;
}

void namesplit(char f[], char **pt_s, char **pt_m)
{
/*pt_sとpt_mをfの先頭アドレスにセット*/
*pt_s = f; *pt_m = f;
/*スラッシュまでpt_mを移動*/
while (**pt_m != '/')
(*pt_m)++;
**pt_m = '\0';
(*pt_m)++;

/*これで、pt_seiとpt_meiはそれぞれ姓と名を指す場所に移動した?*/
}

260:デフォルトの名無しさん
07/10/26 17:08:00
>>253
わかる人は簡単だよ
でも、習ったばっかりなんだろ
最初はみんなわからないもんだよ

261:デフォルトの名無しさん
07/10/26 17:32:12
一分で書けるけど書かない

262:デフォルトの名無しさん
07/10/26 18:04:04
なぜ書かない?

263:デフォルトの名無しさん
07/10/26 18:17:14
単純に3つの引数とって平均を求める関数て言えばいいのに、なんで割り勘とか余計な設定つけてんだよ。
一人一人の代金がわかってるなら、割り勘になんてしないだろ。

264:デフォルトの名無しさん
07/10/26 18:43:15
>>263
「相乗平均じゃなくて相加平均だよ^^ お前ら間違えんなよ^^」て言いたかったんだよ
気の回る良い先生じゃないか

265:デフォルトの名無しさん
07/10/26 19:40:50
宿題マダァ?(・∀・ )っ/凵⌒☆チンチン

266:デフォルトの名無しさん
07/10/26 22:09:36
ひつまぶしキボンヌ

267:デフォルトの名無しさん
07/10/26 22:12:45
質問テンプレ】
[1] プログラミング
[2] 自然対数の底eを求めるプログラムをSRT除算を用いて求めよ。
exp(x)=Σ(n=0,∞){1/n!}=1/0!+1/2!+1/3!+…+1/n!
   =1+(1+1/2(1+1/3(1+…+1/n)))
固定小数点で、整数部を16ビット、小数部を48ビットとする(n≧17)
[3] 環境
 [3.1] Vine Linux
 [3.2] gcc
 [3.3] C言語
[4] 2007年10月29日8:40まで でも早い方がいいです。
[5] ループを使用してお願いします。

268:デフォルトの名無しさん
07/10/26 22:12:55
全ディレクトリのファイルを調べてサイズが一致するファイルをプルパスで出力せよ

269:デフォルトの名無しさん
07/10/26 22:19:18
URLリンク(journal.mycom.co.jp)

270:デフォルトの名無しさん
07/10/26 22:22:06
>>265
自分で要求するほど、宿題を回答してやりたいのか。

この掲示板の鏡だな、解けない問題は無いってか?

271:デフォルトの名無しさん
07/10/26 22:25:20
SRT除算は簡単ではないな

272:デフォルトの名無しさん
07/10/26 22:43:03

[1] プログラミング
[2] URLリンク(doiob.net)
シンプソンの公式を用いて定積分を求めるプログラムを作成し、
以下2つの定積分を計算せよ。ただし刻み幅 h=0.1 とする。
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C言語
[4] 2007年10月29日

お願いします

273:デフォルトの名無しさん
07/10/26 22:46:03
>>269
これはむずい
もう少し前のページから見ないと単語がわからなすぎる

274:デフォルトの名無しさん
07/10/26 22:54:36
シンプソンは簡単 関数をf(x)とし、 区間(a,b)を一分割で積分するとする
m=(a+b)/2 、d=(b-a)とするとき積分値は d/6 * (f(a)+f(b)+4f(m))だ
N分割のときはこの値を使えばいい

275:デフォルトの名無しさん
07/10/26 22:57:47
>>274
なぜコードで示さないんだ

276:デフォルトの名無しさん
07/10/26 22:59:44
具体的には、区間(a,b)をN分割するならば、

F(s,t)= (t-s)/6 * (f(s)+f(t)+4f(s+t /2)) 、 d = (b-a)/Nとおくとき

n=0,・・・,N-1に対しF(a+nd, a+(n+1)d)の和を計算すればよい

277:デフォルトの名無しさん
07/10/26 23:02:42
>>276
擬似コードだけなら単位はやれないな

278:デフォルトの名無しさん
07/10/26 23:03:56
>>275
プログラム自体は計算と結果の出力だけの簡単なものだからチャレンジしてみなってことじゃない?

計算内容自体は>>274が解説してくれてるし。
もしくは作成中か。

279:デフォルトの名無しさん
07/10/26 23:08:01
>>259
ありがとうございます。ポインタ変数が問題だったんですね。

仮引数だったのをポインタのポインタで呼び出しが出来るようにしたと。

なるほど納得しました。

280:デフォルトの名無しさん
07/10/26 23:09:01
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return exp(1/sqrt(1+x*x*x*x));}

#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
#define G(a,b) (g(a)+g(b)+4*g((a+b)/2))*(b-a)/6


int main(){
double x,d=0.1,sum;
sum=0;
for(x=0;x<1;x+=d)sum+=F(x,x+d);
printf("%f\n",sum);

sum=0;
for(x=0;x<1;x+=d)sum+=G(x,x+d);
printf("%f\n",sum);
}

281:デフォルトの名無しさん
07/10/26 23:10:31
訂正
double g(double x){return 1/sqrt(1+x*x*x*x);}

282:デフォルトの名無しさん
07/10/26 23:12:03
値があっているか確認したいが数値計算ソフトだれか持っている?

283:デフォルトの名無しさん
07/10/26 23:12:09
何にせよ動作するリストを出すのがこのスレってもん

284:デフォルトの名無しさん
07/10/26 23:12:15
>>274 >>276
で組み込む計算式作ってくれてるから、もう課題出来てるも同然な気がする。

だって、その式を表示するだけで完成でしょ。

285:デフォルトの名無しさん
07/10/26 23:17:30
>>272 カウンタは整数のが良いと思うので便乗
#include <stdio.h>
#include <math.h>

double func1(double x)
{
    return sqrt(pow(x, 4) + 1);
}

double func2(double x)
{
    return exp(-pow(x, 2));
}

int main(void)
{
    double l = 0.0, r = 1.0, h = 0.1, s = 0;
    int i;

    for(i = 0; i < (r - l)/h; i += 2)
        s += h/3*(func1(l + i*h) + 4*func1(l + (i + 1)*h) + func1(l + (i + 2)*h));
    printf("%g\n", s);

    for(i = 0; i < (r - l)/h; i += 2)
        s += h/3*(func2(l + i*h) + 4*func2(l + (i + 1)*h) + func2(l + (i + 2)*h));
    printf("%g\n", s);

    return 0;
}

286:デフォルトの名無しさん
07/10/27 00:03:16
[1] 授業単元: コンピューター
[2] 問題文(含コード&リンク):整数演算と浮動小数点演算で自分のプロセッサのスピードをテストするプログラムと結果を示しなさい。 テストするのは整数、浮動小数点ともに、加減乗除の4つづ、計8つです。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限: 結果はcygwinのtimeを使えってばっちゃが言ってました。
お願いします。


287:デフォルトの名無しさん
07/10/27 00:07:31
ふざけてんの

288:デフォルトの名無しさん
07/10/27 00:13:39
>>280
副作用乙

289:デフォルトの名無しさん
07/10/27 00:18:05
なんで6で割っているんだぜ?

290:デフォルトの名無しさん
07/10/27 00:34:16
>>289
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return exp(1/sqrt(1+x*x*x*x));}

#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
#define G(a,b) (g(a)+g(b)+4*g((a+b)/2))*(b-a)/6

int main(){
double x,d=0.001,sum;
sum=0;for(x=0;x<1;x+=d)sum+=F(x,x+d);
printf("%f\n",sum);

sum=0;for(x=0;x<1;x+=d)sum+=G(x,x+d);
printf("%f\n\n",sum);

//単純な定積分
int n,N=1/d;
sum=0;for(n=0;n<N;n++)sum+=d*g(n*d);
printf("%f\n",sum);}

291:デフォルトの名無しさん
07/10/27 00:47:03
Integral(f,a,b,d)って出来るの? 関数わたし

292:デフォルトの名無しさん
07/10/27 00:55:29
スマソ全然見てなかったわ

293:272
07/10/27 01:03:57
ありがとうございました
解説で分かってきたので色々と試してみます

294:291
07/10/27 01:09:38
できた
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return 1/sqrt(1+x*x*x*x);}
#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6

typedef double (*func)(double);
double Integral(func f,int a,int b, double d){
int n,N=(int)1/d;double s=0;
for(n=0;n<N;n++)s+=F(n*d,n*d+d);
return s;}

int main(){
double d=0.001;
printf("%f\n",Integral(f,0,1,d));
printf("%f\n",Integral(g,0,1,d));}

295:デフォルトの名無しさん
07/10/27 01:19:55
先こされた。
#include<stdio.h>
#include<math.h>
double quadInterpol( double (*fun)( double ), double begin, double end )
{
return ((*fun)(begin) + 4*(*fun)( (begin+end)/2 )
+ (*fun)(end)) * (end-begin)/3;
}
double integral( double (*fun)( double ), double begin, double end, double h )
{
double result = 0.0;
double pos = begin;
while( pos <= end )
{
result += quadInterpol( (*fun), pos, pos+h );
pos += h;
}
return result;
}
double f(double x)
{
return exp(-x*x);
}
int main(void)
{
const double diff = 0.1;
printf("result=%f\n",integral(f,0.0,1.0,diff));
return 0;
}


296:デフォルトの名無しさん
07/10/27 01:26:36
>>294
出題者じゃないんだが。

typedef double (*func)(double);
これってなにやってるの?

297:57
07/10/27 01:29:04
>>228
自分も詳しい理由は分かりませんが、この再帰の問題以前にも、リストで
色々な動作をする関数を作ったので、その関数を作る時、関数に引数を
渡したりするのに、リストの先頭にデータを入れない方が都合が
良いんじゃないですかね?
リストは先頭にデータを入れないとばかり思ってたので、よく分かりませんが。

298:291
07/10/27 01:30:26
>>296
たとえばDLLを使うとき次のように書く 型の定義

typedef int (__stdcall *FNC)(const HWND , LPCSTR , LPSTR , const DWORD);

main(){
HINSTANCE hd = LoadLibrary("UNZIP32.DLL");
FNC p = (FNC)GetProcAddress(hd,"UnZip");
}

299:デフォルトの名無しさん
07/10/27 01:30:41
>>290
すいませんd=0.001となってるのが良く分からないんですが

300:291
07/10/27 01:31:39
>>299 細かくした方が値が正確になるって事だけだ d=0.1でいい

301:コッチェビン
07/10/27 01:32:28
なんかすごいシコシコしたい・・・

302:デフォルトの名無しさん
07/10/27 01:33:37
>>300
どうもです

303:デフォルトの名無しさん
07/10/27 01:34:19
>>298
つまりfuncという関数型ができたということ?
そうしたらIntegral(func funcName,...)
とすべきでは?
それと
#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
ここでfつかっちゃったらマクロFでは常に関数fが呼び出されることにならない?


304:デフォルトの名無しさん
07/10/27 01:35:47
ちなみに追い詰めてるわけじゃないです。数値あわせがしたいだけです。
計算結果に自信がないので。

305:291
07/10/27 01:36:19
>>303
呼び出すのはfでいいんだよ 引数でfとかgを指定するから

306:291
07/10/27 01:37:56
>>304
単純な定積分の値と比較したから正解だろう >>290で求めている
あと>>290はgが間違えていて
正しくは
double g(double x){return 1/sqrt(1+x*x*x*x);}

307:デフォルトの名無しさん
07/10/27 01:38:07
>そうしたらIntegral(func funcName,...)
スマソ。そうなってた。

308:デフォルトの名無しさん
07/10/27 01:40:16
>>305

double Integral(func f,int a,int b, double d){
int n,N=(int)1/d;double s=0;
for(n=0;n<N;n++)s+=F(n*d,n*d+d);
return s;}

引数でfという関数を取っているのは確かなんだけど
関数内で一回も使ってない。

309:291
07/10/27 01:41:38
>>308
Fがマクロだから使っている
あと使っていないのはaとbだ 勝手に(0,1)だとおもって書いてしまった

310:デフォルトの名無しさん
07/10/27 01:41:57
>>308
マクロ展開してみればいい
でも名前が被っているのは気持ち悪いな

#include<stdio.h>

void a(void){printf("func a\n");}
void b(void){printf("func b\n");}
void c(void (*a)(void)){a();}

int main(void){
c(a);
c(b);
return 0;
}

311:デフォルトの名無しさん
07/10/27 01:43:31
>>309
なるほどね。理解できました。
exp(-x*x)の関数名をfにしないでくれたらよかった。


312:デフォルトの名無しさん
07/10/27 01:53:03
>>294
粘着すまん。
6じゃなくて3で割らないといけなくないか?
h=0.1で指定されているし。

313:修正版
07/10/27 02:00:49
#include <stdio.h>
#include <math.h>

double exp_x2(double x){return exp(-x*x);}
double ichiwaru_root_1tasu_x4(double x){return 1/sqrt(1+x*x*x*x);}
#define F(a,b) (f((a))+f((b))+4*f(((a)+(b))/2))*((b)-(a))/6

typedef double (*func)(double);

double Integral(func f,double a,double b, double d){
int n,N;double s=0;
N=(int)(b-a)/d;
for(n=0;n<N;n++)
s+=F(a+n*d,a+(n+1)*d);
s+=F(N*d,b);return s;}

int main(){
double d=0.1;
printf("%f\n",Integral(exp_x2,0,1,d));
printf("%f\n",Integral(ichiwaru_root_1tasu_x4,0,1,d));}

314:修正版
07/10/27 02:03:09
>>312
そもそも2hの幅で積分しろってことか それならそうだな

315:デフォルトの名無しさん
07/10/27 02:04:51
うがあぁ数値が合わない。
何が違うんだ。。。。。

316:修正版
07/10/27 02:07:29
>>312
でも最小の区間を与えた方が標準的だと思う
Integral(f, 0, 1, 0.2))と呼び出せば正解と一致する値が出るはずだ

317:デフォルトの名無しさん
07/10/27 02:11:03
>>316
考えてみる。
正解はちなみにいくつなんだ
俺は
result=1.560123
result=1.988458

そっちは
1.493648
1.854075

他の検証方法ってある?Excelあたりでできるもんかね?

318:デフォルトの名無しさん
07/10/27 02:12:30
あ。6->3にした値ね。

319:修正版
07/10/27 02:17:43
正解は0.746825と0.927040じゃないか

単純な積分値とほぼ一致する
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return 1/sqrt(1+x*x*x*x);}

int main(){
double x,s,d=0.001;

s=0;for(x=0;x<1;x+=d)s+=d*f(x);
printf("%f\n",s);

s=0;for(x=0;x<1;x+=d)s+=d*g(x);
printf("%f\n",s);
}

320:デフォルトの名無しさん
07/10/27 02:25:04
Excelで確認したところ俺もexp(-x*x)の単純な積分の値は
0.747508011
ぐらいになった。
では6で割るべきなのか。

321:デフォルトの名無しさん
07/10/27 02:28:04
6->3にした結果

result=0.780061
result=0.994229
そちら
0.746825
0.927040

そっちの勝ちだ.orz
ノシ

322:デフォルトの名無しさん
07/10/27 02:28:58
間違えた
3->6

323:修正版
07/10/27 02:31:52
URLリンク(doiob.net)
この式よく見てみろ
hを算出するときに既に2で割っている 分割数nに対して2nで割っているからややこしいだけ

324:デフォルトの名無しさん
07/10/27 02:34:34
そういうことか・・・ややこしい。

325:デフォルトの名無しさん
07/10/27 02:40:23
便乗質問なんだけど
h=0.1で与えられてるから式の通りに3で割るんじゃないの?
の辺りがイマイチ理解できんので教えてくれ…

326:修正版
07/10/27 02:46:21
>>325
問題どおりにやるとひとつひとつの積分区間は2hなので
6で割る部分と打ち消しあって3になる

幅hの積分を求めるのではなく x とx+hとx+2hの三点を2次関数で近似したいと言うことなんだろう
だから2h幅になっている

327:修正版
07/10/27 02:48:01
>>325
原理、近似の方法はここに書いてある
URLリンク(ja.wikipedia.org)

328:デフォルトの名無しさん
07/10/27 02:54:49
ありがとうございます

329:デフォルトの名無しさん
07/10/27 03:05:21
>>287
ふざけてないです。
おおマジです。

330:デフォルトの名無しさん
07/10/27 03:57:35
引用しますが、計算式を
#define F(a,b,h) (f(a)+f(b)+4*f((a+b)/2))*h/3
#define G(a,b,h) (g(a)+g(b)+4*g((a+b)/2))*h/3
というようにhを用いた式で表すなら 図のように
d=0.1
for(x=0;x<1;x+=d*2)
とすればいいのか

331:修正版
07/10/27 04:06:02
>>330
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return 1/sqrt(1+x*x*x*x);}
#define F(x,h) (f(x) + 4*f(x+h) + f(x+2*h)) * h/3
#define G(x,h) (g(x) + 4*g(x+h) + g(x+2*h)) * h/3

int main(){
double x,sum,h=0.1;
sum=0;
for(x=0;x<1;x+=2*h)sum+=F(x,h);
printf("%f\n",sum);
sum=0;
for(x=0;x<1;x+=2*h)sum+=G(x,h);
printf("%f\n",sum);}

332:デフォルトの名無しさん
07/10/27 04:12:10
何か邪魔臭くなっていましたね さんくすこ

333:デフォルトの名無しさん
07/10/27 08:27:42
まだやってたのか。俺は寝てしまって今起きた

#define F(x,h) (f(x) + 4*f(x+h) + f(x+2*h)) * h/3
#define G(x,h) (g(x) + 4*g(x+h) + g(x+2*h)) * h/3
じゃなくて
#define F(x,h) (f(x) + 4*f(x+h/2) + f(x+h)) * h/6
#define G(x,h) (g(x) + 4*g(x+h/2) + g(x+h)) * h/6
にするかもしくはh=0.05にしないといけない。

334:デフォルトの名無しさん
07/10/27 08:35:59
すまん。寝ぼけて間違えた。
>>331でOK。

335:デフォルトの名無しさん
07/10/27 08:37:39
やっと数値のずれが直ったので貼る
#include<stdio.h>
#include<math.h>

double quadInterpol( double (*fun)( double ), double begin, double h )
{
return ((*fun)( begin ) + 4.0*(*fun)( begin + h ) + (*fun)( begin + 2.0*h )) * h/3.0;
}

double integral( double (*fun)( double ), double begin, double end, double h )
{
double result = 0.0;
double pos = begin;
do
{
result += quadInterpol( (*fun), pos, h );
pos += 2.0*h;
} while( pos < end );
return result;
}

double f(double x) { return exp(-x*x); }
double g(double x) { return 1.0/sqrt(1 + x*x*x*x); }

int main(void)
{
const double diff = 0.1;
printf("result=%f\n",integral(f,0.0,1.0,diff));
printf("result=%f\n",integral(g,0.0,1.0,diff));
return 0;
}

336:デフォルトの名無しさん
07/10/27 08:55:22
ひゃっほう。

337:デフォルトの名無しさん
07/10/27 10:08:16
なんでシンプソン公式だけでこんなにスレ進むんだよw

338:デフォルトの名無しさん
07/10/27 10:59:46
[1] 授業単元: プログラミング
[2] 問題文:整数nをscanfで入力後"factorial"という関数を呼び出して、n!を
求めるプログラム(結果はmainにて表示)
(定義例:int factorial(int num))
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:定義例を使ってください
if,while,switch,forは習いました

お願いします

339:デフォルトの名無しさん
07/10/27 11:06:51
#include <stdio.h>
int factorial(int num)
{
int i, ret = 1;
for(i=2; i<=num; i++) ret *= i;
return ret;
}

int main(void)
{
int n;

printf("nを入力:");
scanf("%d", &n);

printf("%dの階乗は%d\n", n, factorial(n));

return 0;
}

340:デフォルトの名無しさん
07/10/27 11:17:19
>>339
全くわかんなかったのに数分で解いてるよ(>_<)
ありがとうございました。

341:デフォルトの名無しさん
07/10/27 11:27:20
て言うか既出ネタだろ
>>235-237で

342:デフォルトの名無しさん
07/10/27 11:29:23
階乗は頻出の基本問題だし、このスレで答えてる人なら数分とかじゃなくて、問題見た瞬間に即答だろ。

343:デフォルトの名無しさん
07/10/27 11:49:08
テンプレレベルだよな・・・と思ったらwikiにも書いてないな
今から編集してくる

344:デフォルトの名無しさん
07/10/27 11:51:23
>>342さすがですね
勉強不足ですいません

345:デフォルトの名無しさん
07/10/27 12:09:39
×勉強不足
○勉強する気がない

346:デフォルトの名無しさん
07/10/27 12:13:00
LU分解とか死ねwwwwww
京大電電でつけど、プログラムの課題がイミフwwwwwwww

347:デフォルトの名無しさん
07/10/27 12:15:15
それ、プログラム以前の問題だろ
Fランの大学ですらやる基本的な問題だし

348:デフォルトの名無しさん
07/10/27 13:38:28
【質問テンプレ】
[1] 授業単元: 画像工学
[2] 問題文(含コード&リンク):ある特定の画像を自動的に判別する
フォルダ内の画像を自動的に判別し,緑の画像があればhighlightのフォルダに
なければotherのフォルダに分別する 
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) よくわかりません
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) Visual C++ 2005
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 来週水曜日まで
[5] その他の制限: 特にありません
URLリンク(kansai2channeler.hp.infoseek.co.jp)

349:デフォルトの名無しさん
07/10/27 13:47:53
>>347
池沼でサーセンwwwww

350:デフォルトの名無しさん
07/10/27 14:08:07
348
こんなの面倒 授業でていたやつのほうが関数にくわしいだろ


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