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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 97代目
http://pc11.2ch.net/test/read.cgi/tech/1191937213/
2デフォルトの名無しさん:2007/10/23(火) 23:51:30
2
31:2007/10/23(火) 23:59:54
スレタイ間違えました…このスレッドは削除依頼出します
4デフォルトの名無しさん:2007/10/24(水) 00:00:09
次99って覚えとけば問題ない
スレ立てた人は特に覚えておいて、
次スレの時期になったら次は99であると声高に叫ぶんだ
51:2007/10/24(水) 00:05:06
>>4
分りました。
61=3:2007/10/24(水) 00:23:03
皆様、削除依頼は出しませんので、お使いください
>>3 の書き込みは馬鹿の戯言と思い無視してください
スレタイに関しては生暖かくわらってくださいませ m(_ _)m
7デフォルトの名無しさん:2007/10/24(水) 00:35:18
[1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5129.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月24日22:00まで
[5] その他の制限: なし
よろしくお願いします。
8デフォルトの名無しさん:2007/10/24(水) 00:59:40
前スレ>>980
エクセルとかワードで書いてzipでうpればよかったんじゃないか?
9デフォルトの名無しさん:2007/10/24(水) 01:02:24
>>8
それをC/C++の宿題と呼んでいいのか
10デフォルトの名無しさん:2007/10/24(水) 01:04:49
前スレ>>976に言えよwww
11前スレの907:2007/10/24(水) 01:09:04
>>前スレの919さん プログラムありがとうございました。
ですが実行してみたところ以下のようなエラーがでてしまいました。
1>Source1.obj : error LNK2019: 未解決の外部シンボル _dx が関数 _main で参照されました。
1>C:\Users\UCHIDA\Documents\Visual Studio 2005\Projects\a34\Debug\a34.exe : fatal error LNK1120: 外部参照 1 が未解決です
問題文は「オイラー法を用い、dy/dx=(3x-5y-4)/5 の常微分方程式を
      解きなさい。また、その結果をExcelファイルに出力して
      グラフを作りなさい。諸条件は以下のようにする。
      初期値 (x,y)=(0,0)
刻み幅 Δh=0.3
積分区間 [a,b]=[0,3] 」で
  #include<stdio.h>
long double df(long double x,long double y)
{ return (3*x-5*y-4)/5; }

int main(void)
{
long double x,y,delta;
FILE *outfile;
x = y = 0.0; delta = 0.3;
outfile = fopen("data.csv","w");
fprintf(outfile,"%Lf,%Lf\n",x,y);
do{
y += dx(x,y)*delta;
x += delta;
fprintf(outfile,"%Lf,%Lf\n",x,y);
}while(x<1.0);
fclose(outfile);
return 0;
} です。どなたかエラー解決お願いします。

12デフォルトの名無しさん:2007/10/24(水) 01:23:51
[1] 授業単元:オペレーティングシステム
[2] 問題文(含コード&リンク):
HTTPリクエストを受け付けると、URLに記載された名前のHTMLファイルをブラウザに返す
簡単なWebブラウザをC言語を用いて作成せよ。
このWebサーバはHTTPリクエストを受け付ける毎にforkシステムコールにより新しいプロセスを生成し、
そのプロセスがURLに指定されたHTMLファイルをファイルシステムから取り出して、ブラウザに返す。
基本的には、リクエストを送りリプライを返すことができればいい。
また、結果をブラウザで表示できる程度の実装で構わない。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc 3.4.4
 [3.3] 言語: C言語
[4] 期限: 2007年11月15日
[5] なし

最低限の実装でいいのでよろしくお願いします。
13デフォルトの名無しさん:2007/10/24(水) 01:25:57
>>11
×y += dx(x,y)*delta;
○y += df(x,y)*delta;

つかエラーメッセージ吐いてるんだからこのぐらい自分で気づこうよ。
>未解決の外部シンボル _dx が関数 _main で参照されました。
14デフォルトの名無しさん:2007/10/24(水) 01:31:13
[1] 授業単元: プログラミング技術W
[2] 問題文(含コード&リンク):

こんばんわ、夜も更けてしまいましたがよろしくお願いします。

文字列str1からstr2と一致する文字列を削除し、結果を表示するプログラムを作成せよ。

・文字列 st の pos 番目から始めて、len の長さの文字列を削除する
関数:void d _word(char st[], int pos. int len)を作成する。

・pos の場所と削除語の長さを d_wordに渡し、文字列削除を実行する
関数:void search_del(char str1[], char str2[])を作成する。

・main 関数で文字列1つと削除する文字列1つを入力させ、関数search_del
を用いて文字列から削除語を削除したものを出力する。

(メインのプログラムはヒントで出題されたのですが、うまく出来ませんでした。)

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5132.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: 25日(木)
[5] その他の制限:
15デフォルトの名無しさん:2007/10/24(水) 01:47:59
>>14
すいません、リンク先にあるプログラムコードの下から2行目の
ss}
のssはゴミです。
16デフォルトの名無しさん:2007/10/24(水) 02:08:32
>>14
その二つの関数があるなら、できてるも同然な気がするが…

int main()
{
char str1[256], str2[256];

printf("string? : ");
gets(str1);

printf("deleted word? : ");
gets(str2);

serach_del(str1, str2);
puts(str1);

return 0;
}
17デフォルトの名無しさん:2007/10/24(水) 02:16:11
頭は#include <stdio.h>のみで大丈夫でしょうか?
18デフォルトの名無しさん:2007/10/24(水) 02:33:13
どのソースに対していってんだ?
19デフォルトの名無しさん:2007/10/24(水) 02:40:08
>>16
いくつか修正して組み込んでみたけど、d _wordへ削除語の長さを渡すのがうまく行ってないのかエラーが出てうまくいかないです。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5133.txt
20デフォルトの名無しさん:2007/10/24(水) 04:24:56
>>19
> if(j=m2)
==
> printf("%d\n", st1);
%s
これで動くかはわからんが。
2111:2007/10/24(水) 05:16:42
>>13さん
すいません。ありがとうございました。
22デフォルトの名無しさん:2007/10/24(水) 10:38:52
[1] 授業単元:専門演習
[2] 問題文(含コード&リンク):
1、数を入力し、その数が奇数か、偶数かを判定しなさい。
(ただし、数字以外を入力した際には「数字を入力してください」とメッセージボックスをでるように。
2、ビデオテープ一個の単価は150円である、しかし、購入個数が100個を超えると、ビデオテープの単価は2割引になる。
購入個数を入力して支払い金額を計算し、表示するプログラムを作りなさい。
3、三角形の三編の長さa,b,cを入力して、正三角形、二等辺三角形、直角三角形、直角二等辺三角形、単なる三角形を調べるプログラムを作りなさい。
[3] 環境
 [3.1] OS: windows XP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) 不明
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) 一応C#なんですが・・・大丈夫ですかね??
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 今週中。
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
基礎レベル・・・。

どうかお願いいたします。
23デフォルトの名無しさん:2007/10/24(水) 10:58:59
>>22
1番はこんな感じになります

#include<stdio.h>

int main(void)
{
int n;
printf("数を入力してください>");
while(scanf("%d",&n)>0) printf("入力がおかしいです。もう一度入力してください。>");
printf("%sです。\n",(n&1)?"奇数":"偶数");
return 0;
}
24デフォルトの名無しさん:2007/10/24(水) 11:04:09
>>23
とりあえず次の入力を試しました
5
abon

何かがおかしいです。もう一度投稿して下さい。>
25デフォルトの名無しさん:2007/10/24(水) 11:14:23
>>24

scanfの戻り値のチェック間違えてた…
始めに「失敗した」書式のとこ返すんだった…。

#include<stdio.h>

int main(void)
{
int n;
printf("数を入力してください>");
while(scanf("%d",&n)>1) printf("入力がおかしいです。もう一度入力してください。>");
printf("%sです。\n",(n&1)?"奇数":"偶数");
return 0;
}
26デフォルトの名無しさん:2007/10/24(水) 11:17:55
>>25
テストしてから書き込むことを勧める
27デフォルトの名無しさん:2007/10/24(水) 11:23:43
次は無限ループを作る予感
28デフォルトの名無しさん:2007/10/24(水) 11:27:48
scanfの挙動はよう分からんからなあ……
とりあえず、while(scanf("%d",&x))...みたいな書き方だと条件満たさないと思うよ
%dは数字以外の文字をひたすら無視するから

というかC#知らないけど、
scanfとかでいいのか?
29デフォルトの名無しさん:2007/10/24(水) 11:34:02
>>22 の問題文によると「メッセージボックス」を出すらしい
30デフォルトの名無しさん:2007/10/24(水) 11:45:04
>>22,29
…メッセージボックスですか見落としてた…Win32APIですね…
そしたら全然ダメだわ

>>26
24 はDOSアプリとしてなら確認しました

もしかして他の二つもWinアプリとして作らないといけないのかでしょうか?
基礎レベルでWin32APIは使わないと思うのだが…
31デフォルトの名無しさん:2007/10/24(水) 11:46:38
>>30
だからC#なんだってば。
つーか、>25もおかしいぞ。
32デフォルトの名無しさん:2007/10/24(水) 11:48:36
メッセージボックス以前の問題だろ
33デフォルトの名無しさん:2007/10/24(水) 11:49:20
>>28
scanfの戻り値
代入された項目数を返す とある
新ANSI C言語辞典(ISBN4-7741-0432-9)より

この本一部妖しいが…多次元配列あたりの説明が…
3425=30:2007/10/24(水) 11:52:53
>>22,31
…あーー!。Cとして書いてしまった…
書き方違うや…全然…ごめん…

33、この発言取り消しで…
35デフォルトの名無しさん:2007/10/24(水) 12:00:11
>>34
いや、それはいいから>25が拙いってことは理解しておいた方がいいよ。
二重の罠に填まっているから。
36デフォルトの名無しさん:2007/10/24(水) 12:00:15
>[3.3] 言語: (C/C++/どちらでも可 のいずれか) 一応C#なんですが・・・大丈夫ですかね??
これおかしいだろ
37デフォルトの名無しさん:2007/10/24(水) 12:02:25
>>25
日曜あたりからこのスレに書き始めた人っぽいけど、まだ他人の宿題に答えるレベルじゃないんじゃない?
38デフォルトの名無しさん:2007/10/24(水) 12:02:51
うん、だから>22は無視して>23以降を構って遊んでる。
39デフォルトの名無しさん:2007/10/24(水) 12:04:44
>>22
3.をあくまでCで
#include <stdio.h>

int main(void)
{
double a, b, c, max, mid, min;

scanf("%lf%lf%lf", &a, &b, &c);

max = a > b ? c > a ? c : a : b > c ? b : c;
min = a < b ? c < a ? c : a : b < c ? b : c;
mid = a + b + c - max - min;

if(max>=min + mid) printf("三角形じゃない\n");
else if(max == min) printf("正三角形\n");
else if(max * max == min * min + mid * mid) {
if(min==mid) printf("直角二等辺三角形\n");
else printf("直角三角形\n");
}
else if(max==mid||mid==min) printf("二等辺三角形\n");
else printf("ただの三角形\n");

return 0;
}

40デフォルトの名無しさん:2007/10/24(水) 12:09:13
>>37
分りました…これ以降自粛します…。

>>22
もう書いてしまったので参考にしてください。
2.をCで書くと

#include<stdio.h>

int main(void)
{
long x;

printf("何本購入しますか?>");
while(scanf("%ld",&x)>1) printf("入力がおかしいです。もう一度入力してください。>");
x *=150;
if(x >= (150*100) ){
x = x * 8 / 10;
}
printf("%d円になります。\n",x);
return 0;
}
41デフォルトの名無しさん:2007/10/24(水) 12:13:53
>>40
テストしてから書き込むことを勧める

例えば入力に次のものを入れてみる
abon
100

#あと負数をどうするとか
42デフォルトの名無しさん:2007/10/24(水) 12:29:01
とりあえず、scanfの戻り値は使わない方がいい
というかscanfを使わない方がいい
43デフォルトの名無しさん:2007/10/24(水) 12:30:42
C#って、VBみたいに簡単にMessageBox出せたりするの?
44デフォルトの名無しさん:2007/10/24(水) 12:33:49
>>43
C# メッセージボックス でググったらすぐに出る
45デフォルトの名無しさん:2007/10/24(水) 12:34:41
出せる
46デフォルトの名無しさん:2007/10/24(水) 12:38:22
へえ、つまらん言語だな
47デフォルトの名無しさん:2007/10/24(水) 12:40:53
>>42
scanfが不評な理由が身に染みました…。
かといってgetsもバッファオーバーランの危険がありますが…
stdinからfgstsしてから変換が安全でしょうか?
48デフォルトの名無しさん:2007/10/24(水) 12:46:53
うざいよ
ここはお前の質問スレじゃないから、とっとと失せろ
49デフォルトの名無しさん:2007/10/24(水) 12:49:27
>>47
>35を無視するから……
初心者スレ辺りに移動するなら付き合うけど、また無視するならしらね。
50デフォルトの名無しさん:2007/10/24(水) 12:55:45
fgetsが定石なんだろうが、
俺はgetcharをこよなく愛してる
51デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 13:27:02
>>22
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5134.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5135.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5136.txt

