C/C++の宿題を片付けます 97代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/10/23(火) 23:48:35【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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/
0002デフォルトの名無しさん
2007/10/23(火) 23:51:3000031
2007/10/23(火) 23:59:540004デフォルトの名無しさん
2007/10/24(水) 00:00:09スレ立てた人は特に覚えておいて、
次スレの時期になったら次は99であると声高に叫ぶんだ
00051
2007/10/24(水) 00:05:06分りました。
00061=3
2007/10/24(水) 00:23:03>>3 の書き込みは馬鹿の戯言と思い無視してください
スレタイに関しては生暖かくわらってくださいませ m(_ _)m
0007デフォルトの名無しさん
2007/10/24(水) 00:35:18[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] その他の制限: なし
よろしくお願いします。
0008デフォルトの名無しさん
2007/10/24(水) 00:59:40エクセルとかワードで書いてzipでうpればよかったんじゃないか?
0009デフォルトの名無しさん
2007/10/24(水) 01:02:24それをC/C++の宿題と呼んでいいのか
0010デフォルトの名無しさん
2007/10/24(水) 01:04:490011前スレの907
2007/10/24(水) 01:09:04ですが実行してみたところ以下のようなエラーがでてしまいました。
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;
} です。どなたかエラー解決お願いします。
0012デフォルトの名無しさん
2007/10/24(水) 01:23:51[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] なし
最低限の実装でいいのでよろしくお願いします。
0013デフォルトの名無しさん
2007/10/24(水) 01:25:57×y += dx(x,y)*delta;
○y += df(x,y)*delta;
つかエラーメッセージ吐いてるんだからこのぐらい自分で気づこうよ。
>未解決の外部シンボル _dx が関数 _main で参照されました。
0014デフォルトの名無しさん
2007/10/24(水) 01:31:13[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] その他の制限:
0015デフォルトの名無しさん
2007/10/24(水) 01:47:59すいません、リンク先にあるプログラムコードの下から2行目の
ss}
のssはゴミです。
0016デフォルトの名無しさん
2007/10/24(水) 02:08:32その二つの関数があるなら、できてるも同然な気がするが…
int main()
{
char str1[256], str2[256];
printf("string? : ");
gets(str1);
printf("deleted word? : ");
gets(str2);
serach_del(str1, str2);
puts(str1);
return 0;
}
0017デフォルトの名無しさん
2007/10/24(水) 02:16:110018デフォルトの名無しさん
2007/10/24(水) 02:33:130019デフォルトの名無しさん
2007/10/24(水) 02:40:08いくつか修正して組み込んでみたけど、d _wordへ削除語の長さを渡すのがうまく行ってないのかエラーが出てうまくいかないです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5133.txt
0020デフォルトの名無しさん
2007/10/24(水) 04:24:56> if(j=m2)
==
> printf("%d\n", st1);
%s
これで動くかはわからんが。
002111
2007/10/24(水) 05:16:42すいません。ありがとうございました。
0022デフォルトの名無しさん
2007/10/24(水) 10:38:52[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
基礎レベル・・・。
どうかお願いいたします。
0023デフォルトの名無しさん
2007/10/24(水) 10:58:591番はこんな感じになります
#include<stdio.h>
int main(void)
{
int n;
printf("数を入力してください>");
while(scanf("%d",&n)>0) printf("入力がおかしいです。もう一度入力してください。>");
printf("%sです。\n",(n&1)?"奇数":"偶数");
return 0;
}
0024デフォルトの名無しさん
2007/10/24(水) 11:04:09とりあえず次の入力を試しました
5
abon
何かがおかしいです。もう一度投稿して下さい。>
0025デフォルトの名無しさん
2007/10/24(水) 11:14:23scanfの戻り値のチェック間違えてた…
始めに「失敗した」書式のとこ返すんだった…。
#include<stdio.h>
int main(void)
{
int n;
printf("数を入力してください>");
while(scanf("%d",&n)>1) printf("入力がおかしいです。もう一度入力してください。>");
printf("%sです。\n",(n&1)?"奇数":"偶数");
return 0;
}
0026デフォルトの名無しさん
2007/10/24(水) 11:17:55テストしてから書き込むことを勧める
0027デフォルトの名無しさん
2007/10/24(水) 11:23:430028デフォルトの名無しさん
2007/10/24(水) 11:27:48とりあえず、while(scanf("%d",&x))...みたいな書き方だと条件満たさないと思うよ
%dは数字以外の文字をひたすら無視するから
というかC#知らないけど、
scanfとかでいいのか?
0029デフォルトの名無しさん
2007/10/24(水) 11:34:020030デフォルトの名無しさん
2007/10/24(水) 11:45:04…メッセージボックスですか見落としてた…Win32APIですね…
そしたら全然ダメだわ
>>26
24 はDOSアプリとしてなら確認しました
もしかして他の二つもWinアプリとして作らないといけないのかでしょうか?
基礎レベルでWin32APIは使わないと思うのだが…
0031デフォルトの名無しさん
2007/10/24(水) 11:46:38だからC#なんだってば。
つーか、>25もおかしいぞ。
0032デフォルトの名無しさん
2007/10/24(水) 11:48:360033デフォルトの名無しさん
2007/10/24(水) 11:49:20scanfの戻り値
代入された項目数を返す とある
新ANSI C言語辞典(ISBN4-7741-0432-9)より
この本一部妖しいが…多次元配列あたりの説明が…
0035デフォルトの名無しさん
2007/10/24(水) 12:00:11いや、それはいいから>25が拙いってことは理解しておいた方がいいよ。
二重の罠に填まっているから。
0036デフォルトの名無しさん
2007/10/24(水) 12:00:15これおかしいだろ
0037デフォルトの名無しさん
2007/10/24(水) 12:02:25日曜あたりからこのスレに書き始めた人っぽいけど、まだ他人の宿題に答えるレベルじゃないんじゃない?
0038デフォルトの名無しさん
2007/10/24(水) 12:02:510039デフォルトの名無しさん
2007/10/24(水) 12:04:443.をあくまで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;
}
0040デフォルトの名無しさん
2007/10/24(水) 12:09:13分りました…これ以降自粛します…。
>>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;
}
0041デフォルトの名無しさん
2007/10/24(水) 12:13:53テストしてから書き込むことを勧める
例えば入力に次のものを入れてみる
abon
100
#あと負数をどうするとか
0042デフォルトの名無しさん
2007/10/24(水) 12:29:01というかscanfを使わない方がいい
0043デフォルトの名無しさん
2007/10/24(水) 12:30:420044デフォルトの名無しさん
2007/10/24(水) 12:33:49C# メッセージボックス でググったらすぐに出る
0045デフォルトの名無しさん
2007/10/24(水) 12:34:410046デフォルトの名無しさん
2007/10/24(水) 12:38:220047デフォルトの名無しさん
2007/10/24(水) 12:40:53scanfが不評な理由が身に染みました…。
かといってgetsもバッファオーバーランの危険がありますが…
stdinからfgstsしてから変換が安全でしょうか?
0048デフォルトの名無しさん
2007/10/24(水) 12:46:53ここはお前の質問スレじゃないから、とっとと失せろ
0049デフォルトの名無しさん
2007/10/24(水) 12:49:27>35を無視するから……
初心者スレ辺りに移動するなら付き合うけど、また無視するならしらね。
0050デフォルトの名無しさん
2007/10/24(水) 12:55:45俺はgetcharをこよなく愛してる
0051デフォルトの名無しさん
2007/10/24(水) 13:01:48#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;
}
0052デフォルトの名無しさん
2007/10/24(水) 13:27:02ttp://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
で作動を確認(ロダの関係で拡張子を変更)
0053デフォルトの名無しさん
2007/10/24(水) 13:44:13[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
と増やし、それぞれの場合における結果を画面に表示させること。
どうかよろしくお願いします。
0054デフォルトの名無しさん
2007/10/24(水) 14:01:25前スレのとは別の人?
(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;
}
0055デフォルトの名無しさん
2007/10/24(水) 14:02:05#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;
}
0056デフォルトの名無しさん
2007/10/24(水) 14:10:300057デフォルトの名無しさん
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] その他の制限: 必ず再帰を使うこと。
0058デフォルトの名無しさん
2007/10/24(水) 15:22:13アドバイスを頂き>>16と>>20を組み込みましたが、コンパイルが通りません。
エラーメッセージは関数:void d _wordに受け渡しがうまく行ってない趣旨のものがでました。
出来る方、問題回答お願いします。
それと昨晩、途中まで付き合ってくれた方ありがとうございます。
0059デフォルトの名無しさん
2007/10/24(水) 15:54:52typo だと思われる
自分で探せるよね
0060デフォルトの名無しさん
2007/10/24(水) 16:23:41struct 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;
}
0061デフォルトの名無しさん
2007/10/24(水) 17:23:27JAIST?
0062デフォルトの名無しさん
2007/10/24(水) 18:00:19( ´∀`)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5137.txt
めんどくさいので、cat を fork&exec してやったw
jaist ではないのかな?
たしか某S先生の授業でそんな課題があったような・・・
0063デフォルトの名無しさん
2007/10/24(水) 18:17:29[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] その他の制限: テンプレートに従ってプログラムを付け加えて完成させてください。
0064デフォルトの名無しさん
2007/10/24(水) 18:50:28ただ単に不等号と&&→||のミスでした
お騒がせして申し訳ありません
0065デフォルトの名無しさん
2007/10/24(水) 18:56:01[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のみで作る方がよりよい。また、ファンクションは使用不可。
よろしくお願いします(_ _)
0066デフォルトの名無しさん
2007/10/24(水) 20:32:06[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] その他の制限: なし
0067デフォルトの名無しさん
2007/10/24(水) 20:46:35>[5] その他の制限: 標準ライブラリのみ使用可能。Getlineを使わず、Cinのみで作る方がよりよい。また、ファンクションは使用不可。
ファンクション使用不可ってのを詳しく
0068デフォルトの名無しさん
2007/10/24(水) 20:58:41対角行列の固有値は自明。
対角行列の固有値は対角成分そのもの。
つまり、
3.4 2.3 5.1 8.2 2.21 -4.21 23.2 9.3 -21.2 0.2
となる。
0069デフォルトの名無しさん
2007/10/24(水) 21:07:57ってことで、fgets使うとか、
戻り値を変数に格納した後、残った文字を全部食ってから次の処理とかでいいんじゃね?
0070デフォルトの名無しさん
2007/10/24(水) 21:11:41アメリカの州の略号は
ttp://www.urban.ne.jp/home/ho5135/states.html
でいいの?
0071デフォルトの名無しさん
2007/10/24(水) 21:29:00だよね。
http://case.f7.ems.okayama-u.ac.jp/statedu/lispstat-book/node85.html
のページの式の中の|Σ|っていうのは対角成分をかけたものってことでいいのかな?
ある問題で正規分布を使っていて、|Σ|を対角行列の対角成分をすべてかけたものを
固有値として計算すると間違った答えになるんです。
だけど。|Σ|に(対角成分の1つだけ)を代入して計算すると正解になるんです。
0072デフォルトの名無しさん
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です。緊急の宿題です
0073デフォルトの名無しさん
2007/10/24(水) 21:33:35[2] 問題文(含コード&リンク):
書式付標準出力関数printfと同様の動作を示すprint関数を作りなさい。標準出力関数等を用いてよいが、printf関数は使用してはならない。
なお、終わった者はscanfと同様の動作を示すscan関数を作ってもよい。
[3] 環境
[3.1] OS: 任意
[3.2] コンパイラ名とバージョン: 任意
[3.3] 言語: C言語
[4] 期限: 無期限
[5] その他の制限: これよりも、他の宿題を優先すること
0074デフォルトの名無しさん
2007/10/24(水) 21:33:468行目を見なおしてみては?
0075デフォルトの名無しさん
2007/10/24(水) 21:36:09ありがとうございます。逆ですね。
いつもRuby使ってて、授業でC使う事になったこういうミスが・・・涙
だったらコンパイル通さないでくれよ・・・
0076デフォルトの名無しさん
2007/10/24(水) 21:40:51これわひどいw
0077デフォルトの名無しさん
2007/10/24(水) 21:47:010078デフォルトの名無しさん
2007/10/24(水) 21:52:50[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] その他の制限:問題が初級編ということで、出来るだけ難しくならないよう
お願いします。
0079デフォルトの名無しさん
2007/10/24(水) 22:19:35[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] その他の制限: 特にありません。
どうぞよろしくお願いします。
0080デフォルトの名無しさん
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] その他の制限:なし
0081前スレ972
2007/10/24(水) 22:27:39なのでオペレータオーバロードを使わなければいけないっぽい。。
0082デフォルトの名無しさん
2007/10/24(水) 22:31:25>�B独自のatoi関数myitoa関数を自作する。
myatoi関数?それともmyitoa関数?
0083デフォルトの名無しさん
2007/10/24(水) 22:34:31ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5140.txt
0084デフォルトの名無しさん
2007/10/24(水) 22:34:48>数値を受け取り、指定された基数で文字列変換を行う関数を作成する。
itoaだな
もしくはltostrとでもいうか
0085デフォルトの名無しさん
2007/10/24(水) 22:40:42>|Σ|っていうのは対角成分をかけたものってことでいいのかな?
対角行列においてはその通り。
φA(λ) = |λI - A|= 0
を満たす値λがベクトルAの固有値。固有値は行列ではなく数値。
Iは対角単位行列。
Aがn×nの正方行列なら、重解を含めて、λはn個存在する。
個別のλのことを「固有値」と呼ぶ。
だから、
>ある問題で正規分布を使っていて、|Σ|を対角行列の対角成分をすべてかけたものを
>固有値として計算する
という部分がおかしい。
これ以上は数学板で聞いたほうがいいかも。
0086デフォルトの名無しさん
2007/10/24(水) 22:41:22[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] その他の制限:
よろしくお願いします
0087デフォルトの名無しさん
2007/10/24(水) 22:45:510088デフォルトの名無しさん
2007/10/24(水) 22:48:37void 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);
}
0089デフォルトの名無しさん
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,
0090デフォルトの名無しさん
2007/10/24(水) 22:50:37そうゆうことなら許すw
0091デフォルトの名無しさん
2007/10/24(水) 22:52:40「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;
}
}
0092デフォルトの名無しさん
2007/10/24(水) 22:52:48#include <stdarg.h>
int print(const char*f, ...){
va_list a;
va_start(a, f);
vprintf(f,a);
va_end(a);
}
0093デフォルトの名無しさん
2007/10/24(水) 23:01:02固有値ではないってことだね。
|Σ|は行列の値ってことか。
ってことは間違っている原因は|Σ|じゃないってことか。
009473
2007/10/24(水) 23:01:09すみません、後出しで悪いですが、
printfと同様の書式付き関数は使用しないで作ってください。
とにかく考えてくださりありがとうございます。
0096デフォルトの名無しさん
2007/10/24(水) 23:04:06main(){
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(",");
}}}
0097デフォルトの名無しさん
2007/10/24(水) 23:08:51[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
いきなり自由課題しろとか言われても俺にはイミフ
誰か助けてクレヨン
0098デフォルトの名無しさん
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;
}
0099デフォルトの名無しさん
2007/10/24(水) 23:12:31それほんとにいきなり出されたのか?w
0100デフォルトの名無しさん
2007/10/24(水) 23:15:18300行くらいいるんじゃね?
0101デフォルトの名無しさん
2007/10/24(水) 23:15:381, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19,
最後は , をつけないプログラム
0102デフォルトの名無しさん
2007/10/24(水) 23:16:19strDate, 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;
}
0103デフォルトの名無しさん
2007/10/24(水) 23:16:43どう考えてもOpenGLとかDirectXとかが必要になりそう気がする……
どう考えてもcだけじゃコンピュータグラフィックは作れなさそうな気がする……
0104デフォルトの名無しさん
2007/10/24(水) 23:18:49今まではただ惑星とかロボット作ってそれをキーボード入力で動かしてたしてただけだった
だけど授業でシェーディングとかの話し始めて出た課題がこれ
参考にできるサイトなどなんでもいいので参考になるものを教えてください
0105デフォルトの名無しさん
2007/10/24(水) 23:20:32OpenGLいるな。。。じゃあここはスレ違いか
失礼しました
0106デフォルトの名無しさん
2007/10/24(水) 23:20:48wisdomsoft OpenGLでググれ
もしくは単位をあきらめる
0107デフォルトの名無しさん
2007/10/24(水) 23:22:147行スレで7行printfがあったとか何とかって言ってた。
0108デフォルトの名無しさん
2007/10/24(水) 23:22:26てっきりプログラミングの授業の第一回目とかで出されたのかと思った>いきなり
0109デフォルトの名無しさん
2007/10/24(水) 23:23:04ありがとうございます。
そのように解答します。
0110デフォルトの名無しさん
2007/10/24(水) 23:23:25少なくともCでCGできる時点でこのスレの住人の3分の2くらいよりレベル上だろうな
0111デフォルトの名無しさん
2007/10/24(水) 23:23:32[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] その他の制限:
よろしくお願いします
0112デフォルトの名無しさん
2007/10/24(水) 23:26:27だれか、お願いします。
現在作成中でしたら、おとなしく待ってます。
0113デフォルトの名無しさん
2007/10/24(水) 23:28:43ググって来るわ
OpenGLの課題片付けてくれるスレってある?
0114デフォルトの名無しさん
2007/10/24(水) 23:29:11[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] その他の制限:なし
お願いします。
0115デフォルトの名無しさん
2007/10/24(水) 23:44:55とりあえず剰余有版はこれで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;
}
0116デフォルトの名無しさん
2007/10/24(水) 23:50:14[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] その他の制限:
よろしくお願いします
0117デフォルトの名無しさん
2007/10/24(水) 23:50:19>>86と同じ人?Fizz Buzz問題でも今回は内容Fizz Buzzじゃないんだ。
>>86はもういいの?
とりあえず1問答えてるし、先客が終わるまで待てて。
0118デフォルトの名無しさん
2007/10/24(水) 23:50:55CGがなんぼのもんじゃい!
0119デフォルトの名無しさん
2007/10/24(水) 23:51:16一応作ったけどそのテンプレおかしい気がする。
入力文字列の最後に空白付けないと止まらないかも。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5142.txt
0120デフォルトの名無しさん
2007/10/24(水) 23:53:36HP-UXかHI-UXな人だな?
0122デフォルトの名無しさん
2007/10/24(水) 23:55:50剰余無し版
#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);
}
0123デフォルトの名無しさん
2007/10/24(水) 23:58:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5143.txt
0124デフォルトの名無しさん
2007/10/24(水) 23:58:56テンプレの
/* コンマかピリオドならstr2の位置を1つ左 */
}
}
/* str2(単語)に終端文字を追加 */
-------------------------------------------------------
上記の部分が
/* コンマかピリオドならstr2の位置を1つ左へ */
}
/* str1を1文字右に移動 */
}
/* str2(単語)に終端文字を追加 */
でした。
真ん中の/* str1を1文字右に移動 */を追加お願いします。
0125デフォルトの名無しさん
2007/10/24(水) 23:59:42if(num<=300+0*10 && day>=inc_day)
の部分がヘン
というかこのプログラム、何をするプログラムなのかが一見してわからない
0126デフォルトの名無しさん
2007/10/25(木) 00:02:22そなの?変なこと言ってすまん。
いまチャレンジしてるから、ちっと待って。
0127デフォルトの名無しさん
2007/10/25(木) 00:04:37i++;
を追加してくれ。忘れてた。
まあ、それでも入力の最後に空白付けないといけないのは
変わらない気がするんだが。テンプレがそれならいいのかな。
0128デフォルトの名無しさん
2007/10/25(木) 00:05:46日にちと商品の在庫不足数を数字のみで表示してるんじゃない?
商品のほうはランダムで数字作成してるみたいだし。
〜日 在庫不足〜個みたいな。でも、
>>複数製品に対応したものに
ってのがわからない。
0129デフォルトの名無しさん
2007/10/25(木) 00:08:09>>111の
if(num<=300+0*10 && day>=inc_day) inc_day=day+3;
で、あきらかに 0*10 という意味不明な演算をしている件について
013093
2007/10/25(木) 00:08:40正規分布を使いアルゴリズムに通して正解率を出すプログラムなんだけど
|Σ|を行列の値(対角成分の積)として計算すると全然正解率がでない。
どこがおかしいのかを見るために
試しに|Σ|に対角成分の和をいれてみて計算すると正解率98%だった。
ただ計算方法が違うのであっているかわからない。
正規分布について調べると|Σ|はΣの固有値とあるんです。
どうなんでしょうかね。
0131111
2007/10/25(木) 00:09:32簡単に書くと、はじめ300個あった物が毎日80〜120ずつ減っていき、
在庫が300+0*10以下になったら、その3日後に、350個プラスされるって感じです。
ちなみに、300+0*10の0の部分は1でも2でもなんでもよいです
0132デフォルトの名無しさん
2007/10/25(木) 00:15:22別に変じゃなくないか?
numが一定値以下で、かつ現在発注中(到着待ち)じゃなけりゃ発注すんだろ?
inc_dayには発注日+3が入っているから、到着待ち中はday<inc_dayになる
0133デフォルトの名無しさん
2007/10/25(木) 00:16:59「i++;」を付ける位置は以下で良いですか?
付けてみたのですが分割後に出力される最後の単語が文字化けしてしまいます。
後、テンプレ見直してみましたが、タイプミスや書き残しはもうないので仕様はこれでいいと思います。
/* コンマかピリオドならstr2の位置を1つ左へ */
}
/* str1を1文字右に移動 */
i++;
}
/* str2(単語)に終端文字を追加 */
0134デフォルトの名無しさん
2007/10/25(木) 00:17:32プログラマはコーヒーとタバコが好きなんです。
0135デフォルトの名無しさん
2007/10/25(木) 00:18:36納得したその計算してたのね。
0137デフォルトの名無しさん
2007/10/25(木) 00:20:34英語も苦手だよ。後、眠気覚まし+暇つぶしにガムもスキだよ。
0138デフォルトの名無しさん
2007/10/25(木) 00:30:39i++はそこでいいよ。
テンプレどおりにやると入力の最後に空白入れないとバグる。
str1[i] != ' ' のとこを str1[i] != ' ' && str1[i] != '\0'
にすればたぶんOK.
013986
2007/10/25(木) 00:30:55本当に助かりました
ありがとうございます
014022
2007/10/25(木) 00:34:15本当にありがとう!!
助かりました!!!!
0141デフォルトの名無しさん
2007/10/25(木) 00:37:59提出の際に聞いてみます。
期限ぎりぎりで半ば諦めていたので、本当に感謝ありがとうです。
手直しも直ぐにやっていただき助かりました。
0142デフォルトの名無しさん
2007/10/25(木) 00:51:09[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] その他の制限: 特にないです。
よろしくお願いします。
0143デフォルトの名無しさん
2007/10/25(木) 01:00:46#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));
}
0144デフォルトの名無しさん
2007/10/25(木) 01:07:18for(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));
0145デフォルトの名無しさん
2007/10/25(木) 01:13:41#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);
}
0146デフォルトの名無しさん
2007/10/25(木) 01:15:03テンプレがおかしい。指示通りにやるとセグメントエラーを起こす。
0147デフォルトの名無しさん
2007/10/25(木) 01:17:10まずはこんなので
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5145.txt
0148デフォルトの名無しさん
2007/10/25(木) 01:32:23ありがとうございます。
残念ながら、今はプログラミングができる環境じゃないので、明日試して見ます。
0150デフォルトの名無しさん
2007/10/25(木) 01:47:38一応、>>127のi++;の付け加えでちゃんと動いてくれるので、OKです。
コンパイル通って、動作も「,.」削除+空白削除+分割表示できてるので。
0151デフォルトの名無しさん
2007/10/25(木) 01:48:520152147
2007/10/25(木) 02:07:00念のため、
#define DAYS 10 // 販売期間
#define ITEMS 10 // 製品の種類数
の部分を
#define DAYS 1000 // 販売期間
#define ITEMS 100 // 製品の種類数
と書き換えると題意に沿った回答になる。
ただし、このとき、出力が最悪200000行になるので注意。
0153デフォルトの名無しさん
2007/10/25(木) 06:10:11課題にはそのとおり書いてあったんですが・・。
自分には問題の�@〜�Bの意味がさっぱりで・・・。
>>83
それが答えってことになるのですか?
0154デフォルトの名無しさん
2007/10/25(木) 06:30:230155デフォルトの名無しさん
2007/10/25(木) 07:17:130156デフォルトの名無しさん
2007/10/25(木) 09:26:14[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] その他の制限: 特になし
明日までと急なことで申し訳ありませんがお願いします。
0157デフォルトの名無しさん
2007/10/25(木) 09:59:01本当にそんな問題が……?
0158デフォルトの名無しさん
2007/10/25(木) 10:04:20すでにC++ですっていって提出しちゃえば?
問題が曖昧すぎ
0159デフォルトの名無しさん
2007/10/25(木) 10:18:09問題文は文章でなく口頭で出題されました。全くこの通りです。
すでにC++になっているんでしょうか?
0160156 ◆B5khfT.h4o
2007/10/25(木) 10:19:390161デフォルトの名無しさん
2007/10/25(木) 10:56:23拡張子cppでコンパイルしてみな
0162デフォルトの名無しさん
2007/10/25(木) 11:03:08get()で返すとか、そういう風にすればどう?
あとprintfをcoutに無理矢理直すとそれらしく見える。別にprintfでも
C++の範囲内なのだが。
0163デフォルトの名無しさん
2007/10/25(木) 11:31:04無理矢理C++にしてみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5147.txt
0164デフォルトの名無しさん
2007/10/25(木) 13:40:38一つ目の製品はちゃんと発注するんですけど、二つ目以降は発注が行われないんですけど
どうすればいいんですか?
0165147
2007/10/25(木) 14:00:28// 製品情報初期化
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も参考に。
0166デフォルトの名無しさん
2007/10/25(木) 14:06:31できました。本当にありがとうございました。
016765です
2007/10/25(木) 14:48:32変数を州ごとに集計して平均を出す部分がよくわかりません。
>67
ファンクションについてはまだ授業で習っていないので、先生に避けたほうがいいと言われました。
でも、Voidとか変数のReferenceとか基本的なことは本で読んだので、使ってくださってもけっこうです。
提出するコードは、ファンクションを使わないように書き換えます。
>70
はい。州の略はその通りで大丈夫です。
0168デフォルトの名無しさん
2007/10/25(木) 15:30:40ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5149.txt
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。
0169デフォルトの名無しさん
2007/10/25(木) 16:52:28ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5150.txt
・しっかりとgetlineを使っている。
・line.substr(13, 2)とline.substr(23, 4)を使って読み込んでいるので、gasprices.txtの配置がずれたら限りなくアウト。
0170デフォルトの名無しさん
2007/10/25(木) 16:54:31まだ、待っています。出来る方お願いします。
アドバイスはいくつか貰ったのですが、関数から関数への受け渡しがうまく行きません。
0171169
2007/10/25(木) 17:00:34・1行目にある #include <algorithm> は削除。
・出力は一応CSV のはず。
・アメリカの略号に誤入力があるかもしれない。
・アメリカの州って50だったっけ?
0172コンパイルは出来たがあってないぞ
2007/10/25(木) 17:06:21#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;}
0173デフォルトの名無しさん
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;}
}
}
}___________________________________________________________________________________________________________________________
0174173
2007/10/25(木) 17:24:12〜は〜回という形式にします
volとかそのへんの扱いかたがよく分からずに参っております
よろしくお願いいたします。
0175156 ◆B5khfT.h4o
2007/10/25(木) 17:26:49とりあえず課題を出したうえで、C++にするのはどういうことか詳しく聞いてみます。
017665です
2007/10/25(木) 17:31:19丁寧にありがとうございます。
はい、アメリカの州は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;
}
0177デフォルトの名無しさん
2007/10/25(木) 17:53:30#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]);
}
表示はヒストグラムでなくてもいいのかな。
0178デフォルトの名無しさん
2007/10/25(木) 17:58:47アドバイスって言うか>>20で回答もらってるじゃない。
・if(j=m2)をif(j==m2)
・printf("%d\n", st1);をprintf("%s\n", st1);
この2点の変更だけで動くはず。変更の仕方が間違ってるんだと思う。
0179デフォルトの名無しさん
2007/10/25(木) 18:06:46whileの条件とループの中のifで2回判定するのはムダ
0180デフォルトの名無しさん
2007/10/25(木) 18:22:58while(scanf("%d",&a),!(a>0&&a<22))
printf("aの値を入力しなおしてください。\n");
printf("任意の正の整数nを入力してください。\n");
while(scanf("%d",&n),n<0)
printf("nの値を入力しなおしてください。\n");
>>179の指摘したムダを省くと多分こうなると思います。
0181デフォルトの名無しさん
2007/10/25(木) 18:26:06while(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);
}
こうでした。
0182デフォルトの名無しさん
2007/10/25(木) 18:34:53この様にコード書いたけどコンパイラが通らないです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5151.txt
0183デフォルトの名無しさん
2007/10/25(木) 18:38:11見ずにコメント。1.改行コード 2.全角スペース
そろそろコンパイラが吐いたエラー貼ったらどうだ?
0184デフォルトの名無しさん
2007/10/25(木) 18:42:43#include<string.h>を追加。もしかしてstr〜の関数習ってない?
0185デフォルトの名無しさん
2007/10/25(木) 18:45:55ありがとうございます
実行してみたところ、
0以外の数字が何度やっても0回になってしまいますが
これはどうすればよろしいのでしょうか?
0186デフォルトの名無しさん
2007/10/25(木) 18:50:01エラーが無いので下に張りました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5152.txt
>>184
追加しても効果なかったです。関数str〜習ってます。
0187デフォルトの名無しさん
2007/10/25(木) 18:52:46「エラーが無いので」×
「エラーが長いので」○
0188デフォルトの名無しさん
2007/10/25(木) 18:54:50[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だけ表示させることができません。
よろしくお願いします。
0189デフォルトの名無しさん
2007/10/25(木) 18:57:41valにちゃんと値が入ってないのかな。
val=(double)rand()/(RAND_MAX+1)*a;
を
val=rand()%a;
に変えてみてください。
>>186
インデントを全角スペースでやってない?
0190デフォルトの名無しさん
2007/10/25(木) 19:04:06盲点、スペースを全角でやっていました。
スペースを全て消したらコンパイルが通って、ちょんと動きました。
全角スペースでエラー返されるんですね、勉強になりました。
次からはスペースの全角/半角に気をつけます。
0191デフォルトの名無しさん
2007/10/25(木) 19:09:39ありがとうございます!ちゃんとできました
助かりました
0192デフォルトの名無しさん
2007/10/25(木) 19:57:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5153.txt
0194デフォルトの名無しさん
2007/10/25(木) 20:39:32[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] その他の制限: なし
019578&153
2007/10/25(木) 20:56:27実装仕様もあって、書いてたことが違ってました。
以下が訂正問題です。
[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に続く
019678&153
2007/10/25(木) 20:56:58[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の範囲内で指定可能)
戻り値:第二引数の文字列へのポインタを返す
と、なっております。
すいませんが回答の方をよろしくお願いします
0198デフォルトの名無しさん
2007/10/25(木) 21:28:40いまさら?これから変更するの面倒だし
期限:2007年10月26日朝5:00
ってことは残り7時間、無理。
がんばれノシ
0199デフォルトの名無しさん
2007/10/25(木) 21:31:160200デフォルトの名無しさん
2007/10/25(木) 21:31:22ありがとうございます!
感謝します!
0201デフォルトの名無しさん
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] その他の制限:なし
020278&153
2007/10/25(木) 21:45:03昨日書き込んで、今日間違い気づいたんですよorz
できればお願いします。自分にとっては、これってホントに初級編!?って
いうぐらい難しい
0203デフォルトの名無しさん
2007/10/25(木) 21:46:42bool func(Magazine* p)
{
// 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
if (MagazineMotorcycle* mm = dynamic_cast<MagazineMotorcycle*>(p))
mm->Reserve();
return false;
}
これでおk?
0204デフォルトの名無しさん
2007/10/25(木) 22:03:47[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] その他の制限:(どこまで習っているか)構造体、ファイル処理まで
どうかよろしくお願いします。
0205デフォルトの名無しさん
2007/10/25(木) 22:10:08ありがとうございます。
こちらを提出してみます。
0206デフォルトの名無しさん
2007/10/25(木) 22:12:28bool func(Magazine* p)
{
// 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
if (MagazineMotorcycle* mm = dynamic_cast<MagazineMotorcycle*>(p))
return mm->Reserve();
return false;
}
こんどこそおk?
0207デフォルトの名無しさん
2007/10/25(木) 22:26:15// データ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?
0208デフォルトの名無しさん
2007/10/25(木) 22:41:25本当にありがとうございます。
助かりました。
020957
2007/10/25(木) 22:54:44レスありがとうございます。
今日の朝、main関数を作って動かしてみたのですが、
おかしいです。
例えば、連結リストのaの値を10、11、12とすると、
11、10、56787
と、一番最後が変な数値になってしまいます。
並び替える前に表示すると、10、11、12となってちゃんと動作するので、
表示する関数は間違ってないと思います。
一応補足として、自分が扱っている連結リストは一番最初に、aに値が
含まれていない要素があり、その後からaに値が含まれる要素が並びます。
0210デフォルトの名無しさん
2007/10/25(木) 23:10:52#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のままで仕様満たしてるのでそれ以外を。
0211デフォルトの名無しさん
2007/10/25(木) 23:11:09ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5149.txt
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。
0212デフォルトの名無しさん
2007/10/25(木) 23:19:380214デフォルトの名無しさん
2007/10/25(木) 23:21:23糞リストの仕様を書かなかったほうが悪い。
0215デフォルトの名無しさん
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時まで
0216デフォルトの名無しさん
2007/10/25(木) 23:33:351.
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;}
0217デフォルトの名無しさん
2007/10/25(木) 23:34:03itoaは >>83 にあるよ。ltoaはitoaとほとんど変わらん。
ftoaも小数点以下あるだけであんま変わらないな。
021857
2007/10/25(木) 23:37:20申し訳ないです。
リストの仕様は以下の様になります。
・リストは連結リストで片方向リストです。
・次の要素がない場合(リストの一番最後)は、次の要素へのポインタをNULLとします。
・リストの一番最初には、aに値が含まれていない要素があります。
よろしくお願いします。
0219デフォルトの名無しさん
2007/10/25(木) 23:42:130220デフォルトの名無しさん
2007/10/25(木) 23:45:52static 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;
}
0221デフォルトの名無しさん
2007/10/25(木) 23:49:080222215
2007/10/26(金) 00:03:01さすがにsprintfは使うわけにはいかないかと・・・w
>>217
ありがとうございます。
>>83を参考にしてやってみようと思います。
022357
2007/10/26(金) 00:03:47減点はするけど、出さないよりは、ましだから今週の課題と一緒に来週に
出しなさいと言われました。
>>220
ありがとうございます。
リストの仕様は>>218に書いた通りですが、
問題自体は>>57に書いた通り、再帰を使わないと…
0224デフォルトの名無しさん
2007/10/26(金) 00:08:57re_internalの中でre呼び出してる
022557
2007/10/26(金) 00:23:54再帰って自分自身の関数を呼び出すんじゃないですっけ?
これだと、他の関数を呼び出してるだけな気がするのですが…
一つの関数で作ることって出来ないのですかね?
0226デフォルトの名無しさん
2007/10/26(金) 00:24:24static 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
0228デフォルトの名無しさん
2007/10/26(金) 00:58:090229168
2007/10/26(金) 00:58:4528日までにお願いしたいんですけど・・・
よろしくお願いします。
0230デフォルトの名無しさん
2007/10/26(金) 07:29:15[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のよに書いたのですが
セグメントエラーが出てしまいます。
ダメなところとかがあったら直して教えてください。
0231デフォルトの名無しさん
2007/10/26(金) 07:51:19比較用演算子 == を使うこと.
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;
0232デフォルトの名無しさん
2007/10/26(金) 08:09:1914〜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" で表します
0233デフォルトの名無しさん
2007/10/26(金) 08:16:51>>231さん
朝早くだったのにレスありがとうございます。
おかげ様でセグメントエラーも出ないで実行できました
来週中間試験があるので
もっと勉強しなきゃいけないなと思いました。
ホントにお世話様でした
0234デフォルトの名無しさん
2007/10/26(金) 08:46:170235課題お願いします
2007/10/26(金) 09:05:21[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] その他の制限: 授業で配列とポインタは習いました。この問題は「関数」というセクションの問題です。大学の授業なのであまり難しくなり過ぎないようにお願いします。
0236235
2007/10/26(金) 09:07:30[2] 問題文:n個からr個を選ぶ組み合わせは、nCr = n!/r!(n-r)! ただし、n! = 1*2*3*…*(n-1)*nで求められる。そこで、n!を求める関数functorial(n)を定義し、それを3度呼び出す形で、組み合わせnCr を求めるプログラムを作成せよ。
0237デフォルトの名無しさん
2007/10/26(金) 09:09:55{
return n<2 ? 1 : n * function(n-1);
}
int nCr(int n, int r)
{
return function(n) / function(r) / function(n-r);
}
0238デフォルトの名無しさん
2007/10/26(金) 09:11:280239デフォルトの名無しさん
2007/10/26(金) 09:20:03中間試験は筆記と実技があって
実技は端末からサーバーにアクセスして書きます。
実技は今のままじゃ、受かる気がしません…
ファイル処理、ポインタがかなりヤバイです
0240デフォルトの名無しさん
2007/10/26(金) 09:23:34階乗ならfactorialだし、関数ならfunctionだからfuncだけみて間違っちまった。
0241デフォルトの名無しさん
2007/10/26(金) 10:59:15[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は習いました
お願いします
0242デフォルトの名無しさん
2007/10/26(金) 11:01:220243デフォルトの名無しさん
2007/10/26(金) 11:05:00別人だけど、フロッピーでソース提出とか、メールで添付とかもあるけど、一番多いのは紙。
正直、このご時勢で紙でやるのは馬鹿だと思う。
0244デフォルトの名無しさん
2007/10/26(金) 11:14:18小数点出てもいいらしいです。要はaveを使って計算したいのだと思います。
0245デフォルトの名無しさん
2007/10/26(金) 11:18:400246デフォルトの名無しさん
2007/10/26(金) 11:19:06国がやってる情報処理系の資格試験は、全部紙だぞ?
0247デフォルトの名無しさん
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日(月)
0248デフォルトの名無しさん
2007/10/26(金) 11:34:38うちも紙〜
さすがにプログラムを卓上で作りコード全部書けは無いけど、
5〜6行くらいの穴埋めでプログラムを完成させよとか。
0249デフォルトの名無しさん
2007/10/26(金) 11:59:09あったら死ねるけどw
普段書かない記号とか書かなきゃならんし、
インデント一つ追加しようと思ったらその間書き直しだし、
書いてる事がタイプ以上に考えてる事に追いつかないし、
変数名チェックも全部自分でしなけりゃならんから面倒だし。
0250デフォルトの名無しさん
2007/10/26(金) 12:01:52うちは進んでるよ。
テストプログラムを当日教室で下してきて実行すると、P検みたいなプログラムが走って画面左半分が問題書いてあって、右半分の上がコマンドプロンプト?で下がテキストパッドになってる。
問題にある仕様のプログラムをテキストパッドで作って、「実行」ボタンがその下にあるから押すとコマンドプロンプトで自動的にコンパイル+実行してくれる。
作ってる途中のものを試しでコンパイルする度、実行はうざかった。
問題全部作ったら問題1番最後の回答終了を押すと自動で結果をサーバーに送信して、プログラム終了。
ファイヤーウォールに引っ掛かって提出できないとか、提出時に回線が込んでて提出できないとかで、良悪あるけどね。
0251デフォルトの名無しさん
2007/10/26(金) 13:04:09なんだかすごい環境だな。
0252デフォルトの名無しさん
2007/10/26(金) 13:09:33高専電気科の情報の授業では
ごく普通にPCでやってるぞ
しかも、授業で書いたコードを参照してもいいというオマケ付きで。
授業理解度を確かめるのならこういう方式でもよさげな気がする。
0253デフォルトの名無しさん
2007/10/26(金) 13:12:10これは……一見するととても簡単そうなプログラムに見える……
そう見えるのはオレだけか……?
0254デフォルトの名無しさん
2007/10/26(金) 14:03:27strcpy(a+(変数),b+(変数));
これはどういう意味でしょうか?+が特に分からないんですが…
a、bは配列です
0255デフォルトの名無しさん
2007/10/26(金) 14:06:41せっかくプログラミングやってんだから、
講師の側でもそんな感じでテスト用プログラム作って欲しいもんだな
>>252
そういう方式もいいよなあ
実際のプログラミングだとソース参照し放題、ネットで調べ放題なわけで
それでもできない人がいるんだから、十分実力測れるだろう
プログラミングは暗記じゃない
0256デフォルトの名無しさん
2007/10/26(金) 14:38:19その配列a, bの +変数分以降のみの文字列をコピーするという意味。
変数が 2 だったらaの先頭 2 文字は変化しない。
0257デフォルトの名無しさん
2007/10/26(金) 15:04:04分かり易い解説ありがとうございました
0259デフォルトの名無しさん
2007/10/26(金) 16:17:50元のプログラムではポインタ変数は仮引数なので呼び出し元に結果が反映されない
#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はそれぞれ姓と名を指す場所に移動した?*/
}
0260デフォルトの名無しさん
2007/10/26(金) 17:08:00わかる人は簡単だよ
でも、習ったばっかりなんだろ
最初はみんなわからないもんだよ
0261デフォルトの名無しさん
2007/10/26(金) 17:32:120262デフォルトの名無しさん
2007/10/26(金) 18:04:040263デフォルトの名無しさん
2007/10/26(金) 18:17:14一人一人の代金がわかってるなら、割り勘になんてしないだろ。
0264デフォルトの名無しさん
2007/10/26(金) 18:43:15「相乗平均じゃなくて相加平均だよ^^ お前ら間違えんなよ^^」て言いたかったんだよ
気の回る良い先生じゃないか
0265デフォルトの名無しさん
2007/10/26(金) 19:40:500266デフォルトの名無しさん
2007/10/26(金) 22:09:360267デフォルトの名無しさん
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] ループを使用してお願いします。
0268デフォルトの名無しさん
2007/10/26(金) 22:12:550269デフォルトの名無しさん
2007/10/26(金) 22:19:180270デフォルトの名無しさん
2007/10/26(金) 22:22:06自分で要求するほど、宿題を回答してやりたいのか。
この掲示板の鏡だな、解けない問題は無いってか?
0271デフォルトの名無しさん
2007/10/26(金) 22:25:200272デフォルトの名無しさん
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日
お願いします
0273デフォルトの名無しさん
2007/10/26(金) 22:46:03これはむずい
もう少し前のページから見ないと単語がわからなすぎる
0274デフォルトの名無しさん
2007/10/26(金) 22:54:36m=(a+b)/2 、d=(b-a)とするとき積分値は d/6 * (f(a)+f(b)+4f(m))だ
N分割のときはこの値を使えばいい
0275デフォルトの名無しさん
2007/10/26(金) 22:57:47なぜコードで示さないんだ
0276デフォルトの名無しさん
2007/10/26(金) 22:59:44F(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)の和を計算すればよい
0277デフォルトの名無しさん
2007/10/26(金) 23:02:42擬似コードだけなら単位はやれないな
0278デフォルトの名無しさん
2007/10/26(金) 23:03:56プログラム自体は計算と結果の出力だけの簡単なものだからチャレンジしてみなってことじゃない?
計算内容自体は>>274が解説してくれてるし。
もしくは作成中か。
0279デフォルトの名無しさん
2007/10/26(金) 23:08:01ありがとうございます。ポインタ変数が問題だったんですね。
仮引数だったのをポインタのポインタで呼び出しが出来るようにしたと。
なるほど納得しました。
0280デフォルトの名無しさん
2007/10/26(金) 23:09:01#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);
}
0281デフォルトの名無しさん
2007/10/26(金) 23:10:31double g(double x){return 1/sqrt(1+x*x*x*x);}
0282デフォルトの名無しさん
2007/10/26(金) 23:12:030283デフォルトの名無しさん
2007/10/26(金) 23:12:090284デフォルトの名無しさん
2007/10/26(金) 23:12:15で組み込む計算式作ってくれてるから、もう課題出来てるも同然な気がする。
だって、その式を表示するだけで完成でしょ。
0285デフォルトの名無しさん
2007/10/26(金) 23:17:30#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;
}
0286デフォルトの名無しさん
2007/10/27(土) 00:03:16[2] 問題文(含コード&リンク):整数演算と浮動小数点演算で自分のプロセッサのスピードをテストするプログラムと結果を示しなさい。 テストするのは整数、浮動小数点ともに、加減乗除の4つづ、計8つです。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:
[5] その他の制限: 結果はcygwinのtimeを使えってばっちゃが言ってました。
お願いします。
0287デフォルトの名無しさん
2007/10/27(土) 00:07:310288デフォルトの名無しさん
2007/10/27(土) 00:13:39副作用乙
0289デフォルトの名無しさん
2007/10/27(土) 00:18:050290デフォルトの名無しさん
2007/10/27(土) 00:34:16#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);}
0291デフォルトの名無しさん
2007/10/27(土) 00:47:030292デフォルトの名無しさん
2007/10/27(土) 00:55:290293272
2007/10/27(土) 01:03:57解説で分かってきたので色々と試してみます
0294291
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));}
0295デフォルトの名無しさん
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;
}
0296デフォルトの名無しさん
2007/10/27(土) 01:26:36出題者じゃないんだが。
typedef double (*func)(double);
これってなにやってるの?
029757
2007/10/27(土) 01:29:04自分も詳しい理由は分かりませんが、この再帰の問題以前にも、リストで
色々な動作をする関数を作ったので、その関数を作る時、関数に引数を
渡したりするのに、リストの先頭にデータを入れない方が都合が
良いんじゃないですかね?
リストは先頭にデータを入れないとばかり思ってたので、よく分かりませんが。
0298291
2007/10/27(土) 01:30:26たとえばDLLを使うとき次のように書く 型の定義
typedef int (__stdcall *FNC)(const HWND , LPCSTR , LPSTR , const DWORD);
main(){
HINSTANCE hd = LoadLibrary("UNZIP32.DLL");
FNC p = (FNC)GetProcAddress(hd,"UnZip");
}
0299デフォルトの名無しさん
2007/10/27(土) 01:30:41すいませんd=0.001となってるのが良く分からないんですが
0300291
2007/10/27(土) 01:31:390301コッチェビン
2007/10/27(土) 01:32:280302デフォルトの名無しさん
2007/10/27(土) 01:33:37どうもです
0303デフォルトの名無しさん
2007/10/27(土) 01:34:19つまりfuncという関数型ができたということ?
そうしたらIntegral(func funcName,...)
とすべきでは?
それと
#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
ここでfつかっちゃったらマクロFでは常に関数fが呼び出されることにならない?
0304デフォルトの名無しさん
2007/10/27(土) 01:35:47計算結果に自信がないので。
0305291
2007/10/27(土) 01:36:19呼び出すのはfでいいんだよ 引数でfとかgを指定するから
0306291
2007/10/27(土) 01:37:56単純な定積分の値と比較したから正解だろう >>290で求めている
あと>>290はgが間違えていて
正しくは
double g(double x){return 1/sqrt(1+x*x*x*x);}
0307デフォルトの名無しさん
2007/10/27(土) 01:38:07スマソ。そうなってた。
0308デフォルトの名無しさん
2007/10/27(土) 01:40:16double 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という関数を取っているのは確かなんだけど
関数内で一回も使ってない。
0309291
2007/10/27(土) 01:41:38Fがマクロだから使っている
あと使っていないのはaとbだ 勝手に(0,1)だとおもって書いてしまった
0310デフォルトの名無しさん
2007/10/27(土) 01:41:57マクロ展開してみればいい
でも名前が被っているのは気持ち悪いな
#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;
}
0311デフォルトの名無しさん
2007/10/27(土) 01:43:31なるほどね。理解できました。
exp(-x*x)の関数名をfにしないでくれたらよかった。
0312デフォルトの名無しさん
2007/10/27(土) 01:53:03粘着すまん。
6じゃなくて3で割らないといけなくないか?
h=0.1で指定されているし。
0313修正版
2007/10/27(土) 02:00:49#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));}
0314修正版
2007/10/27(土) 02:03:09そもそも2hの幅で積分しろってことか それならそうだな
0315デフォルトの名無しさん
2007/10/27(土) 02:04:51何が違うんだ。。。。。
0316修正版
2007/10/27(土) 02:07:29でも最小の区間を与えた方が標準的だと思う
Integral(f, 0, 1, 0.2))と呼び出せば正解と一致する値が出るはずだ
0317デフォルトの名無しさん
2007/10/27(土) 02:11:03考えてみる。
正解はちなみにいくつなんだ
俺は
result=1.560123
result=1.988458
そっちは
1.493648
1.854075
他の検証方法ってある?Excelあたりでできるもんかね?
0318デフォルトの名無しさん
2007/10/27(土) 02:12:300319修正版
2007/10/27(土) 02:17:43単純な積分値とほぼ一致する
#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);
}
0320デフォルトの名無しさん
2007/10/27(土) 02:25:040.747508011
ぐらいになった。
では6で割るべきなのか。
0321デフォルトの名無しさん
2007/10/27(土) 02:28:04俺
result=0.780061
result=0.994229
そちら
0.746825
0.927040
そっちの勝ちだ.orz
ノシ
0322デフォルトの名無しさん
2007/10/27(土) 02:28:583->6
0323修正版
2007/10/27(土) 02:31:52この式よく見てみろ
hを算出するときに既に2で割っている 分割数nに対して2nで割っているからややこしいだけ
0324デフォルトの名無しさん
2007/10/27(土) 02:34:340325デフォルトの名無しさん
2007/10/27(土) 02:40:23h=0.1で与えられてるから式の通りに3で割るんじゃないの?
の辺りがイマイチ理解できんので教えてくれ…
0326修正版
2007/10/27(土) 02:46:21問題どおりにやるとひとつひとつの積分区間は2hなので
6で割る部分と打ち消しあって3になる
幅hの積分を求めるのではなく x とx+hとx+2hの三点を2次関数で近似したいと言うことなんだろう
だから2h幅になっている
0327修正版
2007/10/27(土) 02:48:01原理、近似の方法はここに書いてある
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%83%97%E3%82%BD%E3%83%B3%E3%81%AE%E5%85%AC%E5%BC%8F
0328デフォルトの名無しさん
2007/10/27(土) 02:54:490329デフォルトの名無しさん
2007/10/27(土) 03:05:21ふざけてないです。
おおマジです。
0330デフォルトの名無しさん
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)
とすればいいのか
0331修正版
2007/10/27(土) 04:06:02#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);}
0332デフォルトの名無しさん
2007/10/27(土) 04:12:100333デフォルトの名無しさん
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にしないといけない。
0334デフォルトの名無しさん
2007/10/27(土) 08:35:59>>331でOK。
0335デフォルトの名無しさん
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;
}
0336デフォルトの名無しさん
2007/10/27(土) 08:55:220337デフォルトの名無しさん
2007/10/27(土) 10:08:160338デフォルトの名無しさん
2007/10/27(土) 10:59:46[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は習いました
お願いします
0339デフォルトの名無しさん
2007/10/27(土) 11:06:51int 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;
}
0340デフォルトの名無しさん
2007/10/27(土) 11:17:19全くわかんなかったのに数分で解いてるよ(>_<)
ありがとうございました。
0341デフォルトの名無しさん
2007/10/27(土) 11:27:20>>235-237で
0342デフォルトの名無しさん
2007/10/27(土) 11:29:230343デフォルトの名無しさん
2007/10/27(土) 11:49:08今から編集してくる
0344デフォルトの名無しさん
2007/10/27(土) 11:51:23勉強不足ですいません
0345デフォルトの名無しさん
2007/10/27(土) 12:09:39○勉強する気がない
0346デフォルトの名無しさん
2007/10/27(土) 12:13:00京大電電でつけど、プログラムの課題がイミフwwwwwwww
0347デフォルトの名無しさん
2007/10/27(土) 12:15:15Fランの大学ですらやる基本的な問題だし
0348デフォルトの名無しさん
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
0349デフォルトの名無しさん
2007/10/27(土) 13:47:53池沼でサーセンwwwww
0350デフォルトの名無しさん
2007/10/27(土) 14:08:07こんなの面倒 授業でていたやつのほうが関数にくわしいだろ
0351デフォルトの名無しさん
2007/10/27(土) 15:52:58[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文を用いてください
0352デフォルトの名無しさん
2007/10/27(土) 16:02:13main(){
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);
}
0353デフォルトの名無しさん
2007/10/27(土) 16:12:530354デフォルトの名無しさん
2007/10/27(土) 16:16:09main(){
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);
}
0355デフォルトの名無しさん
2007/10/27(土) 16:27:45main(){
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");}
}
0356デフォルトの名無しさん
2007/10/27(土) 16:34:11[2] 問題文:キーボードから5点の座標を二次元配列に入力し、
原点から最も離れた点の座標を出力するプログラムを作成せよ
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:多次元配列まで習ってます
0357147
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
0358デフォルトの名無しさん
2007/10/27(土) 16:46:34#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;
}
0359入力うまくいかない
2007/10/27(土) 16:48:36main(){
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]);
}
0360scanfにしたら良くなったよ
2007/10/27(土) 16:54:18main(){
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]);}
0362デフォルトの名無しさん
2007/10/27(土) 17:00:45#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);
}
0363デフォルトの名無しさん
2007/10/27(土) 17:05:37既に何人も回答してるけど参考までに
#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;
}
0364デフォルトの名無しさん
2007/10/27(土) 17:29:58直してください!!!!
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);
}
}
0365デフォルトの名無しさん
2007/10/27(土) 18:03:32>>1読んでから書き直し
0366デフォルトの名無しさん
2007/10/27(土) 18:07:30つまりテンプレ通りに書けってこった
とりあえずこのコードが何をするかぐらいは書いたほうがいい
0367デフォルトの名無しさん
2007/10/27(土) 18:20:27根本的に考え方が間違ってるよ。
これは生産計画立案の問題。
0368デフォルトの名無しさん
2007/10/27(土) 18:20:53最後尾にNULL入れた配列が欲しくなったり、
サイズを持った構造体へのポインタにしたくなったり、
int *input, int sizeみたいに素直になりたかったり。
0369デフォルトの名無しさん
2007/10/27(土) 18:37:290370aho
2007/10/27(土) 19:02:35今書いてて思ったけど何がしたいのかいまいち分からない。
sumとdifferenceを計算した後何でoutputを上書きするの?
どんどん足し込む仕様じゃないの?
とりあえず、今ので書いてみるよーん
0371aho
2007/10/27(土) 19:08:59最後の行のarrayCopyみてませんでした。
0372デフォルトの名無しさん
2007/10/27(土) 19:09:34ものすごい助かります(;;
離散ウェーブレット変換
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というものです。
0373aho
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];
}
}
}
一応作ってみた。
確認お願い!
0374デフォルトの名無しさん
2007/10/27(土) 21:27:54ああ…ありがたい
今確認します!!!どうもありがとう!!!!涙出てきた
0375デフォルトの名無しさん
2007/10/27(土) 22:51:52[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分まで
よろしくおねがいします
0376aho
2007/10/27(土) 23:01:10int sqr(int x){
return x * x;
}
int pow4(int x){
return sqr(x) * sqr(x);
}
0377デフォルトの名無しさん
2007/10/27(土) 23:01:240378デフォルトの名無しさん
2007/10/27(土) 23:01:32でもなんで四乗値求めるのに平方根必要?
0379aho
2007/10/27(土) 23:02:37void hello(void){
printf("こんにちは。\n");
return;
}
0380デフォルトの名無しさん
2007/10/27(土) 23:02:420381デフォルトの名無しさん
2007/10/27(土) 23:12:340382aho
2007/10/27(土) 23:14:56void 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をインクルードするように!
0383デフォルトの名無しさん
2007/10/27(土) 23:15:020384デフォルトの名無しさん
2007/10/27(土) 23:20:08サイズをどうやって保存するの?
0385デフォルトの名無しさん
2007/10/27(土) 23:22:020386デフォルトの名無しさん
2007/10/27(土) 23:22:170387168
2007/10/28(日) 00:20:59ありがとうございます。
続きはやっていただけませんか?
0388デフォルトの名無しさん
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);}
0389デフォルトの名無しさん
2007/10/28(日) 00:24:21vectorはsize()を使え
0390デフォルトの名無しさん
2007/10/28(日) 00:26:59課題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;
}
}
0391デフォルトの名無しさん
2007/10/28(日) 00:27:20できました 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);}
0392デフォルトの名無しさん
2007/10/28(日) 00:32:19課題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];
}
}
}
0393デフォルトの名無しさん
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);}
0394デフォルトの名無しさん
2007/10/28(日) 04:31:040395デフォルトの名無しさん
2007/10/28(日) 04:38:320396デフォルトの名無しさん
2007/10/28(日) 04:42:58相手の人、可哀想;;
http://www.nicovideo.jp/watch/sm1282003
25分14秒付近より
●植田佳奈、最近人生を丸投げしたくなることは?というフリに、「こないだー、悪口を絶賛喋ってた
ら、後ろに本人いて(笑)あんなことほんとにあるんだ!って思って、超びっくりしちゃった(笑)
実名って言うかその人しかあり得ないような悪口をバンバン言ってたの。そしたら、”そんな風に思っ
てたんだ、ごめんね”って逆に謝られちゃって…(笑)」
0397デフォルトの名無しさん
2007/10/28(日) 10:19:24[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
よろしくお願いします
0398デフォルトの名無しさん
2007/10/28(日) 11:59:19[1]が抜けてる
期限が曖昧
その上マルチ
そしてVisualStudio2008ってまだβ版だろ、そんなもん宿題に使うな
0399397
2007/10/28(日) 12:41:20[1] 授業単元: C言語
期限:今日中になりました
VisualStudio2005でも同じエラーでした
0400デフォルトの名無しさん
2007/10/28(日) 14:14:11>>355さん
お礼の返事送るのが遅れて申し訳ありませんでした
>>351の問題に答えていただきありがとうございました
0401デフォルトの名無しさん
2007/10/28(日) 15:58:29[2] 問題文:1.文字列の先頭のアドレスを引数とし、
その文字列の中にある文字’A’を探してそれが何番目かを計算し、
‘A’があればその値を、なければ0を返値とする関数を作成せよ。
2.1.で作成した関数を用いて、自分の学籍番号をポインタに代入し、
その中で文字'A'を探してそれを先頭に持ってくるプログラムを作成せよ。
[3] 環境
[3.1] OS:windows
[3.2] VisualStudio2005
[3.3] 言語:c
[4] 期限:10月31日まで
[5] その他の制限:特になし
問題が2個ありますが、よろしくお願いします
0402デフォルトの名無しさん
2007/10/28(日) 16:08:15fnc(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));
}
0403デフォルトの名無しさん
2007/10/28(日) 16:11:30fnc(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);
}
0404デフォルトの名無しさん
2007/10/28(日) 16:30:14[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文を用いる
0405デフォルトの名無しさん
2007/10/28(日) 16:37:23だよな?
0406デフォルトの名無しさん
2007/10/28(日) 16:42:35prime(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);
}
0407デフォルトの名無しさん
2007/10/28(日) 16:46:57N=p/2
でpが奇数だったらNに入るのはintじゃなさそうな気がする
0408デフォルトの名無しさん
2007/10/28(日) 16:47:22prime(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);}
0409デフォルトの名無しさん
2007/10/28(日) 16:48:53#include<stdio.h>
main(){
int p=5;
int N=p/2;
printf("Nは%dです",N);
}
0410デフォルトの名無しさん
2007/10/28(日) 16:59:01int 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;
}
0411デフォルトの名無しさん
2007/10/28(日) 17:00:090412デフォルトの名無しさん
2007/10/28(日) 17:06:42その通りでした。すいません
0413デフォルトの名無しさん
2007/10/28(日) 17:06:55#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;
}
0414デフォルトの名無しさん
2007/10/28(日) 17:43:110415デフォルトの名無しさん
2007/10/28(日) 18:10:140416デフォルトの名無しさん
2007/10/28(日) 18:10:35[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] その他の制限: なし
よろしくお願いします。
0417デフォルトの名無しさん
2007/10/28(日) 18:15:39これはなにか物理的演算なのかな?
0418デフォルトの名無しさん
2007/10/28(日) 18:18:121行目から4行目の各成分をそれぞれ足してCとする。
5行目から8行目の各成分をそれぞれ足してcとする。
Cとcを横に並べて2x10にする。
という意味?
0419デフォルトの名無しさん
2007/10/28(日) 18:19:05logの加算じゃなかったらこんなめんどいことはしません。
0420デフォルトの名無しさん
2007/10/28(日) 18:21:164X10と4X10とみて、4行ずつ配列を足します。そしたら1X10と1X10になるでしょう?
でこの1X10と1X10をいっしょにして2X10というわけです。
対数の加算なので一辺には計算できないわけです
0421デフォルトの名無しさん
2007/10/28(日) 18:25:020422デフォルトの名無しさん
2007/10/28(日) 18:27:08言いたいことは分かるが4行ずつ配列を足してないだろ
0423デフォルトの名無しさん
2007/10/28(日) 18:28:55void 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;
}
0424デフォルトの名無しさん
2007/10/28(日) 19:44:51配列A, B, a, b は配列として必要なのか?
0425デフォルトの名無しさん
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] その他の制限: 特になし
0426425
2007/10/28(日) 20:46:49読み込むのはtxtファイルじゃなくてcsvファイルでした。
よろしくおねがいします。
0427デフォルトの名無しさん
2007/10/28(日) 20:49:03[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] その他の制限:特になし
次レスがプログラムです。実行はされますが値がおかしいです…
よろしくお願いします。
0428デフォルトの名無しさん
2007/10/28(日) 20:50:56#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;
}
}
0429とくめい
2007/10/28(日) 21:06:55「言語」= c++
「問題」= 速度のfileを読み込みそれを微分して加速度を求めろ。速度を積分して距離を求めろ
なおプログラムは1通です。
「os] = xp micro studio 2005
0430とくめい
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 );
}
0431とくめい
2007/10/28(日) 21:10:28while( 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;
}
0432デフォルトの名無しさん
2007/10/28(日) 21:13:10[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時まで
よろしくお願いします
0433デフォルトの名無しさん
2007/10/28(日) 21:14:25#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];
}
0434デフォルトの名無しさん
2007/10/28(日) 21:24:59#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;
}
0435デフォルトの名無しさん
2007/10/28(日) 21:26:58e^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;
}
0436デフォルトの名無しさん
2007/10/28(日) 21:28:11#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;
}
0437デフォルトの名無しさん
2007/10/28(日) 21:28:25[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で作ってはいけないそうです。
よろしくお願いします。
0438デフォルトの名無しさん
2007/10/28(日) 21:29:20double 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));}
0439デフォルトの名無しさん
2007/10/28(日) 21:31:11厳しい制限だな。GUIで作っちゃだめなのか
0440デフォルトの名無しさん
2007/10/28(日) 21:34:38#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()は省略
汚いコードだけどこんな感じ
0441デフォルトの名無しさん
2007/10/28(日) 21:35:29int 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;
}
0442デフォルトの名無しさん
2007/10/28(日) 21:36:31それまちがってるよ
0443デフォルトの名無しさん
2007/10/28(日) 21:38:53せっかくcheck計算してんのに、sqrtの引数に利用しないなんてムダすぎる
0445425
2007/10/28(日) 22:03:25ありがとうございます!!
あと数字は数字として格納して次の問題での計算に使いたいのですが
文字列として取得した数字を別の配列に整数型の数として取得するには
どうすればいいでしょうか?
0446デフォルトの名無しさん
2007/10/28(日) 22:08:48st[i]が'0'から'9'にあればいい
コードはちょっと待ってくれ
0447デフォルトの名無しさん
2007/10/28(日) 22:08:55std::string str = "1.234";
double d;
std::istringstream istr(str);
istr >> d;
0448デフォルトの名無しさん
2007/10/28(日) 22:30:140449デフォルトの名無しさん
2007/10/28(日) 22:33:090450デフォルトの名無しさん
2007/10/28(日) 22:36:210451デフォルトの名無しさん
2007/10/28(日) 22:38:300452425
2007/10/28(日) 22:42:07その方法基本情報試験の勉強でやった覚えが!!!
でもどうにも思い出せないです・・・
>>447
stringがvector<string>なためかうまくいきません。
atoiなどもvectorは拒否されてしまうみたいですね。
うーん、難しい・・・
0453デフォルトの名無しさん
2007/10/28(日) 22:44:19int 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;
}
0454デフォルトの名無しさん
2007/10/28(日) 22:50:47[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] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで
0455デフォルトの名無しさん
2007/10/28(日) 22:56:52符号反転キーと演算キーがかぶる気がするんだけどどうするの?
0456デフォルトの名無しさん
2007/10/28(日) 22:58:12string str;
double su;
}
mojisu x;
x.input("777");
という関数を作る 数値なら数字として保存 このとき文字は空にする 違うなら文字として保存
0457 ◆nzw4qNGj6U
2007/10/28(日) 22:58:19[2] 問題文(含コード&リンク):
英文(英単語)を入力し、入力した文字列を、逆から表示するプログラムを作成すること。
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C
[4] 期限:2007年10月29日0:00迄
[5] その他の制限:NULL文字を使用して下さい。
よろしくお願いします。
0458デフォルトの名無しさん
2007/10/28(日) 23:41:00NULL文字をどこで使用するんだ・・・
#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;
}
0459デフォルトの名無しさん
2007/10/28(日) 23:48:49きっとこういう風にするんだよ
#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;
}
0460デフォルトの名無しさん
2007/10/29(月) 00:19:060461デフォルトの名無しさん
2007/10/29(月) 00:26:360462デフォルトの名無しさん
2007/10/29(月) 00:43:060463デフォルトの名無しさん
2007/10/29(月) 00:55:11vector<string>ならiteratorを使って一つずつループさせればどうかな
for_eachでもいいし
atofはc_str()というメンバ関数があるからそれで使える
0464デフォルトの名無しさん
2007/10/29(月) 00:57:120465デフォルトの名無しさん
2007/10/29(月) 01:24:13どれのことか知らないけど
0466デフォルトの名無しさん
2007/10/29(月) 01:26:060467デフォルトの名無しさん
2007/10/29(月) 01:27:18buf[0]にNULL文字セットして番兵にするくらいしか思いつかんね
0468デフォルトの名無しさん
2007/10/29(月) 01:33:251: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という関数がありますのでそれを使えば関数の分だけ
ソースは短く出来ます。
あと、エラーチェックをほとんどしていないので適宜追加してください。
0469デフォルトの名無しさん
2007/10/29(月) 02:01:35この便利さが解るな
0470デフォルトの名無しさん
2007/10/29(月) 02:07:59仕様が違うからなんとも言えんな。
つーか、ほとんど宇宙語。
boost教えて。
>>468がもっさいのは、仕様のせいだと思う。
0471デフォルトの名無しさん
2007/10/29(月) 02:34:33C++の標準とwindowsの標準以外は使うべきでない
0472デフォルトの名無しさん
2007/10/29(月) 02:43:31[2] 問題文(含コード&リンク):
ファイルから改行区切りの単語 (2字以上の全角の日本語)を読み込み
他の単語から合成出来るものを除去してファイルに書き出せ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C or C++
[4] 期限: 2007年10月29日17:00まで
[5] その他の制限: なし
お願いします
0473デフォルトの名無しさん
2007/10/29(月) 02:50:49お願いします
0474437
2007/10/29(月) 02:52:35>>455
符号反転キーについては、書いている時にも気になたのですが、特に解説はありません。
問題の指定と違いますが’+/-’これでキーとして問題ないと思います。
>>468
ありがとうございます!!
凄いですね、、、とても自分では作りきれないです・・・・・
C言語入門書読んだだけでこれだけ作れると思ってるのかな・・・・教授。
頑張って改良してみます!
0475デフォルトの名無しさん
2007/10/29(月) 03:03:00まず2文字の単語を抽出してソートしておく 4文字の単語を抽出して前半に2文字の単語を含むか調べる
含まなければ合成単語ではない 後半も存在すれば消す
つぎに3文字のものを抽出して、5字の単語の先頭に2か3文字の単語を含むか調べるっていう感じでやっていく1
0476468
2007/10/29(月) 03:18:53訂正
・ctype.hをインクルードしてますが使ってないので削除してください。(判定にis〜を使うつもりだったけど使わなかったので)
・atodの変数宣言でセミコロンが1つ多いので消してください。
ソースを見ていくと解るけど基本的な事しかしてないです。
scanfで文字列を読み込んでswitch文を使って先頭の文字で場合分けして処理してるだけです。
0477デフォルトの名無しさん
2007/10/29(月) 09:12:09さあ、漢は黙ってコードで勝負!
0478デフォルトの名無しさん
2007/10/29(月) 09:20:32数値int型を入力し、a文字から順に数値個アルファベットを 標準するプログラムを作成しなさい
実行画面
数値入力-->5
a
b
b
d
e
0479デフォルトの名無しさん
2007/10/29(月) 09:23:48実行画面
数値1入力-->10
数値2入力-->5
数値3入力-->8
合計:23
0480デフォルトの名無しさん
2007/10/29(月) 09:27:10実行画面
数値入力-->5
5までの合計:15
以上の3問お願いします
0481デフォルトの名無しさん
2007/10/29(月) 09:36:28CかC++かすらわからんぞ
0482デフォルトの名無しさん
2007/10/29(月) 09:44:44合計と階乗は違う
0483デフォルトの名無しさん
2007/10/29(月) 09:47:390484デフォルトの名無しさん
2007/10/29(月) 09:50:45>>478
負の数や、26以上が入力された場合はどうするんだ?
そこらへんも含めてテンプレ記入よろ
0485デフォルトの名無しさん
2007/10/29(月) 09:51:45#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;
}
0486デフォルトの名無しさん
2007/10/29(月) 10:25:00#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;
}
0487デフォルトの名無しさん
2007/10/29(月) 10:56:430488デフォルトの名無しさん
2007/10/29(月) 11:07:29期限過ぎちゃったしなぁ
0489aho
2007/10/29(月) 11:33:55軽く作ってみたけどどお?
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;
}
0490デフォルトの名無しさん
2007/10/29(月) 13:33:230491デフォルトの名無しさん
2007/10/29(月) 13:58:51[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] その他の制限: ありません
よろしくお願いいたします
0492デフォルトの名無しさん
2007/10/29(月) 14:17:46もしJSTなら、残り4時間じゃ無理。
0493お願いします
2007/10/29(月) 14:33:14とでて解決できません・・・どうすればいいのでしょうか??
お願いします。
0494お願いします
2007/10/29(月) 14:39:44#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");
0495お願いします
2007/10/29(月) 14:40:30fprintf(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;
0496お願いします
2007/10/29(月) 14:41:01double 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;
}
0497お願いします
2007/10/29(月) 14:42:340498491
2007/10/29(月) 14:42:39どうも失礼いたしました
期限は変更されて日本時間で
10/30 19:00
です
どうかよろしくお願いいたします
0499デフォルトの名無しさん
2007/10/29(月) 14:45:192(
を
2*(
にかえろ
0501デフォルトの名無しさん
2007/10/29(月) 14:55:24嘘つくなってw
0502お願いします
2007/10/29(月) 15:05:540503472
2007/10/29(月) 16:00:550504aho
2007/10/29(月) 16:59:06/*!
\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;
}
0506472
2007/10/29(月) 17:11:15input.txt
明治
大学
明治大学
↓ ***処理後
明治
大学
output.txt というファイルを出力します
0507デフォルトの名無しさん
2007/10/29(月) 17:15:31[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] その他の制限:
よろしくお願いします。
0508デフォルトの名無しさん
2007/10/29(月) 17:39:05#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;}
0509デフォルトの名無しさん
2007/10/29(月) 17:54:10[2] 問題文(含コード&リンク):
日本の人口は1億5000万人であるが、毎年5%づつ減少していくとして、 5000万人を割り込むまでに必要な年数を求めよ。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11/4
[5] その他の制限:
複利の計算を使うと思われます。
0510デフォルトの名無しさん
2007/10/29(月) 18:01:520511デフォルトの名無しさん
2007/10/29(月) 18:02:44main(){
double x=150000000,r=0.05;
int n;
for(n=1;;n++){
x*=1-r;
if(x<50000000)break;
}
printf("%d",n);
}
0512デフォルトの名無しさん
2007/10/29(月) 18:04:21誰かお願いします(泣)
0513491
2007/10/29(月) 18:11:43どなたかお願いします
0514デフォルトの名無しさん
2007/10/29(月) 18:14:42#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));
}
表示部分は自分で変更してください。
割り切れなかった場合の考慮をしていないのでその辺は自分で考えてみてください。
0515デフォルトの名無しさん
2007/10/29(月) 18:15:01#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;
}
0516デフォルトの名無しさん
2007/10/29(月) 18:15:45ありがとうございました
大変助かりました
0517514
2007/10/29(月) 18:16:180518デフォルトの名無しさん
2007/10/29(月) 18:16:300519デフォルトの名無しさん
2007/10/29(月) 18:22:500520デフォルトの名無しさん
2007/10/29(月) 18:27:13これって要するにテトリスを作れってことか?
テトリスをCUIで作れ、と。
アクティヴなゲームをCUIのCで。
0521デフォルトの名無しさん
2007/10/29(月) 18:38:09#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
avr関連は、USBなどのフラッシュメモリにアクセスするためのものです。
gccのIncludeフォルダにはもちろんありません。
0522デフォルトの名無しさん
2007/10/29(月) 18:41:13本当にありがとうございました。
0524デフォルトの名無しさん
2007/10/29(月) 20:19:35[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] その他の制限: 特になし
よろしくお願いします。
0525デフォルトの名無しさん
2007/10/29(月) 20:20:570526デフォルトの名無しさん
2007/10/29(月) 20:41:52楽天KC、クレジットカード番号を含む個人情報1168件を流出
0527デフォルトの名無しさん
2007/10/29(月) 20:42:450529デフォルトの名無しさん
2007/10/29(月) 21:03:58http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5178.txt
0531デフォルトの名無しさん
2007/10/29(月) 22:03:01テスト&デバッグに必要なのでハード一式日本に送ってください
0532491
2007/10/29(月) 22:28:42ソフトは持っているのですがどうやってアップロードすればいいのかわかりません
テンプレにあるので試したのですがサイズが大きすぎて無理でした
お手数ですがここからダウンロードしていただけないでしょうか
http://www.atmel.com/forms/software_download.asp?fn=dl_aStudio4b528.exe
0533デフォルトの名無しさん
2007/10/29(月) 22:50:25異国の友達に写さしてもらいなさい
0534デフォルトの名無しさん
2007/10/29(月) 22:50:2973MBの実行ファイルをDL?
0535デフォルトの名無しさん
2007/10/29(月) 22:53:05じゃないと明らかに>>531の言うとおりテスト・デバッグができない
0536491
2007/10/29(月) 23:21:49532のソフトでプログラムをhexファイルにして
下のソフトで開くと実際にシミュレートできるはずです
よろしくお願いいたします
http://pict.or.tp/img/28161.zip
0537デフォルトの名無しさん
2007/10/29(月) 23:43:05[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] その他の制限: 特になし
よろしくお願いします。
0538デフォルトの名無しさん
2007/10/29(月) 23:54:54[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は習いました。
0539デフォルトの名無しさん
2007/10/30(火) 00:07:38#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;}
途中で表示するのが素数だって気がついて少し慌てた 関数はまずかったかな?
0540デフォルトの名無しさん
2007/10/30(火) 00:16:57ありがとうございます。
関数はちょっと・・・
まだ習ってないので、わからないんです。
作っていただいたのに申し訳ありませんm(_ _)m
関数でない他のプログラムはありますか?
0541デフォルトの名無しさん
2007/10/30(火) 00:20:420542デフォルトの名無しさん
2007/10/30(火) 00:21:38#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;}
効率無視だけどたぶん素数が出力されてると思う。確認してから提出してくれ
0543デフォルトの名無しさん
2007/10/30(火) 00:24:29どうもありがとうございました。
このようなやり方でよかったのですね。
とても助かりました。(*^_^*)
0544 ◆gKLa0lVLKo
2007/10/30(火) 00:56:15[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文を使って、勝敗を出すところまでは解けたのですが、戦況報告のプログラムの仕方が、
どうしても分かりません。よろしくお願いします。
0545デフォルトの名無しさん
2007/10/30(火) 02:32:07当方で確認した環境・処理系は WindowsXP / cygwin(gcc 3.4.4) です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5182.txt
0546491
2007/10/30(火) 06:16:060547 ◆gKLa0lVLKo
2007/10/30(火) 08:36:10ありがとうございました。助かりました。
ただ、プログラムを実行させていただいた所、
戦況報告にて、コンピューターの残り部隊が0になり、
最終的に徳川方と石田方のどちらが勝利したか表示する部分がうまくいきませんでした。
while分の条件を変え、
if文で自軍が勝った場合と、敵方が勝った場合のメッセージを表示すれば良いのでしょうか?
0548デフォルトの名無しさん
2007/10/30(火) 08:47:080549デフォルトの名無しさん
2007/10/30(火) 08:53:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5183.txt
0550デフォルトの名無しさん
2007/10/30(火) 09:34:23[3]の環境には、暗黙の内に「ATMELのチップで制御されたLED」というものが含まれています。
これと同じ環境を構築しないとテスト&デバッグは無理です。
0552デフォルトの名無しさん
2007/10/30(火) 12:11:20じゃんけんの勝敗は (hum - com + 3) % 3 の数値で判定すると楽
0553デフォルトの名無しさん
2007/10/30(火) 13:08:04[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時まで
0554デフォルトの名無しさん
2007/10/30(火) 13:09:52#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;
}
????の部分埋めてください
見づらいってとこはスルーで^^
0555デフォルトの名無しさん
2007/10/30(火) 13:23:22Point 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
0556デフォルトの名無しさん
2007/10/30(火) 13:41:46よろしかったらこちらもおね
コマンドラインから与えられた引数を文字列と見て,ポインタ 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)
{
???????
}
0557デフォルトの名無しさん
2007/10/30(火) 13:52:07/*キャストは必要ない*/
/*sizeof(char)なんて必要ない*/1
(strlen(argv[1]) + 1)
argv[1]
free(result)
while(*after++=*before++);
0558デフォルトの名無しさん
2007/10/30(火) 13:54:130559デフォルトの名無しさん
2007/10/30(火) 14:02:23[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 /* 関数定義 */
0560559
2007/10/30(火) 14:03:19[3.1] OS: windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 今日
[5] その他の制限: なし
よろしくお願いします
0561デフォルトの名無しさん
2007/10/30(火) 14:08:320562デフォルトの名無しさん
2007/10/30(火) 14:16:300563559
2007/10/30(火) 14:17:540564491
2007/10/30(火) 14:26:26491を本当にどなたかお願いします。。。
http://www.atmel.com/forms/software_download.asp?fn=dl_aStudio4b528.exe
http://pict.or.tp/img/28161.zip
0565デフォルトの名無しさん
2007/10/30(火) 14:40:19>>533
余りくどいようだとソースごとそれっぽい大学に片端から送りつけるよ。
0566デフォルトの名無しさん
2007/10/30(火) 14:48:04お願いします。
0567デフォルトの名無しさん
2007/10/30(火) 14:48:05潔く再履修なり留年なりしたら?
0568デフォルトの名無しさん
2007/10/30(火) 14:48:56>>1
0569デフォルトの名無しさん
2007/10/30(火) 15:05:06本当にやってもらいたかったら分析ぐらい下方がいいと思うよ。
全部一気にやってくれと言っているからやってくれないのであって
(やるのにコストがかかりすぎる)分析してくれて
なおかつやって欲しいところを分割して出題してくれればやってもらえると思うよ
それすらできないのであればやっぱり留年するしかないと思う・・・
厳しいけどそういうものだ。
0570デフォルトの名無しさん
2007/10/30(火) 15:11:06だが自分でやれ>>491
0571デフォルトの名無しさん
2007/10/30(火) 15:16:39どんだけ粘着するんだよ
0572デフォルトの名無しさん
2007/10/30(火) 15:23:520573デフォルトの名無しさん
2007/10/30(火) 15:24:22前回のプログラムに条件を追加する課題です。
0575デフォルトの名無しさん
2007/10/30(火) 16:50:03aStudio4b528のsetup.exeが73MB、それをインストールすると100MB。
たった一度きりのためにそこまでする人間はあまりいない。
0576デフォルトの名無しさん
2007/10/30(火) 16:54:10いるかいないかは、お前には関係ないよ。
0577デフォルトの名無しさん
2007/10/30(火) 16:56:221] 授業単元:情報処理
[2] 問題文(含コード&リンク): 共分散と相関係数算出プログラムと実験結果を求めよ
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C/C++/どちらでも可
[4] 期限: 2007年11月3日まで
お願いします。
0578デフォルトの名無しさん
2007/10/30(火) 17:06:130579デフォルトの名無しさん
2007/10/30(火) 17:09:330580デフォルトの名無しさん
2007/10/30(火) 17:20:20double 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;
}
円をドルに変換するプログラムですが、
「浮動小数点の不正な使用」というエラーがでます。
修正お願いできますか?
0581double yen
2007/10/30(火) 17:21:21>1
0582デフォルトの名無しさん
2007/10/30(火) 17:27:47¥
0583デフォルトの名無しさん
2007/10/30(火) 17:29:13[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;
} 途中までシコシコやったからこれを改変してやってもらいたい
0584デフォルトの名無しさん
2007/10/30(火) 17:30:41{
dollar = yen * (1.0/110.0);
return 0;
}
なんかVBっぽい。
0585デフォルトの名無しさん
2007/10/30(火) 17:32:34初心者やから根本的に間違ってる気がしてきた
アカン
0586デフォルトの名無しさん
2007/10/30(火) 17:32:53#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;
}
0587デフォルトの名無しさん
2007/10/30(火) 17:35:230588デフォルトの名無しさん
2007/10/30(火) 17:37:030589デフォルトの名無しさん
2007/10/30(火) 17:41:09return yen
これではだめなんすかね?
0590デフォルトの名無しさん
2007/10/30(火) 17:43:49で十分だろ
0591デフォルトの名無しさん
2007/10/30(火) 17:48:41#define YEN 110.0
int main()
{
double dollar;
std::cin >> dollar;
std::cout << "\\" << dollar * YEN << std::endl;
return 0;
}
0592デフォルトの名無しさん
2007/10/30(火) 18:44:48#define YEN_DOLLAR_RATE (110.)
int main()
{
int yen;
scanf("%d", & yen);
printf("%g\n", yen / YEN_DOLLAR_RATE);
return 0;
}
0593デフォルトの名無しさん
2007/10/30(火) 18:50:28>>508
間違っているようで再提出を求められたのですが分かりません。
お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5184.txt
0594デフォルトの名無しさん
2007/10/30(火) 18:52:41http://academy6.2ch.net/test/read.cgi/gengo/1193737465/
0595デフォルトの名無しさん
2007/10/30(火) 19:20:00http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5185.txt
俺は>>508とは別の人です念のため
0596デフォルトの名無しさん
2007/10/30(火) 19:27:39#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;}
0597デフォルトの名無しさん
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;
}
0598デフォルトの名無しさん
2007/10/30(火) 21:48:15詳しい導出方法は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;}
//ここまでが行列の初期化 ここからコードを書いて下さい
}
0599デフォルトの名無しさん
2007/10/30(火) 21:48:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5186.txt
データはファイルから読み込むようにしてます。
実験用データがどのような形式で列挙されているのか解らないので
その辺は適宜書き換えてください。
0600デフォルトの名無しさん
2007/10/30(火) 21:49:460601デフォルトの名無しさん
2007/10/30(火) 21:55:50http://www.katch.ne.jp/~h-inoue/tips/cs/0002.html
ここに書いてるclassを呼び出す記述がわかりません。。
ちなみにFormにはテキストボックス(TextBox1)とボタン(button1)があり
テキストボックスにURLを打ち込んで、ボタンを押すと、実行されるように
したいのですが・・・
どなたかわかる方がおられましたらよろしくお願いします
0602デフォルトの名無しさん
2007/10/30(火) 22:02:190603デフォルトの名無しさん
2007/10/30(火) 22:45:05ありがとうございます。
0604デフォルトの名無しさん
2007/10/30(火) 22:53:31スレ違い&マルチ
0605デフォルトの名無しさん
2007/10/30(火) 22:54:43リンク先にはライブラリ使うとか書いてあるけど、使用していいライブラリとかあるの?
それとも、固有値計算を自力でやれってこと?
0606デフォルトの名無しさん
2007/10/30(火) 23:03:44ヤコビ法というのが一番簡単なんだが
0607デフォルトの名無しさん
2007/10/30(火) 23:09:27固有値は、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
計算方法は不明
0608デフォルトの名無しさん
2007/10/30(火) 23:11:30グーグル行列 Aに対し Ax = xとなる連立方程式を解けばいい
0609デフォルトの名無しさん
2007/10/30(火) 23:17:38最近出没してるコードを書けない回答者きどりの人?
嘘まで混ぜるようになったの?
0610デフォルトの名無しさん
2007/10/30(火) 23:19:48嘘じゃないよ 固有値は1になるよ
0611デフォルトの名無しさん
2007/10/30(火) 23:20:280612デフォルトの名無しさん
2007/10/30(火) 23:25:170613デフォルトの名無しさん
2007/10/30(火) 23:25:34リンク先よく見たら、C#とかDでライブラリ使わないコードがあるね。
これをCにすれば良さそうだが、これはホントに宿題なのかという疑問。
0614デフォルトの名無しさん
2007/10/30(火) 23:30:300615デフォルトの名無しさん
2007/10/30(火) 23:34:040616デフォルトの名無しさん
2007/10/30(火) 23:36:070617デフォルトの名無しさん
2007/10/30(火) 23:41:08ありがとん。
GSL良さげですね。
0619デフォルトの名無しさん
2007/10/30(火) 23:48:34fseek(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;
}
}
}
0620デフォルトの名無しさん
2007/10/30(火) 23:49:38最初の方で無限ループしてしまってるようです
何か気になる点があったら、ご指摘御願いします
この部分を飛ばしてプログラムを走らせると、希望通りに終わってくれてるので
この中のどこかだと思うのですが・・・
0621デフォルトの名無しさん
2007/10/30(火) 23:53:08C言語ではfscanf()を行ってからfeof()で判定する。
BASICとは順番が逆だよ
0622デフォルトの名無しさん
2007/10/30(火) 23:59:17fscanfが失敗してて、ファイル読み込みが進んでないとか。
fscanfの戻り値が1(入力項目の個数)じゃなかったら失敗してるよ。
0623デフォルトの名無しさん
2007/10/31(水) 00:12:18clapack
atlas
0624デフォルトの名無しさん
2007/10/31(水) 01:11:38[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まで 期限が短くて申し訳ありませんがよろしくお願いします
0625デフォルトの名無しさん
2007/10/31(水) 01:24:06(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)とかの条件判断で落とされるのも含むべきか?)
0626625
2007/10/31(水) 01:26:25後半部
(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)
0627デフォルトの名無しさん
2007/10/31(水) 01:49:22[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位まで。
よろしくお願いします。
0628624です
2007/10/31(水) 02:05:05改善すべき場所などありましたら助言お願いいたします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5188.txt
0629デフォルトの名無しさん
2007/10/31(水) 02:42:50#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;
}}}
0630629 改良
2007/10/31(水) 02:49:11#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;
}}}
0631デフォルトの名無しさん
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;}}
0632デフォルトの名無しさん
2007/10/31(水) 04:07:21#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;}
0633デフォルトの名無しさん
2007/10/31(水) 04:24:130634デフォルトの名無しさん
2007/10/31(水) 09:04:06そんなにでかいテキストは扱った事無い
0635デフォルトの名無しさん
2007/10/31(水) 10:30:35全角文字で250000000文字だから、400字詰め原稿用紙単純換算で650000枚……
小説一つ分程度かと思って計算したら予想以上に多いな
0636デフォルトの名無しさん
2007/10/31(水) 10:33:23で、宿題スレで宣伝している阿呆な>631は作者なの? だったら自分でSTLと比較した実測値くらい出したら?
まぁまさか、手元にあるのがsseも使えないCPUばかりだから恥ずかしくて実測値を出せないなんてこともないだろうし。
0637デフォルトの名無しさん
2007/10/31(水) 10:39:03#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;
}
0638デフォルトの名無しさん
2007/10/31(水) 10:40:060639デフォルトの名無しさん
2007/10/31(水) 10:41:300640627
2007/10/31(水) 11:30:37よろしくお願いします。
0641デフォルトの名無しさん
2007/10/31(水) 11:35:031MBいく本は早々無いな
100MBのテキストデータをソートするなんてのはきっと国ぐらいだろう
0642デフォルトの名無しさん
2007/10/31(水) 12:12:30--
[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
0643デフォルトの名無しさん
2007/10/31(水) 12:28:44void main(int argc,char** argv){
として
プログラム名、パラメータを標準出力するプログラム。
ただし変数型を適宜変換すること
(例えばパラメータに"1"があったらchar型からint型に変えて表示する)
[3.1]Windows XP
[3.2]bcc
[3.3]C
[4]11/6
よろしくお願いします
0644デフォルトの名無しさん
2007/10/31(水) 12:31:17--
[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
0645デフォルトの名無しさん
2007/10/31(水) 12:32:55>(例えばパラメータに"1"があったらchar型からint型に変えて表示する)
どうせ表示するのに、何その無駄な作業w
0646デフォルトの名無しさん
2007/10/31(水) 15:02:06[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] その他の制限:
よろしくお願いします
0647644
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
0648デフォルトの名無しさん
2007/10/31(水) 15:48:13// 面倒なんで、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)
0649デフォルトの名無しさん
2007/10/31(水) 16:03:00実行できました。
ありがとうございました。
0650デフォルトの名無しさん
2007/10/31(水) 17:19:27いや無駄じゃないかもしれないぞ
パラメータをcharからintに直すのは基本的で重要な作業だ
>>643はその部分の問題を抽出したんだろう
0651デフォルトの名無しさん
2007/10/31(水) 17:23:46>>596
>>597
できました。ありがとうございました。
0652デフォルトの名無しさん
2007/10/31(水) 17:31:51#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;
}
0653デフォルトの名無しさん
2007/10/31(水) 17:50:37// 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] その他の制限:なし
よろしくお願いします。
0654デフォルトの名無しさん
2007/10/31(水) 18:01:24Karatsuba法つかえ
( a + bX ) ( c + dX ) = ac + { ( a + b )( c + d ) -ac -bd } X + bd X^2
0655デフォルトの名無しさん
2007/10/31(水) 18:11:350656652
2007/10/31(水) 18:12:06max = 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
0657デフォルトの名無しさん
2007/10/31(水) 18:45:53多倍長作るときは演算が溢れないようにしないと
#include <iostream>
using namespace std;
#define N 33000
main(){
unsigned int a;
a=4*N*N-3*N*N;
cout<<a<<endl;}
0658デフォルトの名無しさん
2007/10/31(水) 18:50:56全てが同じ値だとすると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
0659644
2007/10/31(水) 19:01:21ひょっほ、std::string使わないから速いこと速いこと。
--
real 0m37.009s
user 0m35.683s
sys 0m1.319s
--
一応、sort -uと同じ条件にする為にデリミタを"\r\n"にしたけど。
ちなみにgccでは42秒掛かっている。
0660デフォルトの名無しさん
2007/10/31(水) 19:02:420661デフォルトの名無しさん
2007/10/31(水) 19:05:34途中までやった
#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(){}
0662661
2007/10/31(水) 19:07:250663デフォルトの名無しさん
2007/10/31(水) 19:16:34[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));
}
このプログラムの関数を直してもらえるとありがたいです
0664デフォルトの名無しさん
2007/10/31(水) 19:36:320665627
2007/10/31(水) 19:53:160666644
2007/10/31(水) 19:54:08C++版も、std::unique()をやめて>652同様出力時にチェックしたら僅かに速くなった。
これにて、本日のCPUぶん回しテストは終了。
お騒がせしました。
0667デフォルトの名無しさん
2007/10/31(水) 19:57:05(2)のデータは12人分ずつあるが、6人ずつの平均を求めるのか?
(3)のTRY&ERROR法とは?
0668デフォルトの名無しさん
2007/10/31(水) 19:59:040669デフォルトの名無しさん
2007/10/31(水) 20:01:39ねらいを定めて失敗ならやり直す アルゴリズムは限定されない自由な方法
開平法はTRY&ERRORでない
0670667
2007/10/31(水) 20:05:29#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;
}
0671627
2007/10/31(水) 20:06:59すいません、せっかく改良までしていただいたのに見忘れていました。
そして今コンパイルしたのですが、4行目でエラーが出てよくわかりませんでした…
>>667さん 男6人、女6人、全体12人、それぞれの場合を求めます。TRY&ERROR法の説明はありませんでした。すいません
0672デフォルトの名無しさん
2007/10/31(水) 20:10:05#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));
}
0674デフォルトの名無しさん
2007/10/31(水) 20:16:48勘違いはさておくと、9乗を掛け算で計算するのは誤差が却って大きくなりそうだ。
0675デフォルトの名無しさん
2007/10/31(水) 20:21:54すまん 直して来る
0676デフォルトの名無しさん
2007/10/31(水) 20:24:080678667
2007/10/31(水) 20:31:48>10 11行目でエラーが出てしまいました。
あーそれも同じだ。
- for (float * it = begin; it != end; ++it) {
+ float * it;
+ for (it = begin; it != end; ++it) {
0680デフォルトの名無しさん
2007/10/31(水) 20:44:19#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);
}}}
0681デフォルトの名無しさん
2007/10/31(水) 20:47:560682デフォルトの名無しさん
2007/10/31(水) 20:49:010683デフォルトの名無しさん
2007/10/31(水) 20:53:550684デフォルトの名無しさん
2007/10/31(水) 21:02:210685デフォルトの名無しさん
2007/10/31(水) 21:03:340686デフォルトの名無しさん
2007/10/31(水) 21:04:590687デフォルトの名無しさん
2007/10/31(水) 21:09:280688652
2007/10/31(水) 21:20:00楽しいひと時をどうもありがとん! エンジョイプログラミング! ;-)
0690デフォルトの名無しさん
2007/10/31(水) 21:21:21その誤差をdとし、D=2^r - 2^pとおくと d<=D
Dが0.000001以下ならdの誤差も保証される
0691デフォルトの名無しさん
2007/10/31(水) 21:50:15#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 );
}
0692691
2007/10/31(水) 21:54:32浮動小数点では計算不可能か ?
0693デフォルトの名無しさん
2007/10/31(水) 22:28:46汚いソースだなぁ
よく人にそんなもの見せられるわぁ
0694691
2007/10/31(水) 22:39:482^(m/n) = 10 + d
|d|<0.001となるものをみつけろ
0695691
2007/10/31(水) 23:05:31#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);}}
0696完成版
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);
}}
0697デフォルトの名無しさん
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);
}}
0698デフォルトの名無しさん
2007/10/31(水) 23:13:10書き込む前によくチェックしろ
0699デフォルトの名無しさん
2007/11/01(木) 00:12:57[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] その他の制限: 特にありません。
0700デフォルトの名無しさん
2007/11/01(木) 00:15:26これは「全角で入力できるようにせよ」ってことか?
0701デフォルトの名無しさん
2007/11/01(木) 00:27:260703デフォルトの名無しさん
2007/11/01(木) 00:36:29[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] その他の制限: 必ず再帰を用いること。「幅優先探索」ではなく、
「深さ優先探索」でたどること。
よろしくお願いします。
0704デフォルトの名無しさん
2007/11/01(木) 00:44:43#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 );
}
0705デフォルトの名無しさん
2007/11/01(木) 00:49:210-99 だった.
if ( num >= 0 && num <= 99 ) { break; }
0707デフォルトの名無しさん
2007/11/01(木) 00:58:50#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);
}
}
0708デフォルトの名無しさん
2007/11/01(木) 01:21:42[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: vista
[3.2] コンパイラ名とバージョン: ?
[3.3] 言語:C
[4] 期限: ([2007年11月1日9:00まで
[5] その他の制限:特になし
↓に問題を書きます。実行結果は自分の都合で載ってあるものより簡単になってます。
どうかよろしくお願いします
0709デフォルトの名無しさん
2007/11/01(木) 01:22:271.キーボードから数字を三つ入力し、そのうちの二つの数字の和を表示する。なお、
二つの数字の和を計算するために、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
*
**
***
****
0710デフォルトの名無しさん
2007/11/01(木) 01:22:310711デフォルトの名無しさん
2007/11/01(木) 01:26:36今回はすでに書いてしまったのでこれでよろしくお願いします
0712デフォルトの名無しさん
2007/11/01(木) 02:11:49�@
#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);
}
0713デフォルトの名無しさん
2007/11/01(木) 02:12:50�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);
}
0714デフォルトの名無しさん
2007/11/01(木) 02:16:540715デフォルトの名無しさん
2007/11/01(木) 02:22:56ありがとうございます!
そのまま解答させてもらいます
0716703
2007/11/01(木) 02:47:30ありがとうございます。
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の中に
式がある使い方しか知らないのですが。
0717デフォルトの名無しさん
2007/11/01(木) 07:36:27別人。
上は関数マクロっていうからググれ。
if文の中にただの値がある場合。
0以外なら真、0なら偽と決まってる。
0718デフォルトの名無しさん
2007/11/01(木) 08:20:17return maxof(l_height, r_height) + 1;
の部分バグってね?
0719707
2007/11/01(木) 08:34:25あぁ、バグってんね
#define maxof(a,b) (((a) > (b)) ? (a) : (b))
でよさそうかな。
マクロなんて使わないで素直に関数にしとけという良い例になってしまった
0720デフォルトの名無しさん
2007/11/01(木) 11:02:01[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の内容は↓に書きます。
0721デフォルトの名無しさん
2007/11/01(木) 11:02:36Kita 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
よろしくお願いします
0722デフォルトの名無しさん
2007/11/01(木) 11:43:44#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;
}
// 以下後半へ
0723デフォルトの名無しさん
2007/11/01(木) 11:44:31printf("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;
}
0724722=723
2007/11/01(木) 11:48:41・for (int ic = 1; でエラーが出るなら、int ic; for (ic = 1; に書き換えること。
・書式は適当に調整すること。例えば、%20sとか%9.2fとか。
・関数名(foo)も適当に。
# 最初は人口面積人口密度を別の関数にしてたんだけど行数も多くなるから纏めちまったぜw
0725デフォルトの名無しさん
2007/11/01(木) 11:50:04[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 で割る。
ように場合分けしてやれと指示されてます。
ぜんぜんわからないんです。どうかよろしくお願いします。元々↓のプログラムが与えられててそれを改良するんですが・・・
0726デフォルトの名無しさん
2007/11/01(木) 11:51:13using 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;
}
0727デフォルトの名無しさん
2007/11/01(木) 12:13:10#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;
}
0728デフォルトの名無しさん
2007/11/01(木) 12:16:45特に、√2、√3の値を求めよ
0729デフォルトの名無しさん
2007/11/01(木) 12:20:58#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;
}
0730デフォルトの名無しさん
2007/11/01(木) 12:29:37どうでもいいけど、cmp_poppulation()においてはそのSIGN()は無駄だよ。
qsort()が要求する比較関数の要件から言えば-1, 0, 1である必要はないし、
SIGN()の有無に関わらずaとbの値が離れすぎると誤動作するし。
0731デフォルトの名無しさん
2007/11/01(木) 12:33:07#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));}
0732デフォルトの名無しさん
2007/11/01(木) 13:14:40#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;
}
0733デフォルトの名無しさん
2007/11/01(木) 15:26:16シンプルに作ったらでーりゃーおせーがね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;
}
0734デフォルトの名無しさん
2007/11/01(木) 15:45:45[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)
です。
0735デフォルトの名無しさん
2007/11/01(木) 15:54:33> 求めた中点を新たな三角形の頂点とし4つの三角形に分割する
というのがよくわからんのだけど。
4つの三角形の中点を結んで新しい四面体を作るってことではないよね
(それだと球にならないし)
0736デフォルトの名無しさん
2007/11/01(木) 15:57:030737732
2007/11/01(木) 16:07:51#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;
}
0739733
2007/11/01(木) 17:06:08#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;
}
0740733
2007/11/01(木) 17:09:110741デフォルトの名無しさん
2007/11/01(木) 18:46:20734で質問した者です。
ttp://www.sra.co.jp/people/aoki/Jun/Topics/TypicalHedron/
↑のサイトの下の方を見てもらえばわかるかと思います。ここでは
正二十面体を再帰的に分割していますが、今回分割していきたいのは
正二十面体ではなく正四面体です。
0742デフォルトの名無しさん
2007/11/01(木) 19:00:1116進数の値を10進数に変換。
条件:
関数は使わない。
コードは1行のみ。
調べているのですが分かりません。
教えてください
0743デフォルトの名無しさん
2007/11/01(木) 19:04:57問題文が不完全なので回答不能。
もっと詳しく書くことを要求する。
0744デフォルトの名無しさん
2007/11/01(木) 19:14:15[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] その他の制限: 関数へのポインタを必ず使うこと。
0745デフォルトの名無しさん
2007/11/01(木) 19:26:13z=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 )とおく
0746デフォルトの名無しさん
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);
}
0747デフォルトの名無しさん
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);
}
0748デフォルトの名無しさん
2007/11/01(木) 21:01:11[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
0749748
2007/11/01(木) 21:04:07それぞれ国語、英語、数学、合計の列に合わせてもらえると助かります^^;
0750デフォルトの名無しさん
2007/11/01(木) 21:09:36[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] その他の制限:とくになし
0751デフォルトの名無しさん
2007/11/01(木) 21:19:54[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] その他の制限: 特になし
よろしくお願いします。
0752デフォルトの名無しさん
2007/11/01(木) 21:47:52[2] 問題文(含コード&リンク):2つの日時をキーボードから入力し、
入力された2つの日時の差を求めるプログラムを作成し、実行させなさい
(日時の入力は、○○年△△月××日とし、2つの日時の差も同様に表記すること)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:うるう年は無視して良いようです
お願いします
0753デフォルトの名無しさん
2007/11/01(木) 22:06:17#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);
}
0754デフォルトの名無しさん
2007/11/01(木) 22:11:54#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);
}
0755デフォルトの名無しさん
2007/11/01(木) 22:14:27#dwfineじゃなくて#defineです。
0756デフォルトの名無しさん
2007/11/01(木) 22:22:58ありがとうございます。
助かりました。
0757デフォルトの名無しさん
2007/11/01(木) 22:27:25ありがとうございます。助かりました!
0758デフォルトの名無しさん
2007/11/01(木) 22:35:50[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] その他の制限:二次元配列を使用。ポインタを使わない。
よろしくお願いします。
0759デフォルトの名無しさん
2007/11/01(木) 22:54:27[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] その他の制限:特になし。
関数の使い方がよく分かりません…。
よろしくお願いします。
0760デフォルトの名無しさん
2007/11/01(木) 23:04:54[2] 問題文:2行3列の行列と3行2列の行列の積を求めるプログラムを製作せよ
[3] 環境
OS: WindowsXP
言語: C
よろしくお願いします。
[4] 期限: 11/2 am10:00
[5] その他の制限:
0761デフォルトの名無しさん
2007/11/01(木) 23:08:380762デフォルトの名無しさん
2007/11/01(木) 23:11:08#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);
}
0763デフォルトの名無しさん
2007/11/01(木) 23:18:28main()
{
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と差し替える。
0764デフォルトの名無しさん
2007/11/01(木) 23:23:06[2] 問題文(含コード&リンク):
下に書きます
[3] 環境
OS: Linux
言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
0765764
2007/11/01(木) 23:23:51の問題文
ある都市のタクシー料金は次のようになっている
2kmまで・・・・380円
3kmまで・・・・550円
5kmまで・・・・870円
8kmまで・・・・1300円
以後、2km増やすごとに200円増
距離を実数でキーボードから読み込み、料金を表示するプログラムを作成し、実行させなさい
ただし、0または負の数が入力されたときに処理を終了することとし、繰り返し料金を計算する
プログラムとすること
0766デフォルトの名無しさん
2007/11/01(木) 23:24:400767デフォルトの名無しさん
2007/11/01(木) 23:27:14[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
途中で送信を押してしまいました。
[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] その他の制限:
宜しくお願いします。
0771デフォルトの名無しさん
2007/11/01(木) 23:43:16#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);
}
}
0772デフォルトの名無しさん
2007/11/01(木) 23:45:31訂正
> 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;
0773デフォルトの名無しさん
2007/11/01(木) 23:52:32ありがとうございます
0774デフォルトの名無しさん
2007/11/01(木) 23:56:190775デフォルトの名無しさん
2007/11/02(金) 00:11:09if(kyori <= 0.0) return;
if(kyori >= 8.0) for(ryokin = 1300; kyori > 8.0; kyori -= 2.0) ryokin += 200;
ここの部分が良くわかりませんでした・・・
0776デフォルトの名無しさん
2007/11/02(金) 00:12:00#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;
}
0777デフォルトの名無しさん
2007/11/02(金) 00:22:52当方の実行環境/処理系は 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
ありがとうございます。
0779デフォルトの名無しさん
2007/11/02(金) 00:49:27お願いします
[2] 問題文(含コード&リンク):
>>770のプログラムの入力学生数を最大50人までとし、50人以下の任意の人数で入力を止める事が出来るプログラム
を作成せよ。(例:10人分を入力した時点で入力を停止して、入力した10人分の情報を表示する。)
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C
[4] 期限: 2007年11月02日12:30迄
[5] その他の制限:
改めて宜しくお願いします。
0781デフォルトの名無しさん
2007/11/02(金) 00:54:52[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ファイルがあります
0782デフォルトの名無しさん
2007/11/02(金) 00:56:26よろしくお願いします。
0783デフォルトの名無しさん
2007/11/02(金) 00:59:33ありがとうございました
0784デフォルトの名無しさん
2007/11/02(金) 01:25:59>>771>>772
のプログラミングリストでfloatの型を使わず表すことはできるでしょうか?
0785デフォルトの名無しさん
2007/11/02(金) 02:21:07[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
0786デフォルトの名無しさん
2007/11/02(金) 02:31:45#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;
}
0787デフォルトの名無しさん
2007/11/02(金) 03:13:02>>752
形だけでもお願いします
0788デフォルトの名無しさん
2007/11/02(金) 03:28:490789デフォルトの名無しさん
2007/11/02(金) 03:36:40#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;
}
0790デフォルトの名無しさん
2007/11/02(金) 03:41:010791デフォルトの名無しさん
2007/11/02(金) 04:05:58http://spdg1.sci.shizuoka.ac.jp/grwinlib/
http://www.asahi-net.or.jp/~uc3k-ymd/
http://rd.vector.co.jp/soft/win95/prog/se190934.html
0792デフォルトの名無しさん
2007/11/02(金) 08:07:08オメーが実数で頼むって言ってるからfloatでやってるんだろうがwww
float → double
scanf("%f", &kyori); → scanf("%lf", &kyori);
でおk。
doubleもダメなら知らん。
0793デフォルトの名無しさん
2007/11/02(金) 08:49:06#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);
}
0794デフォルトの名無しさん
2007/11/02(金) 09:11:36出力形式が意味不明だな。単なる日数に年月を割り当てる方法がわからん。
1月1日と2月1日の差は 1月?それとも 31日?
2月1日と3月1日の差は 1月?それとも 28日?
1月31日と2月1日の差は 1月?それとも 1日?
0795デフォルトの名無しさん
2007/11/02(金) 09:54:32#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;
}
0796デフォルトの名無しさん
2007/11/02(金) 09:57:210797デフォルトの名無しさん
2007/11/02(金) 10:27:39バックスペースを有効にするにはどうすればいいですか
0798デフォルトの名無しさん
2007/11/02(金) 11:00:25OSは?
0799デフォルトの名無しさん
2007/11/02(金) 11:26:37734で質問した者です。
まだ未解決なのでお願いしますm(__)m
0800デフォルトの名無しさん
2007/11/02(金) 11:28:37アルファベットと呼ばれる文字でできたものです
情報系の用語としてはoperating systemと略されてるようです
0802デフォルトの名無しさん
2007/11/02(金) 11:37:50nCr を出力するプログラムを作る
これについて教えてください
OSはMAC OS X です
0803デフォルトの名無しさん
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進数ですること
よろしくお願いします
0804デフォルトの名無しさん
2007/11/02(金) 11:50:43テンプレ書け。
嫌なら質問スレ行け。
0805デフォルトの名無しさん
2007/11/02(金) 12:47:16>>734の問題できたお。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5199.txt
3行ずつで三角形の座標を標準出力に出してる。ファイルにリダイレクトしてくだされ。
mainのNを変えると解像度上がるよ。
0806デフォルトの名無しさん
2007/11/02(金) 13:14:41すまん、mainの二つ目の座標が(0, 0.942809, -0.33333)だったぽい
なおしてくれ。
0807デフォルトの名無しさん
2007/11/02(金) 13:33:59[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] その他の制限:
よろしくお願いします
0808デフォルトの名無しさん
2007/11/02(金) 13:50:25・それぞれの種類の機械は何台ずつあるのか。
・問題文の中であなたが注釈を加えた部分はどこか。
各機械が一台ずつしかないとすると表示例はおかしいと思うのだが。
0809デフォルトの名無しさん
2007/11/02(金) 14:19:11>それぞれの種類の機械は何台ずつあるのか。
各機械は一台ずつです。
>各機械が一台ずつしかないとすると表示例はおかしいと思うのだが
5製品を同時に作り始めた場合は、おかしいことになりますが、今回はそれぞれの製品を
一製品ずつ作った場合でよいと先生が口頭で言っていたのを書き忘れました。
すいません。
つまり、各製品が常に自由に機械を使えるということです。
>問題文の中であなたが注釈を加えた部分はどこか。
つまり、10日間、各製品の加工時間の和が各製品出ることになります。
製品1なら3+1+5+2+7=20時間なので一日後
製品4なら10+5+7+3+2=27時間なので二日後になります。
よろしくお願いします。
0810デフォルトの名無しさん
2007/11/02(金) 14:57:33機械の割り当てに関しては了解。
ただやっぱり表示例は疑問。
あれを10日分ループするのは無駄が多すぎる。
単純に計算すると製品1は18時間、製品2には14時間がかかるが、
機械は一台ずつしかなく同時に使えないため、機械の割り当てを考える必要がある。
> 今回は一製品ずつ作った場合でよい
とのことなので順番に製作すると、
製品2の製作は18時間後から開始されるので、完成は32時間後になる。
したがって表示例は
製品1: 18時間後 (=1日後)
製品2: 32時間後 (=2日後)
...
となるようにすればよい。
問題文の前半を読むとこう解釈できるんだがいかがだろうか。
俺の考えすぎならすまん。
0811デフォルトの名無しさん
2007/11/02(金) 15:04:37各製品が常に自由に機械を使えるので、順番に作る場合ではなくて、機械が使用されてないと仮定して、
今から作ると何日後に完成するかを出せればいいので、10日分ループするのは無駄なんですけど、10回同じものを
表示するプログラムをお願いします。
よろしくお願いします。
0812デフォルトの名無しさん
2007/11/02(金) 15:15:12ありがとうございます!!
ほんと助かりました!
0813デフォルトの名無しさん
2007/11/02(金) 15:43:19んじゃこんな感じで。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5201.c
0814デフォルトの名無しさん
2007/11/02(金) 16:21:43ありがとうございました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5202.txt
もお願いできませんか?
よろしくお願いします。
0815デフォルトの名無しさん
2007/11/02(金) 17:38:30頂点座標は出力されるのですが、三角形の接続情報を出力するにはどうしたら
いいですか?VRMLで描画させなければならないので。
お願いします。
0816デフォルトの名無しさん
2007/11/02(金) 17:59:340817デフォルトの名無しさん
2007/11/02(金) 18:10:16「ポインタを使わない」というのは、具体的には何を指すの?
gets()などの関数を使う以上、ポインタを使わずにはできないのだけれど。
0818デフォルトの名無しさん
2007/11/02(金) 18:25:19ポインタはまだ習ってないので、配列を使って解く感じなんです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5203.c
上記のが問題文全部です。
実行結果は、>>758 のままです。
0819デフォルトの名無しさん
2007/11/02(金) 18:26:15VRMLよく知らんのだけど、頂点リストと面リスト用意して、面は3つの頂点番号で指定するってパターン?
>>805 のやつは隣の面と頂点を共有するようにはしてないから、
同一位置にある頂点を別々のものとして定義するんじゃダメ?
それでいいなら、n番目の面は、3*n, 3*n+1, 3*n+2番目の頂点から構成されるってことになる。
0820デフォルトの名無しさん
2007/11/02(金) 18:26:27ttp://up2.viploader.net/upphp/src/vlphp084831.jpg
0821デフォルトの名無しさん
2007/11/02(金) 18:27:040822デフォルトの名無しさん
2007/11/02(金) 18:28:50R: : : :. : pq: :i} メッ!!
|:.i} : : : :_{: :.レ′
ノr┴-<」: :j|
/:r仁ニ= ノ:.ノ|! _
/:/ = /: :/ }! |〕) ガッ!!
{;ハ__,イ: :f | /´
/ }rヘ ├--r─y/
/ r'‐-| ├-┴〆 _, 、_ '⌒ ☆
仁二ニ_‐-イ | | ∩`Д´) >>820
| l i 厂  ̄ニニ¬ ノ ⊂ノ
,ゝ、 \ \ __厂`ヽ (__ ̄) )
/ /\_i⌒ト、_ ノrr- } し'し′
└-' ̄. | |_二二._」」__ノ
0823デフォルトの名無しさん
2007/11/02(金) 18:31:200824デフォルトの名無しさん
2007/11/02(金) 18:35:030825デフォルトの名無しさん
2007/11/02(金) 18:41:36正三角形に分割とは書いてなかったから、>>741 の正20面体のアルゴリズムを
そのままつかってみた
0826デフォルトの名無しさん
2007/11/02(金) 18:49:50リンク先の 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]));
}
0827デフォルトの名無しさん
2007/11/02(金) 21:06:40本当にありがとうございます!
0828デフォルトの名無しさん
2007/11/02(金) 21:35:14きみ、大丈夫?
0829デフォルトの名無しさん
2007/11/02(金) 21:39:43>>826 はポインタを使っているが、
一見そうは見えないだけ
gets の引数とか
strlen の引数とか
get_word print_word strlng の引数とか
printf の書式指定とか、書式指定 %s に対応する引数とか
いろいろ使ってる
0830デフォルトの名無しさん
2007/11/02(金) 21:41:130831デフォルトの名無しさん
2007/11/03(土) 01:13:30変数xが12より大きく24未満ならば12を引いた数を表示、
0より小さいか24以上ならばOut of rangeを表示、
0以上12以下ならばそのまま表示するプログラムを作れ。
課題2
フィボナッチ数列の最初の10項を成分とするベクトルを作成せよ
スレ違いなんですが「scilab」でおねがいできませんか?;;
scilabの板が見つからなくってほとほと困りはててここに参りましたorz
0832デフォルトの名無しさん
2007/11/03(土) 01:34:53分かってるとおりスレ違い。せめて雑談用などに行こうね。
0833デフォルトの名無しさん
2007/11/03(土) 01:41:04scilabは全く知らないが、↓のマニュアル片手にやってみた。
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]
0834デフォルトの名無しさん
2007/11/03(土) 01:49:51[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] その他の制限:
よろしくお願いします
0835デフォルトの名無しさん
2007/11/03(土) 10:05:22・宿題の原文を晒せ
・小出しするな
・過去の問題文は消さないでほしいな
0836デフォルトの名無しさん
2007/11/03(土) 10:15:53これどうやんの?少し考えてみたがわからんかったが
0837デフォルトの名無しさん
2007/11/03(土) 10:28:06[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] その他の制限: 多次元配列までならいました。できるかぎり簡単な文でお願いします。
0838デフォルトの名無しさん
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] その他の制限: 多次元配列までならいました。できるかぎり簡単な文でお願いします。
0839デフォルトの名無しさん
2007/11/03(土) 10:55:32main() {
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");
}
}
}
0840デフォルトの名無しさん
2007/11/03(土) 11:40:30・宿題の原文を晒せ
>先生が口頭で言うんで、原文ないんですよ・・・すいません。
・小出しするな
>小出ししてるわけじゃなくて、どんどん付け加えられてるんです。
・過去の問題文は消さないでほしいな
>すいません。まとめてみました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5205.txt
よろしくお願いします。
0841デフォルトの名無しさん
2007/11/03(土) 11:54:31テンプレにそって新たに質問したら?
横着するのはイクナイ
0842デフォルトの名無しさん
2007/11/03(土) 11:56:010843デフォルトの名無しさん
2007/11/03(土) 13:16:55サンクス!!
0844デフォルトの名無しさん
2007/11/03(土) 16:35:030845デフォルトの名無しさん
2007/11/03(土) 16:37:55[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ファイル出力可
お願いします。
0846デフォルトの名無しさん
2007/11/03(土) 17:06:171 :以下、名無しにかわりまして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
0847デフォルトの名無しさん
2007/11/03(土) 17:06:21巡回セールスマンとかハミルトン経路とかの問題ですら(オレにとっては)難しいというのに。
0848デフォルトの名無しさん
2007/11/03(土) 17:20:22町A・町B・町Cとあって、町Bから町Aと町Cに1本ずつ道があった場合
町Aと町Cは繋がっているものと考えてよいか?
0849デフォルトの名無しさん
2007/11/03(土) 17:21:250850デフォルトの名無しさん
2007/11/03(土) 17:31:28円周上にn個の点があり、それらの点がm本の辺で繋がっており、閉路をなしている。
上記のグラフからh本の辺を取り除いたところ、独立してしまう点、あるいは分断された複数の閉路が出来た。
再び閉路を形成するには、何本の辺をどの頂点間に追加すればよいか。
……立派に離散数学の範疇だな
0851デフォルトの名無しさん
2007/11/03(土) 17:46:30#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位)の精度で出力してます。
ファイル名は適当に書き換えてください。
0852デフォルトの名無しさん
2007/11/03(土) 17:47:35#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;
}
0853デフォルトの名無しさん
2007/11/03(土) 18:54:55完全グラフごとに分割せよ
各町が道路をn個持てばn完全グラフの可能性がある
n完全グラフはn-1まで道路がこわせれても平気
例えば、4つまで壊して良いなら、5完全グラフは一つの町であるとして良い
0854デフォルトの名無しさん
2007/11/03(土) 18:56:20n完全グラフはn-2まで道路がこわせれても平気
0855デフォルトの名無しさん
2007/11/03(土) 19:05:16すると、残ったのは4以下の完全グラフである
ひとつ道路を作れば5完全グラフに出来るなら道路数をカウントしてそれを一点に縮める
もっとも少ない道路で5完全グラフになるものを見つけて道路数をカウントしてそれを一点に縮める
最後にひとつ町しか無くなればひつような道路数が求まる
0856853
2007/11/03(土) 19:09:110857デフォルトの名無しさん
2007/11/03(土) 19:11:09まったく手がでらん・・・
0858853
2007/11/03(土) 20:09:45もっとも道路が少なくなるように設置すれば良いはずだ
たとえば3点あって道路がひとつもなく、5本消して良い場合は、最大18本必要になるが
お互いをつなぐようにすれば9本で済む
もともと道路が設置してある場合でも、うまくつなげば出来るはず
たとえば100本ひつようとなったら50個道路を作り、101個なら51個で良いはずだ(証明はわからない)
0859デフォルトの名無しさん
2007/11/03(土) 20:15:40各頂点から1つ道路を増やせばよいが、そのうち1つはお互いに繋がるようにすれば道路は2つで済む
0860858
2007/11/03(土) 20:29:154完全グラフが2つあって1つの頂点同士で繋がっているとすると
各頂点から3つ以上道路が出ているから2つ消しても良いはずだが、この場合上のひとつの道路を壊せば分断されてしまう
0861デフォルトの名無しさん
2007/11/03(土) 20:37:530862858
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
0863できるかな?
2007/11/03(土) 21:47:330864デフォルトの名無しさん
2007/11/03(土) 21:55:14先生!まだ、出来てません。もう少し待ってください!
つ ttp://www.oreillynet.com/onlamp/blog/2006/03/learning_solaris_11.html
0865845
2007/11/03(土) 23:29:44ありがとうございます。
0866デフォルトの名無しさん
2007/11/04(日) 00:29:41[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ヶ月の初心者です
よろしくお願いします
0867デフォルトの名無しさん
2007/11/04(日) 00:35:20[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] その他の制限:
よろしくお願いします
0868866
2007/11/04(日) 01:28:550869デフォルトの名無しさん
2007/11/04(日) 01:49:000870デフォルトの名無しさん
2007/11/04(日) 02:10:28#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;
}
0871デフォルトの名無しさん
2007/11/04(日) 02:15:19日本語でおk
っていうかC言語ってなんだよ。俺らの使ってる言語に合わせてよ^^;
0872デフォルトの名無しさん
2007/11/04(日) 04:44:58void strをTO☆ME☆TE
0873デフォルトの名無しさん
2007/11/04(日) 10:17:44http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5207.txt
0874デフォルトの名無しさん
2007/11/04(日) 12:35:54すまん、適当に作ったもんで
#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;
}
0875デフォルトの名無しさん
2007/11/04(日) 12:43:410876デフォルトの名無しさん
2007/11/04(日) 14:03:22[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] その他の制限: とくにありません。
よろしくおねがいします
0877デフォルトの名無しさん
2007/11/04(日) 14:23:580878876
2007/11/04(日) 14:35:040879デフォルトの名無しさん
2007/11/04(日) 14:58:21(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)); } */
0880デフォルトの名無しさん
2007/11/04(日) 15:00:060881デフォルトの名無しさん
2007/11/04(日) 15:05:230882デフォルトの名無しさん
2007/11/04(日) 15:09:53&と|
0883879
2007/11/04(日) 15:22:20さよか。メモリ少ない頃に学んだもんでつい。
>>881
元のがreturn()だったんで一応と思ったんだが、たしかに。
>>882
ああ、ホントだ……。
色々スマン。駄目な見本とでもしてくれorz
0884879
2007/11/04(日) 15:26:500885デフォルトの名無しさん
2007/11/04(日) 16:13:45そのエラーが物凄く見つけづらかったらしくてな、
そこから「returnの値は括弧で囲むな」という(古い)格言が生まれた
〜C言語を256倍使うための本 ASCII〜
0886デフォルトの名無しさん
2007/11/04(日) 16:16:44懐かしいw 黄色本だよね。
0887デフォルトの名無しさん
2007/11/04(日) 17:25:560888デフォルトの名無しさん
2007/11/04(日) 21:17:360889744
2007/11/04(日) 22:04:31[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見てもいまいちできません。
よろしくお願いします。
0890866
2007/11/04(日) 22:30:45873と879の作ったプログラムは間違いって事ですか?
0891デフォルトの名無しさん
2007/11/04(日) 22:42:54ある文が関数呼び出しかどうかの判断は括弧を見て行うのだが、
return は関数ではないため、括弧を見つけて関数と誤解釈してこける。
0892デフォルトの名無しさん
2007/11/04(日) 23:55:400893デフォルトの名無しさん
2007/11/04(日) 23:58:37クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0894デフォルトの名無しさん
2007/11/04(日) 23:59:18クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0895デフォルトの名無しさん
2007/11/04(日) 23:59:51クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0896デフォルトの名無しさん
2007/11/05(月) 00:01:40話はわかった。つまりこうだな?
void main(){while(1);}
0897デフォルトの名無しさん
2007/11/05(月) 00:07:34クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0898デフォルトの名無しさん
2007/11/05(月) 00:08:38クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0899デフォルトの名無しさん
2007/11/05(月) 00:10:43クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0900デフォルトの名無しさん
2007/11/05(月) 00:11:14クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
[2] 問題文(含コード&リンク):
>>770のプログラムの入力学生数を最大50人までとし、50人以下の任意の人数で入力を止める事が出来るプログラム
を作成せよ。(例:10人分を入力した時点で入力を停止して、入力した10人分の情報を表示する。)
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C
[4] 期限: 2007年11月05日01:00迄
[5] その他の制限:
改めて宜しくお願いします。
0902デフォルトの名無しさん
2007/11/05(月) 00:28:18クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0903デフォルトの名無しさん
2007/11/05(月) 00:28:48クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0904デフォルトの名無しさん
2007/11/05(月) 00:29:34クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
0905デフォルトの名無しさん
2007/11/05(月) 03:52:04>>885を良く見ろ、retrunだろ
綴り間違えに気付かなきゃ本当にゆとりだ
0906デフォルトの名無しさん
2007/11/05(月) 04:03:20#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;
}
0907デフォルトの名無しさん
2007/11/05(月) 04:10:31発見がもう期日過ぎで、もうどうしようもなかったけど、面白そうだから作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5208.txt
特にコメントなんかは入れて無いけど、プログラムの要約をすると
まず1が入る座標を特定して、そこを基準として、ぐるぐる回して数字を入れていく感じ。
mallocを使ってるので、残念ながら10^9などが入れられたら場合は、たぶん動かない。
配列を使わず、計算式だけで求めて、上から表示していく方法みたいなのは俺無理。
あと、freeすんのを忘れてる。
0908デフォルトの名無しさん
2007/11/05(月) 04:12:57やっぱ最初そういう風に考えるよなw
で、10の9乗の領域が確保できなくて……
0909デフォルトの名無しさん
2007/11/05(月) 04:14:27問題文の意味を取り違えてる事に気がついた。 これは恥ずかしいw
0910デフォルトの名無しさん
2007/11/05(月) 04:30:08>>906も>>907も題意には沿ってる。
0911デフォルトの名無しさん
2007/11/05(月) 04:54:40左5
下3
上7
変化するから配列使わなくても出来る
nが与えられたとき上へ4つ進めると+28
そこから左へつ進めると+20
n+48 n+43 ・・・・
n+41 n+36 ・・・・
とすればよい
0912デフォルトの名無しさん
2007/11/05(月) 05:01:07例えばk=5を与えられたら、
19 06 01
18 05 04
17 16 15
の9マスを表示するんだろ。
0913デフォルトの名無しさん
2007/11/05(月) 05:09:300914デフォルトの名無しさん
2007/11/05(月) 05:09:51……とは>>876は明確には言っていない
0915デフォルトの名無しさん
2007/11/05(月) 05:13:070916デフォルトの名無しさん
2007/11/05(月) 05:14:140917デフォルトの名無しさん
2007/11/05(月) 05:17:15かわりにレス番入れたときの結果をあげとく
1038 913 796
1037 912 795
1036 911 794
0918デフォルトの名無しさん
2007/11/05(月) 05:17:56それとも1から作った渦巻きの中で、kの周辺を取り出すのかってこと
そこらへんが>>876は明確じゃない
0919デフォルトの名無しさん
2007/11/05(月) 05:19:130920デフォルトの名無しさん
2007/11/05(月) 05:23:120921デフォルトの名無しさん
2007/11/05(月) 05:23:210922デフォルトの名無しさん
2007/11/05(月) 05:27:300923デフォルトの名無しさん
2007/11/05(月) 05:32:00与えられた数字で出たらなんとかすればいいのでは?
0924デフォルトの名無しさん
2007/11/05(月) 05:32:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5209.txt
0925デフォルトの名無しさん
2007/11/05(月) 05:37:201、1、2、2、3、3、4、4
となる。
1の位置を(0,0)として
右方向で進むなら0、下へ進むなら1、左へ進むなら2
を記録していれば求める位置にたどり着く
0926デフォルトの名無しさん
2007/11/05(月) 06:04:47using 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; }
0927926
2007/11/05(月) 06:06:510928デフォルトの名無しさん
2007/11/05(月) 06:08:08[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] その他の制限:なし
宜しくお願いします
0929926 なおした
2007/11/05(月) 06:36:52using 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; }
0930デフォルトの名無しさん
2007/11/05(月) 06:43:28期限は12時と書いてあるけれど、11月6日のお昼の12時のこと?
0931デフォルトの名無しさん
2007/11/05(月) 07:29:06やっぱり 10^9 は終わらんなあ
0932デフォルトの名無しさん
2007/11/05(月) 08:59:49紙とペンで計算したらできた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5211.cpp
0933デフォルトの名無しさん
2007/11/05(月) 09:13:11c++で素数を求めるプログラムなんですが、7=素数 というコードは書けるんですが
素数ではない数を8=2*4 9=3*3 10=2*5 とするにはどうしたらいいんでしょうか?
0934デフォルトの名無しさん
2007/11/05(月) 09:18:37>>1
あと 8=2×4 って、8=2×2×2 としてはいけないということ?
0935デフォルトの名無しさん
2007/11/05(月) 09:25:08そうなんです。
0936デフォルトの名無しさん
2007/11/05(月) 09:26:43>>1
0937デフォルトの名無しさん
2007/11/05(月) 09:27:46それだけだろが
0938デフォルトの名無しさん
2007/11/05(月) 09:32:19using 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";}
0939デフォルトの名無しさん
2007/11/05(月) 09:39:03[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] その他の制限: 特になし
0940g
2007/11/05(月) 10:18:29あと、途中で保存忘れてたから、なんか変化も試練
長いからうpした
(どこまでプログラムが進んでるか、変数の値とかとるための、
チェック用の出力多いけど、笑うなよ)
パスはc
ttp://www-2ch.net:8080/up/download/1194225344265159.iP92Zx
0941デフォルトの名無しさん
2007/11/05(月) 10:40:55・テンプレに沿って書いたほうがいい
・ソースにパスをかけるのは面倒くさい
結論:出直してきてください。
0942デフォルトの名無しさん
2007/11/05(月) 10:49:16やだ
0943デフォルトの名無しさん
2007/11/05(月) 10:58:13整数をn個入力すると、入力した数値をソートして昇順に表示するプログラムを作成してください
お願いします
0944デフォルトの名無しさん
2007/11/05(月) 11:22:50#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;
}
0945デフォルトの名無しさん
2007/11/05(月) 12:19:15本当に、ありがとうございました。
求めていたものどうりになっていました。
0946デフォルトの名無しさん
2007/11/05(月) 14:10:53[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桁まで。
どうかお願いします
0947デフォルトの名無しさん
2007/11/05(月) 14:29:43(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;
}
0948デフォルトの名無しさん
2007/11/05(月) 14:37:22#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;
}
0949デフォルトの名無しさん
2007/11/05(月) 14:52:16[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] その他の制限: 特にないです
よろしくお願いします
0950デフォルトの名無しさん
2007/11/05(月) 14:54:330951デフォルトの名無しさん
2007/11/05(月) 14:54:41(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;
}
0952949
2007/11/05(月) 14:55:41指摘ありがとうございます。
0953デフォルトの名無しさん
2007/11/05(月) 14:59:510954デフォルトの名無しさん
2007/11/05(月) 15:25:42�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;
}
0955デフォルトの名無しさん
2007/11/05(月) 16:04:31[2] 問題文:
正四面体があるとする。底面(ある一つの面)に平行な(n-1)枚の面で高さをn等分することを考える。この作業を他の面に平行な面でも行う(他の方向にもn等分する)場合、正四面体は全部で何個に分けられるか。
nの入力に対してその個数を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: どちらでも可
[4] 期限:11月7日AM10:00
[5] その他の制限: 基本的なことは大体習いました。
よろしくお願いします。
0956デフォルトの名無しさん
2007/11/05(月) 16:52:490957デフォルトの名無しさん
2007/11/05(月) 16:58:00改行で入力終了にしたいのですが,どうすればいいですか?
1 1 0 0 1 0 1 1 改行
で入力を終了したいです。
教えてください。よろしくお願いします。
//---- 配列入力
num = 0;
do {
scanf("%d", &arr[num]);
} while ( arr[num++] != EOF ); // 改行は入力の終了
num--; // 有効な入力数
0958デフォルトの名無しさん
2007/11/05(月) 17:18:44テンプレ読んで、関数の仕様把握しろ。
0959デフォルトの名無しさん
2007/11/05(月) 17:45:12scanf()は改行で入力を終了するのに適しない。
fgets()とsscanf()を組み合わせろ。
0960デフォルトの名無しさん
2007/11/05(月) 17:49:06そうです
よろしくお願いします
0961デフォルトの名無しさん
2007/11/05(月) 17:59:43[2] 問題文(含コード&リンク):Q-learningを用いて電力の需要家と供給家が最適な入札を選択するプログラムを作りなさい。
[3] 環境
[3.1] os: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:11月7日 12時
[5] その他の制限:
0962デフォルトの名無しさん
2007/11/05(月) 18:28:00>>956の言うとおり、
まず、一辺がaの正三角形四枚からなる正四面体の体積は V0 = (sqrt(2) * a^3) / 12 。
ここでn = 2 とすると、分割後の一つの小正四面体の体積は V2 = (sqrt(2) * a^3) / 96 。
V0 : V1 = 8 : 1
他の場合も同様にしてnの三乗
0963デフォルトの名無しさん
2007/11/05(月) 18:31:56[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への経路のうちでボトルネックの持つ重みが最大のもののことである
0964デフォルトの名無しさん
2007/11/05(月) 18:33:40main(){
int n;
printf("n=");
scanf("%d",&n);
printf("%d\n",n*n*n);
}
0965デフォルトの名無しさん
2007/11/05(月) 19:14:08頂点(a,b)ごとにL(a,b) bpsが与えられているとして
もと、頂点0からN+1 (N+1が最後の番号とする) へ移動するなら、
頂点の経由数K=0,1,2・・・ごとに1からNの頂点を挿入する
この個数は、P(K,N)個ある 重複なるえらんだ順列
0966デフォルトの名無しさん
2007/11/05(月) 19:35:08頂点(a,b)ごとにB(a,b) bpsが与えられているとして
L(a,b) = 1/B(a,b)とする 通信速度が0ならばそこの負荷は無限大 通信不可能
0967デフォルトの名無しさん
2007/11/05(月) 20:24:31最大路の定義は明確だが、
最短最大路の定義が不明瞭。
0968誰か次スレ立てて。次スレは99代目です
2007/11/05(月) 20:31:55【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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/
0969デフォルトの名無しさん
2007/11/05(月) 20:32:45ひらがなとカタカナは半角カタカナに変換し
その他の文字は半角空白に変換して出力せよ
コード表
http://qpon.quu.cc/pc/sjis.htm
http://qpon.quu.cc/pc/cord.htm
0970デフォルトの名無しさん
2007/11/05(月) 20:34:56>>969はテンプレとトリップを使おうね。
0971デフォルトの名無しさん
2007/11/05(月) 20:38:14最短路と最大路を求めよってことだろう
0972デフォルトの名無しさん
2007/11/05(月) 20:38:50C/C++の宿題を片付けます 99代目
http://pc11.2ch.net/test/read.cgi/tech/1194262698/
0973963
2007/11/05(月) 20:44:09最大路の中から最短路を選ぶって事です
0974デフォルトの名無しさん
2007/11/05(月) 20:45:08[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] その他の制限: 特になし
よろしくお願いします。
0975デフォルトの名無しさん
2007/11/05(月) 20:49:58長さKの順列をリストアップ出来ればあとは簡単だろう
0976デフォルトの名無しさん
2007/11/05(月) 20:50:06重み付きグラフの最短経路問題ならダイクストラ法で解けばいい。
ちょうど B = 1/L なので、最大と最短両方が同じアルゴリズムで解けることになる。
0977デフォルトの名無しさん
2007/11/05(月) 20:55:13>最大路の中から最短路を選ぶって事です
最大路が一本だとすると、「その中から」選ぶことは出来ない。路は一本しか。
最大路が複数だとすると、ボトルネックの重さは各最大路において等しくなる。じゃないと「複数の最大路」っていう仮定が崩れる。よって選ぶことは出来ない。
つまり、最大路の中からは最短路は選べない。
0979デフォルトの名無しさん
2007/11/05(月) 21:02:34ボトルネックの値が同じ小ささの中で、経路の和が最短の物は選べる
0980955
2007/11/05(月) 21:20:09回答ありがとうございます
ですが……おそらく、非常に厄介なことに、それぞれの小片が正四面体にはならないと思います
(n=2の時を考えてくれれば分かりやすいかもしれません
それぞれの角を切り落とす形なので5個(≠2^3)に分かれると思います)
あくまでそれぞれの面に平行な面での分割ですので……
0982デフォルトの名無しさん
2007/11/05(月) 21:36:02どうやって各ブロックが四面体だとわかるんだ?
0984955
2007/11/05(月) 21:40:54もしかしたら私の問題の説明が曖昧だったせいかもしれませんが……補足要求があったら言ってください
0985デフォルトの名無しさん
2007/11/05(月) 21:41:100986デフォルトの名無しさん
2007/11/05(月) 21:48:46その中心から見て正四面体としての面がちゃんとあるかチェックすればいいのでは?
平面の方程式を考えて
0987955
2007/11/05(月) 22:02:00後出しで悪いですが、プログラム中で図形的?に求めてください……
あらかじめ式を出すのではなくて……
0988デフォルトの名無しさん
2007/11/05(月) 22:06:400989デフォルトの名無しさん
2007/11/05(月) 23:07:28[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0990aho
2007/11/05(月) 23:41:07きれいではないが単純な、アルゴリズムは考えた。
縦・横・斜めの列で'0'が2つ揃ったら、その列の残り1つに'X'を置く。
例として、1行目に注目する。
if((ch0 == '0') && (ch0 == ch1)){
ch2 = 'X';
if((ch1 == '0') && (ch1 == ch2)){
ch0 = 'X';
これを残りの7列についても記述してやればいいんじゃない?
これより先は、実装が面倒なのでここでやめます。
ポインタが使えるなら、もっときれいに書けるよ〜
0992デフォルトの名無しさん
2007/11/06(火) 00:19:21なんか混乱してる人が居るみたいだけど・・・
グラフに二種類の辺重み L(e), B(e) が与えられたとき,
・パスの長さを ΣL(e) で定義したときの最短パスを「最短路」
・パスの長さを max B(e) で定義したときの最長パスを「最大路」
と言ってるんだよね?
0993992
2007/11/06(火) 00:21:440994デフォルトの名無しさん
2007/11/06(火) 00:52:33http://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 の経路復元でもしてやればできる.
0995デフォルトの名無しさん
2007/11/06(火) 01:53:200996デフォルトの名無しさん
2007/11/06(火) 02:03:04ここの住人さんは絶対に解答してくれません
0997デフォルトの名無しさん
2007/11/06(火) 02:52:532点間の距離を、他を経由した方が短ければ置き換えるって言う普通のことだけど・・・なかなか思いつかないな
0998997
2007/11/06(火) 03:47:170999デフォルトの名無しさん
2007/11/06(火) 07:45:32計算順序によらないよ.大雑把に言うと Floyd-Warshall は
(u,v の w まで経由してよい最短経路) =
min { (u,v の w-1 まで経由してよい最短経路)
(u,v を w を経由する最短経路) }
という漸化式を動的計画法で計算しているのであって、
「短くなったら置き換える」というのとは本質的に違う.
1000デフォルトの名無しさん
2007/11/06(火) 08:33:33ttp://www.red.oit-net.jp/tessy/4to8.html
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。