C/C++の宿題を片付けます 91代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題を片付けます 90代目
http://pc11.2ch.net/test/read.cgi/tech/1181802185/
0002デフォルトの名無しさん
2007/06/23(土) 23:16:54乙
0003前スレ978
2007/06/23(土) 23:26:29[1] 授業単元:プログラム技術3
[2] 問題文(含コード&リンク):
main(int argc char , *argv[]){
int i;
printf("%d argument(s).Yn" , argc -1);
for(i=0; i<argc; i++){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
}
引数の順序を入れ替えてた後(*argv[] , int argc char)、入力した文字を逆順に出力するようにしたいのですが、変数以外
何処を変更したらいいのでしょうか?for文あたりを弄っても上手くいきませんでした。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 6月26日
[5] その他の制限: (ポインタを習ってるレベルです)
0004デフォルトの名無しさん
2007/06/23(土) 23:48:33文字を逆順の意味がはっきりせん。複数の文字列をそれぞれ入力した順番から逆にするのか
それぞれの文字列の文字を逆順にするのか。それから、引数間違っているから
ちゃんと覚えてくれ。 int main(int argc , char *argv[]) やで
0005デフォルトの名無しさん
2007/06/23(土) 23:55:14160 The function called at program startup is named main.
161 The implementation declares no prototype for this function.
162 It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
163 or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
0006デフォルトの名無しさん
2007/06/24(日) 06:08:18[2] 問題文(含コード&リンク):
図書カードカタログ:
1.入力
2.著者名による検索
3.書名による検索
4.終了
選択項目を入力して下さい:
ユーザーが1を選んだら書名、著者名、出版社の順に書名先頭に空白行が入力させるまで繰り返し入力させ続ける。
2,3を選んだ場合は特定の著者か書名を入力させ一致するものがあればその残りの情報も出力させる。
4.で終了
[3] 環境
[3.1] OS: (Windows/Linux/等々)WinXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)Borland C++ Compiler 5.5
[3.3] 言語: (C/C++/どちらでも可 のいずれか)cのみ
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)無期
[5] その他の制限:ループ、if、switch、ポインタ、配列、自作関数まで習った、
使用可能なライブラリ stdio.h string.h conio.h stdlib.h ctype.h
自分で書いたコードです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4365.txt
なんかごちゃごちゃしてわかりにくくなってしまいました
あと、なんども検索してるとバグっておかしくなってしまいます
もっとキレイにうまく改善できませんか?
0007デフォルトの名無しさん
2007/06/24(日) 07:46:14[2] 問題文:10リットル、8リットル、3リットルの容器があり、10リットルの容器に水がいっぱい入っている。
この3つの容器を用い、3リットルの容器に1リットルの水を取り出す最小の手順を答えよ。ただし、水を移す時は、移す側が空になるか、移す側がいっぱいになってときとする。
幅優先探索と言うのを用いるそうです。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 5.5.1
[3.3] 言語: C
[4] 期限: 6月25日の2400まで
[5] その他の制限:バケツの水の入り方を、座標に見立て、その座標に番号をつけ、広がり優先探索を用いる。
どうしたら良いかわからず、焦っています。
似たような問題が89代目のスレッドにありましたが、制限が違っていて対処できませんでした。
急ですがよろしくお願いします
0008デフォルトの名無しさん
2007/06/24(日) 07:52:31状態は
8L 容器に入っている水の量 0-8
3L 容器に入っている水の量 0-3
9*4=36 種の状態を取り得るってことで解くのでおk?
0009デフォルトの名無しさん
2007/06/24(日) 07:52:4310Lから3L汲み出す&捨てる×3回繰り返す、残った1Lを3Lの容器に入れる
のが最短?
0010デフォルトの名無しさん
2007/06/24(日) 08:15:03http://pc11.2ch.net/test/read.cgi/tech/1180856695/151
0011デフォルトの名無しさん
2007/06/24(日) 08:23:39#include <stdio.h>
int foo(int input[5][5], int ii, int jj){
int i, j, total = 0;
if(input[ii][jj] == 1) return 0;
for(i = ii + 1; i < 5 && input[i][jj] == 0; i++) total++;
for(i = ii - 1; i >= 0 && input[i][jj] == 0; i--) total++;
for(j = jj + 1; j < 5 && input[ii][j] == 0; j++) total++;
for(j = jj - 1; j >= 0 && input[ii][j] == 0; j--) total++;
return total;
}
int main(void){
int input[5][5], i, j;
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
scanf("%1d", &input[i][j]);
for(i = 0; i < 5; i++){
for(j = 0; j < 5; j++)
printf("%d ", foo(input, i, j));
putchar('\n');
}
return 0;
}
0012デフォルトの名無しさん
2007/06/24(日) 09:15:59とりあえず制限事項に外れる入力が無ければ大丈夫に見えるけど、
どういう風に入力したら、どうおかしくなったのか、詳しくヨロシク。
0013前スレ978
2007/06/24(日) 09:16:00スマソ。複数の文字をそれぞれ入力した順番から逆に出力したいんです。
現状ですと、./a.out a b c と入力すると、[1]a [2]b [3]cと出力されます。
それを、./a.out a b c と入力して、[1]c [2]b [3]aと出力される
ようにしたいんです。どうしたら良いでしょうか?
それと、mainの前のintって必要なのでしょうか?
授業で習ったサンプルの文にはintは無かったのですが・・・。
main(ここでintの宣言をしてるので必要ないような気がするのですが)
お手数ですが、回答よろしくお願いします。
0014デフォルトの名無しさん
2007/06/24(日) 09:29:48習った習わないはともかく、国際的な標準スタイルってことで
それくらい知っておくべきだと講師に言っておきんしゃい。
#include <stdio.h>
int main(int argc , char *argv[]) {
int i;
printf("%d argument(s).\n" , argc -1);
for(i=argc-1; i>=1; i--){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
return 0;
}
0015デフォルトの名無しさん
2007/06/24(日) 09:32:14mainが返す値について書かれているから。まさか、この程度の
英語も理解できんとは言わせないよん。
0016前852
2007/06/24(日) 09:37:38(1),(2)です
0017前スレ978
2007/06/24(日) 10:15:18レスどうもです。上手く動きました。どうもです。
>>15
あれ、漏れへのレスだったのですね。気付きませんでしたorz
それにしてもmain関数手前にintを置くのが正しいスタイルだったんですねorz
授業ノートを見返してみましたが、書かれてるソースには一つもmain手前にintが
ありませんでした・・・。
次週の講義の際に講師に質問してみます。
0018デフォルトの名無しさん
2007/06/24(日) 10:19:24main の前に int がついています。どういう意味でしょうか?
もしこんなことも分からないようなら
勉強不足な講師だな ププッ って言ってました
0019デフォルトの名無しさん
2007/06/24(日) 10:29:51[1] 授業単元:C++研究
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4218.txt(問題文)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4262.txt(修正前プログラム)
上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
自分とは男を指します。キーボードから自分1〜20の値を任意に決めれるようにします。
ある値が出た場合、そのある値が15の場合、15がでたときに、その勝負が行われた直後に
1〜20ポイントランダムでポイントが自分の持ちポイントに加算される。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
内容がややこしいですが、どうかよろしくお願いします
0020デフォルトの名無しさん
2007/06/24(日) 10:30:52くどいようだが、あくまでも 標準スタイル、ANSI、ISO準拠によるものであって
そのスタイルを無視しても問題ない環境では本当に問題はないぞな。
あくまでも幅広い環境で通用する標準スタイル。
0021前852
2007/06/24(日) 10:43:05表示もうまく出るようになったのですが
出力結果を見るとソートがうまくいっていないような感じです。
(ちゃんと合計点降順になっていません)
もともとクイックソートは昇順で作っていたので、
条件分岐を逆にしただけなのですが、
これが原因でしょうか?(コメント行は書き換えてないです。)
0022デフォルトの名無しさん
2007/06/24(日) 12:11:26やってみたが解なしになってしまった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4368.txt
なんか間違ってんのかな。
0023デフォルトの名無しさん
2007/06/24(日) 12:46:15幅優先むずいな
0024984
2007/06/24(日) 13:01:15quick()の再帰呼出しを、whileブロックの外に出す。
quick_sub()もそうだな。
input()の
while(fgets(buf,sizeof(buf),fin) > 0){ を
while(fgets(buf,sizeof(buf),fin) != NULL){ に訂正してくれ
0025デフォルトの名無しさん
2007/06/24(日) 13:22:29[2] 問題文(含コード&リンク):
2次方程式
ax^2 + bx + c = 0
は,判別式
Δ^2 = b^2 - 4ac
により,(a)2つの実数解をもつ,(b)1つの実数解(重解)をもつ,(c)2つの虚数解をもつ,の3つの場合に分けられる.
3つの正整数a,b,cを引数とし,実数値sqrt(b2-4ac)を戻り値とし,b2-4acが負の場合はエラーを示す値を戻り値とするユーザ定義関数delta()を作成せよ.
作成したユーザ定義関数を用いて,3つの正整数a,b,cをキーボードから入力し,2つの実数解を表示するプログラムを作成せよ.
ただし,重解をもつ場合と虚数解をもつ場合はその旨表示したうえで,再度a,b,cの入力を促すようにし,2つの実数解をもつ方程式が入力されるまで繰り返すようにすること.
[実行結果]
3つの係数を入力して: 1 2 1
重解を持つよ!入力し直して。
3つの係数を入力して: 1 1 1
虚数解を持つよ!入力し直して。
3つの係数を入力して: 2 9 3
2x^2 + 9x + 3 = 0 の2つの実数解は
x = -0.362541 と x = -4.137459
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: C
[4] 期限: 2007年6月29日まで
[5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
002622
2007/06/24(日) 13:55:53うーん。条件もう一度確認してみて。
> 移す側がいっぱいになってとき
じゃなくて、「移される側がいっぱいになるとき」
と読みかえると、解が出るんだが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4369.txt
canmove() の中の
#if 0 を #if 1 に変更すると、>>7 に書いてある通りの動作になるが、
解なしになる。
main() の中の #if を同様に変更すると、探索の途中経過を表示する。
0027デフォルトの名無しさん
2007/06/24(日) 14:48:59[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt)
次の手順で動作するプログラムheapsort.cを作成し,その動作を確認せよ.
まずファイルから保存されているデータ数nを読み込む.
データを1つ読み込み,ヒープを構成する.
これをn回繰り返し,その度にヒープを構成する.
すべてのデータを挿入し終ったらヒープが完成するので,データを木構造がわかるようにディスプレイ上に表示する.
次に,deletemax()関数をn回呼び出し,ソート処理を進める.
最後に,整列されたデータをディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 6月26日 夜まで
[5] その他の制限:木構造のディスプレイ表示方法は各自に任せる.
結果がソートされていることをそれぞれのデータについて毎回確認すること.
どなたか解る方、解いていただけるとありがたいです。
0028デフォルトの名無しさん
2007/06/24(日) 14:49:25それ前スレに同じ問題あったぞ
回答は954かな
0029前852
2007/06/24(日) 14:54:02コンパイルが通らなくなりました。
In file included from /usr/include/stdlib.h:33,
from seiseki.c:19:
/UNIONFS/usr/bin/../lib/gcc/i486-linux-gnu/4.0.4/include/stddef.h:214: error: syntax error before 'typedef'
0030デフォルトの名無しさん
2007/06/24(日) 15:10:00斜め読みしただけだが。
search1()
> while(p[i] != ' '){
→ while(1) { に。
search2()も同様の変更。
0031前852
2007/06/24(日) 15:16:17処理中 を表示する前に[SegmentationFault]
!= NULLにしても同上
です。
0032デフォルトの名無しさん
2007/06/24(日) 15:33:46多分>>7のタイプミスと思われ
0033984
2007/06/24(日) 15:34:52>条件分岐を逆にしただけなのですが
この修正が怪しい。
quick()内の判定条件を見直せ。
3,4件の小さなデータを使い、
処理を追いかけてみるといい。
これは自力でできると思う。
0034前852
2007/06/24(日) 15:44:08> < を逆にして < > にすべきところを <= >= にしていたのが原因だったみたいです。
無事完成しました。
今までご協力してくださったみなさま、
本当にありがとうございます!
0035984
2007/06/24(日) 15:59:27何かを参考にしたのでしょうか。
一度見直した方が良いようです。
0036前852
2007/06/24(日) 15:59:48while(fgets(buf,sizeof(buf),fin)>0){
p = buf;
field[0] = buf;
j = 1;
if(buf[strlen(buf)-1] == '\n'){
buf[strlen(buf)-1] = 0;
}
while(*p != 0){
if(*p == ','){
*p = 0;
field[j++] = p+1;
}
p++;
}
ここの流れ(挙動?)がよく分からないのですがどういう感じでよみこんでいってるんでしょうか?
0037前852
2007/06/24(日) 16:01:01大小の判別っぽいところを逆にして降順ソートにしました。
0038デフォルトの名無しさん
2007/06/24(日) 16:06:140039前852
2007/06/24(日) 16:08:36うっせーよ、カス
0041前852
2007/06/24(日) 16:35:510042デフォルトの名無しさん
2007/06/24(日) 16:42:36データ数が多いせいかSystem.StackOverflowException'のハンドルされていない例外
となってしまいます。 解決方法を教えてください。 お願いします。
/*畳み込み和を求めるプログラム*/
#include <stdio.h>
#define FMAX 1000000 /*関数f(τ)のデータ数 「100万個」 */
#define GMAX 1000000
main()
{
int f[FMAX]; /*関数f(τ)*/
int g[GMAX]; /*関数g(τ)*/
int sum[FMAX+GMAX-1] = {0}; /*畳み込みの結果を入れる変数*/
int i,t;
/*関数f,gの初期値の代入(全て1)*/
for (i=0;i<FMAX;i++ )
f[i]=1;
for (i=0;i<GMAX;i++ )
g[i]=1;
/*畳み込み和の計算*/
for (t=0; t< FMAX+GMAX-1; t++){
for( i=0 ; i<GMAX; i++){
if ( t-i >= 0 && t-i < FMAX)
sum[t] += f[t-i]*g[i];
}
}
/*計算結果の表示*/
for (t=0 ; t<FMAX+GMAX-1; t++)
printf("%d,",sum[t]);
}
0043デフォルトの名無しさん
2007/06/24(日) 16:46:33一気にやろうとしないで小分けにすれば?
0044デフォルトの名無しさん
2007/06/24(日) 16:46:550045ぴっころ
2007/06/24(日) 16:48:52今はC言語で0をある数で割るとどうなるのかが分かりません。
ある数を0で割るとエラーになる事は調べて分かったのですが。
0046デフォルトの名無しさん
2007/06/24(日) 16:50:57いや、0だと思うんだが・・・
0047デフォルトの名無しさん
2007/06/24(日) 16:52:050048デフォルトの名無しさん
2007/06/24(日) 16:54:170049デフォルトの名無しさん
2007/06/24(日) 17:00:21グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ
頭で考えたり、誰かに聞くよりより、実際にやってみた方が身に付く
少数点に','使う奴がいたり、0をある数字で割るとどうなりますかと
聞く奴がいたり、この国の教育はどうなってるんだよ。
0050デフォルトの名無しさん
2007/06/24(日) 17:04:210051ぴっころ
2007/06/24(日) 17:05:24どんなコードを書けば、y = x / 0; のyの値を確認できますか?
エラーで終わってしまうんです。すみませんが教えてくださいお願いします。
0052デフォルトの名無しさん
2007/06/24(日) 17:08:12アルゴリズムはmazeをベースで。
書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか?
アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。
サンプルなどがあればと思って質問させていただきました。
誘導していただければ幸いです。
0053デフォルトの名無しさん
2007/06/24(日) 17:09:53その処理は未定義。どうしても確認したければ
int x = 3;
int y;
x -= 3;
y = 3 / x;
printf( "%d", y );
ちなみに、VC++6.0では実行時エラー。
0054デフォルトの名無しさん
2007/06/24(日) 17:12:57スレ違い
0055ぴっころ
2007/06/24(日) 17:14:14次に来た時にはもう少しマシな質問をしたいと思いますので、よろしく
お願いします。
ありがとうございました。
0056ぴっころ
2007/06/24(日) 17:19:42確認有難うございます。やっぱりエラーでますか
>>49 の
>グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ
から、確認する方法がある(少なくとも>>49サンは知ってる)と思ったのですが..
0057デフォルトの名無しさん
2007/06/24(日) 17:26:340058984
2007/06/24(日) 17:28:17fgetsはファイルから1行ずつ読み込む。読めなくなったらNULLを返す。
if...でしていることは、行末の改行コードを取り除く事。
内側のwhileでは、行の先頭から','を見つけ、文字列の分割をしている。
処理を終わると、bufの中はNULLで区切られた複数の文字列となり、
ポインタ配列には各文字列の先頭が格納される。
0059デフォルトの名無しさん
2007/06/24(日) 17:28:34エラーが出るって事で確認した事にはならんのか?
006042
2007/06/24(日) 17:33:36教えていただいたように
static int sum[FMAX+GMAX-1] ;
としてみたら、動作しました。(よく分かってませんがw)
ありがとうございましたー
0061デフォルトの名無しさん
2007/06/24(日) 17:36:370除算時の動作は未定義。よって、どんな動作をしても規格上問題ない。
プログラムがランタイムエラーになっても、演算結果が0になっても、そこで無限ループに陥ってもOK。
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
宿題スレよりこっちのほうがいいと思う。
C言語なら俺に聞け(入門篇) Part 14
http://pc11.2ch.net/test/read.cgi/tech/1181735298/
くだすれC言語(初心者用) Part.2
http://pc11.2ch.net/test/read.cgi/tech/1172099763/
0062前852
2007/06/24(日) 17:38:03ということは、fgetsのところで処理をすれば、
1行がどれくらいの文字数あるかとかも判別できると言うことですか?
0063ぴっころ
2007/06/24(日) 17:41:08実際にやってみろと言われそうですが、コンパイラのダウンロードの仕方
とかが良く分からないもので
0064デフォルトの名無しさん
2007/06/24(日) 17:42:020065984
2007/06/24(日) 17:42:47そういう処理を加えれば出来るでしょうが。
文字数が想定以上に長いときの事も考慮する必要がありますね。
0066デフォルトの名無しさん
2007/06/24(日) 17:43:41コンパイラのダウンロードがわからないならまずはそこから試したほうがいい。
ネットでちょっと検索すれば導入をわかりやすく解説しているサイトなんて山ほどある。
手コーディングが悪いとは言わんが、時代にあってないと思う。
あ、あと質問の答えはそのとおり。-600って表示される。
けどココは宿題スレだからすれ違い。
0067ぴっころ
2007/06/24(日) 17:43:58エラーだよっていうのは >>45で聞く前から確認済みです。
>>45の調べた=>自分でコードを書いて調べてみたということです。
それを踏まえてココで聞いたのでが..そしたら>>49のレスです
0068デフォルトの名無しさん
2007/06/24(日) 17:50:260069デフォルトの名無しさん
2007/06/24(日) 17:51:06C言語については、こっちで聞け!
http://pc11.2ch.net/test/read.cgi/tech/1181735298/l50
0070デフォルトの名無しさん
2007/06/24(日) 17:52:29ごめん、そういうつもりで手コーディングって言ったんじゃないw
紙とペンでコーディング、デバッグとかをするって意味で使った。
わかりづらい上に時代遅れでスマソ
0071デフォルトの名無しさん
2007/06/24(日) 17:53:220072ぴっころ
2007/06/24(日) 17:55:30紹介して貰ったスレに移ります。
応えてくれた方々ありがとうございました。
失礼します。
0073デフォルトの名無しさん
2007/06/24(日) 17:58:010074デフォルトの名無しさん
2007/06/24(日) 18:10:570075デフォルトの名無しさん
2007/06/24(日) 18:14:230076デフォルトの名無しさん
2007/06/24(日) 18:32:290077デフォルトの名無しさん
2007/06/24(日) 18:38:28多少の暗算も必要になったりはするけどね。
0078デフォルトの名無しさん
2007/06/24(日) 18:41:52表示が超手抜きだが(配列をそのままベタで表示するだけ)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4370.txt
0079デフォルトの名無しさん
2007/06/24(日) 18:56:25[2] 問題文:次の計算を行うプログラムを作成せよ。
C=B/X
Bは三行三列の行列
B 5 -2 2
2 3 1
1 2 2
X=3
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 2007年6月24日pm:11:00
です。よろしくおねがいします。
0080デフォルトの名無しさん
2007/06/24(日) 19:02:56一応動作し、正解の数もランダムで取得できるようにはなっていますが
ここはこうしたらよい、とかあったらありがたいな、と思い
カキコしてみました。不具合、というか汚い書き方だとは思いますがヨロシクお願いします。
長いので次のレスで書きます
0081デフォルトの名無しさん
2007/06/24(日) 19:10:240082デフォルトの名無しさん
2007/06/24(日) 19:10:35ロダにUp汁
0083デフォルトの名無しさん
2007/06/24(日) 19:20:44次のレスまだ〜〜〜?もしかして、次の スレ ってオチ?w
0084依頼者
2007/06/24(日) 19:31:12[2] 問題文(含コード&リンク):
変数xのyビット目の値を返す関数int bit_test(int x,int y)の作成。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio.net
[3.3] 言語:C++
[4] 期限: 07年6月25日まで
[5] その他の制限:特になし
演算子の問題ですがまったくわかりません。どなたかお願いします。
0085デフォルトの名無しさん
2007/06/24(日) 19:34:22>>84
int bit_clear(int x,int y){return x&~(1<<y);}
int bit_test(int x,int y){return (x&(1<<y))>>y;}
008642
2007/06/24(日) 19:46:42配列宣言の頭にstaticをつける意味が分からなかったので、教えていただきたいです。
そもそも、なんでエラーになってるのかも分からない始末ですorz
少し調べたんですが、malloc というのを使えば領域確保?できるんでしょうか?
0087デフォルトの名無しさん
2007/06/24(日) 19:49:45[2] 問題文(含コード&リンク): 電卓計算のための、数式変換プログラムを作成せよ。
逆ポーランド法へと変換し、それを要素ごと配列へと格納せよ。
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6.25
[5] その他の制限:
最終的に、配列に文字型で式が格納されていること。
演算子の判別にはswitchを用いて、関数を作成する事。
switchの部分がわからんのだが、多分+なら1、-なら2と返す関数を作れって事だとおも。
最初の数式はargvは使わず、プロンプトメッセージの後にfgetsで読み込んでます。
0088デフォルトの名無しさん
2007/06/24(日) 20:08:35#include <stdio.h>
int main(void)
{
int i,j,X=3,c[3][3]={0};
int b[3][3]={{5,-2,2},
{2, 3,1},
{1, 2,2}};
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j]=b[i][j];
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%3d/%d",c[i][j],X);
}
printf("\n");
}
return 0;
}
私も初心者なんですが、書いてみました。
問題の意図にそくして無いかも。
それに配列cは用意する必要は無い気がするんだけどね…。
0089デフォルトの名無しさん
2007/06/24(日) 20:18:49[2] 問題文(含コード&リンク):
/*(1)date.txtというファイルを用意し、次のプログラムを実行せよ。
(2)このプログラムを書き換え、ファイル名をコマンドラインから指定出来るようにせよ。*/
#include<stdio.h>
#include<stdlib.h>
int main(void){
char c;
char filename[] = "date.txt";//ファイル名
FILE *fp; //ファイルポインタ
//ファイル「読み込み」で開く
if ((fp == fopen(filename "r")) == NULL){
printf("File dose not exist. \n");
exit(1);
}
//ここからファイルを読み込んで処理
//例 一文字入力し表示
wile((c=getc(fp))!=EOF){
printf("%d\n" , c);
}
//開いたファイルを閉じる
fclose(fp);
}
[EOF]
↑
全くと言って分かりません。完全にお手上げです。
少々の解説も付加してくださると助かります。
よろしくお願いします。
0090デフォルトの名無しさん
2007/06/24(日) 20:20:25switchの部分は↓的なことだと思う。
switch( ope ) {
case '+':
iAns += iNum;
break;
case '-':
iAns -= iNum;
break;
(以下略)
009189
2007/06/24(日) 20:20:27[3] 環境
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限: 07年6月26日まで
[5] その他の制限:ポインタを少々習った程度です。
0092デフォルトの名無しさん
2007/06/24(日) 20:20:29前スレの回答ではお気に召さなかったということかな?
それっぽく直したよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4373.txt
0093デフォルトの名無しさん
2007/06/24(日) 20:25:42配列は領域を連続で確保できなければいけない。
mallocを使ったところで、確保できる保証は無い。
staticをつけた場合は、確保するために使用する領域が異なるため上手く行っているだけ。
(staticウンヌン部分について自信なし。詳しい人補足plz)
0094デフォルトの名無しさん
2007/06/24(日) 20:28:17取り敢えず間違ってはいないよ。
0095デフォルトの名無しさん
2007/06/24(日) 20:29:14int main(int argc, char *argv[]) {
char c;
FILE *fp;
if(argc<2) {
printf("ファイル名の指定がねぇ〜ぞゴルァ!\n");
return 1;
}
if((fp=fopen(argv[1],"r"))==NULL){
0096デフォルトの名無しさん
2007/06/24(日) 20:52:01・・・?前スレ?重複質問だったのか?
とりあえず見てみた。マジ有難い。
提出用に少し変更してみて、不明な所があれば聞くかも知れないが、大丈夫かな。
0097デフォルトの名無しさん
2007/06/24(日) 20:52:16[2] 問題文(含コード&リンク):
以下のコマンドを実行可能な名簿管理システムを作成せよ。
1. メンバの追加
2. メンバの削除
3. メンバリストを名前順(アルファベット昇順)で表示
4. メンバリストのファイル出力
5. 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込
メンバ情報としては、最低限、名前と学生番号を持つこと。システムの拡張は自由に行ってよい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:無期限
[5] その他の制限:構造体、ポインタがつかえるとよい
どうかよろしくおねがいします
009989
2007/06/24(日) 20:54:06レスどうもです。
え〜と、main関数内の変更とファイルポインタの下にif(argc<2) { を
printfの下にリターン文を、書けって事でいいんですか?
また、if((fp=fopen(argv[1],"r"))==NULL){ は
return1
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL){
のようにすればいいのでしょうか?
0100 ◆sJh8mwqDUo
2007/06/24(日) 20:58:03[2] 問題文:
1. 0からN-1の間の擬似乱数整数を返す関数(myrandと名前をつける)を作成しなさい。
2. myrandでm×N個の擬似乱数を発生させて、出現しなかった整数の個数を、N個発生させる毎に求めなさい。
ただし、Nは1000以上に#defineし、mは実行時にキー入力するものとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 6月27日夜
[5] その他の制限:
main関数にすべての処理を書くこともできるが、そうしないで関数に分割すること。
乱数発生関数の初期化を忘れないこと。
上記の通りです。どなたかできる方、よろしくお願いします。
0101デフォルトの名無しさん
2007/06/24(日) 21:03:100102デフォルトの名無しさん
2007/06/24(日) 21:11:30関数に分割するって、どこをすればいい?
無理矢理関数にしたほうがいいか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4374.c
0103 ◆sJh8mwqDUo
2007/06/24(日) 21:15:24レスありがとうございます。
用はmyrandの関数をちゃんと作れって事ですかね。
実行結果がよければOKなのでどう解釈してもいいと思います。
0104デフォルトの名無しさん
2007/06/24(日) 21:26:37うん重複だけど、注文のつきかたで、てっきし同じ人かと思った
質問は別にいいけど、あんまりしつこくはしないでね
めんどくさいからw
0105デフォルトの名無しさん
2007/06/24(日) 22:02:39[2] 問題文(含コード&リンク):
右利きの奴が左曲がりであることを検証するプログラムを作成せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々)WinXP
[3.2] コンパイラ名とバージョン: gcc 3.4 or VC5以降
[3.3] 言語: C/C++/どちらでも可
[4] 期限: 6/24中
[5] その他の制限:使用可能なライブラリ stdio.h string.h stdlib.h memory.h
0106デフォルトの名無しさん
2007/06/24(日) 22:12:08[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4376.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: 特にナシ
0107デフォルトの名無しさん
2007/06/24(日) 22:14:34どうでもいいけど
ちょっとエロいな
0108デフォルトの名無しさん
2007/06/24(日) 22:17:13[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4376.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: 特にナシ
よろしくお願いします。
0109デフォルトの名無しさん
2007/06/24(日) 22:21:360110デフォルトの名無しさん
2007/06/24(日) 22:35:17main()
{
FILE *fpin,*fpout;
char c;
int i,j;
int B[3][3];
fpin = fopen("in-1.txt","r");
fpout = fopen("out-1.txt","w");
while(fscanf(fpin,"%c",&c)!=EOF)
if(c == 'B')
{for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{fscanf(fpin, "%d", &B[i][j]);
}}}
for (i=0; i<3; i++) {
for (j=0; j<3; j++)
fprintf(fpout,"%3d",B[i][j]/3);
fprintf(fpout,"\n");
}
fclose(fpin);
fclose(fpout);
return(0);
}
三行三列行列を3で割るというものなんですが、上のソースでやってもint型なんで
少数点以下がでません。float型にしてみても、うまく答えがでません。どこを直せば
いいでしょうか。
B 5 -2 2
2 3 1
1 2 2
です。
011189
2007/06/24(日) 22:44:22>>95氏のアドバイスを参考にやってみましたが、上手く動作しません。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
char c;
char filename[] = "date.txt";//ファイル名
FILE *fp; //ファイルポインタ
if(argc<2) {
//ファイル「読み込み」で開く
if((fp=fopen(argv[1],"r"))==NULL){
printf("File dose not exist. \n");
return 1;
exit(1);
}
}
//ここからファイルを読み込んで処理
//例 一文字入力し表示
wile((c=getc(fp))!=EOF){
printf("%d\n" , c);
}
//開いたファイルを閉じる
fclose(fp);
}
[EOF]
何処が違うのでしょうか?
0112デフォルトの名無しさん
2007/06/24(日) 22:45:51糞の役にも立たない報告しかできないの? 無能なの?
011389
2007/06/24(日) 22:49:58smp3.c(17) : error C3872: '0x3000': この文字を識別子で使用することはできません
smp3.c(17) : error C2065: ' ' : 定義されていない識別子です。
smp3.c(17) : error C2143: 構文エラー : ';' が '}' の前にありません。
smp3.c(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(27) : error C3409: 空の属性ブロックは認められません。
smp3.c(27) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(27) : error C2059: 構文エラー : '-'
smp3.c(27) : error C2059: 構文エラー : ')'
↑そまそ。こんな感じにエラーが出ます。
因みに、この確認はコマンドプロンプトで出したものです。
0114デフォルトの名無しさん
2007/06/24(日) 22:51:34ソースに全角のスペース含まれてないか?
0115デフォルトの名無しさん
2007/06/24(日) 22:54:340116デフォルトの名無しさん
2007/06/24(日) 22:55:12あとはわからん。
そもそもこのプログラム22行しかないのに、なんで27行目のエラーが出てるんだ?
011789
2007/06/24(日) 22:58:15全角のエラー修復できました。
smp3.c(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(27) : error C3409: 空の属性ブロックは認められません。
smp3.c(27) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(27) : error C2059: 構文エラー : '-'
smp3.c(27) : error C2059: 構文エラー : ')'
0118デフォルトの名無しさん
2007/06/24(日) 23:01:09ほれ。
#include <stdio.h>
int main(int argc, char **argv)
{
int c;
if (argc > 1 && !freopen(argv[1], "r", stdin))
return perror(argv[1]), 1;
while ((c = getchar()) != EOF)
printf("%d\n", c);
return 0;
}
011989
2007/06/24(日) 23:01:55レスどうもです。
smp3.c(17) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(23) : error C3409: 空の属性ブロックは認められません。
smp3.c(23) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(23) : error C2059: 構文エラー : '-'
smp3.c(23) : error C2059: 構文エラー : ')'
また一つエラーが減りました。
問題文も含めた場合の最終行が27行目です。
今回は問題文を消しました。
0120デフォルトの名無しさん
2007/06/24(日) 23:03:39[EOF] ← これもソースにタイプしてるのか?
0121デフォルトの名無しさん
2007/06/24(日) 23:06:24#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000
int myrand(void)
{
return (int)(rand() / (RAND_MAX + 1.0) * N);
}
int main(void)
{
int i, j, m;
char check[N] = {0};
srand(time(NULL));
scanf("%d", &m);
for(i=0; i<m; i++) {
int cnt = 0;
for(j=0; j<N; j++) check[myrand()] = 1;
for(j=0; j<N; j++) if(!check[j]) cnt++;
printf("出現しなかった整数の個数:%d\n", cnt);
}
return 0;
}
0122デフォルトの名無しさん
2007/06/24(日) 23:13:23- int B[3][3];
+ double B[3][3];
- fscanf(fpin, "%d", &B[i][j]);
+ fscanf(fpin, "%lf", &B[i][j]);
- fprintf(fpout, "%3d", B[i][j] / 3);
+ fprintf(fpout, "%g", B[i][j]/3);
とりあえずこんなところでどうよ。
0123デフォルトの名無しさん
2007/06/24(日) 23:27:56計算できました!ありがとうございます!
そこでまた質問で申しわけないんですが答えが
1.66667-0.6666670.666667
0.66666710.333333
0.3333330.6666670.666667
のように表示されてしまうんですが、1.66667と1とかの間にスペースを設けたいん
ですが何か手はありませんか?無知ですいません。
0124デフォルトの名無しさん
2007/06/24(日) 23:32:44[2] 問題文(含コード&リンク): 以下のPADとプログラムを作成しなさい≪面白いプログラム≫
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C
[4] 期限: 6/25の9時まで
[5] その他の制限: switch文を習った後の課題です。
他の課題は終わらせましたが、どうしても面白いと思えるものを作ることが出来ませんorz
力を貸してください。お願いします。
0125デフォルトの名無しさん
2007/06/24(日) 23:50:54- fprintf(fpout, "%g", B[i][j]/3);
+ fprintf(fpout, "%g ", B[i][j]/3);
これでおk
0126デフォルトの名無しさん
2007/06/25(月) 00:04:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4377.txt
0127デフォルトの名無しさん
2007/06/25(月) 00:30:14[2] 問題文リンク:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4379.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C言語のみ
[4] 期限: 2007年06月26日AM01:00まで
[5] その他の制限: 特にないです。
自力ではどうしてもできませんでした。
どうかよろしくお願いします。
0128デフォルトの名無しさん
2007/06/25(月) 00:30:57[1] 授業単元: プログラミング言語
[2] 問題文:
数値の列を入力し,それをリスト構造にデータを
格納せよ.その際,数値が大きさの順に並ぶよう
にせよ.
- 入力する数値の数を限定してもよい
- たとえば5個
• リストの内容を先頭から出力せよ.
- 結果として入力された数値の列が,大きさ順
に並び替えられて表示されることになる.
• リスト構成する要素(セル)はmalloc関数でヒー
プ領域から確保するものとする.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio2005
[3.3] 言語:C++
[4] 期限:6月28日まで
[5] その他の制限:ポインタの練習です。一応、こんな感じらしいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4380.txt
どなたかご教授お願いします
0129デフォルトの名無しさん
2007/06/25(月) 00:46:17| ∧ ∧
|/ ヽ ./ .∧
| `、 / ∧
|  ̄ ̄ ̄ ヽ
| ̄ ̄月曜日 ̄ ̄ ̄ ̄)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\
|ヽ-=・=-′ ヽ-=・=- /
|:: \___/ / やぁ・・・・
|::::::: \/ /
0130デフォルトの名無しさん
2007/06/25(月) 00:52:10寝る。
0131デフォルトの名無しさん
2007/06/25(月) 00:57:49適当。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4381.txt
0132デフォルトの名無しさん
2007/06/25(月) 01:33:09できました!ありがとうございました!
0133デフォルトの名無しさん
2007/06/25(月) 02:53:580134デフォルトの名無しさん
2007/06/25(月) 03:06:59[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4262.txt(プログラム1)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4381.txt(プログラム2)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4383.txt(プログラム3)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4384.txt(プログラム4)
上記1〜4のプログラムを下記のように修正します。
クラス(設計図)部分を概要部分(ヘッダファイル)と実装部分(ソースファイルに分け)
そしてメイン部分も分け、4つのプログラムを新しく作り直しなさい。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします
0135デフォルトの名無しさん
2007/06/25(月) 03:17:42単にソースをclass.cpp class.h main.cppとかってファイル作って
にコピペしまくるだけで終了しない?
0136デフォルトの名無しさん
2007/06/25(月) 03:51:42これは難問だ
何をもって面白いとするかがわからんことには作りようがない
技術的には>>124は全然問題なさそうだから、こんなのはどうだ?
怪しいswitch文だが、ちゃんとコンパイルは通る
実行結果が予想できるかい?
プログラムの挙動的には面白いと思うんだが
int main(){
switch(1){
while(1){
case 0:
printf("0");
break;
default :
printf("default");
case 1:
printf("1");
}
}
return 0;
}
良い子はマネしないようにな
0137デフォルトの名無しさん
2007/06/25(月) 04:06:1601default って出力されそうだけど、実行結果は case 1: のところで無限ループになる
int main(){
int i = 0;
switch(i){
while(1){
case 1:
printf("1");
i++;
continue;
case 0:
printf("0");
i++;
continue;
default :
printf("default");
break;
}
}
return 0;
}
0138デフォルトの名無しさん
2007/06/25(月) 04:10:19[2] 問題文(含コード&リンク):
n乗の数を求める関数を、作成しなさい。
◎以下を参考の事
・n乗値を求める関数
n乗値
数字iのn乗値を返す関数
関数定義 double myPow(double i, int n)
例1:i=1.2,n=3の場合,1.728になる
例2:i=1.2,n=-3の場合,0.5787[037]になる
例3:i=1.2,n=0の場合,1.0になる
正,0,負の3つの場合があることに注意
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年6月25日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
0139デフォルトの名無しさん
2007/06/25(月) 04:27:21コンパイラ何?
もしかしてBCCじゃね?w
0140デフォルトの名無しさん
2007/06/25(月) 04:35:55てっきり11111…と怪しい動作するもんだと思った
BCCを疑ってごめんなさい。
0141デフォルトの名無しさん
2007/06/25(月) 05:37:21こんなコードは出来ればごめん被りたいが、
「switchはラベルに飛ぶだけ」てのが良く分かる例かもね。
0142デフォルトの名無しさん
2007/06/25(月) 05:43:33[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4376.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: プログラムをリザイレクションしてdatファイルにしてGNUPLOTでグラフを表示させる。
グラフ http://vista.jeez.jp/img/vi8271774448.jpg
よろしくお願いします。
0143デフォルトの名無しさん
2007/06/25(月) 07:23:55double myPow(double i, int n)
{
double a=1.0;
if(n<0){
n=n*-1;
i=1/i;
}
if(n != 0){
while(n-->0) a*=i;
}
return a;
}
0144デフォルトの名無しさん
2007/06/25(月) 09:24:55[2] 問題文(含コード&リンク): 簡単な絵を書いて画面に出力しろ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 無し
[5] その他の制限: printf();などの出力関数のみを使った場合はNGとする
0145124
2007/06/25(月) 10:02:362つもレスしていただいて、本当にありがとうございます。
早速試してみます。
教授の面白いというのはどうもお笑い系のようです。
関西出身のようで、講義に使うプログラムもがんばって笑いを誘おうとしていますので。
0146デフォルトの名無しさん
2007/06/25(月) 10:34:26nS
hist[i][j]
printf("%f %f\n", x, y), hist[px][py]++;
0147デフォルトの名無しさん
2007/06/25(月) 10:56:51[2] 問題文(含コード&リンク): テキストファイルを読み込み、A〜Zまでの文字がそれぞれ何個現れたかを数えろ。大文字と小文字は区別しないもとする。
[3] 環境
[3.1] OS: (Windows/Linux/等々) WinXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ Compiler 5.5
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限:
自分で書いたコード
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4386.txt
上記のコードの中の
/* ファイルに含まれているアルファベットの個数をカウント */
この部分がうまく働きません
何がいけないんでしょうか?
0148デフォルトの名無しさん
2007/06/25(月) 11:01:39なんだこれ。
--
if('a' <= ch && ch >= 'z')
--
やりたいことは、if (ch >= 'a' && ch <= 'z')かif ('a' <= ch && ch <= 'z')じゃないのか?
0149デフォルトの名無しさん
2007/06/25(月) 11:03:11else if('A' <= ch && ch >= 'Z')
if('a' <= ch && ch <= 'z')
else if('A' <= ch && ch <= 'Z')
chと文字の位置を変えるから(略
0150デフォルトの名無しさん
2007/06/25(月) 11:04:41ああああああああああ、、、
アホみたいなミスしてました・・・
恥ずかしい
0151デフォルトの名無しさん
2007/06/25(月) 11:07:42[2] 問題文:
1、英大文字は小文字に英小文字は大文字に変えて出力するプログラムを作りなさい
2、テキストの中に現れる0から9までの数字の頻度を調べるプログラムを作りなさい
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: ([2007年06月25日14:20まで
[5] その他の制限:特にありません
時間があまりありませんが、できるところまででも
よろしくお願いします
0152デフォルトの名無しさん
2007/06/25(月) 11:15:411
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
int main(void)
{
char ch;
ch = getche();
if('a' <= ch && ch <= 'z') printf(" -> %c\n",toupper(ch));
else if('A' <= ch && ch <= 'Z') printf(" -> %c\n",tolower(ch));
return 0;
}
2
>>147のアルファベットのとこを数字に変える
0153デフォルトの名無しさん
2007/06/25(月) 11:21:140154デフォルトの名無しさん
2007/06/25(月) 11:34:140155デフォルトの名無しさん
2007/06/25(月) 11:39:39存在を忘れてた
0156デフォルトの名無しさん
2007/06/25(月) 11:41:201.
#include <stdio.h>
#include <ctype.h>
int main(void){
int ch;
while((ch = getchar()) != EOF){
if(islower(ch)) putchar(toupper(ch));
else if(isupper(ch)) putchar(tolower(ch));
else putchar(ch);
}
return 0;
}
2.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
int i, count[10] = {0};
char buf[2] = {0}, *p = buf;
while((*p = getchar()) != EOF)
if(isdigit(*p))
count[atoi(buf)]++;
for(i = 0; i < 10; i++) printf("%d : %d\n", i, count[i]);
return 0;
}
0157デフォルトの名無しさん
2007/06/25(月) 12:26:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4389.txt
悪い。元のがちょっとアレだったんでコマンドライン引数から入力拾うように勝手に仕様変えちった
要点を掴んでほしい
0158デフォルトの名無しさん
2007/06/25(月) 12:47:340159デフォルトの名無しさん
2007/06/25(月) 16:15:49[2] 問題文:
成績を管理するプログラムを作成する.一人一人の学生には,学籍番号(整数)がつけられているの
で,学籍番号と成績(実数)の組みで管理することとする.本問題で作成するプログラムは,4人の学生について,
英語と数学の成績を入力すると,英語と数学の合計点で最高点を取った学生を出力するものとする.
成績を管理する構造体の名前をstudent_t(この名前はtypedefで定義した名前を指す)とし,構造体のメンバを,
学籍番号はint型とし,名前をidとする
英語の成績はdouble型とし,名前をengとする
数学の成績はdouble型とし,名前をmathとする
とする.また,以下の関数を作成し,それを利用すること.
n人のデータを入力する関数:void InputData(student_t s[], int n)
第一引数は学生の配列
第二引数は学生の人数
関数自体は,何人でも扱えるように作成すること
課題実行においては以下の点に注意すること.
プログラム名は「score」とすること.
結果の表示は小数点以下3桁で表示すること.
各教科の得点は,正の数に限定してよい.
最高点が複数人いた場合は,最高点を取った中で最初に入力された人を表示すること.
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
期限はいつでもいいです。よろしくおねがいします。
0160デフォルトの名無しさん
2007/06/25(月) 16:21:04[2] 問題文:
数字の書かれているテキストファイルを読み込んで、その数字に1を加えた数をテキストファイルに出力するプログラムを作成しなさい.
読み込むテキストファイルには1行目に整数が書かれており、2行目以降には何も書かれていないとする.
課題実行においては以下の点に注意すること.
プログラム名は「count」とすること.
読み込むテキストファイル名はcount.txtとする.
出力するテキストファイル名はcount.txtとする.
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
これもわかりません。よろしくおねがいします。
0161デフォルトの名無しさん
2007/06/25(月) 16:23:20#include <stdio.h>
main()
{
FILE *fpin,*fpout;
char c;
int i,j;
int B[3][3];
fpin = fopen("in-1.txt","r");
fpout = fopen("out-1.txt","w");
while(fscanf(fpin,"%c",&c)!=EOF)
if(c == 'B')
{for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{fscanf(fpin, "%d", &B[i][j]);
}}}
for (i=0; i<3; i++) {
for (j=0; j<3; j++)
fprintf(fpout,"%3d",B[i][j]/3);
fprintf(fpout,"\n");
}
fclose(fpin);
fclose(fpout);
return(0);
}
0162デフォルトの名無しさん
2007/06/25(月) 16:26:54#include <iostream>
#define STACK 10
#define QUEUE 10
typedef int stack;
typedef int queue;
static int sfirst = 0, slast = 0, qfirst = 0, qlast = 0, qcount = 0;
int push(stack *s, int i){ return slast == STACK ? -1 : (s[slast++] = i);}
int pop(stack *s){ return slast == sfirst ? -1 : s[--slast];}
int enqueue(queue *q, int i){
if(qlast == qfirst && qcount) return -1;
q[qlast] = i, qcount++;
qlast = (qlast + 1)%QUEUE;
return i;
}
int dequeue(queue *q){
int ret;
if(qlast == qfirst && !qcount) return -1;
ret = q[qfirst], qcount--;
qfirst = (qfirst + 1)%QUEUE;
return ret;
}
int main(){
stack s[STACK];
queue q[QUEUE];
std::cout << "push" << std::endl; for(int i = 0; i < 13; i++) std::cout << push(s, i) << std::endl;
std::cout << "pop" << std::endl; for(int i = 0; i < 13; i++) std::cout << pop(s) << std::endl;
std::cout << "enqueue" << std::endl;for(int i = 0; i < 13; i++) std::cout << enqueue(q, i) << std::endl;
std::cout << "dequeue" << std::endl;for(int i = 0; i < 13; i++) std::cout << dequeue(q) << std::endl;
return 0;
}
0163デフォルトの名無しさん
2007/06/25(月) 16:29:50自分自身でも理解できるように勉強してみます
0164デフォルトの名無しさん
2007/06/25(月) 16:31:20> [3.3] 言語: C言語のみ
0165デフォルトの名無しさん
2007/06/25(月) 16:32:25#include <stdio.h>
int main(void)
{
int n = 0;
FILE *fp;
if ((fp = fopen("count.txt", "r+")) == NULL)
return 1;
fscanf(fp, "%d", &n);
rewind(fp);
fprintf(fp, "%d\n", ++n);
fclose(fp);
return 0;
}
0166デフォルトの名無しさん
2007/06/25(月) 16:41:16$ cat vitamin.c
#include <stdio.h>
int main(int argc, char **argv)
{
if (argc < 2 || argv[1][0] == 0)
return 0;
putchar(argv[1][0]);
++argv[1];
return main(argc, argv);
}
$ cc vitamin.c
$ ./a.out "簡単な絵"
0167デフォルトの名無しさん
2007/06/25(月) 16:50:21ありがとうございました。
0168デフォルトの名無しさん
2007/06/25(月) 16:54:15#include <stdio.h>
int main(void){
FILE *fp = fopen("count.txt", "r");
size_t len;
int i, flag = 1;
char buf[1023], ret[1024] = {0}, *p;
if(!fp) exit(1);
fgets(buf, sizeof(buf), fp);
if((p = strchr(buf, '\n')) != NULL) *p = '\0';
len = strlen(buf);
for(i = 0; i < len; i++){
if(flag && (buf[len - i - 1] == '9')) ret[len - i] = '0', flag = 1;
else if(flag) ret[len - i] = buf[len - i - 1] + 1, flag = 0;
else ret[len - i] = buf[len - i - 1];
}
if(flag) ret[0] = '1', p = ret;
else p = ret + 1;
if((fp = freopen("count.txt", "w", fp)) == NULL) exit(2);
fputs(p, fp);
fclose(fp);
return 0;
}
0169デフォルトの名無しさん
2007/06/25(月) 17:42:43#include <stdio.h>
typedef struct tag_student_t{
double eng, math;
int id;
}student_t;
void InputData(student_t s[], int n){
int i;
for(i = 0; i < n; i++){
printf("student %d\ninput data (id, eng, math) : ", i + 1);
scanf("%d%lf%lf", &s[i].id, &s[i].eng, &s[i].math);
}
}
int main(void){
student_t s[4];
double max = -1;
int i, i_max = 0;
InputData(s, 4);
for(i = 0; i < 4; i++)
if(max < s[i].eng + s[i].math)
i_max = i, max = s[i].eng + s[i].math;
printf("id : %d eng : %.3f math : %.3f sum : %.3f\n",
s[i_max].id, s[i_max].eng, s[i_max].math, s[i_max].eng + s[i_max].math);
return 0;
}
0170デフォルトの名無しさん
2007/06/25(月) 17:48:10#include <stdio.h>
#define STACK 10
#define QUEUE 10
// <中略>
int main(void){
stack s[STACK];
queue q[QUEUE];
int i;
puts("push");
for(i = 0; i < 13; i++) printf("%d\n", push(s, i));
puts("pop");
for(i = 0; i < 13; i++) printf("%d\n", pop(s));
puts("enqueue");
for(i = 0; i < 13; i++) printf("%d\n", enqueue(q, i));
puts("dequeue");
for(i = 0; i < 13; i++) printf("%d\n", dequeue(q));
return 0;
}
0171デフォルトの名無しさん
2007/06/25(月) 17:52:09すいません。C言語までしか習っていないのでC言語のみでお願いします。
0172デフォルトの名無しさん
2007/06/25(月) 17:53:48できればでいいのですが問1と問2にわけて頂けないでしょうか
0173デフォルトの名無しさん
2007/06/25(月) 18:15:22http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4390.txt
0174デフォルトの名無しさん
2007/06/25(月) 18:29:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4391.txt
0175デフォルトの名無しさん
2007/06/25(月) 19:18:34[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4394.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語:C
[4] 期限:2007/6/26 10:30
[5] その他の制限:入力はfopen系関数を使用したものではなく、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行うようにしなければならない。
どんなに考えてもわかりません。わからないまま前日になってしまいました…
よろしくお願いします。
0176デフォルトの名無しさん
2007/06/25(月) 19:24:030177デフォルトの名無しさん
2007/06/25(月) 19:59:11[2] 問題文:
(2)次に引数の順番を入れ替えて逆順に表示するプログラムに直せ。
ソースプログラムを書き込んで提出せよ。*/
main(int argc , char *argv[]){
int i;
printf("%d argument(s).\n" , argc -1);
for(i=argc-1; i>=0; i--){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
}
引数の順番を入れ替えると(char *argv[] , int argc)入力した文字は反映されず、argument(s).の前に
意味不明の数字が表示されて動作を終了してしまいます。
C:\c>smp2 a b c
3616655 argument(s).
ちなみに、引数を入れ替えなければ、逆に表示されます。
回答、よろしくお願いします。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語:C
[4] 期限:2007/6/26
[5] その他の制限:
0178デフォルトの名無しさん
2007/06/25(月) 20:02:43ありがとうございました!
いろいろ注文多くすいませんでした。
0179デフォルトの名無しさん
2007/06/25(月) 20:05:55argumentでスレを検索汁
0180デフォルトの名無しさん
2007/06/25(月) 20:07:420181デフォルトの名無しさん
2007/06/25(月) 20:11:23> 引数の順番を入れ替えると(char *argv[] , int argc)
っつか吹いたっw
0182177
2007/06/25(月) 20:16:15検索しましたが、何の参考にもなりませんでした。
まだ習い始めたばかりでよく分からないんです・・・
>>181
なにか根本的に間違っていたりしますか?
いや、冗談抜きでこの授業分からないんです・・・
0183デフォルトの名無しさん
2007/06/25(月) 20:18:02言葉の意味を勘違いしているだけでしょ。main関数の中の引数の変数の定義を逆にしてどーすんだと。
仕様からして不適切だし、もしそれで答えろっていうなら、そんな講師は全世界レベルで非難を浴びますw
0184デフォルトの名無しさん
2007/06/25(月) 20:22:35[2] 問題文:
3つのベクトルA=(a1,a2,a3),B=(b1,b2,b3),c=(c1,c2,c3)がある。次のベクトル三重積に関する等式を示すプログラムを条件にしたがって作成せよ。
(A×B)×C=-(B,C)A+(A,C)B ここにA×Bは外積(A,B)は内積を示す。
データの入出力はファイルを使用
ファイル入出力に関してもサブルーチン化
ベクトルはそれぞれ一次元配列化
外積、内積ともにサブルーチンを作成し、外積は左辺、内積は右辺を計算できるようにすること
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:g77 fortran
[3.3] 言語:fortran
[4] 期限:2007/6/26
ぜひともおねがいします><
0185177
2007/06/25(月) 20:24:28レスどうもです。なるほどorz
>次に引数の順番を入れ替えて
↑では、これは何をしろと言っているのでしょうか・・・。
う〜ん、ますます分からなくなってきたorz
0186デフォルトの名無しさん
2007/06/25(月) 20:24:50( ^ω^)・・・
0187デフォルトの名無しさん
2007/06/25(月) 20:26:37問題文を全て一字一句違わず書けばいいよNE☆
0188デフォルトの名無しさん
2007/06/25(月) 20:28:15#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p;
long l;
char buff[128];
FILE *fop = fopen("count.txt","r");
fgets(buff,sizeof(buff),fop);
l =strtol(buff,&p,10);
fclose(fop);
fop =fopen("count.txt","a+");
fprintf(fop,"\n%d",l+1);
return 0;
}
0189177
2007/06/25(月) 20:29:13/*(1)次のプログラムを実行し結果を確認せよ。
(2)次に引数の順番を入れ替えて逆順に表示するプログラムに直せ。
ソースプログラムを書き込んで提出せよ。*/
問題文はコレで全てですorz
0190デフォルトの名無しさん
2007/06/25(月) 20:33:31だから、受け継いだ値を逆から表示しろって問題なんでしょ?そういうこと。
括弧の中を逆にして受け継げって問題だったら全世界レベルで爆笑もんだよw
スイスのジュネーブにあるISO団体が、んだごるぁ?てめぇんとこは俺らが決めた標準はおろか
C言語の基本も理解していないおかしな授業をしてんのかと?国際的な裁判にかけられちゃいますよ?
0191デフォルトの名無しさん
2007/06/25(月) 20:35:29まぁ、もし 入れ替え っていうなら、例えば引数を3つ受け継いだのなら
1番目と3番目を入れ替えるコードを書けと?そして argv[1] から順に表示しろと?
そういう問題ならそうすべきだが、そんなことせずに単純に逆から表示すりゃ良いでそ。
0192177
2007/06/25(月) 20:41:53いくらなんでも無さそうですね。
有難うございました。
0193デフォルトの名無しさん
2007/06/25(月) 20:41:56mainに関して、いろいろ実験してみるといい。
例えば、こんなのも駄目だ。
#include <stdio.h>
int main(char *argv[])
{
printf("%s\n", argv[0]);
return 0;
}
0194デフォルトの名無しさん
2007/06/25(月) 20:42:00ほれよ。無駄な上に君の環境で動くかどうか分からないソース
(多分大丈夫だろうけど)
#include <stdio.h>
int main(int argc, char **argv)
{
int i, j;
char *tmp;
printf("%d argument(s).\n" , argc -1);
printf("argv[0] : \"%s\"\n", argv[0]);
for (i = 1, j = argc - 1; i < j; ++i, --j) {
tmp = argv[i];
argv[i] = argv[j];
argv[j] = tmp;
}
for (i = 1; i < argc; ++i)
printf("argv[%d] : \"%s\"\n", i, argv[i]);
return 0;
}
0195デフォルトの名無しさん
2007/06/25(月) 20:49:58まったく、わからんよ。見かけによらず重い
0196デフォルトの名無しさん
2007/06/25(月) 20:55:07日本語でおk
0197デフォルトの名無しさん
2007/06/25(月) 20:59:13#include <stdlib.h>
#include <time.h>
#define swap(type, x, y) do{ type temp = x; x = y; y = temp;}while(0)
int main(void)
{
int x[100], i, j, k;
srand((unsigned int)time(NULL));
for(i = 0; i < 100; i++) x[i] = i + 1;
for(i = 0; i < 1000; i++){
j = (int)(((double)rand()/(RAND_MAX + 1))*100);
k = (int)(((double)rand()/(RAND_MAX + 1))*100);
swap(int , x[j], x[k]);
}
for(i = 0; i < 100; i++) printf("%3d ", x[i]);
return 0;
}
0198デフォルトの名無しさん
2007/06/25(月) 21:04:26#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int a[100],i,tmp,pos;
int a_sz=sizeof(a)/sizeof(a[0]);
srand((unsigned)time(NULL));
for(i=0; i<a_sz; i++)
a[i]=i+1;
for(i=0; i<a_sz; i++) {
pos=rand()%a_sz;
tmp=a[pos];
a[pos]=a[i];
a[i]=tmp;
}
for(i=0; i<a_sz; i++)
printf("%d ",a[i]);
return 0;
}
0199デフォルトの名無しさん
2007/06/25(月) 21:07:18[2] 問題文(含コード&リンク):
・ポインタを説明せよ。(Wikipedia,Google等参照不可。また書籍の参照も不可。自分の文章で答えること)
・構造体を説明せよ。(同上)
[3] 環境
[3.1] OS:NULL
[3.2] コンパイラ名とバージョン:NULL
[3.3] 言語:C
[4] 期限:2007年06月25日(本日)
[5] その他の制限:同じ文章を見つけた場合は成績評価「不可」とする。
よろしくお願いします。
0200デフォルトの名無しさん
2007/06/25(月) 21:08:140201デフォルトの名無しさん
2007/06/25(月) 21:09:29同じ学校の学生が見てたら終わりじゃん
0202デフォルトの名無しさん
2007/06/25(月) 21:09:52http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E4%BD%93
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29
何も丸々言葉を写さなきゃおk。自分が理解して自分の言葉で書けばええやん。
0203デフォルトの名無しさん
2007/06/25(月) 21:10:220204デフォルトの名無しさん
2007/06/25(月) 21:10:59Oナニー Siてたら NULLヌルしちゃった、てへっ ♥
0205デフォルトの名無しさん
2007/06/25(月) 21:11:530206デフォルトの名無しさん
2007/06/25(月) 21:12:03先生がこのスレを見ている可能性は考えなかったのか
0208デフォルトの名無しさん
2007/06/25(月) 21:19:10[2] 問題文(含コード&リンク):
Mission 1 で作成した「Projection1.java 」は「0 列目」と,
「引数で指定した列」をCSV 形式で出力しましたが, 今度は
「0 列目」と「引数で指定した列以外の全ての列」をCSV 形式で
取り出すプログラムに変更せよ.
それを「Quiz6.java 」というファイルとして作成し,
いつもの要領で,WebCT に添付ファイルとして提出.
「CSV.java 」または「Projection1.java 」をコピーして作
ると良い. クラス名は「Quiz6 」としてください
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Java?
[3.3] 言語: C
[4] 期限: 今日中に提出
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0209デフォルトの名無しさん
2007/06/25(月) 21:20:17public static void main(String[] args){
String[][] seiseki = {
{"名前"," 国語"," 算数"," 英語"},
{"あべ","45","56","98"},
{"いいだ","70","45","30"},
{"いしかわ","32","70","75"},
{"おがわ","90","10","42"},
{"かご","85","32","80"},
{"かめい","75","92","40"},
{"こんの","30","30","100"},
{"たかはし","85","20","50"},
{"たなか","80","38","68"},
{"つじ","20","60","75"},
{"にいがき","82","42","75"},
{"ふじもと","18","70","78"},
{"みちしげ","60","46","88"},
{"やぐち","28","99","82"},
{"よしざわ","76","45","80"}
};
int col = Integer.parseInt( args[0] );
quiz6(seiseki,col);
}
0210デフォルトの名無しさん
2007/06/25(月) 21:21:26int i,j;
for(i=0; i<table.length; i++){
System.out.println(table[i][0]+","+table[i][col]);
}
}
public static void printTable(String[][] table){
int i,j;
for(i=0; i<table.length; i++){
System.out.print(table[i][0]);
for(j=1; j < table[i].length; j++){
if( ★指定した列でなければ ){
System.out.print(★);
}
}
System.out.print( "\n" );
}
}
}
★の箇所がわかりません。お願いします。
0211デフォルトの名無しさん
2007/06/25(月) 21:21:26スレ違い
0212デフォルトの名無しさん
2007/06/25(月) 21:21:35スレタイ100回読み直せ
ついでに>>1も
0214デフォルトの名無しさん
2007/06/25(月) 21:29:580215デフォルトの名無しさん
2007/06/25(月) 21:31:07> [3.2] コンパイラ名とバージョン: Java?
> [3.3] 言語: C
だものな
0216デフォルトの名無しさん
2007/06/25(月) 21:32:59[2] 問題文(含コード&リンク):
複素数型を扱うライブラリcomplex.cを後述するヘッダ
ファイル complex.hに基づいて作ってください。
さらにmain.cというファイルで適当な計算のサンプル
を作り#include “complex.h”として作成したライブラリ
が適切に動作するか検証してください。
typedef struct complex complex; /* complex 型の宣言 */
struct complex {
double real; /* 実部 */
double imag; /* 虚部 */
};
/* プロトタイプ宣言 */
complex cAdd(complex, complex); /* 複素数の加算 x+y */
complex cMult(complex, complex); /* 複素数の乗算 xy */
complex cDiv(complex, complex); /* 複素数の除算 x/y */
double cAbs(complex); /* 複素数の絶対値 |x| */
complex cSub(complex, complex); /* 複素数の減算 x-y */
void printComplex(complex); /* 複素数型データのstdoutへの表示出力 */
[3] 環境
[3.1] OS:WindowsXP
[3.2] bcc32
[3.3] C
[4] 期限:無期限
0217デフォルトの名無しさん
2007/06/25(月) 21:37:100218デフォルトの名無しさん
2007/06/25(月) 22:09:550219デフォルトの名無しさん
2007/06/25(月) 22:12:28加算と乗算と除算と表示。
あとは他の人に任せた。
complex cAdd(complex x, complex y){/* 複素数の加算 x+y */
complex ret; /*戻り値*/
ret.real = x.real + y.real;
ret.imag = x.imag + y.imag;
return(ret);
}
complex cMult(complex x, complex y){ /* 複素数の乗算 xy */
complex ret; /*戻り値*/
ret.real = (x.real * y.real) - (x.imag * y.imag);
ret.imag = (x.real * y.imag) + (x.imag * y.real);
return (ret);
}
complex cDiv(complex x, complex y){/* 複素数の除算 x/y */
complex ret;/*戻り値*/
ret.real = ((x.real * y.real) + (x.imag * y.imag)) / ((y.real)*(y.real) + (y.imag)*(y.imag));
ret.imag = ((x.imag * y.real) - (x.real * y.imag)) / ((y.real)*(y.real) + (y.imag)*(y.imag));
return (ret);
}
void printComplex(complex x){ /* 複素数型データのstdoutへの表示出力 */
printf("実部 = %lf, 虚部 = %lf", x.real, x.imag);
}
0220デフォルトの名無しさん
2007/06/25(月) 22:19:12何ゆえ>135は無視?
0221デフォルトの名無しさん
2007/06/25(月) 22:21:23>>216
math.hは使ってもいいの?
使っていいのなら平方根の計算が楽なんだけど…。
0222デフォルトの名無しさん
2007/06/25(月) 22:25:100223デフォルトの名無しさん
2007/06/25(月) 22:32:24math.hを使っていいのなら、累乗もpow()で表現すればよかったか…。まあいいや、合ってれば。
気に入らない箇所があったら適当に直しておいて。
とりあえず、x(4,2)とy(-2,3)で検証した。
よく分からないけど、これは学部一回生レベル?
double cAbs(complex x){ /* 複素数の絶対値 |x| */
return(sqrt((x.real)*(x.real) + (x.imag)*(x.imag)));
}
complex cSub(complex x, complex y){ /* 複素数の減算 x-y */
complex ret; /*戻り値*/
ret.real = x.real - y.real;
ret.imag = x.imag - y.imag;
return(ret);
}
0224デフォルトの名無しさん
2007/06/25(月) 22:46:01ソース書いてて、「公式のコピーをC言語として写してるだけでちょうどだるくなったところだった」
0225デフォルトの名無しさん
2007/06/25(月) 23:03:32グラフにおける深さ優先探索です。
0226デフォルトの名無しさん
2007/06/26(火) 00:22:48問1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4395.txt
dfs.exe -r のようにして起動すると再帰版
引数なしだとスタック版として動作する
見ればわかると思うが
dfs_recurse()が再帰版の関数
dfs_stack()がスタック版の関数な
超適当に作ったから確認は自分でやってくれ
0227デフォルトの名無しさん
2007/06/26(火) 01:48:12指定されたテキスト(data.txt)から1行ずつデータを取り込んでいき、
1行のデータが300文字以上の時はその行数と共にエラーメッセージを表示し終了。
また行頭に#が付いた行をコメント行として読み飛ばす。
[3] 言語: C
[4] 期限:6.26
よろしくおねがいします
0228デフォルトの名無しさん
2007/06/26(火) 01:57:42data.txt の中身の例を詳しく
0229デフォルトの名無しさん
2007/06/26(火) 02:07:37ありがとうございました!
0230デフォルトの名無しさん
2007/06/26(火) 02:12:06#include<stdio.h>
#include<string.h>
#define N 300
int main()
{
FILE *fp;
int i = 0;
char data[N+1];
fp = fopen("data.txt","r");
while(fgets(data,N+1,fp) != NULL)
{
i++;
if(strlen(data) > N)
{
printf("行数:%d エラーメッセージ\n",i);
break;
}
if(data[0] != '#')
{
;
}
}
return 0;
}
てきとー。質問がてきとーなんだから回答もてきとーでおkだよな?
0231デフォルトの名無しさん
2007/06/26(火) 02:14:28↓
if(strlen(data) >= N)
300より上を300以上に変えたときにミスった
0232デフォルトの名無しさん
2007/06/26(火) 03:55:32[2] 問題文(含コード&リンク):
要素数nの整数型配列からk個の要素を選んで足し合わせ
bを超えない範囲での最大数を求めるプログラムを書け
ただしnは100程度、kは3程度、配列とbの値は適当に設定すること
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: BCC5.5
[3.3] 言語: C
[4] 期限: 7月20日
[5] その他の制限:特にありません
よろしくお願いします
0234デフォルトの名無しさん
2007/06/26(火) 04:07:13> 最大数
何の最大数?合計?範囲を超えないbの要素の個数k?
0236デフォルトの名無しさん
2007/06/26(火) 08:07:25>要素数nの整数型配列からk個の要素を選んで足し合わせ
>bを超えない範囲での最大数を求めるプログラムを書け
>ただしnは100程度、kは3程度、配列とbの値は適当に設定すること
要素数を100として、その配列の中身は何?
どうやって設定するの?rand()で良いの?
>kは95程度の間違いです
>kは自分で適当に設定してください。
せめてお前が設定しろよ
0237デフォルトの名無しさん
2007/06/26(火) 09:59:09[2] 問題文:
テキストファイルを読み込んで、"{"の数と"}"の数を数え、テキストファイルに出力するプログラムを作成しなさい.
課題実行においては以下の点に注意すること.
プログラム名は「chkpair」とすること.
ここで指定するデータ(ファイル),は存在するものとして仮定してよい.
読み込むテキストファイル名はプログラムを実行後にキーボードから指定する.
ファイル名の長さは最大で(マクロ定数)FILENAME_MAX文字までとしてよい.
出力するテキストファイルはchkpair.outとする.すでにchkpair.outがあり書き込み権限がある場合は、出力を上書きすること.
入力ファイルによって結果が異なるので、必ずしも実行例と同じ出力になる必要はない.
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
0238デフォルトの名無しさん
2007/06/26(火) 10:01:19[2] 問題文:
商品の在庫を管理するプログラムを作成する.在庫を扱う場合,在庫の平均単価(実数),
在庫数(整数)を管理する必要がある.本問題で作成するプログラムは,4回商品を入荷した時の平均在
庫単価と在庫総数を出力するものとする.商品入荷の時は,商品の単価と入荷数を順に入力していくものとする.このとき,平均単価と在庫数をひとつの構造体で管理するものとする.
変数を管理する構造体の名前をstock_t(この名前はtypedefで定義した名前を指す)とし,構造体のメンバを,
平均単価はdouble型とし,名前をpriceとする
在庫数はint型とし,名前をquantityとする
とする.
課題実行においては以下の点に注意すること.
プログラム名は「stock」とすること.
プログラム実行開始直後の在庫数は0とする
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
./stock
100.0 10
200.0 10
300.0 10
555.0 30
377.5 60/*←出力*/
0239デフォルトの名無しさん
2007/06/26(火) 10:21:46#include <stdio.h>
#define FILENAME_MAX 128 // 環境によってはマズイ
int main(void)
{
FILE *fpin, *fpout = fopen("chkpair.out", "w");
int ch, count1 = 0, count2 = 0;
char filename[FILENAME_MAX], buf[128];
printf("filename for input : ");
scanf("%s", filename);
if((fpin = fopen(filename, "r")) == NULL)
perror(filename), exit(1);
while((ch = fgetc(fpin)) != EOF){
if(ch == '{') count1++;
else if(ch == '}') count2++;
}
sprintf(buf, "{ : %d\n} : %d\n", count1, count2);
fputs(buf, fpout);
fclose(fpin);
fclose(fpout);
return 0;
}
0240デフォルトの名無しさん
2007/06/26(火) 10:30:48#include <stdio.h>
typedef struct tag_stock_t{
double price;
int quantity;
}stock_t;
int main(void)
{
stock_t x[4];
double price_sum = 0, price_ave;
int i, num = 0;
for(i = 0; i < 4; i++)
scanf("%lf%d", &x[i].price, &x[i].quantity);
for(i = 0; i < 4; i++){
price_sum += x[i].price*x[i].quantity;
num += x[i].quantity;
}
price_ave = price_sum/num;
printf("%.1f %d\n", price_ave, num);
return 0;
}
0241227
2007/06/26(火) 10:43:16#正の数
133
535
846
167
335
#負の数
-647
-673
-384
-384
-373
0242デフォルトの名無しさん
2007/06/26(火) 10:47:29> #define FILENAME_MAX 128 // 環境によってはマズイ
うむ、かなりまずい。stdio.h にマクロ定義されていると思われるんで
敢えてそこで定義しない方が良いかも
0243デフォルトの名無しさん
2007/06/26(火) 10:56:24[2] 問題文(含コード&リンク):
3d^2x/dt^2+dx/dt+2x=4
x(t=0)=0
dx/dt(t=0)=0
上記の微分方程式をルンゲークッタ法を用いて解け
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C言語
[4] 期限: ([2007年6月25日まで
[5] その他の制限: なし
お願いします
0244デフォルトの名無しさん
2007/06/26(火) 11:16:50[2] 問題文(含コード&リンク):
年と月を入力すると、カレンダーを表示するプログラムの作成。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.3
[3.3] 言語: C
[4] 期限: 6月27日
[5] その他の制限:入門者らしいつくりでお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4399.c
此所まではやってみたのですが、実行したときに" 日 月 火 水 木 金 土"
の部分しか表示されないので困っています。
0245デフォルトの名無しさん
2007/06/26(火) 11:41:21曜日を得るのは標準関数を使えばいいのに……
それはさておき、
・monthは1〜12なのに[0〜11]の配列をそのまま参照している。
・「土」の後に改行していない。
のは問題かな。
後はもっと細かく見ないと判らん。
0246デフォルトの名無しさん
2007/06/26(火) 11:49:09return(day[2]+1);
これねぇ、本当は良くない。できればうるう年なら day[2] = 29; そうでないなら
day[2]=28; にした方が良い。ここでは問題ないけど、何回か呼び出しをした場合
これだとうるう年に該当するたびに2月の日数が1ずつ加算されていくから。
0247デフォルトの名無しさん
2007/06/26(火) 11:51:010248デフォルトの名無しさん
2007/06/26(火) 11:51:24もしもーし、脳味噌入ってますか〜?
0249デフォルトの名無しさん
2007/06/26(火) 11:59:00>>248
理解力のない馬鹿は視ねよw
0250デフォルトの名無しさん
2007/06/26(火) 12:00:26指摘頂いた部分やその他修正したらカレンダーらしいものは表示が出るようになりました。
あとは1月2月3月らへんが多少ずれてるのですがこれはどう直したら良いでしょうか。
0251デフォルトの名無しさん
2007/06/26(火) 12:01:34頭が腐ってるのか目が腐ってるのか知らんが、もう一度よく見直せ。
0252デフォルトの名無しさん
2007/06/26(火) 12:03:51マジで言ってるなら医者に行くか、取り敢えず寝てきたら? 100年くらい。
>>250
エスパーじゃないからどうずれるのか判らんし、そこがデバッグの楽しみだろう。
つーか、曜日の計算と改行する条件判断はあってる?
youbiが1のときは何曜日のつもり?
0253デフォルトの名無しさん
2007/06/26(火) 12:05:23コードを見りゃ加算されるわけねーってバレバレじゃんw
0254デフォルトの名無しさん
2007/06/26(火) 12:08:090255デフォルトの名無しさん
2007/06/26(火) 12:12:20こんな時間にいる引きこもりニーツがきめぇ〜〜んだよ(プ
俺?俺は大学の研究室からやw
0256デフォルトの名無しさん
2007/06/26(火) 12:14:460257デフォルトの名無しさん
2007/06/26(火) 12:15:180258デフォルトの名無しさん
2007/06/26(火) 12:16:380259デフォルトの名無しさん
2007/06/26(火) 12:19:03本当にSランクなら、そもそも釣りなんて無駄なことはしない
0260デフォルトの名無しさん
2007/06/26(火) 12:20:19もうこんなんじゃ、月(付き)合ってらんね〜
0261デフォルトの名無しさん
2007/06/26(火) 12:21:39Sランク級の釣りにビビッてんだろぉ?Sランク級の釣りにお前がチビッているのがわかるぜ?
0262デフォルトの名無しさん
2007/06/26(火) 12:25:590263デフォルトの名無しさん
2007/06/26(火) 12:28:030264デフォルトの名無しさん
2007/06/26(火) 12:31:44[2] 以下のプログラムは,都道府県名(ローマ字)を入力すると,各都道府県の人口(人)と面積(km2)が列挙されたファイル prefectures.dat
からデータを読み込み,指定した都道府県の人口,面積およびそれらの比である人口密度を表示するプログラムである.
このプログラムを以下の例のように,人口,面積について 日本全体の総和に対する比率(百分率) も表示されるように書き換えよ.
実行例:
nodabls?% ./a.out[Enter]
chiba[Enter]
Statistics of the Chiba
Population = 6056159 (4.7 %)
Area (km^2) = 5156.19 (1.4 %)
Density (per km^2) = 1174.54
[3.1] Unix
[3.2] gcc
[3.3] c
[4] 2007年6月29日(金)
0265デフォルトの名無しさん
2007/06/26(火) 12:33:21プログラム
/* density.c: calculate population density for the given prefecture */
#include <stdio.h>
#include <strings.h>
int main(void)
{
char name[20], query[20];
int pop;
double area, den;
FILE *fp;
fp = fopen("prefectures.dat", "r"); /* ファイルオープン */
if (fp == NULL) { /* オープンに失敗? */
fprintf(stderr, "Can't open file!\n");
return (-1);
}
scanf("%s", query); /* 都道府県名を入力 */
den = -1.0;
/* 1行分の情報を読み込みつつループをファイル末尾まで繰り返し */
while (fscanf(fp, "%s%d%lf", name, &pop, &area) != EOF) {
if (strcasecmp(name, query) == 0) { /* 都道府県名が一致? */
den = pop / area; /* 人口密度 = 人口/面積 */
printf("Statistics of the %s\n", name);
printf("Population = %10d\n", pop);
printf("Area (km^2) = %10.2f\n", area);
printf("Density (per km^2) = %10.2f\n", den);
break; /* ループから抜ける */
0266デフォルトの名無しさん
2007/06/26(火) 12:35:32}
fclose(fp); /* ファイルクローズ */
if (den < 0.0) { /* 都道府県名が正しくない? */
fprintf(stderr, "No such prefecture (%s)!\n", query);
return (-1);
}
return (0);
}
0267デフォルトの名無しさん
2007/06/26(火) 12:38:46prefectures.dat ファイル
Hokkaido 5627424 83453.04
Aomori 1436628 9606.33
Iwate 1385037 15278.40
Miyagi 2359991 7285.07
Akita 1145471 11612.11
Yamagata 1216116 9323.34
Fukushima 2091223 13782.48
Ibaraki 2975023 6095.58
Tochigi 2016452 6408.28
Gumma 2024044 6363.16
Saitama 7053689 3797.30
Chiba 6056159 5156.19
Tokyo 12570904 2186.90
Kanagawa 8790900 2415.41
Niigata 2431396 12582.37
Toyama 1111602 4247.22
Ishikawa 1173994 4185.22
Fukui 821589 4188.75
Yamanashi 884531 4465.37
Nagano 2196012 13585.22
Gifu 2107293 10598.18
Shizuoka 3792457 7779.46
Aichi 7254432 5155.84
Mie 1867166 5776.40
Shiga 1380343 4017.36
0268デフォルトの名無しさん
2007/06/26(火) 12:40:30Osaka 8817010 1892.86
Hyogo 5590381 8392.03
Nara 1421367 3691.09
Wakayama 1036061 4725.55
Tottori 606947 3507.17
Shimane 742135 6707.29
Okayama 1957056 7112.13
Hiroshima 2876762 8476.95
Yamaguchi 1492575 6110.45
Tokushima 809974 4145.10
Kagawa 1012261 1875.88
Ehime 1467824 5676.22
Kochi 796211 7104.66
Fukuoka 5049126 4971.01
Saga 866402 2439.23
Nagasaki 1478630 4092.44
Kumamoto 1842140 7403.68
Oita 1209587 6337.97
Miyazaki 1152993 7734.40
Kagoshima 1753144 9186.71
Okinawa 1360830 2271.30
長くなってすみません。よろしくお願いします。
0269デフォルトの名無しさん
2007/06/26(火) 12:44:11public class JobShop_EDD{
static int Job=3;
static int Machine=2;
static int K=30;
static int [] duedate={0,7,9,13,14,20};
static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}};
static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}};
static int [] weight={0,2,2,2,2,2};
0270デフォルトの名無しさん
2007/06/26(火) 12:45:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4401.c
直してみたものですが。
月曜じゃないんですか?人伝えに聞いたので曖昧ですが
0271デフォルトの名無しさん
2007/06/26(火) 12:49:23int youbi(int year,int month,int day)
{
if(month<=2) { year--; month+=12; }
return ( year + year/4 - year/100 + year/400 + (13*month+8)/5 + day )%7;
}
0272デフォルトの名無しさん
2007/06/26(火) 13:04:56>>240
ありがとうございました。またなにかありましたらよろしくおねがいします。
0273デフォルトの名無しさん
2007/06/26(火) 14:56:55問題が長い時は、ロダにtxtでうpしてリンク貼る
長いソースは拡張子を変えずにロダにうp
複数のレスに別けられると見辛い
>>269
メソッドが無くて、変数だけか。それを構造体にすればいいのか?
0274デフォルトの名無しさん
2007/06/26(火) 15:37:200275デフォルトの名無しさん
2007/06/26(火) 15:57:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4402.txt
0276デフォルトの名無しさん
2007/06/26(火) 16:00:470277275
2007/06/26(火) 16:05:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4403.txt
0278デフォルトの名無しさん
2007/06/26(火) 16:07:10有り難うございます。この部分はすり替えておきます。
0279デフォルトの名無しさん
2007/06/26(火) 16:11:48[2] 問題文(含コード&リンク): コマンドラインで指定した二つのファイルを交換しろ
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ Compiler 5.5
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4404.txt
なんかうまく動きません
助けてください
0280デフォルトの名無しさん
2007/06/26(火) 16:16:230281デフォルトの名無しさん
2007/06/26(火) 16:21:31;
多分、*p++なんだろうな
0282デフォルトの名無しさん
2007/06/26(火) 16:21:49題意に沿ってるかワカランが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4405.txt
0283デフォルトの名無しさん
2007/06/26(火) 16:22:45while(fputc(*p,fp2) != EOF)
p++;
のがいいか
0284デフォルトの名無しさん
2007/06/26(火) 16:24:07どうやって使うんですか?
ファイル入ったばかりでどうしていいのかさっぱりです・・・
>>281
ミスです・・・どうもです
0285デフォルトの名無しさん
2007/06/26(火) 16:30:420286デフォルトの名無しさん
2007/06/26(火) 16:32:01こんなモンでいいと思うよ
#include <stdio.h>
int main(int argc, char **argv)
{
char *tmp;
/* 引数の制限 */
if (argc != 3) {
printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
return 1;
}
tmp = tmpnam(0);
if (!rename(argv[1], tmp))
if (!rename(argv[2], argv[1]))
if (!rename(tmp, argv[2]))
return 0;
perror("rename");
return 1;
}
0287デフォルトの名無しさん
2007/06/26(火) 16:45:04名前じゃなくて中身を交換するようにしたいんです
できれば>>279の間違ってる部分を修正してもらえるとありがたいです
0288デフォルトの名無しさん
2007/06/26(火) 16:56:08一から作った方がよほど早い
0289デフォルトの名無しさん
2007/06/26(火) 16:59:280290デフォルトの名無しさん
2007/06/26(火) 17:11:270291デフォルトの名無しさん
2007/06/26(火) 17:16:30[2] 問題文(含コード&リンク):キーボードから2つのファイル名を指定し、1つめのファイルの末尾に2つめのファイルの内容を追加するプログラムを作成せよ.
ファイル名は最大15文字とする.
ファイルの1行の最大文字数は31文字とする.
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限:
0292デフォルトの名無しさん
2007/06/26(火) 17:23:14#include <stdio.h>
int copy(char *from, char *to)
{
FILE *fi, *fo;
int c;
if ((fi = fopen(from, "rb")) == NULL)
return perror(from), 0;
if ((fo = fopen(to, "wb")) == NULL)
return perror(to), fclose(fi), 0;
while ((c = getc(fi)) != EOF) putc(c, fo);
return fclose(fi), fclose(fo), 1;
}
int main(int argc, char **argv)
{
char *tmp;
int result;
/* 引数の制限 */
if (argc != 3) {
printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
return 1;
}
tmp = tmpnam(0);
result = (copy(argv[1], tmp) && copy(argv[2], argv[1]) && copy(tmp, argv[2]));
remove(tmp);
return !result;
}
0293286=292
2007/06/26(火) 17:34:21モード"r+"で2つのファイル開いて一時ファイルを使わずに内容を交換しようという
志自体は面白いが、読み書きのたびにftell()/fseek()の類で読み書き位置を
移動する必要があるし、ファイルサイズが異なるファイルを交換する場合、
最後にファイルサイズを変更する(切り詰める)手段が必要だ。
大抵のシステムにはそうした手段が用意されているが、C標準には存在しない。
まあおとなしく>>286か>>292のコードを使っとけ。
0294デフォルトの名無しさん
2007/06/26(火) 17:34:42ほれ。
制約の意味がわからんのだが、ファイル名の最大長とか1行の最大長とかはなんかの縛りなのか?
#include <stdio.h>
#ifndef EOF
#define EOF -1
#endif
int main(int argc, char **argv){
char c;
FILE *fp1 = NULL, *fp2 = NULL;
if( (fp1 = fopen(argv[1], "ab")) == NULL ||
(fp2 = fopen(argv[2], "rb")) == NULL)
return -1;
fseek(fp1, 0, SEEK_END);
while((c = fgetc(fp2)) != EOF){
fputc(c, fp1);
}
fclose(fp1);
fclose(fp2);
return 0;
}
0295デフォルトの名無しさん
2007/06/26(火) 17:37:02デカい方のファイルに合わせてバッファ確保して中身入れ替えりゃいいんじゃねぇの
0296デフォルトの名無しさん
2007/06/26(火) 17:39:36ファイルを計4回開く気があるのならそれでいいね。
最初に"rb"で開いて一気読みして次に"wb"ね。
質問者の意図とは異なると思うが。
0297デフォルトの名無しさん
2007/06/26(火) 17:44:28r+とfseek()使え
0298デフォルトの名無しさん
2007/06/26(火) 17:46:35だから、それだとファイルを切り詰められないでしょ
0299デフォルトの名無しさん
2007/06/26(火) 18:14:180300デフォルトの名無しさん
2007/06/26(火) 18:23:30copy /B file1+file2
0301デフォルトの名無しさん
2007/06/26(火) 18:25:29テストの過去問題なんで、テストの問題のうちなんだと思います。
0302デフォルトの名無しさん
2007/06/26(火) 18:54:38なるほど、指定のテキストファイル読めとかそーゆう縛りね
んじゃ要求通りだとこんな感じかね?
#include <stdio.h>
#ifndef EOF
#define EOF -1
#endif
#define LINE_MAX 32
#define FILENAME_MAXLENGTH 15
int main(int argc, char** argv){
char buf[LINE_MAX];
FILE *fp1 = NULL, *fp2 = NULL;
if( strlen(argv[1]) > FILENAME_MAXLENGTH || strlen(argv[2]) > FILENAME_MAXLENGTH)
return -2;
if( (fp2 = fopen(argv[2], "rb")) == NULL || (fp1 = fopen(argv[1], "ab")) == NULL)
return -1;
while(fgets(buf, LINE_MAX, fp2) != NULL) // 1行が32文字を超えると切り捨てられるけど
fputs(buf, fp1);
fclose(fp1);
fclose(fp2);
return 0;
}
0303デフォルトの名無しさん
2007/06/26(火) 19:39:19[2] 問題文(含コード&リンク):
1.まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。
2.オプション -c があれば、 date を実行し、その後、 cal を実行する。
オプションを指定しなければ、 date だけを実行する。
ただし、オプション -z timezone があれば、
環境変数TZの値をtimezoneに設定して、各コマンドを実行する。
3.findコマンドを呼び出して、指定されたディレクトリ
(複数可。指定がない場合は、カレントディレクトリ)
以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。
[3] 環境
[3.1] OS:Vine Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:よろしくお願いします。
0304デフォルトの名無しさん
2007/06/26(火) 19:43:44<サンプルプログラム1>
http://www.cc.kyoto-su.ac.jp/~wd/jissen-programming-c/prog/voyager1.c
<サンプルプログラム2>
http://www.cc.kyoto-su.ac.jp/~wd/jissen-programming-c/prog/voyager2.c
0305デフォルトの名無しさん
2007/06/26(火) 19:45:37書き忘れです(汗)
pwdを実行し、成功すれば、その後、ls -lを実行するプログラムです
0306デフォルトの名無しさん
2007/06/26(火) 19:56:11日本語でおk
0307デフォルトの名無しさん
2007/06/26(火) 20:19:36[2] 問題文(含コード&リンク):
学生のデータベースを作成する。
まずは学生の名前と大学名、学科、生年月日(年はintで月日はshortで定義する)、趣味で構成される構造体を作る。
これらは全て実際には存在するような名前にしないこと。
初めに学生5人が与えられている。->http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4408.txt
プログラムは、0から3のうちいずれかを入力し0が入力されるまでプログラムを繰り返す。
0を入力したときプログラムを終了する。
1を入力したときすべての学生をバイナリモードでテキストファイルに出力し、画面上にも出力する。
2を入力したとき何番目かの学生(1と入力したら1番目という風に)を画面上に出力する。
3を入力したとき新しい学生を追加する(名前,大学名,生年月日,趣味)。
またメモリーはでいつでも1人分の学生のデータしか保持しない。
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] 言語: C
[4] 期限: 6/27
[5] その他の制限: 特になし
よろしくお願いします。
0308デフォルトの名無しさん
2007/06/26(火) 20:36:36[2] 問題文(含コード&リンク):
1.正整数n を入力し,2 〜 n の範囲にある素数およびその個数を求めるプログラムを作成
しなさい.
2.年(西暦),月,日を入力したとき,入力した年月日の曜日を出力するプログラムを作成
しなさい.
3.下の表のような時間を入力したとき,その総時間を求めるプログラムを作成しなさ
い.なお,表のデータは例なので,汎用的に扱えるように,数と
時間は実行時に任意の数を入力すること.
例
1 動画50 分08 秒
2 動画29 分38 秒
3 動画15 分49 秒
4 動画22 分50 秒
5 動画11 分02 秒
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし
よろしくお願いします
0309デフォルトの名無しさん
2007/06/26(火) 20:57:360310デフォルトの名無しさん
2007/06/26(火) 20:59:313は総時間をどう表示すればいい?
合計○○時間△△分□□秒でおk?
0311デフォルトの名無しさん
2007/06/26(火) 21:03:40どう入力させればいいんだ?
>>310における○○、△△、□□をそれぞれ入力してもらう形?
それとも、「* 動画** 分** 秒」を全部入力させる形?
0312デフォルトの名無しさん
2007/06/26(火) 21:24:41[2] 問題文(含コード&リンク):
2つのベクトル要素の値をキーボードから読み込み、その内積を計算するプログラムを
作りなさい。要素の値はdouble型であるものとする。
・ベクトルの要素数の指定はオブジェクト形式マクロ(#define指令)で行う(値は6とする)
・ベクトルの要素の値はキーボードから読み込む
・データの読み込みや内積の計算などの繰返し部分はfor文で行う
・結果は、読み込んだ各ベクトルの値を横ベクトルとして表示した後、その次の行に出力する
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限: 6月27日まで
全くわかりません 誰か助けてください
0313308
2007/06/26(火) 22:01:13○○、△△、□□をそれぞれ入力してもらう形です。
総時間は△△分□□秒でお願いします。
○○時間△△分□□秒でも問題はないとは思いますが・・・・
0314デフォルトの名無しさん
2007/06/26(火) 22:14:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4409.txt
0315デフォルトの名無しさん
2007/06/26(火) 22:16:32できてから気づいたけど、
ELEMENTを可変にするならprintfでベクトルを出力してるところは
もっとちゃんと書けばよかったな
カッコとかが汚いと思ったからこんな風に書いたけど
0316デフォルトの名無しさん
2007/06/26(火) 22:20:48まあ時間あるみたいやし
ゆっくりやらせてもらうわ
他の人でやったるって人が出てきたら俺にかまわずやってください
0317デフォルトの名無しさん
2007/06/26(火) 22:29:24ありがとうございました
ついでに多次元配列をつかったらどんなプログラムができるんですか?
0318デフォルトの名無しさん
2007/06/26(火) 22:31:20プログラム自体はほとんど変化しないからあんまり気にしない方がいい
0319デフォルトの名無しさん
2007/06/26(火) 22:34:25[2] 問題文(含コード&リンク):
same.cをファイル入出力対応版に変更しなさい。
same.c →http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4410.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 27日正午まで
[5] その他の制限: 特にナシ
実行例
[home@***~/home]% cat filesame.in
ABC
ABC
[home@***~/home]% ./filesame
filename: filesame.in
[home@***~/home]% cat filesame.out
yes
[home@***~/home]%
よろしくお願いします。
0320デフォルトの名無しさん
2007/06/26(火) 22:55:27[2] 問題文:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4412.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C
[4] 期限: 27日まで
[5] その他の制限:再帰法まで習った
よろしくお願いします。
0321デフォルトの名無しさん
2007/06/26(火) 23:22:46[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4413.txt
[3] 環境
[3.1] OS:Windows
[3.3] 言語: C
[4] 期限: 27日まで
よろしくお願いします
0322デフォルトの名無しさん
2007/06/26(火) 23:45:03おいっ、日本語が読めない在日が何こんなところで日本人の相手をしてんだ?
とっとと祖国へ帰れよ。お前みたいな役立たずはここには必要はない。
0323デフォルトの名無しさん
2007/06/26(火) 23:47:070324デフォルトの名無しさん
2007/06/26(火) 23:48:55キーボードから読み込む方法?
それって代入に含まれるんじゃないか?
とりあえず
・初期化
int array[] = {0, 1, 2, 3, 4, 5};
要素数を指定しなくても初期化子の数で勝手に合わせてくれる。
固定的なデータを保持する用途とかが一般的なんじゃないかな。
・代入
array[0] = 0;
変動的で、同じような系統のデータをまとめて保持するのに使うのが一般的。
ランダムアクセスには強いが、データの追加と削除に弱い。
まぁconstでもつけなきゃ初期化した配列も普通に代入できるから結局あんま差はない希ガス。
こんなんでいいの?
0325デフォルトの名無しさん
2007/06/26(火) 23:49:38目に付いた(2)だけ
#include <stdio.h>
double pow_f(double x, int p) {
double f;
if(p==0) return 1;
f = pow_f(x, p-1) * (x-p+1);
return f;
}
int main(void) {
double x;
int p;
scanf("%lf %d",&x ,&p);
printf("%.1f",pow_f(x, p));
return 0;
}
0326デフォルトの名無しさん
2007/06/26(火) 23:50:35宿題にスマートに答える役立つ人材
0327デフォルトの名無しさん
2007/06/26(火) 23:52:59人がいるのかいないのか分からないままでdat落ちしてしまうね
0328デフォルトの名無しさん
2007/06/26(火) 23:54:30出題者はスレの維持に役立っていますので
役立たずではありません
0329デフォルトの名無しさん
2007/06/26(火) 23:55:570330デフォルトの名無しさん
2007/06/27(水) 00:02:10全部再起なんか使わなくてもできる
非常に悪い再起の例
再起は必要以上にスタック喰い潰すから使わないで済むなら極力使わないほうがいい
って、なんの答えにもなっとらんな
0331デフォルトの名無しさん
2007/06/27(水) 00:03:30実に汚いソースになる。
汚いと分かっていながらどこをどの様に修正すれば良いのか皆目検討つかないから困る。
助けて・・・。
0332デフォルトの名無しさん
2007/06/27(水) 00:08:28ありがとう
できればもう少し詳しく説明して欲しいです
0333デフォルトの名無しさん
2007/06/27(水) 00:17:42広域変数は悪じゃない
staticで外部モジュールから参照できないようにするとか
きっちり管理さえすれば忌み嫌うものではない
むしろ広域変数を無理に避けようとして余計マズい設計になることの方が、本来避けるべき
>>332
これ以上詳しく説明しろといわれてもな
Cで使ってる以上は、constにさえ気をつければ初期化も代入もそんな大層な差はない
C++だとまた話が変わってくるんだけど
具体例見るのが一番手っ取り早いから、いろいろ調べてみ
0334デフォルトの名無しさん
2007/06/27(水) 00:18:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4414.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4415.c
0336331
2007/06/27(水) 00:28:34うん。
今日、指摘された。
staticのスコープは定義された箇所のみが有効範囲だよね?
でもアドレス渡ししたらスコープ外の場所でも値を書き換えたり出来る?
多分、出来たとしてもやっちゃ駄目なんだろうけど・・・。
0337デフォルトの名無しさん
2007/06/27(水) 00:38:00C言語に関する一般的な相談事ならスレ違いだぞよ。
0338デフォルトの名無しさん
2007/06/27(水) 00:41:11そう、staticは参照の範囲を同一のファイル内だけに限定できる。
そして、指摘の通り
int g_data = 0; // 広域変数
int *getGlobal(void) { return &g_data; }
みたいなのも、手法としてはある。
利点は、広域変数をモジュールの中に置ける事で、Cでオブジェクト指向もどきな設計ができること。
反面、C++のgetterと違ってポインタを取得できてしまうから、それを通じて外から値を書き換えてしまうこともできる。
でもgotoと一緒で使いどころさえ間違えなければ大丈夫。
0339デフォルトの名無しさん
2007/06/27(水) 00:52:26再帰で(3)
int arr_max_pos(int arr[], int n){return n?arr[n-1]>arr[arr_max_pos(arr,n-1)]?n-1:arr_max_pos(arr,n-1):0;}
0340デフォルトの名無しさん
2007/06/27(水) 00:57:16int div_pow(int n,int p){return n%p?0:div_pow(n/p,p)+1;}
int div_quo(int n,int p){return n%p?n:div_quo(n/p,p);}
0341デフォルトの名無しさん
2007/06/27(水) 00:59:12http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4414.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4415.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4416.c
0342デフォルトの名無しさん
2007/06/27(水) 06:44:44下品だけどねw
static int a;
int hoge(){
static int a__ = 123;
a = a__;
return(0);
}
int getglobal(){
a+=10;
return(a);
}
int main(){
hoge();
printf("%d", getglobal());
return(0);
}
0343デフォルトの名無しさん
2007/06/27(水) 06:50:260344デフォルトの名無しさん
2007/06/27(水) 07:25:54[2] 問題文(含コード&リンク):
以下の式のおいて、刻み幅が0.2のときの解析解をオイラー法で求めよ。
y(0)=0 y'(0)=0
y'=z
z'=-z-2y+cosx
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc-2.95
[3.3] 言語: C、C++どちらでも良い
[4] 期限:6/27
[5] その他の制限:
お手上げ状態です。よろしくお願いします。
0345デフォルトの名無しさん
2007/06/27(水) 08:43:25[2] 問題文(含コード&リンク): 多次元配列
次の表は今年の全日本大学野球選手権における
早稲田大学の試合結果である。
2回戦 1 2 3 4 5 6 7 8 9
早稲田大 0 0 1 0 1 0 0 0 0
九州国際大 0 0 0 0 0 0 0 0 1
準々決勝
早稲田大 0 5 4 0 0 0 0 0 7
関西国際大 0 0 0 0 3 0 0 0 0
準決勝
創価大 1 0 0 0 0 0 0 0 0
早稲田大 6 0 0 1 0 1 0 2 0
決勝
早稲田大 1 0 0 2 0 0 1 0 0
東海大 0 0 0 0 0 1 0 0 0
それぞれの試合について各回の得点と失点(表裏ではないので注意)を 2×9の2次元配列に格納するものとする。
試合分のデータがあるので、4×2×9の3次元配列scoreを用意して、得失点を配列の宣言と同時に初期値として格納しなさい。
また以下の内容を計算して出力しなさい。
4試合の平均得点と平均失点
各回ごと(1から9回)の4試合の平均得点と平均失点
多次元配列の要素を参照するには‥多重ループを使う
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C [4] 期限:来週まで
[5] その他の制限: 特になし
お願いします
0346デフォルトの名無しさん
2007/06/27(水) 09:11:52なめとんか
0347デフォルトの名無しさん
2007/06/27(水) 09:15:34y' = z とう条件は不要なんじゃないかと思うが
#include <stdio.h>
#include <math.h>
#define N 100
double f(double y, double z)
{
return -z - 2.0 * y + cos(y);
}
int main(void)
{
double y[N], z[N], dx = 0.2;
int i;
y[0] = z[0] = 0.0;
for (i = 0; i < N; i++) {
y[i] = y[0] + i * dx;
z[i + 1] = z[i] + dx * f(y[i], z[i]);
printf("y = %f, z = %f\n", y[i], z[i]);
}
return 0;
}
0348デフォルトの名無しさん
2007/06/27(水) 09:20:12師匠。
0349デフォルトの名無しさん
2007/06/27(水) 09:23:34double y[N], z[N], dx = 0.2;
を
double y[N + 1], z[N + 1], dx = 0.2;
に直しておいてくれ。
あとf()のcos(y)は題意ではcos(x)になっているが間違いだよな?
0350デフォルトの名無しさん
2007/06/27(水) 09:24:420351デフォルトの名無しさん
2007/06/27(水) 09:27:550352デフォルトの名無しさん
2007/06/27(水) 10:40:57#include <stdio.h>
int mycmp(char *m1 ,char *m2)
{
while (*m1 != '\0')
if(*m1++ != *m2++)
return 0;
if(*m1 == *m2)
return 1;
}
int main(int argc, char *argv[])
{
char m1[256], m2[256];
FILE *fp;
fp = fopen(argv[1], "r");
fgets(m1,256,fp);
fgets(m2,256,fp);
fclose(fp);
if(mycmp(m1, m2))
puts("yes");
else
puts("no");
return 0;
}
エラー処理はしてないにょ。動かしてもいないけど、これ以上は自分で。
ちゃんと授業を受けるか、さもなくばIT関連の就職先はあきらめろ。
0353デフォルトの名無しさん
2007/06/27(水) 11:36:26[2] 問題文(含コード&リンク):
「在庫問題」
ある倉庫を考える。この倉庫は営業開始時において、毎日Sトンの初期在庫量を有する。1日の注文量rが確率的に発生するとき、営業終了時間の最終在庫量(S>rの場合)、不足量(S<rの場合)とする。
注文量rが正規分布N(100,20^2);すなわち平均100、標準偏差20の正規分布に従う乱数と仮定する。
平均100、標準偏差20の正規分布に従う乱数は以下で求められる。
0以上、1以下の一様実数乱数をUiとする。それを次式に代入することによって、標準正規乱数Xとなる。
X=U1+U2+……U12-6
Xを次式に代入することによってY(標準偏差20の正規分布に従う乱数)となる。
Y=20X+100
維持費:1トンにつき120円(最終在庫量に対して)
品切損失:1トンにつき180円(不足量に対して)
補充経費:1回につき15000円(補充量に依存せず)
総経費:維持費+品切損失+補充経費
(1)補充発注に関して、自分の採用した決定方法を述べよ。
これは、
2日目以降の初期在庫量が毎回200トンになるようにする。
例えば、第一日目の初期在庫量が125トンだから、その日の注文量が100だとすると125−100=25で最終在庫量25トンだから、その日の
補充量は200−25=175で175トン発注するというふうにする。
(2)そのような補充を行い、1000日間の、初期在庫量、最終在庫量、補充量、総経費について、1日あたりの平均値を求めよ。
なお、第一日目の初期在庫量を125トンとする。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: どちらでも可
[4] 期限: 2007年06月28日12:00まで
[5] その他の制限: なし
度々すいませんm(__)m
0354デフォルトの名無しさん
2007/06/27(水) 13:07:42[2] 問題文(含コード&リンク):
1.まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。
2.オプション -c があれば、 date を実行し、その後、 cal を実行する。
オプションを指定しなければ、 date だけを実行する。
ただし、オプション -z timezone があれば、 環境変数TZの値をtimezoneに設定して、各コマンドを実行する。
3.findコマンドを呼び出して、指定されたディレクトリ
(複数可。指定がない場合は、カレントディレクトリ)
以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。
↓サンプルプログラム
pwdを実行し、成功すれば、その後、ls -lを実行するプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4420.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4421.c
[3] 環境
[3.1] OS:Vine Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:なし
よろしくお願いします。
0355デフォルトの名無しさん
2007/06/27(水) 13:35:02[2] 問題文(含コード&リンク):
インサートソートに関する問題
左からつめる方式の昇順アルゴリズムである次のソートプログラムを、右からつめる
降順に書き直せ。
ソートプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4422.txt
inp1.datというファイルには、20個の2桁の整数が入っているものとする。
[3] 環境
[3.1] OS:Windows XP
[3.3] 言語:C言語
[4] 期限:6月28日(木)まで
お願いします
0356バケツ
2007/06/27(水) 13:50:59[2] 問題文(含コード&リンク):
バケツ法-並び替え(詳細は後述)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ:gcc
[3.3] 言語:C
[4] 期限: できれば早いほうがいいです。
[5] その他の制限: 特にありません
0357バケツ
2007/06/27(水) 13:53:03ao
kuro
これら三つのデータをアルファベット順に並び替える。
この場合、akaの後ろには半角スペースが1つあり、
aoの場合は2つあると考えて並び替える。
1 2 3 4
ao ao aka ao
aka aka ao aka
kuro kuro kuro kuro
優先順位としては
スペース>アルファベットです。
0358バケツ
2007/06/27(水) 13:55:072は前から三番目、3は前から二番目、4は頭文字に焦点を合わせて並び替える。
説明すると、1ではaoはスペース、akaはスペース、kuroはoなので
上記のような順になる。
このようにして最終結果(頭文字の並び替え)がでるまでこの作業を繰り返し、
出力する。
説明不足かもしれませんが、よろしくおねがいします
katori
nakata
murata
hanada
sakata
tanaka
を配列の要素として作成してください。
scanfを用いて作成してもらってもかまいません。
0359デフォルトの名無しさん
2007/06/27(水) 14:00:26[2] 問題文(含コード&リンク):
次のプログラムをユーザー関数を用いて、階層化せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4423.txt
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:c言語
[4] 期限:6月28日(木)
リンク先のプログラムは一つ前の問題を自分で書いたものですが、
コンパイルできることを確認しています。
よろしくお願いします。
0360TKO48
2007/06/27(水) 14:20:23今回からあつかう問題は営業時間から翌日の営業時間の間の補充量を
可変とし、補充量決定方法をけんとうする。
もっとも単純な考え方として�@営業終了時の最終在庫量�A経費の合計
から翌日の初期在庫量(補充量)を決定
ただし、今回は補充発注1回ごと(補充量によらない)に一定の経費を
支払うものとする
発注する経費は以下のとうりである
維持費:1tにつき120円(最終在庫量にたいして)
品切れ損失:1tにつき180円(不足量にたいして)
補充量:1回につき15.000円(補充量によらない)
課題
注文量が正規分布N(100,20^2);すなわち平均100,標準偏差20
の正規分布に従う乱数と仮定し、毎の補充量を入力することで1000日間
の経過を調べる。
(1)補充発注に関して自分の採用した決定方法を述べよ。
(2)そのような補充を行い、初期在庫量、最終在庫量、補
充量、総経費について、1日あたりの平均値を求めよ。なお、第1日の
初期在庫を125tとする。
お願いします。。。(´・ω・`)
0361デフォルトの名無しさん
2007/06/27(水) 15:03:15#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int xrand()
{
double i, x = 0;
for (i = 1; i <= 12; i++)
x += (double)rand() / RAND_MAX;
return 20 * (x - 6) + 100;
}
int main(void)
{
double fstock_sum = 0, estock_sum = 0, supply_sum = 0, cost_sum = 0;
int i, stock = 125, supply;
srand(time(0));
for (i = 0; i < 1000; i++) {
fstock_sum += stock;
stock -= xrand();
cost_sum += (stock > 0 ? 120 : 180) * abs(stock) + 15000;
if (stock < 0) stock = 0;
estock_sum += stock;
supply = (stock > 200 ? 0 : 200 - stock);
supply_sum += supply;
stock += supply;
}
printf("平均初期在庫: %g\n", fstock_sum / 1000);
printf("平均最終在庫: %g\n", estock_sum / 1000);
printf("平均補充量 : %g\n", supply_sum / 1000);
printf("平均総経費 : %g\n", cost_sum / 1000);
return 0;
}
0363デフォルトの名無しさん
2007/06/27(水) 16:05:52>>361
ありがとうございます!m(__)m
本当に悪いんですが、補充発注を1日置きごとすることは出来ませんか?
すいません…
1日目にしたら、次は3日目、次は5日目というふうに
0364デフォルトの名無しさん
2007/06/27(水) 16:07:05>>353と同じ問題だな。
>>353は(1)について、補充方法を自分で書いている。その場合の解が>>361ね。
君はどうしたいのかな。それも回答者に決めて欲しいの?
0365デフォルトの名無しさん
2007/06/27(水) 16:13:15- int i, stock = 125, supply;
+ int i, stock = 125, supply, f = 0;
-----------------------------------------
estock_sum += stock;
+ if (!f) {
supply = (stock > 200 ? 0 : 200 - stock);
supply_sum += supply;
stock += supply;
+ }
+ f = !f;
}
0366デフォルトの名無しさん
2007/06/27(水) 16:25:30一切補充しないという、
ずっと品切れ作戦が実装の楽さの割りに結構いい感じという結論が出た。
0367デフォルトの名無しさん
2007/06/27(水) 16:43:31早速ありがとうございます!
助かりました
0368デフォルトの名無しさん
2007/06/27(水) 17:03:56すまん。補充しない日も補充費を計上してたので修正。
>>366のレスで気づいたw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4426.txt
0369デフォルトの名無しさん
2007/06/27(水) 17:12:05ありがとうございます!
こちらこそスイマセンでした
0370デフォルトの名無しさん
2007/06/27(水) 17:12:47- cost_sum += 15000;
+ if (supply > 0) cost_sum += 15000;
吊ってくる。
0371デフォルトの名無しさん
2007/06/27(水) 17:20:38なんらかの木を作ったあと、その木へのポインタを引数にして
木を表示したいと思っています。単純にデータだけを、行きがけ順などで
表示するのではなくぱっと見で木とわかるようなものがいいです。
よろしくお願いいたします。
0372デフォルトの名無しさん
2007/06/27(水) 17:31:29いえいえ、とんでもないです!
頼んでいるのは私の方なんですから
0373デフォルトの名無しさん
2007/06/27(水) 18:45:07なかなかうまくいかなくて
0374デフォルトの名無しさん
2007/06/27(水) 18:58:52graphviz用の入力ファイル(ただのテキスト)を作るのが楽かも
↓みたいな感じで
でも、宿題だとそれじゃ不可かな
#include <stdio.h>
typedef struct node {
char *label;
struct node *left, *right;
} node;
void tprint(node *n) {
if (!n) return;
if (n->left)
printf("%s -> %s;\n", n->label, n->left->label);
if (n->right)
printf("%s -> %s;\n", n->label, n->right->label);
tprint(n->left);
tprint(n->right);
}
int main() {
struct node tree[] = {
{ "a", &tree[1], &tree[2] }, { "b", &tree[3], &tree[4] },
{ "c", &tree[5], &tree[6] }, { "d", &tree[7], 0 },
{ "e", 0, &tree[8] }, { "f", 0, 0 }, { "g", 0, 0 },
{ "h", 0, 0 }, { "i", 0, 0 }
};
printf("digraph test {\n");
tprint(&tree[0]);
printf("}\n");
}
0375デフォルトの名無しさん
2007/06/27(水) 19:01:31>>354
をお願いできますか?
0376デフォルトの名無しさん
2007/06/27(水) 19:05:51ヾヽ'::::::::::::::::::::::::::'', / 時 .あ ま ヽ
ヾゝ:::::::::::::::::::::::::::::{ | 間 .わ だ |
ヽ::r----―‐;:::::| | じ て |
ィ:f_、 、_,..,ヽrリ .| ゃ る |
L|` "' ' " ´bノ | な よ |
', 、,.. ,イ ヽ い う /
_ト, ‐;:- / トr-、_ \ な /
, __. ィイ´ |:|: ヽ-- '.: 〃 `i,r-- 、_  ̄ ̄
〃/ '" !:! |:| :、 . .: 〃 i // ` ヽヾ
/ / |:| ヾ,、` ´// ヽ !:! '、`
! |:| // ヾ==' ' i i' |:| ',
| ...:// l / __ , |:|::.. |
とニとヾ_-‐' ∨ i l ' l |< 天 ヾ,-、_: : : .ヽ
と二ヽ` ヽ、_::{:! l l ! |' 夂__ -'_,ド ヽ、_}-、_:ヽ
0377デフォルトの名無しさん
2007/06/27(水) 19:08:37なんでfmod()使わないといけないの?
0378デフォルトの名無しさん
2007/06/27(水) 20:04:00中途半端になってしまった
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4428.txt
0379デフォルトの名無しさん
2007/06/27(水) 20:07:46>>341 の3つめのreturn 0; の前に free(mvt); を忘れとった・・・もう見てへんよな・・・まぁ良いっか・・・
知〜らねっ ^^;
0380デフォルトの名無しさん
2007/06/27(水) 20:51:200381デフォルトの名無しさん
2007/06/27(水) 21:13:32[2] 問題文(含コード&リンク): 下記のプログラムで
a[3][3] = {{2.4, -3, 6.1}, {-1.1, 2, 3.5}, {0.5, 0, 3.2}}
b[3][3] = {{1.9, -4.7, 2.5}, {2, 0.9, 5.4}, {2.7, 0.6, 3.5}}
c[3][3] = {{-2, -3.5, 0}, {1.4, 7.3, -1}, {2.1, 0.4, 6.2}}
に置き換えたとき、この要素で与えられる行列を求め出力するプログラムを作成せよ。
#include <stdio.h>
int main(void)
{
int i, j, n;
double b[3][3] = {{3.2, -1.5, 3.9}, {3.8, 4, -1.8}, {1.9, -3, 0}};
double c[3] = {-5, 2.7, 1.5};
double a[3] = {1, 5.1, 6.2};
n = 3;
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
a[i] +=b[i][j] * c[j];
}
printf("y[%d]=%f\n", i, a[i]);
}
return 0;
}
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 6月30日16:30まで
すみません、よろしくお願いします。
0382デフォルトの名無しさん
2007/06/27(水) 22:50:20typedef struct tagTree{
int no;
struct tagTree *left, *right;
}Tree;
void PrintTree(Bin *root, int depth)
{
depth++;
if (root != NULL) {
int i;
PrintTree(root->left, depth);
for (i = 0; i < depth; i++)
printf(" ");
printf("%3d\n", root->no);
PrintTree(root->right, depth);
}
}
mainで呼ぶときはdepthを0にすればおk
0383デフォルトの名無しさん
2007/06/27(水) 22:53:56[2] 問題文(含コード&リンク):
getchar関数を使用し、コマンドラインからの数字を10回入力し、
入力の中でもっとも大きな数字を表示しなさい。
※入力桁数のエラーについて対処する事
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: CPAD、LSI C-86 Ver 3.30
[3.3] 言語: C
[4] 期限: できれば今週中
すみません、どなたか分かる方、よろしくお願いします。
0384デフォルトの名無しさん
2007/06/27(水) 22:57:07実行例くらい書いてくれ。
0385382
2007/06/27(水) 23:00:19しまった……
typedef struct tagBin{
int no;
struct tagBin *left, *right;
}Bin;
に修正plz
0386デフォルトの名無しさん
2007/06/27(水) 23:22:21すいません。恥ずかしくてのせてませんでした。
初心者のため、おかしい点等をびしびしあげていただければと思います。
#include <stdio.h>
#include <stdlib.h>
void hikaku(int *pX,int *pY);
int main(void){
int x= 0;
int y,i,j;
char str[100];
printf("数字を入力してください。\n");
for(i=1 ; i < 11; i++){
for(j=0; str[j-1] != '\n'; j++){
str[j] = getchar();}
if(j-1 >= 5){
printf("5桁以上は入力桁数エラーです。0にします。\n");}
else{y = atoi(str);
if(y == 0 && str[0] != '0'){
printf("数字以外は入力できません。0にします。\n");}
else {hikaku(&x ,&y);}}}
printf("最大値は%dです。\n",x);
return 0;}
void hikaku(int *pX,int *pY){
if(*pY > *pX){
*pX = *pY;}}
0387デフォルトの名無しさん
2007/06/27(水) 23:25:02それは実行例じゃないだろ
0388デフォルトの名無しさん
2007/06/27(水) 23:26:120389デフォルトの名無しさん
2007/06/28(木) 00:19:510390デフォルトの名無しさん
2007/06/28(木) 00:22:52をお願いしたいのですが
0391デフォルトの名無しさん
2007/06/28(木) 00:40:33while(j>=0 && x[j]>t) { を
while(j>=0 && x[j]<t) { に変更するだけじゃ駄目かな?
inp1.datとか用意するのだるいからまともに見てないけど
0392デフォルトの名無しさん
2007/06/28(木) 00:50:17すいません、実行例とは何でしょうか?
>>388
自分でここまでは作ったのですが、最初にアルファベットを打ったときなど
特殊な対応が出来ません。また、全く自信がないためです。
0393デフォルトの名無しさん
2007/06/28(木) 00:54:23降順の解釈の仕方がわからないんです。
左を右に、昇順を降順にしなくてはいけないので、while(j>=0 && x[j]<t) {の変更
だけでは出来ないと思うのですが。
0394デフォルトの名無しさん
2007/06/28(木) 00:56:53実行例は例えばこのプログラムを実行するとこういう出力になって欲しいんですよ、的な内容。
入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
どの程度のレベルかわからんが、学校授業で4月開始なら上等なレベルかと。
0395デフォルトの名無しさん
2007/06/28(木) 01:00:55#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c, max = -1, m, n, nc = 0, f, sign = 1;
while ((c = getchar()) != EOF) {
if (isdigit(c)) {
n = f = 0;
do {
if ((m = n * 10 + c - '0') < n) f = 1;
n = m;
} while ((c = getchar()) != EOF && isdigit(c));
ungetc(c, stdin);
if (f) puts("桁あふれしますた");
else {
n *= sign;
printf("%d\n", n);
if (n > max) max = n;
if (++nc == 10) break;
}
}
else if (c == '-') { sign = -1; }
else sign = 1;
}
if (max != -1) printf("最大値: %d\n", max);
return 0;
}
0396デフォルトの名無しさん
2007/06/28(木) 01:10:04ああ、右からつめるってそういうことか
単に降順にすればいいだけかと思ってた
めんどくさいからパス。せめてdatファイルがあればなぁ
0397デフォルトの名無しさん
2007/06/28(木) 01:16:170398デフォルトの名無しさん
2007/06/28(木) 01:18:19ありがとうございます。
10回数字を入力して(ただし、アルファベット、空欄など数字でないやつははじく。また、小数点にも対応する)
桁数は自分で設定し(私のやつは適当に5桁)、最大値を出力する。
>>入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
ずばり、バッファリングの理解が甘く、そこのプログラムが打てず悩んでいます。
分かる方、どうかやり方をご教授願います。
>>392
すいません。書き忘れてしまったのですが、入力の終了はEOFではなく改行でといわれています。
0399デフォルトの名無しさん
2007/06/28(木) 01:19:44アンカーのつけかたを覚えなさい。全部自分へのレスになってるよ
0400デフォルトの名無しさん
2007/06/28(木) 01:21:49全て自分に安価する君に惚れたwww
atoi関数に渡す前に
if ( '0' <= str[ j ] && str[ j ] <= '9' ) {
とかでいいんじゃない?
ソースあんま読んでないから、的外れだったらスマソ。
0401デフォルトの名無しさん
2007/06/28(木) 01:22:13それを用意するのがだるいんだ
まぁやる気が無いだけなんだけどさ
0402デフォルトの名無しさん
2007/06/28(木) 01:22:23あせってコピペしてしまいました。大変申し訳ありませんでした。
0403デフォルトの名無しさん
2007/06/28(木) 01:23:45元のプログラムをあまり書き換えないでお願い出来ますか。
注文ばかりですいません。
0404デフォルトの名無しさん
2007/06/28(木) 01:28:23atoiの前にif ( '0' <= str[ j ] && str[ j ] <= '9' ) {
??????
すいません意味が分かりません。どういうプログラムになるのでしょうか?
0405デフォルトの名無しさん
2007/06/28(木) 01:29:31無理を言って申し訳ありません。
では、左からつめるを右からに書き換えるにはどうすればいいでしょうか。
0406デフォルトの名無しさん
2007/06/28(木) 01:39:11左端が0 右端がn-1
今はj=0とかi=1からだんだん加算されていってn-1までループしているのを
n-1から減算していって0までループさせればいい
0407デフォルトの名無しさん
2007/06/28(木) 01:47:17for(i=n-2;i>=0;i--) {
t=x[i];
j=i+1;
while(j<=n-1 && x[j]>t) {
x[j-1]=x[j];
j++;
}
x[j-1]=t;
}
てきとー まさかどこと差し替えればいいかなんか聞くなよ?
0408デフォルトの名無しさん
2007/06/28(木) 01:49:57EBCDICでも0〜9は連続したコードに登録されているからおkだお ^ω^
0409デフォルトの名無しさん
2007/06/28(木) 01:59:50ちょっと無理矢理だけど例えば、str[j] = getchar();に下に次の1文を入れてみる。
if ( (str[j] < '0' || '9' < str[j]) && str[j] != '\n' ) j--;
今回getchar関数によって入力された文字が数字じゃなければ、読み込まなかったことにする。
ただ、改行コードもはじかれちゃうのでそれはOKにしておく。
極力、今のソースに手を加えないで変更しようとしたらこんなのになってゴメン・・・orz
0410デフォルトの名無しさん
2007/06/28(木) 02:01:29ありがとうございます。参考にさせていただきます。
もうひとつ>>359についてお願いできますか?
>>378さんが答えて下さっているのですが、元のプログラムの値をあまり
書き換えないで欲しいのですが。
0411デフォルトの名無しさん
2007/06/28(木) 06:01:56[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4430.txt
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:c言語
[4] 期限:6月30日(木)
0412デフォルトの名無しさん
2007/06/28(木) 08:34:40(1)
#include <stdio.h>
#include <stdlib.h>
void putchar_n(char c1, char c2, int num){
if(num <= 0){
return;
}
putchar(c1);
putchar_n(c1,c2,num-1);
putchar(c2);
}
int main(int argc, char* argv[]){
if(argc != 4){
return 1;
}
putchar_n(argv[1][0],argv[2][0],atoi(argv[3]));
printf("\n");
return 0;
}
0413デフォルトの名無しさん
2007/06/28(木) 08:44:04(2)
#include <stdio.h>
int main(){
int i = 0;
for(i = 0 ; i+31 < 126+1 ; i++){
printf("%c %d %o %x\n",i+31,i+31,i+31,i+31);
if(i%8 == 7){
printf("--------------------\n");
}
}
return 0;
}
0414デフォルトの名無しさん
2007/06/28(木) 10:10:46ありがとうございます。
ただやってみたのですが、例えば「fsa256」や「256faj」などを入れるとそれも256として
反映されてしまいます。
何とかはじく方法があればと思うのですが・・・。
0415デフォルトの名無しさん
2007/06/28(木) 10:14:2235以上でかつ95未満の要素の数の処理は出来たのですが、countの要素の合計の処理が
0となり、うまく処理出来ませんでした。
0416デフォルトの名無しさん
2007/06/28(木) 10:39:070417デフォルトの名無しさん
2007/06/28(木) 10:46:53atoi使わずに
http://www.bohyoh.com/CandCPP/C/Library/strtol.html
使えば済む話だと思う
0418デフォルトの名無しさん
2007/06/28(木) 10:55:29main()だけ修正
int main(void) {
int i, *x, n, size, count[11] = { 0 }, sum;
setp(&x, array(&size));
for (set(&i,0); less(i,size); inc(&i)) {
set(&n,div(at(x,i),10));
if (less(10,n)) set(&n,10);
inc(&count[n]);
}
for (set(&i,0); less(i,10); inc(&i))
printf("%3d台: %d\n", mul(i,10), at(count,i));
set(&sum,0);
for (set(&i,0); less(i,11); inc(&i))
set(&sum,pls(sum,at(count,i)));
printf("countの要素の合計は%d\n",sum);
if (eq(sum,size))
printf("総和は正しいです\n");
else
printf("総和が違います\n");
for (set(&n,0),set(&i,0); less(i,size); inc(&i))
if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
printf("35以上でかつ95未満の要素の数は%d\n", n);
return 0;
}
0419418
2007/06/28(木) 10:57:07int main(void) {
int i, *x, n, size, count[11] = { 0 }, sum;
setp(&x, array(&size));
for (set(&i,0); less(i,size); inc(&i)) {
set(&n,div(at(x,i),10));
if (less(10,n)) set(&n,10);
inc(&count[n]);
}
for (set(&i,0); less(i,10); inc(&i))
printf("%3d台: %d\n", mul(i,10), at(count,i));
set(&sum,0);
for (set(&i,0); less(i,11); inc(&i))
set(&sum,pls(sum,at(count,i)));
printf("countの要素の合計は%d\n",sum);
if (eq(sum,size))
printf("総和は正しいです\n");
else
printf("総和が違います\n");
for (set(&n,0),set(&i,0); less(i,size); inc(&i))
if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
printf("35以上でかつ95未満の要素の数は%d\n", n);
return 0;
}
0420デフォルトの名無しさん
2007/06/28(木) 11:02:03後から細々と注文をつけるんなら、「正しい入力」を正確に定義汁。
最初に正確に仕様を述べないから、>>1で言う
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
の状況に結果的にはなっている。
正規表現で言うと、
^-?[0-9]{0,5}$
以外はエラーと思っていいのかな。
負値はどうする?マイナスの場合の桁数の処理は?スペースも許さない?
00004
は正常?
0421デフォルトの名無しさん
2007/06/28(木) 11:30:41^(0|[1-9][0-9]{0,4}|-[1-9][0-9]{0,3})$
こうか?
0422デフォルトの名無しさん
2007/06/28(木) 12:01:40早速のレスありがとうございます。ためしにやってみたのですが、うまくいきませんでした。
できれば、
1
/\
/ \
2 3
/\ /\
4 5 6 7
このように表示できたらいいです。表示するデータは3桁の整数です。
おねがいいたします。
0423デフォルトの名無しさん
2007/06/28(木) 12:36:11[2] 問題文(含コード&リンク):
コマンドライン引数から十進整数値として解釈できる文字列のみを選び、
値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。
ただし、十進整数値として解釈できる文字列とは、正規表現 ^[-+]?[0-9]+$ に
マッチするものとする。
ヒント:小さい順に並べ替えるには、 qsort()が便利です。
こちらも、使い方は、manコマンドで調べることができます。
コマンドライン引数すべてについて、 含まれるアルファベットすべてを対応する大文字に置き換えて、
一行にコマンドライン引数一つずつ標準出力に出力するプログラム。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4431.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4432.c
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: 特になしです
どうかよろしくお願いします。
0424デフォルトの名無しさん
2007/06/28(木) 12:44:31コンパイルしても変わりませんでした。
0425デフォルトの名無しさん
2007/06/28(木) 12:48:03#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp = popen("egrep '^[-+]?[0-9]+$' | sort -n", "w");
while (*++argv)
fprintf(fp, "%s\n", *argv);
pclose(fp);
return 0;
}
0426デフォルトの名無しさん
2007/06/28(木) 12:50:09もう一度確認してみろ。
0427デフォルトの名無しさん
2007/06/28(木) 13:53:21[2]問題文:ローダーのNo.4433にアップしました。
[3]環境
OS:リナックス
コンパイラ:cc
言語:C
[4]期限:できれば本日14時30分ごろまでにお願いします。
どうぞよろしくお願いします。
0428デフォルトの名無しさん
2007/06/28(木) 13:54:15環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字型の配列変数mojiに設定されている文字数を答えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7
0429デフォルトの名無しさん
2007/06/28(木) 13:55:39環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
0430デフォルトの名無しさん
2007/06/28(木) 14:40:31#include <stdio.h>
#include <string.h>
void search(char *s1, char *s2)
{
int i;
char *p = s1;
while((p = strstr(p, s2)) != NULL){
*p++ = '#';
for(i = 0; i < strlen(s1) - 1; i++)
*(p + i) = *(p + i + strlen(s2) - 1);
}
}
int main(void)
{
char text[1024], word[1024];
printf("Please input text : ");
gets(text);
printf("text = %s\n", text);
printf("Please input search word : ");
gets(word);
search(text, word);
printf("text = %s\n", text);
return 0;
}
0431デフォルトの名無しさん
2007/06/28(木) 14:44:400432デフォルトの名無しさん
2007/06/28(木) 14:45:32void search(char *s1, char *s2)
{
while((s1 = strstr(s1, s2)) != NULL){
*s1++ = '#';
strcpy(s1, s1 + strlen(s2) - 1);
}
}
0433デフォルトの名無しさん
2007/06/28(木) 14:46:56俺だって使いたかねーけど、問題文に指定してあるからな。
0434デフォルトの名無しさん
2007/06/28(木) 14:54:08環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題
文字列と検索文字、置換文字を入力し文字列中の検索文字を置換文字に置き換えなさい
実行画面
文字列(m1)入力==>ABCDEFAABCDABC
削除文字==>A
置換文字==>*
結果文字列(m1):BCDEF**BCD*BC
0435デフォルトの名無しさん
2007/06/28(木) 15:06:21言語 C言語
引数の階乗(1*2*3*....*n)を関数を作れ
お願いします
0436デフォルトの名無しさん
2007/06/28(木) 15:09:45{
if(a == 1){
return 1;
}
return a*kaijo(a-1);
}
0437デフォルトの名無しさん
2007/06/28(木) 15:13:47{
int i, result=1;
for(i=1; i<a; i++){
result *= i;
}
return result;
}
0438デフォルトの名無しさん
2007/06/28(木) 15:14:47言語 C言語
引数の階乗(1*2*3*....*n)を返す関数を作れ
の間違いでした 申し訳ありません
0439デフォルトの名無しさん
2007/06/28(木) 15:20:430440デフォルトの名無しさん
2007/06/28(木) 15:21:44適当だし、エクスプローラ風の樹形図になっちゃうけど、それでよければ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4434.txt
0441デフォルトの名無しさん
2007/06/28(木) 15:24:360442デフォルトの名無しさん
2007/06/28(木) 15:30:51int main()
{
char moji[] = "ABCDEFG";
int i;
for(i=0; moji[i] != '\0'; i++);
printf("文字数:%d\n", i);
}
0443デフォルトの名無しさん
2007/06/28(木) 16:11:45C言語でお願いします
0444デフォルトの名無しさん
2007/06/28(木) 16:14:43>>1嫁
0445デフォルトの名無しさん
2007/06/28(木) 16:23:53問題文 マイナスの引数でエラーを出さない平方根を返す関数を作れ
環境
LINUX
C言語
期限 いつでも
>>1 よんでおらず申し訳ありませんでした
0446デフォルトの名無しさん
2007/06/28(木) 16:28:040447デフォルトの名無しさん
2007/06/28(木) 16:28:05もしネタだとしたら、真面目にお願いしたいのですが。
0448デフォルトの名無しさん
2007/06/28(木) 16:30:52例として2の 平方根 だと 1.4142135...
ー2 の 平方根 だと -1.4142135...
となるようにです
0449デフォルトの名無しさん
2007/06/28(木) 16:33:41http://mixi.jp/show_friend.pl?id=3356659
0450デフォルトの名無しさん
2007/06/28(木) 17:00:35double exsqrt(double x)
{
if(x<0){
x=-x;
return -sqrt(x);
}
return sqrt(x);
}
0451デフォルトの名無しさん
2007/06/28(木) 17:01:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4435.txt
0452デフォルトの名無しさん
2007/06/28(木) 17:14:080453デフォルトの名無しさん
2007/06/28(木) 17:17:17[2] 問題文(含コード&リンク):
以下のステップに従って,行列表示及び演算を行う関数群を作成し,3行3列の行列A,Bのかけ算を行い,結果を表示するプログラムを作成してください.なお,行列AとBは,キーボードから値を入力するようにしてください.
1.3行3列の行列を表示する関数hyoujiを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてhyoujiを呼び出し,内容を表示させ,動作確認を行う)
2.3行3列の行列A,Bの足し算を行い,結果を行列Cに代入する関数tasizanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてtasizanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
3.tasizanをコピー・雛形にして,3行3列の行列A,Bのかけ算を行い,結果を行列Cに代入する関数kakezanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてkakezanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
4.キーボードから3行3列の行列に見立てた配列に数値を入力する関数nyuryokuを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてnyuryokuを呼び出し,関数hyoujiにより行列Aを表示させ,動作確認を行う)
kakezanのヒント:3重ループにすると効率よくプログラムできます
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Borland
[3.3] 言語:C
[4] 期限:7月10日まで
[5] その他の制限:多次元配列までならってます
0454デフォルトの名無しさん
2007/06/28(木) 17:30:44迅速な返答ありがとうございます。無事実行の確認ができました。
0455デフォルトの名無しさん
2007/06/28(木) 19:00:07void hyouji(int array[][3])
{
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",array[i][j]);
putchar('\n');
}
}
void tasizan(int A[][3],int B[][3],int C[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
C[i][j]=A[i][j]+B[i][j];
}
0456455
2007/06/28(木) 19:04:02void kakezan(int A[][3],int B[][3],int C[][3])
{
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
C[i][j]+=A[i][k]*B[k][j];
}
void nyuryoku(int A[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("A%d%d:",i,j);
scanf("%d",&A[i][j]);
}
}
0457デフォルトの名無しさん
2007/06/28(木) 19:08:04[2] 問題文:
メイン関数で整数numに0が入力されるまでキー入力を繰り返し実行する。
負の値も有効とし、0も有効な値とする。
入力が終了した時点での入力値の最大値上位3つと最小値下位3つを画面に出力する。
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:出力にはprintf、入力にはscanfの使用
習い始めなため、出来るだけ簡単な物にしてくれると助かる。
お願いします。
0458デフォルトの名無しさん
2007/06/28(木) 19:08:46#include <stdio.h>
void hyouji(double a[3][3]){
int i, j;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++) printf("%4.1f", a[i][j]);
printf("\n");
}
}
void tasizan(double a[3][3], double b[3][3], double c[3][3]){
int i, j;
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) c[i][j] = a[i][j] + b[i][j];
}
void kakezan(double a[3][3], double b[3][3], double c[3][3]){
int i, j, k;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++){
c[i][j] = 0;
for(k = 0; k < 3; k++) c[i][j] += a[i][k]*b[k][j];
}
}
void nyuryoku(double a[3][3]){
int i, j;
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) scanf("%lf", &a[i][j]);
}
int main(void){
double a[3][3], b[3][3], c[3][3];
nyuryoku(a); nyuryoku(b);
tasizan(a, b, c); hyouji(c);
kakezan(a, b, c); hyouji(c);
return 0;
}
0459デフォルトの名無しさん
2007/06/28(木) 19:46:35[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4436.txt
数字を昇順でソートできるようにする。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C
[4] 期限: 6/29正午まで
[5] その他の制限: 挿入ソート、選択ソートまで習っています。
0460デフォルトの名無しさん
2007/06/28(木) 20:04:140461デフォルトの名無しさん
2007/06/28(木) 20:43:32[2] 問題文
あるファイルの中にデータとして多くの0と1が書き込まれており、最後の1文字だけがEであるとする。
このとき、0と1の並びに着目し、データを圧縮することを考える。
ここでは、0と1のそれぞれが何個連続して並んでいるかを記録することで圧縮を行う。
たとえば、digit1.datというファイルに
111110000000000000000000000001E
というように0と1が並んでいるとき、
7 1 24 0 1 1
と圧縮できる。このとき圧縮結果に空白を挟むことに注意する。
上記の圧縮方法に従って、任意の0と1から成るデータを圧縮するプログラムを作成せよ。
ただしデータはリダイレクションを使用し、char型変数の1文字ずつ繰り返し世も困れるものとする。
最後には「圧縮完了」と表示のこと。
3] 環境
[3.1] OS:windowsXP
[3.2] cygwin
[3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:C++です。よろしくお願いします
0462デフォルトの名無しさん
2007/06/28(木) 20:51:54[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4437.txt
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限: 29日まで
よろしくお願いします
0463デフォルトの名無しさん
2007/06/28(木) 20:52:00読み込まれる?
0464デフォルトの名無しさん
2007/06/28(木) 20:58:31申し訳ありませんでした。
このソースコードを昇順でソートできるように直しなさい。
という問題です。
0465デフォルトの名無しさん
2007/06/28(木) 21:07:00(1)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int i, sum = 0;
for(i=0;i<7;i++) sum += array[i];
printf("%d", sum);
return 0;
}
0466デフォルトの名無しさん
2007/06/28(木) 21:14:41#include <iostream>
using namespace std;
int main()
{
streambuf *sb = cin.rdbuf();
int c, cc, n;
const char *sep = "";
while ((c = sb->sbumpc()) >= 0 && c != 'E') {
for (n = 1; (cc = sb->sbumpc()) >= 0 && cc == c; ++n) {}
sb->sungetc();
cout << sep << n << " " << static_cast<char>(c);
sep = " ";
}
cout << "\n圧縮完了\n";
}
0467デフォルトの名無しさん
2007/06/28(木) 21:20:17(2)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int array2[7] = {0};
int i;
for(i=0;i<7;i++) array2[i] = array[6-i];
for(i=0;i<7;i++) printf("%d", array[i]);
putchar('\n');
for(i=0;i<7;i++) printf("%d", array2[i]);
return 0;
}
0468453
2007/06/28(木) 21:40:360470デフォルトの名無しさん
2007/06/28(木) 22:45:46(1)
#include <iostream>
#include <math.h>
#define BUF_MAX 64
#define DATA_MAX 128
char datanum=0;
long data[DATA_MAX];
void seikei(char*);
long henkan(char*);
void touroku(long);
void sort();
void output();
0471デフォルトの名無しさん
2007/06/28(木) 22:47:05int main() {
char i, sign, buf[BUF_MAX];
long input;
do {
input = 0;
for(i=0; i<BUF_MAX; i++)
buf[i] = NULL;
printf("input number\n> ");
scanf("%s", buf);
if(buf[0]==45) sign = 1;
else sign = 0;
seikei(buf);
input = henkan(buf);
if(input==0) break;
else if(sign==1) input = 0-input;
touroku(input);
} while(1);
sort();
output();
return 0;
}
0472デフォルトの名無しさん
2007/06/28(木) 22:47:53void seikei(char *buf) {
char i, j, max, str[BUF_MAX];
for(i=0; i<BUF_MAX; i++)
str[i] = NULL;
max = (char)strlen(buf);
for(i=0, j=0; i<max; i++) {
if(!(48>buf[i] && buf[i]<57)) {
str[j] = buf[i]-48;
j++;
}
}
for(i=0; i<BUF_MAX; i++)
buf[i] = str[i];
return;
}
long henkan(char *buf) {
char i, figure;
long input=0;
figure = (char)strlen(buf)-1;
for(i=0; buf[i]!=NULL; i++)
input += buf[i] * pow((double)10, (double)figure-i);
return input;
}
0473デフォルトの名無しさん
2007/06/28(木) 22:49:12void touroku(long input) {
if(datanum<DATA_MAX) {
data[datanum] = input;
datanum++;
}
return;
}
void sort() {
char i, j, higher;
long tmp;
for(i=0; i<datanum; i++) {
for(j=i+1, higher=i; j<datanum; j++) {
if(data[higher]<=data[j]) higher = j;
}
tmp = data[higher];
data[higher] = data[i];
data[i] = tmp;
}
return;
}
0474デフォルトの名無しさん
2007/06/28(木) 22:50:56void output() {
char i;
for(i=0; i<3; i++) {
if(data[i]==NULL) break;
printf("上位%d位: %d\n", i+1, data[i]);
}
for(i=datanum-1; i>(datanum-4); i--) {
if(data[i]==NULL) break;
printf("下位%d位: %d\n", datanum-i, data[i]);
}
}
単純なデータ構造にしたつもり。
殴り書きでsorry
0475デフォルトの名無しさん
2007/06/28(木) 23:19:21[2] 問題文: 8個の配列データa={1,2,4,6,8,4,5,9}の和WAおよび平均値MA
を求めるプログラムを配列およびfor文を用いて作成せよ。
[3] 環境
[3.1] OS:XP
[3.2] Visual studio.2005
[3.3] 言語:C
[4] 期限:6月29日:3時まで
[5] その他の制限:特になし
よろしくお願いします
0476デフォルトの名無しさん
2007/06/28(木) 23:19:3401011010みたいに
日付が4桁4桁になってる
8桁の数字を生成するのはどうするん?
0477デフォルトの名無しさん
2007/06/28(木) 23:24:490478デフォルトの名無しさん
2007/06/28(木) 23:26:16お願いします
0479デフォルトの名無しさん
2007/06/28(木) 23:28:41#include <stdio.h>
int main(void){
double MA;
int i, WA=0;
int a[8] = {1, 2, 4, 6, 8, 4, 5, 9};
for(i=0; i<8; i++){
WA += a[i];
}
MA = WA/8.0;
printf("和 : %d", WA);
printf("平均値 : %lf", MA);
return 0;
}
直接書いてコンパイルとかしてないからエラーでたらおせーてね☆
0480デフォルトの名無しさん
2007/06/28(木) 23:35:04345の結果ってさ、準決勝で早稲田が下になってるやんか、
あれって逆にしてもええのん?
あかんのやったらあかんでええけど、
0481デフォルトの名無しさん
2007/06/28(木) 23:36:28得点と失点を記録するんやね
0482デフォルトの名無しさん
2007/06/29(金) 00:06:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4438.txt
0483デフォルトの名無しさん
2007/06/29(金) 00:08:440484デフォルトの名無しさん
2007/06/29(金) 01:02:030485デフォルトの名無しさん
2007/06/29(金) 01:06:28サンクス。
ただ、素人がここまで書いてしまうと逆に相手に怪しまれると思うのですよ。
問題文を多少屁理屈で変えてもいいので、もう少し短く簡単にして頂ければ幸いです。
加えてもう一問。
[1] 授業単元:C++
[2] 問題文:
メイン関数a,bに任意の値を入力する。
変数aと変数bで加算と乗算を行い計算結果を表示する。
整数の範囲(-2147483648〜2147483648)で正常な計算が行えることを確認する。
実数(float,double)は変数やキャスト等で一切使用しない。
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日の午後
[5] その他の制限:出力にはprintf、入力にはscanfの使用
図々しいことは百も承知ですが、よろしくお願いします。
0486デフォルトの名無しさん
2007/06/29(金) 01:10:38[1]C言語
[2]ファイルを読み込む
I am C.
CAT and ...
を別のファイルに下のように書き込む
1: I am C.
2: CAT and ...
[3.1] OS:Linux
[3.2] gcc 3.4
[3.3] 言語: C
[4]今日の午前中
0487デフォルトの名無しさん
2007/06/29(金) 01:20:49#include <stdio.h>
int main(void) {
FILE *fop,*fsv;
char buf[32];
int ch;
printf("読み込むファイル名を入力 > ");
scanf("%s",buf);
fop=fopen(buf,"r");
if( fop==NULL ) return 1;
printf("書き込むファイル名を入力 > ");
scanf("%s",buf);
fsv=fopen(buf,"w");
if( fsv==NULL ) { fclose(fop); return 1; }
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
}
fclose(fop);
fclose(fsv);
return 0;
}
0488デフォルトの名無しさん
2007/06/29(金) 01:26:08[2] 問題文:http://www.ipsj.or.jp/07editj/promenade/4407.pdf
上記URLの文中「逆方向のスキャンによる枝刈り(P759)」「ビット列の長さによる枝刈り」
の二項を聞いてる素人にも判る様に説明、解説する。という課題を受けました
しかし今まで習った内容とは明らかにレベルが違いすぎるため、
また、周りが自分を含めプログラムはズブの素人ばかりなので全く理解できず、
一同困惑しています
お時間のある方、この範囲のプログラム文の一行一行がどういう機能を果たしているのかを
馬鹿にも判るように解説して頂けないでしょうか?
よろしくお願いします
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語:C++
[4] 期限:[2007年07月01日まで
[5] その他の制限: まったく習っていない段階
0489デフォルトの名無しさん
2007/06/29(金) 01:29:471: 〜
2: 〜
のように数字をつけたいんです、3行とか4行とかにも対応できるように…。
もしよければおねがいします
0490デフォルトの名無しさん
2007/06/29(金) 01:34:37[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4439.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: どちらでも可
[4] 期限: 2007年07月01日23:00まで
[5] その他の制限: なし
0491デフォルトの名無しさん
2007/06/29(金) 01:41:480492デフォルトの名無しさん
2007/06/29(金) 01:53:19もしよければお願いします
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:明日
0493492
2007/06/29(金) 01:59:20abdcdoddooffffoo
↓
abc→1 df→4 o→5
0494デフォルトの名無しさん
2007/06/29(金) 02:01:36>>487 の一部だけ変更。変更部分は↓の一番上と下が一致するところの中
if( fsv==NULL ) { fclose(fop); return 1; }
i=1;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
if( ch=='\n' ) {
i++;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
}
}
fclose(fop);
0495デフォルトの名無しさん
2007/06/29(金) 02:06:46fprintf(fsv,"%d:",ch); < の2箇所を
fprintf(fsv,"%d:",i); < ,i に変更
0496デフォルトの名無しさん
2007/06/29(金) 02:07:39fprintf(fsv,"%d:",ch); < これを って意味ね。出力結果がおかしいから分かるだろうけど。
0497デフォルトの名無しさん
2007/06/29(金) 02:31:05[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.
◎以下を参考の事
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数
偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数
main関数ではif文を使って正しく動いているかどうか
チェックしてください.
※戻り値にはboolを利用してもOKです
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年6月29日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
0498デフォルトの名無しさん
2007/06/29(金) 02:33:07int isOdd(int i){return i%2;}
int isEven(int i){return i%2==0;}
0499492
2007/06/29(金) 05:10:44是非、教えてください、お願いします。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
ほかの例は
abdcdoddooffffoo
の場合
abc→1 df→4 o→5
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:5時間後くらい
0501デフォルトの名無しさん
2007/06/29(金) 06:03:57#include <stdio.h>
int main(void)
{
int c, nc[256] = {0}, nmax = 0, n, found;
while ((c = getchar()) != EOF) {
nc[c]++;
if (nc[c] > nmax)
nmax = nc[c];
}
for (n = 1; n <= nmax; n++) {
found = 0;
for (c = 0; c < 256; c++) {
if (nc[c] == n) {
putchar(c);
found = 1;
}
}
if (found)
printf("→%d", n);
}
printf("\n");
return 0;
}
0502492
2007/06/29(金) 06:27:59けどコンパイルしてみたらエラーがたくさん表示されて…。
あとファイルから読み込んで結果を画面に表示してファイルに書き込む
プログラムをつくりたいです。またもしよければアドバイスおねがいします
0503デフォルトの名無しさん
2007/06/29(金) 07:02:160505デフォルトの名無しさん
2007/06/29(金) 07:24:24#include <stdio.h>
int main(void)
{
int c, nc[256] = {0}, nmax = 0, n, found;
while ((c = getchar()) != EOF) {
nc[c]++;
if (nc[c] > nmax)
nmax = nc[c];
}
for (n = 1; n <= nmax; n++) {
found = 0;
for (c = 0; c < 256; c++) {
if (nc[c] == n) {
putchar(c);
found = 1;
}
}
if (found)
printf("→%d", n);
}
printf("\n");
return 0;
}
0506492
2007/06/29(金) 07:32:56これだけだと動きませんでしたので・・・
0507デフォルトの名無しさん
2007/06/29(金) 07:38:07題意が良くわからないんだが、要するに文字列の中の各アルファベットの数を数えろってことかね?
0508デフォルトの名無しさん
2007/06/29(金) 07:39:33出てきた順番でもないし、アルファベット順でも個数順でもない。
0509492
2007/06/29(金) 07:44:45cccchaaの例はちょっと間違って書いてましたすいません…。
もうひとつ例としては
aaabcddddee
の場合は
a→3 bcd→4 e→2
です。何度もすいません…アルゴリズムがいまいち思いつかないので…。
0510デフォルトの名無しさん
2007/06/29(金) 08:01:13もう少しで出来そうだが、そこんとこで手詰まり中。まぁ、なんとかなるさ。
0511デフォルトの名無しさん
2007/06/29(金) 08:09:25ソースコードを昇順ソートできるようにするという問題です。
何度もすみません。
0512デフォルトの名無しさん
2007/06/29(金) 08:23:460513デフォルトの名無しさん
2007/06/29(金) 09:13:21汚いソースだが我慢せい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4441.c
0514デフォルトの名無しさん
2007/06/29(金) 09:15:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4442.c
0515デフォルトの名無しさん
2007/06/29(金) 09:27:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4443.c
0516デフォルトの名無しさん
2007/06/29(金) 09:27:580517459
2007/06/29(金) 12:12:43順を追って試してるんですがうまくいかないです・・・
0518デフォルトの名無しさん
2007/06/29(金) 12:41:20[2] 問題文(含コード&リンク):
↓*ndPtrPtr が指すリストの n 番目のノード(ノード番号は 0 番から始まる)を削除する.
削除したノードに割り当てられていたメモリは解放される.ただし,リスト中のノード数が
n 以下で,n番目のノードがない場合には,何もしない.
戻り値は,n番目のノードが削除できたときには SUCCESS,
n番目のノードが存在せず,削除できなかったときには FAILURE を返す.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4444.c
上のnodeInsertを改良して,指定された挿入場所のインデックス n が負のときには,
新しく挿入されたノードがリストの末尾から数えて -n 番目になるようにせよ.
(たとえば,n == -1 のときには,末尾に挿入される)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:月曜日まで
[5] その他の制限: なし
よろしくお願いします。
0519デフォルトの名無しさん
2007/06/29(金) 12:43:12[2] 問題文(含コード&リンク):
3d^2x/dt^2+dx/dt+2x=4
x(t=0)=0
dx/dt(t=0)=0
上記の微分方程式をルンゲークッタ法を用いて解け
[3] 環境
[3.1] OS: windowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C言語
[4] 期限: ([2007年7月1日まで
[5] その他の制限: なし
お願いします
0520デフォルトの名無しさん
2007/06/29(金) 12:58:22[2] 問題文(含コード&リンク):ふたつあります。
�@文字列strをno回だけ連続して表示する関数
void put_stringn(const char str[], int no){/*…*/}を作成せよ。
�A以下に示した関数をもとにして、文字列を後ろから逆に表示する("SEC"を受けたら"CES"と表示する)関数put_rstringを作成せよ。
#include <stdio.h>
void put_string(const char str[])
{
unsigned i = 0;
while(str[i])
putchar(str[i++]);
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar(!\n!);
return(0);
}
[3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:今日中なるべく早く
[5] その他の制限: 明解C言語入門編テキスト使用
お手数おかけしますがどうかよろしくお願いします。
0521デフォルトの名無しさん
2007/06/29(金) 13:03:46ttp://www.bohyoh.com/Books/MeikaiA01/
これか?
0522デフォルトの名無しさん
2007/06/29(金) 13:04:27そうです。
0523デフォルトの名無しさん
2007/06/29(金) 13:04:39[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4262.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4381.txt
上記2つのプログラムのクラス(設計図)のインスタンス生成部分をnew演算子を用いた
ものに修正しなさい(すべての個所)。もちろんこのインスタンスをdelete演算子
で削除することを忘れないこと。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年7月1日12:00まで]
[5] その他の制限:特になし
よろしくお願いします。
0524デフォルトの名無しさん
2007/06/29(金) 13:06:42#include <string.h>
void put_string(const char str[])
{
unsigned i = strlen(str)-1;
while(str[i])
putchar(str[i--]);
}
0525デフォルトの名無しさん
2007/06/29(金) 13:09:21#include <stdio.h>
#include <string.h>
void put_string(const char str[]) {
unsigned i = strlen(str)-1;
while(str[i])
putchar(str[i--]);
}
int main(void) {
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
put_string(str);
putchar('\n');
return(0);
}
0526デフォルトの名無しさん
2007/06/29(金) 13:15:04ありがとうございます。
void put_stringをvoid put_rstringにすればいいんですかね?#include <string.h>て
習っていないのですが…
もしよろしければ問題�@のほうもよろしくお願いします
0527デフォルトの名無しさん
2007/06/29(金) 13:23:43[1] 授業単元:C++
[2] 問題文:
#include <stdio.h>
#define NUM4
#define NAME_LENGTH 20
struct seiseki{
char name[NAME_LENGTH];
int jpn;
int eng;
int math;
/*A*/
}
int main(void){
struct seiseki i06[NUM];
double max;
int max_i;
int i;
for(i=0;i<NUM;i++){
printf("%d番目の名前を入れてください",i);
scanf("%s",i06[i].name);
printf("%d番目の国語の成績を入れてください",i);
scanf("%d",i06[i].jpn);
printf("%d番目の英語の成績を入れてください",i);
scanf("%d",i06[i].eng);
printf("%d番目の数学の成績を入れてください",i);
scanf("%d",i06[i].math);
}
/*B*/
}
0528デフォルトの名無しさん
2007/06/29(金) 13:31:36#include <stdio.h>
void put_stringn(const char str[], int no) {
int i;
for(i=0; i<no; i++)
printf("%s \n",str);
}
void put_string(const char str[]) {
int i = 0;
while(str[i]!='\0') i++;
while(i-->0)
putchar(str[i]);
}
int main(void) {
char str[100];
int no;
printf("文字列を入力してください:");
scanf("%s", str);
printf("�@文字列strをno回だけ連続して表示する関数 no > ");
scanf("%d",&no);
put_stringn(str,no);
printf("�A以下に示した関数をもとにして、文字列を後ろから逆に表示\n");
put_string(str);
putchar('\n');
return(0);
}
0529デフォルトの名無しさん
2007/06/29(金) 13:31:59また、成績のAランク(成績が80以上100以下)の個数を格納する変数に変更して、Aランクの数が一番多い学生の名前を出力するプログラムを作成せよ。/*A*/にAランクの数
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日
[5] その他:制限 構造体 他にはとくになかったです。
よろしくお願いします。
0530デフォルトの名無しさん
2007/06/29(金) 13:34:25ありがとうございます。
すみません、�@と�Aの問題は別物なんです
ややこしくかいてしまってすみません
>>528にかいていただいたものをどうわければいいのでしょうか…
本当にすみませんorz
0531デフォルトの名無しさん
2007/06/29(金) 13:37:27よろしくお願いしますm(__)m
0532デフォルトの名無しさん
2007/06/29(金) 13:39:471だけなら2に該当する部分を消して、1に必要なライブラリとmainの中を残せば良い。
2だけにするなら1のを消せして2に必要なライブラリと main の中を残せば良い。
0533デフォルトの名無しさん
2007/06/29(金) 13:40:56似ても焼いても喰えないようなバグだらけのプログラムを、どうやって拡張したら動くようになるんでしょうか。
0534デフォルトの名無しさん
2007/06/29(金) 13:43:41[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.また main関数ではif文を使って正しく動いているかどうかチェックしてください.
◎以下でやること
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数
偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数
※戻り値にはboolを利用してもOKです
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年6月30日02時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
0535デフォルトの名無しさん
2007/06/29(金) 13:45:48ということは、1なら
#include <stdio.h>
void put_stringn(const char str[], int no) {
int i;
for(i=0; i<no; i++)
printf("%s \n",str);
}
int main(void) {
char str[100];
int no;
printf("文字列を入力してください:");
scanf("%s", str);
printf("�@文字列strをno回だけ連続して表示する関数 no > ");
scanf("%d",&no);
put_stringn(str,no);
putchar('\n');
return(0);
}
なのでしょうか?
0536デフォルトの名無しさん
2007/06/29(金) 13:46:48必要なものを用いて実行結果を見て判断してみ
0537デフォルトの名無しさん
2007/06/29(金) 13:48:06>>535の続きです
で、2なら
void put_string(const char str[]) {
int i = 0;
while(str[i]!='\0') i++;
while(i-->0)
putchar(str[i]);
}
int main(void) {
char str[100];
int no;
printf("�A以下に示した関数をもとにして、文字列を後ろから逆に表示\n");
put_string(str);
putchar('\n');
return(0);
}
になるってことでしょうか?
0538デフォルトの名無しさん
2007/06/29(金) 13:52:33int no; は要らないかと
0539デフォルトの名無しさん
2007/06/29(金) 13:54:49#include <stdio.h>
#define NUM 4
#define NAME_LENGTH 20
struct seiseki{
char name[NAME_LENGTH];
int jpn;
int eng;
int math;
/*A*/ bool operator<(seiseki const & foo) const {return jpn + eng + math < foo.jpn + foo.eng + foo.math;}
};
#include <algorithm>
int main(void)
{
struct seiseki i06[NUM];
double max;
int max_i;
int i;
for(i=0;i<NUM;i++){
printf("%d番目の名前を入れてください",i);
scanf("%s",i06[i].name);
printf("%d番目の国語の成績を入れてください",i);
scanf("%d", & i06[i].jpn);
printf("%d番目の英語の成績を入れてください",i);
scanf("%d", & i06[i].eng);
printf("%d番目の数学の成績を入れてください",i);
scanf("%d", & i06[i].math);
}
/*B*/ seiseki * p = std::max_element(i06, i06 + NUM); printf("%s\n", p->name); return 0;
}
0540デフォルトの名無しさん
2007/06/29(金) 13:56:140541デフォルトの名無しさん
2007/06/29(金) 13:59:392なら
void put_string(const char str[]) {
int i = 0;
while(str[i]!='\0') i++;
while(i-->0)
putchar(str[i]);
}
int main(void) {
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
printf("�A以下に示した関数をもとにして、文字列を後ろから逆に表示\n");
put_string(str);
putchar('\n');
return(0);
}
の
printf("�A以下に示した関数をもとにして、文字列を後ろから逆に表示\n"); がよくわからないのですが…orz
0542デフォルトの名無しさん
2007/06/29(金) 14:05:45要る要らないは自分で判断して決めなさい。
0543デフォルトの名無しさん
2007/06/29(金) 14:07:06わかりました。実行してみます。
また何かありましたら是非解答よろしくおねがいします。ありがとうございました。
0544デフォルトの名無しさん
2007/06/29(金) 14:26:38>>518
をお願いします
0545デフォルトの名無しさん
2007/06/29(金) 14:51:51[2] 問題:
#define ON 1
#define OFF 0
をenumで定義しそのenumをtypedefで定義して、その型で変数を宣言する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語: C言語
[4] 期限: 7月6日
[5] その他の制限: 特になし
0546デフォルトの名無しさん
2007/06/29(金) 15:23:05OnOff_t variable;
0547デフォルトの名無しさん
2007/06/29(金) 15:51:41void put_stringn(const char str[], int no){/*…*/}を作成せよ。
#include <stdio.h>
void put_stringn(const char str[], int no) {
int i;
for(i=0; i<no; i++)
printf("%s \n",str);
}
int main(void) {
char str[100];
int no;
printf("文字列を入力してください:");
scanf("%s", str);
printf("�@文字列strをno回だけ連続して表示する関数 no > ");
scanf("%d",&no);
put_stringn(str,no);
putchar('\n');
return(0);
}
これでやってみたのですがセグメントエラーがでてしまいましたorz
アドバイスお願いします
0548デフォルトの名無しさん
2007/06/29(金) 16:02:09なんのこっちゃ?何か問題でも?ところで、�@ < これは使うのはやめようよ。
機種依存文字はプログラミングに限らずタブーだよ。
0549デフォルトの名無しさん
2007/06/29(金) 16:16:190550デフォルトの名無しさん
2007/06/29(金) 16:16:35[2] このディレクトリにソースファイルは,与えられた整数値 n, r に対する順列 nPr, 組合せ nCr,
重複組合せ nHr をそれぞれ計算して表示するプログラムのためのものである.重複組合せを計算する関数 homogeneous
の定義を新たに homogeneous.c に記述すると共に,ヘッダファイル prototypes.h の内容も適切に修正せよ.
但し,重複組合せ(同次積ともいう)は n 種類のものから重複を許して r 回選ぶ組合せの数※ であり,
組合せ nCrとの間に以下の関係がある.
nHr = n+r-1Cr
このプログラムを適切にコンパイルするための Makefile を書け.但し,実行ファイルの名前は pchとする.
また,make と入力すると 実行ファイル pch が作成され, make clean と入力すると オブジェクトファイルと
実行ファイルが消去される ようにしておくこと.
0551デフォルトの名無しさん
2007/06/29(金) 16:19:32prototypes.h
/* prototypes.h */
int permutation(int, int);
int combination(int, int);
main.c
/* main.c */
#include <stdio.h>
#include "prototypes.h"
/* 入力値 n, r に関する順列 nPr と組合せ nCr を計算 */
int main(void)
{
int n = 0, r = 0;
scanf("%d", &n);
scanf("%d", &r);
printf("%dP%d = %d\n", n, r, permutation(n, r));
printf("%dC%d = %d\n", n, r, combination(n, r));
return (0);
}
0552デフォルトの名無しさん
2007/06/29(金) 16:22:50permutation.c
/* permutation.c */
#include "prototypes.h"
/* 順列 nPr = n! / (n - r)! を計算する関数 */
int permutation(int n, int r)
{
int i, x = 1;
for (i = n; i > n - r; i--) {
x *= i;
}
return (x);
}
combination.c
/* combination.c */
#include "prototypes.h"
/* 組合せ nCr = n! / (n - r)! / r! = nPr / r! を計算する関数 */
int combination(int n, int r)
{
int i, x = 1;
for (i = 2; i <= r; i++) {
x *= i;
}
return (permutation(n, r) / x);
0553デフォルトの名無しさん
2007/06/29(金) 16:24:13[3.1] Unix
[3.2] gcc
[3.3] c
[4] 7月6日(金)
長くなってすみません。よろしくお願いします。
0554デフォルトの名無しさん
2007/06/29(金) 16:44:41ちょい自信ないが参考になれば・・・。
int nodeDelete(node_t **ndPtrPtr, int n)
{
int i;
node_t * ndPtr;
if (n < 0) return FAILURE;
for (i = 0; i < n-1 && (*ndPtrPtr)->next != NULL; i++) {
ndPtrPtr = &((*ndPtrPtr)->next);
}
if ((i != n) || ((*ndPtrPtr)->next == NULL)) return FAILURE;
ndPtr = (*ndPtrPtr)->next;
if (ndPtr->next == NULL) (*ndPtrPtr)->next = NULL;
else (*ndPtrPtr)->next = ndPtr->next;
delete ndPtr;
return SUCCESS;
}
0555デフォルトの名無しさん
2007/06/29(金) 16:45:33{
int i;
node_t * ndPtr, * ndChk;
for (i = 0, ndChk=*ndPtrPtr; ndChk != NULL; i++);
ndChk = ndChk->next;
if (n < 0) n += i;
for (i = 0; i < n && *ndPtrPtr != NULL; i++) {
ndPtrPtr = &((*ndPtrPtr)->next);
}
if (i < n) return FAILURE;
ndPtr = nodeNew(dt, *ndPtrPtr);
if (ndPtr == NULL) return FAILURE;
*ndPtrPtr = ndPtr;
return SUCCESS;
}
0556デフォルトの名無しさん
2007/06/29(金) 16:55:16/*A*/int sum;
double a;
/*B*/
for(i=0;i<NUM;i++){
i06[i].sum=06[i].jpn+i06[i].eng+i06[i].math;
}
for(i=0;i<NUM;i++){
i06[i].a=(double)i06[i].sum/3;}
max_i=0;
max=i06[0].a;
for(i=0;i<NUM;i++){
if(max<i06[i].a){
max=i06[i].a;
max_i=i;}
}
printf("最高得点は%sさんです。\n",i06[max_i].name,max);
return(0);
}
0557デフォルトの名無しさん
2007/06/29(金) 17:00:26何故に平均点で比較しているんだ?
0558デフォルトの名無しさん
2007/06/29(金) 19:01:340559デフォルトの名無しさん
2007/06/29(金) 19:10:08[2] http://jubilo.cis.ibaraki.ac.jp/~isemba/PROGRAM/CPROG/314.pdf
の問題2.1考え方1(p211.c)のelse節の中がわかりません。
再帰関数を使うのかなあと、でもそれから考えが進みません。
よろしくお願いします。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc5.5
[3.3] 言語: C
[4] 期限: 無期限
0560デフォルトの名無しさん
2007/06/29(金) 19:12:04自己レス訂正
× if (n < 0) n += i;
○ if (n+i < 0) return FAILURE;
else if (n < 0) n += i;
こうしたほうがよさそうだな。
0561デフォルトの名無しさん
2007/06/29(金) 19:17:420562デフォルトの名無しさん
2007/06/29(金) 19:34:27[2] 問題:
1.10進数の整数a、bを2進数の整数にしてそれぞれをc、dとする。
2.10進数の整数a、bを8進数の整数にしてそれぞれをf、gとする。
〈追記〉
cとd、fとgはそれぞれで計算出来るものとする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語: C言語
[4] 期限: 7月3日
[5] その他の制限:特に無し
0563デフォルトの名無しさん
2007/06/29(金) 19:36:260564デフォルトの名無しさん
2007/06/29(金) 19:50:52y := x
0565デフォルトの名無しさん
2007/06/29(金) 19:51:28ndPtrPtr = &((*ndPtrPtr)->next); は面白いな。
ついでに nodeNew関数の中身もさらしてくれい。
0566デフォルトの名無しさん
2007/06/29(金) 19:57:02平然とNULLをdereferenceしそうに見えるな
そのコード
0567デフォルトの名無しさん
2007/06/29(金) 20:08:35#include <stdio.h>
#include <math.h>
int main(void)
{
int x = 7;
printf("逆から嫁:");
while (x > 0) {
printf("%d", (int)fmod(x, 2));
/*printf("%d", x % 2);*/
x /= 2;
}
return 0;
}
0568デフォルトの名無しさん
2007/06/29(金) 20:13:04[2] 問題文(含コード&リンク)
f=10 t=0.01の条件で設計した低域通過フィルタを用いて信号
x(n)=sin(2π×5nt)+sin(2π×20nt), n=0,1,…,255
から信号を抽出せよ。
という問題なのですが、
for分でxとyを計算すればいいと言われました。
a1=2*(c*c-1)/c*c+√2*c +1
a2=c*c-√2*c +1/c*c+√2*c +1
b0=b2=c*c/c*c+√2c +1
b1=2*b0
c=w/2
w=2π*f*t
が式らしいです。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C
[4] 期限: 7月1日 13:00まで
[5] その他の制限: プログラムに関してはfor分くらいしか習ってないので、できれば初心者程度でよろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4445.txt
ここまではやりました、エラーになってうまくうごきません。
0569デフォルトの名無しさん
2007/06/29(金) 20:29:02>>555さん
本当にありがとうございます!!!
自分の家からでは出来ないので、学校に行かないと正しく動くか
確認できませんorz
>>565さん
↓nodeNew関数です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4446.txt
0570デフォルトの名無しさん
2007/06/29(金) 20:38:00問題文はこれで全部?
0571デフォルトの名無しさん
2007/06/29(金) 20:43:39上の方の計算箇所いくつか間違ってるが、とりあえず治したのはこれ。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323826
#define N 256
int main(void)
{
int i, n, f=10;
double w, c, b0, b1, b2, a1, a2, t=0.01;
double x[N], y[N];
for(i=0; i<N; i++)
x[i] = sin(2*PI*5*i*t)+sin(2*PI*20*i*t);
w = 2*PI*f*t;
c = w/(2.0);
b0 = b2 = (c*c/c*c) + sqrt(2*c) + 1.0;
b1 = 2.0 * b0;
a1 = (2.0*((c*(c-1))/c*c)) + sqrt(2*c) + 1.0;
a2 = (c*c) - sqrt(2*c) + (1.0/c*c) - sqrt(2*c) + 1.0;
for(n=0; n<N; n++){
y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]; // ←n=0の場合を考えてみるとわかるが、ここでy[n-1]とy[n-2]は指定できない
printf("y[%d]: %lf\n", n, y[n]);
}
return(0);
}
コンパイル通らないのは最後のが悪いな。
問題文が不足してるというか、最後の計算が俺には理解できなかった。スマン
0572デフォルトの名無しさん
2007/06/29(金) 20:57:16ありがとうございます。明日学校に行って質問してきます!
0573デフォルトの名無しさん
2007/06/29(金) 20:57:23for(n=0; n<N; n++) {
if (n==0) {
x0 = x[0];
x1 = 0;
x2 = 0;
y1 = 0;
y2 = 0;
} else if (n==1) {
x0 = x[1];
x1 = x[0];
x2 = 0;
y1 = y[0];
y2 = 0;
} else {
x0 = x[n];
x1 = x[n-1];
x2 = x[n-2];
y1 = y[n-1];
y2 = y[n-2];
}
y[n] = b0*x0 + b1*x1 + b2*x2 - a1*y1 - a2*y2;
printf("y[%d]: %lf\n", n, y[n]);
}
0574デフォルトの名無しさん
2007/06/29(金) 20:59:33>>571 double x[N], y[N];
→ double x[N], y[N], x0, x1, x2, y1, y2;
0575568
2007/06/29(金) 21:01:46y(n)=b0x(n)+b1x(n-1)+b2x(n-2)-a1y(n-1)-a2y(n-2)
を利用するとプリントに書いてありました!プリントのままなので*は省略しています・・・。すみませんorz
0576デフォルトの名無しさん
2007/06/29(金) 21:22:02[2] 問題文(含コード&リンク):
n×n行列Ann(nは奇数)を考える。
この行列の中心(3×3行列だったら、A22)
からの距離を行方向、列方向についてそれぞれ求めるプログラムを作成せよ
たとえば3×3行列でA11での行方向の距離は1、列方向の距離は1である
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: ポインタは習ってません
お願いします
0577411
2007/06/29(金) 21:29:19[1] 授業単元:c
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4448.txt
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C
[4] 期限: 7月1日 まで
[5] その他の制限: 再帰法を習ったばかり
0578デフォルトの名無しさん
2007/06/29(金) 21:32:38すいません
お願いしますm(__)m
0579デフォルトの名無しさん
2007/06/29(金) 21:35:38n×n行列だと中心からの距離は行方向も列方向も一緒じゃない?
0580デフォルトの名無しさん
2007/06/29(金) 21:37:47□□□□□
□□□□□
□□□□□
□□■□□
□□□□□
■は行方向には1だけど、列は同じじゃないですか?
0581デフォルトの名無しさん
2007/06/29(金) 21:40:30それにとてもよく似た問題がこのスレで既出。>>353かな。
0582デフォルトの名無しさん
2007/06/29(金) 21:41:38Axy
x-(n/2+1), y-(n/2+1)
じゃダメなん?
0583デフォルトの名無しさん
2007/06/29(金) 21:42:21あぁ、自分で位置を指定するのね。
>>576を読んだら中心から外枠の距離を求めたいように読めた、スマソ。
0584デフォルトの名無しさん
2007/06/29(金) 21:53:40それも自分です…
似た問題が次々と出て来るんです(;_;)
0585デフォルトの名無しさん
2007/06/29(金) 22:01:33こんなん?(´・ω・`)
#include<stdio.h>
int Length(int center,int x)
{
x-=center;
if(x<0)x=-x;
return x;
}
int main()
{
int center;
int n=0,gyou,retu;
printf("nの値を入力してください>>");
while(n%2==0)
scanf("%d",&n);
printf("測定する行の値を入力したください>>");
scanf("%d",&gyou);
printf("測定する列の値を入力してください>>");
scanf("%d",&retu);
center=(int)n/2+1;
gyou=Length(center,gyou);
retu=Length(center,retu);
printf("中心からの行方向の距離:%d\n",gyou);
printf("中心からの列方向の距離:%d\n",retu);
return 0;
}
0586デフォルトの名無しさん
2007/06/29(金) 22:03:15そんなかんじです!どうも!
0588デフォルトの名無しさん
2007/06/29(金) 22:06:41似た問題がたくさん出て、答えてもらったならいい加減自分で考えてもいいんじゃない?
そういうことは言うなと>>1に書いてるけどさ。
0589デフォルトの名無しさん
2007/06/29(金) 22:12:44そうですよね…
自分で頑張ってみます
0590デフォルトの名無しさん
2007/06/29(金) 22:18:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4449.c
0591デフォルトの名無しさん
2007/06/29(金) 22:31:16質問者が質問し難くなるような事言うなよ。
マルチ、テンプレ無視、DQN何でも良いじゃないか
気に入らない質問は無視、やりたい問題だけ黙ってやればいい。
ここに投下される問題を解くのが趣味になってるから、問題が減るのは困る。
0592デフォルトの名無しさん
2007/06/29(金) 22:31:33[1] 授業単元:C++言語
[2] 問題文(含コード&リンク):
入力の最後の10行以外を除いてそのまま出力せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 来週いっぱい
[5] その他の制限: とくになし
0593デフォルトの名無しさん
2007/06/29(金) 22:32:58いや、意味が分からん。具体的な実行例くらい書いてちょうだいw
0594デフォルトの名無しさん
2007/06/29(金) 22:37:331行目から9999999999999990行目を出力します
0595デフォルトの名無しさん
2007/06/29(金) 22:43:2610000000000000000行のデータよろ
0596デフォルトの名無しさん
2007/06/29(金) 22:43:40んで、そのデータ?の入力はどこで行い、どこへ10行を除いたものを出力するん?
0597デフォルトの名無しさん
2007/06/29(金) 22:47:18$ seq 1 10000000000000000 >data.txt
を実行してください。
0598デフォルトの名無しさん
2007/06/29(金) 22:50:10入力は標準入力から
出力は標準出力へ
お願いします
0599デフォルトの名無しさん
2007/06/29(金) 22:52:57>>592
10行以下だった場合どうするの?
0600デフォルトの名無しさん
2007/06/29(金) 22:53:48出力なしでお願いします。
0601デフォルトの名無しさん
2007/06/29(金) 23:09:18なにも考えずに普通に
#include<iostream>
#include<queue>
#include<string>
int main(){
std::queue<std::string>q;
std::string line;
for(int i=0;i<10;++i){
if(!getline(std::cin,line))return 0;
q.push(line);
}
while(getline(std::cin,line)){
std::cout << q.front() << '\n';
q.pop();
q.push(line);
}
}
0602デフォルトの名無しさん
2007/06/29(金) 23:12:39ありがとうございます。
0603デフォルトの名無しさん
2007/06/29(金) 23:14:23読み込んだら削除するようにしてあるっす。それがだめならもう知らないぽ。
#include <iostream>
using namespace std;
int main() {
int ch,cnt;
char *fname="tmptmptmp";
FILE *tmpf;
tmpf=fopen(fname,"w");
if(tmpf==NULL) return 1;
cnt=1;
while( (ch=getchar()) != EOF ) {
if( ch=='\n') cnt++;
fputc(ch,tmpf);
}
fclose(tmpf);
tmpf=fopen(fname,"r");
while( cnt>10 ) {
ch=fgetc(tmpf);
putchar(ch);
if( ch=='\n') cnt--;
}
remove(fname);
fclose(tmpf);
return 0;
}
0604デフォルトの名無しさん
2007/06/29(金) 23:16:50#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char buff[256], data[11][256];
int i = 0;
while(fgets(buff,256,stdin) != NULL)
{
if(i>10) printf("%s",data[i-11]);
if(i>21) i=11;
strcpy(data[i%11],buff);
i++;
}
return 0;
}
お酒入ってるからなんかわけわからんことになった
0605デフォルトの名無しさん
2007/06/29(金) 23:17:59[2] 問題文(含コード&リンク):
データファイルに20個以上100個以下の整数データが格納されている。
このファイルからデータを読み込んで、数値の大きいほうから10個(10個
目に同じ数値が複数個あっても10個)までを、大きい順に出力せよ。
[実行例]
26 25 24 23 21 20 20 19 19 18
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 7月2日
[5] その他の制限: とくになし
よろしくお願いします。
0606デフォルトの名無しさん
2007/06/29(金) 23:19:00先生に「そういうときはtmpfile()を使え、ルーク」と言われてしまいます。
それと、cntがたぶんオーバーフローしてしまいます。
0607デフォルトの名無しさん
2007/06/29(金) 23:20:03[2] 問題文(含コード&リンク):
次のプログラムを実行し、
結果と内容を詳しく説明せよ。#include<stdio.h>
#include<string.h>
main(){ char c[3];
char s1[]="abcdefghijklmnopqrstuvwxyz"
char s2 [100]; s2[0]='\0';
printf("s1 inital value:\"%s\"\n",s1)
printf("s2 inital value:\"%s\"\n",s2)
if cstrcmp(s1,s2)==0){ printf("s1==s2\n");}
else{printf("s!=s2\n");}
printf("Push ENTER to proceed.");
fgets(c,2,stdin); strcpy(s2,s1);
printf("s1 current value:\"%s\"\n",s1);
printf("s2 current value:\"%s\"\n",s2);
if(strcmp(s1,s2)==0) { printf("s1==s2\n");}
else{prinf("s1!=s2\n");} }
実行は出来ていますが、内容を詳しく説明できません。
タイプミスあったらごめんなさい
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2007年06月30日まで
[5]特になし
0608デフォルトの名無しさん
2007/06/29(金) 23:24:32#include <iostream>
using namespace std;
int main() {
int ch,cnt;
FILE *tmpf=tmpfile();
if(tmpf==NULL) return 1;
cnt=1;
while( (ch=getchar()) != EOF ) {
if( ch=='\n') cnt++;
fputc(ch,tmpf);
}
rewind(tmpf);
while( cnt>10 ) {
ch=fgetc(tmpf);
putchar(ch);
if( ch=='\n') cnt--;
}
fclose(tmpf);
return 0;
}
0609デフォルトの名無しさん
2007/06/29(金) 23:25:25- if cstrcmp(s1,s2)==0){ printf("s1==s2\n");}
+ if (strcmp(s1,s2)==0){ printf)"s1==s2\n2);}
かな
0610609
2007/06/29(金) 23:26:240611デフォルトの名無しさん
2007/06/29(金) 23:30:35よくわかりませんが、1個ずれているような気がします。
0612デフォルトの名無しさん
2007/06/29(金) 23:31:31やはりcntがオーバーフローしてしまいます。
0613デフォルトの名無しさん
2007/06/29(金) 23:35:51if(i>21) i=11;→if(i>20) i=10;
他はしらね
0614デフォルトの名無しさん
2007/06/29(金) 23:36:59課題なんですが、なんでENTERを押すと次が出てくるかなどを説明する
見たいです。
先生が言うには3つ書けと言っていました。
0615デフォルトの名無しさん
2007/06/29(金) 23:40:17さも自分はそうしない、それは俺的には間違っているみたいな。うざいね、こういうの。
論より証拠。ソース書いてお前の意見を示せよ。
0616デフォルトの名無しさん
2007/06/29(金) 23:45:36tmpfile()が使えるからといって 使わなければいけない、自分で実装してはいけない
なんて法律はありません。自分は知ってますよ〜ってアピールならよそでやれ。
0617592
2007/06/29(金) 23:46:59すみません。それを書いたのは両方自分です。
10000000000000000行のデータなので、自分の環境では確実に
オーバーフローすると思いましたが、間違っているのでしょうか。
0618デフォルトの名無しさん
2007/06/29(金) 23:50:12動かないアホ解答であれば無視しろ
なんで質問者が回答者にケチつけてるの?
0620デフォルトの名無しさん
2007/06/29(金) 23:51:30とりあえず条件が後出し後出しだったり、下手に条件を限定するのはやり辛い。
0621デフォルトの名無しさん
2007/06/29(金) 23:51:50と脳内変換してください。ちょっと飲みすぎたかも
0622デフォルトの名無しさん
2007/06/29(金) 23:54:38こっちもやってみるが。
0623デフォルトの名無しさん
2007/06/29(金) 23:54:51標準入出力ならリダイレクトで任意のファイルを与えることができるし
パイプラインでフィルターとして使うことも出来るからだと
先生は言っていました。
0624デフォルトの名無しさん
2007/06/29(金) 23:55:22そのデータはお前の環境のどこに存在する?
行指向のデータということは少なくとも行区切り子の情報が1行ごとに1個存在するんだよな?
0625デフォルトの名無しさん
2007/06/29(金) 23:55:53いえ、最初に回答していただいた>>601で全く問題なさそうです。
そう書いておけばよかったかしら。
0626デフォルトの名無しさん
2007/06/29(金) 23:57:26え?ええっ?そういう条件?最初の10行を飛ばせってこと???
0627デフォルトの名無しさん
2007/06/29(金) 23:57:55>>601をよく読めよ
0628デフォルトの名無しさん
2007/06/29(金) 23:58:21fgets(c, 2, stdin); は主人の指示がでるまで待機するメイドの様態。
-―-
. ´ ` 、
' , i l ! ヽ ヽ
〈\ .〃/‐リノ ノリ)ヘヽ.\`
,' ヽ \ /,ィ'"|` f'!ヽト、!_ヽ! / ̄ ̄ ̄ ̄ ̄
l//, ゙{0))! ヒ1! ,l.!,. l、 | | |
' /l/` リl、"´ !7 イゝ| | < Push ENTER to proceed.
'´ l/_i_リ,! r__´ リ r‐ '、 |
'「 , ‐ゝ>r'l〉く.、 {` ト、 \_____
く,`l ,.`Kト〉ヾ ヽ,TT.ソ
ゝL ヾ.l、〉,!、' ` ' }/
,. -\ ヽ'ヽ 〉ーr'
! ー〉 ヽ __/ | |
`>/ 》ー-‐'l | |
く./ くj l} | |
// 「i. k | |
,.' / >! l} | |
j / r'j i1 | |
^!,' k1 k' | |
0629デフォルトの名無しさん
2007/06/29(金) 23:58:23>>601を実行して標準入力でやってみろよ
0631デフォルトの名無しさん
2007/06/30(土) 00:00:510633デフォルトの名無しさん
2007/06/30(土) 00:04:20実行なんかしなくていいからよく読め
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
0634デフォルトの名無しさん
2007/06/30(土) 00:04:47fgets(c, 2, stdin); を scanf("%s", c); に変えてみると、
ENTERを押しても処理は進まない。
これはfgetsが、scanfなら食べ残す改行コード'\n'(コマンドプロンプトでENTERを押すと発生)
も食べてしまう卑しい輩であるから。
0635デフォルトの名無しさん
2007/06/30(土) 00:06:52うるせーよ偉そうに、実行してみりゃ分かるだろ。入力の合間に出力だろ?
それで良いならそれでやってるわボケが うぜぇよ tmpfile()野郎w
0636デフォルトの名無しさん
2007/06/30(土) 00:07:34fgets(c, 2, stdin); 以降に次の処理が書かれているから。
0637デフォルトの名無しさん
2007/06/30(土) 00:07:55>>629
実行なんかしなくていいからよく読め
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
↑三流プログラマーでも下を見て偉そうな態度がとれるという典型的な例w
0638デフォルトの名無しさん
2007/06/30(土) 00:12:040639デフォルトの名無しさん
2007/06/30(土) 00:12:120640デフォルトの名無しさん
2007/06/30(土) 00:26:49[2] 問題文(含コード&リンク):
以下のような形式で書かれた入力を標準入力から読み込み、それに従って
ディレクトリツリーをカレントディレクトリ上に構成せよ。
etc
usr
bin
include
sys
lib
この例では
etc
usr
usr/bin
usr/include
usr/include/sys
usr/lib
といったディレクトリをカレントに作成する。
インデントはタブでなされているものとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 7/6
[5] その他の制限: とくになし
お願いします。
0641デフォルトの名無しさん
2007/06/30(土) 00:44:48ありがとうございます。
fgets(c, 2, stdin); 以外にもありませんか?
06429356
2007/06/30(土) 00:49:07[2] 問題文
クイズ形式で問題を10問作ってくること
『タイトル名』
クイズの説明文
1、問題文
2、四つの選択方式
3、答え
4、次の問題
5、1〜4の繰り返し
これを10問
[3] 環境
[3.1] OS:vista
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:7月8日まで
[5] その他の制限:printfなどの初歩的に簡単な方法、ランダム形式の必要無し。
以上で願いします。
0643デフォルトの名無しさん
2007/06/30(土) 00:51:33#include <stdio.h>
#include <string.h>
int main(void){
char c[3]; // fgets用の捨て駒、体が目当て
char s1[] = "abcdefghijklmnopqrstuvwxyz"; // 比較用の文字列その1
char s2 [100]; // 比較用の文字列その2
s2[0] = '\0'; // この行を省略すると色々たのしい
printf("s1 inital value:\"%s\"\n", s1); // 文字列その1の内容を出力
printf("s2 inital value:\"%s\"\n", s2); // 文字列その2の内容を出力
if(strcmp(s1, s2) == 0) // 文字列その1とその2の内容が等しいか(「等しい」の定義については略)
printf("s1 == s2\n"); // 等しい場合の処理
else
printf("s != s2\n"); // 異なる場合の処理
printf("Push ENTER to proceed."); // これがないと何をしていいのかわからなくなる
fgets(c, 2, stdin); // 俺がいないと何もできないお前
strcpy(s2, s1); // 文字列その1の内容をその2に複写(「複写」の定義については略)
printf("s1 current value : \"%s\"\n", s1); // 以下略
printf("s2 current value : \"%s\"\n", s2);
if(strcmp(s1, s2) == 0)
printf("s1 == s2\n");
else
printf("s1 != s2\n");
return 0;
}
0644デフォルトの名無しさん
2007/06/30(土) 00:54:17丁寧にありがとうございます
0645デフォルトの名無しさん
2007/06/30(土) 00:57:020646デフォルトの名無しさん
2007/06/30(土) 01:00:49[2] 問題文(含コード&リンク):
入力からランダムに一行取り出して印字せよ。
・入力は標準入力から与えられるものとする。
・入力は最大でもRAND_MAX行とする。
・入力なしの場合は何も出力しない。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 8.0
[3.3] 言語: C言語
[4] 期限: 7/3
[5] その他の制限:とくになし
お願いします。
0647デフォルトの名無しさん
2007/06/30(土) 01:24:35ヌル文字の項目
0648647
2007/06/30(土) 01:26:35http://www.google.co.jp/search?hl=ja&q=%E3%83%8A%E3%83%AB%E6%96%87%E5%AD%97&lr=
0649デフォルトの名無しさん
2007/06/30(土) 01:27:53二分木でやりゃいいんだろうけど、入力が困る
0650デフォルトの名無しさん
2007/06/30(土) 01:42:27ヌル使ってないよ
0651デフォルトの名無しさん
2007/06/30(土) 03:02:02できたけどあんまりよろしくない。
多分だれかもっと改良してくれる。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int getLine();
int main()
{
char *result;
char buffer[BUFSIZ];
int maxLine = getLine();
if( maxLine == 0 ) return 0;
srand( (unsigned) time( NULL ) );
int randNum = rand() % maxLine+1;
int lineNum = 0;
do {
result = fgets( buffer, BUFSIZ, stdin );
if( lineNum == randNum )
{
printf( buffer );
break;
}
++lineNum;
} while( result != NULL && lineNum < maxLine );
return 0;
}
0652デフォルトの名無しさん
2007/06/30(土) 03:02:53{
fpos_t pos;
fgetpos( stdin, &pos );
char *result;
char buffer[BUFSIZ];
int lineNum = 0;
do {
result = fgets( buffer, BUFSIZ, stdin );
++lineNum;
} while( result != NULL );
fsetpos( stdin, &pos );
return lineNum;
}
0653デフォルトの名無しさん
2007/06/30(土) 06:36:03#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char result[BUFSIZ];
char buf[BUFSIZ];
int n = 0;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
n++;
if (rand() % n == 0)
strcpy(result, buf);
}
if (n)
fputs(result, stdout);
return 0;
}
0654デフォルトの名無しさん
2007/06/30(土) 09:40:38適当に書いてみた
#include<iostream>
#include<string>
#include<stack>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
using namespace std;
int main(){
stack<int>q;q.push(-1);
for(string line;getline(cin,line);){
int n = strspn(line.c_str(),"\t");
const char*path = line.c_str() + n;
if(n == line.size())continue;
for(;q.top() >= n;q.pop())chdir("..");
mkdir(path,0777);
chdir(path);
q.push(n);
}
}
0655デフォルトの名無しさん
2007/06/30(土) 09:56:53[2] 問題文(含コード&リンク):
データファイルに20個以上100個以下の整数データが格納されている。
このファイルからデータを読み込んで、数値の大きいほうから10個(10個
目に同じ数値が複数個あっても10個)までを、大きい順に出力せよ。
[実行例]
26 25 24 23 21 20 20 19 19 18
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 7月2日
[5] その他の制限: とくになし
0656デフォルトの名無しさん
2007/06/30(土) 10:03:25ありがとうございます。
0657デフォルトの名無しさん
2007/06/30(土) 10:10:07適当に書いてみた
#include<algorithm>
#include<iostream>
#include<iterator>
#include<vector>
using namespace std;
int main(){
typedef istream_iterator<int>iii;
vector<int>x;
copy(iii(cin),iii(),back_inserter(x));
vector<int>::iterator mid(x.begin()+(x.size()<10?x.size():10));
partial_sort(x.begin(),mid,x.end());
copy(x.begin(),mid,ostream_iterator<int>(cout," "));
cout<<endl;
}
0658デフォルトの名無しさん
2007/06/30(土) 10:13:070659デフォルトの名無しさん
2007/06/30(土) 10:16:56#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n;
vector<int> vec;
while (cin >> n) {
vec.push_back(n);
push_heap(vec.begin(), vec.end());
}
for (int i = 0; i < 10 && vec.size() > 0; i++) {
pop_heap(vec.begin(), vec.end());
cout << vec.back() << ' ';
vec.pop_back();
}
cout << endl;
}
0661657
2007/06/30(土) 10:29:44やべ、致命的ミス発見w orz
#include<algorithm>
#include<iostream>
#include<iterator>
#include<vector>
#include<functional>
using namespace std;
int main(){
typedef istream_iterator<int>iii;
vector<int>x;
copy(iii(cin),iii(),back_inserter(x));
vector<int>::iterator mid(x.begin()+(x.size()<10?x.size():10));
partial_sort(x.begin(),mid,x.end(),greater<int>());
copy(x.begin(),mid,ostream_iterator<int>(cout," "));
cout<<endl;
}
0662デフォルトの名無しさん
2007/06/30(土) 10:51:35ありがとうございます。
0663デフォルトの名無しさん
2007/06/30(土) 10:54:59[2] 問題文(含コード&リンク):
1から7の数字を書いたカードが2枚ずつ計14枚ある。
これを1列に並べ、2枚の1の間にはカードが1枚、
2枚の2の間にはカードが2枚はさまれていて、同様に
3の間には3枚、4の間には4枚、5の間には5枚、6の間には
6枚、7の間には7枚のカードがはさまれるように14枚の
カードを並べて下さい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/5
[5] その他の制限: とくになし
0664デフォルトの名無しさん
2007/06/30(土) 11:41:07#include <iostream>
#include <string>
#include <cstring>
#include <unistd.h>
#include <sys/stat.h>
using namespace std;
int main()
{
string s;
for (int level = 0; getline(cin, s); ++level) {
int n = strspn(s.c_str(), "\t");
const char *dir = s.c_str() + n;
for (; n < level; --level)
chdir("..");
if (mkdir(dir, 0777))
return perror(dir), 1;
chdir(dir);
}
return 0;
}
0665デフォルトの名無しさん
2007/06/30(土) 12:07:52管理人が使用してみて、即出会えた出会い系サイトのみを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトを厳選して薦めております。
↓↓↓
【ブログ】http://deaiload.blog109.fc2.com/
0666デフォルトの名無しさん
2007/06/30(土) 12:19:17久々の良い問題だ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4450.txt
0667657
2007/06/30(土) 12:24:23適当
#include<stdio.h>
typedef unsigned long long state_t;
state_t f(state_t state,int card,int used){
int j;
if(card == 8)return state;
for(j=card+1;j<14;++j){
int newuse = 1<<(j-card-1) | 1<<j;
state_t newcv = (state_t)card << j*4 | (state_t)card << (j-card-1)*4;
if(used & newuse)continue;
newcv = f(state|newcv,card+1,used|newuse);
if(newcv)return newcv;
}
return 0;
}
int main(){
printf("%llx\n",f(0ll,1,0));
return 0;
}
0668デフォルトの名無しさん
2007/06/30(土) 12:36:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4451.c
0669デフォルトの名無しさん
2007/06/30(土) 13:20:37ありがとうございます。
>>667
> printf("%llx\n",f(0ll,1,0));
011という8進数に見えて、意味が分からずしばらく悩んでしまいました。
0670デフォルトの名無しさん
2007/06/30(土) 13:31:34>>354
をお願いできますか?
0671デフォルトの名無しさん
2007/06/30(土) 14:08:09#include <stdio.h>
int result = 0;
int bit[8];
void put(int n)
{
if (n > 7) {
if (result == 0x3FFF) {
int b, i;
for (b = 0x2000; b; b >>= 1)
for (i = 1; i <= 7; i++)
if (bit[i] & b)
printf("%d", i);
printf("\n");
}
return;
}
for (bit[n] = (1 << (n + 1)) | 1; (bit[n] & 0x4000) == 0; bit[n] <<= 1) {
if (result & bit[n])
continue;
result ^= bit[n];
put(n + 1);
result ^= bit[n];
}
}
int main(void)
{
put(1);
return 0;
}
0672デフォルトの名無しさん
2007/06/30(土) 14:09:58[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt)
次の手順で動作するプログラムheapsort.cを作成し,その動作を確認せよ.
まずファイルから保存されているデータ数nを読み込み,次にその数だけデータを読み込み配列に格納する.
次に,格納された配列をディスプレイ上に表示する.
そして,データが保存された配列についてクイックソートを実行する関数quicksort()を呼び出し,配列データを整列する.
最後に,整列された配列をディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 7月3日 夜まで
[5] その他の制限:結果がソートされていることをそれぞれのデータについて毎回確認すること.
どなたか解いてください。お願いいたします。
0673デフォルトの名無しさん
2007/06/30(土) 14:32:58クイックソートなのにheapsort.cというところがチャームポイント?
0674デフォルトの名無しさん
2007/06/30(土) 15:34:11[2] 問題文(含コード&リンク):
入力のカッコの対応をチェックしてください。
・入力は標準入力から与える。
・入力はASCII文字のみとする。
・対応をチェックするのは、(){}[]<>とする。
・カッコは入れ子になっていたり、行を越えてまたがることがある。
カッコが対になっていないものや、
[{]}のように入れ違いになっているものは不可とする。
・結果に応じてOKまたはNGを印字して終了する。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:7/3
[5] その他の制限: とくになし
0675デフォルトの名無しさん
2007/06/30(土) 16:22:15適当
#include<stdio.h>
#include<string.h>
int f(int c){
const static char b[] = "({[<",e[] = ")}]>";
int ch;
const char*p;
while((ch=getchar())!=c)
if(ch==EOF||((p=strchr(b,ch))&&!f(e[p-b]))||strchr(e,ch))
return 0;
return 1;
}
int main(){
puts(f(EOF)?"OK":"NG");
return 0;
}
0676デフォルトの名無しさん
2007/06/30(土) 17:09:15#include <stdio.h>
#define STACK 100
char stack[STACK];
const char left[] = "({[<";
const char right[] = ")}]>";
int main()
{
int c; char *p; char *s = stack;
while ((c=getchar()) != EOF) {
if ((p = strchr(left, c)) != NULL) {
*s++ = p - left;
if (s - stack > STACK) {
printf("Stack overflow\n");exit(1);
}
} else if ((p = strchr(right, c)) != NULL) {
s--;
if ((s - stack) < 0) {
printf("NG\n");exit(1);
}
if (*s != p - right) {
printf("NG\n");exit(1);
}
}
}
printf("OK\n");
return 0;
}
0677デフォルトの名無しさん
2007/06/30(土) 17:26:30#include <stdio.h>
int main(void)
{
char stck[256], flag[256] = {0};
int cnt = 0, ch;
flag['('] = flag[')'] = 1;
flag['{'] = flag['}'] = 2;
flag['['] = flag[']'] = 3;
flag['<'] = flag['>'] = 4;
while((ch=getchar())!=EOF) {
if(ch=='(' || ch=='[' || ch=='{' || ch=='<') stck[cnt++] = flag[ch];
else if(ch==')' || ch==']' || ch=='}' || ch=='>') {
if(cnt==0 || stck[--cnt]!=flag[ch]) {
printf("NG\n");
return 0;
}
}
}
if(cnt ==0) printf("OK\n");
else printf("NG\n");
return 0;
}
0678676
2007/06/30(土) 17:29:010679デフォルトの名無しさん
2007/06/30(土) 17:29:22ありがとうございます。
0680デフォルトの名無しさん
2007/06/30(土) 17:30:38それ以前に閉じてなくてもOKになってる
0681デフォルトの名無しさん
2007/06/30(土) 17:31:11>>677 ありがとうございます。
0682676
2007/06/30(土) 17:45:03>>674 最後の所こうしてくれ
if ((s - stack) == 0) {
printf("OK\n");
}else{
printf("NG\n");
}
return 0;
0683デフォルトの名無しさん
2007/06/30(土) 17:52:23[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4454.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 7/6まで
[5] その他の制限: 特にないです。一部だけでもおねがいします。
0684デフォルトの名無しさん
2007/06/30(土) 17:54:40[2] 問題文(含コード&リンク):
コマンドラインの第三引数で指定されたパス名のファイルを、
第一引数の八進数で指定されたアクセス権で作成し、第二引数で指定された
ファイルの内容をコピーするプログラムを書け。
コピー先のファイルがすでに存在する時は、コピーは行わず、エラー終了する。
入力と出力にはシステムコールを直接使用すること。
指定されたアクセス権で空ファイルを作成するプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4452.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4453.txt
注意1
4453.txtの方法は、ファイルを作成した後でアクセス権を緩める方向に変更するので、
セキュリティの問題は生じない。 緩いアクセス権で作成してから厳しいアクセス権に変更すると、
open()の後でfchmod()の前のわずかの時間に、他のプロセスがファイルに予期せぬアクセスをする
危険が生じる。
注意2
4453.txtで、アクセス権の変更を chmod()で行うと、セキュリティの問題が生じる。
open()の後でchmod()の前のわずかの時間に、他のプロセスがファイル名を変更する危険がある。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:火曜日まで
[5] その他の制限:なし
どうかよろしくお願いします。
0685デフォルトの名無しさん
2007/06/30(土) 18:19:22[2] http://jubilo.cis.ibaraki.ac.jp/~isemba/PROGRAM/CPROG/314.pdf
の問題2.1考え方1(p211.c)がわかりません。
よろしくお願いします。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc5.5
[3.3] 言語: C
[4] 期限: 無期限
0686デフォルトの名無しさん
2007/06/30(土) 18:39:42できた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4455.zip
0687デフォルトの名無しさん
2007/06/30(土) 18:54:480688デフォルトの名無しさん
2007/06/30(土) 19:04:56[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4457.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2003
[3.3] 言語: C
[4] 期限: 7月5日
[5] その他の制限: 特になし。
お願いします
0689デフォルトの名無しさん
2007/06/30(土) 19:11:520690デフォルトの名無しさん
2007/06/30(土) 19:18:09#include<stdio.h>
#include<math.h>
double LOG(double a,double x)
{
return(log(x)/log(a));
}
int main(void)
{
double a,x;
printf("x:");
scanf("%lf",&x);
for(a=3;a<10;a++)
printf("log%.0lf(%.0lf)=%f\n",a,x,LOG(a,x));
return 0;
}
0691デフォルトの名無しさん
2007/06/30(土) 19:26:14#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int ifd = -1, ofd = -1, result = 1;
mode_t mode;
char buff[8192], *p;
ssize_t n_read, n_written;
if (argc < 3)
return fprintf(stderr, "usage: %s PERM FROM TO\n", argv[0]), 1;
mode = (mode_t)strtol(argv[1], NULL, 8);
if ((ifd = open(argv[2], O_RDONLY)) == -1)
goto DONE;
if ((ofd = open(argv[3], O_WRONLY|O_CREAT|O_EXCL, (mode_t)0)) == -1)
goto DONE;
while ((n_read = read(ifd, buff, sizeof buff)) > 0)
for (p = buff; n_read > 0; p += n_written, n_read -= n_written)
if ((n_written = write(ofd, p, n_read)) == -1)
goto DONE;
if (n_read == 0 && fchmod(ofd, mode) == 0)
result = 0;
DONE:
if (result) perror(argv[0]);
if (ifd != -1) close(ifd);
if (ofd != -1) close(ofd);
return result;
}
0692デフォルトの名無しさん
2007/06/30(土) 20:38:36課題「条件判断(if)と繰り返し(while)を用いて2つの数字の四則演算と2条の計算ができる電卓プログラムを作りなさい」
http://www.vipper.org/vip545241.c
100点満点でよろしくお願いします
0693デフォルトの名無しさん
2007/06/30(土) 20:44:07unistd.h < このヘッダって標準的?俺の環境(BCC)じゃ入ってなかった orz
0694デフォルトの名無しさん
2007/06/30(土) 20:50:04Unix系の標準(POSIX)だが、C言語の標準じゃないんで
Windowsの処理系とかには普通は入ってない
0695デフォルトの名無しさん
2007/06/30(土) 20:51:440696 ◆lIN/ESgxWw
2007/06/30(土) 21:12:03[2]問題文:入力した文字列内の特定の文字列を削除するプログラムを作成せよ.
<仕様>
文字列中の文字の削除のための次の関数を定義し,活用する.
・関数名: delete_a_letter
・機能: 第1引数の文字配列で与えられるテキスト内の,第2引数で示される位置の文字を削除する.
・引数: 文字配列(テキスト),int型の数値(削除文字の位置)
・戻り値: 無し
<実行例>
text = Hachioji-minamino ← = の右側をキーボードから入力
delete word = mi ← = の右側をキーボードから入力
result = Hachioji-nano
[3]環境
OS:Linux
言語:C
コンパイラ:gcc
[4]期限:来週の水曜日までに
よろしくお願いします。
0697デフォルトの名無しさん
2007/06/30(土) 22:16:48#include <stdio.h>
#include <string.h>
void delete_a_letter(char *text, int n)
{
int i;
for ( i = n; text[i] != '\0'; i++ ) {
text[i] = text[i+1];
}
}
int main()
{
char text[32];
char word[32];
int i, j;
printf("text = ");
scanf("%s", text);
printf("delete word = ");
scanf("%s", word);
for ( i=0; text[i]!='\0'; i++ ) {
if ( strncmp(&(text[i]), word, strlen(word)) == 0 ) {
for ( j=0; j<strlen(word); j++ ) {
delete_a_letter(text, i);
}
i -= strlen(word);
}
}
printf("result = %s\n", text);
return 0;
}
0698デフォルトの名無しさん
2007/07/01(日) 00:24:52もっと先まで勉強すれば、改善できるところはたくさんあるんだけど、
ifやwhile程度を習ったばかりなら、これで十分100点をあげれると思うよ。
0699デフォルトの名無しさん
2007/07/01(日) 00:54:57[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4459.zip
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: どちらでも可
[4] 期限: 2007年7月2日13;00まで
制限はありません
zipの中に入っているmondaibun.txtに問題が書いてあります
問題1〜4のうち2つ以上お願いします
めんどくさかったら簡単なもの2つだけで十分ですのでおねがいします
0700デフォルトの名無しさん
2007/07/01(日) 00:56:32ちゃんと入れろカスが
0701デフォルトの名無しさん
2007/07/01(日) 00:59:520702デフォルトの名無しさん
2007/07/01(日) 01:00:59実行例の第二引数が明らかにint型じゃないだろ
そもそも問題文と仕様とが違いまくりで何作ればいいのか不明
自分の課題すらまともに書けないカスは死んでくれマジで
0703デフォルトの名無しさん
2007/07/01(日) 01:10:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4460.zip
ホントごめんなさい、
どうかお願いします
0704デフォルトの名無しさん
2007/07/01(日) 01:13:36そんな無茶な。
0705デフォルトの名無しさん
2007/07/01(日) 01:26:42俺は解く気にはならんがw
0706デフォルトの名無しさん
2007/07/01(日) 10:54:54[1] 授業単元: C言語
[2] 問題文
クイズ形式で問題を10問作ってくること
『タイトル名』
クイズの説明文
1、問題文
2、四つの選択方式
3、答え
4、次の問題
5、1〜4の繰り返し
これを10問
[3] 環境
[3.1] OS:Windows vista
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語:C言語
[4] 期限:7月8日まで
[5] その他の制限:printfなどの初歩的に簡単な方法、ランダム形式の必要無し。
以上で願いします。
0707依頼者
2007/07/01(日) 11:13:59[2] 問題文
(1)キーボードから数値をint型で入力し、その入力した値をいったん
unsigned char型の変数に格納する。その格納した変数を1.5倍して、255以上なら
255にし、255未満ならそのままの値をunsigned char型の変数に格納し出力する
プログラムの作成。
(2)倍精度浮動小数点で数値を入力し、小数点以下を切り捨て・切り上げ四捨五入
するプログラムの作成。ただし条件式は使用せず、型変換を必ず使用すること。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2003
[3.3] 言語:C++
[4] 期限:7月3日まで
[5] その他の制限:なし
以上でよろしくお願いします。
0708デフォルトの名無しさん
2007/07/01(日) 11:22:07俺と同じ大学の奴がいる。
下はともかく上はな…
下については教科書P212を見ればいいと思うよ。
0709デフォルトの名無しさん
2007/07/01(日) 11:24:49クイズの問題文と答えは自分で用意した方が良いよ。
クイズの問題文まで丸投げすると、変な問題になっても知らないぞ。
0710デフォルトの名無しさん
2007/07/01(日) 11:43:50#include <iostream>
using namespace std;
void main()
{
int i;
cout << "数値を入力してください: ";
cin >> i;
unsigned char c;
c = i;
c = c * 1.5;
if( c >= 255 )
c = 255;
cout << c;
}
0711デフォルトの名無しさん
2007/07/01(日) 11:51:50#include <iostream>
using namespace std;
int main() {
int a;
unsigned char c;
cout << "整数を入力 > ";
cin >> a;
c=(unsigned char)a;
if(c*1.5>255) c=255;
cout << (int)c <<endl;
return 0;
}
0712デフォルトの名無しさん
2007/07/01(日) 11:57:38宿題じゃないみたいだけど
入力チェック含めてやってみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4461.txt
0713デフォルトの名無しさん
2007/07/01(日) 11:59:25・1.5倍した値が255未満のときに、「そのままの値を」とあるが、1.5倍した値なのか
する前の値なのか。
・「unsigned char型の変数に格納し出力」とあるが、数として印字したいん
じゃないのか。その辺も分かりにくい。
0714デフォルトの名無しさん
2007/07/01(日) 12:03:27#include <iostream>
using namespace std;
int main() {
double a,b;
cout << "倍精度浮動小数点で数値を入力 > ";
cin >> a;
b=(int)((a*10+5)/10);
cout << b;
return 0;
}
0715デフォルトの名無しさん
2007/07/01(日) 12:05:08- if(c*1.5>255) c=255;
+ if(c*1.5>=255) c=255;
= を追加
0716デフォルトの名無しさん
2007/07/01(日) 12:06:39double a,b; の b を消して int b; に。
0717デフォルトの名無しさん
2007/07/01(日) 12:15:240718デフォルトの名無しさん
2007/07/01(日) 12:21:580719デフォルトの名無しさん
2007/07/01(日) 12:26:34意味が分からん。小数点以下は切り捨てちゃってええのん?
切り上げ四捨五入って、切り上げなら四捨五入じゃねーよ。
四捨五入を小数点第一位でするの?わからん orz
0720デフォルトの名無しさん
2007/07/01(日) 12:34:300721デフォルトの名無しさん
2007/07/01(日) 12:44:11#include <iostream>
using namespace std;
int main() {
double a;
int b,c;
cout << "倍精度浮動小数点で数値を入力 > ";
cin >> a;
b=(int)a;
cout << "切り捨て" << b <<endl;
cout << "切り上げ" << b+1 <<endl;
c=(int)(a+0.5);
cout << "四捨五入" << c <<endl;
return 0;
}
0722デフォルトの名無しさん
2007/07/01(日) 12:45:04それだと1を入れたときに切り上げた結果が2にならね?
0723デフォルトの名無しさん
2007/07/01(日) 12:45:190724デフォルトの名無しさん
2007/07/01(日) 12:49:49#include <iostream>
using namespace std;
int main() {
double a;
cout << "倍精度浮動小数点で数値を入力 > ";
cin >> a;
cout << "切り捨て" << (int)a <<endl;
cout << "切り上げ" << (int)(a+0.9) <<endl;
cout << "四捨五入" << (int)(a+0.5) <<endl;
return 0;
}
0725デフォルトの名無しさん
2007/07/01(日) 12:50:58と、意地悪言ってみる。
0726デフォルトの名無しさん
2007/07/01(日) 12:52:28教授の頭がイカレたのか俺の頭がペチャパイなのか
貧乳はステータスです。希少価値かです。
ネタが光ってる人は光っててね
そうでない人はマトリックスルーでよろしくたのんませ
最後に浮かんだものはビットシフト演算子しか思いつきませぬる
しかしdouble型でビットシフトはしごくめんどくさい作業でござるにんにん
誰か兵はおろうか 否か
0727デフォルトの名無しさん
2007/07/01(日) 12:52:33それだと
1.01を切り上げた時に1にならね?
0728デフォルトの名無しさん
2007/07/01(日) 12:53:48だからええねんて、そんなんw 小数点第一の値で対処。それよりちっちゃい値は無視無視w
0729デフォルトの名無しさん
2007/07/01(日) 12:54:14内部でif使ってる?シラネ。
0730デフォルトの名無しさん
2007/07/01(日) 12:55:380731デフォルトの名無しさん
2007/07/01(日) 12:56:000732デフォルトの名無しさん
2007/07/01(日) 13:01:350733デフォルトの名無しさん
2007/07/01(日) 13:06:080734デフォルトの名無しさん
2007/07/01(日) 13:06:450735デフォルトの名無しさん
2007/07/01(日) 13:09:070736デフォルトの名無しさん
2007/07/01(日) 13:11:19なんか文句ある?
0737デフォルトの名無しさん
2007/07/01(日) 13:13:19[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4460.zip
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: どちらでも可
[4] 期限: 2007年7月2日13;00まで
制限はありません
zipの中に入っているmondaibun.txtに問題が書いてあります
問題1〜4のうち2つ以上お願いします
めんどくさかったら簡単なもの2つだけで十分ですのでおねがいします
0738デフォルトの名無しさん
2007/07/01(日) 13:14:080739デフォルトの名無しさん
2007/07/01(日) 13:15:36うちのコンパイラ先生は
(int)(0.9999999999999999999 + 0.9999999999999999999999999999999999999999999999999)
は2だとゴネております
0740デフォルトの名無しさん
2007/07/01(日) 13:15:51丸め誤差で0でも切り上げられちゃう件について。
0741デフォルトの名無しさん
2007/07/01(日) 13:18:18マルチポスト
以後スルー
0742デフォルトの名無しさん
2007/07/01(日) 13:22:12#include <iostream>
using namespace std;
int main() {
double a;
cout << "倍精度浮動小数点で数値を入力 > ";
cin >> a;
cout << "切り捨て" << (int)a <<endl;
cout << "切り上げ" << (int)(a+(a-(int)a>0)) <<endl;
cout << "四捨五入" << (int)(a+0.5) <<endl;
return 0;
}
0743デフォルトの名無しさん
2007/07/01(日) 13:25:15いかにヘビににらまれずに、完走しきるかったことだな
0745デフォルトの名無しさん
2007/07/01(日) 13:33:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4462.zip
0746依頼者
2007/07/01(日) 13:45:380747デフォルトの名無しさん
2007/07/01(日) 14:25:24[2] 問題文(含コード&リンク):
以下の式に数字を入れて,数式が成立する数列を10通り以上見つけなさい.
□□□□□*□□□□□=□□□□□□□□□□
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.3
[3.3] 言語: C
[4] 期限: 6月27日
[5] その他の制限:特にありません
糸口さえつかめず困ってます。よろしくお願いします。
0748デフォルトの名無しさん
2007/07/01(日) 14:28:4100001 00000 0000000000
00001 00001 0000000001
00001 00002 0000000002
00001 00003 0000000003
00001 00004 0000000004
00001 00005 0000000005
00001 00006 0000000006
00001 00007 0000000007
00001 00008 0000000008
00001 00009 0000000009
こんなんでいいの?
0749デフォルトの名無しさん
2007/07/01(日) 14:31:02数字ってなんでもいいの?
40000 40000 1600000000
とか
0750デフォルトの名無しさん
2007/07/01(日) 14:31:30□に入る数字に制限はないの?
例えば、00001*00001=0000000001でもいいとか、
10000*10000=0100000000でもいいとか、
40000*40000=1600000000でもいいとか、
左辺の数字に重複があってはいけないとか、
右辺の数字に重複があってはいけないとか。
0751デフォルトの名無しさん
2007/07/01(日) 14:32:065桁×5桁が10桁になってるから
先頭の桁は0以外かと。
0752デフォルトの名無しさん
2007/07/01(日) 14:35:2040000 30001 1200040000
40000 30002 1200080000
40000 30003 1200120000
40000 30004 1200160000
40000 30005 1200200000
40000 30006 1200240000
40000 30007 1200280000
40000 30008 1200320000
40000 30009 1200360000
これでおk?
0753デフォルトの名無しさん
2007/07/01(日) 14:45:58ただし,左辺,右辺とも,0から9の数字を1度だけ使うこと.
また各項の最初の数字は0ではないこととする.
例:97560*42831=4178592360(両辺とも0から9までの数字を1度だけ使っている)
すみませんでした。
0754デフォルトの名無しさん
2007/07/01(日) 15:47:090755デフォルトの名無しさん
2007/07/01(日) 16:07:15解ける人はまたやる気がしないんでしょ
>>747
↓は何の工夫もないコードだけど一応あげとくよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4463.txt
0756755
2007/07/01(日) 16:19:50あげなおし
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4464.txt
0757デフォルトの名無しさん
2007/07/01(日) 16:20:020758デフォルトの名無しさん
2007/07/01(日) 16:27:32作っていただきありがとうございます。
0759デフォルトの名無しさん
2007/07/01(日) 16:29:200760デフォルトの名無しさん
2007/07/01(日) 16:33:29[2] 組み合わせを生成するプログラムを書け
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc5.5
[3.3] 言語: C
[4] 期限: 無期限
0761755
2007/07/01(日) 16:33:59ああC99ならstdintインクルードして俺様は標準だと言えたっけかそういえば
どうせLinux + gccだからどうでもいいやと思ってしまったw
0762デフォルトの名無しさん
2007/07/01(日) 17:28:16ありがとうございました。
0763デフォルトの名無しさん
2007/07/01(日) 17:43:28[2] 問題文(含コード&リンク):
リストのノードの順序を,逆順にする関数を作れ.
(データを入れ替えるのではなく,next の値を変更することにより,逆順にする)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 火曜日の10時45分まで
[5] その他の制限: ないです
よろしくお願いします。
0764デフォルトの名無しさん
2007/07/01(日) 17:45:50ひどいソースだな
> class Kontena
これとかwww
0765デフォルトの名無しさん
2007/07/01(日) 18:16:22#include <stdio.h>
#include <stdlib.h>
void put_combination(int n, int r, int *array, int idx, int min)
{
int i;
if (idx == r) {
for (i = 0; i < r; i++) printf("%d ", array[i]);
putchar('\n');
return;
}
for (i = min; i <= n; i++) {
array[idx] = i;
put_combination(n, r, array, idx + 1, i + 1);
}
}
int main(int argc, char **argv)
{
int n, r;
int array[0x100];
while (scanf("%d%d", &n, &r) == 2) {
put_combination(n, r, array, 0, 1);
}
return 0;
}
0766デフォルトの名無しさん
2007/07/01(日) 18:39:47#include <stdio.h>
typedef struct node_t {
int val;
struct node_t *next;
} node_t;
node_t *reverse(node_t *list)
{
node_t *a, *b = 0, *c = 0, *anext;
for (a = list; a; c = b, b = a, a = anext) {
anext = a->next;
if (b) {
b->next = c;
a->next = b;
}
}
return b;
}
int main(void)
{
node_t list[] = {
{ 1, &list[1]}, { 2, &list[2]}, { 3, &list[3]},
{ 4, &list[4]}, { 5, 0 }
}, *listp;
for (listp = reverse(list); listp; listp = listp->next)
printf("%d\n", listp->val);
return 0;
}
0767デフォルトの名無しさん
2007/07/01(日) 18:47:26[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4465.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Visual Studio.net2003
[3.3] 言語: C
[4] 期限: 7月9日
[5] その他の制限: 特になし
お願いします。
0768766
2007/07/01(日) 18:50:44#include <stdio.h>
typedef struct node_t {
int val;
struct node_t *next;
} node_t;
node_t *reverse(node_t *list)
{
node_t *a, *b = 0, *anext;
for (a = list; a; b = a, a = anext) {
anext = a->next;
a->next = b;
}
return b;
}
int main(void)
{
node_t list[] = {
{ 1, &list[1]}, { 2, &list[2]}, { 3, &list[3]},
{ 4, &list[4]}, { 5, 0 }
}, *listp;
for (listp = reverse(list); listp; listp = listp->next)
printf("%d\n", listp->val);
return 0;
}
0769デフォルトの名無しさん
2007/07/01(日) 18:53:45[2] 問題文:九九算表を表示する
�@〜�Cを埋めて完成させなさい
#include<stdio.h>
main()
{
int i,j;
printf(" | 1 2 3 4 5 6 7 8 9\n");
printf("--+-----------------------------------------\n");
for(i=1;i<=9;i++){
printf("%2d|",�@);
for(j=1;�A;j++){
printf("%3d",�B);
}
printf("�C");
}
}
[3] 環境
[3.1] OS:Windows vista business
[3.2] コンパイラ名とバージョン:visual studio2005
[3.3] 言語: C言語
[4] 期限: 7月10日
[5] その他の制限: �@処理アルゴリズムはfor文の2重ループで処理すること
0770デフォルトの名無しさん
2007/07/01(日) 18:58:06[2] 問題文:
以下の実行結果を表示するプログラムの作成
実行結果
*****
****
***
**
*
[3] 環境
[3.1] OS:Windows vista business
[3.2] コンパイラ名とバージョン:visual studio2005
[3.3] 言語: C言語
[4] 期限: 7月10日
[5] その他の制限: �@文字の出力にはprintfを使用し、プログラム中に2回のみ使用できる
ものとする
�Aアルゴリズムはfor文の
0771デフォルトの名無しさん
2007/07/01(日) 18:58:41struct LIST *reverse(struct LIST *p)
{
struct LIST *b, *a;
a = p->next;
p->next = NULL;
while(a)
{
b = p;
p = a;
a = p->next;
p->next = b;
}
return p;
}
ちょっと悩んだ・・・すでに他の人が回答してるし・・・
0772デフォルトの名無しさん
2007/07/01(日) 19:06:28�@
#include <stdio.h>
int keta(int N, int n)
{
int i;
for(i=0; N; i++) N /= n;
return i;
}
int value_now(int obj, int law, int now_keta)
{
int i;
for(i=0; i<now_keta - 1; i++) obj /= law;
return obj % law;
}
int main(void)
{
int i, k, N, n;
scanf("%d", &N);
do{ scanf("%d", &n); }while(n<2||n>9);
k = keta(N, n);
for(i=k; i>0; i--) printf("%d", value_now(N, n, i));
return 0;
}
0774デフォルトの名無しさん
2007/07/01(日) 19:08:10#include<stdio.h>
int main(void){
int i, j;
for(i=5; i>0; i--)for(j=0; j<i; j++)printf("%s",j<i-1?"*":"*\n");
return 0;
}
0775デフォルトの名無しさん
2007/07/01(日) 19:10:26�@ i
�A j<=9
�B i*j
�C \n
0776デフォルトの名無しさん
2007/07/01(日) 19:17:18#include <stdio.h>
int main(void)
{
int i, j;
for(i=5; i > 0; i--) {
for(j=0; j<i; j++) printf("*");
printf("\n");
}
return 0;
}
0777デフォルトの名無しさん
2007/07/01(日) 19:32:32#include <stdio.h>
int main(void)
{
int i, j;
printf("実行結果¥n¥n");
for(i=5; i>0;--i) {
for(j=0; j<i; ++j) {
printf((j<i-1) ? "*" : "*¥n");
}
}
return 0;
}
0778デフォルトの名無しさん
2007/07/01(日) 19:36:28printf("****\n");
fprintf(stdout,"***\n");
fprintf(stdout,"**\n");
fprintf(stdout,"*\n");
0779デフォルトの名無しさん
2007/07/01(日) 19:40:38[5]を一つも満たしてない。
0780デフォルトの名無しさん
2007/07/01(日) 19:46:350781デフォルトの名無しさん
2007/07/01(日) 19:48:310782デフォルトの名無しさん
2007/07/01(日) 19:52:510783デフォルトの名無しさん
2007/07/01(日) 19:54:45#include <stdio.h>
int main()
{
int i;
for (i=0; i<5; i++) {
printf(&"*****\n"[i]);
}
printf("\n");
return 0;
}
0784デフォルトの名無しさん
2007/07/01(日) 19:55:000785デフォルトの名無しさん
2007/07/01(日) 19:55:250786デフォルトの名無しさん
2007/07/01(日) 20:00:300787デフォルトの名無しさん
2007/07/01(日) 21:13:150789デフォルトの名無しさん
2007/07/01(日) 21:27:400790デフォルトの名無しさん
2007/07/01(日) 21:29:23金にもならんし手をつけようと思う人はおらんのやろ・・・
0791デフォルトの名無しさん
2007/07/01(日) 21:31:46俺は見てるけど入出力の仕様すらまともに書いてないし
ソースカオスすぎるんだよwwwっうぇ
0792デフォルトの名無しさん
2007/07/01(日) 21:49:38[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.また main関数ではif文を使って正しく動いているかどうかチェックしてください.
◎以下でやること
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数
偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数
※戻り値にはboolを利用してもOKです
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年7月2日09時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
0793デフォルトの名無しさん
2007/07/01(日) 21:51:23[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.また main関数ではif文を使って正しく動いているかどうかチェックしてください.
◎以下でやること
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数
偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数
※戻り値にはboolを利用してもOKです
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年7月2日09時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
0794デフォルトの名無しさん
2007/07/01(日) 21:54:34int isOdd(int i) {return i % 2;}
int isEven(int i) {return !isOdd(i);}
0795デフォルトの名無しさん
2007/07/01(日) 22:16:35int isEven(int i) { return (i+1) & 1; }
0797デフォルトの名無しさん
2007/07/01(日) 22:32:14#include <iostream>
using namespace std;
int isOdd(int i) {return i%2;}
int isEven(int i) {return !(i%2);}
int main() {
int x;
cout << "input > ";
cin >> x;
cout << "isOdd : " << isOdd(x) <<endl;
cout << "isEven : " << isEven(x) <<endl;
return 0;
}
0799デフォルトの名無しさん
2007/07/01(日) 23:10:51ANDとかORとかやらんかった?
0800デフォルトの名無しさん
2007/07/01(日) 23:13:25よくみれ
>>765だよ
>>795じゃなくて
0801デフォルトの名無しさん
2007/07/01(日) 23:15:540802デフォルトの名無しさん
2007/07/01(日) 23:19:060803デフォルトの名無しさん
2007/07/01(日) 23:21:10問題1 動作確認してない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4466.txt
0804デフォルトの名無しさん
2007/07/01(日) 23:22:50[2] 問題文(含コード&リンク):
�T次元配列と2次元配列を1つずつ以上用いて、空白・コメントを除いて30行以上のプログラムを作成する。
配列は自由、難易度は問わない。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限: 7月4日12:00まで
両方とも使ったプログラムが思いつきません。
お願いします。
0805デフォルトの名無しさん
2007/07/01(日) 23:32:07kokyaku3.cpp は kokyaku.cpp の改善版と思えばおk?
つーか、倉庫係は何すればいいんだ……。
0806デフォルトの名無しさん
2007/07/01(日) 23:32:09単純なローマ字変換なんてのはどぉ?
変換表 [5][10+1] /* +1はぁ...ん...ょぅ */
変換したい入力文字列の1次元配列用 []
0807デフォルトの名無しさん
2007/07/01(日) 23:32:40本当にありがとうございます
これでなんとかなると思います
再提出とかくらったらまた来ます
みなさんにめんどくさいって言われてたのに解いてくださって感謝します
0808デフォルトの名無しさん
2007/07/01(日) 23:36:21kokyaku3.cppはkokyaku.cppの改善版でいいと思います
倉庫係は入庫コントローラの制御だとおもいます
0809デフォルトの名無しさん
2007/07/01(日) 23:39:30ありがとうございます。
ローマ字変換で挑戦してみます。
0810デフォルトの名無しさん
2007/07/02(月) 01:03:22http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4467.c
0811デフォルトの名無しさん
2007/07/02(月) 01:07:27[2]問題文:
西暦2001年6月1日が金曜日であることを知って、2030年のカレンダーを計算し、1月から12月まで見やすく印刷しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Borland
[3.3] 言語:C言語
[4] 期限:7月4日まで
[5] その他の制限:Switch文を使うこと。
よろしくお願いします。
0812デフォルトの名無しさん
2007/07/02(月) 01:08:270813デフォルトの名無しさん
2007/07/02(月) 01:15:01> 西暦2001年6月1日が金曜日であることを知って
要するにその年からの合計日数を換算して曜日を求めろってやつ?
0814811
2007/07/02(月) 01:30:14私も問題の意味がよくわからなかったので、
「西暦2001年6月1日が金曜日という情報を頼りに2030年のカレンダーを表示させる」
という風に私は捉えたのですが・・・
0815デフォルトの名無しさん
2007/07/02(月) 01:35:51Unixならlprに流し込むだけなんだがな
WindowsってPRNとかLPT1とかいう謎のドスデバイスが使えなかったっけ?
0816デフォルトの名無しさん
2007/07/02(月) 01:43:04[1] 授業単元: プログラミング C
[2] 問題文:
キーボードから入力した文を印字するプログラムを書きなさい。
The C programming language. <- と入力したら
The C programming language. <- 印字されるプログラムです。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 4日の火曜日 23:59
今まで考えてもわからなかったので・・・よろしくおねがいします
0817デフォルトの名無しさん
2007/07/02(月) 01:45:10#include <stdio.h>
int zel(int y, int m, int d) {
if(m<=2) { y--; m+=12; }
return (y + y/4 - y/100 + y/400 + ((13*m+8)/5) + d)%7;
}
int main(void) {
int y=2030,m,d,i,z;
int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
char *w[7]={"日","月","火","水","木","金","土"};
printf("%d年\n",y);
for(m=1; m<=12; m++) {
printf("%d月\n",m);
for(i=0,d=1; i<7; i++)
printf("%s ",w[i]);
puts("");
z=zel(y,m,d);
for(i=0; i<z; i++) printf("%2c ",32);
for(; d<=md[m-1]; d++,i++) {
printf("%2d ",d);
if(i%7==6) printf("\n");
}
puts("");
}
return 0;
}
0818816 ◆KrpcpKelXU
2007/07/02(月) 01:45:230819デフォルトの名無しさん
2007/07/02(月) 01:46:04#include <stdio.h>
int main(void){int c;while((c=getchar())!=EOF)putchar(c);return 0;}
0820デフォルトの名無しさん
2007/07/02(月) 01:46:52#include <stdio.h>
int main(void) {
int ch;
while( (ch=getchar())!='\n' ) putchar(ch);
return 0;
}
0821816 ◆KrpcpKelXU
2007/07/02(月) 02:19:54>>820
ありがとうございます。
明日学校に行ってコンパイルしてみたいと思います。
ありがとうございます。
また、わからないことがあったら聞くかもしれません・・・
0823デフォルトの名無しさん
2007/07/02(月) 09:48:05[2] 問題文(含コード&リンク):
(1)int型の変数256個分をメモリ上に動的に10個確保する操作を行え。
この際、メモリを確保できた場合その先頭アドレス(16進数)を順次ファイルに書き出せ。
(2)画像データを確保するためのunsigned char型に次元配列(256×256)をモメリ上に動的に確保し、256×256画素のグレースケール画像(8ビット 256諧調)を入力して格納せよ。
そして、指定したアドレス(x,y)(0≦x,y≦255)の画素値を表示するプログラムをかけ。
ただし。画素値表示のプロセスは特殊コードの入力によって終了するように設計すること。
[3] 環境
[3.1] OS: MacOSX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日までにお願いします。
0824デフォルトの名無しさん
2007/07/02(月) 10:10:06[2] 問題文: 入力した文字列が abcd なら dcba のように逆順の文字列を作り
それを出力するプログラムを作成しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: ([2007年07月02日2:00まで
[5] その他の制限: 特にありません
よろしくお願いします
0825デフォルトの名無しさん
2007/07/02(月) 10:17:02#include <stdio.h>
#include <stdlib.h>
int main(void) {
int **a,i;
FILE *fp;
fp=fopen("add.txt","w");
if(fp==NULL) return 1;
a=(int**)malloc(sizeof(int*));
if(a==NULL) { printf("メモリの確保に失敗\n"); return 1; }
for(i=0; i<10; i++) {
a[i]=(int*)malloc(256*sizeof(int));
if(a[i]==NULL) { printf("メモリの確保に失敗\n"); }
fprintf(fp,"a[%d] : %p \n",i,a[i]);
fprintf(stdout,"a[%d] : %p \n",i,a[i]);
}
fclose(fp);
for(i=0; i<10; i++) free(a[i]);
free(a);
return 0;
}
0826デフォルトの名無しさん
2007/07/02(月) 10:30:46#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
unsigned char pix[256][256];
size_t pix_row=sizeof(pix)/sizeof(pix[0]);
size_t pix_col=sizeof(pix[0])/sizeof(pix[0][0]);
size_t unschar_max=1<<sizeof(char)*8;
size_t i,j;
int x,y;
srand((unsigned)time(NULL));
for(i=0; i<pix_row; i++) {
for(j=0; j<pix_col; j++)
pix[i][j] = rand()%unschar_max;
}
do{
printf("x,y > ");
scanf("%d %d",&x,&y);
printf("(%d,%d) = %d \n",x,y,pix[x][y]);
}while( x>=0 && y>=0);
return 0;
}
0827デフォルトの名無しさん
2007/07/02(月) 10:31:23[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4471.txt
(↓問題1のヒントにおいて「sample inputのグラフは以下の通り」となっている部分に貼られている画像)
http://www10.axfc.net/uploader/90/so/N90_1661.png.html
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
[3.3] 言語:C
[4] 期限:2007/7/3(火) 10:30
[5] その他の制限:入力はfopen系関数を使用したものではなく、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行うようにしなければならない。
どうかよろしくお願いします。
0828デフォルトの名無しさん
2007/07/02(月) 10:34:33do{
printf("x,y > ");
scanf("%d %d",&x,&y);
if(x>pix_row-1 || y>pix_col-1) printf("error\n");
else printf("(%d,%d) = %d \n",x,y,pix[x][y]);
}while( x>=0 && y>=0);
0829デフォルトの名無しさん
2007/07/02(月) 10:49:1610*sizeof(int*)じゃね?
0830デフォルトの名無しさん
2007/07/02(月) 10:56:28#include <stdio.h>
int main(void) {
printf("sizeof(int) : %d / sizeof(int) : %d \n",sizeof(int),sizeof(int*));
printf("sizeof(dbl) : %d / sizeof(dbl) : %d \n",sizeof(double),sizeof(double*));
printf("sizeof(chr) : %d / sizeof(chr) : %d \n",sizeof(char),sizeof(char*));
return 0;
}
0831デフォルトの名無しさん
2007/07/02(月) 11:04:400832デフォルトの名無しさん
2007/07/02(月) 11:05:30- a=(int**)malloc(sizeof(int*));
+ a=(int**)malloc(10 * sizeof(int*));
0833デフォルトの名無しさん
2007/07/02(月) 11:18:54#include<stdio.h>
#include<string.h>
int main (void)
{
char str[128], temp;
int i,n;
printf("文字列を入力して下さい\n");
fgets( str, 128, stdin);
n=strlen(str)-2;
for(i=0;i<(n)/2;i++){
temp = str[i];
str[i] = str[n-i];
str[n-i] = temp;
}
str[n+1]='\0';
printf(str);
return 0;
}
0834デフォルトの名無しさん
2007/07/02(月) 11:26:04文字数が偶数のときおかしくないか?
0835デフォルトの名無しさん
2007/07/02(月) 11:34:43- for(i=0;i<(n)/2;i++){
+ for(i=0;i<=(n)/2;i++){
0836デフォルトの名無しさん
2007/07/02(月) 11:42:43[2] 問題文:
細胞分裂するアメーバのふるまいをプログラミングします。
下記のクラスを作成し,メイン関数で右下記のふるまいをするようにプログラミングしなさい。
作成するクラス
●クラス名:Ameba
●メンバ変数:int型変数life
●メンバ関数:
・コンストラクタ:lifeを100で初期化
・コピーコンストラクタ:Amebaクラスのインスタンスをコピーする
・デストラクタ:何もしない
・lifeの入出力
メイン関数
●Amebaクラスのポインタ変数を20個用意する。
●Ameba[0]にAmebaインスタンスを生成する。
●Ameba[1]以降は,それ以前に生成されているAmebaインスタンスのコピーとして生成する。この場合,下記の条件を満たすこととする。
・コピー元のインスタンスのlifeを半分にしてコピーする。
・コピー元のインスタンスのlifeが1の場合,コピー後,コピー元を消滅させる。
・コピー元はランダムに選択される。
●20個分終了後,Amebaインスタンスのlifeの状況(または消滅)を表示する。
●すべてのAmebaインスタンスを消滅させる。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年7月5日10:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします
0837デフォルトの名無しさん
2007/07/02(月) 11:57:32[2] 問題文: 任意のファイルからテキストを読み出し,左から0で詰めた3桁の行番号を先頭に付加して表示するプログラムを作成しなさい.一行の
長さは最大255文字として仮定してよいものとする.
ファイル名はプログラム実行後,最初にユーザによって与えられるものとする.オープンが成功しない場合には,
errorと表示しプログラムの実行を中止すること.
プログラム名は「lnum」とすること.
ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい.
データとして与えるテキストファイルの行数は1以上で,999を超えないものとする.
cat hello.txt
Hello world.
This is test data.
./lnum
hello.txt
001: Hello world.
002: This is test data.
./lnum
*
error
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: なし
[5] その他の制限: 特にありません
0838デフォルトの名無しさん
2007/07/02(月) 12:13:33コンパイルは通るのですが、実行しても
上手くいかないのですが(何も表示されないのです)。
どうしてでしょうか?
0839デフォルトの名無しさん
2007/07/02(月) 12:34:32#include <stdio.h>
#include <string.h>
static void strrev(char * str, unsigned len)
{
if (len < 2) return;
char tmp = str[0];
str[0] = str[len - 1];
str[len - 1] = tmp;
strrev(str + 1, len - 2);
}
int main(void)
{
char str[128];
printf("文字列を入力して下さい\n");
fgets(str, sizeof(str), stdin);
unsigned len = strlen(str);
if (str[len - 1] == '\n') str[--len] = '\0';
strrev(str, len);
printf("%s\n", str);
return 0;
}
0840833
2007/07/02(月) 12:41:25>>834>>835
全くその通りでございます。論理的思考の出来ない馬鹿が作ったプログラム
と言う事でご容赦ください。
0841デフォルトの名無しさん
2007/07/02(月) 12:47:06それじゃ、鼻の穴に指でも入れてろ。
0842811
2007/07/02(月) 13:11:55Switch文を使ってもう1度お願いできないでしょうか・・・
[1] 授業単元: プログラミング
[2]問題文:
西暦2001年6月1日が金曜日であることを知って、2030年のカレンダーを計算し、1月から12月まで見やすく印刷しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Borland
[3.3] 言語:C言語
[4] 期限:7月4日まで
[5] その他の制限:Switch文を使うこと。
お願いします;
0843デフォルトの名無しさん
2007/07/02(月) 13:21:510844デフォルトの名無しさん
2007/07/02(月) 14:10:54#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void lnum(char *filename)
{
FILE *fop = fopen(filename,"r+b");
if(fop == NULL){
fprintf(stderr,"ファイルを開けません");
exit(1);
}
int j = 0;
char buff[256];
while(fgets(buff,sizeof(buff),fop)){
printf("%0.3d :",j);
fputs(buff,stdout);
j++;
if(j == 1000){
fprintf(stderr,"999行を超えました");
break;
}
};
}
int main()
{char fname[256];char *temp = NULL;fgets(fname,sizeof(fname),stdin);if(temp = strchr(fname,'\n'))
*temp = '\0';
lnum(fname);
return 0;
}
0845デフォルトの名無しさん
2007/07/02(月) 14:29:47ありがとうございます。11、12行目にコンパイルエラーがでるのですが。
0846デフォルトの名無しさん
2007/07/02(月) 14:38:40これでいいか良くわからんが、答えは出る。
問1 1-2)のつもり。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4472.txt
0847デフォルトの名無しさん
2007/07/02(月) 14:43:46[2] 問題文(含コード&リンク):
2個の整数入力に対して商と剰余を引き放し(引き離し
)法によって求めて返す関数
void nonRestDiv(int dividend,int divisor,int
*quotient,int *remainder)
をC++によって書き、いろいろな入力に対して正しく動
作する事を確認せよ。
また、当然のことながらコードには乗算操作(*,/)を使
用してはならない。
[3] 環境
[3.1] OS:WINDOWSXP
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C++
[4] 期限: [2007年7月3日13:00まで]
[5] その他の制限:特になし
よろしくお願いします。
0848デフォルトの名無しさん
2007/07/02(月) 14:58:16gcc -std=c99
0849デフォルトの名無しさん
2007/07/02(月) 15:01:26変数の宣言を途中でしてたからだと思う。
いわゆるC89仕様だと思います。
以下変更部分
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void lnum(char *filename)
{
int j = 0;
char buff[256];
FILE *fop = fopen(filename,"r+b");
if(fop == NULL){
fprintf(stderr,"ファイルを開けません");
exit(1);
}
while(fgets(buff,sizeof(buff),fop)){
printf("%0.3d :",j);
fputs(buff,stdout);
j++;
if(j == 1000){
fprintf(stderr,"999行を超えました");
break;
}
};
}
0850デフォルトの名無しさん
2007/07/02(月) 15:04:06ありがとうございます。これって一つにまとまりませんか?
0851デフォルトの名無しさん
2007/07/02(月) 15:41:24まだこのようなエラーが出ます。ごめんなさい。
Error: 外部シンボル '_main' が未解決
0852デフォルトの名無しさん
2007/07/02(月) 16:00:01このとき、0と1の並びに着目し、データを圧縮することを考える。
ここでは、0と1のそれぞれが何個連続して並んでいるかを記録することで圧縮を行う。
たとえば、digit1.datというファイルに
111110000000000000000000000001E
というように0と1が並んでいるとき、
7 1 24 0 1 1
と圧縮できる。このとき圧縮結果に空白を挟むことに注意する。
上記の圧縮方法に従って、任意の0と1から成るデータを圧縮するプログラムを作成せよ。
ただしデータはリダイレクションを使用し、char型変数の1文字ずつ繰り返し世も困れるものとする。
最後には「圧縮完了」と表示のこと。
期限が迫っています・・・
C++です。
if文、for文、while文、リダイレクションまで習いました。
習ったところまでの文法でお願いします・・・
0853デフォルトの名無しさん
2007/07/02(月) 16:01:04>>461
>>466
0854デフォルトの名無しさん
2007/07/02(月) 16:08:44このへんとか習ってないので、使えないんですよ・・・。
0855デフォルトの名無しさん
2007/07/02(月) 16:08:58一応規格に準拠・・・(main消したりしてないよね?)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void lnum(char *filename)
{ int j = 0;
char buff[256];
FILE *fop = fopen(filename,"r+b");
if(fop == NULL){
fprintf(stderr,"ファイルを開けません");
exit(1);
}
while(fgets(buff,sizeof(buff),fop)){
printf("%0.3d :",j);
fputs(buff,stdout);
j++;
if(j == 1000){
fprintf(stderr,"999行を超えました");
break;
}
};
}
int main(int argc, char *argv[])
{char fname[256];char *temp = NULL;fgets(fname,sizeof(fname),stdin);if(temp = strchr(fname,'\n'))
*temp = '\0';
lnum(fname);
return 0;
}
0856デフォルトの名無しさん
2007/07/02(月) 16:12:36通りました!ありがとうございます。
0858デフォルトの名無しさん
2007/07/02(月) 16:18:05おまえ、>848を理解していないだろう。それで>849をコピペしてコンパイルして、エラーを出したわけだ。
0859デフォルトの名無しさん
2007/07/02(月) 16:50:37[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4473.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: 2007年07月03日AM08:00まで
[5] その他の制限: Cのみ 他制限なし
どうかよろしくお願いします。
0860デフォルトの名無しさん
2007/07/02(月) 18:11:35問題がアレで参った
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4475.txt
0861860
2007/07/02(月) 18:16:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4476.txt
0862デフォルトの名無しさん
2007/07/02(月) 18:35:10[2] 問題文(含コード&リンク):
病院における各患者の待ち時間は、平均診察時間をnとした場合、まるで診察室にクジを入れた壷があり、患者が1分ごとに確率 1/n のクジを繰り返し引き、当たりが出るまで待たされることになるのとそっくりになることが知られている。
100人の患者について、各人の待ち時間をシミュレーションし表示せよ。ただし患者の平均診察時間は10分、つまりくじに相当する確率は0.1である。
0から1までの間の乱数を表すのは double x = (double)rand()/INT_MAX のようにする
[実行結果の例]
2 16 2 8 2 11 26 3 3 2
34 11 25 26 4 24 2 7 7 22
3 4 31 13 14 2 21 6 23 21
3 9 6 20 25 2 4 8 2 2
13 12 9 3 4 12 5 4 18 9
7 28 4 4 24 34 2 2 2 7
9 3 11 4 7 12 7 4 2 12
10 33 12 5 14 4 2 7 9 7
23 4 2 7 3 4 5 6 58 3
5 5 16 23 4 30 5 10 5 11
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] 言語: C
[4] 期限: 7/3
[5] その他の制限:特になし
よろしくお願いします。
0863デフォルトの名無しさん
2007/07/02(月) 18:36:02static int Job=3;
static int Machine=2;
static int K=30;
static int [] duedate={0,7,9,13,14,20};
static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}};
static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}};
static int [] weight={0,2,2,2,2,2};
public static void main(String[] args){
int [] [] Ma=new int[Machine+1][K+1];
int [] forbid=new int [Job+1];
int [] penal=new int [Job+1];
int Obj=0;
0864デフォルトの名無しさん
2007/07/02(月) 18:37:48int mindue=10000;
int assignJob=0;
for(int i2=1;i2<=Job;i2++){
if(mindue>(duedate[i2]+forbid[i2])){
mindue=duedate[i2]+forbid[i2];
assignJob=i2;
}
}
forbid[assignJob]=10000;
int r=0;
boolean getTime=true;
int processSum=0;
0865デフォルトの名無しさん
2007/07/02(月) 18:38:51processSum=processSum+process[assignJob][m];
}
int limitT=1;
for(int m=1;m<=Machine;m++){
r=route[assignJob][m];
for(int t=limitT;t<(K-processSum);t++){
for(int t2=t;t2<(t+process[assignJob][r]);t2++){
getTime=true;
if(Ma[r][t2]>0){
getTime=false;
break;
}
}
if(getTime==true){
for(int t2=t;t<(t+process[assignJob][r]);t2++){
Ma[r][t2]=assignJob;
}
limitT=t+process[assignJob][r];
break;
}
}
}
0866デフォルトの名無しさん
2007/07/02(月) 18:39:49penal[assignJob]=weight[assignJob]*((limitT-1)-duedate[assignJob]);
Obj=Obj+penal[assignJob];
}
}
for(int m=1;m<=Machine;m++){
System.out.println("Machine"+m+"deno waritukejyoukyou");
for(int t=1;t<=K;t++){
System.out.print(Ma[m][t]);
}
System.out.println();
}
System.out.println();
System.out.println("objective function="+Obj);
System.out.println();
for(int j=1;j<=Job;j++){
System.out.println("job"+j+"no ihanryo ha"+penal[j]);
}
}
}
cに書き換えてください。
よろしくお願いします。
0867デフォルトの名無しさん
2007/07/02(月) 19:14:30INT_MAXじゃなくてRAND_MAXじゃね?
0869デフォルトの名無しさん
2007/07/02(月) 19:56:52何の「シミュレーション」にもなってない気はするが
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double xrand(void) { return rand() / ((double)RAND_MAX + 1); }
int main(void)
{
int i, j, n;
srand(time(0));
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
for (n = 1; xrand() > 0.1; n++) ;
printf("%d ", n);
}
putchar('\n');
}
return 0;
}
0870デフォルトの名無しさん
2007/07/02(月) 20:06:50これでダメなら知らん
#include <iostream>
using namespace std;
int main()
{
char c, cc;
int n;
const char *sep = "";
while (cin.get(c) && c != 'E') {
for (n = 1; cin.get(cc) && cc == c; ++n) {}
cin.unget();
cout << sep << n << " " << c;
sep = " ";
}
cout << "\n圧縮完了\n";
}
0871デフォルトの名無しさん
2007/07/02(月) 20:22:04[2] 問題文(含コード&リンク):
問題1.
下の表のようなデータを入力したとき,(a)〜(o) を求めるプログラムを作成しなさい.な
お,表のデータはあくまでも例なので,実際には,汎用的に使えるように,商品数,単価,
個数は実行時に任意の数・データをキーボードから入力すること.
表
品物名単価個数代金累積代金消費税込み累積代金
商品1 249 15 (a) (b) (c)
例
商品数を入力して下さい. --> 1
<商品1>
単価を入力して下さい. --> 249 ..
個数を入力して下さい. --> 15 ..
** 単価×個数** ==> 3735
** 累積合計代金** ==> 5895
** 消費税込み累積合計代金** ==> 6189.75
問題2.
フィボナッチ数列の第n 番目(1 . n . 50)の数を出力するプログラムを作成しなさい.
1(第1 番目), 1, 2, 3, 5, 8, 13, . . . , 12586269025(第50 番目)
例
終了するときは1 〜 50 以外の数を入力して下さい.
第何番目の数を求めますか. ==> 1
im[1]=1
第何番目の数を求めますか. ==> 2
im[2]=1
0872デフォルトの名無しさん
2007/07/02(月) 20:22:41問題3.
任意の回数だけコンピュータを相手にじゃんけんをするプログラムを作成しなさい.ただ
し,コンピュータは時間によって変わる乱数により実現すること.また,あいこの場合は回
数のカウントには含めないこととする.
例
じゃんけんをする回数を入力. ==> 10
[1 回目]
あなたは,何をだしますか.
1. グー2. チョキ3. パー==> 1
あなた: グー 相手: チョキ
あなたの勝ちです!
[6 回目]
あなたは,何をだしますか.
1. グー2. チョキ3. パー==> 2
あなた: チョキ相手: グー
あなたの負けです!
結果: 3勝3 敗(勝率0.5)
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし
よろしくおねがいします
0873デフォルトの名無しさん
2007/07/02(月) 20:26:20問題:文字列sの並びを逆転させる関数srttvsを作成せよ。受け取った文字列がabcならcbaにする。sをそのまま返却すること。
//この問題で自分なりに作成してみたのですが、エラーが取れないのでアドバイス願います。
//コンパイラ:ボーランド
char* strrvs(char *s)
{
int n = strlen(s);
for(i=0;i<n/2;i++){
char temp = s[i];
s[i] = s[n-i-1];
s[n-i-1] = temp;
}
return s;
}
int main()
{
char s[] = "abc";
cout<<"文字列s = "<<s<<" を末尾の文字から逆順に表示します\n";
cout << strrvs(s)<<'\n';
getch();
return 0;
}
0874デフォルトの名無しさん
2007/07/02(月) 20:33:06ヘッダは適当にインクルードして
using namespace std;
とでも宣言してあるとして
strrvs()で i が宣言されてないな
後はなんとかなるんじゃねぇの
0875デフォルトの名無しさん
2007/07/02(月) 20:40:44ありがとうございます!
iの宣言が抜けてました。。
0876デフォルトの名無しさん
2007/07/02(月) 20:57:2710を入力して6回目で終わってるってことは、あいこは何回目の表示や勝率にはカウントしないけど、
実際の回数にはカウントするってこと?
0877デフォルトの名無しさん
2007/07/02(月) 21:00:01[2] 問題文(含コード&リンク):
ターミナルから入力された3桁の正の整数について,その数と,その数の各桁を逆に並べた数との積を求めるプログラムを書け.
例えば,ターミナルから123が入力されたときは123×321=39483となる.
0から始まる数,あるいは最後の桁が0の数や3桁の正の整数以外の入力はないものとしてよい.
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] 言語: C
[4] 期限: なし
[5] その他の制限:特になし
0878デフォルトの名無しさん
2007/07/02(月) 21:02:57[2] 問題文(含コード&リンク): 文字列sに含まれる数字0,1,,,9の個数をカウントして、各数字の個数をc[0],c[1],,,c[9]に代入する関数countを作成せよ。
以下のソースをご覧の上、ミスをご指摘願います。
void count(const char* s,int c[])
{
int counter = 0;
for(int i = 0;i < strlen(s);i++){
for(int j = 0;j <= 9;j++){
if(s[i] == j){
counter++;
}
c[j] += counter;
}
}
}
int main()
{
char s[] = "1b2b3c";
int c[10];
count(s,c);
cout << "文字列s "<<s<<"の各数字の個数\n";
for(int i = 0;i < 10;i++)
cout<<i<<"の個数: "<<c[i]<<"\n";
getch();
return 0;
}
0879デフォルトの名無しさん
2007/07/02(月) 21:04:53問2
#include <stdio.h>
int main(void)
{
double im[50] = { 1, 1 };
int i, n;
for (i = 2; i < 50; i++)
im[i] = im[i-1] + im[i-2];
for (;;) {
printf("第何番目の数を求めますか.==> ");
if (scanf("%d", &n) != 1 || n < 1 || n > 50)
break;
printf("im[%d]=%.11g\n", n, im[n-1]);
}
return 0;
}
0880デフォルトの名無しさん
2007/07/02(月) 21:05:180881デフォルトの名無しさん
2007/07/02(月) 21:13:56main()で int c[10] が初期化されてない
→ int c[10] = { 0 }; とでも汁
count()で、
2重ループの中の4行は、単に
if (s[i] == '0' + j) c[j]++;
に置き換えてよい(変数counterは不要)
今のままだとcounterで訳の分からないものを数えている
それと、バグではないが、外側のループの終了条件は
i < strlen(s)
のかわりに
s[i] != '\0'
とするとよい
0882デフォルトの名無しさん
2007/07/02(月) 21:17:50ご指摘ありがとうございます。
if (s[i] == '0' + j) c[j]++;
の '0'+j は何を意味するのでしょうか
0883デフォルトの名無しさん
2007/07/02(月) 21:18:44#include <stdio.h>
int reverse(int num)
{
int n = 0;
while (num > 0) {
n = n * 10 + num % 10;
num /= 10;
}
return n;
}
int main(void)
{
int m, n;
while (scanf("%d", &n) == 1) {
m = reverse(n);
printf("%d * %d = %d\n", n, m, m * n);
}
return 0;
}
0884デフォルトの名無しさん
2007/07/02(月) 21:24:37jには0〜9までの値が入っているわけだが
文字としての'0'〜'9'には、例えばASCIIコードでは0x30〜0x39までの
値が割り当てられている(ちょうど順番にならんでいる)
'0' に jを足すことで、'0'〜'9'の文字としての値が得られる
0885デフォルトの名無しさん
2007/07/02(月) 21:57:55どうやったら改善できるでしょうか・・・
問題文:あるファイルの中にデータとして多くの0と1が書き込まれており、最後の1文字だけがEであるとする。
このとき、0と1の並びに着目し、データを圧縮することを考える。ここでは、0と1のそれぞれが何個連続して並んでいるかを記録することで圧縮を行う。
たとえば、digit1.datというファイルに111110000000000000000000000001E
というように0と1が並んでいるとき、7 1 24 0 1 1と圧縮できる。このとき圧縮結果に空白を挟むことに注意する。
上記の圧縮方法に従って、任意の0と1から成るデータを圧縮するプログラムを作成せよ。
ただしデータはリダイレクションを使用し、char型変数の1文字ずつ繰り返し世も困れるものとする。
最後には「圧縮完了」と表示のこと。
#include <iostream>
using namespace std;
int main()
{
char data;
int n;
cout<<"圧縮結果:";
while (cin>>data && data!= 'E')
{
for (n=1;cin>>data && data!='0' && data!='E';n++){}
cout <<n<<" 1 ";
for (n=1;cin>>data && data!='1' && data!='E';n++){}
cout <<n<<" 0 ";
}
cout <<endl;
cout << "圧縮完了"<<endl;
return 0;
}
data:111111111000011111110000000E
実行結果:
圧縮結果:9 1 4 0 6(ここを7にしたいです。) 1 7 0
0887デフォルトの名無しさん
2007/07/02(月) 21:59:060888デフォルトの名無しさん
2007/07/02(月) 22:02:560889デフォルトの名無しさん
2007/07/02(月) 22:08:57(もっと頭の良い方法があるんだろうな、俺には思いつかねぇ)
#include <stdio.h>#include <stdlib.h>#include <time.h>
int main(){ int how;int use;int user;int comp;int win = 0;int j = 0;char *janken[3]={"グー","チョキ","パー"};
puts("回数を入力");scanf("%d",&how);srand((unsigned)time(NULL));
while(j != how){puts("あなたは何を出しますか");printf("1. グー2. チョキ3. パー =>");scanf("%d",&use);
user = use -1;comp = rand()%3;if(comp == user)puts("ドロー");else if(user != comp && user == 0){
j++;switch(comp){case 1:printf("あなたは%s相手は%s\n",janken[user],janken[comp]);
puts("あなたの勝ち");win++;break;case 2:printf("あなたは%s相手は%s\n",janken[user],janken[comp]);
puts("あなたの負け");break;default:break;}}else if(user != comp && user == 1){j++;
switch(comp){case 0:printf("あなたは%s相手は%s\n",janken[user],janken[comp]);puts("あなたの負け");break;
case 2:printf("あなたは%s相手は%s\n",janken[user],janken[comp]);puts("あなたの勝ち");win++;
break;default:break;}}else if(user != comp && user == 2){j++;switch(comp){case 0:
printf("あなたは%s相手は%s\n",janken[user],janken[comp]);puts("あなたの勝ち");win++;
break;case 2:printf("あなたは%s相手は%s\n",janken[user],janken[comp]);
puts("あなたの負け");break;default:break;}}};printf("結果%d勝%d敗(勝率%lf)\n",win,j-win,win/(double)j);
return 0;
}
0890デフォルトの名無しさん
2007/07/02(月) 22:09:26[2] 問題文(含コード&リンク):
二つの文字列s1とs2をそっくり入れ替える関数 void swap(char* s1,char* s2); を作成してください
[3] 環境
0891みまつや
2007/07/02(月) 22:21:07[2] 問題文:100×100の画像に対し、画像輝度0〜255で縦方向の
グラデーションを作成してください。
[3] 環境
[3.1] OS: Windows
[3.2] Visual C++
[3.3] 言語: C
[4] 期限:[無期限]
[5] その他の制限:PGMとPPM画像両方を制作しなくてはいけません。PGMは白黒
PPMはブルーとグリーンのグラデーションです。どちらか片方でも構いませんので
ご協力お願いします。
フォーマット:PGM PPM
P2 P3 ←マジックナンバー
・・・ ・・・ ←幅、高さ、最大値
255 255 ←データ
255 255
0892デフォルトの名無しさん
2007/07/02(月) 22:21:30while ()文でデータを1コ読んでいるからその分減っている
ためしに110011001100Eでやるとこうなる
ちなみに下の表は A)は上のfor文 B)は下のfor文
ループ文 nの値 ・・・cin>>data の値
while ()・・・1
A) for () n=1 ・・・1
A) for() n=2 ・・・0 ここで上のfor「A)」が終了 nは2
B) for() n=1 ・・・0
B) for() n=2 ・・・1 ここで上のfor「B)」が終了 nは2
while ()・・・1
A) for () n=1 ・・・0 ここで上のfor「A)」が終了 nは1
こーやってずれていまう
0893デフォルトの名無しさん
2007/07/02(月) 22:30:34#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void rstring(char *str)
{
unsigned int l = strlen(str) - 1, i;
char temp;
for(i = 0; i < l/2;i++){
temp =str[i];
str[i] = str[l - i];
str[l - i] =temp;
}
}
int main()
{
char buff[5] = {'\0'};
char rbuff[4] = {'\0'};
char *temp = NULL;
long ans;
char *p;
fgets(buff,sizeof(buff),stdin);
if(temp = strchr(buff,'\n'))
*temp = '\0';
strcpy(rbuff,buff);
rstring(rbuff);
ans = strtol(buff,&p,10);
ans *= strtol(rbuff, &p, 10);
printf("%sかける%sは%d\n",buff,rbuff,ans);
}
0894デフォルトの名無しさん
2007/07/02(月) 22:31:15とりあえずPGMだけ。
#include <stdio.h>
int main(void)
{
int i, j;
fputs("P2\n100 100\n255\n", stdout);
for (i = 0; i < 100; i++) {
int val = 256 * (100 - i)/100.0 - 1;
for (j = 0; j < 100; j++) printf("%d ", val);
putchar('\n');
}
return 0;
}
0895デフォルトの名無しさん
2007/07/02(月) 22:31:460896デフォルトの名無しさん
2007/07/02(月) 22:46:55void swap(char* s1,char* s2)
{
char tmp[256];
strcpy(tmp,s1);
strcpy(s1,s2);
strcpy(s2,tmp);
}
0897デフォルトの名無しさん
2007/07/02(月) 22:52:34PPM画像
#include <stdio.h>
int main(void)
{
int i, j;
fputs("P3\n100 100\n255\n", stdout);
for (i = 0; i < 100; i++) {
int green = 256 * (i + 1)/100.0 - 1;
int blue = 256 * (100 - i)/100.0 - 1;
for (j = 0; j < 100; j++) printf("0 %d %d ", green, blue);
putchar('\n');
}
return 0;
}
0898デフォルトの名無しさん
2007/07/02(月) 23:18:330899みまつや
2007/07/02(月) 23:26:56また相談することがあると思いますので、どうぞよろしくお願いします!!
0900デフォルトの名無しさん
2007/07/03(火) 00:02:08[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4478.txt
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限:7月4日
[5] その他の制限: 多次元配列について習ってます
よろしくお願いします
0901デフォルトの名無しさん
2007/07/03(火) 00:06:02[2]次のアルファベットのキーワードを入力して計算する関数電卓プログラムを作成しなさい。
sin 正弦
cos 余弦
tan 正接
arcsin 逆正弦
arccos 逆余弦
arctan 逆正接
ln 自然対数
log 常用対数
exp 指数関数
sqr 平方
rad 入力データをラジアン単位にする
deg 入力データを度を単位にする
end プログラムの終了
[3] 環境
[3.1] windows2000
[3.2] VC 6.0
[3.3] C++
[4] 期限 2007年7月4日 午前8時
[5] その他の制限 無し
どうかよろしくお願いいたします。
0902デフォルトの名無しさん
2007/07/03(火) 00:19:04#include <stdio.h>
int factorial(int n)
{
if(n == 0 || n == 1){
return 1;
}else{
int ret = 1, i;
for(i = 2; i <= n; i++)
ret *= i;
return ret;
}
}
int main(void)
{
double exp = 0, prev = 0;
int n = 0;
while(1){
exp += 1.0/factorial(n);
printf("exp : %f \t prev : %f\n", exp, prev);
if(exp - prev < 10e-7)
break;
prev = exp, n++;
}
printf("n = %d \t exp : %f\n", n, exp);
return 0;
}
0903デフォルトの名無しさん
2007/07/03(火) 00:50:56RPNでよければ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4479.txt
0904デフォルトの名無しさん
2007/07/03(火) 01:02:21[2]あるファイルを監視して、何か変更があるたびにそのファイル
の先頭から表示するようなwatchfileというプログラムを作成せよ
ヒント:
for(;;){ /* 無限ループ */
stat(argv[1],&sbuf);
if(・・・・・){ /* ファイルの状態を検査して
変わっていれば */
while ((n=read(fd,buf,1024))>0)
write(1,buf,n); /* 1024バイト単位に、
readバイト数がゼロになるまで読んで出力 */
}
sleep(10); /* 10秒待機 */
}
[3]
[3.1]Linux
[3.2]gcc
[3.3]C
[4]7月4日
よろしくお願いします
0905デフォルトの名無しさん
2007/07/03(火) 01:14:20素早い解答、本当に有難うございます。
有難く活用させて頂きます。
感謝感謝!
0906デフォルトの名無しさん
2007/07/03(火) 01:25:29#include <stdlib.h>
int main(void) }
FILE* f = fopen("Makefile","w");
fprintf("all:FileName\n\tcat FileName\n");
fclose(f);
while(1){
sleep(10);
system("make -s");
}
return 0;
}
0907デフォルトの名無しさん
2007/07/03(火) 03:37:13[2] 問題文(含コード&リンク):
以下の指定を満たして点p=(x1,y1)と点q=(x2,y2)との距離を求める関数を作れ。
◎指定
関数定義
double myDistance(double x1, double y1, double x2, double y2)
平方根の計算にはsqrt()関数を用いてください
sqrt()を使うためにはmath.hをincludeする必要があります.
プログラムのはじめに「#include <math.h>」を書く
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年7月4日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
どうかよろしくおねがいします。
0908デフォルトの名無しさん
2007/07/03(火) 03:48:45#include <math.h>
double myDistance(double x1, double y1, double x2, double y2)
{
return sqrt(pow((x1 - x2),2) + pow((y1 - y2),2));
}
コンパイルも何もせずに書いたからあってるかわかんね
0909デフォルトの名無しさん
2007/07/03(火) 04:53:08[2] 問題文(含コード&リンク): http://www.acm-japan.org/past-icpc/domestic2004/B.jp/B.html
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29542
このソース(Java)を参考にして、Cで書きなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C
[4] 期限:2007年07月4日00:00まで
[5] その他の制限:とくになし。
よろしくおねがいします。
0910デフォルトの名無しさん
2007/07/03(火) 10:35:28http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4484.txt
0911デフォルトの名無しさん
2007/07/03(火) 10:35:322乗でpow()は……
0912デフォルトの名無しさん
2007/07/03(火) 11:41:44入力はファイルから読み込むんじゃないのかな
0913デフォルトの名無しさん
2007/07/03(火) 13:12:54リダイレクトすればおk
0914デフォルトの名無しさん
2007/07/03(火) 15:36:08[2] 問題文(含コード&リンク):
1. コマンドライン引数でファイル名をn個指定し、 ファイル1からファイルnまでの内容をこの順に連結し、
その結果を標準出力に出力するプログラムを書け。 入力ファイルに関してエラーが発生した場合、
そこで処理を終了せず、残りのファイルの処理を続けること。
ただし、以下のオプションをとることができるようにせよ。
-u 出力の際に、アルファベット小文字を対応する大文字に変換する。
-l 出力の際に、アルファベット大文字を対応する小文字に変換する。
-e 出力の際に、空行を除去する。
-s 出力の際に、#から始まる行を除去する。
*入出力を行うシステムコールを直接使用すること。
2.コマンドライン引数でファイル名を2個指定し、 標準入力からテキストを入力し、
#で始まる行をファイル1に出力し、 それ以外の行をファイル2に出力せよ。
ただし、以下のオプションをとることができるようにせよ。
-a 同名のファイルがすでに存在する場合は、末尾に追加するようにする。 このオプションがない場合は、上書きする。
-e ファイル2への出力の際に、 空行を除去する。
-s ファイル1への出力の際に、 行頭の#一文字を除去する。
*入出力を行うシステムコールを直接使用すること。
*ただし、複数のオプションが同時にしていされているときは、両方なるように
すること。
ファイルをコピーするプログラム。入力と出力にはシステムコールを直接使用する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4485.c
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 木曜日まで
[5] その他の制限:ないです
どうかよろしくお願いします。
0916デフォルトの名無しさん
2007/07/03(火) 16:18:52[3.1] WindowsXP
[3.2] BorlandC++
[3.3] C++
123 741
456 852
789→ 963
右回転の時
0917デフォルトの名無しさん
2007/07/03(火) 16:23:29そりゃぁ、関数を作っただけじゃ動かんだろうよ。
0918デフォルトの名無しさん
2007/07/03(火) 16:25:13問1はほぼ同じ問題がちょい前のスレにあったな
そんときはC++だったが
Cで書き直すのマンドクセ
0919デフォルトの名無しさん
2007/07/03(火) 16:31:18ありがとうございました!
0920900
2007/07/03(火) 17:34:040921デフォルトの名無しさん
2007/07/03(火) 17:39:22[2] 問題文(含コード&リンク):文字列を入力し,それを逆から表示するプログラムを作成せよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc最新版
[3.3] 言語: C
[4] 期限: 2007年7月8日23:00
[5] その他の制限:なし
0922900
2007/07/03(火) 17:40:280923デフォルトの名無しさん
2007/07/03(火) 17:43:42なめとんのか
ちょっとまっとれボケ
0924デフォルトの名無しさん
2007/07/03(火) 17:51:28int main(void){
int i, j;
int x[2][3] = {{1, 2, 3},
{4, 5, 6}};
int y[3][2] = {{1, 5},
{5, 3},
{8, 1}};
int ans[2] = {0, 0};
for(i=0; i<2; i++){
for(j=0; j<3; j++){
ans[i] += x[i][j] * y[j][i];
}
}
printf("x*y = [%d, %d]\n", ans[0], ans[1]);
return 0;
}
わからないところがあっても教えないからガタガタ文句言わないでねっ☆
0925デフォルトの名無しさん
2007/07/03(火) 17:56:42int main(void){
int i, j;
double ma[2][3], mb[2][3];
double mc[2][3] = {0};
puts("行列1を入力してください");
for (i = 0; i < 2; i++){
for (j = 0; j < 3; j++){
scanf("%lf;", &ma[i][j]);
}
}
puts("行列2を入力してください");
for (i = 0; i < 2; i++){
for (j = 0; j < 3; j++){
scanf("%lf;", &mb[i][j]);
}
}
for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
mc[i][j] = ma[i][j] - mb[i][j];
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
printf("%3lf ", mc[i][j]);
putchar('\n');
}
return (0);
}
同上
0926デフォルトの名無しさん
2007/07/03(火) 18:05:44#include <stdio.h>
int main(void){
char str[100];
char *p, *temp;
puts("文字列を入力してください");
fgets(str, 99, stdin);
p = temp = str;
puts("入力した文字列は以下の文字列です");
while(*p){
printf("%c", *p);
p++;
}
puts("入力した文字列の逆順は以下の文字列になります");
while(p-temp){
printf("%c", *(p-1));
p--;
}
return 0;
}
君は文句言ってもいいよ☆
0927デフォルトの名無しさん
2007/07/03(火) 18:17:50普通に逆順でいいなら
0928デフォルトの名無しさん
2007/07/03(火) 18:26:34ぱっと出てきたのがこれやったんや
0929 ◆QQoa7tAmuU
2007/07/03(火) 18:41:24なんですが
#include <stdio.h>
int main(void) {
int i , j, n, cnt, flg;
printf("2以上の整数を入力してください>");
scanf("%d",&n);
if(n<2) return 1;
printf("2");
for(i=3,cnt=1; i<=n; i+=2){
for(j=3,flg=1; j*j<=i; j+=2){
if(i%j==0) {flg=0; break;}
}
if(flg) {
printf("%d",i);
cnt++;
if(cnt%10==9) printf("\n");
}
}
printf("\n2から%dまでには%d個の素数が含まれている\n",n,cnt);
return 0;
}
これだと実行結果が
「2以上の整数を入力してください>5
235
2から5までには3個の素数が含まれている」
と235が余計にでてしまうのですが、どうしたらいいでしょうか?
教えてください!お願いしますm()m
0930デフォルトの名無しさん
2007/07/03(火) 18:49:46出力したくないなら
printf("%d",i);
をコメントアウトしろ
0931デフォルトの名無しさん
2007/07/03(火) 18:50:20これもだ
0932 ◆UoNQqijD4I
2007/07/03(火) 19:02:48即レスありがとうございます!!
ほんとに助かりました(^w^)
0933デフォルトの名無しさん
2007/07/03(火) 19:21:07[2]問題文:ローダーのNo.4486にアップしました。
[3]環境
OS:リナックス
コンパイラ:cc
言語:C
[4]期限:7/4 午前中までにお願いします。
0934デフォルトの名無しさん
2007/07/03(火) 19:35:20リンクくらい張れ
0935デフォルトの名無しさん
2007/07/03(火) 19:38:43bcc?gcc?
0936デフォルトの名無しさん
2007/07/03(火) 19:49:180937933
2007/07/03(火) 19:49:43です。
>>935 多分gccです
0938デフォルトの名無しさん
2007/07/03(火) 20:22:43[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4487.txt
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C
[4] 期限: 2007/7/4 10:30
[5] その他の制限: 特になし
よろしくお願いいたします。
0939デフォルトの名無しさん
2007/07/03(火) 20:23:43管理人が使用してみて、即出会えた出会い系サイトのみを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトを厳選して薦めております。
↓↓↓
【ブログ】http://deaiload.blog109.fc2.com/
0940デフォルトの名無しさん
2007/07/03(火) 20:34:54おk
0941デフォルトの名無しさん
2007/07/03(火) 20:45:58[2] 問題文:
n 人の人が輪になって並び、k 番目の人を順番に除いていく手順をJosephusの問題と言う。
たとえば、 n=8、 k=3 の場合は 3、6、1、5、2、8、4、7 の順で削除される。
n と k の値を読み込んで、整数 1,2,...,n をこの順で格納した循環リストを作り、
Josephusの問題を解くプログラムを作れ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: ([2007年07月04日12:00
[5] その他の制限:特にありません
なにとぞ、よろしくお願いいたします
0942デフォルトの名無しさん
2007/07/03(火) 20:48:37#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TEXT_MAX 256
#define WORD_MAX 256
void search(char *text, char *word) {
char i, j, tlen, wlen, *sp, *tp, *wp, *buf;
tlen = (char)strlen(text) - 1;
wlen = (char)strlen(word) - 1;
for(i=0, sp=text; i<tlen; i++, text++) {
if(*text==*word) {
tp = text;
wp = word;
for(j=0; j<wlen && (char)*tp==(char)*wp && text!=NULL; j++, tp++, wp++);
if(j==wlen) {
buf = text + wlen;
*text = '#';
if(text++ != NULL) *text = NULL;
strcat(sp, buf);
}
}
}
return;
}
0943デフォルトの名無しさん
2007/07/03(火) 20:49:23char text[TEXT_MAX], word[WORD_MAX];
printf("text = ");
fgets(text, TEXT_MAX, stdin);
printf("search word = ");
fgets(word, WORD_MAX, stdin);
search(text, word);
printf("result = %s", text);
return;
}
0944デフォルトの名無しさん
2007/07/03(火) 20:51:28ttp://www.k.hosei.ac.jp/~wakahara/Cpro_11.htm
0945デフォルトの名無しさん
2007/07/03(火) 20:57:46if(j==wlen) {
buf = text + wlen;
*text = '#';
if(text++ != NULL) *text = NULL;
strcat(sp, buf);
}
この部分
if(j==1) *text = '#';
else if(j==wlen) {
buf = text + wlen;
*text = '#';
if(text++!=NULL) *text = NULL;
strcat(sp, buf);
}
こうせんといかんな。
0946デフォルトの名無しさん
2007/07/03(火) 21:25:22今、C言語の宿題が手元にあるのですが、全くわかりません。
誰か教えていただけないでしょうか。
22時30分くらいにすべての宿題をカキコしてもよろしいでしょうか?
0947デフォルトの名無しさん
2007/07/03(火) 21:28:02そしてまとめてtxtファイルに書いてあぷろだにうpして
リンクはれ
0948デフォルトの名無しさん
2007/07/03(火) 21:35:38指摘サンクス。だがスマン。問題文勘違いしてたわ。
>>942のsearch関数丸々変えてくれ。
void search(char *text, char *word) {
char i, j, tlen, wlen, *tp, *wp;
tlen = (char)strlen(text) - 1;
wlen = (char)strlen(word) - 1;
for(i=0; i<tlen; i++, text++) {
if(*text==*word) {
tp = text;
wp = word;
for(j=0; j<wlen && (char)*tp==(char)*wp && text!=NULL; j++, tp++, wp++);
if(j==wlen) for(tp--; j>0; j--) *tp--='#';
}
}
return;
}
0949デフォルトの名無しさん
2007/07/03(火) 21:36:58[2] 問題文(含コード&リンク):
以下をメンバに持つ構造体を定義し、仮想商品20個の商品名と利益率を利益率の高い順に一覧表にせよ。但し、利益率とは(利益/仕入値)である。
・商品コード(整数)
・商品名(文字列)
・価格の構造体(仕入値、売値(共に整数)からなる)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: ([2007年7月5日17:00まで]
[5] その他の制限: 特にありません。よろしくおねがいします。
0950デフォルトの名無しさん
2007/07/03(火) 21:37:06[2] 問題文(含コード&リンク):
(1) 2つの複素数の和、差、積をそれぞれ求める関数を作れ。但し,実部・虚部は実数で表現すること。
ヒント:複素数は、実部と虚部をメンバに持つ構造体で表す事ができる。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限: 7月5日 19:00
[5] その他の制限:特になしです。よろしくお願いします。
0952デフォルトの名無しさん
2007/07/03(火) 21:43:57どうしろっつーんだよ
0953デフォルトの名無しさん
2007/07/03(火) 21:49:50構造体にはname1,name2,name3を用います。
struct tfr{
double name1;
double name2;
double name3;
};
struct tfr data[i][j];
変数4つa,b,c,dを用いる。
仮にi=1,j=1としたとき、
a*b の結果を data[1][1].name2
c*d の結果を data[1][1].name3に代入します。
そしてdata[1][1].name=data[1][1].name2+data[1][1].name3
とします。
a*bと c*dがあまりに小さくなることとしているのでdata[1][1].nameが
表示されなくなってきます。
そこでdata[1][1].nameのlogをとることにします。
log(a*b)とlog(c*d)には同じようにdata[1][1].name1,2にいれていくとする。
data[1][1].nameには何を代入すればよいですか?
ちなみにlog(A+B)はlogA+logBではありません。
a*b、c*dは小数の計算です。
0954デフォルトの名無しさん
2007/07/03(火) 22:13:010955デフォルトの名無しさん
2007/07/03(火) 22:34:52[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4488.txt
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C
[4] 期限: 2007/7/4 15:30
[5] その他の制限: 特になし
0956デフォルトの名無しさん
2007/07/03(火) 23:11:553番の16進数をあらわす文字って何?
0x〜ってこと?
2番で入力文字を調べA(a)=1〜〜、って言ってるけど、
結局アルファベットを数字に直せばいいの?
0957デフォルトの名無しさん
2007/07/03(火) 23:16:280x〜のことです。
2もアルファベットを数字すると言うことです。
0958デフォルトの名無しさん
2007/07/03(火) 23:32:35[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4490.txt
[3] 環境
[3.1] OS: (WindowsXP
[3.2] コンパイラ名とバージョン: Visual Studio 2003
[3.3] 言語: C
[4] 期限: 7月5日 16時
[5] その他の制限: 特になし
お願いします
0959デフォルトの名無しさん
2007/07/03(火) 23:33:000960デフォルトの名無しさん
2007/07/03(火) 23:35:050961デフォルトの名無しさん
2007/07/03(火) 23:37:13> 2もアルファベットを数字すると言うことです。
まあなんつうか
日本語でおk
0962デフォルトの名無しさん
2007/07/03(火) 23:37:230963デフォルトの名無しさん
2007/07/03(火) 23:40:29[2]問題:正の整数x(2進数)を入力すると2進数にして表示するプログラム
10->2進数にするには割り算の余りを順次配列に格納し、最後に逆順に表示すれば2進数になる
<実行例>(58を入力)
整数を入力してください--> 58
111010
[3]
[3.1]OS:windows xp
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C++(Cはよくわかりません・・・)
[4]期限:7月4日21時
[5]その他制限:特になしです。よろしくお願いします。
0964デフォルトの名無しさん
2007/07/03(火) 23:41:50[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4491.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 7月5日 17:00
[5] その他の制限: 特になし
お願いします
0965デフォルトの名無しさん
2007/07/03(火) 23:44:41[2] 問題文:
以下の公式からプログラムを作成して下さい。
i(tk+1)=i(tk)+(V0−100*i(tk)−V(tk))�冲
V3(tk+1)=V3(tk)+1000*i(tk)*�凾�
初期値を
t=0のとき、i=0、 v3=0
t(k)の値は任意の値で例えば 0、 0.0001、0.0002、0,0003と増加させる。
この場合は�冲は0.0001
なお、V0の値は
V3<5のときV0=0
V3>7のときV0=10とする。
このプラグラムを作って i とV3の値をtkの変化とともに示せ。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:VisualC++6.0
[3.3] 言語: C++
[4] 期限: 2007/7/7
[5] その他の制限: 特になし
先にV3の値を計算してからIの式に代入するようなんですが自分で何回つくってもエラーがでてできないとです・・・
よろしくお願いします。
0966デフォルトの名無しさん
2007/07/04(水) 00:02:16#include <stdlib.h>
#include <string.h>
int main(void) {
char buf[64], i, sur;
long num;
printf("input: ");
scanf("%s", buf);
num = atoi(buf);
for(i=0; i<64; i++) buf[i] = NULL;
for(i=0; num>0; i++) {
sur = (char)num%2;
num /= 2;
if(sur==1) buf[i] = '1';
else buf[i] = '0';
}
i = (char)strlen(buf)-1;
for( ; i>=0; i--) printf("%c", buf[i]);
return 0;
}
0967デフォルトの名無しさん
2007/07/04(水) 00:07:10酔っててダメだわ。寝る。
0968デフォルトの名無しさん
2007/07/04(水) 00:10:43よっとるからまちがえよったな
0969デフォルトの名無しさん
2007/07/04(水) 00:17:11>>956に書いてあるように
アルファベットを数字に直すということです。
0970デフォルトの名無しさん
2007/07/04(水) 00:20:03迅速な返答ありがとうございます
0971デフォルトの名無しさん
2007/07/04(水) 00:24:43using namespace std;
int main(){
int x, i;
int mox[100];
cin >> x;
for(i=0; x>0; i++){
mox[i] = x % 2;
x /= 2;
}
i--;
for(; i>=0; i--){
cout << mox[i];
}
return 0;
}
c++は不慣れだから文句は言うなタコ
もしあるなら自分で改善してね☆
0972デフォルトの名無しさん
2007/07/04(水) 00:31:09i--はforの中にあるほうがスマートかな?
よくわからんけど実戦経験のある人に聞きたい
0973デフォルトの名無しさん
2007/07/04(水) 00:33:20i--がどこにあろうが一緒だよヴォケタコが。
0974デフォルトの名無しさん
2007/07/04(水) 00:35:45セミコロンが多すぎます><
0975デフォルトの名無しさん
2007/07/04(水) 00:59:59#include <iostream>
#include <vector>
using namespace std;
int main()
{
int x;
vector<int> binary;
cout << "整数を入力してください--> ";
cin >> x;
for (; x > 0; x = x >> 1) {
binary.push_back(x % 2);
}
for (int i = binary.size() - 1; i >= 0; i--) {
cout << binary[i];
}
return 0;
}
0976デフォルトの名無しさん
2007/07/04(水) 01:12:570977デフォルトの名無しさん
2007/07/04(水) 01:36:04問題文だけじゃなくてその他の手法についても説明すりゃいいのに
回答する側には高校生もいるってこと理解してる?
0978デフォルトの名無しさん
2007/07/04(水) 01:38:42[2] 問題文(含コード&リンク):
http://www.k.hosei.ac.jp/~wakahara/Cpro_11.htm
ここの最下部にある練習問題33
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン: VS
[3.3] 言語:C
[5] その他の制限:丸投げです、よろしくお願いします
0979デフォルトの名無しさん
2007/07/04(水) 01:44:350980デフォルトの名無しさん
2007/07/04(水) 01:59:310981デフォルトの名無しさん
2007/07/04(水) 02:13:28すごい例題だね
例題4−5
“ジョセファス(Josephus)の問題”を解く。
この問題とは,いまN人が集団自殺を
しようとしているとして,まず全員が円陣に並び,
その円の中のM番目の人を順に処刑する。
1人死ぬと取り除かれ,円の大きさが1減ることになる。
問題は,最後に死ぬ人を見つけることである。一般には,
人々の処刑される順番を見つけることが問題である。
0982デフォルトの名無しさん
2007/07/04(水) 02:14:45関数の仕様書いてないから名前から推測して適当に作った。
deleteminは最小値を消せばいいのか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4493.zip
0983デフォルトの名無しさん
2007/07/04(水) 02:16:05josephus( t, M );// line30-41と差し替え
void josephus(struct node * t, int i)
{
if( t != t->next )// 再起を抜ける条件
{
for( int j = 1; j < i; j++ ) // i番目のnodeを探す
t = t->next;
printf("%3d -->", t->next->key);
struct node* x = t->next;
t->next = t->next->next;
free(x);
j++;
if (j%10 == 0) printf("\n");
josephus( t, i );// Recursive Call!!
}
else
printf("%3d\n\n", t->key);//終端
}
暇だからやってみた('A`)
このまま使うならプロトタイプを忘れずに
0984デフォルトの名無しさん
2007/07/04(水) 02:19:03ソースアップしちゃいなよ。
正直問題文がいとおかし。
0985デフォルトの名無しさん
2007/07/04(水) 02:44:42ありがとうございます
活用させてもらいます
0986デフォルトの名無しさん
2007/07/04(水) 03:12:07[2] 問題文:二つのテキストファイルを開き、
一行ずつ交互に読み出して新たな一つのファイルに書き出す。
ただし一方のファイルが尽きたら、もう一つのファイルだけを
書き出す。これをコマンドラインベースのプログラムで作成する。
プログラム名だけで実行したとき、または、コマンドラインパラメータの
数が間違っているときには、パラメータの書き方を表示して終了するようにする。
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語: C++
[4] 期限: 明朝10時
[5] その他の制限: 特になし
c++初めて約3ヶ月です。私自身でも色々考えたのですがこんな脳みそじゃ
無理でした。getline関数使うとか聞いたのですが使い方がいまいちわかり
ません。
簡単な問題かもしれませんがよろしくお願いします。
0987デフォルトの名無しさん
2007/07/04(水) 03:44:39よろしくお願いします。
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
文字型配列に文字列を読み込んだ後、文字型配列を示すポインタを用いて
文字列の小文字を大文字に、大文字を小文字に変換するプログラムを作成せよ。
(実行例)
文字列を入力せよ:Tanaka Tarou
結果:tANAKA tAROU
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc ver,?
[3.3] 言語: C言語
[4] 期限: 7/5 PM12:00までにお願いします。
[5] その他の制限:文字型配列の中身をポインタ変数を介して操作する。
0988デフォルトの名無しさん
2007/07/04(水) 04:31:18#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void) {
char buf[512];
unsigned i;
printf("Input > ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
for(i=0; i<strlen(buf); i++) {
if(isupper(buf[i])) buf[i]=tolower(buf[i]);
else buf[i]=toupper(buf[i]);
}
puts(buf);
return 0;
}
0989デフォルトの名無しさん
2007/07/04(水) 04:44:25#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
ifstream ifs1(argv[1]);
ifstream ifs2(argv[2]);
ofstream ofs(argv[3] ,ios::out |ios::trunc);
if(!ofs.is_open()){
cerr << "開けません";
exit(1);
}
char buff1[256],buff2[256];
while(!ifs1.eof() || !ifs2.eof())
{
if(!ifs1.eof()){
ifs1.getline(buff1, sizeof(buff1));
ofs << buff1 << endl;
}
if(!ifs2.eof()){
ifs2.getline(buff2, sizeof(buff2));
ofs << buff2 << endl;
}
};
return 0;
}
0990デフォルトの名無しさん
2007/07/04(水) 04:53:53ありがと、もう誰もいないかと思ってたよ。
おやすみなさいノシ
0991デフォルトの名無しさん
2007/07/04(水) 05:04:00#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void) {
char buf[512],*p;
unsigned i;
p=buf;
printf("Input > ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
for(i=0; i<strlen(buf)-1; i++,p++) {
if(isupper(*p)) *p=tolower(*p);
else *p=toupper(*p);
}
printf("%s",buf);
return 0;
}
0992デフォルトの名無しさん
2007/07/04(水) 05:59:52実際にでた問題文をそのまま書きます。
RLC回路においてV0=10V、R=100Ω、L=1H、C=1mFのとき、
コンデンサの両端の電位差V3が7Vになったら、V0と接続するスイッチを切る。
5Vになったらスイッチを再びもどす。
以下これを繰り返すことにする。
ただし、t=0において電荷は無し(V3=0)とする。
このとき回路の閉路方程式、条件を表し、時間tに対するi(t)、V3(t)の変化をグラフに示せ。
閉路方程式をそれぞれもとめて計算して出した公式が上で書いた公式です。
先生から求めた公式はこれでいいと確認してもらいました。
プログラムで t i V3 の値をprintf関数から出して、それをエクセルにいれて計算しようとしてるんですけれど実際のプログラムを作れないという・・
0993デフォルトの名無しさん
2007/07/04(水) 06:15:54tk=0、V3=0からスタートするから、
i(t1)=Vo*0.0001
V3(t1)=0
i(t2)=i(t1)+(V0−100*i(t2)−V(t1))
V3(t2)=V3(t1)+1000*i(t2)*0.0001
こんな感じになるそうです。
0994デフォルトの名無しさん
2007/07/04(水) 07:57:56こちらお願いできないでしょうか?
0995デフォルトの名無しさん
2007/07/04(水) 08:52:40いまいちわからんなあ。微分方程式に見えるけど。
0996デフォルトの名無しさん
2007/07/04(水) 08:58:44ありがとうございました!
これでやっとレポカケマス!
0997デフォルトの名無しさん
2007/07/04(水) 09:10:07その公式の通りに作ってみたけど出力結果がおかしいよ。
公式間違ってるんじゃない?
#include <iostream>
int main()
{
double i, i2, v3 = 0.0, v32, tk, v0 = 0.0, t1, t2, dt = 0.0001, t;
int N = 100;
i = v0* dt;
v3 = 0.0;
t = dt;
std::cout << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl;
do {
if (v3 < 5)
v0 = 10.0;
else if (v3 > 7)
v0 = 0.0;
i2 = i + (v0 - 100.0 * i - v3);
v32 = v3 + 1000.0 * i * dt;
i = i2;
v3 = v32;
t += dt;
std::cout << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl;
} while (--N);
}
0998デフォルトの名無しさん
2007/07/04(水) 10:10:03C/C++の宿題を片付けます 92代目
http://pc11.2ch.net/test/read.cgi/tech/1183511364/
0999デフォルトの名無しさん
2007/07/04(水) 10:20:16[2] 文字列aの中に文字列bは何個出現してるか確認するプログラムを作成せよ
[3] 環境
[3.1] OS:Windows
[3.2] VC 6.0
[3.3] 言語:C++
[4] 期限:[無期限]
[5] 特にないです
#include<stdio.h>
int main(void)
{
char a[]="aiai";
char b[]="ai";
int i,count;
count=0;
if(a&&b)count++;
printf("%d",count);
}
条件分岐が一回しかないので1しかでないのはわかるのですが、そもそもこのプログラムがあってるかわからないので、どなたかアドバイスお願いします
1000デフォルトの名無しさん
2007/07/04(水) 10:54:2910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。