Microsoft(R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft(R) .NET Framework version 1.1.4322
で作動を確認(ロダの関係で拡張子を変更)
53デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 14:10:30
scanfもちゃんと使えば、大分有用なんだけどね
57デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 15:22:13
>>14です。

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

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

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

それと昨晩、途中まで付き合ってくれた方ありがとうございます。
59デフォルトの名無しさん:2007/10/24(水) 15:54:52
>>58
typo だと思われる
自分で探せるよね
60デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 17:23:27
>>12
JAIST?
62デフォルトの名無しさん:2007/10/24(水) 18:00:19
>>12
( ´∀`)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5137.txt

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

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

---
There
is
s
textbook
---

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

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5138.txt


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: CYGWIN gccバージョン不明)
 [3.3] 言語: C言語
[4] 期限: 無理を承知で明日の午前中までにお願いします。
[5] その他の制限: テンプレートに従ってプログラムを付け加えて完成させてください。
64デフォルトの名無しさん:2007/10/24(水) 18:50:28
前スレで質問したものです
ただ単に不等号と&&→||のミスでした
お騒がせして申し訳ありません
65デフォルトの名無しさん:2007/10/24(水) 18:56:01
[1] 授業単元: C++
[2] 問題文(含コード&リンク):ファイルのリンク:
http://spot.pcc.edu/~cdjones/CS161/Assignments/gasprices.txt
リンクに含まれるようなファイルを読み取って、金額(ファイルの一番右の項目)を州(ファイルの真ん中の項目)別に集計し、
アルファベット順にそれぞれの州の平均額を表示する。その後、全ての州の合計金額の平均を表示する。
最後に、最も平均金額の高かった州と、最も平均金額の低かった州を表示する。
注意: 町の名前(ファイルの一番左の項目)は、“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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 20:46:35
>>65
>[5] その他の制限: 標準ライブラリのみ使用可能。Getlineを使わず、Cinのみで作る方がよりよい。また、ファンクションは使用不可。
ファンクション使用不可ってのを詳しく
68デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 21:07:57
scanfは失敗したの残すし、改行残すから鬱陶しくて仕方ない。
ってことで、fgets使うとか、
戻り値を変数に格納した後、残った文字を全部食ってから次の処理とかでいいんじゃね?
70デフォルトの名無しさん:2007/10/24(水) 21:11:41
>>65
アメリカの州の略号は
ttp://www.urban.ne.jp/home/ho5135/states.html
でいいの?
71デフォルトの名無しさん:2007/10/24(水) 21:29:00
>>68
だよね。
http://case.f7.ems.okayama-u.ac.jp/statedu/lispstat-book/node85.html
のページの式の中の|Σ|っていうのは対角成分をかけたものってことでいいのかな?

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

だけど。|Σ|に(対角成分の1つだけ)を代入して計算すると正解になるんです。
72デフォルトの名無しさん:2007/10/24(水) 21:30:37
ベクトルを作って、ベクトルを初期化して
$ gcc -lm a.c
# ./a.out
すると
0.000000 0.000000 2.080315

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

ttp://www.uploda.org/uporg1080506.c.html

コンパイラは
gcc3.3.6です。緊急の宿題です
73デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 21:33:46
>>72
8行目を見なおしてみては?
75デフォルトの名無しさん:2007/10/24(水) 21:36:09
>>74
ありがとうございます。逆ですね。
いつもRuby使ってて、授業でC使う事になったこういうミスが・・・涙
だったらコンパイル通さないでくれよ・・・
76デフォルトの名無しさん:2007/10/24(水) 21:40:51
>>73
これわひどいw
77デフォルトの名無しさん:2007/10/24(水) 21:47:01
そういえば、可変引数を使う宿題てあまり見ないな
78デフォルトの名無しさん:2007/10/24(水) 21:52:50
[1] 授業単元:文字列操作プログラム
[2] 問題文(含コード&リンク):
配列とポインタを使用し、文字列操作を行うプログラムを作成せよ。
@独自のstrlen関数mystrlen関数を自作する。
  文字列のポインタを受け取り、文字列の長さを返す関数を作成する。

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

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

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

79デフォルトの名無しさん:2007/10/24(水) 22:19:35
[1] 授業単元:
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5139.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月26日10:00まで
[5] その他の制限: 特にありません。
         どうぞよろしくお願いします。
80デフォルトの名無しさん:2007/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:2007/10/24(水) 22:27:39
問題の題名は「オペレータ オーバーロードを使ったプログラム作成」でした。
なのでオペレータオーバロードを使わなければいけないっぽい。。
82デフォルトの名無しさん:2007/10/24(水) 22:31:25
>>78
>B独自のatoi関数myitoa関数を自作する。

myatoi関数?それともmyitoa関数?
83デフォルトの名無しさん:2007/10/24(水) 22:34:31
84デフォルトの名無しさん:2007/10/24(水) 22:34:48
>>82
>数値を受け取り、指定された基数で文字列変換を行う関数を作成する。
itoaだな
もしくはltostrとでもいうか
85デフォルトの名無しさん:2007/10/24(水) 22:40:42
>>71
>|Σ|っていうのは対角成分をかけたものってことでいいのかな?
対角行列においてはその通り。

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

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

これ以上は数学板で聞いたほうがいいかも。
86デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 22:45:51
就職試験対策キターーーー
88デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 22:50:37
関数内関数なんて使うなって一瞬言おうとしたけど、
そうゆうことなら許すw
91デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 23:01:02
>>85
固有値ではないってことだね。
|Σ|は行列の値ってことか。

ってことは間違っている原因は|Σ|じゃないってことか。
9473:2007/10/24(水) 23:01:09
>>92
すみません、後出しで悪いですが、
printfと同様の書式付き関数は使用しないで作ってください。
とにかく考えてくださりありがとうございます。
9512:2007/10/24(水) 23:03:56
>>62
迅速な対応ありがとうございます。
参考にさせて頂きます。
96デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 23:12:31
>>97
それほんとにいきなり出されたのか?w
100デフォルトの名無しさん:2007/10/24(水) 23:15:18
printf同様って・・・
300行くらいいるんじゃね?
101デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 23:16:43
>>97
どう考えてもOpenGLとかDirectXとかが必要になりそう気がする……
どう考えてもcだけじゃコンピュータグラフィックは作れなさそうな気がする……
104デフォルトの名無しさん:2007/10/24(水) 23:18:49
>>99
今まではただ惑星とかロボット作ってそれをキーボード入力で動かしてたしてただけだった
だけど授業でシェーディングとかの話し始めて出た課題がこれ
参考にできるサイトなどなんでもいいので参考になるものを教えてください
105デフォルトの名無しさん:2007/10/24(水) 23:20:32
>>97
OpenGLいるな。。。じゃあここはスレ違いか
失礼しました
106デフォルトの名無しさん:2007/10/24(水) 23:20:48
>>104
wisdomsoft OpenGLでググれ
もしくは単位をあきらめる
107デフォルトの名無しさん:2007/10/24(水) 23:22:14
>>100
7行スレで7行printfがあったとか何とかって言ってた。
108デフォルトの名無しさん:2007/10/24(水) 23:22:26
>>104
てっきりプログラミングの授業の第一回目とかで出されたのかと思った>いきなり
109デフォルトの名無しさん:2007/10/24(水) 23:23:04
>>102
ありがとうございます。
そのように解答します。
110デフォルトの名無しさん:2007/10/24(水) 23:23:25
>>104
少なくともCでCGできる時点でこのスレの住人の3分の2くらいよりレベル上だろうな
111デフォルトの名無しさん:2007/10/24(水) 23:23:32
[1] 授業単元:Fizz Buzz問題
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5141.txt
上記のプログラムは、1製品にのみ対応したものであるが、複数製品に対応したものに
書き換えなさい。また製品数の目安は100製品程度とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 10月25日18時
[5] その他の制限:

よろしくお願いします
112デフォルトの名無しさん:2007/10/24(水) 23:26:27
>>63
だれか、お願いします。
現在作成中でしたら、おとなしく待ってます。
113デフォルトの名無しさん:2007/10/24(水) 23:28:43
>>106
ググって来るわ
OpenGLの課題片付けてくれるスレってある?
114デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 23:50:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5141.txt
上記のプログラムは、1製品にのみ対応したものであるが、複数製品に対応したものに
書き換えなさい。また製品数の目安は100製品程度とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 10月25日18時
[5] その他の制限:

よろしくお願いします

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

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

>>86はもういいの?

とりあえず1問答えてるし、先客が終わるまで待てて。
118デフォルトの名無しさん:2007/10/24(水) 23:50:55
>>110
CGがなんぼのもんじゃい!
119デフォルトの名無しさん:2007/10/24(水) 23:51:16
>>112
一応作ったけどそのテンプレおかしい気がする。
入力文字列の最後に空白付けないと止まらないかも。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5142.txt
120デフォルトの名無しさん:2007/10/24(水) 23:53:36
>>84
HP-UXかHI-UXな人だな?
121111:2007/10/24(水) 23:54:12
>>117
すいません。同一人物じゃないです。
>>86の人のテンプレコピペしたんで授業単元変えるの忘れました
122デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/24(水) 23:58:53
124デフォルトの名無しさん:2007/10/24(水) 23:58:56
>>119
テンプレの
/* コンマかピリオドならstr2の位置を1つ左 */

}

}

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

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

/* str2(単語)に終端文字を追加 */
でした。
真ん中の/* str1を1文字右に移動 */を追加お願いします。
125デフォルトの名無しさん:2007/10/24(水) 23:59:42
>>111

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

の部分がヘン

というかこのプログラム、何をするプログラムなのかが一見してわからない
126デフォルトの名無しさん:2007/10/25(木) 00:02:22
>>121
そなの?変なこと言ってすまん。

いまチャレンジしてるから、ちっと待って。
127デフォルトの名無しさん:2007/10/25(木) 00:04:37
>>124
i++;
を追加してくれ。忘れてた。
まあ、それでも入力の最後に空白付けないといけないのは
変わらない気がするんだが。テンプレがそれならいいのかな。
128デフォルトの名無しさん:2007/10/25(木) 00:05:46
>>125
日にちと商品の在庫不足数を数字のみで表示してるんじゃない?
商品のほうはランダムで数字作成してるみたいだし。
〜日 在庫不足〜個みたいな。でも、
>>複数製品に対応したものに
ってのがわからない。
129デフォルトの名無しさん:2007/10/25(木) 00:08:09
>>128

>>111
if(num<=300+0*10 && day>=inc_day) inc_day=day+3;
で、あきらかに 0*10 という意味不明な演算をしている件について
13093:2007/10/25(木) 00:08:40
>>85
正規分布を使いアルゴリズムに通して正解率を出すプログラムなんだけど
|Σ|を行列の値(対角成分の積)として計算すると全然正解率がでない。
どこがおかしいのかを見るために
試しに|Σ|に対角成分の和をいれてみて計算すると正解率98%だった。
ただ計算方法が違うのであっているかわからない。

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

どうなんでしょうかね。
131111:2007/10/25(木) 00:09:32
>>125
簡単に書くと、はじめ300個あった物が毎日80〜120ずつ減っていき、
在庫が300+0*10以下になったら、その3日後に、350個プラスされるって感じです。
ちなみに、300+0*10の0の部分は1でも2でもなんでもよいです
132デフォルトの名無しさん:2007/10/25(木) 00:15:22
>>125
別に変じゃなくないか?
numが一定値以下で、かつ現在発注中(到着待ち)じゃなけりゃ発注すんだろ?
inc_dayには発注日+3が入っているから、到着待ち中はday<inc_dayになる
133デフォルトの名無しさん:2007/10/25(木) 00:16:59
>>127
「i++;」を付ける位置は以下で良いですか?

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

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

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

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

/* str2(単語)に終端文字を追加 */
134デフォルトの名無しさん:2007/10/25(木) 00:17:32
プログラマは数学が苦手なんです。
プログラマはコーヒーとタバコが好きなんです。
135デフォルトの名無しさん:2007/10/25(木) 00:18:36
>>131
納得したその計算してたのね。
13686:2007/10/25(木) 00:19:18
>>86>>89>>91>>96>>98>>101>>>>115>>122
本当にありがとうございます
大変助かりげぶき

137デフォルトの名無しさん:2007/10/25(木) 00:20:34
>>134
英語も苦手だよ。後、眠気覚まし+暇つぶしにガムもスキだよ。
138デフォルトの名無しさん:2007/10/25(木) 00:30:39
>>133
i++はそこでいいよ。

テンプレどおりにやると入力の最後に空白入れないとバグる。
str1[i] != ' ' のとこを str1[i] != ' ' && str1[i] != '\0'
にすればたぶんOK.
13986:2007/10/25(木) 00:30:55
ミス……
本当に助かりました
ありがとうございます
14022:2007/10/25(木) 00:34:15
自分の問題に対してレスしてくれたり、といてくれた人達、
本当にありがとう!!
助かりました!!!!
141デフォルトの名無しさん:2007/10/25(木) 00:37:59
>>138
提出の際に聞いてみます。

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

手直しも直ぐにやっていただき助かりました。
142デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 01:15:03
>>63
テンプレがおかしい。指示通りにやるとセグメントエラーを起こす。
147デフォルトの名無しさん:2007/10/25(木) 01:17:10
148デフォルトの名無しさん:2007/10/25(木) 01:32:23
>>147
ありがとうございます。
残念ながら、今はプログラミングができる環境じゃないので、明日試して見ます。
149142:2007/10/25(木) 01:32:29
>>143>>144>>145
早速答えていただき、本当にありがとうございます!
助かりました!
150デフォルトの名無しさん:2007/10/25(木) 01:47:38
>>146
一応、>>127のi++;の付け加えでちゃんと動いてくれるので、OKです。
コンパイル通って、動作も「,.」削除+空白削除+分割表示できてるので。
151デフォルトの名無しさん:2007/10/25(木) 01:48:52
i++;じゃなくてstr1[i] != ' ' && str1[i] != '\0'の変更ですね。
152147:2007/10/25(木) 02:07:00
>>111
念のため、

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

の部分を

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

と書き換えると題意に沿った回答になる。
ただし、このとき、出力が最悪200000行になるので注意。
153デフォルトの名無しさん:2007/10/25(木) 06:10:11
>>82
課題にはそのとおり書いてあったんですが・・。
自分には問題の@〜Bの意味がさっぱりで・・・。

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

明日までと急なことで申し訳ありませんがお願いします。
157デフォルトの名無しさん:2007/10/25(木) 09:59:01
>>156
本当にそんな問題が……?
158デフォルトの名無しさん:2007/10/25(木) 10:04:20
>>156
すでにC++ですっていって提出しちゃえば?
問題が曖昧すぎ
159デフォルトの名無しさん:2007/10/25(木) 10:18:09
プログラムは配布されたプリントから打ち込みましたが、
問題文は文章でなく口頭で出題されました。全くこの通りです。

すでにC++になっているんでしょうか?
160156 ◆B5khfT.h4o :2007/10/25(木) 10:19:39
すいません、今更ですがトリップをつけるのを忘れていました
161デフォルトの名無しさん:2007/10/25(木) 10:56:23
>>159
拡張子cppでコンパイルしてみな
162デフォルトの名無しさん:2007/10/25(木) 11:03:08
class Helonを作ってコンストラクタで三辺の長さで初期化して
get()で返すとか、そういう風にすればどう?

あとprintfをcoutに無理矢理直すとそれらしく見える。別にprintfでも
C++の範囲内なのだが。
163デフォルトの名無しさん:2007/10/25(木) 11:31:04
164デフォルトの名無しさん:2007/10/25(木) 13:40:38
>>147
一つ目の製品はちゃんと発注するんですけど、二つ目以降は発注が行われないんですけど
どうすればいいんですか?
165147:2007/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;

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

ということでソースは下記に。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5148.txt

>>152も参考に。
166デフォルトの名無しさん:2007/10/25(木) 14:06:31
>>165
できました。本当にありがとうございました。
16765です:2007/10/25(木) 14:48:32
遅くなりました。すいません。
変数を州ごとに集計して平均を出す部分がよくわかりません。

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

>70
はい。州の略はその通りで大丈夫です。
168デフォルトの名無しさん:2007/10/25(木) 15:30:40
>>147さん
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5149.txt
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。
169デフォルトの名無しさん:2007/10/25(木) 16:52:28
>>65 >>167
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5150.txt

・しっかりとgetlineを使っている。
・line.substr(13, 2)とline.substr(23, 4)を使って読み込んでいるので、gasprices.txtの配置がずれたら限りなくアウト。
170デフォルトの名無しさん:2007/10/25(木) 16:54:31
>>14
まだ、待っています。出来る方お願いします。

アドバイスはいくつか貰ったのですが、関数から関数への受け渡しがうまく行きません。
171169:2007/10/25(木) 17:00:34
>>65 >>167 続き
・1行目にある #include <algorithm> は削除。
・出力は一応CSV のはず。
・アメリカの略号に誤入力があるかもしれない。
・アメリカの州って50だったっけ?
172コンパイルは出来たがあってないぞ:2007/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デフォルトの名無しさん:2007/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;}
}
}
}___________________________________________________________________________________________________________________________
174173:2007/10/25(木) 17:24:12
結果表示はヒストグラムというか
〜は〜回という形式にします

volとかそのへんの扱いかたがよく分からずに参っております
よろしくお願いいたします。
175156 ◆B5khfT.h4o :2007/10/25(木) 17:26:49
レスしてくれた方やプログラムを作ってくれた>>163さん、ありがとうございました。
とりあえず課題を出したうえで、C++にするのはどういうことか詳しく聞いてみます。
17665です:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 17:58:47
>>170
アドバイスって言うか>>20で回答もらってるじゃない。
・if(j=m2)をif(j==m2)
・printf("%d\n", st1);をprintf("%s\n", st1);
この2点の変更だけで動くはず。変更の仕方が間違ってるんだと思う。
179デフォルトの名無しさん:2007/10/25(木) 18:06:46
>>177
whileの条件とループの中のifで2回判定するのはムダ
180デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 18:34:53
>>178
この様にコード書いたけどコンパイラが通らないです。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5151.txt
183デフォルトの名無しさん:2007/10/25(木) 18:38:11
>>182
見ずにコメント。1.改行コード 2.全角スペース
そろそろコンパイラが吐いたエラー貼ったらどうだ?
184デフォルトの名無しさん:2007/10/25(木) 18:42:43
>>182
#include<string.h>を追加。もしかしてstr〜の関数習ってない?
185デフォルトの名無しさん:2007/10/25(木) 18:45:55
>>177
ありがとうございます

実行してみたところ、
0以外の数字が何度やっても0回になってしまいますが
これはどうすればよろしいのでしょうか?
186デフォルトの名無しさん:2007/10/25(木) 18:50:01
>>183
エラーが無いので下に張りました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5152.txt

>>184
追加しても効果なかったです。関数str〜習ってます。
187デフォルトの名無しさん:2007/10/25(木) 18:52:46
>>186
「エラーが無いので」×
「エラーが長いので」○

188デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 18:57:41
>>185
valにちゃんと値が入ってないのかな。
val=(double)rand()/(RAND_MAX+1)*a;

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

>>186
インデントを全角スペースでやってない?
190デフォルトの名無しさん:2007/10/25(木) 19:04:06
>>189
盲点、スペースを全角でやっていました。

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

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

次からはスペースの全角/半角に気をつけます。
191デフォルトの名無しさん:2007/10/25(木) 19:09:39
>>189
ありがとうございます!ちゃんとできました
助かりました
192デフォルトの名無しさん :2007/10/25(木) 19:57:16
193169:2007/10/25(木) 20:16:30
>>176
できます。あなたらならできます。
194デフォルトの名無しさん:2007/10/25(木) 20:39:32
[1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク):
http://case.f7.ems.okayama-u.ac.jp/statedu/lispstat-book/node85.html
にならって以下のデータ平均分散を用いて確率を出せ。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] その他の制限: なし
19578&153:2007/10/25(木) 20:56:27
すいません、問題Bに間違い&追加がありました。
実装仕様もあって、書いてたことが違ってました。
以下が訂正問題です。

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

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

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

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

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

>>196に続く
19678&153:2007/10/25(木) 20:56:58
>>195の続き

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

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

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

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

と、なっております。
すいませんが回答の方をよろしくお願いします
197デフォルトの名無しさん:2007/10/25(木) 21:03:26
198デフォルトの名無しさん:2007/10/25(木) 21:28:40
>>195 >>196
いまさら?これから変更するの面倒だし
期限:2007年10月26日朝5:00
ってことは残り7時間、無理。
がんばれノシ
199デフォルトの名無しさん:2007/10/25(木) 21:31:16
標準ライブラリ使っちゃダメって書いてないんだからそのまま引数渡せばいいだろ。
200デフォルトの名無しさん:2007/10/25(木) 21:31:22
>>123
ありがとうございます!
感謝します!
201デフォルトの名無しさん:2007/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] その他の制限:なし
20278&153:2007/10/25(木) 21:45:03
>>198
昨日書き込んで、今日間違い気づいたんですよorz
できればお願いします。自分にとっては、これってホントに初級編!?って
いうぐらい難しい
203デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 22:03:47
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):stack.cpp 中のpushとpop関数を完成せよ。
stack.cpp:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5154.txt

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

どうかよろしくお願いします。
205デフォルトの名無しさん:2007/10/25(木) 22:10:08
>>203
ありがとうございます。
こちらを提出してみます。
206デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 22:41:25
>>207おkです。感謝です。
本当にありがとうございます。
助かりました。
20957:2007/10/25(木) 22:54:44
>>60
レスありがとうございます。
今日の朝、main関数を作って動かしてみたのですが、
おかしいです。
例えば、連結リストのaの値を10、11、12とすると、
11、10、56787
と、一番最後が変な数値になってしまいます。
並び替える前に表示すると、10、11、12となってちゃんと動作するので、
表示する関数は間違ってないと思います。
一応補足として、自分が扱っている連結リストは一番最初に、aに値が
含まれていない要素があり、その後からaに値が含まれる要素が並びます。
210デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 23:11:09
>>147さん
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5149.txt
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。
212デフォルトの名無しさん:2007/10/25(木) 23:19:38
>>168さん、この生産管理プログラムの期限はいつまででしょうか。
21378&153:2007/10/25(木) 23:21:11
>>83>>210
遅い時間に本当にありがとうございます。
お手数おかけ致しました。(TT)
214デフォルトの名無しさん:2007/10/25(木) 23:21:23
>>209
糞リストの仕様を書かなかったほうが悪い。
215デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 23:34:03
>>215
itoaは >>83 にあるよ。ltoaはitoaとほとんど変わらん。
ftoaも小数点以下あるだけであんま変わらないな。
21857:2007/10/25(木) 23:37:20
>>214
申し訳ないです。

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

よろしくお願いします。
219デフォルトの名無しさん:2007/10/25(木) 23:42:13
木曜日の15時までです。
220デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 23:49:08
再帰は?
222215:2007/10/26(金) 00:03:01
>>216
さすがにsprintfは使うわけにはいかないかと・・・w

>>217
ありがとうございます。
>>83を参考にしてやってみようと思います。
22357:2007/10/26(金) 00:03:47
>>219
減点はするけど、出さないよりは、ましだから今週の課題と一緒に来週に
出しなさいと言われました。

>>220
ありがとうございます。
リストの仕様は>>218に書いた通りですが、
問題自体は>>57に書いた通り、再帰を使わないと…
224デフォルトの名無しさん:2007/10/26(金) 00:08:57
>>220
re_internalの中でre呼び出してる
22557:2007/10/26(金) 00:23:54
>>224
再帰って自分自身の関数を呼び出すんじゃないですっけ?
これだと、他の関数を呼び出してるだけな気がするのですが…
一つの関数で作ることって出来ないのですかね?
226デフォルトの名無しさん:2007/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
22757:2007/10/26(金) 00:50:35
>>226
ありがとうございます。
228デフォルトの名無しさん:2007/10/26(金) 00:58:09
リストの先頭にデータを入れないことによってどんな利点があるの?
229168:2007/10/26(金) 00:58:45
>>147・212
28日までにお願いしたいんですけど・・・
よろしくお願いします。
230デフォルトの名無しさん:2007/10/26(金) 07:29:15
1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5156.txt
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2007年10月26日
[5] その他の制限: ライブラリ関数は使ってもおkです

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

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5155.txtのよに書いたのですが
セグメントエラーが出てしまいます。
ダメなところとかがあったら直して教えてください。
231デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 08:16:51
>>231さん
>>231さん
朝早くだったのにレスありがとうございます。

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

ホントにお世話様でした
234デフォルトの名無しさん:2007/10/26(金) 08:46:17
中間試験って紙にコード書くの?
235課題お願いします:2007/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] その他の制限: 授業で配列とポインタは習いました。この問題は「関数」というセクションの問題です。大学の授業なのであまり難しくなり過ぎないようにお願いします。
236235:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 09:11:28
一瞬で片付くというのもある意味爽快だ
239デフォルトの名無しさん:2007/10/26(金) 09:20:03
>>234
中間試験は筆記と実技があって
実技は端末からサーバーにアクセスして書きます。

実技は今のままじゃ、受かる気がしません…
ファイル処理、ポインタがかなりヤバイです
240デフォルトの名無しさん:2007/10/26(金) 09:23:34
関数名functorialだw
階乗ならfactorialだし、関数ならfunctionだからfuncだけみて間違っちまった。
241デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 11:01:22
なんで金額がdoubleなんだよ・・・
243デフォルトの名無しさん:2007/10/26(金) 11:05:00
>>234
別人だけど、フロッピーでソース提出とか、メールで添付とかもあるけど、一番多いのは紙。

正直、このご時勢で紙でやるのは馬鹿だと思う。
244デフォルトの名無しさん:2007/10/26(金) 11:14:18
>>242
小数点出てもいいらしいです。要はaveを使って計算したいのだと思います。
245デフォルトの名無しさん:2007/10/26(金) 11:18:40
俺の高校は紙にVBA書かされたぜ
246デフォルトの名無しさん:2007/10/26(金) 11:19:06
>>243
国がやってる情報処理系の資格試験は、全部紙だぞ?
247デフォルトの名無しさん:2007/10/26(金) 11:24:49
先日はありがとうござました。

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

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5158.txt

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

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

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

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限:29日(月)
248デフォルトの名無しさん:2007/10/26(金) 11:34:38
>>239
うちも紙〜

さすがにプログラムを卓上で作りコード全部書けは無いけど、
5〜6行くらいの穴埋めでプログラムを完成させよとか。
249デフォルトの名無しさん:2007/10/26(金) 11:59:09
流石に資格試験でソース全部書けは無いだろ。
あったら死ねるけどw
普段書かない記号とか書かなきゃならんし、
インデント一つ追加しようと思ったらその間書き直しだし、
書いてる事がタイプ以上に考えてる事に追いつかないし、
変数名チェックも全部自分でしなけりゃならんから面倒だし。
250デフォルトの名無しさん:2007/10/26(金) 12:01:52
>>239
うちは進んでるよ。
テストプログラムを当日教室で下してきて実行すると、P検みたいなプログラムが走って画面左半分が問題書いてあって、右半分の上がコマンドプロンプト?で下がテキストパッドになってる。

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

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

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

ファイヤーウォールに引っ掛かって提出できないとか、提出時に回線が込んでて提出できないとかで、良悪あるけどね。
251デフォルトの名無しさん:2007/10/26(金) 13:04:09
>>250
なんだかすごい環境だな。
252デフォルトの名無しさん:2007/10/26(金) 13:09:33
>>239
高専電気科の情報の授業では
ごく普通にPCでやってるぞ
しかも、授業で書いたコードを参照してもいいというオマケ付きで。

授業理解度を確かめるのならこういう方式でもよさげな気がする。
253デフォルトの名無しさん:2007/10/26(金) 13:12:10
>>241
これは……一見するととても簡単そうなプログラムに見える……
そう見えるのはオレだけか……?
254デフォルトの名無しさん:2007/10/26(金) 14:03:27
strcpyの使い方で質問があるんですが、
strcpy(a+(変数),b+(変数));
これはどういう意味でしょうか?+が特に分からないんですが…
a、bは配列です
255デフォルトの名無しさん:2007/10/26(金) 14:06:41
>>250
せっかくプログラミングやってんだから、
講師の側でもそんな感じでテスト用プログラム作って欲しいもんだな

>>252
そういう方式もいいよなあ
実際のプログラミングだとソース参照し放題、ネットで調べ放題なわけで
それでもできない人がいるんだから、十分実力測れるだろう
プログラミングは暗記じゃない
256デフォルトの名無しさん:2007/10/26(金) 14:38:19
>>254
その配列a, bの +変数分以降のみの文字列をコピーするという意味。
変数が 2 だったらaの先頭 2 文字は変化しない。
257デフォルトの名無しさん:2007/10/26(金) 15:04:04
>>256
分かり易い解説ありがとうございました
258235:2007/10/26(金) 15:23:52
>>237
ありがとうございました!!
259デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 17:08:00
>>253
わかる人は簡単だよ
でも、習ったばっかりなんだろ
最初はみんなわからないもんだよ
261デフォルトの名無しさん:2007/10/26(金) 17:32:12
一分で書けるけど書かない
262デフォルトの名無しさん:2007/10/26(金) 18:04:04
なぜ書かない?
263デフォルトの名無しさん:2007/10/26(金) 18:17:14
単純に3つの引数とって平均を求める関数て言えばいいのに、なんで割り勘とか余計な設定つけてんだよ。
一人一人の代金がわかってるなら、割り勘になんてしないだろ。
264デフォルトの名無しさん:2007/10/26(金) 18:43:15
>>263
「相乗平均じゃなくて相加平均だよ^^ お前ら間違えんなよ^^」て言いたかったんだよ
気の回る良い先生じゃないか
265デフォルトの名無しさん:2007/10/26(金) 19:40:50
宿題マダァ?(・∀・ )っ/凵⌒☆チンチン
266デフォルトの名無しさん:2007/10/26(金) 22:09:36
ひつまぶしキボンヌ
267デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 22:12:55
全ディレクトリのファイルを調べてサイズが一致するファイルをプルパスで出力せよ
269デフォルトの名無しさん:2007/10/26(金) 22:19:18
270デフォルトの名無しさん:2007/10/26(金) 22:22:06
>>265
自分で要求するほど、宿題を回答してやりたいのか。

この掲示板の鏡だな、解けない問題は無いってか?
271デフォルトの名無しさん:2007/10/26(金) 22:25:20
SRT除算は簡単ではないな
272デフォルトの名無しさん:2007/10/26(金) 22:43:03

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

お願いします
273デフォルトの名無しさん:2007/10/26(金) 22:46:03
>>269
これはむずい
もう少し前のページから見ないと単語がわからなすぎる
274デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 22:57:47
>>274
なぜコードで示さないんだ
276デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 23:02:42
>>276
擬似コードだけなら単位はやれないな
278デフォルトの名無しさん:2007/10/26(金) 23:03:56
>>275
プログラム自体は計算と結果の出力だけの簡単なものだからチャレンジしてみなってことじゃない?

計算内容自体は>>274が解説してくれてるし。
もしくは作成中か。
279デフォルトの名無しさん:2007/10/26(金) 23:08:01
>>259
ありがとうございます。ポインタ変数が問題だったんですね。

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

なるほど納得しました。
280デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 23:10:31
訂正
double g(double x){return 1/sqrt(1+x*x*x*x);}
282デフォルトの名無しさん:2007/10/26(金) 23:12:03
値があっているか確認したいが数値計算ソフトだれか持っている?
283デフォルトの名無しさん:2007/10/26(金) 23:12:09
何にせよ動作するリストを出すのがこのスレってもん
284デフォルトの名無しさん:2007/10/26(金) 23:12:15
>>274 >>276
で組み込む計算式作ってくれてるから、もう課題出来てるも同然な気がする。

だって、その式を表示するだけで完成でしょ。
285デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 00:07:31
ふざけてんの
288デフォルトの名無しさん:2007/10/27(土) 00:13:39
>>280
副作用乙
289デフォルトの名無しさん:2007/10/27(土) 00:18:05
なんで6で割っているんだぜ?
290デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 00:47:03
Integral(f,a,b,d)って出来るの? 関数わたし
292デフォルトの名無しさん:2007/10/27(土) 00:55:29
スマソ全然見てなかったわ
293272:2007/10/27(土) 01:03:57
ありがとうございました
解説で分かってきたので色々と試してみます
294291:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 01:26:36
>>294
出題者じゃないんだが。

typedef double (*func)(double);
これってなにやってるの?
29757:2007/10/27(土) 01:29:04
>>228
自分も詳しい理由は分かりませんが、この再帰の問題以前にも、リストで
色々な動作をする関数を作ったので、その関数を作る時、関数に引数を
渡したりするのに、リストの先頭にデータを入れない方が都合が
良いんじゃないですかね?
リストは先頭にデータを入れないとばかり思ってたので、よく分かりませんが。
298291:2007/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デフォルトの名無しさん:2007/10/27(土) 01:30:41
>>290
すいませんd=0.001となってるのが良く分からないんですが
300291:2007/10/27(土) 01:31:39
>>299 細かくした方が値が正確になるって事だけだ d=0.1でいい
301コッチェビン:2007/10/27(土) 01:32:28
なんかすごいシコシコしたい・・・
302デフォルトの名無しさん:2007/10/27(土) 01:33:37
>>300
どうもです
303デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 01:35:47
ちなみに追い詰めてるわけじゃないです。数値あわせがしたいだけです。
計算結果に自信がないので。
305291:2007/10/27(土) 01:36:19
>>303
呼び出すのはfでいいんだよ 引数でfとかgを指定するから
306291:2007/10/27(土) 01:37:56
>>304
単純な定積分の値と比較したから正解だろう >>290で求めている
あと>>290はgが間違えていて
正しくは
double g(double x){return 1/sqrt(1+x*x*x*x);}
307デフォルトの名無しさん:2007/10/27(土) 01:38:07
>そうしたらIntegral(func funcName,...)
スマソ。そうなってた。
308デフォルトの名無しさん:2007/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という関数を取っているのは確かなんだけど
関数内で一回も使ってない。
309291:2007/10/27(土) 01:41:38
>>308
Fがマクロだから使っている
あと使っていないのはaとbだ 勝手に(0,1)だとおもって書いてしまった
310デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 01:43:31
>>309
なるほどね。理解できました。
exp(-x*x)の関数名をfにしないでくれたらよかった。
312デフォルトの名無しさん:2007/10/27(土) 01:53:03
>>294
粘着すまん。
6じゃなくて3で割らないといけなくないか?
h=0.1で指定されているし。
313修正版:2007/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修正版:2007/10/27(土) 02:03:09
>>312
そもそも2hの幅で積分しろってことか それならそうだな
315デフォルトの名無しさん:2007/10/27(土) 02:04:51
うがあぁ数値が合わない。
何が違うんだ。。。。。
316修正版:2007/10/27(土) 02:07:29
>>312
でも最小の区間を与えた方が標準的だと思う
Integral(f, 0, 1, 0.2))と呼び出せば正解と一致する値が出るはずだ
317デフォルトの名無しさん:2007/10/27(土) 02:11:03
>>316
考えてみる。
正解はちなみにいくつなんだ
俺は
result=1.560123
result=1.988458

そっちは
1.493648
1.854075

他の検証方法ってある?Excelあたりでできるもんかね?
318デフォルトの名無しさん:2007/10/27(土) 02:12:30
あ。6->3にした値ね。
319修正版:2007/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デフォルトの名無しさん:2007/10/27(土) 02:25:04
Excelで確認したところ俺もexp(-x*x)の単純な積分の値は
0.747508011
ぐらいになった。
では6で割るべきなのか。
321デフォルトの名無しさん:2007/10/27(土) 02:28:04
6->3にした結果

result=0.780061
result=0.994229
そちら
0.746825
0.927040

そっちの勝ちだ.orz
ノシ
322デフォルトの名無しさん:2007/10/27(土) 02:28:58
間違えた
3->6
323修正版:2007/10/27(土) 02:31:52
http://doiob.net/doiob/uploader/src/up11903.jpg
この式よく見てみろ
hを算出するときに既に2で割っている 分割数nに対して2nで割っているからややこしいだけ
324デフォルトの名無しさん:2007/10/27(土) 02:34:34
そういうことか・・・ややこしい。
325デフォルトの名無しさん:2007/10/27(土) 02:40:23
便乗質問なんだけど
h=0.1で与えられてるから式の通りに3で割るんじゃないの?
の辺りがイマイチ理解できんので教えてくれ…
326修正版:2007/10/27(土) 02:46:21
>>325
問題どおりにやるとひとつひとつの積分区間は2hなので
6で割る部分と打ち消しあって3になる

幅hの積分を求めるのではなく x とx+hとx+2hの三点を2次関数で近似したいと言うことなんだろう
だから2h幅になっている
327修正版:2007/10/27(土) 02:48:01
328デフォルトの名無しさん:2007/10/27(土) 02:54:49
ありがとうございます
329デフォルトの名無しさん:2007/10/27(土) 03:05:21
>>287
ふざけてないです。
おおマジです。
330デフォルトの名無しさん:2007/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修正版:2007/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デフォルトの名無しさん:2007/10/27(土) 04:12:10
何か邪魔臭くなっていましたね さんくすこ
333デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 08:35:59
すまん。寝ぼけて間違えた。
>>331でOK。
335デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 08:55:22
ひゃっほう。
337デフォルトの名無しさん:2007/10/27(土) 10:08:16
なんでシンプソン公式だけでこんなにスレ進むんだよw
338デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 11:17:19
>>339
全くわかんなかったのに数分で解いてるよ(>_<)
ありがとうございました。
341デフォルトの名無しさん:2007/10/27(土) 11:27:20
て言うか既出ネタだろ
>>235-237
342デフォルトの名無しさん:2007/10/27(土) 11:29:23
階乗は頻出の基本問題だし、このスレで答えてる人なら数分とかじゃなくて、問題見た瞬間に即答だろ。
343デフォルトの名無しさん:2007/10/27(土) 11:49:08
テンプレレベルだよな・・・と思ったらwikiにも書いてないな
今から編集してくる
344デフォルトの名無しさん:2007/10/27(土) 11:51:23
>>342さすがですね
勉強不足ですいません
345デフォルトの名無しさん:2007/10/27(土) 12:09:39
×勉強不足
○勉強する気がない
346デフォルトの名無しさん:2007/10/27(土) 12:13:00
LU分解とか死ねwwwwww
京大電電でつけど、プログラムの課題がイミフwwwwwwww
347デフォルトの名無しさん:2007/10/27(土) 12:15:15
それ、プログラム以前の問題だろ
Fランの大学ですらやる基本的な問題だし
348デフォルトの名無しさん:2007/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] その他の制限: 特にありません
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5159.zip
349デフォルトの名無しさん:2007/10/27(土) 13:47:53
>>347
池沼でサーセンwwwww
350デフォルトの名無しさん:2007/10/27(土) 14:08:07
348
こんなの面倒 授業でていたやつのほうが関数にくわしいだろ
351デフォルトの名無しさん:2007/10/27(土) 15:52:58
[1] 授業単元: C言語
[2] 問題文:2×2の行列A,Bの積(cのij成分=Σaのij成分bのij成分)を表示する

a[i][j]=[0 4] b[i][j]=[5 0]
[-5 -1] [0 -5]
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:for文を用いてください
352デフォルトの名無しさん:2007/10/27(土) 16:02:13
#include <stdio.h>

main(){
int i,j,x=0,a[2][2]={0,4,-5,-1},b[2][2]={5,0,0,-5};
for(i=0;i<2;i++)for(j=0;j<2;j++)x+=a[i][j]*b[j][i];
printf("%d\n",x);
}
353デフォルトの名無しさん:2007/10/27(土) 16:12:53
2次元配列のサイズを調べる方法ありますか?
354デフォルトの名無しさん:2007/10/27(土) 16:16:09
#include <stdio.h>

main(){
int x[70][6],m,n;
m=sizeof(x)/sizeof(x[0]);
n=sizeof(x[0])/sizeof(x[0][0]);
printf("%d %d",m,n);
}
355デフォルトの名無しさん:2007/10/27(土) 16:27:45
#include <stdio.h>

main(){
int i,j,k;
int a[2][2]={0,4,-5,-1},b[2][2]={5,0,0,-5},c[2][2];
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
c[i][j]=a[i][k]*b[k][j];

for(i=0;i<2;i++){
for(j=0;j<2;j++)printf("%d ",c[i][j]);
printf("\n");}
}
356デフォルトの名無しさん:2007/10/27(土) 16:34:11
[1] 授業単元: C言語
[2] 問題文:キーボードから5点の座標を二次元配列に入力し、
原点から最も離れた点の座標を出力するプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:多次元配列まで習ってます
357147:2007/10/27(土) 16:35:47
機械に仕事を割り当てるところまでやった

すなわち、問題文の
>5種類の性能の異なる加工機械が各1台ある工場で、100種類の製品を作っている。
>各製品がその日に受注した場合、LT(完成までにかかる日数)を表示するスケジューリングプログラムを作成せよ。
>また、ランダムに発注があり、発注があった場合にのみ実際に機械は使用される。
>すなわち、発注が一度もなければ100日間ずっと同じLTが表示され、発注があれば、
>その日以降は機械が使用されているので、LTが長くなる可能性があるということ。
ところまで。

// 生産計画・生産管理
// 97th-res: >>168 (>>111, >>211, >>229)
// 2007/10/27

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5160.txt
358デフォルトの名無しさん:2007/10/27(土) 16:46:34
>>356
#include<stdio.h>
#include<math.h>

int main(void)
{
double maximum_distance=0.0, distance;
double x, y, point[5][2], (*maximum_point)[2];
int i;

for(i=0;i<5;i++)
{
printf("Input x :");
scanf("%lf", &x);
printf("Input y :");
scanf("%lf", &y);
point[i][0]=x;
point[i][1]=y;

distance=sqrt(x*x+y*y);
if(distance>maximum_distance || !i)
{
maximum_distance=distance;
maximum_point=&point[i];
}
}
printf("\n( %lf , %lf )\n", (*maximum_point)[0], (*maximum_point)[1]);

return 0;
}
359入力うまくいかない:2007/10/27(土) 16:48:36
#include <stdio.h>

main(){
int x[6],y[6],i,ban;
double max=0,d;
for(i=1;i<6;i++){
printf("\n%d 番目のx座標を入力して下さい ",i);
x[i]=getchar();
printf("\n%d 番目のy座標を入力して下さい ",i);
y[i]=getchar();}

for(i=1;i<6;i++){
d=x[i]*x[i]+y[i]*y[i];
if(d>max){max=d;ban=i;}}
printf("原点からもっとも遠い座標は(%d,%d)です ",x[ban],y[ban]);
}
360scanfにしたら良くなったよ:2007/10/27(土) 16:54:18
#include <stdio.h>
main(){
int x[6],y[6],i,ban;
double max=0,d;
for(i=1;i<6;i++){
printf("\n%d 番目のx座標を入力して下さい ",i);
scanf("%d",&x[i]);
printf("\n%d 番目のy座標を入力して下さい ",i);
scanf("%d",&y[i]);}

for(i=1;i<6;i++){
d=x[i]*x[i]+y[i]*y[i];
if(d>max){max=d;ban=i;}}
printf("\n原点からもっとも遠い座標は(%d,%d)です ",x[ban],y[ban]);}
361356:2007/10/27(土) 16:54:35
>>358さん
>>359さん
早い回答ありがとうございました!
362デフォルトの名無しさん:2007/10/27(土) 17:00:45
// >>356 ソート付き
#include <iostream>
#include <math.h>
#define NUM 5
using namespace std;

int main (void){
double p[NUM][2], absolute[NUM];

for (int i=0; i<NUM; i++){
cout << i+1 << "番目の点の" << endl;
cout << "\tx座標を入力してください : "; cin >> p[i][0];
cout << "\ty座標を入力してください : "; cin >> p[i][1];
}

for (int i=0; i<NUM; i++) absolute[i] = sqrt(p[i][0] * p[i][0] + p[i][1] * p[i][1]);

double tempabs, tempx, tempy;
for (int i=0; i<NUM-1; i++) {
for (int j=NUM-1; j>i; j--) {
if (absolute[j-1] > absolute[j]) {
tempabs = absolute[j]; tempx = p[j][0]; tempy = p[j][1];
absolute[j] = absolute[j-1]; p[j][0] = p[j-1][0]; p[j][1] = p[j-1][1];
absolute[j-1] = tempabs; p[j-1][0] = tempx;
p[j-1][1] = tempy;
}}}

cout << "(" << p[NUM-1][0] << ", " << p[NUM-1][1] << ")" << endl;
return (0);
}
363デフォルトの名無しさん:2007/10/27(土) 17:05:37
>>356
既に何人も回答してるけど参考までに
#include <stdio.h>
int main(int argc, char* argv[])
{
int i, p[5][2], r2[5], r2max = 0;

printf("input points\n");
for(i=0;i<5;i++) {
printf("point[%d] : ", i);
scanf("%d %d", p[i], p[i]+1);
r2[i] = p[i][0] * p[i][0] + p[i][1] * p[i][1];
if(r2max < r2[i]) {
r2max = r2[i];
}
}
printf("maximum range points\n");
for(i=0;i<5;i++)
if(r2[i] == r2max)
printf("point[%d] : %d %d\n", i, p[i][0], p[i][1]);
return 0;
}
364デフォルトの名無しさん:2007/10/27(土) 17:29:58
すいません!このJAVAコードをCに直せって言われました!
直してください!!!!
public static int[] invoke(int[] input){
//WARNING: This will destroy the contents of the input array
//This function assumes input.length=2^n, n>1
int[] output = new int[input.length];

for(int length = input.length >> 1; ; length >>= 1){
//length=2^n, WITH DECREASING n
for(int i = 0; i < length; i++) {
int sum = input[i*2]+input[i*2+1];
int difference = input[i*2]-input[i*2+1];
output[i] = sum;
output[length+i] = difference;
}
if (length == 1)
return output;

//Swap arrays to do next iteration
System.arraycopy(output, 0, input, 0, length<<1);
}
}
365デフォルトの名無しさん:2007/10/27(土) 18:03:32
>>364
>>1読んでから書き直し
366デフォルトの名無しさん:2007/10/27(土) 18:07:30
>>365
つまりテンプレ通りに書けってこった
とりあえずこのコードが何をするかぐらいは書いたほうがいい
367デフォルトの名無しさん:2007/10/27(土) 18:20:27
>>357
根本的に考え方が間違ってるよ。
これは生産計画立案の問題。
368デフォルトの名無しさん:2007/10/27(土) 18:20:53
(int[] input)これをcで引数一個で実現するのは無理では?
最後尾にNULL入れた配列が欲しくなったり、
サイズを持った構造体へのポインタにしたくなったり、
int *input, int sizeみたいに素直になりたかったり。
369デフォルトの名無しさん:2007/10/27(土) 18:37:29
突っ込むところはinput.lengthこっちだろ
370aho:2007/10/27(土) 19:02:35
>>364
今書いてて思ったけど何がしたいのかいまいち分からない。
sumとdifferenceを計算した後何でoutputを上書きするの?
どんどん足し込む仕様じゃないの?
とりあえず、今ので書いてみるよーん
371aho:2007/10/27(土) 19:08:59
どうもごめんちゃーい。
最後の行のarrayCopyみてませんでした。
372デフォルトの名無しさん:2007/10/27(土) 19:09:34
>>370
ものすごい助かります(;;

離散ウェーブレット変換
ttp://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%82%A6%E3%82%A7%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88%E5%A4%89%E6%8F%9B
のHaarWavletというものです。
373aho:2007/10/27(土) 19:24:07
/*
メモリの確保は呼び出し元で行う。
この関数内でメモリを確保して配列を返すと、メモリの解放ができない。
\param input 入力配列
\param output 出力配列
\param size 入力配列の大きさ
*/
void invoke(int* input, int* output, int size){
// 1/2
for(int length = size >> 1; ; length >>= 1){
for(int i=0; i<length; i++){
int sum = input[i*2] + input[i*2 + 1];
int difference = input[i*2] - input[i*2+1];
output[i] = sum;
output[length+i] = difference;
}
if(length == 1)
return;
//array copy
for(int i=0; i<length<<1; i++){
output[i] = input[i];
}
}
}
一応作ってみた。
確認お願い!
374デフォルトの名無しさん:2007/10/27(土) 21:27:54
>>373
ああ…ありがたい
今確認します!!!どうもありがとう!!!!涙出てきた
375デフォルトの名無しさん:2007/10/27(土) 22:51:52
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5163.txt
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C言語
[4] 期限: 10月28日午前12時30分まで
よろしくおねがいします
376aho:2007/10/27(土) 23:01:10
課題1
int sqr(int x){
return x * x;
}

int pow4(int x){
return sqr(x) * sqr(x);
}
377デフォルトの名無しさん:2007/10/27(土) 23:01:24
>>375 最後のだけやってもいいよ 任意サイズでやってやるぜ
378デフォルトの名無しさん:2007/10/27(土) 23:01:32
関数sqrってなんだ?sqrtの間違い?
でもなんで四乗値求めるのに平方根必要?
379aho:2007/10/27(土) 23:02:37
課題2
void hello(void){
printf("こんにちは。\n");

return;
}
380デフォルトの名無しさん:2007/10/27(土) 23:02:42
squareって事ね。
381デフォルトの名無しさん:2007/10/27(土) 23:12:34
任意サイズの2次配列を引数にするにはどうすればいい?
382aho:2007/10/27(土) 23:14:56
課題3
void rev_intary(int vc[], int no){
int i;
int* tmp = (int*)malloc(sizeof(int) * no);
/* noをコピーしておく */
for(i=0; i<no; i++)
tmp[i] = vc[i];
for(i=0; i<no; i++)
vc[i] = tmp[no-1-i];
free(tmp);

return;
}

stdlib.hをインクルードするように!
383デフォルトの名無しさん:2007/10/27(土) 23:15:02
配列のポインタかポインタのポインタを使う
384デフォルトの名無しさん:2007/10/27(土) 23:20:08
>>383
サイズをどうやって保存するの?
385デフォルトの名無しさん:2007/10/27(土) 23:22:02
パンチで
386デフォルトの名無しさん:2007/10/27(土) 23:22:17
保存はできない。引数でサイズ指定するしかない。
387168:2007/10/28(日) 00:20:59
>>357
ありがとうございます。
続きはやっていただけませんか?
388デフォルトの名無しさん:2007/10/28(日) 00:21:53
これうまくいかないけどなぜでしょうか?サイズがちゃんと求まりません

#include <iostream>
#include <vector>
using namespace std;

void sizehyoji(vector< vector<int> > x){
int m,n;
m=sizeof(x)/sizeof(x[0]);
n=sizeof(x[0])/sizeof(x[0][0]);
printf("%d %d",m,n);}

main(){
int i,j,M=200,N=100;
vector< vector<int> > x;
x.resize(M);
for(i=0;i<M;i++)x[i].resize(N);
for(i=0;i<M;i++)for(j=0;j<N;j++)x[i][j]=0;
sizehyoji(x);}
389デフォルトの名無しさん:2007/10/28(日) 00:24:21
>>388
vectorはsize()を使え
390デフォルトの名無しさん:2007/10/28(日) 00:26:59
>>375
課題3
void rev_intary(int vc[], int no)
{
int temp, i, n = no / 2;

for(i=0; i<n; i++) {
temp = vc[i];
vc[i] = vc[no-1-i];
vc[no-1-i] = temp;
}
}
391デフォルトの名無しさん:2007/10/28(日) 00:27:20
>>389
できました vectorでやればサイズ渡せますね

#include <iostream>
#include <vector>
using namespace std;

void sizehyoji(vector< vector<int> > x){
printf("%d %d",x.size(),x[0].size());}

main(){
int i,j,M=200,N=100;
vector< vector<int> > x;
x.resize(M);
for(i=0;i<M;i++)x[i].resize(N);
sizehyoji(x);}
392デフォルトの名無しさん:2007/10/28(日) 00:32:19
>>375
課題4
void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
int i, j, k;

for(i=0; i<2; i++) {
for(j=0; j<2; j++) {
for(k=0; k<3; k++) mc[i][j] += ma[i][k] * mb[k][j];
}
}
}
393デフォルトの名無しさん:2007/10/28(日) 01:01:51
任意サイズのやつやろうとしたけど面倒になった あとでやるかもしれない 書き込んでおく
 
#include <iostream>
#include <vector>
using namespace std;

class Gyouretu {
vector< vector<int> > x;
public:

Gyouretu(){Gyouretu(1,1);}
Gyouretu(int M,int N){int i,j;x.resize(M);for(i=0;i<M;i++)x[i].resize(N);
for(i=0;i<M;i++)for(j=0;j<N;j++)x[i][j]=0;}
resize(int M,int N){Gyouretu(M,N);}

Gyouretu& Gyouretu::operator=(Gyouretu& y){
if(&x!=this){} return *this;}

};


main(){
Gyouretu x;
x.resize(6,5);}
394デフォルトの名無しさん:2007/10/28(日) 04:31:04
全ディレクトリのファイルでサイズが一致するものをプルパスで出力せよ
395デフォルトの名無しさん:2007/10/28(日) 04:38:32
プルパスについてkwsk
396デフォルトの名無しさん:2007/10/28(日) 04:42:58
植田佳奈 さんってこんな人だったの・・・?
相手の人、可哀想;;

http://www.nicovideo.jp/watch/sm1282003
25分14秒付近より

●植田佳奈、最近人生を丸投げしたくなることは?というフリに、「こないだー、悪口を絶賛喋ってた
ら、後ろに本人いて(笑)あんなことほんとにあるんだ!って思って、超びっくりしちゃった(笑)
実名って言うかその人しかあり得ないような悪口をバンバン言ってたの。そしたら、”そんな風に思っ
てたんだ、ごめんね”って逆に謝られちゃって…(笑)」
397デフォルトの名無しさん:2007/10/28(日) 10:19:24
[2] 問題文(含コード&リンク):携帯の文字入力をコマンドプロンプトから行うプログラムをつくれ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VisualStudio 2008
 [3.3] 言語: C
[4] 期限: はやめに

途中までは作っているのですが、シンボルが重複しているみたいなエラーがでてしまいます
デバッグと、濁点等の変換処理を手伝ってもらえませんか?
Shift-jisでやろうと思うのですがこれでいいのかよくわかりません・・・
テンプレのうpろだに何故かうpできなかったので、別のうpろだを使いました
http://www.uploda.org/uporg1085799.zip.html
よろしくお願いします
398デフォルトの名無しさん:2007/10/28(日) 11:59:19
>>397
[1]が抜けてる
期限が曖昧
その上マルチ

そしてVisualStudio2008ってまだβ版だろ、そんなもん宿題に使うな
399397:2007/10/28(日) 12:41:20
すいません。あせってて・・・
[1] 授業単元: C言語
期限:今日中になりました

VisualStudio2005でも同じエラーでした
400デフォルトの名無しさん:2007/10/28(日) 14:14:11
>>352さん
>>355さん
お礼の返事送るのが遅れて申し訳ありませんでした
>>351の問題に答えていただきありがとうございました

401デフォルトの名無しさん:2007/10/28(日) 15:58:29
1] 授業単元: c言語
[2] 問題文:1.文字列の先頭のアドレスを引数とし、
その文字列の中にある文字’A’を探してそれが何番目かを計算し、
‘A’があればその値を、なければ0を返値とする関数を作成せよ。

2.1.で作成した関数を用いて、自分の学籍番号をポインタに代入し、
その中で文字'A'を探してそれを先頭に持ってくるプログラムを作成せよ。


[3] 環境
 [3.1] OS:windows
 [3.2] VisualStudio2005
 [3.3] 言語:c
[4] 期限:10月31日まで
[5] その他の制限:特になし
問題が2個ありますが、よろしくお願いします
402デフォルトの名無しさん:2007/10/28(日) 16:08:15
#include<stdio.h>

fnc(char *c){
int n;
for(n=0;c[n]!='\0';n++)if(c[n]=='A')break;
if(c[n]=='A')return n+1; else return 0;
}

main(){
char c[]="btfguhnexthgd,gj.lhgjkgh,nfgnvhg";
printf("%d\n",fnc(c));
}
403デフォルトの名無しさん:2007/10/28(日) 16:11:30
#include<stdio.h>

fnc(char *c){
int n;
for(n=0;c[n]!='\0';n++)if(c[n]=='A')break;
if(c[n]=='A')return n+1; else return 0;
}

main(){
int i,n;
char c[]="Gakusekibango ha AGS000123";
printf("%s\n",c);
n=fnc(c);
for(i=n-1;i>=0;i--)c[i]=c[i-1];c[0]='A';
printf("%s\n",c);
}
404デフォルトの名無しさん:2007/10/28(日) 16:30:14
[1] 授業単元: C言語
[2] 問題文:整数nをscanfで入力後"prime"という関数を呼び出して、
nが素数ならば1(それ以外は0)を繰り返し、mainにて「○は素数です(ではありません)」
を表示させよ
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:if文を用いる
405デフォルトの名無しさん:2007/10/28(日) 16:37:23
nが素数ならば1(それ以外は0)を返し、
だよな?
406デフォルトの名無しさん:2007/10/28(日) 16:42:35
#include<stdio.h>

prime(int p){
int n,N=p/2;
for(n=2;n<N;n++)if(p%n==0)break;
if(n<N)return 0; else return 1;}

main(){
int p;
scanf("%d",&p);
if(prime(p))printf("%dは素数です",p); else printf("%dは素数ではありません",p);
}
407デフォルトの名無しさん:2007/10/28(日) 16:46:57
>>406
N=p/2
でpが奇数だったらNに入るのはintじゃなさそうな気がする
408デフォルトの名無しさん:2007/10/28(日) 16:47:22
#include<stdio.h>

prime(int p){ for(int n=2;n<p/2;n++)if(p%n==0)return 0;return 1;}

main(){
int p;scanf("%d",&p);
if(prime(p))printf("%dは素数です",p); else printf("%dは素数ではありません",p);}
409デフォルトの名無しさん:2007/10/28(日) 16:48:53
>>407
#include<stdio.h>

main(){
int p=5;
int N=p/2;
printf("Nは%dです",N);
}
410デフォルトの名無しさん:2007/10/28(日) 16:59:01
#include<stdio.h>

int prime(int p)
{
int n;
for(n=2; n<=p/2; n++) if(!(p%n)) return 0;
return 1;
}

int main(void)
{
int p;
scanf("%d",&p);
printf(prime(p) ? "%dは素数です" : "%dは素数ではありません", p);
return 0;
}
411デフォルトの名無しさん:2007/10/28(日) 17:00:09
0 1
412デフォルトの名無しさん:2007/10/28(日) 17:06:42
>>405
その通りでした。すいません
413デフォルトの名無しさん:2007/10/28(日) 17:06:55
>>404
#include <stdio.h>

int prime(int n)
{
int i;
if(n<2) return 0;
for(i=2; i*i<=n; i++) if(n%i==0) return 0;
return 1;
}

int main(void)
{
int n;
scanf("%d", &n);
if(prime(n)==0) printf("%dは素数ではありません\n", n);
else printf("%dは素数です\n", n);

return 0;
}
414デフォルトの名無しさん:2007/10/28(日) 17:43:11
cディレクトリのファイルでサイズが一致するものを出力せよ
415デフォルトの名無しさん:2007/10/28(日) 18:10:14
はい。
416デフォルトの名無しさん:2007/10/28(日) 18:10:35
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
8行10列の二次元配列においてです。
1行目の配列と2行目の配列を足します。(できた配列を配列Aとよぶ)
次に配列Aと3行目の配列を足します。(できた配列を配列Bとよぶ)
次に配列Bと4行目の配列を足します。(できた配列を配列Cとよぶ。)

次に

5行目の配列と6行目の配列を足します。(できた配列を配列aとよぶ)
次に配列aと7行目の配列を足します。(できた配列を配列bとよぶ)
次に配列bと8行目の配列を足します。(できた配列を配列cとよぶ。)


そして配列Cを1行目、配列cを2行目とする
2行10列の二次元配列を表示しろ。(つまり4行の配列をたせということです)

配列のそれぞれの足し算は別関数にて行いなさい。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月29日まで
[5] その他の制限: なし
よろしくお願いします。
417デフォルトの名無しさん:2007/10/28(日) 18:15:39
>>416
これはなにか物理的演算なのかな?
418デフォルトの名無しさん:2007/10/28(日) 18:18:12
>>416
1行目から4行目の各成分をそれぞれ足してCとする。
5行目から8行目の各成分をそれぞれ足してcとする。
Cとcを横に並べて2x10にする。

という意味?
419デフォルトの名無しさん:2007/10/28(日) 18:19:05
関数内はlogの加算にあとでかえますから。
logの加算じゃなかったらこんなめんどいことはしません。
420デフォルトの名無しさん:2007/10/28(日) 18:21:16
8X10の配列を
4X10と4X10とみて、4行ずつ配列を足します。そしたら1X10と1X10になるでしょう?
でこの1X10と1X10をいっしょにして2X10というわけです。

対数の加算なので一辺には計算できないわけです
421デフォルトの名無しさん:2007/10/28(日) 18:25:02
なんでこんな簡単なこともできないのに、そんなに偉そうなんだ?
422デフォルトの名無しさん:2007/10/28(日) 18:27:08
>>420
言いたいことは分かるが4行ずつ配列を足してないだろ
423デフォルトの名無しさん:2007/10/28(日) 18:28:55
#include <stdio.h>

void add(const int *a, int *b, int n)
{
while(n--) b[n] += a[n];
}

int main(void)
{
int a[8][10], b[2][10] = {0};
int i;

for(i=0; i<8; i++) add(a[i], b[i/4], 10);

return 0;
}
424デフォルトの名無しさん:2007/10/28(日) 19:44:51
>>416
配列A, B, a, b は配列として必要なのか?
425デフォルトの名無しさん:2007/10/28(日) 20:42:09
わかる人いますか?

[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
 以下のような内容のテキストファイルを読み込んで
 それぞれ配列に格納した後、同じように出力せよ。

 文章,文章,数字,数字,・・・,数字\n
 文章,文章,数字,数字,・・・,数字\n
 文章,文章,数字,数字,・・・,数字\n

 ただし行数および数字の列数は常に不定とする。

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C/C++どちらでも可
[4] 期限: 2007年10月28日24:00まで
[5] その他の制限: 特になし
426425:2007/10/28(日) 20:46:49
すみません。
読み込むのはtxtファイルじゃなくてcsvファイルでした。
よろしくおねがいします。
427デフォルトの名無しさん:2007/10/28(日) 20:49:03
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): e^x = 1 + x^1/1! + x^2/2! + x^3/3! + x^4/4! + … を利用して e^x を計算する関数 double myexp(double x) を作成せよ.
k=0, 1, 2, 3, … について x^k/k! を加算してゆき, x^k/k!<10-6 となった時点で計算を打ち切るようにせよ
(無限ループと break 文を用いるのが一解法). main から myexp を呼び出し, x=1.0, 2.0, …, 10.0 に対して
myexp(x) の値を全体で 13 桁, 小数点以下 5 桁で表示せよ.
[3] 環境
 [3.1] OS: Windows XP 
[3.2] コンパイラ名とバージョン:gcc 3.4 
[3.3] 言語: C言語
[4] 期限: 2007年10月29日まで
[5] その他の制限:特になし

次レスがプログラムです。実行はされますが値がおかしいです…
よろしくお願いします。
428デフォルトの名無しさん:2007/10/28(日) 20:50:56
#include <stdio.h>
#include <math.h>
double myexp(double);
double x;
int main( void )
{
printf("\t x\t myexp(x)\n");
for(x=1.0;x<=10.0;x++)
{
printf("\t%.1f\t%13.5f\n",x,myexp(x));
}
return 0;
}
double myexp(double x)
{
double r=1.0,f=1.0,y=1.0;
int z,k;
for(k=1;;k++)
{
for(z=1;z<=k;z++)
{
r=r*z;
}

if(pow(x,k)/r<1.0e-6)
{
return f;
break;
}
f=f+pow(x,k)/r;
}
}
429とくめい:2007/10/28(日) 21:06:55
すみませんがプログラミングの宿題を教えてください。
「言語」= c++
「問題」= 速度のfileを読み込みそれを微分して加速度を求めろ。速度を積分して距離を求めろ
なおプログラムは1通です。
「os] = xp micro studio 2005


430とくめい:2007/10/28(日) 21:09:09
上の追加です。
去年の参考にfile名は何でもいいので
#include<stdio.h>
FILE * fp1,* fp2,* fp3; //ファイルポインタの宣言
int main()
{
double k1=0,k;//k1=一つ前の距離、k=距離
double s1=0,s;//s1=一つ前の速度、s=速度
double T=0.4;//刻み値(台形の高さ)

fp1 = fopen( "C:\\suzuki2\\car06spd.txt", "r" );//ファイルを読み込みで開く
fp2 = fopen( "C:\\suzuki2\\sekibun.txt", "w" );//ファイルを書き込みで開く

if( fp1 == NULL ){//fp1にデータがあるか確かる
printf("ファイルが開けません。\n");
fclose( fp1 );
}
431とくめい:2007/10/28(日) 21:10:28
書き込めなかったので2分割しました
while( 1 ) {//無限ループ(微分)
if( fscanf( fp2,"%lf",&k) == EOF ) break;//ファイルを読み終えたらループから抜ける
s=(k-k1)*2/T*3600-s1;//速度(s)の式 、単位変換を行う
fprintf(fp3,"%.0lf\n",s);//ファイルに速度sを出力する
k1=k;//k1にkの値を入れる
s1=s;//s1にsの値を入れる
}
fclose( fp2 );//ファイルを閉じる
fclose( fp3 );//ファイルを閉じる
return 0;
}
432デフォルトの名無しさん:2007/10/28(日) 21:13:10
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5164.txt
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C言語
[4] 期限: 10月29日午前1時まで

よろしくお願いします
433デフォルトの名無しさん:2007/10/28(日) 21:14:25
>>425#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;

main(){
string str="",buf;

fstream fp("text.csv",ios::in);
do {getline(fp, buf);str+=buf+"\n";}while(!fp.eof());

int m,n;vector<string> x;

do{
m=str.find(",");n=str.find("\n");
if(m>n){x.push_back(str.substr(0,n));x.push_back("\n");m=n;}
else x.push_back(str.substr(0,m));
str=str.substr(m+1);}while(m>=0);

for(n=0;n<x.size();n++)cout<<x[n];
}
434デフォルトの名無しさん:2007/10/28(日) 21:24:59
// >>427 eのマクローリン展開
#include <stdio.h>
#include <math.h>
double myexp(double);
double x;

int main( void )
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");

for(x=1.0;x<=10.0;x++)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}

double myexp(double x)
{

double s = 0.0;
double a = 1.0;

s += 1.0;
for (int n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
435デフォルトの名無しさん:2007/10/28(日) 21:26:58
/*
e^x を計算する関数 double myexp(double x) を作成せよ.
k=0, 1, 2, 3, … について x^k/k! を加算してゆき,
x^k/k!<10-6 となった時点で計算を打ち切る

main から myexp を呼び出し,

x=1.0, 2.0, …, 10.0 に対して
myexp(x) の値を全体で
13 桁, 小数点以下 5 桁で表示せよ.
*/

#include <stdio.h>
#include <math.h>

double myexp(double x){
double r=1,sum=0;
for(int k=1;;k++){
sum+=r;
r*=x/k;
if(r < 1.0e-6)return sum;}}


int main( void ){
double x;
printf("\t x\t myexp(x)\n");
for(x=1.0;x<=10.0;x++){
printf("\t%.1f\t%13.5f\n",x,myexp(x));
}
return 0;
}
436デフォルトの名無しさん:2007/10/28(日) 21:28:11
// >>427 e(x)の計算 さっきのはforのなかで宣言があったんでC++

#include <stdio.h>
#include <math.h>
double myexp(double);

int main( void )
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");

for(x=1.0;x<=10.0;x++)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}

double myexp(double x)
{
double s = 0.0;
double a = 1.0;
int n;

s += 1.0;
for (n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
437デフォルトの名無しさん:2007/10/28(日) 21:28:25
[1] 授業単元: データ1
[2] 問題文(含コード&リンク): 長いのでうpしました。
簡易電卓を作成する問題です。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5165.txt

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/7まで
[5] その他の制限:GUIで作ってはいけないそうです。

よろしくお願いします。
438デフォルトの名無しさん:2007/10/28(日) 21:29:20
#include <stdio.h>

double myexp(double x){
double r=1,sum=0;
for(int k=1;;k++){
sum+=r;r*=x/k;
if(r<1.0e-6)return sum;}}

main(){
printf("\t x\t myexp(x)\n");
for(double x=1.0;x<=10.0;x++)printf("\t%.1f\t%13.5f\n",x,myexp(x));}
439デフォルトの名無しさん:2007/10/28(日) 21:31:11
>>437
厳しい制限だな。GUIで作っちゃだめなのか
440デフォルトの名無しさん:2007/10/28(日) 21:34:38
>>432
#include <stdio.h>
#include <math.h>
int solve(double a, double b, double c);
double answer1;
double answer2;
int solve(double a,double b, double c)
{
double check;
check = b * b - 4 * a * c;
if(check > 0){
answer1 = (b + sqrt(b * b - 4 * a * c)) / (2 * a);
answer2 = (b - sqrt(b * b - 4 * a * c)) / (2 * a);
return 2;
}else if(check == 1){
answer1 = (b + sqrt(b * b - 4 * a * c)) / (2 * a);
answer2 = answer1;
return 1;
}
return 0;
}

main()は省略
汚いコードだけどこんな感じ
441デフォルトの名無しさん:2007/10/28(日) 21:35:29
>>432
int solve(double a, double b, double c)
{
double d = b * b - 4 * a * c;

if(d<0) return 0;

answer1 = (-b + sqrt(d)) / 2 / a;
answer2 = (-b - sqrt(d)) / 2 / a;

return d == 0 ? 1 : 2;
}
442デフォルトの名無しさん:2007/10/28(日) 21:36:31
>>440
それまちがってるよ
443デフォルトの名無しさん:2007/10/28(日) 21:38:53
>>440
せっかくcheck計算してんのに、sqrtの引数に利用しないなんてムダすぎる
444440:2007/10/28(日) 21:39:29
>>442
/(^o^)\bの前に”-”が抜けてた

>>441のほうが圧倒的に見やすくていいね
445425:2007/10/28(日) 22:03:25
>>433
ありがとうございます!!

あと数字は数字として格納して次の問題での計算に使いたいのですが
文字列として取得した数字を別の配列に整数型の数として取得するには
どうすればいいでしょうか?
446デフォルトの名無しさん:2007/10/28(日) 22:08:48
st=str.substr(0,n)に対して

st[i]が'0'から'9'にあればいい

コードはちょっと待ってくれ
447デフォルトの名無しさん:2007/10/28(日) 22:08:55
>>445

std::string str = "1.234";
double d;
std::istringstream istr(str);
istr >> d;
448デフォルトの名無しさん:2007/10/28(日) 22:30:14
stringが数値なら変換して違うならエラーを返す関数ってある?
449デフォルトの名無しさん:2007/10/28(日) 22:33:09
atofで良いんだな
450デフォルトの名無しさん:2007/10/28(日) 22:36:21
atofだと初めが数値だと計算してしまう
451デフォルトの名無しさん:2007/10/28(日) 22:38:30
.8222とか、100,000とかは数値にするのか?
452425:2007/10/28(日) 22:42:07
>>446
その方法基本情報試験の勉強でやった覚えが!!!
でもどうにも思い出せないです・・・

>>447
stringがvector<string>なためかうまくいきません。
atoiなどもvectorは拒否されてしまうみたいですね。
うーん、難しい・・・
453デフォルトの名無しさん:2007/10/28(日) 22:44:19
#include<stdio.h>

int main(int argc, char *argv[]){
int i, index;
double value;
for(i=1;i<argc;i++){
if(sscanf(argv[i], "%lg%n", &value, &index)>=1 && argv[i][index]=='\0')
printf("%s は数値だ\n", argv[i]);
else
printf("%s は数値ではない\n", argv[i]);
}
return 0;
}
454デフォルトの名無しさん:2007/10/28(日) 22:50:47
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):待ち行列シミュレーションするプログラムを作成せよ
完成する関数:    
void enqueue(char *x)
void dequeue()
void queue_print()

作成するプログラムについて:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5168.txt
実行例:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5169.txt
ヒント:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5170.txt
[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2003
 [3.3] 言語:c++
[4] 期限:2007年10月29日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで
455デフォルトの名無しさん:2007/10/28(日) 22:56:52
>>437
符号反転キーと演算キーがかぶる気がするんだけどどうするの?
456デフォルトの名無しさん:2007/10/28(日) 22:58:12
class mojisu {
string str;
double su;

}

mojisu x;

x.input("777");

という関数を作る 数値なら数字として保存 このとき文字は空にする 違うなら文字として保存
457 ◆nzw4qNGj6U :2007/10/28(日) 22:58:19
[1] 授業単元:プログラミング2 文字列処理
[2] 問題文(含コード&リンク):
英文(英単語)を入力し、入力した文字列を、逆から表示するプログラムを作成すること。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2007年10月29日0:00迄
[5] その他の制限:NULL文字を使用して下さい。

よろしくお願いします。
458デフォルトの名無しさん:2007/10/28(日) 23:41:00
>>457
NULL文字をどこで使用するんだ・・・

#include <stdio.h>
int main()
{
int i=-1;
char buf[256];
while((buf[++i]=getchar())!=EOF);
while(i>0&&putchar(buf[--i])!=EOF);
return 0;
}
459デフォルトの名無しさん:2007/10/28(日) 23:48:49
>>458
きっとこういう風にするんだよ

#include <stdio.h>
int main()
{
int i=-1;
char buf[256];
while((buf[++i]=getchar())!=EOF);
while(i>0&&putchar(buf[--i])!=NULL); // ここ
return 0;
}
460デフォルトの名無しさん:2007/10/29(月) 00:19:06
NUL文字?
461デフォルトの名無しさん:2007/10/29(月) 00:26:36
ぬるぽ?
462デフォルトの名無しさん:2007/10/29(月) 00:43:06
がっ?
463デフォルトの名無しさん:2007/10/29(月) 00:55:11
>>452
vector<string>ならiteratorを使って一つずつループさせればどうかな
for_eachでもいいし

atofはc_str()というメンバ関数があるからそれで使える
464デフォルトの名無しさん:2007/10/29(月) 00:57:12
マジレスしといたほうがいい?
465デフォルトの名無しさん:2007/10/29(月) 01:24:13
しといたほうがいいよ



どれのことか知らないけど
466デフォルトの名無しさん:2007/10/29(月) 01:26:06
プログラム板はふざけたスレ以外はマジレス基本
467デフォルトの名無しさん:2007/10/29(月) 01:27:18
>>458
buf[0]にNULL文字セットして番兵にするくらいしか思いつかんね
468デフォルトの名無しさん:2007/10/29(月) 01:33:25
>>437
1:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5171.txt
2:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5172.txt

ものすごく汚いソースで申し訳ない。べき乗関数とascii→double変換関数を自分で書いてますが
stdlib.hとmath.hにそれぞれatof、powという関数がありますのでそれを使えば関数の分だけ
ソースは短く出来ます。
あと、エラーチェックをほとんどしていないので適宜追加してください。
469デフォルトの名無しさん:2007/10/29(月) 02:01:35
470デフォルトの名無しさん:2007/10/29(月) 02:07:59
>>469
仕様が違うからなんとも言えんな。
つーか、ほとんど宇宙語。
boost教えて。

>>468がもっさいのは、仕様のせいだと思う。
471デフォルトの名無しさん:2007/10/29(月) 02:34:33
boostはだめだろう
C++の標準とwindowsの標準以外は使うべきでない
472デフォルトの名無しさん:2007/10/29(月) 02:43:31
[1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク):
  ファイルから改行区切りの単語 (2字以上の全角の日本語)を読み込み
  他の単語から合成出来るものを除去してファイルに書き出せ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C or C++
[4] 期限: 2007年10月29日17:00まで
[5] その他の制限: なし
お願いします
473デフォルトの名無しさん:2007/10/29(月) 02:50:49
正弦波にガウス窓を掛けるプログラムを
お願いします
474437:2007/10/29(月) 02:52:35
レス遅くなりました。すいません。

>>455
符号反転キーについては、書いている時にも気になたのですが、特に解説はありません。
問題の指定と違いますが’+/-’これでキーとして問題ないと思います。

>>468
ありがとうございます!!
凄いですね、、、とても自分では作りきれないです・・・・・
C言語入門書読んだだけでこれだけ作れると思ってるのかな・・・・教授。
頑張って改良してみます!
475デフォルトの名無しさん:2007/10/29(月) 03:03:00
>>472
まず2文字の単語を抽出してソートしておく 4文字の単語を抽出して前半に2文字の単語を含むか調べる
含まなければ合成単語ではない 後半も存在すれば消す
つぎに3文字のものを抽出して、5字の単語の先頭に2か3文字の単語を含むか調べるっていう感じでやっていく1
476468:2007/10/29(月) 03:18:53
>>474
訂正
・ctype.hをインクルードしてますが使ってないので削除してください。(判定にis〜を使うつもりだったけど使わなかったので)
・atodの変数宣言でセミコロンが1つ多いので消してください。

ソースを見ていくと解るけど基本的な事しかしてないです。
scanfで文字列を読み込んでswitch文を使って先頭の文字で場合分けして処理してるだけです。
477デフォルトの名無しさん:2007/10/29(月) 09:12:09
>>475
さあ、漢は黙ってコードで勝負!
478デフォルトの名無しさん:2007/10/29(月) 09:20:32
1問
数値int型を入力し、a文字から順に数値個アルファベットを 標準するプログラムを作成しなさい
実行画面
数値入力-->5
a
b
b
d
e
479デフォルトの名無しさん:2007/10/29(月) 09:23:48
3つの数値int型を入力し、その合計を求めるプログラムを作成しなさい
実行画面
数値1入力-->10
数値2入力-->5
数値3入力-->8
合計:23
480デフォルトの名無しさん:2007/10/29(月) 09:27:10
数値int型入力し、1からその数値までの合計を求め階乗計算プログラムを作成しなさい
実行画面
数値入力-->5
5までの合計:15

以上の3問お願いします
481デフォルトの名無しさん:2007/10/29(月) 09:36:28
>>1読んでテンプレに沿って書け
CかC++かすらわからんぞ
482デフォルトの名無しさん:2007/10/29(月) 09:44:44
>>480
合計と階乗は違う
483デフォルトの名無しさん:2007/10/29(月) 09:47:39
cです
484デフォルトの名無しさん:2007/10/29(月) 09:50:45
>>483
>>478
負の数や、26以上が入力された場合はどうするんだ?
そこらへんも含めてテンプレ記入よろ
485デフォルトの名無しさん:2007/10/29(月) 09:51:45
>>478
#include <stdio.h>
int main(void)
{
int n, ch = 'a';
printf("数値入力-->");
scanf("%d", &n);
while(n--) printf("%c\n", ch++);
return 0;
}
>>479
#include <stdio.h>
int main(void)
{
int i, n, sum;
for(i=1, sum=0; i<=3; i++, sum+=n) {
printf("数値%d入力-->", i);
scanf("%d", &n);
}
printf("合計:%d\n", sum);
return 0;
}
>>480
#include <stdio.h>
int main(void)
{
int n;
printf("数値入力-->");
scanf("%d", &n);
printf("%dまでの合計:%d\n", n, n * (n + 1) / 2);
return 0;
}
486デフォルトの名無しさん:2007/10/29(月) 10:25:00
>>478
#include <stdio.h>

int main(){
unsigned n;
char c;

printf("Number?>");
scanf("%u",&n);
if(n>26){
puts("Too much number!");
return 1;
}
c = 'a';
for(n--){printf("%c\n",c++);}
return 0;
}
487デフォルトの名無しさん:2007/10/29(月) 10:56:43
どなたか>>454をおねがいします
488デフォルトの名無しさん:2007/10/29(月) 11:07:29
>>487
期限過ぎちゃったしなぁ
489aho:2007/10/29(月) 11:33:55
>>454
軽く作ってみたけどどお?
void enqueue(char* str){
strcpy(queue[rear], str);
rear++;
rear %= QUEUE_SIZE;

return;
}

void queue_print(){
printf("%s\n", queue[front]);

return;
}

void dequeue(){
queue_print();
front++;
front %= QUEUE_SIZE;

return;
}
490デフォルトの名無しさん:2007/10/29(月) 13:33:23
>>472 おねがいします
491デフォルトの名無しさん:2007/10/29(月) 13:58:51
[1] 授業単元:
[2] 問題文(含コード&リンク):
 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5173.zip
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5174.txt
現在海外の大学に在学しているので全て英語で書かれています
下のファイルに何をすればいいのか原文と日本語訳をつけました

[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 2007/10/29 16:00
[5] その他の制限: ありません

よろしくお願いいたします
492デフォルトの名無しさん:2007/10/29(月) 14:17:46
期限は現地時間じゃなくて、JSTで書け。
もしJSTなら、残り4時間じゃ無理。
493お願いします:2007/10/29(月) 14:33:14
でエラーがerror C2064: 1 引数を取り込む関数には評価されません。
とでて解決できません・・・どうすればいいのでしょうか??
お願いします。
494お願いします:2007/10/29(月) 14:39:44
#include <stdio.h>
#include <math.h>
double f1(double t,double v1,double a);
double f2(double t,double v1,double a);
double f3(double t,double v2,double b);
double f4(double t,double v2,double b);
double t,v1,v2,a,b,dt,tmax,g,m1,m2,l1,l2;
int main()
{
double k1[4],k2[4],k3[4],k4[4];
l1=1.0;
l2=1.0;
m1=1.0;
m2=1.0;
g=1.0;
v1=0.0; //位置v1の初期値
v2=0.0; //位置v2の初期値
a=0.5; //位置alphaの初期値
b=0.5; //位置betaの初期値
dt=0.001; //刻み幅
tmax=10.0; //繰り返し最大回数
FILE *output;
output=fopen("output.data","w");
495お願いします:2007/10/29(月) 14:40:30
t=0;
fprintf(output,"%f %f %f\n",t,v1,v2,a,b);
for(t=0;t<tmax;t+=dt) {
k1[0]=dt*f1(t,v1,a);
k1[1]=dt*f2(t,v1,a);
k1[2]=dt*f3(t,v2,b);
k1[3]=dt*f4(t,v2,b);
k2[0]=dt*f1(t+dt/2.0,v1+k1[0]/2.0,a+k1[1]/2.0);
k2[1]=dt*f2(t+dt/2.0,v1+k1[0]/2.0,a+k1[1]/2.0);
k2[2]=dt*f3(t+dt/2.0,v2+k1[2]/2.0,b+k1[3]/2.0);
k2[3]=dt*f4(t+dt/2.0,v2+k1[2]/2.0,b+k1[3]/2.0);
k3[0]=dt*f1(t+dt/2.0,v1+k2[0]/2.0,a+k2[1]/2.0);
k3[1]=dt*f2(t+dt/2.0,v1+k2[0]/2.0,a+k2[1]/2.0);
k3[2]=dt*f3(t+dt/2.0,v2+k2[2]/2.0,b+k2[3]/2.0);
k3[3]=dt*f4(t+dt/2.0,v2+k2[2]/2.0,b+k2[3]/2.0);
k4[0]=dt*f1(t+dt,v1+k3[0],a+k3[1]);
k4[1]=dt*f2(t+dt,v1+k3[0],a+k3[1]);
k4[2]=dt*f3(t+dt,v2+k3[2],b+k3[3]);
k4[3]=dt*f4(t+dt,v2+k3[2],b+k3[3]);
v1=v1+(k1[0]+2.0*k2[0]+2.0*k3[0]+k4[0])/6.0;
a=a+(k1[1]+2.0*k2[1]+2.0*k3[1]+k4[1])/6.0;
v2=v2+(k1[2]+2.0*k2[2]+2.0*k3[2]+k4[2])/6.0;
b=b+(k1[3]+2.0*k2[3]+2.0*k3[3]+k4[3])/6.0;
fprintf(output,"%f %f %f\n",t+dt,v1,v2,a,b);
}
fclose(output);
return 0;
496お願いします:2007/10/29(月) 14:41:01
}
double f1(double t,double v1,double a)
{
return -(g * (2 + m2/m1) * sin(a) + m2/m1 * (g * sin(a - 2 * b) + 2 * ((v2 * v2)/l2 + ((v1 * v1) * cos(a - b))/l1) * sin(a - b))) /(2 + m2/m1 - m2/m1 * cos(2(a - b)));
}
double f2(double t,double v1,double a)
{
return v1/l1;
}
double f3(double t,double v2,double b)
{
return 2(((1+m2/m1) * ((v1 * v1)/l1) + g * (1 + m2/m1) * cos(a) + m2/m1 * ((v2 * v2)/l2) * cos(a - b)) * sin(a - b)) /(2 + m2/m1 - m2/m1 * cos(2(a - b)));
}
double f4(double t,double v2,double b)
{
return v2/l2;
}

497お願いします:2007/10/29(月) 14:42:34
本文が3つになってしまいましたが・・・すいません。
498491:2007/10/29(月) 14:42:39
>>492
どうも失礼いたしました
期限は変更されて日本時間で
10/30 19:00
です
どうかよろしくお願いいたします
499デフォルトの名無しさん:2007/10/29(月) 14:45:19
>>お願いします

2(



2*(

にかえろ
500425:2007/10/29(月) 14:51:07
>>435>>463を元にあれこれやってみたらできました!
ありがとうございました!
501デフォルトの名無しさん:2007/10/29(月) 14:55:24
問題出して40分で期限変更かよ
嘘つくなってw
502お願いします:2007/10/29(月) 15:05:54
ありがとうございました。
503472:2007/10/29(月) 16:00:55
時間過ぎても出さないと駄目なのでおねがいします
504aho:2007/10/29(月) 16:59:06
>>473
/*!
\param input サンプル値系列
\param output 結果
\param sample_num サンプル数
*/
void gauss_window(int* input, double* output, int sample_num){
double sigma = 0.4;
int* tmp = new int[sample_num];
memcpy(tmp, input, sizeof(int) * sample_num);
/* 区間の外は0とする */
int start = 2;
int end = 25;
for(int i=0; i<start; i++)
tmp[i] = 0;
for(int i=end; i<sample_num; i++)
tmp[i] = 0;

int cnt = 0;
while(cnt < sample_num){
double x = (double)cnt / (sample_num - 1);
double func = exp(- x * x / sigma / sigma);
double value = func * tmp[cnt];
output[cnt] = value;
cnt++;
}
if(tmp){
delete[] tmp;
tmp = NULL;
}
return;
}
505aho:2007/10/29(月) 17:00:02
>>472
とりあえず、作ってみた。
もっと詳しい仕様を教えてくれれば作るよーん。
506472:2007/10/29(月) 17:11:15
単語は全角で100文字以内、単語数は可変で少なくとも1万は処理できるといいです。

input.txt

明治
大学
明治大学

↓ ***処理後

明治
大学


output.txt というファイルを出力します
507デフォルトの名無しさん:2007/10/29(月) 17:15:31
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5176.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月30日pm5:00
[5] その他の制限:
よろしくお願いします。
508デフォルトの名無しさん:2007/10/29(月) 17:39:05
>>507
#include <stdio.h>
#include <math.h>
void divhalf(double *, double *,double a,double c);
double f(double x, double a,double c);

main(){
double a,c,x,x_1,x_2,xm,nc=0;
scanf("%f",&a); scanf("%f",&c);
scanf("%f",&x_1); scanf("%f",&x_2);

while(nc<50){
divhalf(&x_1,&x_2,a,c);
xm=(x_1+x_2)/2;
printf("%d %f %f %f\n",nc, x_1,x_2, f(xm,a,c));
if(abs(f(xm,a,c))< 0.000001)break;
}

}

void divhalf(double *x_1, double *x_2,double a,double c){
double x_m=(*x_1+*x_2)/2;
if(f(*x_1,a,c)*f(x_m,a,c)>0)
*x_1=x_m;
}


double f(double x, double a,double c){return tan(c*x)-a;}
509デフォルトの名無しさん:2007/10/29(月) 17:54:10
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
日本の人口は1億5000万人であるが、毎年5%づつ減少していくとして、 5000万人を割り込むまでに必要な年数を求めよ。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11/4
[5] その他の制限:
複利の計算を使うと思われます。
510デフォルトの名無しさん:2007/10/29(月) 18:01:52
複利の利は利率の利
511デフォルトの名無しさん:2007/10/29(月) 18:02:44
#include <stdio.h>


main(){
double x=150000000,r=0.05;
int n;
for(n=1;;n++){
x*=1-r;
if(x<50000000)break;
}
printf("%d",n);
}
512デフォルトの名無しさん:2007/10/29(月) 18:04:21
>>241
誰かお願いします(泣)
513491:2007/10/29(月) 18:11:43
>>491
どなたかお願いします
514デフォルトの名無しさん:2007/10/29(月) 18:14:42
>>512
#include<stdio.h>
double ave(double c1,double c2,double c3)
{
return (c1+c2+c3)/3.0;
}
main()
{
double c1,c2,c3;
printf("c1の昼食代="); scanf("%lf",&c1);
printf("c2の昼食代="); scanf("%lf",&c1);
printf("c3の昼食代="); scanf("%lf",&c1);
printf("割り勘で%lf円\n",ave(c1,c2,c3));
}
表示部分は自分で変更してください。
割り切れなかった場合の考慮をしていないのでその辺は自分で考えてみてください。
515デフォルトの名無しさん:2007/10/29(月) 18:15:01
>>241
#include <stdio.h>
double ave(double c1, double c2, double c3) {return (c1 + c2 + c3) / 3;}
int main()
{
double co1, co2, co3;
printf("3人の昼食代を入力せよ:");
scanf("%lf%lf%lf", & co1, & co2, & co3);
printf("割り勘で%g円\n", ave(co1, co2, co3));
return 0;
}
516デフォルトの名無しさん:2007/10/29(月) 18:15:45
>>514
ありがとうございました
大変助かりました
517514:2007/10/29(月) 18:16:18
コピペした後変更するの忘れてた。入力が全部c1なのでc2,c3に変更してください。
518デフォルトの名無しさん:2007/10/29(月) 18:16:30
>>515ありがとうございました
519デフォルトの名無しさん:2007/10/29(月) 18:22:50
実行くらいしようぜ…
520デフォルトの名無しさん:2007/10/29(月) 18:27:13
>>491 >>513
これって要するにテトリスを作れってことか?
テトリスをCUIで作れ、と。
アクティヴなゲームをCUIのCで。
521デフォルトの名無しさん:2007/10/29(月) 18:38:09
>>491
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

avr関連は、USBなどのフラッシュメモリにアクセスするためのものです。
gccのIncludeフォルダにはもちろんありません。
522デフォルトの名無しさん:2007/10/29(月) 18:41:13
>>508
本当にありがとうございました。
523491:2007/10/29(月) 18:52:52
>>520>>521
この課題はテトリスのプログラムを作って
avr studio を通してLEDにゲームを表示するというものです
524デフォルトの名無しさん:2007/10/29(月) 20:19:35
[1] 授業単元:c++実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5177.txt
[3] 環境
 [3.1] OS: XP and VISTA
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語: c++
[4] 期限: 10/31 〜18:00
[5] その他の制限: 特になし

よろしくお願いします。
525デフォルトの名無しさん:2007/10/29(月) 20:20:57
いいなぁ〜留学かー
526デフォルトの名無しさん:2007/10/29(月) 20:41:52
>>524
楽天KC、クレジットカード番号を含む個人情報1168件を流出
527デフォルトの名無しさん:2007/10/29(月) 20:42:45
いつかやると思ってた
528aho:2007/10/29(月) 21:00:13
>>524
クラスの基本的な部分はできた。
詳しい仕様が全然わからん。

529デフォルトの名無しさん:2007/10/29(月) 21:03:58
530aho:2007/10/29(月) 21:06:28
>>529
もう出来あがってるじゃん。
おぬし、これ以外に何を望む?
531デフォルトの名無しさん:2007/10/29(月) 22:03:01
>>523
テスト&デバッグに必要なのでハード一式日本に送ってください
532491:2007/10/29(月) 22:28:42
>>531
ソフトは持っているのですがどうやってアップロードすればいいのかわかりません
テンプレにあるので試したのですがサイズが大きすぎて無理でした
お手数ですがここからダウンロードしていただけないでしょうか

http://www.atmel.com/forms/software_download.asp?fn=dl_aStudio4b528.exe
533デフォルトの名無しさん:2007/10/29(月) 22:50:25
明らかに丸投げするタイプの宿題じゃない気が……

異国の友達に写さしてもらいなさい
534デフォルトの名無しさん:2007/10/29(月) 22:50:29
>>532
73MBの実行ファイルをDL?
535デフォルトの名無しさん:2007/10/29(月) 22:53:05
これをDLするとバーチャルなLEDとかチップとかが実行できるわけ?
じゃないと明らかに>>531の言うとおりテスト・デバッグができない
536491:2007/10/29(月) 23:21:49
>>533>>534>>535
532のソフトでプログラムをhexファイルにして
下のソフトで開くと実際にシミュレートできるはずです
よろしくお願いいたします
http://pict.or.tp/img/28161.zip
537デフォルトの名無しさん:2007/10/29(月) 23:43:05
[1] 授業単元:c++実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5179.txt
上記のプログラムに下記の条件を追加します。
マスの条件を増やす(3つ進む,1回休みなど)。
コマ同士が重なった時,1回休みなどの何か処理をする。
マスの組み方をいろいろと考える。
サイコロの数を増やす
[3] 環境
 [3.1] OS: XP and VISTA
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語: c++
[4] 期限: 10/31 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。
538デフォルトの名無しさん:2007/10/29(月) 23:54:54
1] 授業単元:C言語
[2] 問題文(含コード&リンク):
2つの正の整数を2<=min<=max<=1000とする。キーボードからminとmaxを入力して
min以上max未満の素数をすべて表示する。
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler5.5
 [3.3] 言語: C
[4] 期限: 10/30 9:00までにお願いします。
[5] その他の制限:
if,for,while,swichは習いました。
539デフォルトの名無しさん:2007/10/30(火) 00:07:38
>>538
#include<stdio.h>
int IsPrime(int n){
int i;
if(n<2)return 0;
else if(n==2)return 1;
if(n%2==0)return 0;
for(i=3;i*i<=n;i+=2)if(n%i==0)return 0;
return 1;
}
int main(void){
int max,min;
printf("min:");
scanf("%d",&min);
printf("max:");
scanf("%d",&max);
if(2<=min&&min<=max&&max<=1000){
while(min <= max){
if(IsPrime(min))printf("%d\n",min);
min++;}}return 0;}
途中で表示するのが素数だって気がついて少し慌てた 関数はまずかったかな?
540デフォルトの名無しさん:2007/10/30(火) 00:16:57
>>539
ありがとうございます。
関数はちょっと・・・
まだ習ってないので、わからないんです。
作っていただいたのに申し訳ありませんm(_ _)m
関数でない他のプログラムはありますか?
541デフォルトの名無しさん:2007/10/30(火) 00:20:42
>>537 って前でてた宿題の続きだよな。おれはてっきり virtual な関数の例題だと思ってたが、これはCとかわらんなw
542デフォルトの名無しさん:2007/10/30(火) 00:21:38
>>540
#include<stdio.h>
int main(void){
int max,min,i;
printf("min:");scanf("%d",&min);
printf("max:");scanf("%d",&max);
if(2<=min&&min<=max&&max<=1000){
while(min <= max){
for(i=2;i<min;i++)if(min%i==0)break;
if(i==min)printf("%d\n",min);
min++;}}return 0;}
効率無視だけどたぶん素数が出力されてると思う。確認してから提出してくれ
543デフォルトの名無しさん:2007/10/30(火) 00:24:29
>>542
どうもありがとうございました。
このようなやり方でよかったのですね。
とても助かりました。(*^_^*)
544 ◆gKLa0lVLKo :2007/10/30(火) 00:56:15
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):
問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5180.txt
ソースコード:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5181.txt
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C言語
[4] 期限:11月2日(金) 午前10時
[5] その他の制限: プログラミングを初めて2ヶ月足らずの初心者です。
授業ではif文、switch文、do文、while文、for分などを習いました。
基本的に、今まで習ったことを使ってプログラムしろとのことです。
if文を使って、勝敗を出すところまでは解けたのですが、戦況報告のプログラムの仕方が、
どうしても分かりません。よろしくお願いします。
545デフォルトの名無しさん:2007/10/30(火) 02:32:07
>>544
当方で確認した環境・処理系は WindowsXP / cygwin(gcc 3.4.4) です。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5182.txt
546491:2007/10/30(火) 06:16:06
どなたか491をお願いします
547 ◆gKLa0lVLKo :2007/10/30(火) 08:36:10
>>545
ありがとうございました。助かりました。

ただ、プログラムを実行させていただいた所、
戦況報告にて、コンピューターの残り部隊が0になり、
最終的に徳川方と石田方のどちらが勝利したか表示する部分がうまくいきませんでした。

while分の条件を変え、
if文で自軍が勝った場合と、敵方が勝った場合のメッセージを表示すれば良いのでしょうか?
548デフォルトの名無しさん:2007/10/30(火) 08:47:08
ソースを書き直せばいいじゃん
549デフォルトの名無しさん:2007/10/30(火) 08:53:59
550デフォルトの名無しさん:2007/10/30(火) 09:34:23
>>491 >>546
[3]の環境には、暗黙の内に「ATMELのチップで制御されたLED」というものが含まれています。
これと同じ環境を構築しないとテスト&デバッグは無理です。
551デフォルトの名無しさん:2007/10/30(火) 11:14:25
552デフォルトの名無しさん:2007/10/30(火) 12:11:20
>>544
じゃんけんの勝敗は (hum - com + 3) % 3 の数値で判定すると楽
553デフォルトの名無しさん:2007/10/30(火) 13:08:04
[1] 授業単元:C言語
[2] 2次元平面上の点を表す構造体 Point 型を定義する.ただし,構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,二点を結ぶベクトルを求める関数 vector,ベクトルのスカラー倍を求める関数 scalar,ベクトルを表示する関数 print_v を定義し,以下のプログラムを完成させる.
[3] 環境
 [3.1] OS:Win
 [3.2] 任意
 [3.3] 言語: C
[4] 期限: 2007.10.30 16時まで
554デフォルトの名無しさん:2007/10/30(火) 13:09:52
#include <stdio.h>
#include <stdlib.h>
/* (x,y)-平面の点を座標で表す構造体 */
???????
/* 2点を結ぶベクトルを求める関数 */
???????
/* ベクトルのスカラー倍を求める関数 */
???????
/* ベクトルを表示する関数 */
???????
int main(void)
{
Point p0=???????, p1, p2; /* p0:原点,p1:入力の点,p2:結果 */
double t; /* スカラー倍 */
printf("Input Point A, X: ");
scanf("%lf", ???????);
printf("Input Point A, Y: ");
scanf("%lf", ???????);
printf("Input scalar t: ");
scanf("%lf", ???????);
printf("The origin ");
print_v(p0);
    p2 = vector(p0, p1);
printf("vector A: ");
print_v(p2);
   p2 = scalar(p2, t);
printf("vector A * t: ");
print_v(p2);
   return 0;
}
????の部分埋めてください
見づらいってとこはスルーで^^
555デフォルトの名無しさん:2007/10/30(火) 13:23:22
typedef struct { double x, y; } Point;

Point vector(Point p1, Point p2) {
p2.x -= p1.x;
p2.y -= p1.y;
return p2;
}

Point scalar(Point p, double t) {
p.x *= t;
p.y *= t;
return p;
}

void print_v(Point p) { printf("(%f, %f)\n", p.x, p.y); }

{0.0}

&p1.x

&p1.y

&t
556デフォルトの名無しさん:2007/10/30(火) 13:41:46
555さんありです
よろしかったらこちらもおね
コマンドラインから与えられた引数を文字列と見て,ポインタ result が指すメモリ領域にそのままコピーするプログラムを完成させなさい.
#include <stdio.h> /* おまじない */
#include <stdlib.h> /* おまじない */
#include <string.h> /* strlen() のため */
void mycopy(char*, char*);
int main(int argc, char *argv[])
{
char *result;
if (??????? != 2) {
printf("Try again:\n");
exit(1);
}else{
result = (???????)malloc(??????? * ???????);
         printf("Input : %s \n", ???????);
         mycopy(result, argv[1]);
         printf("Result: %s \n", result);

???????; /* 割り当てたメモリ領域を解放 */
}

return 0;
}
void mycopy(char *after, char *before)
{
???????
}
557デフォルトの名無しさん:2007/10/30(火) 13:52:07
argc
/*キャストは必要ない*/
/*sizeof(char)なんて必要ない*/1
(strlen(argv[1]) + 1)
argv[1]
free(result)
while(*after++=*before++);
558デフォルトの名無しさん:2007/10/30(火) 13:54:13
void *malloc(size_t);
559デフォルトの名無しさん:2007/10/30(火) 14:02:23
1] 授業単元:数値解析
[2] 問題文(含コード&リンク):プログラムを完成させる問題
/* 二分法 */
#include <stdio.h>
#include <math.h>
double func(double);
int
main(){
double a, b, c, e, r;
int i;
a = 0;
b = 1;
e = 0.0001;
i = 1;
do{
c = /* 中間の値を求める */
printf("Loop %2d: %f\n", i, c);
r = /* 中間の値の関数返値を求める */
if(( ) < 0){ /* 中間の値の関数返値と f(a) の時の値を掛けた結果が 0 より小さいとき */
/* b へ中間の値を代入する    ( f(a)f(b) > 0 ) */
} else { /* 中間の値の関数返値と f(a) の時の値を掛けた結果が 0 より大きいとき */
/* a へ中間の値を代入する    ( f(a)f(b) < 0 ) */
}
i++;
}while(!((r == 0) || ((b - a) < e))); /* 終了判定 */
return 0;
}
double
func(double x){
return /* 関数定義 */
560559:2007/10/30(火) 14:03:19
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: なし
よろしくお願いします
561デフォルトの名無しさん:2007/10/30(火) 14:08:32
プログラムの授業で穴埋め式の課題、しかもコメントつきってなんの役にも立たない気がする
562デフォルトの名無しさん:2007/10/30(火) 14:16:30
よっぽどの底辺校かな
563559:2007/10/30(火) 14:17:54
高1なんで結構初歩だと思います
564491:2007/10/30(火) 14:26:26
565デフォルトの名無しさん:2007/10/30(火) 14:40:19
>>564
>>533
余りくどいようだとソースごとそれっぽい大学に片端から送りつけるよ。
566デフォルトの名無しさん:2007/10/30(火) 14:48:04
共分散と相関係数算出プログラムと実験結果がほしいです。
お願いします。
567デフォルトの名無しさん:2007/10/30(火) 14:48:05
>>564
潔く再履修なり留年なりしたら?
568デフォルトの名無しさん:2007/10/30(火) 14:48:56
569デフォルトの名無しさん:2007/10/30(火) 15:05:06
>>564
本当にやってもらいたかったら分析ぐらい下方がいいと思うよ。
全部一気にやってくれと言っているからやってくれないのであって
(やるのにコストがかかりすぎる)分析してくれて
なおかつやって欲しいところを分割して出題してくれればやってもらえると思うよ

それすらできないのであればやっぱり留年するしかないと思う・・・
厳しいけどそういうものだ。
570デフォルトの名無しさん:2007/10/30(火) 15:11:06
このスレの存在意義は……とか言ってみる


だが自分でやれ>>491
571デフォルトの名無しさん:2007/10/30(火) 15:16:39
>>569
どんだけ粘着するんだよ
572デフォルトの名無しさん:2007/10/30(火) 15:23:52
>気に入らない質問やその他や発言はスルーの方向で。
573デフォルトの名無しさん:2007/10/30(火) 15:24:22
>>541 そうです。
前回のプログラムに条件を追加する課題です。
574デフォルトの名無しさん:2007/10/30(火) 16:07:29
>>66 = >>71 = >>93 = >>130 = >>194 = >>566
あくまで行列と確率にこだわるらしい
575デフォルトの名無しさん:2007/10/30(火) 16:50:03
>>491
aStudio4b528のsetup.exeが73MB、それをインストールすると100MB。
たった一度きりのためにそこまでする人間はあまりいない。
576デフォルトの名無しさん:2007/10/30(火) 16:54:10
>>575
いるかいないかは、お前には関係ないよ。
577デフォルトの名無しさん:2007/10/30(火) 16:56:22
共分散と相関係数算出プログラムと実験結果がほしいです。
1] 授業単元:情報処理
[2] 問題文(含コード&リンク): 共分散と相関係数算出プログラムと実験結果を求めよ
[3] 環境
 [3.1] OS: Windows
 
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: 2007年11月3日まで
お願いします。
578デフォルトの名無しさん:2007/10/30(火) 17:06:13
あんまりな暴言を吐く>>575>>491に見えたので>>491の課題は華麗にスルーすることに決めた
579デフォルトの名無しさん:2007/10/30(火) 17:09:33
いちいちそんなこと報告しなくていいんですよ。
580デフォルトの名無しさん:2007/10/30(火) 17:20:20
#include <stdio.h>
double dollar(double);
int yen;
int main(void)
{
scanf("%lf",¥);
printf("%f",dollar(yen));
return 0;
}
double dollar(double)
{
dollar = yen * (1.0/110.0);
return 0;
}
円をドルに変換するプログラムですが、
「浮動小数点の不正な使用」というエラーがでます。
修正お願いできますか?
581double yen:2007/10/30(火) 17:21:21
>>580
>1
582デフォルトの名無しさん:2007/10/30(火) 17:27:47
¥
&yen
583デフォルトの名無しさん:2007/10/30(火) 17:29:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1ドル=110円で円を入力しドルで表示するプログラムを作れ
[3] 環境
 [3.1] ビスタ
 [3.2] Borlandのコンパイラ
 [3.3] C
[4] 期限:ナシ
[5] その他の制限:
#include <stdio.h>
double dollar(double);
int yen;
int main(void)
{
scanf("%lf",\);
printf("%f",dollar(yen));
return 0;
}
double dollar(double)
{
dollar = yen * (1.0/110.0);
return 0;
} 途中までシコシコやったからこれを改変してやってもらいたい
584デフォルトの名無しさん:2007/10/30(火) 17:30:41
double dollar(double)
{
dollar = yen * (1.0/110.0);
return 0;
}
なんかVBっぽい。
585デフォルトの名無しさん:2007/10/30(火) 17:32:34
アカン
初心者やから根本的に間違ってる気がしてきた
アカン
586デフォルトの名無しさん:2007/10/30(火) 17:32:53
>>583
#include <stdio.h>
double dollar(double yen);

int main(void)
{
double yen;
scanf("%lf",¥);
printf("%f",dollar(yen));
return 0;
}
double dollar(double yen)
{
return yen * 110.0;

}
587デフォルトの名無しさん:2007/10/30(火) 17:35:23
それじゃ1円が100ドルだ。
588デフォルトの名無しさん:2007/10/30(火) 17:37:03
お前らわざと間違えてるだろうww
589デフォルトの名無しさん:2007/10/30(火) 17:41:09
yen * (1.0/110.0);
return yen

これではだめなんすかね?
590デフォルトの名無しさん:2007/10/30(火) 17:43:49
return yen / 110.0;
で十分だろ
591デフォルトの名無しさん:2007/10/30(火) 17:48:41
#include <iostream>
#define YEN 110.0

int main()
{
double dollar;
std::cin >> dollar;
std::cout << "\\" << dollar * YEN << std::endl;
return 0;
}
592デフォルトの名無しさん:2007/10/30(火) 18:44:48
#include <stdio.h>
#define YEN_DOLLAR_RATE (110.)
int main()
{
int yen;
scanf("%d", & yen);
printf("%g\n", yen / YEN_DOLLAR_RATE);
return 0;
}
593デフォルトの名無しさん:2007/10/30(火) 18:50:28
>>507
>>508
間違っているようで再提出を求められたのですが分かりません。
お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5184.txt
594デフォルトの名無しさん:2007/10/30(火) 18:52:41
【簡単のため】【簡単のため】【簡単のため】
http://academy6.2ch.net/test/read.cgi/gengo/1193737465/
595デフォルトの名無しさん:2007/10/30(火) 19:20:00
596デフォルトの名無しさん:2007/10/30(火) 19:27:39
#include <stdio.h>
#include <math.h>
void divhalf(double *, double *,double a,double c);
double f(double x, double a,double c);

main(){
double a,c,x,x_1,x_2,xm;
int nc=0;
a=c=3; x_1=0;x_2=1;

while(nc<50){
divhalf(&x_1,&x_2,a,c);
xm=(x_1+x_2)/2;
printf("%d %f %f %f\n",nc, x_1,x_2, f(xm,a,c));
nc++;
if(fabs(f(xm,a,c))< 0.000001)break;
}

}

void divhalf(double *x_1, double *x_2,double a,double c){
double x_m=(*x_1+*x_2)/2;
if(f(*x_1,a,c)*f(x_m,a,c)>0) *x_1=x_m; else *x_2=x_m;
}


double f(double x, double a,double c){return tan(c*x)-a;}
597デフォルトの名無しさん:2007/10/30(火) 19:39:17
// なんだ、被り捲くりだなぁ。まぁいいか。
#include <stdio.h>
#include <math.h>
static double f(double x, double a, double c)
{
return tan(x * c) - a;
}

static void divHalf(double * x1, double * x2, double a, double c)
{
double xm = (* x1 + * x2) / 2;
if (f(* x1, a, c) * f(xm, a, c) > 0) {
* x1 = xm;
} else {
* x2 = xm;
}
}

int main()
{
int nc;
double a, c, x1, x2;
scanf("%lf%lf%lf%lf", & a, & c, & x1, & x2);

for (nc = 1; nc < 50; ++nc) {
double xm = (x1 + x2) / 2;
printf("%d %g %g %g\n",nc, x1, x2, f(xm, a, c));
if (fabs(f(xm, a, c)) < 0.000001) break;
divHalf(& x1, & x2, a, c);
}
return 0;
}
598デフォルトの名無しさん:2007/10/30(火) 21:48:15
ページランク を求めるプログラムを作ってください。(PageRankはGoogleの商標です)
詳しい導出方法はGoogle の秘密 - PageRank 徹底解説の3章に載っていますが
簡単に説明すると
ページがn枚ある場合、n×nの2次元配列を用意する。
ページiからページjにリンクがある場合、mat[j][i] = 1 / num_link[i]とする。
ただしnum_link[i]はi番目のページから出ているリンクの総数。
2次元配列の固有値、固有ベクトルを求める。
出力された固有ベクトルから合計が1になるような固有ベクトルを算出する
という流れになります。 http://ja.doukaku.org/48/

#include <iostream>
#define N 1000
using namespace std;

void main(){
int m,n;
float** a=new float* [N];for(m=0;m<N;m++)a[m]=new float [N];

for(m=0;m<N;m++)for(n=0;n<N;n++)
if(rand()%N<20)a[m][n]=1; else a[m][n]=0;

int sum;
for(n=0;n<N;n++){
sum=0;
for(m=0;m<N;m++)sum+=a[m][n];
for(m=0;m<N;m++)a[m][n]/=sum;}

//ここまでが行列の初期化 ここからコードを書いて下さい

}
599デフォルトの名無しさん:2007/10/30(火) 21:48:15
>>577
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5186.txt

データはファイルから読み込むようにしてます。
実験用データがどのような形式で列挙されているのか解らないので
その辺は適宜書き換えてください。
600デフォルトの名無しさん:2007/10/30(火) 21:49:46
ページランク?以前に全く同じ質問が出たような気がするが
601デフォルトの名無しさん:2007/10/30(火) 21:55:50
C#ですいません
http://www.katch.ne.jp/~h-inoue/tips/cs/0002.html
ここに書いてるclassを呼び出す記述がわかりません。。
ちなみにFormにはテキストボックス(TextBox1)とボタン(button1)があり
テキストボックスにURLを打ち込んで、ボタンを押すと、実行されるように
したいのですが・・・
どなたかわかる方がおられましたらよろしくお願いします
602デフォルトの名無しさん:2007/10/30(火) 22:02:19
テンプラ食ってこい
603デフォルトの名無しさん:2007/10/30(火) 22:45:05
>>599
ありがとうございます。
604デフォルトの名無しさん:2007/10/30(火) 22:53:31
>>601
スレ違い&マルチ
605デフォルトの名無しさん:2007/10/30(火) 22:54:43
>> 598
リンク先にはライブラリ使うとか書いてあるけど、使用していいライブラリとかあるの?
それとも、固有値計算を自力でやれってこと?
606デフォルトの名無しさん:2007/10/30(火) 23:03:44
今科学技術計算の本を読んだけど固有値を求めるのは難しいな
ヤコビ法というのが一番簡単なんだが
607デフォルトの名無しさん:2007/10/30(火) 23:09:27
>>605
固有値は、1になるみたいだよ

たとえば A={{a,b}{c,d}} a+c=1 b+d=1とすると|A + E|=0となる
一般に A={ a(m,n) }に対してa(0,n)+・・・+a(m,n)=1 が全てのnについて成り立つならば|A + E|=0

計算方法は不明
608デフォルトの名無しさん:2007/10/30(火) 23:11:30
まちがえた |A - E|=0だ

グーグル行列 Aに対し Ax = xとなる連立方程式を解けばいい
609デフォルトの名無しさん:2007/10/30(火) 23:17:38
>>607,>>608
最近出没してるコードを書けない回答者きどりの人?
嘘まで混ぜるようになったの?
610デフォルトの名無しさん:2007/10/30(火) 23:19:48
>>608
嘘じゃないよ 固有値は1になるよ
611デフォルトの名無しさん:2007/10/30(火) 23:20:28
>>609の回答に期待
612デフォルトの名無しさん:2007/10/30(火) 23:25:17
テンプレ埋めないようなやつの回答でもめるのはよそうぜ
613デフォルトの名無しさん:2007/10/30(火) 23:25:34
>>598
リンク先よく見たら、C#とかDでライブラリ使わないコードがあるね。
これをCにすれば良さそうだが、これはホントに宿題なのかという疑問。
614デフォルトの名無しさん:2007/10/30(火) 23:30:30
固有値計算のCライブラリって無いんですか?
615デフォルトの名無しさん:2007/10/30(火) 23:34:04
MATLAB
616デフォルトの名無しさん:2007/10/30(火) 23:36:07
GSL
617デフォルトの名無しさん:2007/10/30(火) 23:41:08
>>615,616
ありがとん。

GSL良さげですね。
618544 ◆gKLa0lVLKo :2007/10/30(火) 23:46:53
>>549,>>552
お礼が遅れて申し訳ありません。

おかげで助かりました。
ありがとうございます。
619デフォルトの名無しさん:2007/10/30(火) 23:48:34
for(o=0;o<p_num;o++){
fseek(fp3,0L, SEEK_SET);
while(!feof(fp3)){
fscanf(fp3,"%d",&num_x2);
printf("%d\n",num_x2);
if(num_x2<0){
break;
}
if(num_x2==pickup[o]){
for(l=0;l<p_num;l++){
while(1){
printf("*");
fscanf(fp3,"%c",&moji);
if(moji=='<'){
fscanf(fp3,"%d",&num_y2);
for(m=0;m<p_num;m++){
if(pickup[m]==num_y2){
n++;
}
}
break;
}
}
}
}
while(1){
fscanf(fp,"%c",&moji);
if(moji=='\n'){
break;
}
}
}
620デフォルトの名無しさん:2007/10/30(火) 23:49:38
619のプログラムですが
最初の方で無限ループしてしまってるようです
何か気になる点があったら、ご指摘御願いします

この部分を飛ばしてプログラムを走らせると、希望通りに終わってくれてるので
この中のどこかだと思うのですが・・・
621デフォルトの名無しさん:2007/10/30(火) 23:53:08
>>620
C言語ではfscanf()を行ってからfeof()で判定する。
BASICとは順番が逆だよ
622デフォルトの名無しさん:2007/10/30(火) 23:59:17
>>620
fscanfが失敗してて、ファイル読み込みが進んでないとか。
fscanfの戻り値が1(入力項目の個数)じゃなかったら失敗してるよ。
623デフォルトの名無しさん:2007/10/31(水) 00:12:18
>>614
clapack
atlas
624デフォルトの名無しさん:2007/10/31(水) 01:11:38
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):下の関数のi,j,kの値をトレースせよ
int main(void)
{
int i,j,k;
int a[3][4]={{1,2,3,4}, {5,6,7,8}, {9,0,1,2}};
int b[4][3]={{1,2,3}, {4,5,6}, {7,8,9}, {0,1,2}};
int c[3][3];
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j]=0;
for(k=0;k<4;k++){
c[i][j]+=a[i][k]*b[k][j];
}
}
}
for(i=0;i<3;i++){
printf("c[%d][0,1,2]:(",i);
for(j=0;j<3;j++){
printf("%d,", c[i][j]);
}
printf(")\n");
}
return 0;
}

[3] 環境
 [3.1] OS:Vista
 [3.2] コンパイラ名とバージョン:bcc5.5.1
 [3.3] 言語:C
[4]期限:10月31日03:30まで  期限が短くて申し訳ありませんがよろしくお願いします
625デフォルトの名無しさん:2007/10/31(水) 01:24:06
>>624
(i,j,k)=
 (0,0,0)→(0,0,1)→(0,0,2)→(0,0,3)
→(0,1,0)→(0,1,1)→(0,1,2)→(0,1,3)
→(0,2,0)→(0,2,1)→(0,2,2)→(0,2,3)
→(1,0,0)→(1,0,1)→(1,0,2)→(0,0,3)
→(1,1,0)→(1,1,1)→(1,1,2)→(1,1,3)
→(1,2,0)→(1,2,1)→(1,2,2)→(1,2,3)
(2,0,0)→(2,0,1)→(2,0,2)→(2,0,3)
→(2,1,0)→(2,1,1)→(2,1,2)→(2,1,3)
→(2,2,0)→(2,2,1)→(2,2,2)→(2,2,3)

typoがあったらすまんね
(というか(0,0,4)とかの条件判断で落とされるのも含むべきか?)
626625:2007/10/31(水) 01:26:25
あ、よく見たら後半もあったのねw
後半部

 (0,0,4)→(0,1,4)→(0,2,4)
→(1,0,4)→(1,1,4)→(1,2,4)
→(2,0,4)→(2,1,4)→(2,2,4)
627デフォルトの名無しさん:2007/10/31(水) 01:49:22
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
(1)二次方程式ax^2+bx+c=0の各係数a,b,cを引数として渡し、
その解を戻り値として返すプログラムを作成する。

(2)float height[12]={140.5,150.4,181.3,175.3,121.7,136.4,138.5,122.5,181.3,135.3,121.5,136.0};
float weight[12]={50.4,48.6,80.4,46.4,44.4,99.9,40.4,40.6,66.4,42.4,40.4,39.3};を用いて

男a 140.5cm 50.4kg b 150.4cm 48.6kg c 181.3cm 80.4kg d 175.3cm 46.4kg e 121.7cm 44.4kg f 136.4cm 99.9kg
女a 138.5cm 40.4kg b 122.5cm 40.6kg c 181.3cm 66.4kg d 135.3cm 42.4kg e 121.5cm 40.4kg f 136.0cm 39.3kg
それぞれ男の身長、体重、女の身長、体重、全体の身長、体重の平均値を求めよ。

(3)TRY&ERROR法を用いて、3,4,5,6,7,8,9それぞれの時のx乗が10になるxの値を求めよ。

[3] 環境
[3.1] OS Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限:10/30の12時
[5] その他の制限:(3)の精度は小数点以下第5位まで。
よろしくお願いします。
628624です:2007/10/31(水) 02:05:05
こんな感じでいいんでしょうか?
改善すべき場所などありましたら助言お願いいたします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5188.txt
629デフォルトの名無しさん:2007/10/31(水) 02:42:50
#include <stdio.h>
#define gosa 0.000001

double pow(double z,int n){double w=1;for(int i=0;i<n;i++)w*=z;return w;}
double h(double z,int n){z=z-(pow(z,n)-10)/(n*pow(z,n-1));return z;}

main(){
double z,w;
int i,n;z=10;
// r 真値 d 誤差 (r+d)^n - r^n ≒ ndr^(n-1)
for(n=3;n<10;n++){
printf("\nx^%d=10となるxをもとめる\n", n);
for(i=1;i<6;i++){
z=h(z,n);
w=z*z-10;
printf("%d回目 %.10f\n",i, z);
if(w<gosa*n*pow(z,n-1) && w>-gosa*n*pow(z,n-1))break;
}}}
630629 改良:2007/10/31(水) 02:49:11
#include <stdio.h>
#define gosa 0.000001

double pow(double z,int n){double w=1;for(int i=0;i<n;i++)w*=z;return w;}
double h(double z,int n){z=z-(pow(z,n)-10)/(n*pow(z,n-1));return z;}

main(){
double z,w;
int i,n;z=10;
// r 真値 d 誤差 (r+d)^n - r^n ≒ ndr^(n-1)
for(n=3;n<10;n++){
printf("\nx^%d=10となるxをもとめる\n", n);
for(i=1;i<100;i++){
z=h(z,n);
w=(pow(z,n)-10)/(n*pow(z,n-1));
printf("%d回目 x=%.20f 誤差=%.10f\n",i, z,w);
if(w<gosa && w>-gosa)break;
}}}
631デフォルトの名無しさん:2007/10/31(水) 03:45:45
これより速いソートプログラム書ける? 重複行は削除すること

そ〜太 2nd http://park15.wakwak.com/~yu-ki/software.htm

テストデータ生成

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main(){
string s,t="あぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺ
ほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎
或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭";

int M=t.size()/2,i,j,d,n;
fstream fp("sorttest.txt",ios::out);
for(i=0;i<80000;i++){
s="";for(int k=0;k<20;k++){
d=2+rand()&0xF;
for(j=0;j<d;j++){n=rand()%M;s+=t.substr(2*n,2);}
s+="\n";}
fp<<s;}}
632デフォルトの名無しさん:2007/10/31(水) 04:07:21
標準のSTLだとメモリ食う上に鈍い 

#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <time.h>
using namespace std;

void main(){
set<string> s; string buf;
int cl=clock();
fstream fp("sorttest.txt",ios::in);
for(;;){
getline(fp, buf);if(fp.eof())break;
s.insert(buf);}

fstream fq("sortzumi.txt",ios::out);
set<string>::iterator p= s.begin();
while(p!= s.end()){fq << *p << endl;p++;}
cl=clock()-cl;cout <<cl;}
633デフォルトの名無しさん:2007/10/31(水) 04:24:13
vector<string>に入れてstd::sortしてstd::unique掛けたらどうかな
634デフォルトの名無しさん:2007/10/31(水) 09:04:06
とりあえず500MBのテキストのソートが実感湧かないな
そんなにでかいテキストは扱った事無い
635デフォルトの名無しさん:2007/10/31(水) 10:30:35
500MB……概算で500000000バイトだから、
全角文字で250000000文字だから、400字詰め原稿用紙単純換算で650000枚……

小説一つ分程度かと思って計算したら予想以上に多いな
636デフォルトの名無しさん:2007/10/31(水) 10:33:23
実験データの加工なんかで1M行のテキストを扱うこともしばしばだけど、流石にソートはしないなぁ。
で、宿題スレで宣伝している阿呆な>631は作者なの? だったら自分でSTLと比較した実測値くらい出したら?
まぁまさか、手元にあるのがsseも使えないCPUばかりだから恥ずかしくて実測値を出せないなんてこともないだろうし。
637デフォルトの名無しさん:2007/10/31(水) 10:39:03
>>627(1)
#include<stdio.h>
#include<math.h>
struct tuple
{
double fst;
double snd;
};
double discriminant( double coeffs[] )
{
return coeffs[1] * coeffs[1] - 4.0 * coeffs[0] * coeffs[2];
}
/* 解けない場合は未定義 */
void getQuadEqRoots( struct tuple *solvs, double coeffs[] )
{
double d = sqrt( discriminant( coeffs ) );
solvs->fst = (-coeffs[1]+d)/(2.0 * coeffs[0]);
solvs->snd = (-coeffs[1]-d)/(2.0 * coeffs[0]);
return;
}
int main(void)
{
double coeffs[3] = { 1.0, 1.0, -2.0 };
struct tuple solvs;
if(discriminant( coeffs ) >= 0.0)
{
getQuadEqRoots( &solvs, coeffs );
printf("alpha=%lf,beta=%lf\n",solvs.fst, solvs.snd);
}else{printf("the polynomial has no real roots\n"); }
return 0;
}
638デフォルトの名無しさん:2007/10/31(水) 10:40:06
STL版の時間かかっているところは主にファイルを1行ずつ読んでいるところだとおもう
639デフォルトの名無しさん:2007/10/31(水) 10:41:30
戻り値voidじゃなくてboolにして成功する場合trueを返すようにすればよかった。
640627:2007/10/31(水) 11:30:37
期限間違えました。11月1日の12時までです。

よろしくお願いします。
641デフォルトの名無しさん:2007/10/31(水) 11:35:03
とりあえず小説一冊でも500kBいけば大著。
1MBいく本は早々無いな
100MBのテキストデータをソートするなんてのはきっと国ぐらいだろう
642デフォルトの名無しさん:2007/10/31(水) 12:12:30
手元に4096x4096の実数値が入ったテキストファイル(200MiB超)があったのでソートしてみた。
--
[user@foo /tmp]$ time sort v1_r.txt > foo

real 0m58.864s
user 0m46.452s
sys 0m11.849s
[user@foo /tmp]$ time wc v1_r.txt
4096 16777216 226707147 v1_r.txt

real 0m31.798s
user 0m31.683s
sys 0m0.112s
[user@foo /tmp]$
--
wcの所要時間から見ると、えらく速くソートできたなw
643デフォルトの名無しさん:2007/10/31(水) 12:28:44
ゼミの課題
void main(int argc,char** argv){
として
プログラム名、パラメータを標準出力するプログラム。
ただし変数型を適宜変換すること
(例えばパラメータに"1"があったらchar型からint型に変えて表示する)
[3.1]Windows XP
[3.2]bcc
[3.3]C
[4]11/6
よろしくお願いします
644デフォルトの名無しさん:2007/10/31(水) 12:31:17
1行1データにばらして実測。
--
[user@foo /tmp]$ time wc fooz
16777216 16777216 243480267 fooz

real 0m49.162s
user 0m47.278s
sys 0m0.145s
[user@foo /tmp]$ time sort fooz > foo ; time sort -u fooz > foo

real 4m32.997s
user 4m24.198s
sys 0m3.291s

real 3m28.555s
user 3m25.035s
sys 0m1.876s
--
流石に時間が掛かるようだ。
で、誰かこのテストデータ要る?w
645デフォルトの名無しさん:2007/10/31(水) 12:32:55
>>643
>(例えばパラメータに"1"があったらchar型からint型に変えて表示する)
どうせ表示するのに、何その無駄な作業w
646デフォルトの名無しさん:2007/10/31(水) 15:02:06
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5190.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc

 [3.3] 言語: C++
[4] 期限: 11/1 18時
[5] その他の制限:

よろしくお願いします
647644:2007/10/31(水) 15:19:05
で、作ってみた。
# iostreamの方が遅かったのでcstdio版
--
#include <cstdio>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char ** argv)
{
if (argc < 2) return 1;
FILE * fp = fopen(argv[1], "r");
vector<string> vecStrs;
char buf[100];
while (fgets(buf, sizeof(buf), fp) != NULL) {
vecStrs.push_back(buf);
}
fclose(fp);
sort(vecStrs.begin(), vecStrs.end());
vecStrs.erase(unique(vecStrs.begin(), vecStrs.end()), vecStrs.end());
for (vector<string>::const_iterator it = vecStrs.begin(); it != vecStrs.end(); ++it) {
printf("%s", it->c_str());
}
return 0;
}
--
real 1m58.819s
user 1m57.001s
sys 0m1.628s
--
sortコマンド涙目w
648デフォルトの名無しさん:2007/10/31(水) 15:48:13
>>646
// 面倒なんで、unified-diff形式で。
// 要は、main()の前にテーブルを追加して、後はそれぞれ修正するだけ。
@@ -14,0 +15,11 @@
+static const struct {
+ int addDays;
+ int firstNum;
+ int addNum;
+} itemTable[] = {
+ {3, 300, 350},
+ {4, 350, 400},
+ {5, 400, 450},
+ {6, 450, 500},
+ {7, 500, 550},
+};
@@ -30 +41 @@
- int ADD_NUM = 300;
+ int ADD_NUM = itemTable[count - 1].addNum;
@@ -32 +43 @@
- int ADD_DAYS = α;
+ int ADD_DAYS = itemTable[count - 1].addDays;
@@ -37 +48 @@
- num = prev_num = FIRST_NUM;
+ num = prev_num = itemTable[count - 1].firstNum;
@@ -55 +66 @@
- if(num<=100*α+1*sqrt(100/3)*sqrt(α) && day>=inc_day)
+ if(num<=100*ADD_DAYS+1*sqrt(100/3)*sqrt(ADD_DAYS) && day>=inc_day)
649デフォルトの名無しさん:2007/10/31(水) 16:03:00
>>648
実行できました。
ありがとうございました。
650デフォルトの名無しさん:2007/10/31(水) 17:19:27
>>>645
いや無駄じゃないかもしれないぞ
パラメータをcharからintに直すのは基本的で重要な作業だ
>>643はその部分の問題を抽出したんだろう
651デフォルトの名無しさん:2007/10/31(水) 17:23:46
>>595
>>596
>>597
できました。ありがとうございました。
652デフォルトの名無しさん:2007/10/31(水) 17:31:51
>>647 Cで書いてみた。よければ測ってみてw

#include <stdlib.h>
#include <stdio.h>
int scomp(const void *a, const void *b) {
 return strcmp(*(char *const *)a, *(char *const *)b);
}
int main(int argc, char **argv) {
 int i, buffsize = 1024, datamaxsize = 1, datasize = 0;
 char **data = (char **)malloc(datamaxsize * sizeof(char *));
 char buff[buffsize], *p, *delim = "\r\n\t ", *saveptr, *last = "";
 FILE *in = 0 < argc ? fopen(argv[1], "r") : 0;
 if (in) while (fgets(buff, buffsize, in) != NULL) {
  for (p = strtok_r(buff, delim, &saveptr); p; p = strtok_r(0, delim, &saveptr)) {
   if (datamaxsize <= datasize) {
    datamaxsize *= 2;
    data = realloc(data, datamaxsize * sizeof(char *));
   }
   data[datasize++] = strdup(p);
  }
 }
 fclose(in);
 qsort(data, datasize, sizeof(char *), scomp);
 for (i = 0; i < datasize; i++) {
  if (strcmp(last, data[i]) != 0) puts(data[i]);
  last = data[i];
 }
 return 0;
}
653デフォルトの名無しさん:2007/10/31(水) 17:50:37
1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):
  // Calculate +, -, *, /, and , %
#include <iostream>
using namespace std;
int main() { int a, b, wa, sa; int seki; int sho; int amari; // 余り
// cout << "Input a = "; cin >> a; // a の入力
cout << "Input b = "; cin >> b; // b の入力
wa = a + b; sa = a - b; seki = a * b;
if ( b != 0 ) { // b が 0 ならば割算できない。 sho = a/b; amari = a % b; }
cout << " a = " << a << " b = " << b << endl; // a, b の出力
if ( b != 0 ){ //割算可能な場合
if ( amari == 0 ){ // 割り切れる場合
cout << "和= "<< wa << " 差= " << sa
<< " 積= "<< seki << " 商= "<< sho << endl; }
else{ //余りが出る場合
cout << "和= "<< wa << " 差= " << sa
<< " 積= "<< seki << " 商= "<< sho
<<" 余り= "<< amari << endl; } }else{ //割算不可能な場合
cout << "和= "<< wa << " 差= " << sa
<< " 積= "<< seki << "b が 0 なので a/b は不能!!" << endl; }
return 0; }
これだと2つの数の積が一定以上になると計算結果がおかしくなる。 その問題を解決したプログラムを作れ。
[3] 環境 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C++
[4] 期限: 11/1 8時
[5] その他の制限:なし
よろしくお願いします。
654デフォルトの名無しさん:2007/10/31(水) 18:01:24
>>653

Karatsuba法つかえ

( a + bX ) ( c + dX ) = ac + { ( a + b )( c + d ) -ac -bd } X + bd X^2
655デフォルトの名無しさん:2007/10/31(水) 18:11:35
32bit 、64bit コンパイラだと整数(int)演算は内部で何ビットまで計算可能なんですか?
656652:2007/10/31(水) 18:12:06
a = ('a'..'z').to_a + ('A'..'Z').to_a + ["\n"] * 5
max = 200 * 1024 * 1024 # bytes
sum = 0
while sum < max
c = a[rand(a.size)]
print c
sum += c.size
end
でテケトーにでっち上げたファイル us.txt を使ってみた。
$ time wc us.txt
18393191 16781068 209715200 us.txt

real 0m39.699s
user 0m1.999s
sys 0m0.671s

$ time sort us.txt > foo

real 3m45.018s
user 1m10.577s
sys 0m18.077s

$ time ./a.exe us.txt > foo

real 1m20.217s
user 0m59.436s
sys 0m15.108s
やはりsortコマンド涙目w
657デフォルトの名無しさん:2007/10/31(水) 18:45:53
BCCだと内部は32ビットみたいだ
多倍長作るときは演算が溢れないようにしないと

#include <iostream>
using namespace std;
#define N 33000
main(){
unsigned int a;
a=4*N*N-3*N*N;
cout<<a<<endl;}
658デフォルトの名無しさん:2007/10/31(水) 18:50:56
Karatsuba法つかうとき、 ( a + b )( c + d )の部分が32bitで収まればいいだろう
全てが同じ値だとすると4a*aだからこれが32bit以下になるとすると、a,b,c,d < Xだから X=2の15乗とすれば良いな

( a + bX ) ( c + dX ) = ac + { ( a + b )( c + d ) -ac -bd } X + bd X^2
659644:2007/10/31(水) 19:01:21
>>652
ひょっほ、std::string使わないから速いこと速いこと。
--
real 0m37.009s
user 0m35.683s
sys 0m1.319s
--
一応、sort -uと同じ条件にする為にデリミタを"\r\n"にしたけど。
ちなみにgccでは42秒掛かっている。
660デフォルトの名無しさん:2007/10/31(水) 19:02:42
スレ立ててそこでやれ
661デフォルトの名無しさん:2007/10/31(水) 19:05:34
>>653
途中までやった

#include <iostream>
#include <vector>
#define X 32767 //2^15 - 1
using namespace std;

class seisu {
char fugou;
vector<unsigned short int> x;

public:

seisu operator + (seisu& su){
int n;
for(n=0;n<x.size();n++)x[n]+=su.x[n];
return *this;}

};


main(){}
662661:2007/10/31(水) 19:07:25
演算結果が負か正か初めにチェックして、基数の桁上がりがあるかどうかをいれる必要あり
663デフォルトの名無しさん:2007/10/31(水) 19:16:34
[1] 授業単元:情報工学演習
[2] 問題文(含コード&リンク):スタックを用いて、nCmを求める再帰関数combinationから再帰呼び出しを除去せよ。nCm=n-1Cm-1+n-1Cmとする。
[3] 環境 
[3.1] OS: windows XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) 不明
[3.3] 言語: c言語
[4] 期限: 11月2日
[5] その他の制限: なし
自分でcombinationの関数作りました。

#include<stdio.h>
int combination(int x,int y){
int a;
if(y==1) return x;
else if(x==y) return 1;
a=combination(x-1,y-1)+combination(x-1,y);
return a;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
printf("%d\n",combination(n,m));
}
このプログラムの関数を直してもらえるとありがたいです
664デフォルトの名無しさん:2007/10/31(水) 19:36:32
今後使えるように多倍長演算をここで作っておこうぜ CとC++用
665627:2007/10/31(水) 19:53:16
637さん(1)ありがとうございました
666644:2007/10/31(水) 19:54:08
結局、>652のsortをqsort()からstd::sort()に替えたのが最速で35秒程度。
C++版も、std::unique()をやめて>652同様出力時にチェックしたら僅かに速くなった。
これにて、本日のCPUぶん回しテストは終了。

お騒がせしました。
667デフォルトの名無しさん:2007/10/31(水) 19:57:05
>>627
(2)のデータは12人分ずつあるが、6人ずつの平均を求めるのか?
(3)のTRY&ERROR法とは?
668デフォルトの名無しさん:2007/10/31(水) 19:59:04
(3)はやったのに礼無しかよ
669デフォルトの名無しさん:2007/10/31(水) 20:01:39
TRY&ERROR法

ねらいを定めて失敗ならやり直す アルゴリズムは限定されない自由な方法

開平法はTRY&ERRORでない
670667:2007/10/31(水) 20:05:29
つーかあれか、前6データが男ので後6データが女のってことか。
#include <stdio.h>

float height[12]={140.5,150.4,181.3,175.3,121.7,136.4,138.5,122.5,181.3,135.3,121.5,136.0};
float weight[12]={50.4,48.6,80.4,46.4,44.4,99.9,40.4,40.6,66.4,42.4,40.4,39.3};

static double average(float * begin, float * end)
{
unsigned num = 0;
double sum = 0;
for (float * it = begin; it != end; ++it) {
sum += * it;
++num;
}
return sum / num;
}
int main()
{
printf("男の身長:%g、体重:%g、女の身長:%g、体重:%g、全体の身長:%g、体重:%g\n",
average(height, height + 6), average(weight, weight + 6),
average(height + 6, height + 12), average(weight + 6, weight + 12),
average(height, height + 12), average(weight, weight + 12));
return 0;
}
671627:2007/10/31(水) 20:06:59
>>668さん

すいません、せっかく改良までしていただいたのに見忘れていました。
そして今コンパイルしたのですが、4行目でエラーが出てよくわかりませんでした…

>>667さん 男6人、女6人、全体12人、それぞれの場合を求めます。TRY&ERROR法の説明はありませんでした。すいません



 
672デフォルトの名無しさん:2007/10/31(水) 20:10:05
627これは?

#include <stdio.h>
#define gosa 0.000001

double pow(double z,int n){
double w=1;
for(int i=0;i<n;i++)
w*=z;
return w;}

double h(double z,int n){
z=z-(pow(z,n)-10)/(n*pow(z,n-1));
return z;}

main(){
printf("%f",pow(3,7));
}
673667:2007/10/31(水) 20:11:32
>>671
>630 の4行目、for (int i = 0; でエラーが出るならint i; for (i = 0; にして味噌。
674デフォルトの名無しさん:2007/10/31(水) 20:16:48
どうでもいいけど、>629=>630=>672は思いっきり勘違いしていそうだ。
勘違いはさておくと、9乗を掛け算で計算するのは誤差が却って大きくなりそうだ。
675デフォルトの名無しさん:2007/10/31(水) 20:21:54
>>674
すまん 直して来る
676デフォルトの名無しさん:2007/10/31(水) 20:24:08
677627:2007/10/31(水) 20:25:31
>>670さん

10 11行目でエラーが出てしまいました。

>>673さん

参考になりました。ありがとうございます。
678667:2007/10/31(水) 20:31:48
>>677
>10 11行目でエラーが出てしまいました。
あーそれも同じだ。
- for (float * it = begin; it != end; ++it) {
+ float * it;
+ for (it = begin; it != end; ++it) {
679627:2007/10/31(水) 20:44:03
>>678さん

そうですね!出来ましたありがとうございました。
680デフォルトの名無しさん:2007/10/31(水) 20:44:19
logとかexpつかうのは反則だよな

#include <stdio.h>
#include <math.h>
#define gosa 0.000001

double h(int n,double z){z=z-(pow(n,z)-10)/(log(n)*pow(n,z));return z;}

main(){
double z,w;
int i,n;z=10;
for(n=3;n<10;n++){
printf("\n%d^x=10となるxをもとめる\n", n);
for(i=1;i<5;i++){
z=h(n,z);
printf("%d回目 x=%.20f 誤差=%.10f\n",i, z,w);
}}}
681デフォルトの名無しさん:2007/10/31(水) 20:47:56
#include <stdio.h> のみで真値との誤差が0.000001以下になるやつをつくろう
682デフォルトの名無しさん:2007/10/31(水) 20:49:01
だが断る
683デフォルトの名無しさん:2007/10/31(水) 20:53:55
2の x乗 をどう計算するのか
684デフォルトの名無しさん:2007/10/31(水) 21:02:21
xの範囲は?
685デフォルトの名無しさん:2007/10/31(水) 21:03:34
2の x乗 = 10を求めるのに必要な範囲の実数
686デフォルトの名無しさん:2007/10/31(水) 21:04:59
log_2(n) とか使ったら駄目だよ log_2(10)として答えが求まってしまうから
687デフォルトの名無しさん:2007/10/31(水) 21:09:28
p=m/nを有理数として、2^m - 10* 2^n がどのくらいの値だったら真値との誤差が0.000001以下になるのか?
688652:2007/10/31(水) 21:20:00
qsortが微妙に「速くない」との噂(?)を裏付けるものですね。
楽しいひと時をどうもありがとん! エンジョイプログラミング! ;-)
689652:2007/10/31(水) 21:20:49
おっと>>688>>666宛て。
690デフォルトの名無しさん:2007/10/31(水) 21:21:21
2^x = 10の解を r とし、近似解をpとする 
その誤差をdとし、D=2^r - 2^pとおくと d<=D
Dが0.000001以下ならdの誤差も保証される
691デフォルトの名無しさん:2007/10/31(水) 21:50:15
#include <stdio.h>
#define gosa 0.01


main(){
int n,a=1,b=1;
double p=10,q=2,d;
for(;;){
d=p/q-1;
if(d<gosa && d>-gosa)break;
if(d>0){q*=2;a++;} else {p*=10;b++;}
printf("%d %d \n",a,b);}
printf("%d %d %f\n",a,b,(a+0.0)/b );
}
692691:2007/10/31(水) 21:54:32
#define gosa 0.001とか小さくすると、2の1000乗とかの計算になり落ちる 
浮動小数点では計算不可能か ?
693デフォルトの名無しさん:2007/10/31(水) 22:28:46
あほ丸出しの変数宣言に
汚いソースだなぁ
よく人にそんなもの見せられるわぁ
694691:2007/10/31(水) 22:39:48
そんなこといってないで

2^(m/n) = 10 + d

|d|<0.001となるものをみつけろ
695691:2007/10/31(水) 23:05:31
#include <stdio.h>
#define gosa 0.001
main(){
double r=5;
int a=1,b=1;
for(;;){
if(r-1<gosa && r-1>-gosa)break;
if(r>1){r/=2;a++;} else {r*=10;b++;}
printf("%d %d %.8f\n",a,b,(a+0.0)/b);}}
696完成版:2007/10/31(水) 23:10:46
誤差は適当に変えてくれ

#include <stdio.h>
#define gosa 0.0000001
main(){
int a=1,b=1,n;
double r;
for(n=2;n<10;n++){
r=10.0/n;
for(;;){
if(r-1<gosa && r-1>-gosa)break;
if(r>1){r/=n;a++;} else {r*=10;b++;}
}
printf("%d^x=10 を満たす解 %d / %d = %.12f\n",n,a,b,(a+0.0)/b);
}}
697デフォルトの名無しさん:2007/10/31(水) 23:12:30
訂正

#include <stdio.h>
#define gosa 0.0000001
main(){
int a,b,n;
double r;
for(n=2;n<10;n++){
r=10.0/n;a=b=1;
for(;;){
if(r-1<gosa && r-1>-gosa)break;
if(r>1){r/=n;a++;} else {r*=10;b++;}
}
printf("%d^x=10 を満たす解 %d / %d = %.12f\n",n,a,b,(a+0.0)/b);
}}
698デフォルトの名無しさん:2007/10/31(水) 23:13:10
何回も貼り付けるな
書き込む前によくチェックしろ
699デフォルトの名無しさん:2007/11/01(木) 00:12:57
[1] 授業単元: C言語基礎
[2] 問題文(含コード&リンク):

1. キーボードから数字(0〜99)を入力できるようにする

2. 1で入力した数字を以下の例のように2byteのchar型の領域Aに格納せよ。
例:1で“12”と入力したらchar型の1byte目に"0x31"、2byte目に"0x32"で格納
1で“3” と入力したらchar型の1byte目に"0x30"、2byte目に"0x33"で格納

3. 2で格納した文字列を以下の例のように1byteのchar型の領域Bに変換し格納せよ。
例:1で“12”と入力したらchar型の領域に"0x12"で格納
1で“3” と入力したらchar型の領域に"0x03"で格納

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:なるべく早めで
[5] その他の制限: 特にありません。
700デフォルトの名無しさん:2007/11/01(木) 00:15:26
>1. キーボードから数字(0〜99)を入力できるようにする
これは「全角で入力できるようにせよ」ってことか?
701デフォルトの名無しさん:2007/11/01(木) 00:27:26
ありとあらゆる"数字"を入力できるようにするんだろ
702699:2007/11/01(木) 00:33:27
>>700
半角(0〜99)ですね。全角で書いてしまいました。
703デフォルトの名無しさん:2007/11/01(木) 00:36:29
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
二分木の実装を行う。

二分木の節点は構造体を用いて
struct n{
int a; //節点が保持するデータ
struct n *l; //左の子へのポインタ
struct n *r; //右の子へのポインタ
};
とする。

節点がない場合は、その節点はNULLとみなす。

深さ優先探索でたどること。

1.引数として節点へのポインタをとり、その節点を根とする二分木(部分木)の
高さを返す再帰関数int h(struct n *t)を作成せよ。

2.引数として接点へのポインタをとり、その節点を根とする二分木(部分木)を
削除する再帰関数void d(struct n *t)を作成せよ。
削除する順番に注意すること。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 金曜日の11時まで
[5] その他の制限: 必ず再帰を用いること。「幅優先探索」ではなく、
         「深さ優先探索」でたどること。
よろしくお願いします。
704デフォルトの名無しさん:2007/11/01(木) 00:44:43
>>699
#include <stdio.h>
main()
{
int num;
char A[2],B;
while( 1 ) {
scanf("%d",&num );
if ( num > 0 && num < 100 ) { break; }
}
A[0] = 0x30 | ( num/10 );
A[1] = 0x30 | ( num % 10 );
B = ( ( A[0] & 0x0f ) << 4 ) | ( A[1] & 0x0f );
printf( "num = %d\n", num );
printf( "A[0] = %#0x, A[1]=%#0x \n", A[0],A[1] );
printf( "B = %#04x\n", B );
}
705デフォルトの名無しさん:2007/11/01(木) 00:49:21
>>704
0-99 だった.
if ( num >= 0 && num <= 99 ) { break; }
706699:2007/11/01(木) 00:53:43
>>704
即レスありがとうございます。
実行してみて確認できました。
助かりました。
707デフォルトの名無しさん:2007/11/01(木) 00:58:50
>>703

#define maxof(a,b) ((a) > (b)) ? (a) : (b)


int h(struct n *t)
{
if (t) {
int l_height = h(t->l);
int r_height = h(t->r);

return maxof(l_height, r_height) + 1;
}
else {
return 0;
}
}


void d(struct n *t)
{
if (t) {
d(t->l);
d(t->r);
free(t);
}
}
708デフォルトの名無しさん:2007/11/01(木) 01:21:42
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: vista
 [3.2] コンパイラ名とバージョン: ?
 [3.3] 言語:C
[4] 期限: ([2007年11月1日9:00まで
[5] その他の制限:特になし

↓に問題を書きます。実行結果は自分の都合で載ってあるものより簡単になってます。
どうかよろしくお願いします
709デフォルトの名無しさん:2007/11/01(木) 01:22:27
[2] 問題文(含コード&リンク):

1.キーボードから数字を三つ入力し、そのうちの二つの数字の和を表示する。なお、
二つの数字の和を計算するために、keisan()関数を利用するものとする。
[使用関数]
 int keisan(int, int)
実行結果:数字を三つ入力してください:1 2 3
1 + 2 = 3
2 + 3 = 5
3 + 1 = 4

2.キーボードから数字を何回か入力していき、入力された数字の平均を表示する。
なお、入力された数値の合計と個数を計算するために、j_heikin()関数を利用するものとする。
[使用関数]
 void j_heikin(int)
実行結果:数値を複数入力してください(終了^z)
1
2
3
^z
入力した数値の平均は2です。

3.キーボードから数字を一つ入力し、入力された数字と同じ数の星を等しい二辺とする二等辺三角形を表示する。
なお、二等辺三角形の作成には引数の数だけ星を表示するstar()関数を利用するものとする。
[使用関数]
 void star(int)
三角形の一辺を入力してください:4
*
**
***
****
710デフォルトの名無しさん:2007/11/01(木) 01:22:31
下に書くとかしないで、うpろだ使えよ
711デフォルトの名無しさん:2007/11/01(木) 01:26:36
すいません、次回からは気をつけます。
今回はすでに書いてしまったのでこれでよろしくお願いします
712デフォルトの名無しさん:2007/11/01(木) 02:11:49
>>708
@
#include<stdio.h>
int keisan(int n,int m)
{
return n+m;
}
main()
{
int a,b,c;
printf("数字を三つ入力してください:");
scanf("%d%d%d",&a,&b,&c);
printf("%d + %d = %d\n",a,b,keisan(a,b));
printf("%d + %d = %d\n",b,c,keisan(b,c));
printf("%d + %d = %d\n",c,a,keisan(c,a));
}
A
#include<stdio.h>
int x[1000];
void j_heikin(int n)
{
int sum,i;
for(sum=i=0;i<n;i++) sum+=x[i];
printf("入力した数値の平均は%dです。\n",sum/n);
}
main()
{
int n=0;
printf("数値を複数入力してください(終了^z)\n");
while(scanf("%d",&x[n])==1) n++;
j_heikin(n);
}
713デフォルトの名無しさん:2007/11/01(木) 02:12:50
>>708
B
#include<stdio.h>
void star(int n)
{
int i;
if(n>1) star(n-1);
for(i=0;i<n;i++) printf("*");
putchar('\n');
}
main()
{
int n;
printf("三角形の一辺を入力してください:");
scanf("%d",&n);
star(n);
}
714デフォルトの名無しさん:2007/11/01(木) 02:16:54
715デフォルトの名無しさん:2007/11/01(木) 02:22:56
>>712-713
ありがとうございます!
そのまま解答させてもらいます
716703:2007/11/01(木) 02:47:30
>>707
ありがとうございます。
2点ほど疑問があるのですが、

#define maxof(a,b) ((a) > (b)) ? (a) : (b)
とはどういう意味ですか?
#define a 10とすると、aを10と定義すると言う意味なのは分かるので、
#define自体の意味は分かるのですが、その後の
maxof(a,b) ((a) > (b)) ? (a) : (b)の意味が全く分かりません。

それと、if(t)ってどういう意味ですか?if(t!=NULL)の様に、ifの中に
式がある使い方しか知らないのですが。
717デフォルトの名無しさん:2007/11/01(木) 07:36:27
>>716
別人。
上は関数マクロっていうからググれ。
if文の中にただの値がある場合。
0以外なら真、0なら偽と決まってる。
718デフォルトの名無しさん:2007/11/01(木) 08:20:17
>>707
return maxof(l_height, r_height) + 1;
の部分バグってね?
719707:2007/11/01(木) 08:34:25
>>718
あぁ、バグってんね
#define maxof(a,b) (((a) > (b)) ? (a) : (b))
でよさそうかな。

マクロなんて使わないで素直に関数にしとけという良い例になってしまった
720デフォルトの名無しさん:2007/11/01(木) 11:02:01
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): ファイル「kyotocity.txt」には、(2007年9月1日現在の)
京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されている。

これらの情報を格納する構造体 struct division を宣言しなさい。
struct division {
 char name[20];
 int population;
 double area;
}

struct division型の配列 kyoto[11]を用意し、
ファイルからデータを読んで、配列に入力しなさい。

入力した構造体の配列を調べて、以下の情報を出力しなさい。
人口が最大の区と最小の区の、名前と人口。
面積が最大の区と最小の区の、名前と面積。
人口密度が最大の区と最小の区の、名前と人口密度。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限: 特になし

kyotocity.txtの内容は↓に書きます。
721デフォルトの名無しさん:2007/11/01(木) 11:02:36
>>720

Kita 123167 94.92
Kamigyo 82867 7.11
Sakyo 168198 246.88
Nakagyo 102121 7.38
Higashiyama 41424 7.46
Yamashina 136222 28.78
Shimogyo 75900 6.82
Minami 98182 15.78
Ukyo 202712 291.95
Nishikyo 153887 59.20
Fushimi 284112 61.62

よろしくお願いします
722デフォルトの名無しさん:2007/11/01(木) 11:43:44
// >>721 前半
#include <stdio.h>
#include <stdlib.h>

struct division {
char name[20];
int population;
double area;
};

#define NUM_DIVISION 11
static struct division kyoto[NUM_DIVISION];
#define CITY_FILE "kyotocity.txt"

static void foo()
{
int popMinIdx = 0;
int popMaxIdx = 0;
int areaMinIdx = 0;
int areaMaxIdx = 0;
int densMinIdx = 0;
int densMaxIdx = 0;
for (int ic = 1; ic < NUM_DIVISION; ++ic) {
if (kyoto[ic].population < kyoto[popMinIdx].population) popMinIdx = ic;
if (kyoto[ic].population > kyoto[popMaxIdx].population) popMaxIdx = ic;
if (kyoto[ic].area < kyoto[areaMinIdx].area) areaMinIdx = ic;
if (kyoto[ic].area > kyoto[areaMaxIdx].area) areaMaxIdx = ic;
if (kyoto[ic].population / kyoto[ic].area < kyoto[densMinIdx].population / kyoto[densMinIdx].area) densMinIdx = ic;
if (kyoto[ic].population / kyoto[ic].area > kyoto[densMaxIdx].population / kyoto[densMaxIdx].area) densMaxIdx = ic;
}
// 以下後半へ
723デフォルトの名無しさん:2007/11/01(木) 11:44:31
// 以下前半より
printf("max population: %s (%d)\nmin population: %s (%d)\n"
"max area: %s (%g)\nmin area: %s (%g)\n"
"max area: %s (%g)\nmin area: %s (%g)\n",
kyoto[popMaxIdx].name, kyoto[popMaxIdx].population,
kyoto[popMinIdx].name, kyoto[popMinIdx].population,
kyoto[areaMaxIdx].name, kyoto[areaMaxIdx].area,
kyoto[areaMinIdx].name, kyoto[areaMinIdx].area,
kyoto[densMaxIdx].name, kyoto[densMaxIdx].population / kyoto[densMaxIdx].area,
kyoto[densMinIdx].name, kyoto[densMinIdx].population / kyoto[densMinIdx].area);
}

int main()
{
FILE * fp = fopen(CITY_FILE, "r");
if (fp == NULL) return 1;
for (int ic = 0; ic < NUM_DIVISION; ++ic) {
fscanf(fp, "%s%d%lf", kyoto[ic].name,
& kyoto[ic].population, & kyoto[ic].area);
}
fclose(fp);
foo();
return 0;
}
724722=723:2007/11/01(木) 11:48:41
注意点を書き忘れてた。
・for (int ic = 1; でエラーが出るなら、int ic; for (ic = 1; に書き換えること。
・書式は適当に調整すること。例えば、%20sとか%9.2fとか。
・関数名(foo)も適当に。
# 最初は人口面積人口密度を別の関数にしてたんだけど行数も多くなるから纏めちまったぜw
725デフォルトの名無しさん:2007/11/01(木) 11:50:04
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
1)b <0 のとき、エラーで終了する。改良して、
b<0 の時もa*b 、a^b を計算できるようにせよ。

改良後のプログラムをデバッガ上で実行し、b<0 の場合、
a^b を計算している繰り返し中のデバッガ実行画面を
提出せよ。 変数 a, b, i, power の値が画面上に表示されて
いること



[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 11/3
[5] その他の制限: if 文を使い、 b< 0 のときは、
multi(乗算) b の絶対値回aを加算し最後に-1 を掛ける。
Power(べき乗) b の絶対値回数 a で割る。
ように場合分けしてやれと指示されてます。

ぜんぜんわからないんです。どうかよろしくお願いします。元々↓のプログラムが与えられててそれを改良するんですが・・・
726デフォルトの名無しさん:2007/11/01(木) 11:51:13
#include <iostream>
using namespace std;
int main()
{
double a; // 入力実数
int b; // 入力整数, 0以上
double multi; // a * b
double power; // a^b
cout << "Input a = "; cin >>a;
cout << "Input b = "; cin >>b;
if ( b < 0 ) {
cerr << "0 以上の整数を入力して下さい\n";
return 1;
}
// a を b 回加算して a*b を計算する
multi = 0;
for(int i = 0; i< b; i++ ){
multi = multi + a;
// multi += a;
}
/* a を b 回積算して a^b を計算する */
power = 1;
for( i = 0; i< b; i++ ){
power = power * a;
// power *= a;
}
cout << " a = " << a << " b = " << b << endl;
cout << "a*b = " << multi <<" a^b = "<< power <<endl;
return 0;
}

727デフォルトの名無しさん:2007/11/01(木) 12:13:10
>>720
#include <stdio.h>
#include <stdlib.h>
#define SIGN(val) ((val)<0?-1:(val)>0?1:0)
struct division {
char name[20];
int population;
double area;
};
double density(const struct division *city){return city->population/city->area;}
int cmp_population(const struct division *a, const struct division *b){return SIGN(a->population-b->population);}
int cmp_area(const struct division *a, const struct division *b){return SIGN(a->area-b->area);}
int cmp_density(const struct division *a, const struct division *b){return SIGN(density(a)-density(b));}
int main(void){
struct division kyoto[11], *maximum, *minimum;
FILE *fp;
int i;

fp=fopen("kyotocity.txt", "r");
if(fp==NULL) return 1;
for(i=0;i<11;i++) fscanf(fp, "%s%d%lf", kyoto[i].name, &kyoto[i].population, &kyoto[i].area);
fclose(fp);
minimum=&kyoto[0];
maximum=&kyoto[11-1];
qsort(kyoto, 11, sizeof(kyoto[0]), (int (*)(const void*,const void*))cmp_population);
printf("%s %d\n%s %d\n", minimum->name, minimum->population, maximum->name, maximum->population);
qsort(kyoto, 11, sizeof(kyoto[0]), (int (*)(const void*,const void*))cmp_area);
printf("%s %f\n%s %f\n", minimum->name, minimum->area, maximum->name, maximum->area);
qsort(kyoto, 11, sizeof(kyoto[0]), (int (*)(const void*,const void*))cmp_density);
printf("%s %f\n%s %f\n", minimum->name, density(minimum), maximum->name, density(maximum));
return 0;
}
728デフォルトの名無しさん:2007/11/01(木) 12:16:45
実数 xに対して | x - m/n | < 10^-8 をみたす自然数のうちm+nが最小のものを求めるプログラムを書け
特に、√2、√3の値を求めよ
729デフォルトの名無しさん:2007/11/01(木) 12:20:58
>>725
#include <iostream>
using namespace std;
int main()
{
double a; // 入力実数
int b; // 入力整数, 0以上
double multi; // a * b
double power; // a^b
cout << "Input a = "; cin >>a;
cout << "Input b = "; cin >>b;
if ( b == 0 ) {
cerr << "0 以外の整数を入力して下さい\n";
return 1;
}
// a を b 回加算して a*b を計算する
multi = 0;
for(int i = b; i< 0; i++ ) multi-=a;
for(int i = 0; i< b; i++ ) multi+=a;
/* a を b 回積算して a^b を計算する */
power = 1;
for(int i = b; i< 0; i++ ) power/=a;
for(int i = 0; i< b; i++ ) power*=a;
cout << " a = " << a << " b = " << b << endl;
cout << "a*b = " << multi <<" a^b = "<< power <<endl;
return 0;
}
730デフォルトの名無しさん:2007/11/01(木) 12:29:37
>>727
どうでもいいけど、cmp_poppulation()においてはそのSIGN()は無駄だよ。
qsort()が要求する比較関数の要件から言えば-1, 0, 1である必要はないし、
SIGN()の有無に関わらずaとbの値が離れすぎると誤動作するし。
731デフォルトの名無しさん:2007/11/01(木) 12:33:07
>>727 の該当箇所を以下のように書き換えておいてね
#define SIGN(val,org) ((val)<(org)?-1:(val)>(org)?1:0)
int cmp_population(const struct division *a, const struct division *b){return SIGN(a->population,b->population);}
int cmp_area(const struct division *a, const struct division *b){return SIGN(a->area,b->area);}
int cmp_density(const struct division *a, const struct division *b){return SIGN(density(a),density(b));}
732デフォルトの名無しさん:2007/11/01(木) 13:14:40
>>728 遅いけど
#include <stdio.h>
#include <math.h>

int is_range(double x, double m, int n)
{
return (fabs(x-m/n)<1e-8);
}

int main(int argc, char *argv[])
{
long i, n=1e+9;
double j, m=0, x=1.414213562373;

if(argc==2) sscanf(argv[1], "%lf", &x);
for(i=n;i>0;i/=2)
{
j=floor(x*i);
if(is_range(x, j, i)){m=j;n=i;}
else if(is_range(x, j+1, i)){m=j+1;n=i;}
}
for(i=n;i>0;i--)
{
j=floor(x*i);
if(is_range(x, j, i)){m=j;n=i;}
else if(is_range(x, j+1, i)){m=j+1;n=i;}
}
printf("x=%.9e m=%.0f n=%ld\n", x, m, n);

return 0;
}
733デフォルトの名無しさん:2007/11/01(木) 15:26:16
>>728
シンプルに作ったらでーりゃーおせーがねw
--
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
double x = argc >= 2 ? atof(argv[1]) : sqrt(2);
double differ = argc >= 3 ? atof(argv[2]) : 1e-8;
int begin = x < 1 ? 1 : x;
for (int mn = 2; ; ++mn) {
int tmp = (int) (x * (mn - 1)) + 1;
int end = tmp > mn - 1 ? mn - 1 : tmp;
for (int m = begin; m <= end; ++m) {
int n = mn - m;
if (fabs(x * n - (double) m) < n * differ) {
printf("x=%.9g m=%d n=%d m/n=%.9g\n", x, m, n, (double) m / n);
return 0;
}
}
}
return 0;
}
734デフォルトの名無しさん:2007/11/01(木) 15:45:45
[1] 授業単元: C言語
[2] 問題文: 外接球(半径1)に内接する正四面体の各三角形の中点を求め、
求めた中点を新たな三角形の頂点とし4つの三角形に分割する。これを再帰的に行うことにより
球体を生成せよ。
以下の情報を出力するようにしなさい。
分割した回数、各三角形の頂点座標および接続情報。
(頂点座標と接続情報がわかればVRMLを用いて描画することができます。)
[3] 環境
 OS: WindowsXP
 言語: C
[4] 期限: 11/5
[5] その他の制限: 特になし

正四面体の初期座標は求めました。
(0, 0, 1)
(0, 0.942809)
(-0.816497, -0.471405, -0.33333)
(0.816497, -0.471405, -0.33333)
です。
735デフォルトの名無しさん:2007/11/01(木) 15:54:33
>>734
> 求めた中点を新たな三角形の頂点とし4つの三角形に分割する
というのがよくわからんのだけど。
4つの三角形の中点を結んで新しい四面体を作るってことではないよね
(それだと球にならないし)
736デフォルトの名無しさん:2007/11/01(木) 15:57:03
すまん、中点てゆーのは、面の重心ではなくて辺の中点で分割して角を落とすってことか。
737732:2007/11/01(木) 16:07:51
>>728
#include <stdio.h>
#include <math.h>

int is_range(double x, double m, int n){
return (fabs(x-m/n)<1e-8);
}

int main(int argc, char *argv[]){
long i, n;
double j, m=0, x=1.414213562373;

if(argc==2) sscanf(argv[1], "%lf", &x);
for(i=1;i<=1e+9;i++){
j=floor(x*i);
if(is_range(x, j, i)){m=j;n=i;break;}
else if(is_range(x, j+1, i)){m=j+1;n=i;break;}
}
printf("x=%.9e m=%.0f n=%ld\n", x, m, n);

return 0;
}
738デフォルトの名無しさん:2007/11/01(木) 16:20:01
>>732さん >>733さん ありがとうございます
739733:2007/11/01(木) 17:06:08
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
double x = argc >= 2 ? argv[1][0] == 'r' ? sqrt(atof(& argv[1][1])) : atof(argv[1]) : sqrt(2);
double differ = argc >= 3 ? atof(argv[2]) : 1e-8;
int m, n; int cnt = 0;
for (int mn = 2; ; ++mn) {
if (x < 1) { // m>nとm<nで分けて、ショートカットしたらずっと速くなった
int begin = 1;
int end = mn / 2;
for (m = end; m >= begin; --m) {
n = mn - m; ++cnt;
if (fabs(x * n - (double) m) < n * differ) goto end;
if (x * n > m) break;
}
} else {
int begin = x < mn / 2 ? mn / 2 : x;
int tmp = (int) (x * (mn - 1)) + 1;
int end = tmp > mn - 1 ? mn - 1 : tmp;
for (m = begin; m <= end; ++m) {
n = mn - m; ++cnt;
if (fabs(x * n - (double) m) < n * differ) goto end;
if (x * n < m) break;
}
}
}
end:
printf("x=%.9g m=%d n=%d m/n=%.9g cnt:%d\n", x, m, n, (double) m / n, cnt);
return 0;
}
740733:2007/11/01(木) 17:09:11
むぅ、二重ループである必要さえなかったか。
741デフォルトの名無しさん:2007/11/01(木) 18:46:20
>>735
734で質問した者です。
ttp://www.sra.co.jp/people/aoki/Jun/Topics/TypicalHedron/
↑のサイトの下の方を見てもらえばわかるかと思います。ここでは
正二十面体を再帰的に分割していますが、今回分割していきたいのは
正二十面体ではなく正四面体です。
742デフォルトの名無しさん:2007/11/01(木) 19:00:11
C言語での課題です

16進数の値を10進数に変換。

条件:
関数は使わない。
コードは1行のみ。

調べているのですが分かりません。
教えてください
743デフォルトの名無しさん:2007/11/01(木) 19:04:57
>>742
問題文が不完全なので回答不能。
もっと詳しく書くことを要求する。
744デフォルトの名無しさん:2007/11/01(木) 19:14:15
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて、直線y=x+1/2と単位円x*x+y*y=1の交点のの近似解(小数点以下第6位まで)を求めよ。
1つのプログラムに書くこと。
二分法の初期値[a,b]=[-1,1]
ニュートン法で用いる初期値は2つとも0とせよ。
ニュートン法も二分法もともに何回で収束したかがわかるようにすること。
関数へのポインタは必ず使うこと。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007年11月2日17時
[5] その他の制限: 関数へのポインタを必ず使うこと。
745デフォルトの名無しさん:2007/11/01(木) 19:26:13
y =f(x) = x + 1/2
z=x^2 + y^2 - 1

dz/dx = 2x + 2y y'
= 2x + 2( x + 1/2)
=4x + 1

F(x) = x - ( x^2 + f(x)^2 - 1 )/( 4x + 1 )とおく
746デフォルトの名無しさん:2007/11/01(木) 19:34:39
ニュートン法


#include <stdio.h>
double f(double x){return x+1/2;}
double g(double x){return x*x+f(x)*f(x)-1;}
double h(double x){return g(x)/(4*x+1);}

main(){
double x=0;
int i;
for(i=0;i<100;i++)x=h(x);
printf("%.6f",x);
}
747デフォルトの名無しさん:2007/11/01(木) 19:39:40
二分法

#include <stdio.h>
double f(double x){return x+1/2;}
double g(double x){return x*x+f(x)*f(x)-1;}

main(){
double a=-1,b=1,x;
int i;
for(i=0;i<100;i++){
x=(a+b)/2;
if(g(a)*g(x)>0)a=x; else b=x;
}
printf("%.6f",x);
}
748デフォルトの名無しさん:2007/11/01(木) 21:01:11
[1] 授業単元: C言語

[2] 問題文: 20行3列の2時限配列を用意する。
行は学生数に対応し、列は国語、英語、数学の3科目の試験結果に対応する。
乱数を発生させる関数rand()を利用して、全ての配列要素を0点から100点の範囲で
埋め、結果を表示するプログラムを作成せよ。ただし、右端には3科目合計点数を、
最下段には科目毎の平均点を出力せよ。

[3] 環境
 OS: WindowsXP
 言語: C

[4] 期限: 11/2 am10:00

[5] その他の制限:
大体を下の実行結果に合わせて作るよう指示されています。

国語 英語 数学 合計
54 84 7 145
・   ・ ・ ・
・ ・ ・ ・ 
・ ・ ・ ・
76 99 58 233
===============
61.8 59.8 44.7

お願いしますm(_ _)m
749748:2007/11/01(木) 21:04:07
実行結果が酷いことになってすいませんorz
それぞれ国語、英語、数学、合計の列に合わせてもらえると助かります^^;
750デフォルトの名無しさん:2007/11/01(木) 21:09:36
[1] 授業単元: プログラミング演習(仮)
[2] 問題文(含コード&リンク):
*説明*
n 個の町の間に、それらをつなぐ道路が m 本ある。
ここに新たに道路を建設し、どの道路が h 本破壊されても
町が相互に行き来できるようにしたい。
増設しなければならない道路の最低数を求めよ。
*入力*
n m h
u1 v1
u2 v2
...
um vm
1 行目の n, m, h は町の総数,現在の道路数,壊されてもよい道路数.
2 行目から 1+m 行目は道路の始点と終点(同じものがあるかもしれない).
*出力*
増設しなければならない道路の最低数。
(例1)
3 3 1
1 2
2 3
3 1
このとき出力は 0。すでにどの 1 本が破壊されても大丈夫なので。
(例2)
3 3 2
1 2
2 3
3 1
このとき出力は 2 。たとえば 1-2, 2-3 間に道を増やせばよい。
[3] 環境: OS, コンパイラ,言語問わず.
[4] 期限:11月8日
[5] その他の制限:とくになし
751デフォルトの名無しさん:2007/11/01(木) 21:19:54
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): ユーザが文字列を入力し、
半角英数字の入力(最大でも1000文字)を改行があるまで受け付ける。
次に、ユーザに検索する文字列(最大でも半角20文字)を入力させ、
はじめに入力された文字列内にあるかどうかを表示するプログラムを作成せよ。
配列の外部を参照しないように注意すること。

そのプログラム内で以下の関数を完成させよ。
int str_srch (char str [], char srch_str[]) :
文字列strの中に文字列srch_strが含まれていれば、1を返し、含まれていなければ0を返す関数とする。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: C
[4] 期限:今日中
[5] その他の制限: 特になし

よろしくお願いします。
752デフォルトの名無しさん:2007/11/01(木) 21:47:52
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):2つの日時をキーボードから入力し、
入力された2つの日時の差を求めるプログラムを作成し、実行させなさい
(日時の入力は、○○年△△月××日とし、2つの日時の差も同様に表記すること)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:うるう年は無視して良いようです

お願いします

753デフォルトの名無しさん:2007/11/01(木) 22:06:17
>>748
#include<stdio.h>
#include<time.h>
main()
{
int i,j,s[20][3];
int sum[20];
float ave[3]={0.0,0.0,0.0};
srand((unsigned int)time(NULL));
for(i=0;i<20;i++){
sum[i]=0;
for(j=0;j<3;j++){
s[i][j]=rand()%100+1;
sum[i]+=s[i][j];
ave[j]+=s[i][j];
}
}
printf("国語 英語 数学 合計\n");
for(i=0;i<20;i++)
printf("%4d %4d %4d %4d\n",s[i][0],s[i][1],s[i][2],sum[i]);
printf("===================\n");
printf("%2.1f %2.1f %2.1f\n",ave[0]/20.0,ave[1]/20.0,ave[2]/20.0);
}
754デフォルトの名無しさん:2007/11/01(木) 22:11:54
>>751
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
#dwfine MAXSRCH 20
int str_srch(char str[],char srch_str[])
{
int i,j,k;
for(i=0;i<=strlen(str);i++){
for(j=i,k=0;str[j]==srch_str[k];j++,k++);
if(srch_str[k]=='\0') return 1;
else if(str[j]=='\0') return 0;
}
return 0;
}
main()
{
int i;
char line[MAXLINE],kline[MAXSRCH];
printf("文字列入力 : ");
fgets(line,MAXLINE-1,stdin);
for(i=0;line[i]!='\n';i++); line[i]='\0';
printf("検索する文字列入力 : ");
fgets(kline,MAXSRCH-1,stdin);
for(i=0;kline[i]!='\n';i++); kline[i]='\0';
if(str_srch(line,kline))
printf("line中に %s は存在する\n",kline);
else
printf("文字列中に %s は存在しない\n",kline);
}
755デフォルトの名無しさん:2007/11/01(木) 22:14:27
>>754後から書き加えた部分でtypoしてたorz
#dwfineじゃなくて#defineです。
756デフォルトの名無しさん:2007/11/01(木) 22:22:58
>>754
ありがとうございます。
助かりました。
757デフォルトの名無しさん:2007/11/01(木) 22:27:25
>>753
ありがとうございます。助かりました!
758デフォルトの名無しさん:2007/11/01(木) 22:35:50
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
ttp://www23.atwiki.jp/homework/pages/11.html#id_614a9b8b
のプログラムを下記の制限のようにポインタを使わずに、二次元配列を使って書き換えよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] Borland C++ Compiler5.5
 [3.3] C
[4] 期限:11/3 15:00
[5] その他の制限:二次元配列を使用。ポインタを使わない。
よろしくお願いします。
759デフォルトの名無しさん:2007/11/01(木) 22:54:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5195.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] C
[4] 期限:明日まで
[5] その他の制限:特になし。

関数の使い方がよく分かりません…。
よろしくお願いします。
760デフォルトの名無しさん:2007/11/01(木) 23:04:54
[1] 授業単元: C言語

[2] 問題文:2行3列の行列と3行2列の行列の積を求めるプログラムを製作せよ

[3] 環境
 OS: WindowsXP
 言語: C

よろしくお願いします。

[4] 期限: 11/2 am10:00

[5] その他の制限:
761デフォルトの名無しさん:2007/11/01(木) 23:08:38
このスレ見れば行列の積の解法のってるのに。
762デフォルトの名無しさん:2007/11/01(木) 23:11:08
>>759
#include<stdio.h>
#include<string.h>
struct gstudent {
char name[20]; /*氏名*/
int height; /*身長*/
float weight; /*体重*/
long schols; /*奨学金*/
};
struct gstudent set_gstudent(char name[],int height,float weight,long schols)
{
struct gstudent a;
strcpy(a.name,name);
a.height = height;
a.weight = weight;
a.schols = schols;
return a;
}
void show_gstudent(struct gstudent *gs)
{
printf("%s %d %.1f %ld\n",gs->name,gs->height,gs->weight,gs->schols);
}
main()
{
struct gstudent s;
s=set_gstudent("Mike",165,72.0,70000);
show_gstudent(&s);
}
763デフォルトの名無しさん:2007/11/01(木) 23:18:28
>>759A
main()
{
int i,max;
struct gstudent s[3];
s[0]=set_gstudent("Mike",165,72.0,70000);
s[1]=set_gstudent("Bob",185,82.0,30000);
s[2]=set_gstudent("Michel",145,42.0,80000);
for(i=0;i<3;i++)
show_gstudent(&s[i]);
putchar('\n');
for(i=0,max=i;i<3;i++)
if(s[max].height<s[i].height)
max = i;
show_gstudent(&s[max]);
}
>>762のmainと差し替える。
764デフォルトの名無しさん:2007/11/01(木) 23:23:06
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
下に書きます
[3] 環境
  OS: Linux
  言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
765764:2007/11/01(木) 23:23:51
>>764
の問題文

ある都市のタクシー料金は次のようになっている
   2kmまで・・・・380円
   3kmまで・・・・550円
   5kmまで・・・・870円
   8kmまで・・・・1300円
   以後、2km増やすごとに200円増

距離を実数でキーボードから読み込み、料金を表示するプログラムを作成し、実行させなさい
ただし、0または負の数が入力されたときに処理を終了することとし、繰り返し料金を計算する
プログラムとすること
766デフォルトの名無しさん:2007/11/01(木) 23:24:40
if でbreakさせれば余裕じゃねーか
767デフォルトの名無しさん:2007/11/01(木) 23:27:14
お願いしますよ・・・・
768716:2007/11/01(木) 23:30:51
>>717-719
解決できました。
ありがとうございました。
769 ◆ViDuXQp31Y :2007/11/01(木) 23:35:02
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):次のような情報から構成される学生の情報を5人分入力し、
出力するプログラムを作成せよ。入力した情報は構造体を使って格納する事。
所属学科、学年、学生番号、氏名、
※例
所属学科を入力して下さい。 看護情報科
学年を入力して下さい。    1
学生番号を入力してください。 032319
氏名を入力して下さい。    中村紀洋

所属学科
看護情報科
看護情報科
看護情報科

[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
770 ◆ViDuXQp31Y :2007/11/01(木) 23:37:45
>>769
途中で送信を押してしまいました。

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):次のような情報から構成される学生の情報を5人分入力し、
出力するプログラムを作成せよ。入力した情報は構造体を使って格納する事。
所属学科、学年、学生番号、氏名、
※例
所属学科を入力して下さい。 看護情報科
学年を入力して下さい。    1
学生番号を入力してください。 032319
氏名を入力して下さい。    中村紀洋

所属学科   学年 学生番号 氏名
看護情報科  1   032319  中村紀洋
看護情報科  2 032424  鶴岡慎也
看護情報科  3 062422  戸叶尚

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 2007年11月02日00:30迄
[5] その他の制限:

宜しくお願いします。
771デフォルトの名無しさん:2007/11/01(木) 23:43:16
>>764
#include <stdio.h>
int main(void)
{
while(1)
{
float kyori;
int ryokin;
printf("距離?"); scanf("%f", &kyori);
if(kyori <= 0.0) return;
if(kyori >= 8.0) for(ryokin = 1300; kyori > 8.0; kyori -= 2.0) ryokin += 200;
if(kyori <= 5.0) ryokin = 870;
if(kyori <= 3.0) ryokin = 550;
if(kyori <= 2.0) ryokin = 380;
printf("料金 : %d\n", ryokin);
}
}
772デフォルトの名無しさん:2007/11/01(木) 23:45:31
>>771
訂正
> if(kyori >= 8.0) for(ryokin = 1300; kyori > 8.0; kyori -= 2.0) ryokin += 200;
for(ryokin = 1300; kyori > 8.0; kyori -= 2.0) ryokin += 200;
773デフォルトの名無しさん:2007/11/01(木) 23:52:32
>>771
ありがとうございます
774デフォルトの名無しさん:2007/11/01(木) 23:56:19
四則演算子とか習ってないだろうけど平気なのか
775デフォルトの名無しさん:2007/11/02(金) 00:11:09
よく見たら平気じゃなかったです

if(kyori <= 0.0) return;
if(kyori >= 8.0) for(ryokin = 1300; kyori > 8.0; kyori -= 2.0) ryokin += 200;

ここの部分が良くわかりませんでした・・・
776デフォルトの名無しさん:2007/11/02(金) 00:12:00
>>770
#include <stdio.h>
int main(void)
{
#define MAX 5
struct {
char gakka[13];
char gakunen;
char bango[7];
char namae[21];
}seigaku[MAX];
{//入力部
int i;
for(i=0; i!=MAX; i++){
printf("所属学科を入力して下さい。"); scanf("%s", seigaku[i].gakka);
printf("学年を入力して下さい。"); scanf("%d", &(seigaku[i].gakunen));
printf("学生番号を入力して下さい。"); scanf("%s", seigaku[i].bango);
printf("氏名を入力して下さい。"); scanf("%s", seigaku[i].namae);}
}
{//出力部
int i;
printf("所属学科  学年 学生番号 氏名\n");
for(i=0; i!=MAX; i++)
printf("%-12s%-6d%8s %s\n", seigaku[i].gakka, seigaku[i].gakunen, seigaku[i].bango, seigaku[i].namae);
}
return 0;
}
777デフォルトの名無しさん:2007/11/02(金) 00:22:52
>>752
当方の実行環境/処理系は Windows XPの, cygwin(gcc 3.4.4 / mingw 3.13-1)です。
残念ながら私の実行環境(Windows XP の cmd) で実行中に日本語入力を行う方法がわからなかったので、このソースでは「yyyy年mm月dd日」ではなく「yyyy/mm/dd」の形で入出力を行うようにしています。
「うるう年は無視して良いようです」とのことですが、2つの日時の差を出力するとき、1年=365日、1ヶ月=30日に固定しています。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5196.txt
778 ◆ViDuXQp31Y :2007/11/02(金) 00:33:57
>>776
ありがとうございます。
779デフォルトの名無しさん:2007/11/02(金) 00:49:27
>>752
お願いします
780 ◆ViDuXQp31Y :2007/11/02(金) 00:50:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>770のプログラムの入力学生数を最大50人までとし、50人以下の任意の人数で入力を止める事が出来るプログラム
を作成せよ。(例:10人分を入力した時点で入力を停止して、入力した10人分の情報を表示する。)
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 2007年11月02日12:30迄
[5] その他の制限:

改めて宜しくお願いします。
781デフォルトの名無しさん:2007/11/02(金) 00:54:52
[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5197.txt
プログラムを利用して画像を鏡像反転させるプログラムを作成して下さい。
鏡像反転とは画像の左右どちらか半分を左右反転することです。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007年11月04日12:00まで
[5] その他の制限:makeファイルがあります
782デフォルトの名無しさん:2007/11/02(金) 00:56:26
すいません、打ち忘れてました。
よろしくお願いします。
783デフォルトの名無しさん:2007/11/02(金) 00:59:33
>>762-763
ありがとうございました
784デフォルトの名無しさん:2007/11/02(金) 01:25:59
何度もすいません
>>771>>772
のプログラミングリストでfloatの型を使わず表すことはできるでしょうか?
785デフォルトの名無しさん:2007/11/02(金) 02:21:07
[1] 授業単元:プログラミング演習U
[2] 問題文(含コード&リンク):フラクタル図形であるシルピンスキーのギャスケットは、
三角形の各辺の中・を結んで三角形の中に三角形を繰り返し作成したものである。
再帰呼び出しを使って、同じ手順で三角形の中に小さな三角形を描くプログラムを
作成しなさい。
以下の処理を指定回数だけ繰り返します。
@初期三角形を描く。
A三角形の各辺の中点を結んだ三角形を描く。全体の1/4の大きさの三角形が
 4個できる。
Bその中にさらに三角形を描く。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年11月03日17:00まで
[5] その他の制限:特になし

宜しくお願いしますm(__)m
786デフォルトの名無しさん:2007/11/02(金) 02:31:45
>>784
#include <stdio.h>

int main(void)
{
    double distance;
    int fare;

    while(1){
        scanf("%lf", &distance);

        if(distance <= 0)
            break;

        if(distance <= 2.0)
            fare = 380;
        else if(distance <= 3.0)
            fare = 550;
        else if(distance <= 5.0)
            fare = 870;
        else if(distance <= 8.0)
            fare = 1300;
        else
            fare = 1300 + ((int)((distance - 8.0)/2.0))*200;

        printf("%d\n", fare);
    }

    return 0;
}
787デフォルトの名無しさん:2007/11/02(金) 03:13:02
だれか
>>752
形だけでもお願いします
788デフォルトの名無しさん:2007/11/02(金) 03:28:49
○○年△△月××日 --> ○○*365 + (△△ -1)×各月の日数 + ××
789デフォルトの名無しさん:2007/11/02(金) 03:36:40
>>785 描画ライブラリの指定がないから、頂点を出力するものにした。 3^Nは無理あるな。
#include <stdio.h>

typedef struct{ double x, y;}point;

point middle_point(point p1, point p2){
    point ret;
    ret.x = (p1.x + p2.x)/2;
    ret.y = (p1.y + p2.y)/2;
    return ret;
}

void gasket(point p1, point p2, point p3, int n){
    if(n > 0){
        gasket(p1, middle_point(p1, p2), middle_point(p1, p3), n - 1);
        gasket(middle_point(p2, p1), p2, middle_point(p2, p3), n - 1);
        gasket(middle_point(p3, p1), middle_point(p3, p2), p3, n - 1);
    }else{
        printf("p1(%g, %g)\tp2(%g, %g)\tp3(%g, %g)\n", p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
    }
}

int main(void){
    point p[3];
    int i, n;
    printf("input three point\n");
    for(i = 0; i < 3; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
    printf("input n\n");
    scanf("%d", &n);
    gasket(p[0], p[1], p[2], n);
    return 0;
}
790デフォルトの名無しさん:2007/11/02(金) 03:41:01
三角形は4つ
791デフォルトの名無しさん:2007/11/02(金) 04:05:58
792デフォルトの名無しさん:2007/11/02(金) 08:07:08
>>784
オメーが実数で頼むって言ってるからfloatでやってるんだろうがwww

float → double
scanf("%f", &kyori); → scanf("%lf", &kyori);

でおk。
doubleもダメなら知らん。
793デフォルトの名無しさん:2007/11/02(金) 08:49:06
>>728
#define EPS 1e-8
/* using Stern-Brocot Tree */
void solve(double x, int *p_, int *q_) {
  int pl = 0, ql = 1, pr = 1, qr = 0, pm, qm;
  while ( 1 ) {
    /* { [x-e, x+e] \subset [pl/ql, pr/qr] } */
    pm = pl + pr;
    qm = ql + qr;
    if ((x + EPS) * qm < pm) { 
      pr = pm;
      qr = qm;
    } else if ((x - EPS) * qm > pm) {
      pl = pm;
      ql = qm;
    } else {
      *p_ = pm;
      *q_ = qm;
      return;
    }
  }
}
int main() {
  int p, q;
  double x;
  scanf("%lf", &x);
  solve(x, &p, &q);
  printf("%d / %d\n", p, q);
}
794デフォルトの名無しさん:2007/11/02(金) 09:11:36
>>752
出力形式が意味不明だな。単なる日数に年月を割り当てる方法がわからん。
1月1日と2月1日の差は 1月?それとも 31日?
2月1日と3月1日の差は 1月?それとも 28日?
1月31日と2月1日の差は 1月?それとも 1日?
795デフォルトの名無しさん:2007/11/02(金) 09:54:32
>>728
#include <stdio.h>
#define EPS 1e-8
typedef struct mn{ int m, n; }mn_t;

void farey(double x, mn_t *left, mn_t *right){
mn_t check;

check.m=left->m+right->m;
check.n=left->n+right->n;
if((x-EPS)*check.n>check.m){
*left=check;
farey(x, left, right);
}else if((x+EPS)*check.n<check.m){
*right=check;
farey(x, left, right);
}else{
*right=*left=check;
}
}

int main1(int argc, char *argv[]) {
mn_t left={0,1}, right={1,1};
double x=1.41421356, y;

if(argc==2) sscanf(argv[1], "%lf", &x);
y=x-floor(x);
farey(y, &left, &right);
printf("m=%d n=%d\n", (int)(left.m+floor(x)*left.n), left.n);

return 0;
}
796デフォルトの名無しさん:2007/11/02(金) 09:57:21
いま残ってるのはどれだい?
797デフォルトの名無しさん:2007/11/02(金) 10:27:39
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5198.c
バックスペースを有効にするにはどうすればいいですか
798デフォルトの名無しさん:2007/11/02(金) 11:00:25
>>797
OSは?
799デフォルトの名無しさん:2007/11/02(金) 11:26:37
>>796
734で質問した者です。
まだ未解決なのでお願いしますm(__)m
800デフォルトの名無しさん:2007/11/02(金) 11:28:37
>>798
アルファベットと呼ばれる文字でできたものです
情報系の用語としてはoperating systemと略されてるようです
801 ◆TMengH8wzk :2007/11/02(金) 11:33:27
>>798
WindowsXPです。

>>800
は言わなくても解るでしょうが偽者です。
802デフォルトの名無しさん:2007/11/02(金) 11:37:50
キーボードから n と r とを入力し、その組み合わせの数
nCr を出力するプログラムを作る
これについて教えてください
OSはMAC OS X です
803デフォルトの名無しさん:2007/11/02(金) 11:45:58
急ですみませんが・・・
[1] 授業単元:C++
[2] 問題文(含コード&リンク):異なる80bitの素数を2つ発生させる
[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2003
 [3.3] 言語:c++
[4] 期限:2007年11月3日10:30まで
[5] その他の制限: 出力は10進数ですること
よろしくお願いします
804デフォルトの名無しさん:2007/11/02(金) 11:50:43
>>797
テンプレ書け。
嫌なら質問スレ行け。
805デフォルトの名無しさん:2007/11/02(金) 12:47:16
>>799
>>734の問題できたお。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5199.txt
3行ずつで三角形の座標を標準出力に出してる。ファイルにリダイレクトしてくだされ。
mainのNを変えると解像度上がるよ。
806デフォルトの名無しさん:2007/11/02(金) 13:14:41
>>805
すまん、mainの二つ目の座標が(0, 0.942809, -0.33333)だったぽい
なおしてくれ。
807デフォルトの名無しさん:2007/11/02(金) 13:33:59
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5200.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

 [3.3] 言語: C++
[4] 期限: 11/3 18時
[5] その他の制限:

よろしくお願いします
808デフォルトの名無しさん:2007/11/02(金) 13:50:25
>>807
・それぞれの種類の機械は何台ずつあるのか。
・問題文の中であなたが注釈を加えた部分はどこか。

各機械が一台ずつしかないとすると表示例はおかしいと思うのだが。
809デフォルトの名無しさん:2007/11/02(金) 14:19:11
>>808
>それぞれの種類の機械は何台ずつあるのか。
各機械は一台ずつです。
>各機械が一台ずつしかないとすると表示例はおかしいと思うのだが
5製品を同時に作り始めた場合は、おかしいことになりますが、今回はそれぞれの製品を
一製品ずつ作った場合でよいと先生が口頭で言っていたのを書き忘れました。
すいません。
つまり、各製品が常に自由に機械を使えるということです。


>問題文の中であなたが注釈を加えた部分はどこか。
つまり、10日間、各製品の加工時間の和が各製品出ることになります。
製品1なら3+1+5+2+7=20時間なので一日後
製品4なら10+5+7+3+2=27時間なので二日後になります。

よろしくお願いします。

810デフォルトの名無しさん:2007/11/02(金) 14:57:33
>>809
機械の割り当てに関しては了解。

ただやっぱり表示例は疑問。
あれを10日分ループするのは無駄が多すぎる。

単純に計算すると製品1は18時間、製品2には14時間がかかるが、
機械は一台ずつしかなく同時に使えないため、機械の割り当てを考える必要がある。
> 今回は一製品ずつ作った場合でよい
とのことなので順番に製作すると、
製品2の製作は18時間後から開始されるので、完成は32時間後になる。

したがって表示例は
製品1: 18時間後 (=1日後)
製品2: 32時間後 (=2日後)
...
となるようにすればよい。
問題文の前半を読むとこう解釈できるんだがいかがだろうか。
俺の考えすぎならすまん。
811デフォルトの名無しさん:2007/11/02(金) 15:04:37
>>810
各製品が常に自由に機械を使えるので、順番に作る場合ではなくて、機械が使用されてないと仮定して、
今から作ると何日後に完成するかを出せればいいので、10日分ループするのは無駄なんですけど、10回同じものを
表示するプログラムをお願いします。

よろしくお願いします。
812デフォルトの名無しさん:2007/11/02(金) 15:15:12
>>805
ありがとうございます!!
ほんと助かりました!
813デフォルトの名無しさん:2007/11/02(金) 15:43:19
814デフォルトの名無しさん:2007/11/02(金) 16:21:43
>>813
ありがとうございました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5202.txt
もお願いできませんか?
よろしくお願いします。
815デフォルトの名無しさん:2007/11/02(金) 17:38:30
>>805
頂点座標は出力されるのですが、三角形の接続情報を出力するにはどうしたら
いいですか?VRMLで描画させなければならないので。
お願いします。
816デフォルトの名無しさん:2007/11/02(金) 17:59:34
>>758 誰かお願いします
817デフォルトの名無しさん:2007/11/02(金) 18:10:16
>>816
「ポインタを使わない」というのは、具体的には何を指すの?
gets()などの関数を使う以上、ポインタを使わずにはできないのだけれど。
818デフォルトの名無しさん:2007/11/02(金) 18:25:19
>>817
ポインタはまだ習ってないので、配列を使って解く感じなんです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5203.c
上記のが問題文全部です。
実行結果は、>>758 のままです。
819デフォルトの名無しさん:2007/11/02(金) 18:26:15
>>815
VRMLよく知らんのだけど、頂点リストと面リスト用意して、面は3つの頂点番号で指定するってパターン?
>>805 のやつは隣の面と頂点を共有するようにはしてないから、
同一位置にある頂点を別々のものとして定義するんじゃダメ?
それでいいなら、n番目の面は、3*n, 3*n+1, 3*n+2番目の頂点から構成されるってことになる。
820デフォルトの名無しさん:2007/11/02(金) 18:26:27
着せ替えひゃっほおおおおおおおおおおおおおおおおおおいいいい!!!!!!!!!!!!!11

ttp://up2.viploader.net/upphp/src/vlphp084831.jpg
821デフォルトの名無しさん:2007/11/02(金) 18:27:04
すまん…誤爆った…
822デフォルトの名無しさん:2007/11/02(金) 18:28:50
            /.: : : : : : : .ヽ
          R: : : :. : pq: :i}  メッ!!
           |:.i} : : : :_{: :.レ′
          ノr┴-<」: :j|
        /:r仁ニ= ノ:.ノ|!           _
          /:/ = /: :/ }!        |〕)  ガッ!!
       {;ハ__,イ: :f  |       /´
       /     }rヘ ├--r─y/
     /     r'‐-| ├-┴〆    _, 、_  '⌒ ☆
      仁二ニ_‐-イ  | |      ∩`Д´)  >>820
      | l i  厂  ̄ニニ¬      ノ  ⊂ノ 
     ,ゝ、 \ \   __厂`ヽ    (__ ̄) )
     / /\_i⌒ト、_   ノrr- }     し'し′
   └-' ̄. |  |_二二._」」__ノ  
823デフォルトの名無しさん:2007/11/02(金) 18:31:20
つーか805のって正三角形になるの真ん中だけじゃね?
824デフォルトの名無しさん:2007/11/02(金) 18:35:03
>>820の画像のぱんつを脱がせるプログラムを作ってください。
825デフォルトの名無しさん:2007/11/02(金) 18:41:36
>>823
正三角形に分割とは書いてなかったから、>>741 の正20面体のアルゴリズムを
そのままつかってみた
826デフォルトの名無しさん:2007/11/02(金) 18:49:50
>>818
リンク先の main をそのまんま使うのが思ったより難しかった
CHAR_MAX ギリギリまで使うのは大変
#include<ctype.h>

int get_word(char buf[], char word[][MAX_CHAR]){
int i, j, wordnum=0;

for(i=j=0;;i++){
if(isalpha(buf[i]) && j<MAX_CHAR){
word[wordnum][j++]=buf[i];
}else if(j){
if(j<MAX_CHAR)word[wordnum][j]='\0';
wordnum++;j=0;
}
if(!buf[i] || wordnum>=MAX_WORD) break;
}
return wordnum;
}

int strlng(char word[]){
return (strlen(word)>MAX_CHAR)?MAX_CHAR:strlen(word);
}

void print_word(int wordnum, char word[][MAX_CHAR]){
int i;
for(i=0;i<wordnum;i++) printf("%.*s: %d letters\n", MAX_CHAR, word[i], strlng(word[i]));
}
827デフォルトの名無しさん:2007/11/02(金) 21:06:40
>>826
本当にありがとうございます!
828デフォルトの名無しさん:2007/11/02(金) 21:35:14
>>817
きみ、大丈夫?
829デフォルトの名無しさん:2007/11/02(金) 21:39:43
>>828
>>826 はポインタを使っているが、
一見そうは見えないだけ
gets の引数とか
strlen の引数とか
get_word print_word strlng の引数とか
printf の書式指定とか、書式指定 %s に対応する引数とか
いろいろ使ってる
830デフォルトの名無しさん:2007/11/02(金) 21:41:13
ごめ、>>829 は忘れて
831デフォルトの名無しさん:2007/11/03(土) 01:13:30
課題1
変数xが12より大きく24未満ならば12を引いた数を表示、
0より小さいか24以上ならばOut of rangeを表示、
0以上12以下ならばそのまま表示するプログラムを作れ。

課題2
フィボナッチ数列の最初の10項を成分とするベクトルを作成せよ

スレ違いなんですが「scilab」でおねがいできませんか?;;
scilabの板が見つからなくってほとほと困りはててここに参りましたorz
832デフォルトの名無しさん:2007/11/03(土) 01:34:53
>>831
分かってるとおりスレ違い。せめて雑談用などに行こうね。
833デフォルトの名無しさん:2007/11/03(土) 01:41:04
>>831
scilabは全く知らないが、↓のマニュアル片手にやってみた。
ttp://www.ecl.sys.hiroshima-u.ac.jp/scilab/man.html

課題1
[x]=scanf('%d')
if x>12 & x<24 then
printf('%d\n', x-12)
elseif x<0 | x>=24
printf('Out of range\n')
else
printf('%d\n', x)
end

課題2
V=[1,1,2,3,5,8,13,21,34,55]
834デフォルトの名無しさん:2007/11/03(土) 01:49:51
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5204.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

 [3.3] 言語: C++
[4] 期限: 11/4 12時
[5] その他の制限:

よろしくお願いします
835デフォルトの名無しさん:2007/11/03(土) 10:05:22
>>834>>111>>168>>646>>807>>814
・宿題の原文を晒せ
・小出しするな
・過去の問題文は消さないでほしいな
836デフォルトの名無しさん:2007/11/03(土) 10:15:53
>>750
これどうやんの?少し考えてみたがわからんかったが
837デフォルトの名無しさん:2007/11/03(土) 10:28:06
1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): 2行2列の行列を入力し、その逆行列を表示させなさい。逆行列がない場合は「逆行列なし」
                   と表示させること。


                   実行結果(例)
                 va[1][1]:1
va[1][2]:2
va[2][2]:3
va[2][2]:4

逆行列は
                 -2.00 1.00
1.50 -0.50
[3] 環境
 [3.1] OS: (Windows/Linux/等々) windows2000
 [3.2] コンパイラ名とバージョン: C++Builder
 [3.3] 言語: C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 来週の月曜
[5] その他の制限: 多次元配列までならいました。できるかぎり簡単な文でお願いします。
838デフォルトの名無しさん:2007/11/03(土) 10:29:17
見づらいのでもう一度。。。

] 授業単元: 情報処理
[2] 問題文(含コード&リンク): 2行2列の行列を入力し、その逆行列を表示させなさい。逆行列がない場合は「逆行列なし」
                   と表示させること。


実行結果(例)
va[1][1]:1
va[1][2]:2
va[2][2]:3
va[2][2]:4

逆行列は
-2.00 1.00
1.50 -0.50
[3] 環境
 [3.1] OS: (Windows/Linux/等々) windows2000
 [3.2] コンパイラ名とバージョン: C++Builder
 [3.3] 言語: C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 来週の月曜
[5] その他の制限: 多次元配列までならいました。できるかぎり簡単な文でお願いします。
839デフォルトの名無しさん:2007/11/03(土) 10:55:32
>>838
main() {
  int i, j;
  double A[2][2], B[2][2], D;
  for (i = 0; i < 2; ++i) {
    for (j = 0; j < 2; ++j) {
      scanf("%lf", &A[i][j]);
    }
  }
  D = A[0][0]*A[1][1]-A[0][1]*A[1][0];
  if (D == 0) {
    printf("no inverse\n");
  } else {
    B[0][0] =  A[1][1]/D; B[0][1] = -A[0][1]/D;
    B[1][0] = -A[1][0]/D; B[1][1] =  A[0][0]/D;
    for (i = 0; i < 2; ++i) {
      for (j = 0; j < 2; ++j) {
        printf("%.2lf ", B[i][j]);
      }
      printf("\n");
    }
  }
}
840デフォルトの名無しさん:2007/11/03(土) 11:40:30
>>835
・宿題の原文を晒せ
>先生が口頭で言うんで、原文ないんですよ・・・すいません。
・小出しするな
>小出ししてるわけじゃなくて、どんどん付け加えられてるんです。
・過去の問題文は消さないでほしいな
>すいません。まとめてみました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5205.txt

よろしくお願いします。
841デフォルトの名無しさん:2007/11/03(土) 11:54:31
どんどん付け加えられているなら
テンプレにそって新たに質問したら?
横着するのはイクナイ
842デフォルトの名無しさん:2007/11/03(土) 11:56:01
付け加えられるたびにここに丸投げか。おめでたいな。
843デフォルトの名無しさん:2007/11/03(土) 13:16:55
>>839
サンクス!!
844デフォルトの名無しさん:2007/11/03(土) 16:35:03
今週末は宿題少ないのかね
845デフォルトの名無しさん:2007/11/03(土) 16:37:55
[1] 授業単元:C言語
[2] 問題文:ルンゲ・クッタ法を用い、dy/dx=(3x-5y-4)/5 の常微分方程式を解きなさい。
      また、その結果をExcelファイルに出力しなさい。諸条件は以下のようにする。
      初期値 (x,y)=(0,0)
きざみ幅 Δh=0.3
積分区間 [a,b]=[0,3]
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 2007年11月5日まで
[5] その他の制限: CSVファイル出力可
お願いします。
846デフォルトの名無しさん:2007/11/03(土) 17:06:17
おまいらwwwここ見てみwwwwwww天才降臨wwwww

1 :以下、名無しにかわりましてVIPがお送りします。:2007/11/03(土) 14:02:12.45 ID:o3DHz8v00
http://id13.fm-p.jp/185/notkephir/


裏絵バロスwwwwwwwwwwwww


やあ、ここのBBSのパス解析できたら明日おにゃのことセックルできるお(^ω^ )

http://wwwww.2ch.net/test/read.cgi/news4vip/1194066132/698-698
847デフォルトの名無しさん:2007/11/03(土) 17:06:21
>>750のようなグラフ問題は相当難しいぞ オレにとっては。
巡回セールスマンとかハミルトン経路とかの問題ですら(オレにとっては)難しいというのに。
848デフォルトの名無しさん:2007/11/03(土) 17:20:22
>>750
町A・町B・町Cとあって、町Bから町Aと町Cに1本ずつ道があった場合
町Aと町Cは繋がっているものと考えてよいか?
849デフォルトの名無しさん:2007/11/03(土) 17:21:25
>>848は見なかったことにしてくださいませ…
850デフォルトの名無しさん:2007/11/03(土) 17:31:28
>>750
円周上にn個の点があり、それらの点がm本の辺で繋がっており、閉路をなしている。
上記のグラフからh本の辺を取り除いたところ、独立してしまう点、あるいは分断された複数の閉路が出来た。
再び閉路を形成するには、何本の辺をどの頂点間に追加すればよいか。

……立派に離散数学の範疇だな
851デフォルトの名無しさん:2007/11/03(土) 17:46:30
>>845
#include <stdio.h>
double f(double x,double y)
{
return (3.0*x-5.0*y-4.0)/5.0;
}
main()
{
double a=0.0,b=3.0,x=0.0,y=0.0,dh=0.3,i;
double k1,k2,k3,k4;
FILE *fp;

if((fp=fopen("runge.csv","w"))==NULL){
printf("file can't open.\n");
return;
}
for(i=a;i<=b;i+=dh){
k1=f(x,y)*dh;
k2=f(x+dh/2.0,y+k1/2.0)*dh;
k3=f(x+dh/2.0,y+k2/2.0)*dh;
k4=f(x+dh,y+k3)*dh;
fprintf(fp,"%lf,%lf\n",x,y);
x+=dh;
y+=(k1+k2*2.0+k3*2.0+k4)/6.0;
}
fclose(fp);
}
精度の指定が無いので通常(小数点以下第6位)の精度で出力してます。
ファイル名は適当に書き換えてください。
852デフォルトの名無しさん:2007/11/03(土) 17:47:35
>>845 4次のルンゲ・クッタ
#include <stdio.h>
#define FUNC(x, y) ((3*(x) - 5*(y) - 4)/5)
int main(int argc, char *argv[]){
    FILE *fp;
    double s1, s2, s3, s4;
    double x, y, h;
    double a, b;
    int i, n;

    if(argc < 2) return fprintf(stderr, "usage : %s filename\n", argv[0]), 1;
    fp = fopen(argv[1], "w");

    /* 初期値 */
    x = 0, y = 0, h = 0.3;
    fprintf(fp, "%g %g\n", x, y);
    /* 積分区間 */
    a = 0, b = 3;
    n = (b - a)/h;

    for(i = 0; i < n; i++){
        s1 = FUNC(x, y);
        s2 = FUNC(x + h/2, y + s1*h/2);
        s3 = FUNC(x + h/2, y + s2*h/2);
        s4 = FUNC(x + h, y + s3*h);
        y = y + (s1 + 2*s2 + 2*s3 + s4)*h/6;
        x += h;
        fprintf(fp, "%g %g\n", x, y);
    }

    return 0;
}
853デフォルトの名無しさん:2007/11/03(土) 18:54:55
>>750
完全グラフごとに分割せよ
各町が道路をn個持てばn完全グラフの可能性がある
n完全グラフはn-1まで道路がこわせれても平気
例えば、4つまで壊して良いなら、5完全グラフは一つの町であるとして良い
854デフォルトの名無しさん:2007/11/03(土) 18:56:20
間違え
n完全グラフはn-2まで道路がこわせれても平気
855デフォルトの名無しさん:2007/11/03(土) 19:05:16
例えば3つまで壊して良いならば、5以上の完全グラフは一点に縮める
すると、残ったのは4以下の完全グラフである
ひとつ道路を作れば5完全グラフに出来るなら道路数をカウントしてそれを一点に縮める
もっとも少ない道路で5完全グラフになるものを見つけて道路数をカウントしてそれを一点に縮める
最後にひとつ町しか無くなればひつような道路数が求まる
856853:2007/11/03(土) 19:09:11
間違えた
857デフォルトの名無しさん:2007/11/03(土) 19:11:09
コーディングじゃなくてアルゴリズムの問題となると
まったく手がでらん・・・
858853:2007/11/03(土) 20:09:45
たとえば、5本消して良い場合、各町からは最低道路が6つ必要である
もっとも道路が少なくなるように設置すれば良いはずだ

たとえば3点あって道路がひとつもなく、5本消して良い場合は、最大18本必要になるが
お互いをつなぐようにすれば9本で済む

もともと道路が設置してある場合でも、うまくつなげば出来るはず
たとえば100本ひつようとなったら50個道路を作り、101個なら51個で良いはずだ(証明はわからない)
859デフォルトの名無しさん:2007/11/03(土) 20:15:40
たとえば>>750の例2でいうと、各頂点から2本出ているから、2本消して良いようにすると
各頂点から1つ道路を増やせばよいが、そのうち1つはお互いに繋がるようにすれば道路は2つで済む
860858:2007/11/03(土) 20:29:15
どうやら>>858では駄目みたいだ
4完全グラフが2つあって1つの頂点同士で繋がっているとすると
各頂点から3つ以上道路が出ているから2つ消しても良いはずだが、この場合上のひとつの道路を壊せば分断されてしまう
861デフォルトの名無しさん:2007/11/03(土) 20:37:53
辺連結度増大問題でぐぐれ
862858:2007/11/03(土) 20:50:03
こんなのみつけたぞ

最大フロー最小カット定理(英: Max-flow min-cut theorem)は、フローネットワークにおける
最大フロー問題と呼ばれる最適化問題に関する定理である。
メンガーの定理から導出される。その内容は次の通り。

「最大フローは最小カットの容量に等しい」
平たく言えば、ネットワークの最大流量はボトルネックに左右されることを意味している。
任意の2点間で、一方から他方へ流れる物量は、その経路内で最も弱い部分によって制限される

ttp://ja.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E3%83%95%E3%83%AD%E3%83%BC%E6%9C%80%E5%B0%8F%E3%82%AB%E3%83%83%E3%83%88%E5%AE%9A%E7%90%86
863できるかな?:2007/11/03(土) 21:47:33
Solaris10を超えるOSを作成しろ
864デフォルトの名無しさん:2007/11/03(土) 21:55:14
>>863
先生!まだ、出来てません。もう少し待ってください!

ttp://www.oreillynet.com/onlamp/blog/2006/03/learning_solaris_11.html
865845:2007/11/03(土) 23:29:44
>>851,852
ありがとうございます。
866デフォルトの名無しさん:2007/11/04(日) 00:29:41
1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5206.txt
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C言語
[4] 期限: 11月4日午前1時30分まで
C言語初めて6ヶ月の初心者です
よろしくお願いします
867デフォルトの名無しさん:2007/11/04(日) 00:35:20
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5205.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

 [3.3] 言語: C++
[4] 期限: 11/5 12時
[5] その他の制限:

よろしくお願いします
868866:2007/11/04(日) 01:28:55
11月4日午前1時30分まで →11月5日午後11時までに変更
869デフォルトの名無しさん:2007/11/04(日) 01:49:00
C言語の1から7くらいまで教えてください
870デフォルトの名無しさん:2007/11/04(日) 02:10:28
>>869
#include <stdio.h>
#define N 7

int generate(int n){return n>=N?-1:n+1;}
void createarray(int *array){
int num = 1;
*array++ = num;
while((num = generate(num)) != -1) *array++ = num;*array = -1;
}
void str(char *buf, const int *array){
while((*buf++ = *array++ + '0') != -1);*--buf = '\0';
}

void tell(){
int ar[128];char buf[128];

createarray(ar);str(buf,ar);
puts(buf);
}

int main(){
tell();
return 0;
}
871デフォルトの名無しさん:2007/11/04(日) 02:15:19
>>870
日本語でおk

っていうかC言語ってなんだよ。俺らの使ってる言語に合わせてよ^^;
872デフォルトの名無しさん:2007/11/04(日) 04:44:58
>>870
void strをTO☆ME☆TE
873デフォルトの名無しさん:2007/11/04(日) 10:17:44
874デフォルトの名無しさん:2007/11/04(日) 12:35:54
>>872
すまん、適当に作ったもんで

#include <stdio.h>
#define N 7

int generate(int n){return n>=N?-1:n+1;}
void createarray(int *array){
*array = 1;
while((*(array+1) = generate(*array)) != -1 && ++array);
}
void str(char *buf, const int *array){while((*buf++ = *array++ + '0') != '0'-1 || (*--buf = '\0'));}

void tell(){
int ar[128];char buf[128];

createarray(ar);str(buf,ar);
puts(buf);
}

int main(){
tell();
return 0;
}
875デフォルトの名無しさん:2007/11/04(日) 12:43:41
引っ張るほどのネタでもない
876デフォルトの名無しさん:2007/11/04(日) 14:03:22
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

21 22 23 24 25
20 07 08 09 10
19 06 01 02 11
18 05 04 03 12
17 16 15 14 13

のように数字を順番に反時計回りに書いていくことを考える。
10^9 以下の自然数 k が与えられたとき、k を中心とする 9 マスを表示せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 今日中
[5] その他の制限: とくにありません。

よろしくおねがいします
877デフォルトの名無しさん:2007/11/04(日) 14:23:58
時計回りな件について
878876:2007/11/04(日) 14:35:04
まちがえました!!すみません。時計回りでお願いします。
879デフォルトの名無しさん:2007/11/04(日) 14:58:21
>>866,873
(1)
int main(void){
int i,ch;
int cnt[10] = {0}; /* 数字文字の出現回数 */
do{
ch = getchar();
if(ch >= '0' && ch <= '9') cnt[ch - '0']++;
}while(ch != EOF); /* 無闇に無限ループ化しない方が無難 */

puts("数字文字の出現回数");
for(i = 0;i < 10;i++){
printf("\'%d\' : ",i); /* 文字列内の『'』は『\'』 */
for(ch = cnt[i];ch > 0;ch--) printf("*"); /* 新たにjを使わずchでもよいかと */
putchar('\n');
}
return(0);
}

(2)
unsigned set(unsigned x,int pos){ return (x & (0x1U << pos)); }
unsigned reset(unsigned x,int pos){ return (x | ~((unsigned)0x1U << pos)); }
unsigned inverse(unsigned x,int pos){ return (x ^ (0x1U << pos)); }
/* unsigned reset(unsigned x,int pos){ return (x | 0xFFFFFFFFUL ^ (0x1U << pos)); } */
880デフォルトの名無しさん:2007/11/04(日) 15:00:06
変数の使いまわしは避けるべき
881デフォルトの名無しさん:2007/11/04(日) 15:05:23
returnに()は冗長
882デフォルトの名無しさん:2007/11/04(日) 15:09:53
>>879
&と|
883879:2007/11/04(日) 15:22:20
>>880
さよか。メモリ少ない頃に学んだもんでつい。

>>881
元のがreturn()だったんで一応と思ったんだが、たしかに。

>>882
ああ、ホントだ……。

色々スマン。駄目な見本とでもしてくれorz
884879:2007/11/04(日) 15:26:50
ああ、違う。return()は元じゃなくて先のmain()のがそうだったんで、勘違いした。元のは普通にreturnのみだった。ゴメン、半年ROMってくる
885デフォルトの名無しさん:2007/11/04(日) 16:13:45
遥か過去、retrun (0)と書いてコンパイルに通らなかったことがあってな、
そのエラーが物凄く見つけづらかったらしくてな、
そこから「returnの値は括弧で囲むな」という(古い)格言が生まれた


〜C言語を256倍使うための本 ASCII〜
886デフォルトの名無しさん:2007/11/04(日) 16:16:44
>〜C言語を256倍使うための本 ASCII〜

懐かしいw 黄色本だよね。
887デフォルトの名無しさん:2007/11/04(日) 17:25:56
年がばれるが確かにあの黄色くて安っぽい本は懐かしい
888デフォルトの名無しさん:2007/11/04(日) 21:17:36
っていうか、括弧で囲むだけでエラー出るとかどういう理屈なのかゆとりだから分かんない。
889744:2007/11/04(日) 22:04:31
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて、直線y=x+1/2と単位円x*x+y*y=1の交点のの近似解(小数点以下第6位まで)を求めよ。
1つのプログラムに書くこと。
二分法の初期値[a,b]=[-1,1]
ニュートン法で用いる初期値は2つとも0とせよ。
ニュートン法も二分法もともに何回で収束したかがわかるようにすること。
関数へのポインタは必ず使うこと。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007年11月2日17時
[5] その他の制限: 関数へのポインタを必ず使うこと。

前と同じ書き込みです。745-747見てもいまいちできません。
よろしくお願いします。
890866:2007/11/04(日) 22:30:45
>>873,879
873と879の作ったプログラムは間違いって事ですか?
891デフォルトの名無しさん:2007/11/04(日) 22:42:54
>>888
ある文が関数呼び出しかどうかの判断は括弧を見て行うのだが、
return は関数ではないため、括弧を見つけて関数と誤解釈してこける。
892デフォルトの名無しさん:2007/11/04(日) 23:55:40
return (1+1)*2;
893デフォルトの名無しさん:2007/11/04(日) 23:58:37

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
894デフォルトの名無しさん:2007/11/04(日) 23:59:18

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
895デフォルトの名無しさん:2007/11/04(日) 23:59:51

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
896デフォルトの名無しさん:2007/11/05(月) 00:01:40
>>893
話はわかった。つまりこうだな?
void main(){while(1);}
897デフォルトの名無しさん:2007/11/05(月) 00:07:34

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
898デフォルトの名無しさん:2007/11/05(月) 00:08:38

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
899デフォルトの名無しさん:2007/11/05(月) 00:10:43

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
900デフォルトの名無しさん:2007/11/05(月) 00:11:14

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
901 ◆ViDuXQp31Y :2007/11/05(月) 00:14:49
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>770のプログラムの入力学生数を最大50人までとし、50人以下の任意の人数で入力を止める事が出来るプログラム
を作成せよ。(例:10人分を入力した時点で入力を停止して、入力した10人分の情報を表示する。)
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限: 2007年11月05日01:00迄
[5] その他の制限:

改めて宜しくお願いします。
902デフォルトの名無しさん:2007/11/05(月) 00:28:18

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
903デフォルトの名無しさん:2007/11/05(月) 00:28:48

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
904デフォルトの名無しさん:2007/11/05(月) 00:29:34

クソの集まり創価学会

偽善者が政治活動、公明党

キチガイ集団が政治活動、公明党

池田狂信ネズミ講が政治活動、公明党

騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
905デフォルトの名無しさん:2007/11/05(月) 03:52:04
>>888
>>885を良く見ろ、retrunだろ
綴り間違えに気付かなきゃ本当にゆとりだ
906デフォルトの名無しさん:2007/11/05(月) 04:03:20
>>876 多分、0を中心とした9×9を手計算で求めて配列の初期値にして、それにkの値を加えるという方法が妥当、ということに今気づいた。
#include <stdio.h>
#include <stdlib.h>

#define N 9

int main(void){
    int k, l, m, n, o;
    int mass[N*N] = {0}, *p;

    scanf("%d", &k);
    p = mass + (N - 1)/2 + (N - 1)/2*N;

    for(l = 2, m = 0, n = 1, o = 0; o < N*N; o++){
        *p = o + k;
        if(m++ < l/2)
            p += n;
        else
            p += n*N;

        if(m == l)
            l += 2, m = 0, n *= -1;
    }

    for(l = 0; l < N; l++){
        for(m = 0; m < N; m++)
            printf("%03d ", mass[l*N + m]);
        printf("\n");
    }

    return 0;
}
907デフォルトの名無しさん:2007/11/05(月) 04:10:31
>>876
発見がもう期日過ぎで、もうどうしようもなかったけど、面白そうだから作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5208.txt

特にコメントなんかは入れて無いけど、プログラムの要約をすると
まず1が入る座標を特定して、そこを基準として、ぐるぐる回して数字を入れていく感じ。
mallocを使ってるので、残念ながら10^9などが入れられたら場合は、たぶん動かない。
配列を使わず、計算式だけで求めて、上から表示していく方法みたいなのは俺無理。
あと、freeすんのを忘れてる。
908デフォルトの名無しさん:2007/11/05(月) 04:12:57
>>907
やっぱ最初そういう風に考えるよなw
で、10の9乗の領域が確保できなくて……
909デフォルトの名無しさん:2007/11/05(月) 04:14:27
>>907だが、>>906を見て俺は、
問題文の意味を取り違えてる事に気がついた。 これは恥ずかしいw
910デフォルトの名無しさん:2007/11/05(月) 04:30:08
>>876のやりたい事は、たぶん渦巻きの遥か彼方を表示してくれって言う意味だろう
>>906>>907も題意には沿ってる。
911デフォルトの名無しさん:2007/11/05(月) 04:54:40
右1
左5
下3
上7

変化するから配列使わなくても出来る
nが与えられたとき上へ4つ進めると+28
そこから左へつ進めると+20

n+48 n+43 ・・・・
n+41 n+36 ・・・・
とすればよい
912デフォルトの名無しさん:2007/11/05(月) 05:01:07
906も907も全く題意を理解してないと思うが。
例えばk=5を与えられたら、
19 06 01
18 05 04
17 16 15
の9マスを表示するんだろ。
913デフォルトの名無しさん:2007/11/05(月) 05:09:30
コードで示してくれまいか?
914デフォルトの名無しさん:2007/11/05(月) 05:09:51
>>912
……とは>>876は明確には言っていない
915デフォルトの名無しさん:2007/11/05(月) 05:13:07
>10^9 以下の自然数 k が与えられたとき、k を中心とする 9 マスを表示せよ。
916デフォルトの名無しさん:2007/11/05(月) 05:14:14
9 マス×9 マスでは無いからな
917デフォルトの名無しさん:2007/11/05(月) 05:17:15
コードはswitchだらけの糞コードになっちまったから恥ずかしくて晒せない。
かわりにレス番入れたときの結果をあげとく
1038 913 796
1037 912 795
1036 911 794
918デフォルトの名無しさん:2007/11/05(月) 05:17:56
じゃなくて、kが与えられた時そこから新たに渦巻状の配列を作るのか、
それとも1から作った渦巻きの中で、kの周辺を取り出すのかってこと
そこらへんが>>876は明確じゃない
919デフォルトの名無しさん:2007/11/05(月) 05:19:13
kから渦巻き作るのが問題になるかよw
920デフォルトの名無しさん:2007/11/05(月) 05:23:12
1から作った渦巻きの周囲だな
921デフォルトの名無しさん:2007/11/05(月) 05:23:21
でも>>906はそれをやってるぞ
922デフォルトの名無しさん:2007/11/05(月) 05:27:30
だから全く理解してないって言ってるんだろ。
923デフォルトの名無しさん:2007/11/05(月) 05:32:00
現在の進行方向と、のこりいくつ進んだら曲がるのか記録していき
与えられた数字で出たらなんとかすればいいのでは?
924デフォルトの名無しさん:2007/11/05(月) 05:32:27
>>876 こういうことか……。しかし、時間掛かる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5209.txt
925デフォルトの名無しさん:2007/11/05(月) 05:37:20
進む量は
1、1、2、2、3、3、4、4
となる。
1の位置を(0,0)として
右方向で進むなら0、下へ進むなら1、左へ進むなら2
を記録していれば求める位置にたどり着く
926デフォルトの名無しさん:2007/11/05(月) 06:04:47
#include <iostream>
using namespace std;

void zahyomotomeru(int &su,int &x,int &y){
int dx,dy,n=0,muki=0;
double nokori=1;
x=y=0;
while(1){
if(muki==0){dx =1;dy= 0;}if(muki==1){dx= 0;dy=-1;}if(muki==2){dx=-1;dy= 0;}if(muki==3){dx= 0;dy= 1;}
for(int i=0;i<nokori;i++){
if(n==su)return ;
x+=dx;y+=dy;n++;}
if(muki==3)muki=0; else muki++;
nokori+=0.5;}}

int nummotomeru(int a,int b){
int x=0,y=0,dx,dy,n=0,muki=0;
double nokori=1;
while(1){
if(muki==0){dx =1;dy= 0;}if(muki==1){dx= 0;dy=-1;}if(muki==2){dx=-1;dy= 0;}if(muki==3){dx= 0;dy= 1;}
for(int i=0;i<nokori;i++){
if(x==a && y==b)return n;
x+=dx;y+=dy;n++;}
if(muki==3)muki=0; else muki++;
nokori+=0.5;}}

main(){
int x,y;zahyomotomeru(912,x,y);
cout<<nummotomeru(x-1,y+1)<<" "<<nummotomeru(x,y+1) <<" "<<nummotomeru(x+1,y+1)<<endl;
cout<<nummotomeru(x-1,y )<<" "<<nummotomeru(x,y ) <<" "<<nummotomeru(x+1,y )<<endl;
cout<<nummotomeru(x-1,y-1)<<" "<<nummotomeru(x,y-1) <<" "<<nummotomeru(x+1,y-1)<<endl; }
927926:2007/11/05(月) 06:06:51
924や917と数字は同じだが回転してるな
928デフォルトの名無しさん:2007/11/05(月) 06:08:08
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
  listテンプレートを使ったソートプログラムの作成
   ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5210.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限:11月6日 12時
[5] その他の制限:なし


宜しくお願いします
929926 なおした:2007/11/05(月) 06:36:52
#include <iostream>
using namespace std;

void zahyomotomeru(int &su,int &x,int &y){
int dx,dy,n=1,muki=0;
double nokori=1;x=y=0;
while(1){
if(muki==0){dx =1;dy= 0;}if(muki==1){dx= 0;dy=-1;}
if(muki==2){dx=-1;dy= 0;}if(muki==3){dx= 0;dy= 1;}
for(int i=0;i<(int)nokori;i++){
if(n==su)return ;x+=dx;y+=dy;n++;}muki++;
if(muki==4)muki=0;nokori+=0.5;}}

int nummotomeru(int a,int b){
int x=0,y=0,dx,dy,n=1,muki=0;
double nokori=1;
while(1){
if(muki==0){dx =1;dy= 0;}if(muki==1){dx= 0;dy=-1;}
if(muki==2){dx=-1;dy= 0;}if(muki==3){dx= 0;dy= 1;}
for(int i=0;i<(int)nokori;i++){
if(x==a && y==b)return n;x+=dx;y+=dy;n++;}
muki++;if(muki==4)muki=0;nokori+=0.5;}}

main(){
int x,y;zahyomotomeru(912,x,y);
cout<<nummotomeru(x-1,y+1)<<" "<<nummotomeru(x,y+1) <<" "<<nummotomeru(x+1,y+1)<<endl;
cout<<nummotomeru(x-1,y )<<" "<<nummotomeru(x,y ) <<" "<<nummotomeru(x+1,y )<<endl;
cout<<nummotomeru(x-1,y-1)<<" "<<nummotomeru(x,y-1) <<" "<<nummotomeru(x+1,y-1)<<endl; }
930デフォルトの名無しさん:2007/11/05(月) 06:43:28
>>928
期限は12時と書いてあるけれど、11月6日のお昼の12時のこと?
931デフォルトの名無しさん:2007/11/05(月) 07:29:06
>>929
やっぱり 10^9 は終わらんなあ
932デフォルトの名無しさん:2007/11/05(月) 08:59:49
933デフォルトの名無しさん:2007/11/05(月) 09:13:11
質問です。
c++で素数を求めるプログラムなんですが、7=素数 というコードは書けるんですが
素数ではない数を8=2*4 9=3*3 10=2*5 とするにはどうしたらいいんでしょうか?
934デフォルトの名無しさん:2007/11/05(月) 09:18:37
>>933
>>1

あと 8=2×4 って、8=2×2×2 としてはいけないということ?
935デフォルトの名無しさん:2007/11/05(月) 09:25:08
>>934
そうなんです。
936デフォルトの名無しさん:2007/11/05(月) 09:26:43
937デフォルトの名無しさん:2007/11/05(月) 09:27:46
√nまでの数で実際わってみろよ
それだけだろが
938デフォルトの名無しさん:2007/11/05(月) 09:32:19
#include <iostream>
using namespace std;

main(){
int n=87451202,i,q,r;
for(i=2;i*i<=n;i++){
q=n/i; r=n-i*q;
if(!r){cout<<i<<" * "<<q;return 0;}
}
cout<<"peinme";}
939デフォルトの名無しさん:2007/11/05(月) 09:39:03
[1] プログラミング演習
[2] c++で 2=素数
       3=素数
       4=2*2
       5=素数
       6=2*3
       7=素数
       8=2*4
       9=3*3
       10=2*5
       ...
       を50まで求め、画面に出力せよ

[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C++
[4] 期限: なし
[5] その他の制限: 特になし
940g:2007/11/05(月) 10:18:29
学校で作ってるオセロだけど、行き詰ったから、どこが悪いか指摘してほしい。
あと、途中で保存忘れてたから、なんか変化も試練
長いからうpした
(どこまでプログラムが進んでるか、変数の値とかとるための、
チェック用の出力多いけど、笑うなよ)
パスはc
ttp://www-2ch.net:8080/up/download/1194225344265159.iP92Zx
941デフォルトの名無しさん:2007/11/05(月) 10:40:55
>>940
・テンプレに沿って書いたほうがいい
・ソースにパスをかけるのは面倒くさい

結論:出直してきてください。
942デフォルトの名無しさん:2007/11/05(月) 10:49:16
>>940
やだ
943デフォルトの名無しさん:2007/11/05(月) 10:58:13
C言語の宿題です

整数をn個入力すると、入力した数値をソートして昇順に表示するプログラムを作成してください

お願いします
944デフォルトの名無しさん:2007/11/05(月) 11:22:50
>>939

#include<stdio.h>
#define MAX 50
int main(void){
int i,j;
for(i=2;i<=MAX;i++)
for(j=2;;j++)
if(i%j==0){
if(i>j)printf("%d = %d * %d\n",i,j,i/j);
else printf("%d = 素数\n",i);
break;
}
return 0;
}
945デフォルトの名無しさん:2007/11/05(月) 12:19:15
>>944
本当に、ありがとうございました。
求めていたものどうりになっていました。
946デフォルトの名無しさん:2007/11/05(月) 14:10:53
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
(1)キーボードから入力した任意の整数nを素因数分解して画面に表示。
(2)5つのさいころを振ってその合計が10になる確率を乱数を用いて求める。
(3)TRY&ERROR法(試行錯誤で探す)を用いて5.24x^2-3.60x-1.38=0の解を求める。
(4)5つの正の整数を引数として渡し、最大値を戻り値とする関数を使ったプログラムを求めよ。
(5)3^x=7を満たす実数をTRY&ERROR法(試行錯誤で探す)を用いて求める。

[3] 環境
[3.1] OS Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限:11/6の12時
[5] その他の制限:(3)の精度は小数点以下4桁まで。(5)の精度は小数点以下5桁まで。

どうかお願いします
947デフォルトの名無しさん:2007/11/05(月) 14:29:43
>>946
(1)
#include <stdio.h>

int main(void)
{
    int i, n;

    scanf("%d", &n);

    printf("%d = ", n);
    for(i=2; i<n; ) {
        if(n%i==0) {
            printf("%d * ", i);
            n /= i;
        }
        else i++;
    }
    printf("%d\n", n);

    return 0;
}
948デフォルトの名無しさん:2007/11/05(月) 14:37:22
(2)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 1000000

int main(void)
{
    int i, j, cnt, sum;

    srand(time(NULL));

    for(i=0, cnt=0; i<N; i++) {
        for(j=0, sum=0; j<5; j++) sum += (int)(rand() / (RAND_MAX + 1.0) * 6 + 1);
        if(sum==10) cnt++;
    }
    printf("%.2f%%\n", cnt * 100.0 / N);

    return 0;
}
949デフォルトの名無しさん:2007/11/05(月) 14:52:16
[1] 授業単元: プログラミング
[2] 問題文:整数nで入力後"factorial"という関数を呼び出して、n!を求めるプログラム。
結果はmainにて表示
定義例:int factorial( int num )
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 今日中にお願いします
[5] その他の制限: 特にないです

よろしくお願いします
950デフォルトの名無しさん:2007/11/05(月) 14:54:33
951デフォルトの名無しさん:2007/11/05(月) 14:54:41
>>946
(4)
#include<stdio.h>
int max(int *n){
int i,j=0;
for(i=1;i<5;i++)
if(n[j]<n[i]) j=i;
return n[j];
}
int main(void){
int i,n[5];
for(i=0;i<5;i++){
printf("n[%d]=",i);
scanf("%d",&n[i]);
}
printf("max = %d\n",max(n));
return 0;
}
952949:2007/11/05(月) 14:55:41
同業者がいたようですね。
指摘ありがとうございます。
953デフォルトの名無しさん:2007/11/05(月) 14:59:51
>>952 同業者とかw
954デフォルトの名無しさん:2007/11/05(月) 15:25:42
>>946
D
#include<stdio.h>
#include<math.h>
int main(void){
double x;
for(x=0;pow(3,x)<7;x+=0.00001);
printf("%.5lf < x <= %.5lf\n",x-0.00001,x);
return 0;
}
955デフォルトの名無しさん:2007/11/05(月) 16:04:31
[1] 授業単元:
[2] 問題文:
正四面体があるとする。底面(ある一つの面)に平行な(n-1)枚の面で高さをn等分することを考える。この作業を他の面に平行な面でも行う(他の方向にもn等分する)場合、正四面体は全部で何個に分けられるか。
nの入力に対してその個数を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: どちらでも可
[4] 期限:11月7日AM10:00
[5] その他の制限: 基本的なことは大体習いました。

よろしくお願いします。
956デフォルトの名無しさん :2007/11/05(月) 16:52:49
nの三乗じゃないの?
957デフォルトの名無しさん:2007/11/05(月) 16:58:00
配列の入力の時に,EOFだと-1入力で終了になりますよね?
改行で入力終了にしたいのですが,どうすればいいですか?
1 1 0 0 1 0 1 1 改行
で入力を終了したいです。
教えてください。よろしくお願いします。

//---- 配列入力
num = 0;
do {
 scanf("%d", &arr[num]);
} while ( arr[num++] != EOF );   // 改行は入力の終了
num--;                // 有効な入力数
958デフォルトの名無しさん:2007/11/05(月) 17:18:44
>>957
テンプレ読んで、関数の仕様把握しろ。
959デフォルトの名無しさん:2007/11/05(月) 17:45:12
>>957
scanf()は改行で入力を終了するのに適しない。

fgets()とsscanf()を組み合わせろ。
960デフォルトの名無しさん:2007/11/05(月) 17:49:06
>>930
そうです
よろしくお願いします
961デフォルトの名無しさん:2007/11/05(月) 17:59:43
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):Q-learningを用いて電力の需要家と供給家が最適な入札を選択するプログラムを作りなさい。
[3] 環境
 [3.1] os: windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:11月7日 12時
[5] その他の制限:
962デフォルトの名無しさん:2007/11/05(月) 18:28:00
>>955
>>956の言うとおり、
まず、一辺がaの正三角形四枚からなる正四面体の体積は V0 = (sqrt(2) * a^3) / 12 。
ここでn = 2 とすると、分割後の一つの小正四面体の体積は V2 = (sqrt(2) * a^3) / 96 。
V0 : V1 = 8 : 1
他の場合も同様にしてnの三乗
963デフォルトの名無しさん:2007/11/05(月) 18:31:56
[1]授業単元:経路選択アルゴリズム
[2]問題文:任意の2ノード間の最短路と最短最大路を求めるアルゴリズムを実行するプログラムをC,C++いずれかの言語で作成せよ
[3]環境:
[3.1]os:windows
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C,C++
[4]期限:11月8日 午前9時
[5]その他の制限:
最短路:各リンクeに非負の重み L(e)が与えられている時、あるノードsからノードdへの経路に含まれるリンクについてこの重みの総和ととったものを経路の距離と言う
ノードsからノードdへの最短路とは、ノードsからdへの経路のうちで最小のものを言う。

最大路:各リンクeに非負の重みB(e)が与えられている時、あるノードsからノードdへの経路に含まれるリンクのうち、この重みが最小であるものをボトルネックと言う。
最大路とはこのノードsからノードdへの経路のうちでボトルネックの持つ重みが最大のもののことである
964デフォルトの名無しさん:2007/11/05(月) 18:33:40
>>955
main(){
int n;
printf("n=");
scanf("%d",&n);
printf("%d\n",n*n*n);
}
965デフォルトの名無しさん:2007/11/05(月) 19:14:08
>>963
頂点(a,b)ごとにL(a,b) bpsが与えられているとして
もと、頂点0からN+1 (N+1が最後の番号とする) へ移動するなら、
頂点の経由数K=0,1,2・・・ごとに1からNの頂点を挿入する
この個数は、P(K,N)個ある 重複なるえらんだ順列
966デフォルトの名無しさん:2007/11/05(月) 19:35:08
訂正

頂点(a,b)ごとにB(a,b) bpsが与えられているとして
L(a,b) = 1/B(a,b)とする 通信速度が0ならばそこの負荷は無限大 通信不可能
967デフォルトの名無しさん:2007/11/05(月) 20:24:31
>>963
最大路の定義は明確だが、
最短最大路の定義が不明瞭。
あなたが解けない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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 97代目
http://pc11.2ch.net/test/read.cgi/tech/1193150915/
969デフォルトの名無しさん:2007/11/05(月) 20:32:45
SJISのテキストファイルを読み込んで、漢字はそのまま出力して、
ひらがなとカタカナは半角カタカナに変換し
その他の文字は半角空白に変換して出力せよ

コード表
http://qpon.quu.cc/pc/sjis.htm
http://qpon.quu.cc/pc/cord.htm
970デフォルトの名無しさん:2007/11/05(月) 20:34:56
そういえば次は99代目だ

>>969はテンプレとトリップを使おうね。
971デフォルトの名無しさん:2007/11/05(月) 20:38:14
>>967
最短路と最大路を求めよってことだろう
972デフォルトの名無しさん:2007/11/05(月) 20:38:50
>>968
C/C++の宿題を片付けます 99代目
http://pc11.2ch.net/test/read.cgi/tech/1194262698/
973963:2007/11/05(月) 20:44:09
説明文がわかりずらくてすいません

最大路の中から最短路を選ぶって事です
974デフォルトの名無しさん:2007/11/05(月) 20:45:08
[1] 授業単元:c++実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5212.txt
[3] 環境
 [3.1] OS: XP and VISTA
 [3.2] コンパイラ名とバージョン:visual studio2005
 [3.3] 言語: c++
[4] 期限: 11/8 10:00
[5] その他の制限: 特になし

よろしくお願いします。
975デフォルトの名無しさん:2007/11/05(月) 20:49:58
>>973
長さKの順列をリストアップ出来ればあとは簡単だろう
976デフォルトの名無しさん:2007/11/05(月) 20:50:06
>>963
重み付きグラフの最短経路問題ならダイクストラ法で解けばいい。
ちょうど B = 1/L なので、最大と最短両方が同じアルゴリズムで解けることになる。
977デフォルトの名無しさん:2007/11/05(月) 20:55:13
>>963 >>973
>最大路の中から最短路を選ぶって事です

最大路が一本だとすると、「その中から」選ぶことは出来ない。路は一本しか。
最大路が複数だとすると、ボトルネックの重さは各最大路において等しくなる。じゃないと「複数の最大路」っていう仮定が崩れる。よって選ぶことは出来ない。

つまり、最大路の中からは最短路は選べない。
978aho:2007/11/05(月) 20:59:06
>>974
前にも来たろ!
クラスの中身とやらも晒せ!
どうせ前みたく出来あがってんだろ!
これが何で宿題なんだよ!
979デフォルトの名無しさん:2007/11/05(月) 21:02:34
>>977
ボトルネックの値が同じ小ささの中で、経路の和が最短の物は選べる
980955:2007/11/05(月) 21:20:09
>>956>>962>>964
回答ありがとうございます

ですが……おそらく、非常に厄介なことに、それぞれの小片が正四面体にはならないと思います
(n=2の時を考えてくれれば分かりやすいかもしれません
それぞれの角を切り落とす形なので5個(≠2^3)に分かれると思います)

あくまでそれぞれの面に平行な面での分割ですので……
981aho:2007/11/05(月) 21:30:36
>>980
違ってたらごめんなさい。
問題文に”n等分する”とあるから、出来るのは正四面体なんじゃないのかな?
982デフォルトの名無しさん:2007/11/05(月) 21:36:02
981
どうやって各ブロックが四面体だとわかるんだ?
983aho:2007/11/05(月) 21:39:22
>>982
すまん。もう少し考えてから出直してくる。
984955:2007/11/05(月) 21:40:54
すいません、はっきり書くべきだったのかもしれませんが、n^3でないことは確かなんですよ……

もしかしたら私の問題の説明が曖昧だったせいかもしれませんが……補足要求があったら言ってください
985デフォルトの名無しさん:2007/11/05(月) 21:41:10
5,14,30,55…が答えでいいのかな?
986デフォルトの名無しさん:2007/11/05(月) 21:48:46
平面ごとに見れば、頂点の部分から数えて、1、4、8、16・・・個ずつの三角形がある
その中心から見て正四面体としての面がちゃんとあるかチェックすればいいのでは?
平面の方程式を考えて
987955:2007/11/05(月) 22:02:00
ああ、というか、すみません
後出しで悪いですが、プログラム中で図形的?に求めてください……
あらかじめ式を出すのではなくて……
988デフォルトの名無しさん:2007/11/05(月) 22:06:40
たとえば986のようにチェックするって事?方程式を立てて保存して内部かどうかの判定すればできるけどめんどそう
989デフォルトの名無しさん:2007/11/05(月) 23:07:28
[1] 授業単元:C
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5213.c
リンク先の/*↓ここから各自のプログラムを挿入する*/

/*↑ここまで各自のプログラムを挿入する*/
の間に、三目並べでこちらが先攻で○の時、
引き分けになる(コンピュータが負けない)プログラムを書く
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Visual Studio2005
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 水曜日まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
990aho:2007/11/05(月) 23:41:07
>>989
きれいではないが単純な、アルゴリズムは考えた。
縦・横・斜めの列で'0'が2つ揃ったら、その列の残り1つに'X'を置く。
例として、1行目に注目する。
if((ch0 == '0') && (ch0 == ch1)){
ch2 = 'X';
if((ch1 == '0') && (ch1 == ch2)){
ch0 = 'X';
これを残りの7列についても記述してやればいいんじゃない?
これより先は、実装が面倒なのでここでやめます。
ポインタが使えるなら、もっときれいに書けるよ〜
991aho:2007/11/05(月) 23:42:09
>>990
ごめんなさい。
if文の終わりに括弧付け忘れました。
992デフォルトの名無しさん:2007/11/06(火) 00:19:21
>>963
なんか混乱してる人が居るみたいだけど・・・
グラフに二種類の辺重み L(e), B(e) が与えられたとき,
・パスの長さを ΣL(e) で定義したときの最短パスを「最短路」
・パスの長さを max B(e) で定義したときの最長パスを「最大路」
と言ってるんだよね?
993992:2007/11/06(火) 00:21:44
ごめん嘘.最大路は min B(e) で定義したときの最長パスだよね?
994デフォルトの名無しさん:2007/11/06(火) 00:52:33
>>963
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5215.cpp

まったくテストしてないが.アルゴリズムは次の通り.

1. 全頂点対について最大路を計算する(Floyd-Warshall).
2. 全頂点対について最短路を計算する(Floyd-Warshall).
3. 全頂点対について最大最短路を次のように計算する.
 3.1 最大路の情報から,ボトルネックとなりうる辺を列挙.
 3.2 ボトルネックとなる辺を使う経路を 2 の情報から計算.

実際計算しているのは辺長のみ.経路そのものの計算は
Floyd-Warshall の経路復元でもしてやればできる.
995デフォルトの名無しさん:2007/11/06(火) 01:53:20
>>943のお願いします。。
996デフォルトの名無しさん:2007/11/06(火) 02:03:04
テンプレに従って書かないと
ここの住人さんは絶対に解答してくれません
997デフォルトの名無しさん:2007/11/06(火) 02:52:53
Floyd-Warshallって凄い簡単だけど、知らないと思いつかないな
2点間の距離を、他を経由した方が短ければ置き換えるって言う普通のことだけど・・・なかなか思いつかないな
998997:2007/11/06(火) 03:47:17
でも計算順序によっては値が変化しないか? かわらなくなるまで計算し続ければ良さそうだけど
999デフォルトの名無しさん:2007/11/06(火) 07:45:32
>>997-998
計算順序によらないよ.大雑把に言うと Floyd-Warshall は
 (u,v の w まで経由してよい最短経路) =
  min { (u,v の w-1 まで経由してよい最短経路)
     (u,v を w を経由する最短経路) }
という漸化式を動的計画法で計算しているのであって、
「短くなったら置き換える」というのとは本質的に違う.
1000デフォルトの名無しさん:2007/11/06(火) 08:33:33
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。