乙!
3 :
◆k6YSo.f4Pk :2007/05/25(金) 16:16:04
大変恐縮ですが以下の問題をどなたか解る方教えていただけるとありがたいです。 [1] 授業単元:アルゴリズム [2] 次の手順で,データ構造「ヒープ」を実現するプログラムheap.cを作成せよ. 1.まず,ヒープに保存する整数データの個数をキーボードから入力する. 2.次にデータを1つキーボードから入力する. そして入力された1個のデータをヒープに挿入する関数(例えばinsert())を呼び出しヒープを完成させる. データが1つ挿入されるたびにヒープの状態をディスプレイ上に表示する(表示方法は各自に任せる). この動作を繰り返し,個数分のデータをすべてヒープに保存する. 3.個数分のデータが全て入力できたら,ヒープの完成状態(木構造)をディスプレイ上に表示する. 4.同様に,ヒープ中の最小データを1つずつ取り出す関数deletemin() を呼び出し, 保存されているデータがなくなるまで個数分だけ繰り返す. データ挿入時と同様にヒープの各状態をディスプレイ上に表示する. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:c言語 [4] 期限: 2007年5月28日 [5] その他の制限:データ構造「ヒープ」にデータを1つずつ入れ, そして1つずつデータを取り出すときの動作を理解すること. くれぐれも全てのデータを一旦入力してからヒープを作り直すのではなく, 一つ一つデータを読み込みながら処理が進む過程を理解すること. データの入力はファイルから読み出すと良い.つまり,キーボードから入力する代わりにファイルから読み出す この問題に見覚えのある人はきっと同じ学校ですね。この授業毎回面倒だよね。
面倒ならやめちまえ
別に良くある問題だと思うが
6 :
デフォルトの名無しさん :2007/05/26(土) 01:59:24
[1]PGMファイルの画像処理 PGMのデータを作ったのですが、途中で止まってしまい、デバックで確認したら プログラム中の g[i][j]= v; ところで落ちているみたいなのですが、 このような書き方は間違いなのですか?またいい方法があったら教えてもらえないですか? プログラムは長いので分けます。 /*-------------------------------------------------------- 指定の入力ストリームからPGM形式の画像データを読み込む --------------------------------------------------------*/ int readPGM ( FILE *fp , unsigned char **g, int *ph , int *pw ){ int i, j, m, v; if( fgetc(fp) != 'P' || fgetc(fp) != '2' ){ printf("このデータはPGM形式ではありません。\n"); return (1); } if ( fscanf( fp , "%d" , pw ) != 1 ){ printf("幅の読み込みに失敗しました。\n"); return (1); } if ( *pw > MAXWIDTH) { printf("幅(%d)が%dを越えています!\n", *pw , MAXWIDTH); return (1); }
7 :
デフォルトの名無しさん :2007/05/26(土) 02:00:32
if ( fscanf( fp, "%d", ph ) != 1 ){ printf("高さの読み込みに失敗しました。\n"); return (1); } if ( *ph > MAXHEIGHT ){ printf("高さ (%d)が%dを越えています!\n", *ph , MAXHEIGHT); return (1); } if ( fscanf( fp , "%d", &m ) != 1){ printf("最大輝度値の読み込みに失敗しました。\n"); return (1); } if ( m != MAXVALUE ){ printf ("最大輝度値(%d)が%dではありません。\n", m ,MAXVALUE); return (1); }
C++で、線形空間とか内積空間を実装する事って可能でしょうか?
可能
>>11 何なんだこの分かりづらいサンプルソースは・・・。
こんなヤツが講師やってんのか、それとも授業進行のせいでこうなってんのか・・・。
16 :
デフォルトの名無しさん :2007/05/26(土) 09:53:11
すいません、>>7の続きです。 for ( i=0 ; i < *ph ; i++){ for ( j=0 ; j < *pw ; j++){ if ( fscanf( fp ,"%d", &v) != 1 ){ printf("要素(%d %d)が読み込めませんでした。\n", i , j ); return (1); } if( v < 0 || v > MAXVALUE ){ printf("要素(%d %d)の輝度値%dが範囲を越えています。\n", i, j, v); return (1); } g[i][j]= v; } } return (0); }
17 :
11 :2007/05/26(土) 10:08:00
>>16 g[][]だと配列の横幅(宣言のとき右側の[]に書く要素数)、分からないだろ?
だから使えない。(詳しくは別の本当の理由があるけど省略)
実際のループの部分は呼び出し元の形分からないと書けないから、
とりあえず関数の引数を unsigned char **g じゃなくて
unsigned char *g にした方が色々分かり易いと思う。
で。
>[1]PGMファイルの画像処理
にテンプレ守ろうとした心意気が若干見れるから回答したけど
ここは宿題片付けるスレだからな。
単なる質問はC/C++のスレ行った方が良い。
↓とかか?
http://pc11.2ch.net/test/read.cgi/tech/1178432985/l50
[1] 授業単元:基礎情報実験第三(B) [2] 問題文(含コード&リンク): 以下の形式のテキストデータを与える 10001001 10100010 00111011 01111101 11111111 10101000 10101011 10101110 これは、8×8の正方形の形で 一つ一つのセルに1か0のデータが書き込まれている。 本問題では、このファイルを読み込み、 (実行時にファイル名を指定できるようにすること。方法は問わない) 最も大きい、1のみが書き込まれた正方形の固まりのセルを見つけ出すこと。 この時、最も左上の座標と、見つけ出した正方形の一辺の長さを出力せよ。 (例の場合は(3,3) 3と出力らしいです。) なお、上記の例では、8×8の大きさであったが 実行時には、おおよそどのような大きさであっても 実行できるようにプログラムを工夫すること。 また、アルゴリズムのオーダーはO(n^2)を超えないことが望ましい。 [3] 環境 [3.1] OS: Unix [3.2] コンパイラ名とバージョン: GCC [3.3] 言語: C [4] 期限: 5/29 [5] その他の制限: 特になし。
>>21 見つけ出した正方形の最も左上のセルの座標と言うことです。
>>22 言い方が悪かった。(1, 0)と(0, 1)ではどっちが左上?(2, 0)と(0, 1)では?
>>23 講義中に言及が無かったのですが、
講義全体では(X,Y)の形式で、右方向がX、下方向にYということです。
複数見つかる場合についても言及が無かったのですが
(教授、穴だらけだよ・・・。)
おそらく、講義の状況から複数出せということなので
0111
1111
1111
1110
の場合は、
(2,1) 3
(1,2) 3
という出力でいいと思います。
穴だらけすぎるので、また抗議したいと思います。
(問題は、例年通りらしいのですが・・・。)
どっから0が出てくるんだろう
26 :
23 :2007/05/26(土) 13:31:40
>>24 ごめん、最も左上の正方形を報告するんだと勘違いしてた。
それなら問題ない。
確かに0出てこないなw セル全体の一番左上の座標は(1,1)だ。 Cプログラマの盲点
28 :
デフォルトの名無しさん :2007/05/26(土) 13:42:13
30 :
◆k6YSo.f4Pk :2007/05/26(土) 14:35:00
>>10 さんありがとうございます。大変助かりました。
何とか
>>3 このプログラムを完成させたいのですがどなたか協力していただけないでしょうか?
32 :
◆k6YSo.f4Pk :2007/05/26(土) 14:47:43
>>31 ダメです・・・。どーしてもわかりません><
>>33 課題だけではなく、いろいろと勉強になりました
ありがとうございました。
(2次元配列っぽくヒープにアクセスする方法は
すごく面白かったです。)
>>34 ここに質問するレベルのやつが、あの書き方を読めるって言うのは意外。
>>33 は意地悪だなと思っていたのだが、そうでもないのか?
どうも、ゆとりを舐めすぎてるな、吊って来る。
>>20 気になったんだが、問題文となるテキストは正方形だけ?
>>33 アルゴリズムに感心した
>>37 そうでなくても、ここから改造できなきゃ、単位落とせって感じだが。
>>33 (゚д゚)ウマー。それは気づかなかったわ。
40 :
13 :2007/05/26(土) 19:07:36
>>15 すいません、問題2のテストデータによる出力見当たりません。
なしでなんとかならないでしょうか?
>>35 個人的には分かりやすくて良いコードだと思うんだけど、どの辺が意地悪?
>>20 が面白そうなんでやってみようかと思うんだが、
依頼者見てるかな。
> なお、上記の例では、8×8の大きさであったが
> 実行時には、おおよそどのような大きさであっても
> 実行できるようにプログラムを工夫すること。
「どのような大きさでも」ってあるけど、
長方形とか非矩形の場合もあるのかな?それとも正方形限定でいいのかな?
あと、そのファイルには '0' か '1' (か改行) しか書いていないと限定していいのかな?
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):タートルグラフィックライブラリを用いて ドラゴン曲線を描くプログラムを作成せよ。 [3] 環境 [3.1] OS: Turbolinux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 5/28 17:00 [5] その他の制限:引数を持った関数の再帰を利用する。 ドラゴン曲線は・直線をそれを底辺とする直角二等辺三角形の2辺に置き換える。 ・以降は、交互に上下に入れ替わった辺で置き換える。 ・これを繰り返す。 ことで作れる曲線です。 どなたか分かる方教えてください。お願いします。
>>44 タートルグラフィックスライブラリとやらの入手先
てめぇ〜ら、0^0がなんなのか、もう分かったよな?答は不定、ぶっちゃけると存在しない。 もし人間が勝手に、ふっと沸いて0^0と書いたとしても、結果の値は存在せず。 不定だから1でも0でも良いんだよとか言っちゃっている奴は注意。 不定だから何か適当な値でも良いのではなく、値そのものが存在しない。
いや、申し訳ないが0の0乗なら0なんだ。
>>53 ダウト。知ったか&勘違い野郎乙w ネットでそれに関して検索するといろいろと出てくるけど
答えは定まっていない不定だよ。極限を使ったやり方を紹介しているところもあるが、それは
限りなく0に近づけた底に限りなく0に近づけた指数が限りなく1に近づく(収束)すると言うが
限りなく0に近い値は0にはならない。そして結果についても0や1という具体的な値にはならない。
極限で求めるやり方は極限を用いることそのものがすでに不適切。
よく、電卓プログラムやべき乗を求めるライブラリを使うとか、Google電卓を使ったとか言う人の意見もあるが それについてはまったくのでたらめ。単にプログラム側が底をなんにしようと0乗を1と出すように 仕組まれているだけであって、本当ならその場合は条件分岐にて処理をして 不定 やら NAN とすべき。
なぜ急にこんな話題を?
>>54 いや、申し訳ないが、>53には1だとは書いてないのだが。
>>56 暴れたいんだけどネタがないからしょうがなく自分で過去の話題振ってるんじゃない?w
ほっときゃ朝には飽きるよきっと
連鎖あぼーんってJaneで設定できる?
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): マス目1辺の数xと、各行と各列の黒いマスの個数が条件として ファイルで与えられたとき、この条件を満たすマス目のパターンの 個数を求め、全パターンを表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 最終期限は6月17日までです。 [5] その他の制限: とりあえず、ファイルを読み込み配列に格納する関数と、画面にパターンを 出力する関数は出来ているので、メインとなるパターンの個数を求める関数の 大まかな手順というかアルゴリズムを考えられるだけ教えて頂けると助かりま す。プログラム自体は自分で考えようと思ってます。 現段階では総当たりしか思いつかないので、総当たり以外で何かあれば、 教えて下さい。
>>60 ちょっと考えてみたけど、総当たりぐらいしか思い付かんな
一つだけ見つけりゃいいってなら、ひょっとしたら何かやり方もありそうだが全部だしな
後は分枝限定法で無駄を省くぐらいしか無いんじゃね?
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 「与えられた2つのプログラムを1つにしなさい」 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C 1つめのプログラム main() { #include <stdio.h> double max, min, data; int i, n; FILE *fp; if ((fp = fopen ("foobar.txt", \ "r")) == NULL) { printf ("file not found"); exit (1); } fscanf (fp, "%d", &n); if (fscanf (fp, "%lf", &data) \ ! = EOF) { i = 1; max = data; min = data;
while (fscanf (fp, "%lf", &data) != EOF) { i = i + 1; if (data > max) {max=data;} else if (data >= min) {} else {min = data;} } printf ("n = %d 最大値 =%f \ 最小値 = %f", i, max, min); if (i !=n) {printf (" 数が合いません n= %d \ i=%d", n, i);} } else {printf (" 数値がありません");} fclose (fp); }
64 :
62 :2007/05/27(日) 04:12:45
2つ目のプログラム main() { #include <stdio.h> double max, min, data; int i, n; FILE *fp2; if ((fp2 = fopen ("fooout.txt"), \ "w")) == NULL) { printf("file open error"); exit(1); } scanf ("%d", &n); if (scanf ("%lf", &data) \ != EOF { i = 1; max = data; min = data; while (scanf ("%lf", &data) != EOF) { i = i + 1; if (data > max) {max = data;} else if (data >= min) {} else {min = data;} }
65 :
62 :2007/05/27(日) 04:14:34
fprintf (fp2,"n = %d 最大値 = %f \ 最小値=%f",i,max,min); if (i != n) {fprintf (fp2," 数が合いません n= %d \ i=%d" , n, i);} } else {fprintf (fp2," 数値がありません");} fclose (fp2); } 上記は入力と出力のプログラムで、それらを一つにしろということだと思うのですが、どこに手を入れたら良いのかわからず 連レスすみません。よろしくお願いします。
main() { #include <stdio.h> ちょっwwwwwwwwwおまっwwwwwwwww これ無理wwwwwww しかも所々、改行されているところに \ が入っているしwwwwww これ、UNIXでmuleでも使って入力したんかい?
っつか、無理かと思ったがBCCでmain関数の中にstdio.hインクルードが通ったwwwwすげっwwww
>>67 includeディレクティブはソースを引用するだけだから、関数内でできないことが書かれていない限りエラーにはならない。
また、改行文字をエスケープ文字でエスケープしてもそれは単に無視される。
勿論、一般的には間違いだが。
>>68 改行についてはprintfの""の中で使うやつじゃなくて、単に行の端にある
\ の部分について。例えば
if ((fp2 = fopen ("fooout.txt"), \
if (scanf ("%lf", &data) \
この一番右にあるみょうちくりんなやつ。
includeについては確かにそれ自身もソースの一部だから、適当な場所にありゃ良いというか
おそらくstdio.hの中に記述されているライブラリや定義を使う分の上にありゃ問題ないかもね。
>>60 >マス目1辺の数xと、各行と各列の黒いマスの個数
これって、
1 0
1□□
1□□ (条件)
↓
■□
□■ (解:1個)
ってこと?凄い面倒くさそうなんだけど・・・。
>>71 2列目は0でそのパターンはありえない。っつーか、ピクロスみたいなやつだとしたら
ちと面倒だな。まぁ、それを解くプログラムとして使うのかもしれんが、っと推測してみる。
ああ、よく見たら解なしかw むずいわぁ。
実際に出来上がった塗りつぶしありなしのマス目から、各行と列の数値を書き出す スクリプトなら書いたことはあるが、その逆の各行の数値からパターンを書き出すのは やったことないなぁ・・・俺はパス。戯言ですまそ。
>>60 一辺の長さがnで、各行各列の黒マスの個数が全て1のときを考えると、解はn!個ある。
よって、最悪の場合に指数的な時間が掛かることは避けようがないので、なんらかの総当たりが必要。
>>43 さん
亀レスで申し訳ありません。
正方形限定です。このいっぺんの大きさをnとして
オーダーがn^2以下になるようにする必要があります。
また、テキストには01\n以外の文字は無いと仮定して大丈夫です。
>なんらかの総当たり はぁ?一番時間がかかるだろ総当りは...
>>77 だから解くのに時間がかかる問題だと言ってるんだが。
もちろん、愚直な総当たりしか方法がないと言ってる訳じゃない。
枝刈りしながら左上から埋めていくだけでも相当速くなるだろう。
それでも総当たりには変わりない。
枝刈りしたら総当りじゃないんだよ。
>62 入力プログラムの入力ファイル"foobar.txt"から、出力プログラムの出力ファイル"fooout.txt"へ出力するプログラムにしろ、ってことかな?
2位以下に圧倒的大差をつけ独走していた日本。
だが…
“突然の終了” “カウントのリセット” “新ルールの導入”
逆境に挫けず再び0から走り出した日本であったが、その前に立ちはだかった新たなる壁、ハンガリー。
彼らの投入した謎の新兵器により、日本はとうとう首位から転落してしまった。
ひとたび彼らが全力を出せば、現在の戦力のままでは太刀打ちできない。
首位の奪還・死守、そして総合優勝のためには、貴様らの参戦が必要不可欠である。
日本の力を世界に知らしめるため…
今一度集え、戦士たちよ!!
─── 一番クリックした国が優勝 ───
http://wwwww.2ch.net/test/read.cgi/news4vip/1180217014/
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): Nbit同士の2進数表記の値を入力して結果を筆算表記で印字せよ。 ただし1度10進数に変換してはならない。 また最低16bit同士の演算ができるようにすること。 例 000011 x 001101 --------- 000011 000000 000011 000011 ---------- 000100111 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
84 :
83 :2007/05/27(日) 12:03:24
自分なりに
#include <stdio.h>
void main()
{
unsigned int a,b,c;
c = 0;
scanf("%d %d",&a,&b);
while(b!=0){
if(b&1) c+=a;
a=a<<1;
b=b
>>1 ;
}
printf("%d\n",c);
}
シフトを使った一般的な乗算のアルゴリズムを作ったのですが
桁上がりの判定ができていないし、筆算表記もさっぱりです。
どうか力をお貸し下さい。
[4] 期限: 5月27日24時
>>77 日本語でおk?っつか日本語分からないなら消えろ
>>81 79とは別人だし、ソース無いけど。
総当りって「全ての状況を評価して答えを出す」方法だと思うんだが。
枝刈りしちゃうと「評価されない状態」が出てくるわけで、
総当りとは言えないんじゃない?
と思ったんだけど「総当り法」という方法を現す言葉があって、
『「分枝限定法(これが枝刈り?)」は「総当り法」に含まれる』
という記述が幾つかネットで見つかったので、
用語的には俺が間違えているのかも知れぬー。
よく分からぬー。
>>82 >ただし1度10進数に変換してはならない。
ここの意味が分からない。
int使って計算したらダメってことか?
意味分からん。
intは10進数じゃないと思うんだが。
でも「表示で10進数使ってヤレ」言われても使いようが無いし。
なんか前も16進で似たような問題あったな・・・。
安価ミスに吹いた
90 :
83 :2007/05/27(日) 12:37:30
>>87 説明不足すみません。
>ただし1度10進数に変換してはならない。
これは一旦入力した2つの2進数を10進数に変換して計算し、
最後に2進数へ変換してはならないという事です。
また2つの2進数は符号なしである事を付け忘れていました。
漏れも。そして分からないならスルーすりゃ良いじゃんって感じ・・・日ごろまともに相手にされていない 人間がとる特徴的な行動、言動だなw
>83 aとbの入力のとこは自分でなんとかして。 #include <stdio.h> #include <string.h> int main(void) { char a[] = "11", b[] = "11", c[32] = {0}; int i, j; int n = strlen(a); for(i=0; i<n; i++) putchar(' '); puts(b); for(i=0; i<n-1; i++) putchar(' '); putchar('*'); puts(a); for(i=2*n; i>0; i--) putchar('-'); putchar('\n'); for(i=0; i<n; i++) { for(j=0; j<n-i; j++) putchar(' '); for(j=0; j<n; j++) { putchar(((a[n-1-i]-'0')&(b[j]-'0'))+'0'); c[i+j] += (a[n-1-i]-'0')&(b[n-1-j] - '0'); if(c[i+j]/2) { c[i+j+1] += c[i+j]/2; c[i+j] %= 2; } } putchar('\n'); } for(i=2*n; i>0; i--) putchar('-'); putchar('\n'); for(i=2*n-1; i>=0; i--) printf("%d", c[i]); }
>>90 きみの説明不足というより、
おそらく出題者が進数の意味を分かってないな。
単位が欲しけりゃ、こういうアフォな出題者の意図を汲む力が必要。
今回の場合、
「10進数に変換するな」 = 「intに変換するな」
というのが出題者の意図で、
それを見抜けずにintを使っちゃったら×にされてしまうよ。
>>93 int型の意味を理解していないことを露呈しなくて良いから、口を塞いで・・・じゃなくて
キーボードから指を離せ。
ケンカしないで><
前スレ
>>482 で出した課題で、前スレ
>>690 で解答してもらったんですが
C++言語のところC言語で解答されてて、ある程度C++に文法は変えたんですけど
この下記のプログラムだけが(3行目)分からなくて、これをc++に変えた場合
printf("\n質問\nC言語好き?\n");
scanf("%d",&ch);
printf("%s\n", ch==1? "好きなら上達も速いわ頑張って!" : "そう、別に意味は無いのよただ聞いてみただけ");
どうプログラムなるか教えてください。
>>98 自演自己擁護乙。
> 「10進数に変換するな」 = 「intに変換するな」
意味が通じないんですけどぉ〜〜?
101 :
98 :2007/05/27(日) 14:26:29
>>100 自演じゃないよ。
> 「10進数に変換するな」 = 「intに変換するな」
>意味が通じないんですけどぉ〜〜?
>>93 は、「出題者は、「10進数に変換するな」という言葉を「intに変換するな」という意味で使っている」という指摘をしたんだろ。
>>101 それをお前もそう思うなら相当なあほだ。口を閉じてろ。
だいたい
>>83 にすでに計算過程の例が出てんだろ。10進数に変換して計算ってのは
3
x13
でやる形にするなってことだろ。
104 :
デフォルトの名無しさん :2007/05/27(日) 14:31:41
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 指定したテキストファイルを読み込み、重複した数字を削除したものを 指定したテキストファイルに出力するプログラムを作りなさい。 読み込むファイルは 154646 467687 468767 154646 のように1行に1数字で1万行ほど書いてあります。 [3] 環境 [3.1] winXP [3.2] コンパイラ名とバージョン: Visual Studio [3.3] 言語: C++
>>103 そうも読めないことはないけど、
>>93 の解釈の方が自然だろ。
その形にしたって扱いやすいことは何もないんだから。
タートルグラフィックライブラリとかいうの白根
>重複した数字 >1行に1数字 kwsk 先の行に現れたものとダブっている後に現れた行は出力しない、ってこと?
文字列配列の動的確保はどのようにすればいいのでしょうか? 文字列の長さはどうでもいいのですが、文字列の個数を任意の数にしたいのですが。
110 :
デフォルトの名無しさん :2007/05/27(日) 15:05:37
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): キーボードから入力した3桁の数字がぞろ目であるか判定するプログラムの作成。 ぞろ目かどうかを判断する関数 int is_zorome(int n) を定義する。関数int is_zorome(int n) は,n がぞろ目のとき1を戻し,n がぞろ目でないとき0を戻す関数。 入力する数字は、100以上999以下に限定。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C [4] 期限: [5] その他の制限: とくにありません。 どなたかお願いします。
fbc cat
112 :
104 :2007/05/27(日) 15:10:13
>>108 簡単な例で示すとテキストファイルに
1
2
2
5
4
4
3
5
の用に記述されていて、それを読み込んで
1
2
5
4
3
のようなテキストを出力するようなプログラム
(実際はもっと大きな数で、1万行くらいある)
>先の行に現れたものとダブっている後に現れた行は出力しない、ってこと?
そんな感じ
int is_zorome(int n) { int a[] = { n % 10, n / 10 % 10, n / 100}, i; if (n < 100 || n > 999) return 0; for (i = 1; i < 3 && a[0] == a[i]; i++); return i == 3 ? 1 : 0; }
>>112 こんなん?
#include<iostream>
#include <fstream>
#include<vector>
#include<algorithm>
using namespace std;
fstream outputFile("output.txt",ios::out);
void print(const int i){
outputFile << i << std::endl;
}
int main(void){
if(outputFile.fail()) return 1;
fstream inputFile("input.txt",ios::in);
if(inputFile.fail()) return 1;
vector<int> v;
while(!inputFile.eof()){
int i;
inputFile >> i;
vector<int>::iterator it=find(v.begin(),v.end(),i);
if(it==v.end()) v.push_back(i);
}
for_each(v.begin(),v.end(),print);
return 0;
}
116 :
62 :2007/05/27(日) 15:23:11
お答えいただきありがとうございました。
答え以外にも勉強になる考え方を教えていただき大変参考になりました。
>>80 亀レスですが、そういうことです。
117 :
45 :2007/05/27(日) 15:39:18
>>113 お力添え、どうもありがとうございます
あとは自分でやってみますね
!(-_Φ+) 定義は制限無く論議できる物です。 考える事は素晴らしいです。 全てに対して有効なdata.を創るのは、理解が必要と改めて思いました。
>>110 #include <stdio.h>
int is_zorome(int n){
char buf[ 3+1], c;
int i;
if(n < 100 || n > 999) return 2;
sprintf(buf, "%d", n);
for(i=1; i<3; i++){
if(buf[0] != buf[i]) return 1;
}
return 0;
}
int main(void){
int n;
scanf("%d", &n);
switch(is_zorome(n)){
case 0: puts("ぞろ目"); break;
case 1: puts("ぞろ目違う"); break;
case 2: puts("3桁がいいなぁ"); break;
}
return 0;
}
122 :
104 :2007/05/27(日) 15:48:51
>>115 動かしてみたのですが、処理が遅すぎて終わりませんでした。
>>118 結果が表示されませんでした。
>>112 では簡単な例で数字を出しましたが、実際に読んでいる数は
201032610121
221933098595
201032538484
222434513975
221933386002
221933386002
232236892105
232236376166
222434623109
232236376166
232234455416
202134063179
202134063179
のような数字です。
123 :
118 :2007/05/27(日) 16:11:48
125 :
60 :2007/05/27(日) 16:26:11
皆さんレスありがとうございます。 やはり、なかなか難しいんですね。 ちなみにマス目1辺の数xは、最大でも7で動作すれば良いらしいです。 最低限4では動作しないとダメだということでした。
126 :
104 :2007/05/27(日) 16:29:15
>>124 無事に動きました。ありがとうございました。
127 :
デフォルトの名無しさん :2007/05/27(日) 16:36:07
夕張市民涙目wwwww 田舎者は一般的にだらしがない。 視野が狭い。想像力が無い。排他的。 独創的な発想をすぐ潰しにかかる。 いまだに車必須って何だよwww効率悪いだけじゃんwww 夕張再建あきらめろ。全員死ね田舎者。見ててむかつく
>>44 再帰関数作った。mainはやる気無し。とりあえず3回折。
ライブラリの使い方あってるかどうかは知らん。
#include "turtle.h"
#include "winlib.h"
void dragon(int n, double xi, double yi, double xf, double yf){
double xm,ym,dx,dy;
if(n==0){g_line(xi,yi,xf,yf);return;}
dx=xf-xi;dy=yf-yi;
xm=xi+(dx-dy)/2;ym=yi+(dx+dy)/2;
dragon(n-1,xi,yi,xm,ym);dragon(n-1,xf,yf,xm,ym);
}
void main(){initwin();dragon(3,100,200,100);}
129 :
127 :2007/05/27(日) 16:46:23
ごめん誤爆ったorz
前スレ711です。どなたかお願いしますorz [1] 授業単元:IT入門B1 C言語 [2] 問題文 二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。 ここでa,b,cは整数、x1,x2は浮動小数とする。 [3] 環境 [3.1] OS: Linux [3.2] gcc versionは不明ですが最新版のはずです [3.3] 言語:C [4] 期限: 2007年5月28日0:00まで [5] その他の制限: 特にありません。
>>104 こんなもんでいいんじゃねぇの。
#include <iostream>
#include <set>
using namespace std;
int main()
{
string line;
set<string> seen;
while (getline(cin, line)) {
if (seen.find(line) == seen.end()) {
cout << line << '\n';
seen.insert(line);
}
}
return 0;
}
134 :
13 :2007/05/27(日) 19:03:41
>>48 すいません、ごり押しで問題2も解いてもらえないでしょうか?
お願いします
135 :
デフォルトの名無しさん :2007/05/27(日) 19:26:06
[1] 授業単元:プログラミング方法論 [2] 問題文(含コード&リンク):迷路を横型探索と縦型探索で解くプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:2007年5月31日17:00まで [5] その他の制限:特になし。 よろしくお願いします。
>>122 -112
導き出すのに大分時間が掛かりましたが…
正直な処、驚きました。
一部です。 「fi ibi i」
途中で気が附かなくてはならない事がありますが…
>>138 #include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
int main(int argc, char **argv)
{
if (argc != 4)
return cerr << "usage: " << argv[0] << " FILE1 FILE2 FILE3\n", 1;
ifstream file1(argv[1]), file2(argv[2]);
ofstream file3(argv[3]);
if (!file1 || !file2 || !file3)
return cerr << "can't open file" << endl, 2;
map<string, string> selection;
map<string, string>::iterator mi;
string s1, s2;
while (file2 >> s1 >> s2)
if ((mi = selection.find(s1)) != selection.end())
mi->second += ",", mi->second += s2;
else selection[s1] = s2;
while (getline(file1, s1)) {
if ((mi = selection.find(s1)) != selection.end())
file3 << mi->second;
file3 << '\n';
}
return 0;
}
144 :
デフォルトの名無しさん :2007/05/27(日) 21:26:44
プログラムを作成し、Makefileを作成する課題です。 プログラムはクイックソートなんですが、 mainと関数部分を同じファイルに書いた場合は正常にコンパイル、動作したので、 main部分を main.c 関数部分を quick.c で保存、 Makefileを作成し % make で実行したところ gcc -o q-sort -O main.o quick.o -lm quick.o: In function `main': quick.c:(.text+0x15): multiple definition of `main' make.o:make.c:(.text+0x0): first defined here collect2: ld returned 1 exit status make: *** [q-sort] エラー 1 となり、コンパイルできませんでした。 main関数はmain.c以外の場所にはないのですが・・・ 解決方法を教えていただけないでしょうか? よろしくおねがいします。
>>144 メッセージからするとmake.cをコンパイルして出来たmake.oとやらと
リンクしようとしてエラーになっとるようだが?
146 :
144 :2007/05/27(日) 21:34:34
Makefileの中身です。 CC = gcc CFLAGS = -O LDFLAGS = -lm OBJECTS = make.o quick.o q-sort: $(OBJECTS) $(CC) -o q-sort $(CFLAGS) $(OBJECTS) $(LDFLAGS) clean: rm -f *.o *~
なんかサフィックスルール、抜けてないか? cleanしてからmakeしてみ。
で、
>>144 によればキミはmake.cではなくmain.cというソースにしたのでは
なかったのかな?ただのtypo?
>>144 エラーをそのまま解釈すると、
quick.cの中にもmain関数があるんじゃないかね。
あ、もしかして、quick.cのなかで #include "main.c" とかしてないか? 調べ方だが nm quick.o してみて T mainとでたらquick.oの中にmain関数が含まれてる U mainとでたら含まれてない
>>150 > #include "main.c"
すげぇエスパーだなw
152 :
13 :2007/05/27(日) 21:45:45
>>141 ありがとうございます、気に入らないなんてとんでもないです
本当に助かりました。
153 :
144 :2007/05/27(日) 21:58:34
>>147 % make clean
rm -f *.o *~
% make
gcc -O -c -o main.o main.c
gcc -O -c -o quick.o quick.c
gcc -o q-sort -O main.o quick.o -lm
quick.o: In function `main':
quick.c:(.text+0x15): multiple definition of `main'
main.o:main.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [q-sort] エラー 1
>>150 T main でした
154 :
144 :2007/05/27(日) 22:00:13
quick.cの中を調べてみました。 一度quick.cでつくって、バラしたはずだったのですが、 複数起動していたみたいで、うまく消した後が削除できていませんでした。 無事解決しました。 ありがとうございました
155 :
144 :2007/05/27(日) 22:05:53
もう一つ質問なのですが、 最初自分でクイックソートを書いたのですが、うまくソートされませんでした。 ソースを見て紙に一つずつ書きながらやってみると、確かにうまく出来なさそうな気がするのですが いまいちぱっとしません。 もしよろしければ、修正ポイントなど教えていただけないでしょうか。 -------- #include<stdlib.h> #include<stdio.h> #define SIZE 10 int S[SIZE]; void quick(int S[],int from,int to) { int i,j,k,l,pivot; if(from<to) { pivot=from; i=from+1; j=to; if(i!=j) { while(i<j) { if(S[i]>S[pivot]) { while(S[j]>S[pivot]) { j--; } if(S[j]<S[pivot]) { swap (&S[i],&S[j]); j--; i++; } else { i--; } } else{ i++; } } swap (&S[i],&S[pivot]); } else { if(S[pivot]>S[i]) { swap (&S[i],&S[pivot]); } } quick(S,from,i-1); quick(S,j+1,to); } } --------- mainとswapは省略してます 最終的には書籍に載っていたサンプルソースで実装しました・・・
156 :
155 :2007/05/27(日) 22:11:06
改行を減らしたら、見づらいソースになってしまいました。 すいません。
[1] 授業単元: [2] 問題文(含コード&リンク): ある西暦年が「うるう年」かどうかは、次のように判別する。 4の倍数なら「うるう年」である ただし、4の倍数であっても、100の倍数なら「うるう年」ではない さらに、100の倍数でも、400の倍数なら「うるう年」である 西暦2000年はうるう年?2100年は? ある西暦年がうるう年かどうかを判別する条件判断文を書け。 [3] 環境 [3.1] OS: xp [3.2] visual studio 2005 [3.3] 言語: C [4] 期限: 明日の朝までにお願いします [5] その他の制限: 特になし
>>157 #include <iostream>
using namespace std;
int main()
{
int ch;
cout << "\n質問\nC言語好き?\n";
cin >> ch;
ch==1? cout << "好きなら上達も速いわ頑張って!" : cout <<"そう、別に意味は無いのよただ聞いてみただけ";
return 0;
}
前スレ711です。 前スレ993さんありがとう!
>>158 #include <stdio.h>
#include <stdlib.h>
int main(void) {
int y;
char buf[32];
printf("Input year > ");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
y=atoi(buf);
if(y<=1582) return 1;
if( (y%4==0 && y%100!=0) || y%400==0 )
fprintf(stdout,"%dはうるう年\n",y);
else fprintf(stdout,"%dは平年\n",y);
return 0;
}
162 :
かも :2007/05/27(日) 23:39:58
ニューメリカルレシピインシーって本やったことありますか???
ニューメキシコ州、の近くになら行った事あります。
>>155 なんとかやりたいことは分かったと思う。
まずピポットの位置をfromに固定して、
ピポットより右〜toまでをピポットより小さい数を左に、大きい数を右にする。
で、並び終わったら、ピポットの数値をその間に入れたい、と。
コレの再帰による繰り返しでソートしたいように見える。
さてまず。
while(S[j]>S[pivot]){ j--; }
このループでiとjの大小を考えてないから、ループ回ってる間にiより小さくなって、
既に小さい順に並んでる数値を変なところと入れ替えてしまってる。
次に、ピポットをそれより小さい値の一番右とスワップするところだけど、
if(S[i]>S[pivot]){
これで、常にiがピポットより大きい値を指しているので、
そのままスワップすると、スワップ後にピポットより大きい値が左に来てしまう。
最後に、これはしっかり確かめたわけではないけど、
同じ大きさの数値が2つ以上存在する時のことが考えられて無いように見えた。
フツーにピボット書き間違えてる。 眠気のせいにしといて。お願いします。
168 :
60 :2007/05/28(月) 03:39:14
総当たりでも何とかいけそうなんで、総当たりで普通にやろうと思います。 お騒がせしました。
>>168 何とかというか、(枝狩りとかの違いはあるにしても)総当たりしか無いと思うぞ
全部列挙じゃなくて1つだけってのとは違うからな
171 :
デフォルトの名無しさん :2007/05/28(月) 06:03:58
[1] 授業単元: [2] 問題文: stringを使い、 "A" が "AB" に変わり、"B" が"A" に変わる文字列で、 出力結果が、 n=0 A n=1 AB n=2 ABA n=3 ABAAB … となるようなプログラム [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:Visual C++ 2005 [3.3] 言語:C++ [4] 期限:年05月30日 [5] その他の制限:なし お願いします
172 :
デフォルトの名無しさん :2007/05/28(月) 08:07:21
問題:次の条件を満たす関数 dispArray() を作りなさい。 入力は整数型のポインタ 入力されたポインタに対して、順に格納されている正の整数を 10 個ずつで改行しながら表示する。 入力の参照先に -1 が入っていたら終了する 使用言語:CまたはC++
void dispArray(int *p) { int i; for(i=0; p[i]!=-1; i++) { printf("%d ", p[i]); if(i%10==9) putchar('\n'); } }
>>172 次からは
>>1 読んでちゃんとテンプレ埋めろよ
void dispArray(int *array){
int *i = array;
while(*i != -1){
printf("%d",*i++);
if((i-array)%10==0) printf("\n");
}
}
とりあえずC言語で。
174 名前:デフォルトの名無しさん 投稿日:2007/05/28(月) 08:14:59
>>172 次からは
>>1 読んでちゃんとテンプレ埋めろよ
>>171 出力結果はできた。問題の意味がよくわからんので合ってるか知らん
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::string;
using std::ostringstream;
static const int LOOP = 4;
static char* abc[] = {"A", "B", "A", "AB"};
int main()
{
ostringstream sout;
for (int i = 0; i < LOOP; i++) {
char* str = abc[i % 4];
sout << str;
cout << "n=" << i << " " << sout.str() << endl;
}
return 0;
}
n=4ならABAABABAじゃね?
フィボナッチっぽいね
>171 C++が分からんのでCだけどなんかの参考にでもなれば #include <stdio.h> void f(int n) { if(n==0) printf("A"); else if(n==1) printf("AB"); else { f(n-1); f(n-2); } } int main(void) { int i, n; scanf("%d", &n); for(i=0; i<n; i++) { printf("n = %d ", i); f(i); putchar('\n'); } return 0; }
[2] 問題文(含コード&リンク): 学生が朝8時x分に起きて出発しすると8時y分に大学に着くとしよう.講義に間に合うならば自転車で大学に行きたいが, 自転車では間に合わない場合はタクシーを利用せざるを得ない.起きた時刻を入力すると,起きた時刻,利用すべき交通手段と 到着予定時刻が表示されるプログラムを作成せよ. 出力結果 10←入力 wake up time = 8:10 arrival time = 8:40 by bicycle ________ 52 wake up time = 8:52 arrival time = 8:59 by taxi ________ 58 wake up time = 8:58 ryunen ___________ 68 error [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [5] その他の制限:プログラム名は「arrival」とすること. プログラム中の入力,出力の値は整数型の変数を宣言して扱うこと(小数点以下は切捨てる). 入力された値が,0未満,60以上の場合は,errorと表示させる. 時刻の分の表示は2桁の整数とする.例えば8時2分のように一桁の時刻の場合は8:02のように2の前に10の位の0を加えること. 大学までの道のりは5kmとする. タクシーの平均速度は40km/hとする. 自転車の平均速度は10km/hとする. 起きると同時にタクシーや自転車で出発可能であるとする. 自転車やタクシーが9時前に到着すれば講義に間に合うとする(9時に到着では間に合わない). タクシーでも間に合わない時刻に起きてしまった場合は"ryunen"と表示させる. よろしくお願いします。
#include <stdio.h> int main(void) { int n; int taxi, bicycle; taxi = 60 * 5 / 40; bicycle = 60 * 5 / 10; scanf("%d", &n); while(n>=0 && n<60) { printf("wake up time = 8:%02d\n", n); if(n+taxi >=60) printf("ryunen\n"); else if(n+bicycle>=60) printf("arrival time = 8:%02d by taxi\n", n + taxi); else printf("arrival time = 8:%02d by bicycle\n", n + bicycle); printf("________\n"); scanf("%d", &n); } printf("error\n"); return 0; }
>>181 めっちゃはやくといてくれてありがとうございます!
C/C++の宿題を片付けます 87代目の947です。 ありがとうございました。
[1] 授業単元: [2] 問題文(含コード&リンク): an=(1+1/n)~n数列の第n項目までの値を表示するプログラム ./progression n=? 5 n=1 2.00 n=2 2.25 n=3 2.37 n=4 2.44 n=5 2.49 [3] 環境 [3.1] OS:linux [3.2] gcc [3.3] 言語: C [4] 期限: [5] その他の制限: 小数点以下2桁までの表示です。 どなたかよろしくおねがいします。
>>184 #include <stdio.h>
#include <math.h>
int main(void){
int n, n_max;
printf("n=? ");
scanf("%d", &n_max);
for(n=1;n<=n_max;n++){
printf("n=%d %.2f\n", n, pow(1.0+1.0/n, n));
}
return 0;
}
>>184 #include <stdio.h>
#include <math.h>
int main(void){
double n,i;
printf("n=? ");
scanf("%lf",&n);
for(i=1.0; i<=n; i+=1.0) {
printf("n=%.0lf %.2lf \n",i, pow( 1.0+(1.0/i) , i) );
}
return 0;
}
nとiをdoubleにする意味が全くわからん。
doubleへのキャストを省くためじゃないの?
>>187 int型の変数をdouble型で扱うライブラリにぶち込んで返ってきた値をfloat型の書式を用いている方が
よっぽどわけがわかんねぇ。へぼプログラマ黙ってろかす
191 :
188 :2007/05/28(月) 16:57:04
あ、別にキャスト要らないか。
不要か必要かじゃなくて、適切か不適切かの話だろ。荒れるから自分勝手な意見は慎め。
Cでは関数呼び出しの時にchar -> int、float -> doubleへの格上げが されるので、printf()に %lf はいらん。%fで十分。 C99では %lf も正式に認められているが。
>>187 =
>>192 =日本語も適切な扱い方も知らないバカ 黙ってろカス
187 名前:デフォルトの名無しさん 投稿日:2007/05/28(月) 16:54:02
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
nとiをdoubleにする意味が全くわからん。
足りない頭ってやーね、こういうやつって自分が原因で他人に迷惑をかけているのに
気づかずに他人のせいにしてファビョるタイプだろ。消えろ
>>193 荒れるのが嫌なら誰の発言のどの部分をどういう根拠で批判しているのか明確にしてくれ。
>>194 > C99では
関係ない。ちなみに、お前が言っているのは暗黙のだろ?そういうプログラマいらねーんだよ
クソなソースを書いているクズだから
>>195 >int型の変数をdouble型で扱うライブラリにぶち込んで返ってきた値をfloat型の書式を用いている方
これの意味が分からんから解説してくれと言ってるだけだが。
それから、俺は192だが187じゃない。
>>196 いや、お前が最初にいったんだろ。意味がわからないのはお前の頭が足りないからwwwww
黙ってろよ、クソプログラマw おめーのソースの方がわけわかんねぇ〜ぜ
なにれこ?w
>>185 int n, n_max; pow(1.0+1.0/n, n));
> どの部分をどういう根拠で批判しているのか明確
>>187 > 意味が全くわからん。
どっちがw 適切さを知らない奴は、いつどこで不具合が起こっているか気づいてないんだろうね。
まるで、タイヤの空気圧が十分でないことがまさかの事故の原因になるとかw
>>186 のコードについては
1. math.h に pow のプロトタイプ宣言があるなら全く問題無い
2. C99以前では浮動小数点の書式指定は %f が正式
%lf は、C99で %f の代わりに書いても良いことが正式に決められた
203 :
201 :2007/05/28(月) 17:11:03
>>199 だからお前みたいな頭のおかしい奴はトリップ付けて発言しろ
あぼーんしやすいから
但し、>186のコードはループ制御変数がdoubleなのでパフォーマンスに劣る可能性はある。
それと今回はループ変数がdoubleで1.0刻みだから良いが、もし刻みが 0.1とか0.01とかだと誤差が累積してループの終了条件が狂う事がある。 そういう時はintで回してdoubleは中でintから生成。
>>205 パフォーマンス重視ならそれなりに措置をとるだろ。そういうくだらねぇことで
不適切なものを良しとするプログラマーはどうかしてんな。
>>207 プロトタイプ宣言の意味も分からないカスは黙ってろ
>207 >float型の書式 これよりマシw
>>204 お前の方が頭がおかしいことに気づけよ、意味わんねぇ=自分が理解していない=日本語が理解できないw
最近、日本語でおkとか言う奴に限って、理解力がないだけだったりするから困るね。
こりゃNHKのことばおじさんも大変だ。ネタがあって良いだろうけどw
213 :
202 :2007/05/28(月) 17:20:23
>>207 つまり暗黙の変換を使うなって意見?
それはそれで良いんだが、前提にしていい常識じゃないだろ。
そういう意見なら最初からそういうべきだ。
214 :
202 :2007/05/28(月) 17:22:35
あと、%fと%lfは全く同じで、どちらもdoubleを受ける。念のため。
>>194 > printf()に %lf はいらん。%fで十分
ていうよりは、C89なら%lfはイリーガルでは。受け入れるコンパイラが
多いけれども。
#include <math>してプロトタイプを取り込んでいる以上、
pow()にintの引数を渡すことには何の問題も無く、完全に合法だわな。
規格に従って適切にdoubleに形変換がなされることが保障されてるわけだ。
216 :
205 :2007/05/28(月) 17:23:16
なんだ、いつもの人か。私は「不適切なものを良し」とはしていないが相変わらずミスリードしているようで。
>>213 > 前提にしていい常識じゃないだろ
いいえ。むしろ基本中の基本でしょう。
>>194 自前で可変引数関数書く時に、va_arg() で嵌りそうな罠だな
# まずそういうシーンは無いけど
219 :
205 :2007/05/28(月) 17:25:46
>>217 確認するが、「暗黙の型変換は使うな」が「基本中の基本」だと書いている?
>>218 intとポインタのサイズが異なる処理系では
execl()のような関数にNULLを渡す時に
0ではだめで、(char*)0のように書いたりしていたね。
>>212 自己紹介乙。
自分の書いた文を後から読み返して顔が赤くなるほど恥ずかしくなっても知らんぞ。
>>217 じゃあ、常識を共有していない人間と話すときは注意深くならなきゃならんという教訓だな。
(´・ω・`)ツマラナス
>>219 いいえ。暗黙の型変換は当然のように多用される
Cのごく基本的仕様である、という意味。
自分の方が不適切なコードを書いているのに他人批判で意味わからないとか言い出すのはぁ〜
どこのどいつだぁ〜い?
>>187 =
>>185 だよ!
ちゃんとpow()について参照されているのに、まだ理解していないんだね。
釣りであることを祈るばかり もしくは math.h の関数プロトタイプが double pow(); だけになってるような古い環境で開発してた人で 現在の開発環境について知らない年配の人が レスをつけてるのか… でも浮動小数点数の書式指定自体は昔から %f が正式なはずなんだがなぁ
オレ187だけど185じゃないよ。
まあここでさっきからファビョってるバカはロートルプログラマである事は 間違いないようだな。
> でも浮動小数点数の書式指定自体は昔から %f が正式なはずなんだがなぁ というか、%lfはC99以前では違法のはず。 scanf()ではdoubleを受けるのに%lfを使う必要があるから、 そのように間違える人が非常に多く、%lfを受け入れる処理系も多いけれども。
暗黙を良しとして押し切る奴ってさぁ、閣僚が不正をしても更迭されずにいて 不正そのものも閣僚なら問題ない行為として認識していそうだから困る。 まぁ、閣僚が自殺しても、同情は得られず不正は正当性がなく、支持率に影響するだろうけどさ。
[2] 問題文(含コード&リンク): A,T,G,Cのいずれかの文字を入力し、それぞれAはUに,TはAに,GはCに,CはGに置き換えられる プログラムです。 例えば ATTGといれると、UAACと表示されるプログラムです。 [3] 環境 [3.1] OS: xp [3.2] visual studio 2005 [3.3] 言語: C [4] 期限: いつでもいいです。 [5] その他の制限: コメントをつけていただけるとありがたいです。 よろしくお願いいたします。
>>229 頭大丈夫?精神病院行った方が良くない?
あ、すまん、もう精神病院に通院してるんだね。
>>229 あなたが馬鹿だから、暗黙の型変換が厳密に規定された明瞭な仕様で
不正でもなんでもないことが理解できないだけでしょう。
自分が理解できないものは悪いものだと思ってしまうのですね。
C++ではそれが確かに問題視されたことがあり、explicitが導入された
訳だけれども、Cの型変換はそれとは全然次元の異なる問題です。
233 :
218 :2007/05/28(月) 17:36:17
>>220 execl って使ったことないので見てみたが… NULL ターミネイトな可変引数なのねw
sizeof(int) != sizeof(void *) な環境での NULL 自身の定義はどうなってたんだろ?
234 :
205 :2007/05/28(月) 17:40:05
>>223 それならOK。お騒がせ。
>>218 自分で実装しなくても、printf()を使うときには心の片隅程度には意識しておいた方がいいよ。
#charもintに格上げされるからこそ、printf("%c", 48 + 3)が正しく動くわけで。
>>233 NULLが0なんじゃない、0がNULLなんだ。だから、ポインタのサイズが幾つであろうとも
整数型の0に対してはNULLに等しいものとして処理できないといけない。
#昔はそうでない処理系もあったけどね。
>>230 #include <stdio.h>
int main(void)
{
unsigned char tab[0x100];
int i, c;
for (i = 0; i < 0x100; ++i)
tab[i] = i;
tab['A'] = 'U'; tab['T'] = 'A'; tab['G'] = 'C'; tab['C'] = 'G';
while ((c = getchar()) != EOF)
putchar(tab[c]);
return 0;
}
>>230 #include <stdio.h>
#include <string.h>
int main(void)
{
char buf[512];
int i;
fgets(buf, 512, stdin);
for (i = 0; i < strlen(buf); i++)
switch (buf[i]) {
case 'A':
buf[i] = 'U';
break;
case 'T':
buf[i] = 'A';
break;
case 'G':
buf[i] = 'C';
break;
case 'C':
buf[i] = 'G';
break;
}
printf("%s", buf);
return 0;
}
>>230 #include <stdio.h>
int main(void){
int moji;
while((moji=getchar())!=EOF){ // EOFが入力されるまで続ける (Ctrl-D または Ctrl-Z かな?)
switch(moji){
case 'A':putchar('U');break;
case 'T':putchar('A');break;
case 'G':putchar('C');break;
case 'C':putchar('G');break;
default:putchar(moji);break; // ATGC 以外はそのまま出力する(入力されないはずだが)
}
}
return 0;
}
>>230 #include <stdio.h>
#include <unistd.h>
int main(){return system("/bin/sed -e 'y/ATGC/UACG/'");}
>>234 > #charもintに格上げされるからこそ、printf("%c", 48 + 3)が正しく動くわけで。
どっちかというと
printf("%02x", c);
とかいうケースで驚くことが多そうですね。
charがsignedな処理系で非ASCIIの(負の)文字を与えると符号拡張されて
ffffffa0
みたいに表示されたりすることになる。
>>238 > [3.1] OS: xp
> [3.2] visual studio 2005
241 :
238 :2007/05/28(月) 17:50:14
半端に古い処理系を脳内想定してた
>>234 で、かつ sizeof(int) != sizeof(void *) な系で、
int* p = 0; /* コンパイラが左辺の型からよしなに取り扱う */
execl("hoge", "foo", 0); /* 可変引数ゆえポインタ類推効かず */
execl("hoge", "foo", NULL); /* NULL は 0 と等価だから↑と同じ */
execl("hoge", "foo", (char*)0); /* やっとポインタでの 0 を積めた */
っつーことになると
>>171 # include <iostream>
# include <string>
int main()
{
std::string p("B"), c("A");
for(int n = 0; ; n++)
{
std::cout << "n=" << n << " " << c << "\n";
std::string next = c + p;
p.swap(c);
c.swap(next);
}
}
K○S○○A○Eかエピスっぽいレスだな
>>242 > execl("hoge", "foo", 0); /* 可変引数ゆえポインタ類推効かず */
これはその通りですね
> execl("hoge", "foo", NULL); /* NULL は 0 と等価だから↑と同じ */
これはちょっと正確ではありませんね。
NULLは(Cでは)
(void*)0として定義されている処理系も多いでしょう。そうであれば
問題はない筈です。が、それが保障されているわけでもなく、実際
C++の処理系では単に0と定義されていることが多い。
それゆえ(char*)0のほうが確実であり、そういう書き方が多用されたのだと
思います。
串揚げ?
クーーックックゥ〜、このスレはネタを投下するとすぐに盛り上がるから面白い(クルル曹長風に 自作板にしろ、ちょこっとできることがあればそれだけで自分の能力や知識を過信して 間違った解釈や知識を用いて他人を批判しちゃうから墓穴を掘るのさ クーックックゥ〜
>>247 お前一人を除いてだれも間違った解釈や知識で誰かを批判などしてないと思うが。
>>245 64bit環境(sizeof(int)!=sizeof(void*))用gcc辺りだと、安全にスタックに積めるようにNULLが(void *) 0になっているみたいだ。
>>248 =
>>187 > nとiをdoubleにする意味が全くわからん。
^^^^^^^^^^^^^^^^^^^^^^^^^
>>250 しつこいな。粘着質か。
そいつは素直に「わからん」と言ってるだろう。知ったかぶりなど
してないだろう。
[1] 授業単元:c言語 [2] 問題文(含コード&リンク):catコマンドと同じ機能のプログラムを作成せよ。 簡単な実験結果もお願いします。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [2007年05月28日23:30まで] [5] その他の制限:fgetc(), fputc() 関数を使用すること。 標準出力とすること。 ファイル名を複数指定できること。 ただし、ファイル名を指定しない場合は標準入力とすること。 なお、オプションは指定できなくてもよい。 どうかよろしくお願いします。
>>252 #include <stdio.h>
static void cat(FILE * fp)
{
int ch;
while ((ch = fgetc(fp)) != EOF) {
fputc(ch, stdout);
}
}
int main(int argc, char ** argv)
{
if (argc == 1) {
cat(stdin);
} else {
for (int ic = 1; ic < argc; ++ic) {
FILE * fp = fopen(argv[ic], "r");
if (fp != NULL) {
cat(fp);
fclose(fp);
}
}
}
return 0;
}
>>253 for (int ic = 1; ic < argc; ++ic) {
^^^^^^^
ここだけ C++?
C99じゃね?
256 :
254 :2007/05/28(月) 19:27:41
>>255 了解
gcc -std=c99 ???.c
でコンパイルできた
…にしても gcc ってオプション調べるだけでも大変だ
>>257 コレのこと?
cat file1 file2 > output
[1] 授業単元:c言語 [2] 問題文(含コード&リンク): プログラムに0以上59以下の値をとる二つの整数を与える.これらの2数を順にm, nとする.これらをm分n秒と解釈する.与えられた時間の(秒単位で)半分となる時間をコロン(:)で区切られた二組の二桁の整数で表示するプログラムを作成しなさい. 表示する分数、秒数が9以下のときは10の桁にはスペースを置く. 秒数が2で割り切れないときは切り捨てを行う. m,nのどちらかが0以上59以下でなければ,errorのみを表示すること. [3] 環境 [3.1] OS: linux [3.2] gcc [3.3] 言語: C [4] 期限: [5] その他の制限: どなたかおねがいします。
>>259 22:22:22
mixiで見たけど同じ人?
>>259 #include <stdio.h>
int main(void){int n=0, m=0, t;scanf("%d", &m);scanf("%d", &n);
if(0 <= m && m <= 59 && 0 <= n && n <= 59){t = (60 * m + n) / 2;m = t/60;
n = t - m * 60;printf("%2d:%2d", m, n);}else printf("error");return 0;}
>>260 すいませんおなじ人間です。
>>260 ようやくわかりました。時間の計算の部分がアホなんでわかりませんでした・・・
つリダイレクト
釣りダイレクトって読んじゃったよ。 -- 最低限機能版 #include <stdio.h> int main(int argc, char ** argv) { if (argc < 4) return 1; FILE * in1 = fopen(argv[1], "r"); if (in1 == NULL) return 1; FILE * in2 = fopen(argv[2], "r"); if (in2 == NULL) return 1; FILE * out = fopen(argv[3], "w"); if (out == NULL) return 1; int ch; while ((ch = fgetc(in1)) != EOF) { fputc(ch, out); } fclose(in1); while ((ch = fgetc(in2)) != EOF) { fputc(ch, out); } fclose(in2); fclose(out); return 0; }
266 :
◆HFYa0.2pYo :2007/05/29(火) 00:44:06
267 :
◆etVdfbufd2 :2007/05/29(火) 00:53:39
[1] 授業単元:その他 [2] 問題文(含コード&リンク): 「WEB上の画像を右クリックで保存」←この動作をプログラムで書け. [3] 環境 [3.1] OS:Windowsのcygwin上でコンパイルします. [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C/C++どちらでも可. [4] 期限:可能な限り早くお願いします. [5] その他の制限: 特になし. WEB上のtextデータをとってくるプログラムなら書けたのですが, 画像をとってくるものはうまくいきません. よろしくお願いします.
これ学校の宿題? 趣味じゃねーの?
>>267 画像取って来るのもテキスト取って来るのも変わらんわけだが。
>>268-269 おめーらほんっとgdgdうるせーな、言うくらいならお前がやってみろよ。どうせ出来ないんだろ?w
だって、pow()の引数にint型をそのまま(ry
.NETなら再現するのは簡単だが・・・
272 :
◆etVdfbufd2 :2007/05/29(火) 01:54:37
>>268 授業の宿題ではないけど大学で科された課題です.
>>269 bmp形式のデータを取りたいんですけど,バッファに一度入れてから
取ってきてるんで,bmp形式に直せないんですよね.
>>270 pow()は初見です.ちょっくらググってみます.
274 :
◆HFYa0.2pYo :2007/05/29(火) 02:13:25
276 :
デフォルトの名無しさん :2007/05/29(火) 05:04:22
279 :
155 :2007/05/29(火) 09:19:14
>>166 たしかにそんなかんじです・・・・
ありがとうございました
>>280 ドット絵から読み込んだデータから色の指定をHTMLのFONTタグで指定して
■をそれで囲ってHTMLに書き出しているってことか?
指定したbmpファイルを読み込んで、指定したhtmlファイルに書き出すプログラムみたいだね。 概要はそうだが、bmpの各ドットの色のコードを読み取ってんだろうね。まぁ、これくらいなら そう難しくないんじゃないかね。ただ、HTMLのタグの知識も必要かな。
>>281 えっとできればソースレベルで教えていただけるとうれしいです
始めたばかりの初心者なんんですが好奇心でちょっと見てみたんですが
さっぱり意味がわからなくて
285 :
デフォルトの名無しさん :2007/05/29(火) 11:55:07
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 指数関数exの近似値を返す関数expon(x, n)をつくります。 第1引数は浮動小数点数xで, 第2引数はexをTaylor展開で展開する際の最大次数nになります。 n次項までのTaylor展開の式は下に示す通りです。 さらに,浮動小数点数yと正の整数mを引数とし, yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。 次に,これらの2つの関数を用いて, exの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい。 ex » 1 + x + x2/2! + x3/3! + … + xn/n! 指数関数exp(x)の近似値を計算します! xを入力してください:2.5↵ Taylor展開の最大次数nは:100↵ 小数点以下の桁数mは:3↵ exp(x)の近似値 = 12.182 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:borland [3.3] 言語:C [4] 期限:今週日曜日 よろしくお願いします。
286 :
デフォルトの名無しさん :2007/05/29(火) 12:01:09
[1] 授業単元: C [2] 問題文(含コード&リンク): 神経衰弱ゲーム」のシミュレーションを作成してみる。 マス目は4×4。8種類の動物名が2匹ずつ隠されています。 並び順は乱数で発生しましょう。 2枚ずつ順番に表にして当たっていれば,表向きのままになります。 はずれれば一定時間おいて裏に戻しす。 最大試行回数を設定して,ゲームを進行する。 全部当たれば「やったね!」と祝福し,駄目だった場合は全部表向きにしてから「またね!」とメッセージを表示してみましょう。 画面の表示などインタフェースにも工夫してみよう。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限:6月7日
>>286 >>287 の最初に動物が表示される部分は消しておいてちょっ
あと
// char *anims[]={"rat","cow","tiger","rabbit","horse","sheep","monkey","bird"};
の部分も
289 :
デフォルトの名無しさん :2007/05/29(火) 16:37:54
>>135 すいません3×3程度の迷路です。
s-1-2-3
**|*|** 左のような迷路です。
**4-5-6 ーと|が道で*は行き止まりです。
****|** わかりにくくてすいません。よろしくお願いします。
**7-8-G
290 :
デフォルトの名無しさん :2007/05/29(火) 16:52:38
質問です。 C言語でWin32アプリをつくっているのですが、 アクティブなウィンドウの、指定した位置の表示している色を 取得するにはどうしたらいいですか? やっぱり一旦表示された後だと厳しいんですかね…? ご教授お願いします。
GetPixel
>やっぱり一旦表示された後だと厳しいんですかね…? そんなことはないよ? というか表示される前の方が面倒だとおもうんだけどw
294 :
セス :2007/05/29(火) 18:38:51
[1] 授業単元:プログラミング言語C [2] 問題文(含コード&リンク): 整数型の変数a・b と、文字型の変数e を用意し、 キーボードから2つの数値と1つの演算子を入力し 、その計算結果cを出力するプログラムを作成しなさい。 実行される計算は和・差・積・商・剰余の5種類とし、 演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で 表現されるものとする。 演算子にそれ以外の記号が入力された場合は エラーメッセージを表示する。 また0による除算の回避も含めること。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:5/29の24時まで [5] その他の制限: 特になし お願いします
295 :
セス :2007/05/29(火) 18:40:56
[1] 授業単元:プログラミング言語C [2] 問題文(含コード&リンク): 次の説明は冬季オリンピックの開催年についての説明である。 キーボードから変数year に入力された年号について、 開催された年に第何回大会が開催されたか 画面に表示するプログラムを作成しなさい。 また開催年でない場合は、画面にその旨メッセージを出力すること。 【説明】 1924 年の第1 回大会以来、4 年に1 度開催されている。 1992 年の第16 回大会までは夏季大会と同じ年に開催されたが、 1994 年の第17 回大会からは、夏季大会の2 年後に開催されるようになった。 1940 年、1944 年は第二次世界大戦の影響で中止。 次回は2010 年、第21 回大会、カナダのバンクーバーで開催予定。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:5/29の24時まで [5] その他の制限: 特になし 二つですが、お願いします○┓ペコ
>>295 #include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[256];int year,i;
int games[]={1924,1928,1932,1936,1948,1952,1956,1960,1964,1968,1972,1976,
1980,1984,1988,1992,1994,1998,2002,2006,2010,};fgets(tmp,256,stdin);year=atoi(tmp);
for(i=0;i<sizeof(games)/sizeof(int);i++){
if(year==games[i]){printf("%i年 第%i回\n",year,i+1);return 0;}}
printf("%i年 非開催\n",year);return 0;}
298 :
1/3ぐらい :2007/05/29(火) 19:26:21
[1] 授業単元:プログラム2 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (WindowsXP) [3.2] VC++ 6.0) [3.3] 言語: (/C++) [4] 期限: ([明日) [5] その他の制限: (特になし) ----------------------------------------------------- //構造体の定義 struct Employee { int number; //従業員番号 char name[80];//氏名 long wage; //給与 }; //プログラムのメイン関数 void main(void) { //構造体をデータ型とした変数を宣言 struct Employee person[10]; //構造体のメンバーへ値を代入 person[0].number = 1234; strcpy(person[0].name,"田中 一郎"); person[0].wage = 200000; person[1].number= 1235; strcpy(person[1].name,"佐藤 次郎"); person[1].wage = 250000;
299 :
2/3通り越して3/3 :2007/05/29(火) 19:28:20
person[2].number= 1236; strcpy(person[2].name,"鈴木 三郎"); person[2].wage = 300000; //構造体のメンバを表示 for(int i = 0;i<3;i++){ cout << person[i].number<<"\n"; cout << person[i].name <<"\n"; cout << person[i].wage <<"\n"; } } ---------------------------------------------------------------------------- k:\kadai\kadai5\kadai5.cpp(17) : error C2065: 'strcpy' : 定義されていない識別子です。 k:\kadai\kadai5\kadai5.cpp(30) : error C2065: 'cout' : 定義されていない識別子です。 k:\kadai\kadai5\kadai5.cpp(30) : error C2297: '<<' : 不正な右オペランドです。 k:\kadai\kadai5\kadai5.cpp(31) : error C2297: '<<' : 不正な右オペランドです。 k:\kadai\kadai5\kadai5.cpp(32) : error C2297: '<<' : 不正な右オペランドです。 cl.exe の実行エラー なぜそのようなエラーが出るのかさっぱりわかりません・・・ どなたか助けてください。
300 :
セス :2007/05/29(火) 19:35:39
>>297 そちらのページ参照しましたが、%のプログラミング載ってないんですがどうすればいいんでしょうか
後、#include<stdio.h>しかまだやっていません。。
>>298-
>>299 #includeは?あとネームスペースは?
学校からコピーして持ち帰って、途中から作成したのでミスってたようです。。。 見逃してました・・・ お恥ずかしい限りで・・・ #include<iostream> #include<string.h> using namespace std; を加えたら成功しました・・・
>>294 整数a←キーボード入力
整数b←キーボード入力
文字e←キーボード入力
文字eの場合分けここから
文字eが'+'の場合:
整数aと整数bを足し算して結果を表示する
文字eが'-'の場合:
整数aから整数bを引き算して結果を表示する
…
文字eが'-'の場合:
整数bが0ならば、エラーメッセージを表示する
それ以外ならば、整数aを整数bで割り算して結果を表示する
…
文字eが’+’、’-’、’*’、’/’、’%’以外の場合:
エラーメッセージを表示する
文字eの場合分けここまで
なお'%'は余剰である。
間違えた… 【間違い】 … 文字eが'-'の場合: 整数bが0ならば… 【正しくは】 … 文字eが'/'の場合: 整数bが0ならば…
305 :
セス :2007/05/29(火) 20:21:47
>>297 何か習ってないものばかり何ですが
#define STACK_DEPTH 100
↑こういうの習ってないんですけど
#include<stdio.h>
int main(void)
これだけでは出来ないのでしょうか?
295も同じくです
>>305 #define c言語で検索かけて、#defineを意味を調べてみな
すぐに、#defineを使わない方法が分るはずだから
置換は有用、痴漢は犯罪
丸投げスレで自分で勉強することを勧められたら丸投げの意味ないじゃん
[1] 授業単元: C言語 3] 環境 [3.1] OS: MacOSX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:5月31日までにお願いします
#include <stdio.h> int main() { int a,b,c = 0,e; char buff[256]; puts("整数を,区切りで入力→Enter"); fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d,%d",&a,&b); puts("演算子入力"); e = getchar(); switch(e){case '+': c = a + b; break; case '-': c = a - b; break; case '*': c = a * b; break; case '/': if(b == 0){ fprintf(stderr,"0で除算しようとしました"); break; } c = a / b; break; case '%': if(b == 0){ fprintf(stderr,"0で除算しようとしました"); break; } c = a % b; break; default: fprintf(stderr,"適切な入力ではありません"); break; } printf("%d \n",c); return 0; }
入力ファイル(テキストファイル)の中の単語の長さを調べてその頻度 を表示するプログラムを作れ。 ただし、単語の定義は空白、タブ、改行、 ピリオド(.)、コンマ(,)を含まない文字列の固まりとする。 また、ピリオドとコンマは長さ0の単語としてカウントせよ。 また、20文字以上はまとめてカウントせよ。
[1] 授業単元:c言語 [2] 問題文(含コード&リンク): 文字列の置換処理 ・入力データの文字数:(半角アルファベット大文字。スペースも一文字に含める。) ・入力データの単語最大文字数:(10文字まで) ・入力データはキーボード入力で設定する。:例)get()とかscanfとか。 ・入力データと出力データを表示する。 ・文字列(単語)"XYZ"は"HA"に、"ABC"は"DEFG"に変換する。 ・文字を変換後に30文字を超えてもいい。ただし、30文字を超える場合は改行して表示する。 ・キーボード入力の際、文字列が30文字を超えた場合や単語が10文字を超えた場合は 警告メッセージを表示して、再入力させる。 例)詳細は実行例を参照してください。 ・キーボード入力が空の場合は、プログラムを終了する。 ・キーボード入力が空以外なら、ループする。 (実行例) ----5----0----5----0----5----0 変換前:ABC ABD XYZBC TABCL XYZX YZZWD 変換後:DEFG ABD HDEFG TDEFGJ HAX 改行分:YZZWD ----5----0----5----0----5----0 変換前:ABC ABD XYZBC TABCL XYZX YZZWDXXX ## 30文字を超えています ## ----5----0----5----0----5----0 変換前:ABC ABD XYZBC AAAAAAAAAAAAAAAA ## 単語は10文字以内です ## ----5----0----5----0----5----0 [3] 環境 [3.1] OS: Windows [3.2] VC 6.0 [3.3] 言語: C [4] 期限: 2007年6月1日 [5] その他の制限: どなたかおねがいします。
途中までできてるのですが。。。誰かお願いします。。。 #include <stdio.h> #include <string.h> #include <stdlib.h> void str_replace(char *a, const char *target_a, const char *new_a); int main(void) { char a[80], b[30], c[30], d[80], e[80]; int i, a_len; printf("例題02:文字列の置換処理\n\n"); for(; ;) { printf(" ----5----0----5----0----5----0\n変換前:"); memset(a, '\0', 80); memset(d, '\0', 80); gets(a); a_len = strlen(a); if(a_len>31){ printf("## 30文字を超えています ##\n"); continue; } else if(a_len==0) exit(0); str_replace(a, "XYZ", "HA"); str_replace(a, "ABC", "DEFG"); a_len = strlen(a); strcpy(d, a); d_len = strlen(d); m = d_len; for(l=d_len; l>=30; l--) { m = l; m--;
} memset(e, '\n',d_len-l); printf("変換後:%s\n", d); } return 0; } void str_replace(char *a, const char *target_a, const char *new_a) { int target_len = strlen(target_a); //置換対象文字列の長さ int new_len = strlen(new_a); //置換後文字列の長さ int str_len = strlen(a); //文字列の長さ char *replace_pos; //検索を開始する位置 //置換文字列の場所を検索 while(0!= (replace_pos = strstr(a, target_a))) { //文字列を挿入する場所を作成する memmove(replace_pos + new_len, replace_pos + target_len, strlen(replace_pos) - target_len); //置換文字列を挿入する memmove(replace_pos, new_a, new_len); //文字数が少なくなる場合、NULLコードの位置も変更 if(target_len > new_len) { *(a + str_len - target_len + new_len) = '\0'; str_len = strlen(a); } } }
>>310 #include <stdio.h>
#include <ctype.h>
int main(void)
{
int c, n = 0, in_word = 0, count[21] = { 0 };
#define MIN(a,b) ((a) > (b) ? (b) : (a))
#define COUNTUP do { if (in_word) ++count[MIN(n,20)]; } while (0)
#define OUTOFWORD do { in_word = n = 0; } while (0)
while ((c = getchar()) != EOF) {
if (isspace(c)) {
COUNTUP; OUTOFWORD;
} else if (c == '.' || c == ',') {
COUNTUP; OUTOFWORD; ++count[0];
} else {
in_word = 1; ++n;
}
}
COUNTUP;
for (n = 0; n <= 20; ++n)
printf("%2d: %d\n", n, count[n]);
return 0;
}
x軸に対して?それともy軸に対して?
>>315 一番最後の、内側のループで使ってるiをh-iにするといいよ。
for(j=0; j<=h-i; j++)
{
if(x[h-i][j]%2==1)
printf("@",x[h-i][j]);
else
printf(" ",x[h-i][j]);
}
こんなのにする。
318 :
デフォルトの名無しさん :2007/05/30(水) 00:26:14
課題 入力された秒数を実数にして、時間・分・秒数に変換するプログラムを教えてください。お願いします
虚数で入力するのか?
320 :
318 :2007/05/30(水) 00:29:20
はい
>>318 ダマされたと思って、これで提出してご覧なさい。
#include <stdio.h>
int main(int argc, char** argv) {
int i = atoi(argv[1]);
printf( "h:%d m:%d s:%dn", i/(60*60), (i/60)%60, i%60 );
}
それだとatoi呼び出せなくね?
>>322 呼べる。
プロトタイプがないときは引数のチェック無しで、
intを返すものとして扱われる。
どうせ宿題だし。
まあ、でも
#include <stdlib.h>
が抜けてたのは俺のミス。
前スレでも書き込んだのですが アルファベット以外の文字が入力されたら、"BAD"と表示するにはどうすればいいんでしょうか?
前スレ?
1
ぼるじょあ氏とここは繋がりがないのでしょうか、でしたら失礼しました
正確には1,2
>>324 >アルファベット以外の文字が入力されたら、"BAD"と表示するにはどうすればいいんでしょうか?
puts("BAD");
>>324 if(!isalpha(moji))printf("BAD");
ここはぼるじょあスレとは別スレだよ
puts salphaなど習っていないのですが、もっとやさしいバージョンはないでしょうか
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 自分の姓名を表示せよ。ただし、配列a[]を用いてこれを自分の姓名の文字列で初期化し、1文字ずつ出力せよ [3] 環境 [3] 環境 [3.1] OS: Windows [3.2] VC 6.0 [3.3] 言語: C [4] 期限:6月2日 配列がさっぱりわからない・・・・ よろしくお願いします。
333 :
デフォルトの名無しさん :2007/05/30(水) 01:21:25
>>318 ですが、ベースはこんな感じだそうです。
♯include <stdio.h>
intmain(void)
{
int ji,fun,byou;
printf("秒数=")
scanf("%d",&byou);
ji=byou/3600;
byou=byou%3600;
fun=byou/60;
byou=byou%60;
printf("%d時間%d分%d秒\n",ji,fun,byou);
return0;
}
あと
>>320 は私ではありません。
334 :
315 :2007/05/30(水) 01:26:15
>>316-317 ありがとうございます。
でもx軸対象じゃなくてy軸対象にしないと駄目なのです;;
335 :
デフォルトの名無しさん :2007/05/30(水) 02:21:04
>>333 >入力された秒数を実数にして
入力は実数以外って事?
木構造にすると、迷路のロードがめんどいな
338 :
デフォルトの名無しさん :2007/05/30(水) 07:17:31
1:OS:WinXP 2:コンパイラ名とバージョン:Borland 3:言語:C テーマ:繰り返し処理(while文) 課題1:キーボードより整数を入力し、1〜nまでの合計を求めなさい 実行画面 整数nの入力==>5 合計:15 課題2:複数件の整数を入力し、合計、件数、平均を求め表示しなさい 0が入力されたらデータのsy
>>339 どうせやっても「まだ習ってないので」とか言い始めるから嫌。
せめてどこまで習ってるのか教えてくれないと。
341 :
デフォルトの名無しさん :2007/05/30(水) 07:30:09
1:OS:WinXP 2:コンパイラ名とバージョン:Borland 3:言語:C テーマ:繰り返し処理(while文) 課題1:キーボードより整数を入力し、1〜nまでの合計を求めなさい 実行画面 整数nの入力==>5 合計:15 課題2:複数件の整数を入力し、合計、件数、平均を求め表示しなさい 0が入力されたらデータの終了とし、合計、件数には反映しない 実行画面 整数入力(0で終了) ==>5 整数入力(0で終了)==>4 整数入力(0で終了) ==>10 整数入力(0で終了) ==>8 整数入力(0で終了)==>0 合計:27 件数:4 平均:6.8
342 :
341の続き :2007/05/30(水) 07:31:11
課題3:キーボードより複数件のデータを入力し、奇数と偶数の合計を計算しなさい -1が入力されたらデータの終了とし、合計には加えない 実行画面 整数入力==>3 整数入力==>8 整数入力==>10 整数入力==>7 整数入力==>0 整数入力==>26 整数入力==>19 整数入力==>1 整数入力==>-1 奇数合計:30 偶数合計:44 以上の3問よろしくお願いします
printf scanf putchar if(〜〜〜) を習ってます
344 :
デフォルトの名無しさん :2007/05/30(水) 07:39:21
>>336 入力するのを実数でも対応できるようなプログラムを作りたいんです
>>341 #include <stdio.h>
int InputInteger(char* str, int* iptr) { printf(str); scanf("%d", iptr); return *iptr;}
int main(void){
{ /* 課題1 */
int n, r=0;
InputInteger("整数nの入力==>", &n);
while(n!=0){ r+=n--; }
printf("合計:%d\n", r);}
{ /* 課題2 */
int sum=0, num=0, n; double ave;
while(InputInteger("整数入力(0で終了) ==>", &n)){ sum+=n; num++;}
if(num==0) ave=0; else ave=sum/num;
printf("合計:%d 件数:%d 平均:%f\n", sum, num, ave);}
{ /* 課題3 */
int n, odd=0, even=0;
while(InputInteger("整数入力==>", &n) != -1){
if(n%2 == 0) even+=n; else odd+=n;}
printf("奇数合計:%d\n偶数合計%d\n", odd, even);}
return 0;}
スレタイに「○○○を習っていません禁止」と一文入れるか。
>>347 >>1 に入れればいい。つーか
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
これがそうなんだけどな、意味がわかってない奴多すぎ
>>344 何か答えになってないよ
実数の意味分かる?
>>307 丸出ししたものを衣類で隠すことを勧められたとしても、丸出しした意味は十分あるぞい♪
>>324 >>339 #include<stdio.h>
int main(void){
char c;
scanf("%c", &c);
if(64 < c)if(c < 91)return 0;
if(96 < c)if(c < 123)return 0;
printf("BAD");
return 0;
}
不等号習っていませんとか言われたらもうお手上げだな
>>351 色々ダメすぎ。
まぁ、元質がダメすぎだからどうでもいいか。
>>352 どうみてもネタ解答なのにダメだしされても困るけどな・・・
ASCIIコード習っていません><
355 :
デフォルトの名無しさん :2007/05/30(水) 09:26:21
[1] 授業単元:c/c++
[2] 問題文(含コード&リンク): コンパイルせよ
[3] 環境
[3.1] OS: Windows
[3.2] VC 6.0
[3.3] 言語: C
[5] その他の制限:完璧ど素人です
コンパイルしようとすると
外部シンボル"_popup"
外部シンボル"_clsc"
外部シンボル"_defwin"
外部シンボル"_plots"
外部シンボル"_doplot"
外部シンボル"_dpoly"
外部シンボル"_fpoly"
外部シンボル"_newpen"
外部参照8が未解決です
とどうしてもなってしまいコンパイルできません。誰か教えてください
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4111.txt
半年後にまだ覚えていたらやるわ
>>355 popupとかエラーが出ている関数の定義はどこでしてるの?
>>355 のリンク先にあるソースでは定義していないから、当然リンクでエラーがでる。
359 :
デフォルトの名無しさん :2007/05/30(水) 10:44:08
>>349 入力を実数でも整数でも対応できるプログラムを作りたいのです
>>1 >・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
>>359 整数も実数の部分集合なんだが・・・
問題はきちんと書きなよ
363 :
デフォルトの名無しさん :2007/05/30(水) 12:00:35
今現在、main関数を習っていますが次の問題がわかりません。 よろしくお願いします。 [1] 授業単元: C [2] 問題文(含コード&リンク): 実数xを引数として受け取り、y=x*x*x-3*x*x-6*x+8を計算し、yの値が正の場合は1を、 負の場合は-1を、0の場合は0を返す(戻り値は整数型)を作成し、その関数が正常に 動作するかを、実際に実行して確認せよ。但し、main関数では、xの値をキーボードから 入力し、関数を呼び出した後は、戻り値の値を出力せよ。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: visual studio 2005 [3.3] 言語: C [4] 期限: 2007,5,31 [5] その他の制限: なし
>363 #include <stdio.h> int f(double x) { double y = x * x * x - 3 * x * x - 6 * x + 8; if(y<0) return -1; if(y>0) return 1; return 0; } int main(void) { double x; scanf("%lf", &x); printf("%d", f(x)); return 0; }
365 :
デフォルトの名無しさん :2007/05/30(水) 12:25:19
OS: Windows XP コンパイラ名とバージョン:ボーランド 言語: C [4] 期限:今日の1時30分まで [5] 問題1 番号と得点を入力し、平均点、最高得点取得の番号・得点・最低点取得者の番号・得点を表示しなさい 番号に0が入力されたらデータの終了とする 実行画面 番号,得点==>1,72 番号,得点==>2,60 番号,得点==>3,88 番号,得点==>4,48 番号,得点==>6,91 番号,得点==>7,75 番号,得点==>8,96 番号,得点==>10,52 番号,得点==>0,0 平均点:72.8 最高点 番号:8 得点:96 最低点 番号:4 得点:48 この問題どうしてもわからないのでよろしくお願いします
366 :
356のスレ主です :2007/05/30(水) 12:26:25
付けたしで繰り返し処理(while文)で作成してください
>>367 #include <stdio.h>
int main(void)
{
char a[]="自分野姓名";
printf("%s",a);
return 0;
}
[1] 授業単元: C 与えられた文字列に含まれる数字の個数を数えて、返す関数 int countnum(char s[]) を作成しなさい. この問題では,以下のプログラムの雛形を用い,countnum 関数内だけ変更しなさい(それ以外は一切変更しないこと). 文字列は英字,数字,記号で構成されるものとする isdigit関数を利用しないこと 関数の定義 int countnum(char s[]) 第一引数は文字列 戻り値は数字の個数 #include <stdio.h> int countnum(char []); int main(void){ char str[16]; fgets(str,16,stdin); printf("The number of numerals is %d.\n", countnum(str)); fgets(str,16,stdin); printf("The number of numerals is %d.\n", countnum(str)); return 0; } int countnum(char s[]) { /* ここを作成する */ /* ここ(中括弧内)以外は変更してはいけない */ } 期限はとくにないです。よろしくおねがいします。
>>369 int countnum(char s[])
{
int cnt=0;
while( *s!=NULL ) {
if( *s>='0' && *s<='9' ) cnt++;
s++;
}
return cnt;
}
キーボードから入力した文字列を反転(逆に並べ替える)プログラムを作成しなさい. 入力する文字列の長さは最大で32文字までとしてよい. 文字列の長さを求めるのに、strlen関数を使ってもよい. #include <stdio.h> #include<string.h> #include <stdlib.h> void reverse(char[]); int main(void) { char buf[33]; fgets(buf, 33, stdin); buf[(strlen(buf)-1)] = '\0'; reverse(buf); printf("%s\n", buf); return 0; } void reverse(char s[]) { /* ここを作成する */ /* ここ(中括弧内)以外は変更してはいけない */ } 2問もきいてしまってすいません。どなたかおねがいします。
void reverse(char s[]) { int i, len = strlen(s); for(i=0; i<len / 2; i++) { char temp = s[i]; s[i] = s[len-i-1]; s[len-1-i] = temp; } }
>>371 void reverse(char s[])
{
int i,sz=strlen(s)-1;
char tmp;
for(i=0; i<=sz/2; i++) {
tmp=s[i];
s[i]=s[sz-i];
s[sz-i]=tmp;
}
}
>>373 さん 374さん
ありがとうございました。
376 :
デフォルトの名無しさん :2007/05/30(水) 12:56:29
>364 ありがとうございます。 大体の流れはわかったのですが、if文におけるreturnは使ったことないのですけど ほかの方法はありますか? お願いいたします。
>>364 >>376 int f(double x)
{
double y = x * x * x - 3 * x * x - 6 * x + 8;
int n=0;
if(y<0) n=-1;
if(y>0) n=1;
return n;
}
っつか、無駄な評価を省くなら if(y<0) n=-1; else if(y>0) n=1; elseを入れておくと良いかと。
379 :
デフォルトの名無しさん :2007/05/30(水) 13:08:17
>if文におけるreturnは使ったことないのですけど 使ったこと無いと何か問題があるのかね。
#include <stdio.h> int f(double x) { int ret = 0; double y = x * x * x - 3 * x * x - 6 * x + 8; if(y<0) ret = ret - 1; if(y>0) ret = ret + 1;; return ret; } こうしろって事なんだろうか。 頭悪すぎる変更だが。
385 :
315 :2007/05/30(水) 15:30:55
y軸対象、お願いします
for(i=0; i<h; i++) { for(j=0; j<=h; j++) { if(x[i][h-j]%2==1) printf("@"); else printf(" "); } printf("\n"); }
387 :
デフォルトの名無しさん :2007/05/30(水) 16:23:53
C言語です。 課題@ 配列x[4][4]に整数が格納されている。以下のプログラムを作れ。 @x[i][j]の i+j=0ならy[i][j]=x[i][j]/16 Ai+j=1なら y[i][j]=x[i][j]/12 B 2<=(小なりイコールです)i+j<=5(小なりイコールです)なら y[i][j]=x[i][j]/32 C i+j>5なら y[i][j]=x[i][j]/100 D入力された配列x[i][j]と変換された配列y[i][j]を出力しなさい。 x[4][4]={260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4} ただし,小数点第2位まで示せ。 課題A y[i][j]=x[i][j]*z[i][j]を計算して出力せよ。 z[i][j]={16,12,32,100,12,32,100,100,32,100,100,100,100,100,100,100} do,if,for,while習いました。 お願いしますm(_ _)m
(y = z(x = z) = (z[i]=[1000111001001] == z[j]=[111001001]));
>387 課題1 #include <stdio.h> int main(void) { double x[4][4]={260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4}, y[4][4]; int i, j; for(i=0; i<4; i++) { for(j=0; j<4; j++) { switch(i+j) { case 0:y[i][j] = x[i][j] / 16; break; case 1:y[i][j] = x[i][j] / 12; break; case 2:case 3:case 4:case 5: y[i][j] = x[i][j] / 32; break; case 6:y[i][j] = x[i][j] / 100; break; } } } for(i=0; i<4; i++) { for(j=0; j<4; j++) printf("%.2f ", y[i][j]); putchar('\n'); } return 0; }
>387 課題2 #include <stdio.h> int main(void) { int x[4][4]={260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4}; int z[4][4]={16,12,32,100,12,32,100,100,32,100,100,100,100,100,100,100}; int i, j, y[4][4]; for(i=0; i<4; i++) for(j=0; j<4; j++) y[i][j] = x[i][j] * z[i][j]; for(i=0; i<4; i++) { for(j=0; j<4; j++) printf("%5d ", y[i][j]); putchar('\n'); } return 0; }
392 :
デフォルトの名無しさん :2007/05/30(水) 17:05:21
>>357 ,358
関数の定義をすればコンパイルできのでしょうか?
実行ファイルを作るのは リンク 実行ファイルを作る為の中間ファイルを作るのが コンパイル
#include <stlib.h> int main(); voild { double x[][]=y[][]{260,45,-16,5,-79,36,-2,-7,0,-16,3,-2,-8,-4,5,-4} int for (i=[4 != ++],j=[4 != ++],switch[i+j]); case y[i][j] = x[i][j] / 16 break { case (1:y[i][j] = x[i][j]/12 [2:3:4:5] y[i][j] = x[i][j]/32 6:y[i][j] = x[i][j]/100 for i=4,++ for j=4,++ ????? %,2f putchar (\n)); } return; }
395 :
デフォルトの名無しさん :2007/05/30(水) 17:25:27
>>393 すみません。よくわかってないです。
とにかく
#include <>
で関数を定義すればいいんですかね?
いいえ。
>>355 の結果は「コンパイル出来たが、リンク出来なかった」
リンクできるようにするためには、
・ コンパイラの設定をする(ライブラリとして popup等の本体が居るファイルがある)
・ popup等のソースがあるなら、それもコンパイルしてリンクする
のいずれか。
つまり、 #include とかで解決できるような代物ではない。
popup等が標準の関数ではないので、俺らはそれ以上答えようがないっつーことだ
397 :
デフォルトの名無しさん :2007/05/30(水) 17:51:21
>>396 ありがとうございます。
とりあずコンパイラの設定をやってみます
398 :
◆GmgU93SCyE :2007/05/30(水) 18:27:25
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン:borland [3.3] 言語: C [4] 期限: 2007年5月30日24:00まで [5] その他の制限:なし 問題:80〜120の間の整数となる100個の乱数を発生させ、その乱数を用いて何かを行え。ゲームでも、シミュレーション、占い等、何でもよい。 全然分かりません。お願いします。
[1] 授業単元: C言語 問題 入力ファイル(テキストファイル)の中の単語の長さを調べてその頻度 を表示するプログラムを作れ。 ただし、単語の定義は空白、タブ、改行、 ピリオド(.)、コンマ(,)を含まない文字列の固まりとする。 また、ピリオドとコンマは長さ0の単語としてカウントせよ。 また、20文字以上はまとめてカウントせよ。 3] 環境 [3.1] OS: MacOSX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:5月31日までにお願いします この前やってもらったのですが、配列をつかわないとダメだといわれました。 申し訳ないですけど、またお願いします。
400 :
デフォルトの名無しさん :2007/05/30(水) 18:52:43
実行結果を記しなさい。 #include <stdio.h> int main(void) { char data[] = "Hello world!"; char *p = data; int i = 0; while(*p != '\0') { printf("%c %d\n", *p, i); i++; p++; } printf("%d\n", i); return(0); }
401 :
デフォルトの名無しさん :2007/05/30(水) 18:53:54
↑質問プレ使うの忘れました。すみません。
質問だったのか・・・ っていうか実行してみりゃ分かるじゃん
H 0 e 1 l 2 l 3 o 4 5 w 6 o 7 r 8 l 9 d 10 ! 11 12
*p使うんならiじゃなくてp-dataにすりゃいいのに。 i使うんなら*pじゃなくてdata[i]でいいだろうに。
405 :
デフォルトの名無しさん :2007/05/30(水) 19:24:02
自然対数の底eを1000桁求めるプログラムを作成してください。e^xをマクローリン展開 した e^x=1+x/1!+x^2/2!+…+x^n/n!+… において、x=1とおいた式を計算するとよいでしょう。 環境 OS:Linux コンパイラ名とバージョン:gcc 言語: C 期限: 2007/6/4まで ネット上にプログラムの例などがあるのですが、難しくてわかりません・・・。 わかりやすく説明をつけて教えてもらえればありがたいです<(_ _)>
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 実行結果を予想を記述 int main(void) { int data[] = {0, 1, 2, 3, 4, 5, 10, 20, 30, 40}; int *p; p = &data[2]; printf("%d\n", *(p+1)); printf("%d\n", &data[8]-&data[4]); return(0); } #include <stdio.h> #define N 10 int main(void) { int data[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int i, size = N; for (i = 0; i < N; i++) { printf("%d\n", *(data+i)); } return(0); } [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:できるだけ早くお願いします
>>406 【1番目のプログラム結果予想】
3
(data[8]のアドレス値からdata[4]のアドレス値を引いた値)
【2番目のプログラム結果予想】
1
2
3
4
5
6
7
8
9
10
「予想」なので実行はしていない。間違っていたらゴメンw
410 :
デフォルトの名無しさん :2007/05/30(水) 21:05:44
もう一回おしえてください。 コマンドラインで指定する正の整数nについて,1^2 + 2^2 + 3^2 + · · · + n^2 の値を求めるプログラム % ./kadai6-4 引数(正の整数) を指定してください. % ./kadai6-4 1 2 引数(正の整数) を1 つだけ指定してください. % ./kadai6-4 17 1 から17 までの2 乗和は1785 です. %
>>405 その難しくてわからないプログラムの例ぷりーず
412 :
デフォルトの名無しさん :2007/05/30(水) 21:25:18
課題 このプログラムをベースに入力する秒数を実数にして時間・分・秒数に変換するプログラムをC言語で作成する 教えてください ♯include <stdio.h> intmain(void) { int ji,fun,byou; printf("秒数=") scanf("%d",&byou); ji=byou/3600; byou=byou%3600; fun=byou/60; byou=byou%60; printf("%d時間%d分%d秒\n",ji,fun,byou); return0; }
そのうえ、#だ
415 :
410 :2007/05/30(水) 21:56:20
たのむ教えて
416 :
デフォルトの名無しさん :2007/05/30(水) 22:10:35
ジョブショップ型生産のプログラムだれか作って!!
>>412 上のほうにもあるけど問題の意味が分からないから
誰も答えないと思うよ
>>405 1000桁じゃなくて1000項の間違いとかじゃない?
あと階乗の計算はあっという間にオーバーフローするから
例えばx^5/5!とかだったら (x / 5) * (x / 4) * (x / 3) * (x / 2) * (x / 1) って細かく計算すれば出来ると思う
420 :
デフォルトの名無しさん :2007/05/30(水) 22:50:13
>>418 問題の意味じゃなくて
お前の理解力が足りないだけなんだろうが(藁
>>419 その手があったか。計算量は増えるけど、今のPCなら無問題だな。
ただ、納得できないのは、doubleの範囲なら1000項もやる必要無いような。
まるで、ピースの欠けたパズルをやっている気分だ。
ピースの欠けたパズルは、どうせ完成しないんだから諦めた方が良いな。
>>412 も全てのピースを渡さずにパズルを完成させてくれと言っているようなものだな。
>>405 参考に
double TaylorExp(double x)
{
double a = x;
double buf , k;
double kou , ret = 0.0;
int i , flag = 0;
enum {POW_K = 1000};
const double INCREMENT = 1e-16;
if(x<0.0) { a = -x; flag = 1; }
if(a > 20.0)
{
buf = a;
for(k = 1.0+INCREMENT ; buf > 20.0 ;k+=INCREMENT) buf = a / ( pow(POW_K,k) );
a = buf;
ret = (flag==0) ? pow( TaylorExp(a) , pow(POW_K,k) ) : 1/pow( TaylorExp(a) , pow(POW_K,k) );
return ret;
}
kou = 1;
for(i=1 ; kou>(1e-20) && i<=128 ; i++)
{
ret += kou;
kou *= a / i;
}
return (flag==0) ? ret : 1/(ret);
424 :
デフォルトの名無しさん :2007/05/30(水) 23:05:05
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): キーボードから入力された任意個の整数について偶数の個数を求めるプログラムを作成しなさい.このプログラムでは,最初に判定する整数の個数を入力し,次のその個数分の整数を繰り返し入力するものとする. ./counte 5 4 3 2 1 0 3 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン:borland [3.3] 言語: C [4] 期限: 個数を指定するときに0以下の数が入力された場合,何も表示せず直ちに終了すること
>>426 #include <stdio.h>
int main(void)
{
int num = 0, i, d = 0, even = 0;
scanf("%d", &num);
if(num <= 0) return -1;
for(i=0; i<num; i++)
{
scanf("%d", &d);
if(d % 2 == 0) even++;
}
printf("偶数の個数:%d", even);
return 0;
}
429 :
デフォルトの名無しさん :2007/05/31(木) 01:01:01
汚いコードだなw 無能乙wwwwwwwwwwwwwwwwwww
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): int i; で宣言された変数 i のアドレスをprintf() を用いて表示しなさい。 [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか)
>>430 #include <stdio.h>
int main(void) {
int i;
printf("&i = %p", &i);
return 0;
}
>>429 wの数じゃなくてコードでどれくらい無能なのか示してやれよ
434 :
デフォルトの名無しさん :2007/05/31(木) 04:08:51
「自然数nが自然数であるかどうかを調べるプログラムを作成し、 それを利用して1〜100までの素数をすべて列挙せよ」 こいつがどうしても分かりません。そもそも素数をどうやって求めるか わからん。誰か助けてー
自然数nは調べるまでもなく自然数。
自然、天然に対して人工ってのがある。人工数というのを誰か発見してくれ。
437 :
254 :2007/05/31(木) 06:42:06
438 :
デフォルトの名無しさん :2007/05/31(木) 07:26:46
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS:Windows コンパイラ名とバージョン:borland 言語:C 問題テーマ:繰り返し処理(for文) 問題1 数値を入力し、以下のように表示しなさい 実行画面 整数入力==>8 ******** ******* ****** ***** **** *** ** * 問題2 10進数を入力し8ビットの2進数に変換し表示しなさい 実行画面 10進数入力==>118 2進数:01110110 宜しくお願いします
439 :
254 :2007/05/31(木) 07:36:50
>>438 問題1
#include<stdio.h>
int main(void){
int i, n;
printf("整数入力==>");
scanf("%d", &n);
for(;n>0;n--){
for(i=0;i<n;i++) printf("*");
printf("\n");
}
return 0;
}
問題2
#include<stdio.h>
int main(void){
int i, n;
printf("10進数入力==>");
scanf("%d", &n);
for(i=8-1;i>=0;i--) printf("%d", (n>>i)&1);
printf("\n");
return 0;
}
442 :
デフォルトの名無しさん :2007/05/31(木) 09:56:55
<<285 よろしくお願いします。
>>434 1〜100程度なら、1除いてxが2〜n-1まででn%x==0であるxが存在しないnが素数なんじゃね?
とりあえず、1〜100までの整数から素数を求めるものなんてありきたりだから、探せと?
宿題を片付けて欲しいというより、 素数を求める方法を知りたいような レスの書き方だったからかな
>434 #include <stdio.h> int isprime(int n) { int i; if(n<2) return 0; for(i=2; i*i<=n; i++) if(n%i==0) return 0; return 1; } int main(void) { int i; for(i=1; i<=100; i++) if(isprime(i)) printf("%3d", i); return 0; }
447 :
デフォルトの名無しさん :2007/05/31(木) 11:47:12
授業単元:C言語 問題文(含コード&リンク): 環境 OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:繰り返し処理(while文) 問題1:キーボードより整数nを入力し、1〜nまでの合計を求めなさい 実行画面 整数nの入力==>5 合計:15 宜しくお願いします
催促するのはなしにしよーぜ。
>447 >345
450 :
デフォルトの名無しさん :2007/05/31(木) 12:20:47
OS: Windows XP コンパイラ名とバージョン:ボーランド 言語: C [4] 期限:今日の1時30分まで テーマ:繰り返し(while文) 問題1 番号と得点を入力し、平均点、最高得点取得の番号・得点・最低点取得者の番号・得点を表示しなさい 番号に0が入力されたらデータの終了とする 実行画面 番号,得点==>1,72 番号,得点==>2,60 番号,得点==>3,88 番号,得点==>4,48 番号,得点==>6,91 番号,得点==>7,75 番号,得点==>8,96 番号,得点==>10,52 番号,得点==>0,0 平均点:72.8 最高点 番号:8 得点:96 最低点 番号:4 得点:48 この問題どうしてもわからないのでよろしくお願いします
451 :
デフォルトの名無しさん :2007/05/31(木) 12:28:18
授業単元 再帰プログラミング OS:WindowsXP コンパイラ名:ボーランド 言語:C言語 期限:来週の火曜日までにお願いします 問題はソースコードの改良なのですが、ソースコードは長いので後から送信します 横8マス縦8マスのチェス盤を考え、今左下にナイトが置かれているとする。 このプログラムはこのナイトを右上に移動させるための順序を表示するプログラムである。 このプログラムを改良し、ナイトが同じマスを通らない順序だけを表示するようにせよ。 教師の説明によると再帰レベルの限界は12で 配列gboard[ ][ ]を使って一度訪れた場所に印をつければ解けるとのことでした。 よろしくお願いします
453 :
452 :2007/05/31(木) 12:36:04
#include<stdio.h> #include<stdio.h> #define DLIMIT 12 #define XSIZE 8 #define YSIZE 8 int gboard[XSIZE][YSIZE]; int gxpos[DLIMIT]; int gypos[DLIMIT]; int i;
454 :
452 :2007/05/31(木) 12:37:08
void knight_move(int x,int y,int depth){ if(depth>=DLIMIT)goto jump; if(x<0)goto jump; if(x>=XSIZE)goto jump; if(y<0)goto jump; if(y>=YSIZE)goto jump; gxpos[depth]=x; gypos[depth]=y; if(x==7 && y==7){ for(i=0;i<=depth;i++){ printf("(%d,%d)",gxpos[i],gypos[i]); } printf("GOAL\n"); goto jump; } knight_move(x+1,y+2,depth+1); knight_move(x+2,y+1,depth+1); knight_move(x+2,y-1,depth+1); knight_move(x+1,y-2,depth+1); knight_move(x-1,y-2,depth+1); knight_move(x-2,y-1,depth+1); knight_move(x-2,y+1,depth+1); knight_move(x-1,y+2,depth+1); jump: ; } int main(){ knight_move(0,0,0); }
455 :
デフォルトの名無しさん :2007/05/31(木) 12:41:33
OS: Windows XP コンパイラ名とバージョン:ボーランド 言語: C [4] 期限:今日の1時30分 テーマ:判断処理(if文) 問題1キーボードより2つの値を入力し、比較結果を表示しなさい 実行画面 変数aの入力==>3 変数bの入力==>8 結果:3<8 変数aの入力==>8 変数bの入力==>3 結果:8>3 変数aの入力==>5 変数bの入力==>5 結果:5=5
>>455 #include <stdio.h>
int main(void)
{
int a, b;
printf("変数aの入力==>");scanf("%d", &a);
printf("変数bの入力==>");scanf("%d", &b);
printf("結果:%d%c%d", a, (a == b ? '=' : (a > b ? '>' : '<')), b);
return 0;
}
457 :
425 :2007/05/31(木) 12:53:54
>>447 #include<stdio.h>
#include<stdlib.h>
int main(){char tmp[256];int s,n=0;while(n>0){printf("整数の入力:");fgets(tmp,256,stdin);
n=atoi(tmp); s=n*(n+1)/2;printf("合計:%i\n", s);} return 0;}
459 :
◆GmgU93SCyE :2007/05/31(木) 12:59:49
>>409 無事間に合うことができました。ありがとうございました!
>>450 #include <stdio.h>
int main(void)
{
int num = 1, mark = 0, sum = 0, pop = 0;
int MaxNum = -1, MaxMark = -1;
int MinNum = -1, MinMark = 10000;
for(;;)
{
printf("番号,得点==>");
scanf("%d,%d", &num, &mark);
if(num == 0) break;
sum += mark;
pop++;
if(mark > MaxMark){MaxNum = num; MaxMark = mark;}
if(mark < MinMark){MinNum = num; MinMark = mark;}
}
printf("平均点:%g\n", (double)sum / (double)pop);
printf("最高点 番号:%d 得点:%d\n", MaxNum, MaxMark);
printf("最低点 番号:%d 得点:%d\n", MinNum, MinMark);
return 0;
}
>>455 #include<stdio.h>
#include<stdlib.h>
int main(void){int a,b;char tmp[256];printf("変数aの入力==>");fgets(tmp,256,stdin);
a=atoi(tmp);printf("変数bの入力==>");fgets(tmp,256,stdin);b=atoi(tmp);
printf("結果:%i%c%i\n",a,(a>b)?'>':((a<b)?'<':'='),b);return 0;}
>>452 #include<stdio.h>
#include<memory.h>
#define DLIMIT 12
#define XSIZE 8
#define YSIZE 8
int gboard[XSIZE*YSIZE];int gxpos[DLIMIT];int gypos[DLIMIT];int i;
void knight_move(int x,int y,int depth){
if(depth > DLIMIT ){memset( gboard , 0 , sizeof( gboard ) );return;}
if(gboard[x*YSIZE+y] ){memset( gboard , 0 , sizeof( gboard ) );return;}
if(x < 0 ){ return; }if(x >= XSIZE ){ return; }if(y < 0 ){ return; }if(y >= YSIZE ){ return; }
gxpos[depth]=x;gypos[depth]=y;gboard[x*YSIZE+y] = true;
if(x==7 && y==7){for(i=0;i<=depth;i++){printf("(%d,%d)",gxpos[i],gypos[i]);}printf("GOAL\n");memset( gboard , 0 , sizeof( gboard ) );return;}
knight_move(x+1,y+2,depth+1);knight_move(x+2,y+1,depth+1);knight_move(x+2,y-1,depth+1);knight_move(x+1,y-2,depth+1);
knight_move(x-1,y-2,depth+1);knight_move(x-2,y-1,depth+1);knight_move(x-2,y+1,depth+1);knight_move(x-1,y+2,depth+1);}
int main(){memset( gboard , 0 , sizeof( gboard ) );knight_move(0,0,0);}
BCCで動くかシラネ
あってるかもシラネw
463 :
デフォルトの名無しさん :2007/05/31(木) 14:22:07
この問題なんですが、よろしくお願いします。 キーボードより2以上の任意の整数を入力すると,入力された数の全ての素因数を表示するプログラムを作成せよ. <ヒント> ・素因数…素数(1及びその数自身でしか割り切れない)の約数のこと. ・配列は使わなくても実現できる.使っても良い. ・実現方法がかわらない場合は,下記の処理の流れを参考にすると良い. (@) キーボードから入力された数を「もとの数」とする. (A) もとの数に対して「割る数」を2から順に「もとの数」に達するまで1ずつ増やしてゆく. (B) 「もとの数」が「割る数」で割り切れれば,この「割る数」を因数として出力しつつ,左記の商を計算し,新たな「もとの数」とする. (C) 割り切れる限り(B)を繰り返す.割り切れなくなった時点で(A)へ進む. <実行例> num = ? 30 ← キーボードから30と入力しているところ 30 = 2 × 3 × 5
テンプレに従ってちょーだい
465 :
452 :2007/05/31(木) 14:30:16
>>462 残念ながら動作しませんでした。
お忙しい中ありがとうございました。
466 :
デフォルトの名無しさん :2007/05/31(木) 14:35:58
>>411 #include <stdio.h>
#define LOG2_10 3.322
void e(int *data, int keta)
{
int i, j;
unsigned k, k2, n, s;
int len;
int *dap;
long x;
len = (keta-1) / 4 + 2;
for (dap = data, j = len; j--; ) *dap++ = 0;
n = keta * LOG2_10 + 1;
k = 1; k2 = 2;
s = 0; j = -1;
for (i = 1; s <= n; i++) {
if (i >= k) {
k = k2;
k2 <<= 1;
j++;
}
s += j;
}
467 :
デフォルトの名無しさん :2007/05/31(木) 14:38:15
続きです。 *data = 1; while (--i) { x = 0; for (j = len, dap = data; j--; ) { x = x * 10000 + *dap; *dap++ = x / i; x %= i; } (*data)++; } }
468 :
デフォルトの名無しさん :2007/05/31(木) 14:40:04
続きです。 int main(void) { int i, keta; static int data[3000]; printf("--- 自然対数の底 e の値を算出します ---\n"); printf("小数点以下何桁まで計算しますか ?\n"); scanf("%d", &keta); e(data, keta); printf("自然対数の底 e = \n"); printf("%1d.", data[0]); for (i = 1; i <= (keta-1)/4+1; i++) { printf("%04d ", data[i]); if (i % 10 == 0) printf("\n "); } if (i % 10 != 1) printf("\n"); return 0; } わからない例の一つです。お願いします。
>「もとの数」に達するまで1ずつ増やしてゆく. このバカ教官の名前を晒せ。
471 :
デフォルトの名無しさん :2007/05/31(木) 15:51:09
[1] 授業単元:for 文 if文 [2] 問題文:a*bと入力したらaアスタリスクb と表示されるプログラム [3.1] OS:WindowsXP [3.2] Borland C++ [3.3] 言語:C++
性帝トーマスっていう指導員です
>>471 #include <stdio.h>
int main(void)
{
char buf[256]={"\0"};
size_t buf_sz=sizeof(buf)/sizeof(buf[0]),i;
printf("Input (%d文字以内) > ",buf_sz-1);
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
for(i=0; ; i++) {
if(i>buf_sz || buf[i]=='\0') break;
if(buf[i]=='*') printf("アスタリスク");
else putchar(buf[i]);
}
return 0;
}
>>471 #include<stdio.h>
#include<string.h>
int main(void){char tmp[256];fgets(tmp,256,stdin);if(strcmp(tmp,"a*b")==0){
puts("aアスタリスクb");}return 0;}
>>474 お前のクソースは脱糞もんだぜ、クソの臭いがぷんぷんすんぜ!
476 :
デフォルトの名無しさん :2007/05/31(木) 16:23:47
授業単元:C言語 問題文(含コード&リンク): 環境 OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:繰り返し処理(while文) 問題1:キーボードより整数nを入力し、1〜nまでの合計を求めなさい 実行画面 整数nの入力==>5 合計:15 何方か簡単なプログラム作っていただけませんか?
クソの臭いがするのが問題ではないという
>>475 は肥だめの中で生活してるんだろう。
>>476 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n,a=1,d=1,sum;
char buf[256]={"\0"};
size_t buf_sz=sizeof(buf)/sizeof(buf[0]),i;
printf("整数nの入力==>");
fgets(buf,buf_sz,stdin);
n=atoi(buf);
sum= (n*(2*a+(n-1)*d)) / 2;
printf("童貞:%d",sum);
return 0;
}
おいっ、腐れブラックリスト入り企業のトーマスが何ほざいてやがる?w お前の言い分や言い返しのパターンは去年のやり取りで調査済みだよw だからお前に投げかける言葉と、お前の必死こいたレスへの切り返しは出来るから 墓穴を掘る前にやめとけw
>>447 の課題は
> テーマ:繰り返し処理(while文)
っとあるから、whileを用いるのが条件なんだろうか?
はっきりしとけ。
>>481 >>475 は「問題が無い」とも言ってないと思うぞ。
つーかこのネタ回答何度目だよ。いいかげん飽きた。
もっと面白いネタ持ってきてくれよ。
ネタ回答じゃねえ。仕様通りだよ。
トーマス「何か問題でも?」
その他大勢「お前の存在そのものが大問題」
トーマス「何か問題でも?」
その他大勢「(スルー、無視、しかと)」
トーマス「俺のクソミソースを提出しやがれ、屁たれ質問者(ウホッ)」
その他大勢「まともなソースを書いてやっか」
>>485 問題があるとは書いてないようだが?お前も曲解して墓穴を掘るタイプだな。
どこをどう読んだら「問題あり」と読めるのか、説明を求む。まぁ、無理だよ。
書いてないものは書いてないからw 言ってない相手に言っただろは通用しない。
裁判じゃなおさら通用しない誘導尋問だなw
>>487 俺は清潔な人間なので、クソの臭いがするのは問題だと思うんだな。
問題だと思うんなら直せば?
>>476 っつーわけで、whileを使ってみた。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n,i=1,sum=0;
char buf[256]={"\0"};
size_t buf_sz=sizeof(buf)/sizeof(buf[0]);
printf("整数nの入力==>");
fgets(buf,buf_sz,stdin);
n=atoi(buf);
while(i<=n) sum+=i++;
printf("包茎:%d",sum);
return 0;
}
去年の夏はFIFA WORLD CUP 2006があって楽しかったが、今年は窮地に立たされた 自民党がどこまで得票を維持できるか楽しめる参議院選挙があるねぇ。 トーマスさんよぉ、あんたの企業は自民党から甘い汁を吸わせてもらっているんかい? まぁ、せいぜい自民党に媚を売ってクソミソースを世の標準にしてもらうんだなw
>>490 だから「問題があるなら」な。現状、問題はない。
クソの臭いを嗅いでいるのは
>>475 だけしかいないみたいだし。
そもそも、クソの臭いがするならまず身の回りを確認するはずだな。 もし掲示板上の書き込みからクソの臭いがするなら、神経科の受診が必要。
クソース=問題あり とお前らが解釈していると思われるだけ。 まさか、誘導尋問をしたつもりが自分らが問題ありと思っていたことを露呈したとはw おばかなソースで宿題スレにバカ集合ちゃらちゃ♪ わかったか?お前らが問題だと思っていたことが判明しただけ、こっちは問題があるとは言ってなし。 クソースと投げかけただけw
>>475 を何回読み直しても、無理だとわかっていて縦読みしても
問題あり の文字が浮かび出てこないのは一目瞭然だなw
>わかったか?お前らが問題だと思っていたことが判明しただけ、こっちは問題があるとは言ってなし。 え?
やめとけ、お前のレスのパターンはお見通し。去年さんざんお前と言い合って お前の性格はモロにバレてるからw 逆手にとって切り返して、お前がファビョるのも計算済みだよw
>>501 つまりお前は去年論破されて勝利宣言した粘着私怨君なわけですかw
わざわざそんな恥ずかしい自己紹介しなくてもw
このスレでケンカするな。
俺はケンカなんかしたことはないけどな。
なんで荒れてんの?
トーマスさんが納めた年金が所在のわからない5000万件の中に入っていたのが発覚してファビョってるから
俺は最初から厚生年金だから問題なし。
510 :
デフォルトの名無しさん :2007/05/31(木) 18:20:43
コマンドラインで指定する正の整数nについて,1^2 + 2^2 + 3^2 + · · · + n^2 の値を求める プログラム おしえて
511 :
デフォルトの名無しさん :2007/05/31(木) 18:48:49
っしゃ!
>>505 のテーブルのセルを使ったバージョンのプログラムが完成したぜい!
ほしいかおめーら?やらねーよ(ペ
>>510 #include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[]){double n;if(argc>1){n=atof(argv[1]);
printf("%.0f\n",(n*(n+1)*(2*n+1))/6);}return 0;}
497もたいがいだな
そりゃー1年前に論破されたのを根に持って未だに粘着してるくらいだからなぁ。
[1] 授業単元:ユニット演習
[2] 問題文(含コード&リンク):
下記の実行結果を得るように,メイン関数の他に関数my_abs(double x);
my_pow(double x, double y); fact(double x); sum(double x); を記述しなさい.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4119.txt 実行結果1
x の値(整数)を入力してください.10 ..
y の値(整数)を入力してください.5 ..
x の入力値=> 10
y の入力値=> 5
10 の絶対値=> 10
5 の絶対値=> 5
10 の5 乗=> 100000
10 のFactorial => 3628800
5 のFactorial => 120
10 のSummation => 55
5 のSummation => 15
実行結果2 x の値(整数)を入力してください.8 .. y の値(整数)を入力してください.-7 .. x の入力値=> 8 y の入力値=> -7 8 の絶対値=> 8 -7 の絶対値=> 7 8 の-7 乗=> 0.000000476837158 8 のFactorial => 40320 -7 のFactorial は計算できません. 8 のSummation => 36 -7 のSummation は計算できません. [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 再来週の火曜辺りまで [5] その他の制限 なし どなたかおねがいします
あらあら、いつの間にか論破されたことになっているしw
トーマスが論破できなかったんだよw
>>475 のどこに「問題あり」と書かれているか、説明していただこうw
今論破されているのはトーマスだねw
それから、お前に粘着した覚えはないなぁ。気持ち悪いからこっちからごめんだよw
お前が「何か問題でも?」ってレスしてくるのはすでに予測済みだったから
そことなく罠をはっておいてやったんだよ。そしたらお前は見事にハマって釣られたわけだw
残念だが論破とか勝ち負けを競っているようじゃ、まだまだこのおっさんもがきだなw
あと、こんなクソスレに講師を批判するが、んじゃお前はまともな講師になれるのかと? お前の会社が今、傾いて倒産しそうだから必死なのは分かるが、そんな強がりをしても 自民党はお前の会社は救っちゃくれないね。だから自民党以外の政党に投票しろや、な?w
いつまでやってんだ スレ違いだ他でやれ
>>485 が一番バカってことで。こいつ日本語もまともに読めないバカで
>>475 に問題ありと書かれていることが読み取れるそうだ。
こいつのエスパーはただの妄想だな。
とりあえず日本語が出来ないトーマスは在日決定だろ。通りでくせぇわけだ
通りで × 道理で ○ 在日乙
523 :
510 :2007/05/31(木) 19:41:46
for文使ったやり方でお願いします
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
521もたいがいだな
>>522 もうその程度の変換ミスしかつつけなくなったかw
もっとやれ、そういうのをたたき出すのが目的だからw
>>522 ところでさぁ、変換ミスのあら探しついでに、
>>475 に問題ありと書かれているかどうかチェックしてくれへんか?w
お前の脳内妄想でじゃなくて、文字列の中からな。
後、下手にトーマスをかまうのもどうかとw
こいつがこのスレの荒らしの原因でもあるし。
馬鹿が二人集まると荒れるな
>>528 物事には
外面的側面から捉える手法と
内面的側面から捉える手法の2種類がある
どう頑張ったところで内面的側面を破棄することは出来ない
これ以上やりたいなら違うとこでやれ
528もたいがいだな
梅雨のせいか528のような中学生が出入りするスレになりましたね
533 :
デフォルトの名無しさん :2007/05/31(木) 20:58:54
大学2年生です。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下の条件をみたすプログラムを作成せよ。 整数、または少数を平均を求めるプログラム。 データーの整数、少数はmain関数の引数として入力すること。 平均の計算は自作関数heikinで行うこと。 結果の表示はmain関数内で行うこと。 [3] 環境 [3.1] OS:Windows Xp [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003 [3.3] 言語:C言語 [4] 期限:2007年6月5日まで。 [5] その他の制限:この課題が出されたとき、fgets fpusあたりを習いました。 制限は特にありません。 自分では解けませんでした。 よろしくお願いします。
ここって分かりやすいボケで餌を与えると、見事に食いつくから笑えるよw
なんだ?問題ありについて説明はなしか?まぁ、問題ありとはどこにも 書いてないんだよな、これがw むしろそれでも良いって納得しているんだが?w トーマスの書くクソースなんて、去年からとっくにどんなものか知っていたんだし。 まぁ、こちらが出した餌に食いついて、まさかこれ釣り針じゃないよね?って 食いついて喉から外れないで必死こいている釣られた奴が、トーマスの肩を持って 自分を慰めているから笑える。もちろんそれは釣り針であって餌は偽者のルアーでつよw
おまつりだな
いつものことです
NG推奨ワード:問題あり
>>533 #include <stdio.h>
#include <stdlib.h>
double heikin(int intCount,char *argv[]);
int main(int argc,char *argv[])
{
printf( "%0.3f\n",heikin(argc,argv) );
getchar();
return 0;
}
double heikin(int intCount,char *argv[])
{
double dblTotal=0;
int i;
for(i=1;i<intCount;i++)
{
dblTotal+=atof(argv[i]);
}
return dblTotal/(double)(intCount-1);
}
540 :
452 :2007/05/31(木) 22:21:58
別の場所で質問することにします。 有難うございました。
541 :
533です。 :2007/05/31(木) 22:25:38
問題文は?
>>516 かなりやっつけ
double my_abs(double x)
{
return (x>=0?x:-x);
}
double my_pow(double x, double y)
{
if(y>0) return x*my_pow(x,y-1);
if(y<0) return (1/x)*my_pow(x,y+1);
else return 1;
}
double fact(double x)
{
if(x<1) return 0;
if(x==1) return 1;
return x*fact(x-1);
}
double sum(double x)
{
double i,y;
y=x;
for(i=y-1;i>0;i--) {
x+=i;
}
return x;
}
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 標準入力(普通はキーボード) から入力した総文字数(改行を含む) を出力するプログラムを作成せよ. さらに,リダイレクションを用いて,作成したプログラム自体(test1-1.c) が何文字であるかを確認 せよ. % ./test1-1 ← キーボードからの入力 input test ← 文字列を入力した後 Enter キーを押す. 12345678 ← 文字列を入力した後 Enter キーを押す. 総文字数は 20 です. ← [Control]+[d] を押したら文字数が表示される. % ./test1-1 < test1-1.c ←リダイレクションによる入力 総文字数は 256 です. [3] 環境 [3.1] OS: Linux3.2 [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: C [4] 期限: (2007年6月4日) [5] その他の制限: 繰り返しのfor文 while文あたり おねがいします
546 :
542 :2007/05/31(木) 22:47:39
>543 適当に動くように作れといわれただけで細かいところは自分で決めろ、とのことです。 そういうわけで学生の名前や課目もgakusei:1とかkamoku:1でいいらしいとのことです。 自分の考えといたしましては、 1.scanf関数を用いて、学生名と課目番号と成績を入れる。 2.全学生の課目と成績を表示。 を繰り返すプログラムにしようかと考え中です。
547 :
デフォルトの名無しさん :2007/05/31(木) 23:03:22
>>381 ありがとうございました!
親切に注釈もつけていただいて感謝します。
参考になりました。
>>545 #include <stdio.h>
int main(void)
{
int count = 0;
while (getchar() != EOF)
++count;
printf("総文字数は %d です.\n", count);
return 0;
}
549 :
デフォルトの名無しさん :2007/06/01(金) 00:53:29
>>549 入力例に変更って意味が分からん。
長い方をcountにすればナル文字位置で「異なる」判定になるはず
#include <stdio.h>
void main(void) {
char s1[] = "abcd";
char s2[] = "abcde";
int i = 0;
int j = 0;
int count;
int same;
while (s1[i]) { i++; }
while (s2[j]) { j++; }
count = (i > j) ? i : j;
same = 1;
for(i = 0; i < count; i++) {
if(s1[i] != s2[i]){
printf("%d番目で異なる\n",i);
same = 0;
break;
}
}
if (same) {
printf("同じである\n");
}
}
>>549 こういうことじゃね?
char s1[]="abcd";
char s2[]="bbcde";
>>546 なんか使う関数って学生名と科目名、保存出来なくねぇ?
どっちも番号だけになってるような。
それとも、add関数を変更するか、
名前と番号を対応付けるところは自分で作るの?
>>546 関数の使い方はこんなもんかな。
int main()
{
char line[256];
int gNum, kNum, sValue;
initialize();
while(fgets(line,256,stdin) != NULL){
printf("input ")
if(sscanf(line,"%d %d %d",&gNum,&kNum,&sValue) != 3){
printf("err %s \n",line);
continue;
}
add(gNum, kNum, sValue);
}
for(gNum=0;gNum<MAX_GAKUSEI;gNum++){
for(kNum=0;kNum<MAX_KAMOKU;kNum++){
sValue=get_seiseki(gNum,kNum);
if(sValue!=-1){
printf("%d %d %d\n",gNum,kNum,sValue);
}
}
}
return 0;
}
1] 授業単元: C言語 [2] 問題文(含コード&リンク): 100〜150の間の奇数の合計を出力せよ [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VC++2005 [3.3] 言語: C [4] 期限: 6月4日10時00分まで [5] その他の制限: whileとfor文両方でお願いします 始めたばかりでチンプンカンプンですのでよろしくお願いします^^;
>554 for文 #include <stdio.h> int main(void) { int i, sum = 0; for(i=100; i<=150; i++) if(i%2) sum += i; printf("%d", sum); return 0; } while文 #include <stdio.h> int main(void) { int i = 100, sum = 0; while(i<=150) { if(i%2) sum += i; i++; } printf("%d", sum); return 0; }
さっそくありです^^ あ〜すいませんただ書き忘れてたんですがoddを 使った場合はどうなるでしょうか? よければそちらもお願いします。
odd ? C標準関数/文法にそんなのないよー
sum を odd に書き換える
>>554 ・for文
#include<stdio.h>
int main(){ int a=101; int d=2; int n=25; int s= n*(2*a+(n-1)*d)/2; for(;;)printf("%i\n", s); return 0; }
・while文
#include<stdio.h>
int main(){ int a=101; int d=2; int n=25; int s= n*(2*a+(n-1)*d)/2; while(1)printf("%i\n", s); return 0; }
ありがとう!
#include <stdio.h> int main() { int a = 100, sum = 0; for(;;){ if(a >= 150) break; if(a%2) sum += a; a++; } printf("%d \n", sum); a = 100, sum = 0; while(1){ if(a >= 150) break; if(a%2) sum += a; a++; } printf("%d \n", sum); return 0; }
等差数列の和をループで計算する奴って中学校出てないんだろうか?
>>562 題意としては、ループさせたいんだろうけど、元素材が悪いw
>>562 そういう勝手なことを言っておきながら、お前が昨日書いたクソースは
初項1、等差1に対応していた奴だったじゃんwwwwww
〜じゃなきゃだめだって言うのは、おまえ自身の勝手な主観だから、黙っとけ、年金未納おっさんw
ガウスの計算って小学校じゃなかったか?
458 名前:デフォルトの名無しさん 投稿日:2007/05/31(木) 12:57:43 ?2BP(222)
>>447 #include<stdio.h>
#include<stdlib.h>
int main(){char tmp[256];int s,n=0;while(n>0){printf("整数の入力:");fgets(tmp,256,stdin);
n=atoi(tmp); s=n*(n+1)/2;printf("合計:%i\n", s);} return 0;}
↓一応先に言っておくけど、問題ありとは書いてないっすからねw
問題あり
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):預金額、利率を入力して、10年間分の各利率に対する預金額を表示する。 [3] 環境 [3.1] OS: WindowsVista [3.2] コンパイラ名とバージョン: VC++2005 [3.3] 言語: C++ [4] 期限: 6月8日まで [5] その他の制限: 特になし よろしくお願いいたします。
単利だと思います。
>>569 金利計算ってこれであってるんやろか?
#include<stdio.h>
int main(void){
long yokin, tanri, fukuri;
double riritu;
int i;
printf("預金額 : ");
scanf("%ld", &yokin);
printf("年利率 : ");
scanf("%lf", &riritu);
tanri=fukuri=yokin;
for(i=0;i<10;i++)
{
tanri+=yokin*riritu/100.0;
fukuri=fukuri*(1+riritu/100.0);
printf("%2d 年目 単利 %ld 円 複利 %ld円\n", i+1, tanri, fukuri);
}
return 0;
}
>>570 日本語も読めない在日がこんなところでのうのうと日本語を書くなよw
最近さぁ、自分の都合の悪い意見には日本語でおkとか言う奴が増えてきているけど そういうことを言っているお前が、日本語が理解できない、物事も的確に判断、理解できない バカなんじゃないか?って思われていることに気づいた方が良いよw とりあえず、トーマスは確実に基地外でバカ。自分より劣る人間を探して罵倒することで 自分を誇示したがる井の中の蛙なんだよねw
1円以下の取り扱いは? (切り捨て/切り上げ/四捨五入) 利率更新のタイミングは? (日/月/年) ----- これを改変した詐欺あったよなー
等差数列の和を初項1、等差1の固有のものを使っちゃうやつってゆとり世代?w
>>569 >>572 #include<stdio.h>
#include<stdlib.h>
int main(void){double rate;int i,principal;char tmp[256];printf("元金:");
fgets(tmp,256,stdin);principal=atoi(tmp);printf("利率(%%):");fgets(tmp,256,stdin);
rate=atof(tmp)/100.0;for(i=1;i<11;i++){printf("%i年後:%i円\n",i,principal+
(int)(rate*i*principal));}return 0;}
>>577 初項1、等差1の等差数列の和を求めるのに「初項1、等差1の等差数列の和の公式」を
使うのは当然。
何でもかんでも一般化しないときが済まないのかねw
n*(2*a+(n-1)*d)/2のaとdが1だと分かっているならCPUに*1なんて計算させるのは 無駄なので事前に計算して式を単純化するなんてのはチューニングの基礎なん だけどね。 なぜそこに噛みつくのかが全く分からない。宇宙から司令電波でも受信してるのかねw
581 :
デフォルトの名無しさん :2007/06/01(金) 14:23:28
>>387 できないです…
課題1はif文でお願いします。言い忘れててすいませんでした(>_<)
課題2は配列のかけ算ではなく4行4列の行列のかけ算です(>_<)
日本語の通じないトーマスには「問題あり」が何か日本語じゃない文字として浮かび上がって見えるそうだ
583 :
デフォルトの名無しさん :2007/06/01(金) 14:34:53
すいません(>_<)
>>387 課題1はできました。2をお願いしますm(_ _)m
>>583 #include<stdio.h>
int main(void){
int x[4][4]={{260,45,-16,5},{-79,36,-2,-7},{0,-16,3,-2},{-8,-4,5,-4}};
int z[4][4]={{16,12,32,100},{12,32,100,100},{32,100,100,100},{100,100,100,100}};
int y[4][4];
int i, row, column;
for(column=0;column<4;column++){
for(row=0;row<4;row++){
y[column][row]=0;
for(i=0;i<4;i++) y[column][row]+=x[column][i]*z[i][row];
}
}
for(column=0;column<4;column++){
for(row=0;row<4;row++) printf(" %5d", y[column][row]);
printf("\n");
}
return 0;
}
[1] 授業単元:年金問題 [2] 問題文(含コード&リンク):浮いた5000万件の所在がわかるようにするプログラム [3] 環境 [3.1] OS: 厚生省 [3.2] コンパイラ名とバージョン: 社会保険庁 Ver.2.007 [3.3] 言語: ジャパン語 [4] 期限: 参議院選挙の投票日の一週間前 [5] その他の制限: 支払いをした領収書がなくてもわかるようにお願いします。
>>585 #include<stdio.h>
int main(void){
int i;
for(i=0;i<50000000;i++) printf("俺\n");
return 0;
}
>>585 error:多すぎて不可能です。
warnning:このままでは日本が崩壊する可能性があります。解決するには、全ての議員を辞めさせて選挙をする必要があります。
そもそも複数の年金番号を持ってるのに申請しなかった方が悪いんだがな。
>>586 > [3.3] 言語: ジャパン語
ジャパン語で
管理もしてないのにどうして請求だけが出来るのか不思議
実際、「5000万件」と「5000万人」の違いが理解できない奴がパニックになってるだけで。
あ〜〜あ、俺の釣りネタの入った釣堀に人が集まっちゃったかw
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):下にあります。 [3] 環境 [3.1] OS:Linux [4] 期限:できるだけ早いと嬉しいです 一行からなる二つの文字列を入力し,それぞれを一旦char型の配列に記録する.二つの文字列が等しければ"yes"をさもなければ"no"を表示するプログラムを作成しなさい. このとき,二つの文字列に対応する2つの文字列(文字配列)の先頭番地を与えたとき,二つの文字列が一致していれば1を,一致していなければ0を返す関数int mycmp(char *, char *);を定義し,これを有効に使うこと. プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.文字列は256文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない.
#include <stdio.h> #include <string.h> int mycmp(char * s1, char * s2) { return strcmp(s1, s2) == 0); } int main() { char str1[257]; fgets(str1, sizeof(str1), stdin); char str2[sizeof(str1)]; fgets(str2, sizeof(str2), stdin); printf("%s\n", mycmp(str1, str2) ? "yes" : "no"); return 0; }
595 :
594 :2007/06/01(金) 16:14:34
やべぇ、ポインタの使いどころがなかった。
596 :
594 :2007/06/01(金) 16:15:49
「できるだけ早いと」且つ他の制限がないのでstrcmp()を使用した。 今更使うなと言われても知らないw
ポインタを用いたのを教えてくれると嬉しいんですが・・・
int mycmp(char *a, char *b) { do {if(*a!=*b++) return 0;}while(*a++); return 1; }
mycmpのs1とs2はポインタ
>>593 #include<stdio.h>
#include<string.h>
int mycmp(char* s1,char* s2){return strncmp(s1,s2,256)==0;}
int main(void){char s1[256],s2[256];fgets(s1,256,stdin);fgets(s2,256,stdin);
puts(mycmp(s1,s2)?"yes.":"no.");return 0;}
なぜ、いつも?2BP(222)が叩かれるのか教えてください。
叩くバカが一匹いるから。
トーマスが本当にバカだから
608 :
デフォルトの名無しさん :2007/06/01(金) 16:43:53
562 名前:デフォルトの名無しさん 投稿日:2007/06/01(金) 11:55:39 ?2BP(222) 等差数列の和をループで計算する奴って中学校出てないんだろうか?
そもそも忙しい会社なら、こんなクソスレで質問する奴を相手にしないと思うんだが よっぽど暇で儲けがないから、自分より劣る奴を罵倒しに来ている暇人なんだよ トーマスって奴はw
中学じゃなくて小学校レベルじゃねぇか
あ、括弧閉じが一個余計だ。
そして言い訳をして自分を煽ってくる相手に対して強がろうと必死になる トーマス哀れwwwwwww こんなところじゃお前がこき使おうと思って 雇おうと思える社員すらみつからんぞw
>>613 お前さぁ、自分を擁護する奴がいるように見せかけようと自作自演しなくて良いからw
バレてんだよ、お前を擁護する奴なんていないんだからw
>>613 自己紹介?悪いけど大学院生だから、俺。会社になんてまだ勤めてないし
トーマスみたいな基地外が運営している会社になんて入りたくねーよw
>>615 は多分、同窓生の中では成績が優秀なんだろうな。
自分に同意しない奴がみんな自演に見えるようになったら入院が必要なレベル。
すでに入院済み
自分を擁護する養護学校卒のトーマスたん可愛いよwwwww 相手にバカとか罵倒すりゃムキになると思っているんだろうけど、無駄w お前がバカだというのが分かっているから。このスレで過去にお前が出した クソースをみりゃ一目瞭然w
自分を自作自演で擁護しているトーマスたんは養護学校を運営しているそうでつ
昨日も聞いたけどクソースって何語よ? なんか勝手に略語とか造語とか作って悦に入ってる中学生みたいな奴いるけど、 意味も定義しないで変な言葉作る奴って例外なく無能なんよねぇ。 んで、バカにバカというのは罵倒でも何でもなくて、単に事実を指摘してるだけ。 もちろん事実と認めるに足る具体的な根拠付きでね。
>>603 なんてモロにトーマスの発言だと分かる書き方だよなw
まて
>>603 は違う
オレは断じてトーマスなんかではないぞ
きかんしゃトーマスってあるけど、痴漢者トーマスってタイトルで 女性専用車両で痴漢するトーマスを想像しちゃったり
>>624 ほぉ、その慌てっぷり、自作自演もここまで白々しく他人を装ってやると
面白くなってくるねw
>>626 「痴漢者トーマス」というエロゲーがある。パート2まで出たらしい。
池袋には「痴漢車トーマス」というイメクラがあった。今はない。
>>629 int move(int i, int j)
{
map[i][j] = 2;
/* reached the goal */
if (i == 0 && j == 1)
{
map[i][j] = 3;
return TRUE;
}
/* north */
if (i > 0 && !map[i-1][j] && move(i-1, j) == TRUE)
{
map[i][j] = 3;
return TRUE;
}
/* south */
if (i < 8 && !map[i+1][j-1] && move(i+1, j) == TRUE)
{
map[i][j] = 3;
return TRUE;
}
/* east */ if (j < 21 && !map[i][j+1] && move(i, j+1) == TRUE) { map[i][j] = 3; return TRUE; } /* west */ if (j > 0 && !map[i][j-1] && move(i, j-1) == TRUE) { map[i][j] = 3; return TRUE; } /* cannot reach the goal */ return FALSE; } 説明に書かれてるとおりの実装。スタックがどうとかってのはおそらく再帰展開しろって事だろうが面倒だからパス
>>631 return FALSE;
の前に
map[i][j] = 0;
が必要じゃね?
>>632 言われてみればそうだな
まぁ勝手に追加してくれ
634 :
デフォルトの名無しさん ◆BBXgAYJ6W6 :2007/06/01(金) 21:33:47
5日間、考えてもできません。
頭が痛くて倒れそう・・・。助けてください、お願いします。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4122.txt [3] 環境
[3.1] OS:Windows
[3.2] VC 6.0
[3.3] 言語:C言語
[4] 期限: 2007年6月4日(月)午前
(なので、前日の6月3日(日)までにしていただければありがたいです)
[5] レベルとか: C言語1ヶ月目位。教科書は「独習C」一通り読んだだけ。
もし、作っていただけるのなら、あまり高度な技術で作っていただいても、
出来が良すぎると怪しまれるので・・・、
少しプログラムの水準を低く(?)していただけるとありがたいです。
変なお願いしてすいません。お願いします。
635 :
516 :2007/06/01(金) 22:08:47
>>544 返信遅くなってすいません!ありがとうございましたー
わかりません。助けて下さい [1] 授業単元: プログラミング [2] 問題文(含コード&リンク) じゃんけんゲームを作成せよ.ただし,main() は下記のものを用いよ 具体的には,get hand player(), print hand(),judge() を追加すればよい じゃんけんぽん(1-3): 1 コンピュータ:グー あなた:グー あいこ int main(){ int computer, player; srandom((unsigned long)time(NULL)); while(1) { computer = random() %3+1; /*コンピュータの手(1〜3,乱数)*/ player = get_hand_player(); /* 人間の手(1〜3) */ printf("コンピューター:"); print_hand(computer); /* 手(グー,チョキ,パー) の表示 */ printf("あなた:"); print_hand(player); /* 手(グー,チョキ,パー) の表示 */ switch(judge(computer, player)) { /* 勝負判定(-1〜1) */ case -1: printf("私の勝ち!\n"); break; case 0: printf("あいこ\n"); break; case 1: printf("あなたの勝ち!\n");} } } [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: C 言語 [4] 期限: (2007年6月5日) [5] その他の制限:ポインタはまだ習ってません お願いします
637 :
デフォルトの名無しさん :2007/06/01(金) 22:33:26
前スレ711です。(問題再掲:二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。ここでa,b,cは整数、x1,x2は浮動小数とする。 ) 前スレで回答してもらった下のプラグラムを実行すると、x1、x2をこちらから指定することができなくなってしまいます。どこを手直しすれば良いのか教えてください。おねがいします。 #include<stdio.h> double f_internal(int a, int b, int c, double x, int is_init){ static int sa, sb, sc; // a, b, c を外部変数にするべきかな? if(is_init){sa=a;sb=b;sc=c;} return sa*x*x+sb*x+sc; } void f_init(int a, int b, int c){f_internal(a, b, c, 0, 1);} double f(double x){return f_internal(0, 0, 0, x, 0);} int main(void){ int a, b, c; double x1, x2, xx, xmin, xmax, ymin, ymax; printf("\nInput value of a, b, c : "); scanf("%d %d %d", &a, &b, &c); printf("\nInput value of x1, x2 : "); scanf("%lf %lf", &x1, &x2); if(x1>x2){xx=x1;x1=x2;x2=xx;} f_init(a, b, c); xx=(a!=0)?(double)-b/(2*a):x1; // y'=2*a*x+b -> x=-b/(2*a) の時,極値をとる if(xx<x1) xx=x1; if(xx>x2) xx=x2; xmax=xmin=x1; ymax=ymin=f(x1); if(ymax<f(xx)){ymax=f(xx);xmax=xx;} if(ymin>f(xx)){ymin=f(xx);xmin=xx;} if(ymax<f(x2)){ymax=f(x2);xmax=x2;} if(ymin>f(x2)){ymin=f(x2);xmin=x2;} printf("maximum : x=%g y=%g\n", xmax, ymax); printf("minimum : x=%g y=%g\n", xmin, ymin); return 0; }
640 :
639 :2007/06/01(金) 23:55:52
それと、「ファイル編」は自分で考えてくれ。 main関数を変更するだけでできるはず。
641 :
542 :2007/06/02(土) 00:01:24
>>553 ありがとうございます!
返信が遅くなってしまいましたが、
こちらでもコンパイルが無事完了いたしました!
まだ良く理解出来てない部分なので
ソースを見ながら一行ずつ解読していこうと思います。
本当にありがとうございます。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 下に書いてあります。 [3] 環境 [3.1] OS:Windows [3.3] 言語:どちらでも可 [4] 期限:早いと有り難いです。 入力した関数を微分・積分して結果を表示するプログラムを作成せよ。
643 :
デフォルトの名無しさん ◆BBXgAYJ6W6 :2007/06/02(土) 00:17:01
>>639 助かりました。
ふざけるなゴルァのソースすら考えられない自分に鬱orz
ファイル編は教科書見ながらします。
本当にありがとうございました。
逆にスイッチでよう頑張るなと感心してしまう
645 :
デフォルトの名無しさん :2007/06/02(土) 00:30:57
466〜468お願いします<(_ _)>
>>642 何?数値微分とか数値積分の話じゃないよね?
こんな感じのプログラムかな?
関数を入力して下さい:x^3
d(x^3)/dx=3*x^2 ,∫x^3dx=x^4/4+C
>>638 エスパー回答
Input value of a, b, c : 1,2,3
のようにカンマ区切りで数値を入力してるんじゃないかと推測
Input value of a, b, c : 1 2 3
Input value of x1, x2 : -2.5 3.0
のようにスペース区切りで数値を入力すればおk
>>636 int get_hand_player(void){
int player;
do{
printf("じゃんけんぽん(1-3): ");
scanf("%d", &player);
}while(player<1 || 3<player);
return player;
}
void print_hand(int hand){
char *hand_str[]={"dummy", "グー", "チョキ", "パー"};
puts(hand_str[hand]);
}
int judge(int computer, int player){
switch((computer-player+3)%3){
case 0: return 0; break;
case 1: return 1; break;
}
return -1;
}
>>636 ポインタ無しに修正
void print_hand(int hand){
if(hand==1) puts("グー");
if(hand==2) puts("チョキ");
if(hand==3) puts("パー");
}
650 :
642 :2007/06/02(土) 01:35:34
>>650 情報関係の学科ですか?まあ何所でも良いんだけど
情報足り無すぎて作れない。対応する関数、入出力の形式、仕様は自由
とか、他に何か言われて無い?言われた事を全部言って貰わないと困る。
仕様が自由なら、a*x^n見たいな簡単な関数だけに対応して
入出力も0.5*x^-0.5とか適当に済ませちゃうんだけどな。
652 :
642 :2007/06/02(土) 03:17:51
>>651 情報関係ではないです。
実際指示はそれだけでした。
プログラミング自体が専門外の学科なんで、あまり難しいことは求められてないと思います。
なので関数も簡単なやつのみに対応するもので構わないので、お願いします。
653 :
636 :2007/06/02(土) 09:49:41
>654 1) #include <stdio.h> int main(void) { int i, n; printf("整数値を入力してください:"); scanf("%d", &n); for(i=1; i<=n; i++) printf("%d", i%10); return 0; }
2) #include <stdio.h> char *a[] = {"0","1","2","3","4","5","6","7","8","9"}; void show(int n) { if(n<10) printf(" %s", a[n]); else printf(" %s%s", a[n/10], a[n%10]); } int main(void) { int i, j; printf(" |"); for(i=1; i<=9; i++) show(i); printf("\n------------------------------------------------\n"); for(i=1; i<=9; i++) { printf("%s|", a[i]); for(j=1; j<=9; j++) show(i*j); putchar('\n'); } return 0; }
>>658 横長になるような入力を行う。
冗談は置いといて、入力された後にwidthとheight見て
大きいほうを横にしてしまえばいいんでねぇの?
>>658 #include <stdio.h>
int main(void)
{
int i, j;
int LongLength, ShortLength;
int temp;
puts("長方形を作りましょう。");
printf("一辺(その1):"); scanf("%d", &LongLength);
printf("一辺(その2):"); scanf("%d", &ShortLength);
if(ShortLength > LongLength)
{
temp = ShortLength;
ShortLength = LongLength;
LongLength = temp;
}
for(i = 0; i < ShortLength; i++)
{
for(j = 0; j < LongLength; j++) putchar('*');
putchar('\n');
}
return 0;
}
>>659 学校の先生がウザイから実行例どうりにならなきゃ
ダメなんですよ
>>660 ありがとうございます
口が裂けても目上の人間のことをそんな風に言うな。 マの世界ってのは軍隊式だと覚えておいた方が良い。
くーーっくっくっくー、トーマスみたいなヘボでもこういう場所では でけぇ面するくらいだしな、クーーックックックー
土日はトーマスたんはお休みでつか?どうせエロゲーのメーカーの社員だろ?
ここで依頼してる奴がみんなプログラマ志望な訳じゃないだろ。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 自分の姓名を以下の2通りの方法で表示するプログラムを書け。まず配列aを姓名を使って初期化する。 ・aの各要素a[i]を1文字ずつ出力する ・ポインタPを使って、同様に1文字ずつ出力する [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C [4] 期限: 6月4日 [5] その他の制限: 配列、文字列、ポインタ、構造体など習いました。 これらを使って出来ませんでしょうか?お願いします
>>666 #include <stdio.h>
int main(void)
{
char a[] = "Input Your Name";
char *p = a;
int i = 0;
/* Method 1 */
while(a[i]) putchar(a[i++]);
/* Method 2 */
while(*p) putchar(*(p++));
return 0;
}
エロゲメーカーの社員に微妙にあこがれる
>670 童貞お断りのメーカーもあるらしいw
673 :
642 :2007/06/03(日) 00:10:16
>>671 さっきやってみたら成功しました!
どうもありがとうございます、お手数かけました。
[1] 授業単元:ネットワークプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4133.c $./[プログラム] [-s or -c]でサーバ・クライアントとして動作
-s,-cの順にプログラムを重複起動させて通信を行う.
-s(サーバ)では・・・
echoサーバのように,受信した文字列をクライアントにそのまま返信する.
(サーバ側では受信した文字を表示してもしなくてもよい)
入力した文字列をクライアントに送信する.
同時に複数のクライアントから接続があった場合,後からの方に文字列busyを送り,コネクションを切断する.○
-s動作中に$telnet 127.0.0.1 10007で接続可能 ○
-c(クライアント)では・・・
入力された文字列をサーバに送信する.
サーバから送られてきた文字列を表示する.
キーボードからの入力が終了したとき(改行のみのとき)に,コネクションを切断し終了する.○
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 6月5日 9:00
[5] その他の制限: リンク先の書きかけのソースを参考にお願いします.○はなんとかそれらしく動作している項目です.改善した方がいい所があれば書き換えてもらえれば結構です.
ソケットとかはわからんので、ソース見てて思ったことでも・・・ goto多いね ラベルは関数が違うなら違う名前のほうがいいかと。 他人に見てもらうならコメントもう少しあったほうがいいかと。
gotoは、そんなにひどい使い方でもないから問題ないと思うな。 ループ内のコードが長くなる場合は、goto loop: もありかもな、 whileやforをつかうよりわかり易いかも知れないとおもった。
>>677 配列+Linkedリストの極普通なハッシュリストを作れって事なんだろうが
設計の際に図を書けって書いときながら穴埋め形式なのか?
今一出題意図が分からんな・・・
>>677 適当でありますが
int cancel(char *id1){
int x, item, info1;
struct item *previous, *key;
x = hash(id1);
key = table[x];
previous = table[x];
item = search(id1);
if(item > 1){
printf("Input info\n");
scanf("%d", &info1);
if(key->info == info1){
table[x] = key->next;
}else{
key = key->next;
for(key = key->next; key != 0; key = key->next, previous = previous->next)
if(key->info = info1){
previous->next = key->next;
break;
}
}
free(key);
}else if(item == 1){
table[x] = 0;
free(key);
}
return item;
}
さて、エロゲメーカーに就職するために、エロゲでもやるか。
681 :
680 :2007/06/03(日) 03:45:33
>>680 for文の前の
key = key->next
は無かったことに
682 :
680 :2007/06/03(日) 03:51:32
>>677 だめだ……やっぱ、ニートで
int cancel(char *id1){
int x, item, info1;
struct item *previous, *key;
x = hash(id1);
key = table[x];
previous = table[x];
item = search(id1);
if(item > 1){
printf("Input info\n");
scanf("%d", &info1);
if(key->info == info1){
table[x] = key->next;
free(key);
}else{
for(key = key->next; key != 0; key = key->next, previous = previous->next)
if(key->info == info1){
previous->next = key->next;
free(key);
break;
}
}
}else if(item == 1){
table[x] = 0;
free(key);
}
return item;
}
683 :
680 :2007/06/03(日) 03:57:00
コペルニクスとハイゼンベルクがやばいな。
684 :
デフォルトの名無しさん :2007/06/03(日) 10:12:28
>>677 のソースのイニシャライズ構文が俺にはわかりません
struct item *table[M];
void initialize()
{
int i;
for (i = 0; i < M; i++)
table[i] = 0;
}
*table[M]ってstruct item 型のポインタのM個の配列ですよね
このイニシャライズ構文だと
table[0] = 0 → table[0] = NULL;
table[1] = 1 → table[1] = 0x1番地
ってな感じになると思うんですけどこれって何の意味があるんですか?
解こうと思ったんすけど、typedefしてないから長ったらしいし
*table[M]もグローバルにする必要性もわかんないしやめました
上記の質問誰か答えて頂けないでしょうか。
>>684 >table[0] = 0 → table[0] = NULL;
>table[1] = 1 → table[1] = 0x1番地
どう見ても全てのテーブルを0初期化なんだが?
>for (i = 0; i < M; i++)
> table[i] = 0;
別に、↓でもいいんでね?
memset(table, 0, sizeof(struct item *)*M)
>>685 すいやせん
馬鹿な思いこみしてやした
>for (i = 0; i < M; i++)
>table[i] = 0;
を脳が勝手に
for (i = 0; i < M; i++)
table[i] = i;
と捉えてしまいましたでごんす。
687 :
あい :2007/06/03(日) 10:28:16
例題1で用いた配列 atai とその100個の初期値が、ある試験の100人分の点数だったとする。試験の合格点は65点以上で、40点未満は追試がおこなわれる。このデータを集計するためのに以下のようなプログラムを作成せよ。 (1)全員の平均点を求める (2)合格者の人数を求める (3)合格者の平均点を求める (4)追試者の人数を求める (5)追試者の平均点を求める Z:\pro1>ex06_3.exe 全員の平均点は、68.6点です。 合格者は64名、平均点は79.8点です。←実行結果 追試者は 9名、平均点は31.9点です。 これがataiです。 atai[100] = { 37, 65, 74, 61, 51, 90, 89,78, 68, 69, 74, 74, 69, 44, 70, 78, 75, 70, 50, 25, 30, 72, 79, 67, 98, 98, 75, 79, 68, 45, 70, 66, 59, 61, 68, 34, 19, 71, 74, 76, 43, 72, 53, 48, 50, 87, 57, 85, 91, 74, 85, 61, 69, 61, 61, 32, 85, 86, 45, 71, 64, 83, 87, 59, 73, 75, 92, 59, 77, 54, 79, 98, 50, 61, 39, 53, 62, 62, 90, 33, 88, 73, 88, 86, 78, 38, 98, 97, 97, 79, 77, 97, 83, 44, 91, 72, 81, 85, 77, 45 }; [3.1] OS: (Windows/Linux/等々) Windows XP [3.2] コンパイラ名とバージョン: vc [3.3] 言語: C [4] 期限: 今日まで 一次元配列を今習っています。おねがいします。
>>677 int cancel(char *id1){
int x, item, info1;
struct item *previous, *key;
x = hash(id1);
key = table[x];
previous = table[x];
item = search(id1);
if(item > 1){
printf("Input info\n");
scanf("%d", &info1);
if(key->info == info1){
table[x] = key->next; free(key);
}else{
for(key = key->next; key != 0; key = key->next, previous = previous->next)
if(key->info == info1 && !strcmp(id1, key->id)){
previous->next = key->next; free(key); break;
}
}
}else if(item == 1){
if(!strcmp(id1, key->id)){
table[x] = key->next; free(key);
}else{
for(key = key->next; key != 0; key = key->next, previous = previous->next)
if(!strcmp(id1, key->id)){
previous->next = key->next; free(key); break;
}
}
}
return item;
}
[1] ファイル処理 [2] キーボードからファイル名を読み込み行数と数字文字の個数を表示するプログラム [3] ? [3.1] Windows [3.2] Visual Studio 2005 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 無期限 [5] 特になし 分かる方お願いします。
>>691 読み込むファイルの中身の具体的な例を出してもらわんと
>>692 読み込むのは作成したソースプログラムでお願いします。
ちなみにC言語です。
695 :
あい :2007/06/03(日) 11:06:30
処理の流れも教えてもらえませんか?
>>691 #include <stdio.h>
int main(void)
{
FILE *fp;
int ch,ret=1,num=0;
char fname[256];
printf("Input filename > ");
scanf("%s",fname);
if( (fp=fopen(fname,"r")) == NULL) {
printf("%sが開けません\n");
return 1;
}
while( (ch=fgetc(fp)) != EOF ) {
if( ch>='0' && ch<='9') num++;
else if( ch=='\n' ) ret++;
}
printf("行数 : %d / 数字 : %d \n",ret,num);
fclose(fp);
return 0;
}
>>695 1.全ての点数を順番に見る(for文)
2.全体の平均を出すため、総合計を出す。
3.合格者の点数を出すため、65点以上の人数とその合計を出す。
4.追試者の点数を出すため、40点未満の人数とその合計を出す。
5.全体の合計を人数で割れば全体の平均点
6.合格者の合計を人数で割れば合格者の平均点
7.追試者も6に同じ容量
OK?
699 :
あい :2007/06/03(日) 11:14:00
ありがとうございました。
>>674 細かいところでは色々あるが、それはまあいいや。
機能面で出来てないところについてだが。
クライアントは端末入力とサーバからの受信の両方を待たなければならないので、
サーバ同様にI/Oの多重化が必要。
やり方は色々あるが、サーバのほうでselect()を使ってるようだから、
クライアントでもselect()を使うようにしたら。
クライアントは標準入力(fd=0)とソケットの2つを待つようにして、
標準入力からread()→ソケットにwrite()
ソケットからread()→標準出力にwrite()
のようにする。単にコピーするだけのパイプラインが二つあるわけだ。
端末がcookedモード(デフォルトの状態)なら、
特に何も考えなくとも、改行を入力した時点でselect()から戻り、
その時点でread()すれば、(fgets()など使わずとも)ちょうど
1行分だけ読み込める、つまり自然に行入力になっているはずだ。
クライアント側の終了処理は、以下のようにする。
・入力が終わった時にやること
1) shutdown(第二引数は1を指定)を呼び、送信完了をサーバに伝える。
(サーバ側ではこれを受けるとread()が0で返る)
2) 入力が完了したことを覚えておき、標準入力の分をfdsetから抜く。
サーバからの受信が完了するまではselect()ループからは抜けないように。
・サーバからの受信が終わった時(read()の戻り値<=0)にやること
ソケットをclose()して、select()ループから抜ける。後始末。
702 :
701 :2007/06/03(日) 11:17:22
>>700 ん、>696と>697は仕様が違うな。
あんな、要求じゃこれくらいの差は出てしまうか。
実行して出力すりゃわかると思うけど、自分のやりたいほうを確認してから提出しろよ。
#include <stdio.h> int main() { FILE *fr; char buff[1024] = {'\0'}; char *temp = NULL; unsigend int line = 0, sumword = 0; fgets(buff,sizeof(buff),stdin); if(temp = strchr(buff,'\n')) *temp = '\0'; if((fr = fopen(buff,"r"))==NULL) fprintf(stderr,"読み込み不可能"); while(fgets(buff,sizeof(buff),fr){ if(temp = strchr(buff,'\n')){ line++; *temp = '\0';} sumword += strlen(buff); } printf("文字数%u行数%u\n",sumword,line); fclose(fr); }
705 :
あい :2007/06/03(日) 11:35:10
すみません // 合格者 if ( atai[ i ] >= 65 ) { OKStudent++; OKSum += atai[ i ]; ここのソースプログラムを詳しくk教えてください。OKStudent++;ところとか
OKStudent++;はOKStudent = OKStudent + 1と同じ。 OKSum += atai[ i ];はOKSum = OKSum + atai[ i ];と同じ
test
>>705 スレ違い。自分で調べるくらいできるでしょ?そりゃインクリメントで値を1加えるという意味。
他に表現するとしたら、n=n+1; やら n+=1; といったものがある。
709 :
あい :2007/06/03(日) 11:38:58
なぜ+1なのですが??しょしんしゃですみません><
仕様です。
人数を数えているから。 65点以上だったら+1人ずつしていって、100人分を見てる。 ゆっくり落ち着いて考えるんだ。そんなに難しいことは書いたつもりはない。
>>709 1足す(引く)って処理は(ループとかいろいろな処理で)頻繁に使うから
言語側で専用の構文(n++ とか n--)用意してくれてんの。
ん、俺はなんで+1なんてしてるの?と思ったが ++がなんで+1になるの?って質問だったのか?
714 :
あい :2007/06/03(日) 11:42:31
分かりました。お手数かけてすみません。。。
715 :
デフォルトの名無しさん :2007/06/03(日) 11:46:33
整数値mとnを読みこみ、次式で計算されるSの値を求めて表示するプログラムを、 次式のアルゴリズムに忠実に作成せよ。 m n S=Σ Σ(i×j) i=1 j=1 ただし、上の2重の総和記号の説明のため、m=3,n=2を例として書き下すと以下の ようになる。 3 2 S=Σ Σ(i×j)={(1×1);(1×2)}+{(2×1)+(2×2)}+{(3×1)}+(3×2)} i=1 j=1 [実行例] mとnの値を入力せよ:3 2 m=3,n=2のとき,s=18 よろしくお願いします。
誰しも初心者を通過するので謝ることではない しかし初心者を原因にするな
>>715 for( i = 1; i <= m; i++ ) {
fot( j = 1; j <= n; j++ ) {
sum += i * j;
}
}
動作確認もコンパイルもしていない。
入力、出力くらいは自分でヨロ
>>715 #include <stdio.h>
int main(void)
{
int m = 0, n = 0, i, j, S = 0;
printf("mとnの値を入力せよ:");
scanf("%d %d", &m, &n);
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
{
S += i * j;
}
}
printf("m=%d,n=%dのとき,S=%d", m, n, S);
return 0;
}
トーマスたん、出ておいで、トーマスたん、もっとクソース書いて下ちゃい ><;
720 :
674 :2007/06/03(日) 14:17:44
>>693 ,701
助かりました.多重化のやり方がいまだによくわからないので
提出が終わったらその手の本で勉強してみます.
[1] 授業単元: c言語 [2] 問題文: 5. 挿入法による昇順整列を行なう次のような関数 inssort を定義し,動かし なさい. void inssort(int a[], int n) 挿入法の手順 配列の2番目の要素から順に最後尾まで( i= 1, 2, ..., n-1 ) をa[i] として a[i] の左隣から前方へ,各要素 a[j] について ( j= i-1, ..., 1, 0 ) a[j] とその右隣 a[j+1] が昇順なら break(次の a[i] へ) そうでなければ a[j] と右隣とを入れ換える. [3] 環境 [3.1] OS:Linux [3.2] gcc 3.4 VC 6.0 [3.3] 言語: C [4] 期限: ([2007年06月04日12:00まで] [5] その他の制限:特にありません よろしくお願いします
724 :
デフォルトの名無しさん :2007/06/03(日) 15:53:46
void InsertSort(int num[ ], int n) { int i, j, temp; for (i = 1; i < n; i++) { /* i 番目の要素をソート済みの配列に挿入 */ temp = num[i]; /* i 番目の要素を temp に保存 */ for (j = i; j > 0 && num[j-1] > temp; j--) /* このループで */ num[j] = num[j -1]; /* temp を挿入する位置を決める */ num[j] = temp; /* temp を挿入 */ /* 途中経過を表示 */ } }
/* timp を挿入する位置を決める */
>>725 【エラー】挿入先が見つかりません。相手が居ないようです。
>>726 まぁ、都合よくエラー修正してくれるコンパイラなら、ちゃんとホールを見つけてきてくれるさ。
ほら、あるでしょ?空気嫁とかw
>>727 【致命的なエラー】スペックが足りません。問題を解決するには手術が必要です。
つ温めたこんにゃく
>>728 wallet += atm(30000);
goto fuzoku;
/* timpの挿入先を動的に確保する */
/* 挿入先の環境はatmの引数により変化 */
貯金ねーから俺はこっちで acom(30000);
TimPointerException
↓無利子でお金が借りられるacom(int)ライブラリを実装しておいて
戻り値の型はvoidか
return 893;
738 :
デフォルトの名無しさん :2007/06/03(日) 19:21:56
[1]プログラミング演習 [2]ブラックジャックをコンピューターと対戦するゲームプログラム、実際はトランプを使用して 行われるが、ここでは1〜10の目をもつサイコロをカードの数字として扱う簡易版のブラックジャック を考える。コンピューターがディーラーユーザーがプレーヤー。21に近いほうが勝ち 手順は以下の通り 1 カードを配る プレーヤーディーラーとも2枚ずつカードを配る。 プレーヤーのカードは2枚とも表向き、ディーラーのカードの1枚は見えないように伏せておく 2 プレーヤーの番 プレーヤーはヒット(カードをもう1枚引く)かスタンド(カードを引かずその時点の ポイントで勝負)を選択する、21を超えない限り何回でもヒットできる。21を超えると負け 3 ディーラーの番 プレーヤーがスタンドすれば、ディーラーは17以上に なるまでカードを引かなければならない。また17以上になったらその後カードを引くことはできない。 [3] 環境 [3.1] OS:Linux [3.2] gcc 3.4 VC 6.0 [3.3] 言語: C [4] 期限: ([2007年06月04日12:00まで] [5]rand()関数を使う、各ステップの処理を関数化1ゲームの流れを簡潔に表現する。 授業が始まって2ヶ月経つんですがまったくわかりません、助けてください・・。
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 下に記載 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限:できるだけ早いといいです。 1個以上、10個以内の整数を大きさ10の整数配列に入力するプログラムを作成する. 入力する整数の個数は最初に宣言するものとする.たとえば3と4からなる2個の整数を入力する場合には"2 3 4"と入力する. つぎに,void swapsmall(int *data, int num);という関数を作成し, dataから始まるアドレスに,順におかれたnum個の整数のうち最小のものを先頭のものと入れ替える機能を与えなさい. ただし,同一の値をもつ最小の整数が複数ある場合には,一番後方にあるデータと入れ替えるようにすること.プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること. 順序をswapsmall()を一回適用したあと,配列の内容をスペース(空文字)一つで区切って出力しなさい.最後の数字の後ろに空白を置かないこと.
>739 #include <stdio.h> void swapsmall(int *data, int num) { int i, min = 0; for(i=1; i<num; i++) if(data[min]>=data[i]) min = i; if(min) { int temp = data[0]; data[0] = data[min]; data[min] = temp; } } int main(void) { int i, num, data[10]; scanf("%d", &num); for(i=0; i<num; i++) scanf("%d", data+i); swapsmall(data, num); for(i=0; i<num-1; i++) printf("%d ",data[i]); printf("%d", data[i]); return 0; }
>>738 > [3.1] OS:Linux
> [3.2] gcc 3.4 VC 6.0
コレが気になる。
743 :
デフォルトの名無しさん :2007/06/03(日) 20:50:02
どなたか解いていただけるとありがたいです。 簡単らしいのですがどうも・・・? [1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): 1まずファイルから(ランダムの数値が1000個はいっている”rand1000.dat”という名前のファイル)保存されているデータ数nを読み込み,その数だけデータを読み込み配列に格納する. 2次に,格納された配列をディスプレイ上に表示する. 3そして,データが保存された配列についてバブルソートを実行する関数 bubblesort()を呼び出し,配列データを整列する. 4最後に,整列された配列をディスプレイ上に表示しプログラムを終了する. [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:6月5日 [5] その他の制限:結果がソートされていることを毎回確認すること. 全く分からないのでどなたかお願い致します。
>>743 そのファイルのフォーマットがわからないことにはどうしようもない。
745 :
738 :2007/06/03(日) 21:22:38
>>741 CUIってなんなんでしょうか?ど素人なんでわからないですすいません。
>>742 どういうことですか?すいません
誰か教えてくださいすいません
用語が分からなければ自分で調べればいいじゃないか
747 :
デフォルトの名無しさん :2007/06/03(日) 21:38:44
[1]プログラミング演習 [2]キーボードから半角英数字を一字入力して、その文字と文字コード(大文字16進数2桁)を 表示するプログラムを作成しなさい。 条件@:使用する変数はchar型とする 条件A:文字の入力に関してはscanf関数を使用すること 実行結果 (「」の部分はキーボードからの入力) 半角英数字を入力してください:「A」 文字「A」の文字コードは[41」です。 [3] 環境 [3.1] windows vista business [3.2] visual stadio 2005 [3.3] C [4] 6月8日 [5] まだC言語を習ったばかりなので、簡単なプログラムでお願いします。
748 :
738 :2007/06/03(日) 21:38:55
749 :
デフォルトの名無しさん :2007/06/03(日) 21:44:59
[1]プログラミング演習 [2]キーボードから半角英数字を一字入力して、その文字と次の文字を表示する プログラムを作成しなさい。(文字コードが連続して設定されていることを確認せよ。 例えば、文字Aが入力されたとすると次の文字としてBが表示される) 条件@:使用する変数はchar型とする 条件A:文字の入力関数に関してはscanf関数を使用すること。 条件B:入力される文字は、0〜8、a〜y、A〜Yとする。これ以外の文字は 入力されないものとする。 実行結果 (「」の部分はキーボードからの入力) 半角英数字を入力してください:「A」 文字「A」の次の文字は[B」です。 [3] 環境 [3.1] windows vista business [3.2] visual stadio 2005 [3.3] C [4] 6月8日 [5] まだC言語を習ったばかりなので、簡単なプログラムでお願いします。
>>747 #include <stdio.h>
int main(void)
{
char c;
printf("半角英数字を入力してください: ");
if (scanf("%c", &c) == 1)
printf("文字「%c」の文字コードは「%02X」です。\n", c, (unsigned char)c);
return 0;
}
>>749 #include <stdio.h>
int main(void)
{
char c;
printf("半角英数字を入力してください: ");
if (scanf("%c", &c) == 1)
printf("文字「%c」の次の文字は「%c」です。\n",
c, (unsigned char)c+1);
return 0;
}
>>745 無知それ自体は悪いことではない
>ど素人なんで
そんなものはまったく関係ない
gccはWindows版とLinux版があるが
VisualStudioC++6.0はWindowsでしか動かせない
753 :
738 :2007/06/03(日) 21:59:56
>>752 すいません、僕が授業で使ってるのはLinuxみたいなんですが
たぶんgccだけって事ですか?なにもかもわかんないんですが・・・すいません
>>753 すいません何回いうんだよ
なんでも謝ればいいってもんじゃないしさ
そんなんじゃ社会に出てから注意されるし、損するよ
まず自分でなんとかしようと考えないの?
人に聞くのはその後でしょ
いっておくと、WindowsのソフトをLinuxに持っていっても動かないし、逆もまた然り
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 下に記載 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限:特にありません 長さ256文字以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする. T1の中にT2が出現する場合に,その一番左に現れる文字列の先頭アドレスを値として返す関数 char *findstr(char *t1, char *t2);を作成しなさい. ただし,T1の中にT2が出現しないときはNULLを値として返すものとする. findstr()の中で,比較対象となるT1のなかの先頭文字を先頭から一文字ずつずらして 7-2で用いたchkmatch()を呼び出すことにより要求を満たす関数を作成することができる. この関数を用いて, 1)最初にT1を表示し,2)その次にT1の中でT2の文字列が出現するまでの文字をスペース(' ')として端末に出力し,そのあとT2の文字列文だけ(’^’)を出力し、 再度T2の文字列が出現するまでスペース(’ ’)を出力し..というプロセスを文末まで続けるプログラムを作成しなさい。 3a)このプロセスは、findstrを実行して文字列の先頭を検索し、そこまでスペースを出力する。 3b)文字列の先頭が検出されたら、T2の文字列分だけ(’^’)を出力する。 3c)T2の文字列分だけポインタを進め、そこからfindstrを再実行する(3aにもどる)というプロセスを繰り返すことで完成する。 4)T2がT1に出現しない場合はT1の文字数だけのスペースが表示されるようにすること. プログラミングにあたっては,配列宣言を除き,すべてポインタを用いて処理すること.文字列は60文字以下が入力されるものとし,文字列の長さに関するエラー処理をする必要はない
丸投げスレでgdgd説教している方がうぜーんだよ お前どっか他所へいけよ?お前なんて誰も求めてねーよ あっ、日ごろ相手にされていないからこういう場所で偉そうにしてんだwwww
759 :
738 :2007/06/03(日) 22:26:58
>>754 自分でなんとかしようと思ったんですができなくて明日レポート提出なんです。
それをだせないと留年になってしまうかもしれないのであせってしまって・・・。
Linuxのソフトは学校のパソコンにもとから入ってると思います。
738の文のどこがおかしいのでしょうか?
留年するもまた一興
>>280 の影響を受けてHTML形式に出力するプログラムを作っちゃいますた♪
762 :
738 :2007/06/03(日) 22:39:01
>>760 ちょっと待ってください・・・留年はマジでまずいんでお願いします。
授業でemacsかなんか使ってやってるんですが教科書見てもわからないんですよ・・・。
マジで助けてください
誰か助けてくれるんじゃない 俺はその気はないってだけなので、気にするな
留年まずいなら なんで努力しようと思わなかったんだろうか・・・ 楽なことしかしてないじゃん
765 :
738 :2007/06/03(日) 22:41:46
>>758 うおおおおおすごい。ありがとうございます!めっちゃ助かりました。
僕もいつかここで教えられるようになりたいです。。
まあまあ、誰かが助けてくれるだろうから、それまで待とうや
>>755 chkmatch()とやらが何者だか分からないと仕方が無いぞ
769 :
738 :2007/06/03(日) 22:46:34
>>768 え?間違ってるんですか?必死で入力してたんですが。。。
771 :
738 :2007/06/03(日) 22:55:37
うわ、みんなめっちゃ優しい。。ほんとにありがとうございます。 どれを参考にしたらいいんですかね・・・。なんかどれもちょっとやり方 違うみたいですけどいいんですかね?
773 :
747 :2007/06/03(日) 23:02:09
>>750 作ってもらって、本当に申し訳ないのですが
if (scanf("%c", &c) == 1)
(unsigned char)
をまだ習って無いので、それらを省いて作成していただけないでしょうか??
774 :
749 :2007/06/03(日) 23:04:08
>>751 作ってもらって、本当に申し訳ないのですが
if (scanf("%c", &c) == 1)
(unsigned char)
をまだ習って無いので、それらを省いて作成していただけないでしょうか??
>>773 scanf使えって書いてなかった?
何を習ってないの君
if文?
>>771 入力処理がしっかりしてるかどうかで選ぶといい。
>>747 #include <stdio.h>
#include <ctype.h>
int main(void)
{
char c;
printf("半角英数字を入力してください: ");
scanf("%c", &c);
if( isprint(c) )
printf("文字「%c」の文字コードは「%02X」です。\n", c, c);
return 0;
}
778 :
758 :2007/06/03(日) 23:08:16
>>769 >>768 >>768 の言う通りshowsCardの動作が間違ってる。よく読まずにやってもうた。
もう一箇所1〜10の乱数を作る部分が間違ってて11の乱数が出来る事がある。
自分で言うのもなんだが、全体的に設計が十分でなくて、取り合えず作りました的な悪臭がする。
>>769 >うわ、みんなめっちゃ優しい。。ほんとにありがとうございます。
やさしいと言うより、プログラムが好きだからみんなやるんだと思う。
>なんかどれもちょっとやり方 違うみたいですけどいいんですかね?
取り合えず、仕様通りならOK。色々比較してそれぞれの良い所を参考にしな。
>>777 作ってもらって申し訳ないのですが
> if( isprint(c) )
をまだ習ってないので、これを省いて作成していただけないでしょうか??
>771 流れの理解しやすさで。 自分で説明をしなければならないのだろ?
>>779 if( isprint(c) ) > if( c>=32 && c<=126 )
>>738 みんなが優しいと思うのは勝手だが、
ホントにお前のためを思うのなら誰も解答など書かないだろう。
正直、留年をお勧めするね。
今日は説教強盗が多いな
784 :
749 :2007/06/03(日) 23:12:18
>>785 なんかアニメっぽい変なキャラクターが表示されたけど、これって何だ?
アニメとか全然興味ないからわからん。
50 モシ X+Y=24 ナラバ Z=50 60 これって恋の方程式ね・・・ 70 ボクもうがまんできないよ 80 んもう。70クンのエッチ! 210ニイケ!
792 :
749 :2007/06/03(日) 23:23:17
>>788 すいません・・バカなのでわからないッス
>>792 英文:if i were a bird, i could fly to you.
和訳:やらないか
ξ゚听)ξscanf使ってるならifもすぐわかるでしょ!
scanfより3文字も短いしな
>>792 もう、全部省いてこれでいいんじゃね?
#include<stdio.h>
int main(void)
{
char c;
printf("半角英数字を入力してください:");
scanf("%c", &c);
printf("文字「%c」の文字コードは「%02X」です。\n", c, c);
return 0;
}
もしかして
>>749 はifの条件式の中にscanfが書いてあるのがわからないのか?
755の問題の補足です! 長さ256以下の英数字,空白の並びからなる文字列を二つ入力し,それぞれをT1, T2とする. T1が"ABC",T2が"AB"の場合のように,T2の先頭部分がT1の先頭部分に含まれるときは1を,そうでないときは0を値として返す関数 int chkmatch(char *t1, char *t2)
800 :
デフォルトの名無しさん :2007/06/04(月) 00:07:46
C言語です。 @3行5列の二次元配列に15個の数字をランダムで選ぶ(ただし、必ず12を入れる) A配列に入れられた数字を B大きい順に配列に入れ直して示す。(バブルソートで) C小さい順(バブルソートで) Dprintfで12の行、列を出力 if,do,wihle習いました。お願いしますm(_ _)m
801 :
デフォルトの名無しさん :2007/06/04(月) 00:10:20
C言語です。 @3行5列の二次元配列に15個の数字をランダムで選ぶ(ただし、必ず12を入れる) A配列に入れられた数字を B大きい順に配列に入れ直して示す。(バブルソートで) C小さい順(バブルソートで) Dprintfで12の行、列を出力 if,do,wihle習いました。お願いしますm(_ _)m
802 :
◆HFYa0.2pYo :2007/06/04(月) 00:20:40
[1] 授業単元:プログラミング演習 [2] 問題文: @数字が任意の数だけ書かれたファイル(data.txt)から、それらを配列として読み取る A読み取った配列を、それ以降のプログラムで使う。 B読み取った数字の個数を表示する。 以上の全ての条件を満たすためには、 どのようなプログラムを書けばよいでしょうか? [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:本日12時 [5] その他の制限:なし
803 :
802 :2007/06/04(月) 00:29:46
すみません。 Aの「それ以降のプログラム」は数値計算です。
そのdata.txtにはどういう風に数字が書かれているんだ? 1 2 3 なのか 1 2 3 ...なのか1,2,3,...なのか色々あるだろ
>>755 #include <stdio.h>
#include <string.h>
int chkmatch(char *t1, char *t2) {
while (*t1 && *t2 && *t1++ == *t2++) {}
return !*t2;
}
char *findstr(char *t1, char *t2) {
for (;*t1 && !chkmatch(t1, t2); ++t1) {}
return *t1 ? t1 : 0;
}
int main(void)
{
char *T1, *T2, *p, *q;
int i, n;
T1 = malloc(258); T2 = malloc(258);
while (fgets(T1, 256, stdin) && fgets(T2, 256, stdin)) {
if (p = strchr(T1, '\n')) *p = 0;
if (p = strchr(T2, '\n')) *p = 0;
puts(T1);
for (p = T1, n = strlen(T2); q = findstr(p, T2); p = q + n) {
for (i = 0; i < q - p; ++i) putchar(' ');
for (i = 0; i < n; ++i) putchar('^');
}
n = T1 + strlen(T1) - p;
for (i = 0; i < n; ++i) putchar(' ');
putchar('\n');
}
free(T1); free(T2);
return 0;
}
806 :
802 :2007/06/04(月) 00:36:46
>804 1 2 3 ... です。数字の並び順はばらばらです
>>802 #include <stdio.h>
#include <stdlib.h>
typedef struct NV { int *v, sz, cp; } NV;
int main(void)
{
int i, n;
NV nv = { malloc(sizeof(int)), 0, 1 };
/* ヨム */
while (scanf("%d", &n) == 1) {
if (nv.sz == nv.cp)
nv.v = realloc(nv.v, nv.cp *= 2);
nv.v[nv.sz++] = n;
}
/* テキトウニツカウ */
for (i = 0, n = 0; i < nv.sz; ++i)
n += nv.v[i];
/* コスウヲヒョウジ */
printf("%d個\n", nv.sz);
free(nv.v);
return 0;
}
808 :
802 :2007/06/04(月) 00:54:06
>>807 ありがとうございました。
早速やってみます。
809 :
デフォルトの名無しさん :2007/06/04(月) 00:56:54
aa
811 :
デフォルトの名無しさん :2007/06/04(月) 01:41:42
問題2 実行結果となるように、読み込んだ整数の段数をもつピラミッドを表示するプログラムを作成せよソースファイル名はprog02.c,データファイル名はprog02.datとしなさい。 <実行結果例> 何段ですか?5 * *** ***** ******* *********
812 :
810 :2007/06/04(月) 01:42:51
813 :
デフォルトの名無しさん :2007/06/04(月) 01:44:52
問題7 縦 m 個,横 n 個の値を持つ表データを考える。 (m,nはそれぞれscanfを使ってユーザーが指定できるようにする。) この表データの各行および各列の合計値と平均値を計算して表示しなさい。 (行数 m ,列数 n の最大個数はそれぞれ10とする。) ソースファイル名はprog07.c,データファイル名はprog07.datとしなさい。 <実行結果例> 行数:3 列数:4 1行目のデータを入力してください。 7.7 4.4 8.8 7.5 2行目のデータを入力してください4.0 3.8 3.4 4.2 3行目のデータを入力してください。 4.8 5.8 8.0 7.5 ------------------------------------------ 7.70 4.40 8.80 7.50 | 28.40 | 7.10 4.00 3.80 3.40 4.20 | 15.40 | 3.85 4.80 5.80 8.00 7.50 | 26.10 | 6.53 ------------------------------------------ 16.50 14.00 20.20 19.20 ------------------------------------------ 5.50 4.67 6.73 6.40
814 :
デフォルトの名無しさん :2007/06/04(月) 01:47:35
問題8 年利 n% の銀行にある金額を預けたとき、その預金が元金の2倍に達するまでの年数を計算するプログラムを作成せよ。ソースファイル名はprog08.c,データファイル名はprog08.datとしなさい。 <実行結果例> 年利を入力してください。[%] 1.0 金額を入力してください。[¥] 1000000 2倍に達するまで、70年です。 いずれともC言語です。 よろしくおねがいします
>>811 #include <stdio.h>
int main()
{
int x, y, dansuu;
scanf("%d", &dansuu);
for (y=0 ; y<dansuu ; y++)
{
printf("*");
for (x=0 ; x<y ; x++)
{
printf("**");
}
printf("\n");
}
return 0;
}
>>811 #include <stdio.h>
int main(void)
{
int i, j, n;
printf("何段ですか?");
if (scanf("%d", &n) == 1 && n > 0) {
for (i = 1; i <= n; ++i) {
for (j = 0; j < n - i; ++j)
putchar(' ');
for (j = 0; j < 2 * i - 1; ++j)
putchar('*');
putchar('\n');
}
}
return 0;
}
817 :
807 :2007/06/04(月) 02:11:35
すまん - nv.v = realloc(nv.v, nv.cp *= 2); + nv.v = realloc(nv.v, sizeof(int)*(nv.cp *= 2));
818 :
デフォルトの名無しさん :2007/06/04(月) 03:06:46
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 下に記載 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 6月5日(できるだけはやくお願いします) [5] その他の制限: 初心者です。for文を使います 【問題】整数xを読み込み、1からxまでで、3で割り切れて、かつ、4で割り切れない数値を出力するとともに、その数値の個数を出力するプログラム 【実行例1】INPUT INTEGER -->20 3 6 9 15 18 の 5 こ 【実行例2】INPUT INTEGER -->35 3 6 9 15 18 21 27 30 33 の 9 こ よろしくお願いします
>>818 #include <stdio.h>
int main(void)
{
int i, x, n = 0;
printf("INPUT INTEGER -->");
scanf("%d", &x);
for (i = 0; i <= x; i++) {
if (i % 3 == 0 && i % 4 != 0) {
printf("%d ", i);
n++;
}
}
printf("の %d こ\n", n);
return 0;
}
>>814 #include <stdio.h>
#include <stdlib.h>
#define GOAL 2
int main(void)
{
char buf[256];
double rate;
double first_money;
double money;
int year;
printf("年利を入力してください。[%%]\n");
scanf("%s", buf);
rate = atof(buf);
printf("金額を入力してください。[\\]\n");
scanf("%s", buf);
first_money = atof(buf);
year = 0;
money = first_money;
while (money < first_money * GOAL) {
year++;
money += money * rate / 100;
}
printf("%d倍に達するまで、%d年です。\n", GOAL, year);
return 0;
}
さぁ、俺にも簡単に解ける、あるいは俺が過去に解いたことのある宿題を質問しろやゴルァ!
>>823 いちいち疑問に思っているくらいなら俺が解ける宿題を質問してこい!w
>>824 よく分らないけど、簡単な問題出して欲しいの?
俺がちょっと面白いと感じた簡単な問題(入出力と演算だけで解ける)をやって見る?
問題:1桁以上の整数を読み込んで、その整数の下一桁を表示せよ。
例
整数を入力汁:9563
下一桁は:3
言うほど面白いか?いや822じゃないのに書き込んでる俺も俺だけど #include <stdio.h> #include <string.h> int main(void) { int i; char buf[256]; puts("整数を入力してください。"); scanf("%d",&i); sprintf(buf,"%d",i); printf("%dの下一桁は%cです。",i,buf[strlen(buf)-1]); return 0; }
827 :
825 :2007/06/04(月) 12:26:51
>>825 で大切な事を忘れてた。1桁以上の整数を読み込んででは大切な事が1つ抜けてて
1桁以上の"正の"整数を読み込んでが正しい。
%10でいいじゃん。
829 :
826 :2007/06/04(月) 12:28:52
あ、たすかに。
830 :
825 :2007/06/04(月) 12:33:27
>>826 関数を使わなくても、
>>828 が言うように演算だけで
出るところがちょっと面白いと感じた。熟練者には分らない
万年初心者の新鮮な驚きかな?
んじゃ、プログラミングと数学の楽しさが伝わる問題を一つ。 abcabcの形式の4-6桁の整数(例えば12012は5桁だが012の繰り返しになっている)は常に7で割り切れる。 Ex.987987 / 7 → 141141、141141 / 7 → 20163 ・これをプログラムで確認せよ。また、何故7で割り切れるのか考察せよ。
>>831 #include <stdio.h>
int main(void)
{
int i;
for (i = 1; i < 1000; ++i)
printf("%d % 7 = %d\n", i * 1001, i * 1001 % 7);
return 0;
}
考察:1001が7で割り切れるから。そんだけ。
小学生の算数レベルだろ
834 :
832 :2007/06/04(月) 12:57:14
うわ - printf("%d % 7 = %d\n", i * 1001, i * 1001 % 7); + printf("%d %% 7 = %d\n", i * 1001, i * 1001 % 7);
835 :
デフォルトの名無しさん :2007/06/04(月) 13:15:50
>835 #include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void bubblesort(int *data, int n) { int i, j; for(i=0; i<n-1; i++) for(j=n-1; j>i; j--) if(data[j]>data[j-1]) swap(data+j, data+j-1); } int main(void) { int i, n, data[1000]; FILE *fp; if((fp=fopen("rand1000.data", "r"))==NULL) return 0; fscanf(fp, "%d", &n); for(i=0; i<n; i++) fscanf(fp, "%d", data + i); for(i=0; i<n; i++) printf("%d ", data[i]); bubblesort(data, n); for(i=0; i<n; i++) printf("%d ", data[i]); fclose(fp); return 0; }
837 :
デフォルトの名無しさん :2007/06/04(月) 13:51:45
動きました! ありがとうございます。ありがとうございます。
Cに無くて C++にはある予約語 (new delete 等) 使われてないし、 C++ の文法にのっとってるから、そのまま拡張子を .cpp にでもすれば? # C++ ならではの書き方してくれ ってのなら、また別か
>>838 #include <stdio.h>
を
#include <cstdio>
using namespace std;
に。
それでC++プログラムになる。
っつか、きんもぉ〜☆なソースだなぁ・・・。もちっと、問題文と回答を別のライブラリにまとめて 管理すりゃスッキリするのに。
[1] 授業単元: C++実習 [2] 問題文(含コード&リンク): if文、 if~else~文、 if~else if~else文、 switch文、 三項演算子、をすべて用いてクイズを作成しなさい 反復文は使えないものとし、同じ問題はでないものとする [3] 環境 [3.1] OS: WindowsXP [3.2] visual studio2005 [3.3] 言語: C++ [4] 期限: 5/25まで [5] その他の制限: 特になし この課題か。反復文は使えないって、どんな条件や・・・学校名晒さんかいゴルァ!w
ifとgotoや再帰でどうにかしろということでは>反復文
再帰だけにサイキック(念力)ではないかと
きんもぉ〜☆なソースを作ったものですが。 自分で見てもキモイコードだなと思う。言い訳させてもらうと 最初は真面目に書いていたのよ。でも、やってる内に 真面目にやるのがバカらしくなって、ふざけた問題にしてみたりして 遊んでたら止まらなくなって、終には、伝統あるこのスレで 最もキモイコードが出来上がってしまった。
>>846 まぁ、コードはともかく、文章がツンデレなのは・・・ヲタかい?w
[1] 授業単元:情報実習 [2] 問題文(含コード&リンク): 10人分の成績を入力して、60点以上の人の人数を表示し、60点以上の人の合計点 ならびに平均点(小数点以下1桁まで)を表示するプログラムを作れ。 [3] 環境 [3.1] OS:Windows2000 [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:06/06まで [5] その他の制限:特になし お手数ですが、どなたかよろしくお願いします。
>>847 オタですが何か?ミリオタにツンデレは関係ないはずですが。
何故俺がオタだとわかったんだ?
ちなみに、あの問題はナイスバディーで色気ムンムンの
講師をイメージして作ってみた。
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): char *month_name(int n)という関数を作りその中でstatic char *month_name[] = { "January",... と初期化と宣言をする。そしてmain文中でscanfを使って値を読み込み、関数を呼び出して月の名前を英語で出力させる プログラムを作れ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:06/06まで [5] その他の制限:特になし よろしくお願いします
>>851 #include <stdio.h>
char *month_name(int n) {
static char *month_name[] =
{ "January","Feb","Mar","Apl","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"};
return month_name[n-1];
}
int main(void) {
int month;
char *m_n;
printf("Input > ");
scanf("%d",&month);
if(month<1 || month>12) return 1;
m_n=month_name(month);
printf("%s",m_n);
return 0;
}
AplじゃなくてAprかw
855 :
◆HFYa0.2pYo :2007/06/04(月) 22:57:59
>>855 全角スペース入れてんじゃねーぞゴルァ!ってことだ。
ちゃんとコンパイラが出すエラーをチェックしやがれってやんでぇい
>>855 全角スペース除いたら実行できるしエラーは出ないな。結果間違ってるけど。
wikiにマージソート載ってるからそれコピペしたら?
>>858 Wikipediaにはソース載ってないんだね
英語の方は載ってるんだぜ
861 :
855 :2007/06/04(月) 23:36:26
>>856 >>857 >>858 ありがとうございます。
結果も間違ってますね
このプログラムを元にいろいろと手を加えていくので、できればこのソースの形を生かしたいのです。
よろしければ、修正点を教えていただけませんか。
>>861 詳しく読んでないけど、++とか--の使い方を間違っている気がする
864 :
デフォルトの名無しさん :2007/06/04(月) 23:51:40
>>818 です
>>819 さんありがとう。
書き忘れていたのですが、最近C++から習い始めた初心者で、C言語がわかりません。どなたかC++に直してもらえませんか?
あと
>>819 では、if と forを使っていますが、このプログラムをforだけ使ってでもできませんかねえ?
申し訳ないですがよろしくお願いします。
>>861 よく読みなおしたら間違ってるのは--だけだね
>>864 俺ならこんなプログラムは窓から投げ捨てる。
#include <iostream>
using namespace std;
int main()
{
int x, nc = 0;
cout << "INPUT INTEGER -->" << flush;
for (;cin >> x && x > 0;) {
for (int i = 3; i < x; ++i) {
for (;i % 3 == 0 && i % 4 != 0;) {
cout << i << ' ';
++nc;
break;
}
}
cout << "の " << nc << " こ" << endl;
break;
}
return 0;
}
868 :
861 :2007/06/05(火) 00:21:27
>>866 ありがとうございました。
いろいろ書き直してみます。
869 :
デフォルトの名無しさん :2007/06/05(火) 00:37:35
>>849 さん ありがとうございます。
ぜひ参考にさせていただきます。
> if,do,wihle習いました。お願いしますm(_ _)m ^^^^^ このへんが気になる。
>>871 そういうことを気にしていると、すぐに禿げるよw
あれだ ワイフルって、親身になってお金の相談受けてくれるけど 叱咤激励だけで絶対貸してくれないっていう漫画ネタ
#include "stdio.h" #define ARRAY_LENGTH 15 #define DEBUG_PRINTF(x) printf("%d\n",x); int target_array[ARRAY_LENGTH]; int tmp[ARRAY_LENGTH]; void merge_sort(int array[], int length); void merge(int first[], int second[], int len1, int len2); int comp(int a, int b); void show_result(int array[], int length); void rand_array(int array[], int length); int main(){ int length = ARRAY_LENGTH; rand_array(target_array, length); printf("--BEFORE--\n"); show_result(target_array, length); merge_sort(target_array, length); printf("--AFTER--\n"); show_result(target_array, length); return 0; } void merge_sort(int array[], int length){ int mid = length / 2; if(length > 2){ merge_sort(&(array[0]) , mid ); merge_sort(&(array[mid]), length - mid ); } merge(&(array[0]), &(array[mid]) ,mid ,length - mid); }
>>872 禿ってかっこよくね?ナメック星人みたいで
void merge(int first[], int second[], int len1, int len2){ int i = 0; int cnt1=0; int cnt2=0; int flag = 0; for(i=0 ; i<(len1+len2) ; i++){ if(len1 == cnt1){ flag = 2; }else if(len2 == cnt2){ flag = 1; }else{ flag = comp(first[cnt1],second[cnt2]); } switch(flag){ case 0: tmp[i] = first[cnt1++]; break; case 1: tmp[i] = first[cnt1++]; break; case 2: tmp[i] = second[cnt2++]; break; } } for(i = 0 ; i<len1+len2 ; i++){ first[i] = tmp[i]; } }
877 :
デフォルトの名無しさん :2007/06/05(火) 00:53:01
>>867 参考になりました。たしかにわけわかんなくて捨てたくなる…
if使用でやることにします。ありがとうございました。
>>875 それはつまり
禿げたら地球人じゃないってことか?w
>>864 やってみた
#include<iostream>
using namespace std;
int main(void){
int x, nc=0;
cout << "INPUT INTEGER --> " << flush;
cin >> x;
for(int i=3;i<x;i+=3*4){
for(int j=0;j<3 && i+j*3<x;j++){
cout << i+j*3 << ' ';
nc++;
}
}
cout << "の " << nc << " こ" << endl;
return 0;
}
>>879 の訂正
i<x
↓
i<=x
i+j*3<x
↓
i+j*3<=x
881 :
デフォルトの名無しさん :2007/06/05(火) 10:53:42
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 共用体を用いて,2バイト整数の上下バイトを入れ換えて暗号化する関数 short encode(short)を作り,キーボードから入力した整数を暗号化/復号化するプログラムを作りなさい。 但し,main関数の部分は次のコードを用いなさい。 main(){ short n, m, k; while (1) { printf("整数を入力して下さい(終了は0) = "); scanf("%d", &n); if (n == 0) break; m = encode(n); /* 暗号化 */ printf("\n\t%d を暗号化すると %d になります。\n", n, m); k = encode(m); /* 復号化 */ printf("\n\t%d を復号化すると %d になります。\n\n", m, k);}} ▼出力例 整数を入力して下さい(終了は0)= 123↵ 123を暗号化すると31488になります。 31488を復号化すると123になります。 整数を入力して下さい(終了は0)= -123↵ -123を暗号化すると-31233になります。 -31233を復号化すると-123になります。 整数を入力して下さい(終了は0)= 0↵ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限: 6月7日
882 :
デフォルトの名無しさん :2007/06/05(火) 10:59:16
[1] 授業単元: プログラミング [3] 環境 [3.1] OS: (Windows/Linux/等々) Windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語:C #include<stdio.h> int main(void) { int a,b; puts("2つの整数を入力してください"); printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); if(a==b) puts("aとbは等しいです"); else if("a>b") puts("aはbより大きいです"); else puts("aはbより小さいです"); return(0); } 整数a、bの大小関係を表示したいんですけど、a<bのときも aはbより大きいです と表示されます。どこが間違ってるのか教えてください
else if("a>b") ↓ else if(a>b)
>>881 short encode(short value){
return ((value&0xff)<<8)|((value
>>8 )&0xff);
}
886 :
882 :2007/06/05(火) 11:30:27
>>881 short encode(short value){
union{
short value;
struct{unsigned char b1,b2;};
}a;
unsigned char temp;
a.value=value;
temp=a.b1;
a.b1=a.b2;
a.b2=temp;
return a.value;
}
>>885 「なるはず」の根拠はどこから?
預金額の数値が分かるなら、どこが違うか分かるかも
889 :
デフォルトの名無しさん :2007/06/05(火) 12:07:28
C言語です。 @3行5列の二次元配列に15個の数字をランダムで選ぶ(ただし、必ず12を入れる) A配列に入れられた数字を B大きい順に配列に入れ直して示す。(バブルソートで) C小さい順(バブルソートで) Dprintfで12の行、列を出力 if,do,wihle習いました。誰かお願いしますm(_ _)m 6月7日までです。
>>888 問題文を筆記で計算してみたところそうなりました。
ソースが読み取れなくて、どういう風にプログラム内で計算されてるかわからず
計算部分が修正できないんです
/*説明文 */を、入れてもらえるだけで助かります
>>887 色々とダメなコードだな。
・無名の構造体は規格違反
・unionに代入した型と違う型で参照するのは(厳密には)未定義。
・これで充分。
short encode(short value) {
return ((value >> 8) & 0xff) | value << 8;
}
>>885 の問題は前スレ495
ttp://pc11.2ch.net/test/read.cgi/tech/1179025919/495 コピペっとく
|下記@Aの銀行に「一億円」を預けた場合、何年と何ヵ月後にAの銀行の預金額を@の銀行の預金額が超えるか
|@利率0.08% (複利)の銀行
|A利率0.09% (単利)の銀行
|反復文を用いて@A双方の毎月の預金額を表示し、Aの銀行の預金
|額を@の銀行の預金額を超えた時点で反復文を終了後、「@の銀行は
|●年●ヵ月後にAの銀行の預金額を超える」と表示しなさい。
|また、上記@の銀行に「1億円」、Aの銀行に「9999万円」を預けた場合、
|どちらが先に「1億200万円」になるか、前問と同じ処理を行い、最後に
|「●の銀行が●年●ヵ月後に先に1億200万円貯まる」と表示しなさい。
|[3] 環境
| [3.1] OS: WindowsXP
| [3.2] visual studio2005
| [3.3] 言語: C++
>>891 問題文でunion使えって書いてあるから使ったんじゃねえの?
>>884 を書いた後で
>>881 に共用体を使えとあったのに気づいて
>>887 を書いた
無名の構造体がダメならこれでいいかな?
short encode(short value){
union{
short value;
char b[2];
}a;
char temp;
a.value=value;
temp=a.b[0];
a.b[0]=a.b[1];
a.b[1]=temp;
return a.value;
}
>>885 利率が100倍になってる 0.08% ならコンストラクタに 0.0008 を渡す
それと
>>885 のソースコードでは利率を年利率として計算している
手計算の方法では利率を月利率として計算している rate = r /12 を rate = r に変更
くらいかな?
896 :
891 :2007/06/05(火) 12:49:03
897 :
デフォルトの名無しさん :2007/06/05(火) 12:52:01
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 0以下1以上の一様実数乱数をUiとする。 それを次式に代入することによって、標準正規乱数Xとなる。 X=U1+U2+…U12−6 @:前述の式のXを100個発生させよ。 A:@で求めたXを次式のように変換したYについて同様に100個発生させよ。 Y=30X+100 @とAの出力結果がそれぞれ分かるように作ってくれると助かります。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限: 2007年06月06日23:00まで [5] その他の制限: なし よろしくおねがいしますm(__)m
>>897 > 0以下1以上の一様実数乱数をUiとする。
無理
>>895 利息計算って、よくわからんのだが、
普通は利率って年利率表示なんでは。
ただ、複利を月単位で計算する場合って、
単利と同様に計算して、一年たったら元本に利息分を足すみたいな
やりかたになるんでないの。
まー
>>885 がどう計算したのか説明すんのが一番早いけどな。
900 :
デフォルトの名無しさん :2007/06/05(火) 13:20:31
>>897 すいません。0以上1以下の一様実数乱数をUiとする。です。
>>897 #include <stdio.h>
#include <stdlib.h>
double rand_u(void){
return (double)rand()/(RAND_MAX-1);
}
double rand_x(void){
double x=-6.0;
int i;
for(i=0;i<12;i++)
x+=rand_u();
return x;
}
int main(void){
int i;
double x, y;
for(i=0;i<100;i++){
x=rand_x();
y=30*x+100;
printf("x=%f y=%f\n", x, y);
}
return 0;
}
ごめ
>>901 の RAND_MAX-1 の -1 いらね
え、俺は欲しい、ちょうだい
>>897 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define E_MAX 100
double GetRandom(double min, double max) {
return min + (double)(rand()*(max-min)/RAND_MAX);
}
int main(void) {
double x[E_MAX],y[E_MAX];
int i,j;
srand((unsigned)time(NULL));
for(i=0; i<E_MAX; i++) {
x[i]=0.0;
y[i]=0.0;
for(j=1; j<=12; j++) {
x[i] += GetRandom(0.0 , 1.0);
}
x[i] -= 6.0;
y[i] = 30.0*x[i]+100.0;
printf("x[%d] : %lf / y[%d] : %lf \n",i+1,x[i],i+1,y[i]);
}
return 0;
}
905 :
デフォルトの名無しさん :2007/06/05(火) 14:21:41
906 :
デフォルトの名無しさん :2007/06/05(火) 14:26:48
>>905 乱数で算出したとは言え、毎回同じ結果で良いのか?
[1] 授業単元:
[2] 問題文(含コード&リンク):
100×100の画像A,Bを読み込み、それぞれを10×100の縦長の画像10枚に分割して左から交互に並べた画像Cを作るプログラムを作成せよ。
http://vista.jeez.jp/img/vi8102756700.png ↑の画像のような感じでお願いします
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限:特になし
説明下手で申し訳ありません、よろしくお願いいたします。
>>908 画像の形式は?その画像の形式の仕様についての説明とかは?
910 :
908 :2007/06/05(火) 17:23:26
すいません。 一応bmpでお願いします。
>>910 Winでgccってことだけど、bmpを読むライブラリは何を使うの?
まさかそこから全部書けとでも?
別に書いたとて問題はないだろ。 手に負えないなら引っ込んでろ。
913 :
デフォルトの名無しさん :2007/06/05(火) 17:58:04
>>907 そこのところは何も言われたないので、大丈夫です
>>912 そんな毛の無いことはしたくないだけさ。
Color space (1bpp 8bpp 16bpp 24bpp 32bpp) と RLE圧縮/非圧縮 これ全部サポートしようとすると、かなりまんどくさくね?
> [3.1] OS:XP マンドクセーんならWindows API使えばいいべよ
RLEは無視 BITMAPINFOHEADER以外のヘッダも無視でいいだろ 残るは色数をどこまで対応するかということだけ
gccでAPIを使うってのもなかなかなんだけどね。
921 :
デフォルトの名無しさん :2007/06/05(火) 19:22:15
[1] 授業単元: コンピュータグラフィックス [2] 問題文(含コード&リンク): 「惑星を地軸の傾き一定で公転させるプログラム 」 学校の課題で、C言語でOpenGLを用いて、 惑星を太陽を中心に公転させるプログラムを作成せよ、と出たのですが… 教科書付属のサンプルプログラムなどを改良して、 ただ太陽の周りを回転させるだけなら出来そうなのですが、 そのとき、どうしても惑星の地軸まで反転してしまいます。 地軸の傾き方向を一定に太陽の周りを公転させるには、 一体どういった考え方をすればよいのでしょうか… 判りづらい質問ですみません! まだ具体的にプログラムを作成していないので、ソースの記載は出来ませんが、 とりあえず考え方が全く思いつかないので、 何かありましたら、アドバイスをお願いします…!! [3] 環境 [3.1] OS: Windows XP/Linux [3.2] コンパイラ名とバージョン: gcc、 Visual C++ 6.0 [3.3] 言語:どちらでも可 [4] 期限: 2007/6/10 [5] その他の制限: 特になし
自転が作れないってこと?
924 :
デフォルトの名無しさん :2007/06/05(火) 20:11:15
>922 まじですか! 同じ授業取ってる人かも…;気まずい… どこで見たか覚えてらっしゃったら教えてください! 回答あったらいいな… >923 軸を中心に自転させるのは出来るのですが、 太陽中心に回転させると、 元いた位置から反対の位置に来たときに、軸も反転したりするのです!
公転時についでに地軸も回しちまってるんでねーの? 地球重心と地球極表面点の両方を matrix 演算で回転→公転させたつもり じゃだめ 公転結果としての位置は、地球重心のみを回転 地軸は後から向き付けする
つか回転マトリックスで公転しようとしてるだろ? 平行移動だけで地球を動かせばおけじゃん
927 :
921 :2007/06/05(火) 21:04:50
>925 >926 回答ありがとうございます! 地球を自転させながら公転させたいのですが、 自転している地球を公転させたら、地軸が反転するので自転もおかしくなります。 地球と地軸を切り離して考えたら、 自転させられなくなってしまうのではないでしょうか? あと自転している地球を平行移動させる、というのは… いったいどのようにすれば…;; 確かに地球を見ると、平行移動すればいいように思えますが… この場合の地球の動きは、回転しているのと違うのでしょうか… なんかいろいろ判ってないみたいですみません…;д;
>>927 3Dグラフィックスはまだ勉強中だからよく知らんが、
地球を平行移動させて公転させた後、その場で地軸中心で回転させることで自転させりゃいいんじゃないのか?
929 :
921 :2007/06/05(火) 21:20:43
あ!すみません! なんか出来ました!! >926さんの言うとおりに、平行移動でloopさせることによって出来ました! ありがとうございました^▽^!!
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):data[] = {27,93,20,11,45,23,42,56,42,94}を挿入整列および、クイックソートで整列する際、 どのようにデータの入れ替えが行われるか、配列の内容の変化を示す事によって、 データの入れ替え過程を示しなさい。アルゴリズムの特徴がわかるようにそれぞれの アルゴリズムの説明とともにデータの入れ替え過程を示す事。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年06月06日23:00まで お願いします。 [5] その他の制限: なし
glRotate で回すな 半径と角度から自前で計算して(円軌道のモデルなら) glTranslate で動かせ ↑ O O太陽 ↑地球と地軸 glRotate で回す .... O→ のように投影される glTranslate で動かす ... O↑ のように投影される
936 :
932 :2007/06/05(火) 22:41:33
問題はスタックを作るだけみたいなもので 下のプログラムを少し変える・追加だけ だと聞いたのですが それが分からなくて質問させてもらいました・・
>>932 方向線上リストとか。
激しくエスパーだが「単方向線形リスト」のことじゃないか?
授業で構造体とポインタを勉強した直後なら濃厚な気がするけど。
>>932 リストなのにスタックで???
回答は
>>935 でOKっぽいね。
リストならキューのほうが自然な気がするけどな。
>>938 まぁ最大数の制限を外すって目的なら、特に自然とも不自然ともないと思う
>>940 せっかく書いたもんの隅つつくようで悪いんだけど、
lastもったないほうがいいんじゃね?単方向ってんなら。
last持つなら次と前もって双方向にしたほうが・・・ってなりそう。
あと、stdio.hとstdlib,hが""なのはいやがらせ?w
>>941 あー単方向じゃなきゃだめなのか
>あと、stdio.hとstdlib,hが""なのはいやがらせ?w
C久々だから忘れてた・・・
""はカレントを探す方か
ダメってこた無いだろうけどリストの先頭に積む方が楽じゃない? 概要だけ書くと tmp = malloc(); tmp->next = top top = tmp; みたいな。 外す時は tmp=top; top=top->next; free(tmp); か?
あーなるほど・・・ 多分課題の趣旨はそれかもな 最後に積んじゃうとかなり無駄な処理になっちゃう
945 :
デフォルトの名無しさん :2007/06/05(火) 23:40:44
[1] 授業単元:c言語 [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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)変数、for文、while文、switch文、if文まで習った 頑張って考えてこうなりました。問題点やここはこうした方がいい、ここはダメってなのがあったら教えてください。 #include <stdio.h> main(void) { int c,count=0; while ((c = getchar()) != EOF){ if (c == ' '){ count++; if(count == 2){ putchar(c); } }else{ putchar(c); count = 0; } } return 0; }
>>945 #include <stdio.h>
int main(void)
{
int c,count=0;
while ((c = getchar()) != EOF){
if (c == ' '){
count++;
}else{
if(count>0) putchar(' ');
count=0;
putchar(c);
}
}
return 0;
}
最後がスペースだと出力しない気もするけど、キニシナイ
>>945 それだと、空白が単独で一個だけあるとき消されてしまう。
count == 2のところはcount == 1とするべきだと思う。
948 :
945 :2007/06/05(火) 23:50:26
>>947 #include <stdio.h>
int main(void)
{
int c = 0;
int sp = 0;
while ( (c = getchar( ) ) != EOF ) {
if ( c == ' ' ) {
if ( sp != 1 ) {
putchar( c );
}
sp = 1;
}
else {
sp = 0;
putchar( c );
}
}
return 0;
}
最後のスペースで問題ないようにしてみた。
ついでに、カウンタのオーバーフローにt(ry
>>950 maleをcharにする。
ageの範囲のif分の羅列をif-else-ifの形にする。
以上で、OK
>>951 すまん。
>maleをintにする
は忘れてくれ。
maleなんて、滅入るぜ
>>950 if (条件1) {
...
} else if (条件2) {
...
} else {
...
}
この形にする
955 :
デフォルトの名無しさん :2007/06/06(水) 00:22:18
>>951-
>>954 ありがとうございます。やってみます。
[1] 授業単元:c言語プログラミング [2] 問題文: xy平面上でx軸、y軸、x=10、y=10に囲まれた領域(境界含む)について考える。 標準入力から領域内に実数値の点(x1, y1)、(x2, y2)をとり、その2点を通る直線と 領域を構成している直線との交点2つを出力するプログラムを作れ。 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:c言語 [4] 期限:6月8日 15:00まで [5] その他の制限:特になし よろしくお願いします。
すべて他人まかせ いいご身分
958 :
デフォルトの名無しさん :2007/06/06(水) 01:06:34
手計算でなんとなく直線の式を出してみた y= a * x + dとする y2 = a * x2 + d -y1 = a * x1 + d --------------- y2-y1 = a * ( x2 - x1) ∴a = ( y2 - y1)/(x2-x1) ∴d = y2 - (y2-y1) * x2/(x2-x1)
プログラムって言うより算数(数学)の問題多いよな。 こういう問題は、式とかをあらかじめ算出しておいてくれると楽なのにな。 「こういう式になると思うんですが、プログラムので表現方法がわかりません」みたいな。
工数は少ないに越したことはだろうw (いいたいことはわかっているつもり どっちかっつ〜と回答者にいいことがあると思う
>>959 だよな。もちろん、プログラミングと絡んでくるような問題なら丸投げも仕方ないだろうが
プログラム抜きで出来る部分ぐらいはやっといてくれた方が楽なんだよな
わかってくれる人がいてよかったw
>>956 の問題くらいならどうにかなっても、高次曲線とか曲面とかに
なってくると、もう何年も前のことでさっぱりなんだよな。
フーリエ変換とかウェーブレット変換なんて懐かしいがさっぱりだw
数学系、プログラム得意な人が解いてくれるだろうけどたぶん
みんながそうじゃないだろうし。少なくとも俺はw
963 :
デフォルトの名無しさん :2007/06/06(水) 01:29:51
問題:2重のfor文を使って、以下のような九九表を完成させなさい OS:WindowsXP コンパイラ名とバージョン:borland 言語:c言語 問題: 実行画面 1 2 3 4 5 6 7 8 9 ------------------------------- 1| 1 2 3 4 5 6 7 8 9 2| 2 4 6 8 10 12 14 16 18 3| 3 6 9 12 15 18 21 24 27 4| 4 8 12 16 20 24 28 32 36 5| 5 10 15 20 25 30 35 40 45 6| 6 12 18 24 30 36 42 48 54 7| 7 14 21 28 35 42 49 56 63 8| 8 16 24 32 40 48 56 64 72 9| 9 18 27 36 45 54 63 72 81
>>962 実際問題として、それが必要なら普通はライブラリ使うしなw
>963 餌がマズ過ぎゃしないか?
>>963 #include <stdio.h>
int main(void)
{
int i, j;
for (i = 1; i <= 9; i++) {
if (i == 1) {
printf(" ");
}
printf("%3d", i);
}
printf("\n-------------------------------\n");
for (i = 1; i <= 9; i++) {
printf("%d|", i);
for (j = 1; j <= 9; j++) {
printf("%3d", i * j);
}
printf("\n");
}
return 0;
}
>>963 こないだも同じ問題見たよorz
#include <stdio.h>
int main( void )
{
int i;
int j;
// ヘッダ部
printf( " " );
for ( i = 1; i <= 9; i++ ) {
printf( "%d " ,i );
}
printf( "\n-------------------------------\n" );
for ( i = 1; i <= 9; i++ ) {
printf( "%d|", i );
for ( j = 1; j <= 9; j++ ) {
printf( "%d ", i * j );
}
printf( "\n" );
}
return 0;
}
968 :
965 :2007/06/06(水) 01:53:37
マジだったんならごめんなさいm(__)m
>>956 適当
#include <stdio.h>
#define X1 0.0
#define Y1 0.0
#define X2 10.0
#define Y2 10.0
int main(void)
{
double x1, y1, x2, y2, a, b;
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
if(x1 < X1 || x1 >X2 || x2 < X1 || x2 > X2 || y1 < Y1 || y1 > Y2 || y2 < Y1 || y2 > Y2)
return -1;
a = (y2 - y1)/(x2 - x1);
b = y1 - a*x1;
if((Y1 - b)/a >= X1 && (Y1 - b)/a <= X2) printf("%f %f\n", (Y1 - b)/a, Y1);
if((Y2 - b)/a >= X1 && (Y2 - b)/a <= X2) printf("%f %f\n", (Y2 - b)/a, Y2);
if(a*X1 + b > Y1 && a*X1 + b < Y2) printf("%f %f\n", X1, a*X1 + b);
if(a*X2 + b > Y1 && a*X2 + b < Y2) printf("%f %f\n", X2, a*X2 + b);
return 0;
}
>>956 ちょい変更
#include <stdio.h>
#define X1 0.0
#define Y1 0.0
#define X2 10.0
#define Y2 10.0
int main(void)
{
double x1, y1, x2, y2, a, b, x, y;
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
if(x1 < X1 || x1 >X2 || x2 < X1 || x2 > X2 || y1 < Y1 || y1 > Y2 || y2 < Y1 || y2 > Y2)
return -1;
if(x1 == x2 && y1 == y2)
return -2;
if(x1 == x2){
printf("%f %f\n", x1, Y1);
printf("%f %f\n", x1, Y2);
}else{
a = (y2 - y1)/(x2 - x1);
b = y1 - a*x1;
if((Y1 - b)/a >= X1 && (Y1 - b)/a <= X2) printf("%f %f\n", (Y1 - b)/a, Y1);
if((Y2 - b)/a >= X1 && (Y2 - b)/a <= X2) printf("%f %f\n", (Y2 - b)/a, Y2);
if(a*X1 + b > Y1 && a*X1 + b < Y2) printf("%f %f\n", X1, a*X1 + b);
if(a*X2 + b > Y1 && a*X2 + b < Y2) printf("%f %f\n", X2, a*X2 + b);
}
return 0;
}
971 :
970 :2007/06/06(水) 04:49:38
double x1, y1, x2, y2, a, b, x, y; を double x1, y1, x2, y2, a, b;に……。
972 :
958 :2007/06/06(水) 05:08:08
数式書いたら意外と意見が出たな。 俺としては「数式に直したら、ほら簡単な問題でしょ?」 ってな意味をこめて数式だけ書いた。
あげんな! ニートが!
974 :
921 :2007/06/06(水) 05:50:53
>931 遅くなりましてすみません><; ありがとうございます! 図解までしていただいてとても明確に理解できました^^
975 :
921 :2007/06/06(水) 05:52:49
>934 あ!それ私です!; って言うまでもないか^^; すみません!他の板で見かけられたのかと思ってましたッ!;
977 :
デフォルトの名無しさん :2007/06/06(水) 12:25:22
バックスペースが表示できません。お願いします。あと問題点、改良した方がいい点があればお願いします。 [1] 授業単元:c言語 [2] 問題文(含コード&リンク): 各タブを\t、各バックスペースを\b、各バックスラッシュを\\に置き換えながら 入力を出力に複写するプログラムを書け [3] 環境 [3.1] OS: ウィンドウズXP [3.2] コンパイラ名とバージョン:)Borland C++ Compiler 5.5 [3.3] 言語: c言語 [4] 期限: 無期限 [5] その他の制限:for文、while文、switch文、if文まで習った #include <stdio.h> int main(void) { int c; while((c = getchar()) != EOF){ if(c == '\t'){ printf("\\t"); }else if(c == '\b'){ printf("\\b"); }else if(c == '\\'){ printf("\\\\"); }else{ putchar(c); } } return 0; }
978 :
デフォルトの名無しさん :2007/06/06(水) 12:31:10
問題文(含コード&リンク): 環境 OS: (Windows/Linux/等々) コンパイラ名とバージョン: ボーランド 言語: C [5] その他の制限:現在for文 if文 入力・出力・演算子 テーマ:繰り返し処理(while文) 問題:キーボードより整数nを入力し、1〜nまでの合計を求めなさい 実行画面 整数nの入力==>5 合計:15
>>978 #include<stdio.h>
main()
{
int n,m,sum;
printf("整数nの入力==>");
scanf("%d",&n);
m=0;sum=0;
while(m<n){
sum+=++m;
}
printf("合計:%d",sum);
}
>>979 #include <stdio.h>
int main(void)
{
int a,count,total;
count=total=0;
printf("キーボードより整数nを入力=");
scanf("%d",&a);
while(count <= a){
total += count;
count++;
}
printf("合計=%d",total);
return 0;
}
981 :
979 :2007/06/06(水) 12:55:33
>>978 >>979 よりエレガントな方法を思いついたので再提出しまつ。
#include<stdio.h>
main()
{
int n,sum;
printf("整数nの入力==>");
scanf("%d",&n);
sum=0;
while(n>0)sum+=n--;
printf("合計:%d",sum);
}
バックスペースがわかりやすく表示されるならそれはすごいことだ。 タブや改行といった制御文字なら表示されんでもどこにあるかわかるけど バックスペースはわからんなぁ・・・
>>983 そうですか・・・
バックスペースを表示させろといわれても教材みても何も書いてないしどうしていいのかわからんw
>>977 問題文の意味がよくわからんけど、getch() は使って良かったのかな?
#include <stdio.h>
#include <conio.h>
#define CTRL_D 0x04
#define CTRL_Z 0x1A
#define RETURN 0x0D
int main(void){
int c;
while(1){
c = getch();
if(c == CTRL_D || c == CTRL_Z) break;
switch(c){
case '\t': printf("\\t"); break;
case '\b': printf("\\b"); break;
case '\\': printf("\\\\"); break;
case RETURN: printf("\n"); break;
default: printf("%c", c);break;
}
}
return 0;
}
986 :
977 :2007/06/06(水) 13:27:25
>>985 使っていいのはgetchar、scanfです
あと#include <stdio.h>のみ
getch()は習ってないです
なんか後だしですみません
問題の意味はタブを入力したら\tで画面に出力、バックスペース、バックスラッシュも同じように\bと\\と画面に出力
ようするに目に見える形で出力しないさいって意味だと思います
っつかさぁ、習った習っていないは条件に入れるべきだろうか? 課題の本質的な問題に答えられていれば、なんら問題ないんじゃね?
988 :
デフォルトの名無しさん :2007/06/06(水) 13:41:58
今までやった内容:if文while文for文 os:Windows コンパイラ名とバージョン:borland 言語:C テーマ:繰り返し処理(while文) 問題:キーボードより複数件のデータを入力し奇数と偶数の合計を計算しなさい -1が入力されたらデータの終了とし、合計には加えない 実行画面 整数入力==>3 整数入力==>8 整数入力==>10 整数入力==>7 整数入力==>0 整数入力==>26 整数入力==>19 整数入力==>1 整数入力==>-1 奇数合計:30 偶数合計:44
>>988 #include<stdio.h>
int main(void)
{
int input,sum_g,sum_k;
sum_g=sum_k=0;
while(1){
printf("整数入力==>");
scanf("%d",&input);
if(input==-1){
break;
}else if(input%2==0){
sum_g=sum_g+input;
}else{
sum_k=sum_k+input;
}
}
printf("奇数合計:%d\n偶数合計:%d\n",sum_k,sum_g);
return 0;
}
>>977 プログラムに誤りは無い。
もしかしてキーボードの入力を読んでるのか?
普通の端末のモードでは、BSはそもそもプログラム側に送られないよ。
簡単に実験したければBSを含むファイルを食わせてみるんだね。
vimのようなエディタならそのようなテキストファイルを簡単に作れるが、
そのようなテキストエディタを持っていないのなら、
バイナリエディタでも使うんだね。
キーボードから入力されたBSを直接プログラム側で処理したいのならば、
端末をRAWモードにするか、Win32ConsoleAPIないしそのラッパーを
使う必要がある。どっちにしろCの標準ライブラリの範疇ではないよ。
991 :
977 :2007/06/06(水) 14:33:16
992 :
◆lIN/ESgxWw :2007/06/06(水) 18:13:16
[1]c言語 [2]1本の道に,食べ物が多数落ちている. ランダムに動く動物が,それらを全て食べ尽くすと終了するようなプログラムを作成せよ. <仕様> 「道」は要素数20程度の1次元配列で表現する. 「食べ物」は,上記配列の各要素に値1があればその場所に存在し,値0であればその場所には存在しないものとする. 「動物」は,1回の移動で配列中の1つ左または1つ右に移動できる. 「動物」の訪れた場所のエサは食べられたものとする. 「道のうち食べ物のない箇所」,「道のうち食べ物のある箇所」,「動物」は,それぞれ -, *, O で表現する.それらを横一列の文字で表示する. 繰り返し処理中は,毎回数十〜数百ミリ秒程度の時間,実行を一時停止させることで,状態の推移を見やすくする. [3]OS:Linux コンパイラ名:スイマセン、分かりません 言語:C [4]できれば今日中にお願いします [5]制限:配列まで習ってます。標準ライブラリは習ってません よろしくお願いします。
>>992 標準ライブラリはこれから勉強すればいい
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define N 20
void print_road(int road[N], int animal){
int i;
for(i = 0; i < N; i++){
if(i == animal) putchar('O');
else if(road[i] == 0) putchar('-');
else if(road[i] == 1) putchar('*');
}
putchar('\n');
}
int main(void){
int road[N] = {1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0}, animal, i;
srand((unsigned int)time(NULL));
animal = (double)rand()/(RAND_MAX + 1)*N;
for(i = 0; i < 1000; i++){
animal += (int)((double)rand()/(RAND_MAX+1)*3) - 1;
if(animal < 0) animal += N;
else if(animal >= N) animal -= N;
road[animal] = 0;
print_road(road, animal);
Sleep(100);
}
return 0;
}
やべ……Linuxか……
[1] 授業単元: C++実習 [2] 問題文(含コード&リンク): ?新しい型(設計図)として,下記の要素を含む「電車」型を設計しなさい(新しい型(設計図)は,main関数の外で記述すること)。 ?次に,main関数で上記の型(設計図)の変数を1つ宣言(生成)し,その変数の要素に適当な初期値を格納しなさい。 ?最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。 ?新しい型名:TRAIN ?要素1:車輪数・・・型,型名は考えること ?要素2:窓数・・・型,型名は考えること ?要素3:座席数・・・型,型名は考えること ?要素4:車内温度・・・型,型名は考えること [3] 環境 [3.1] OS: WindowsXP [3.2] visual studio2005 [3.3] 言語: C++ [4] 期限: 5/25まで [5] その他の制限: 特になし よろしくお願いします。
[1] 授業単元: C++実習 [2] 問題文(含コード&リンク): 新しい型(設計図)として,「人間」型と「動物」型を設計(新しい型(設計図)は,main関数の外で記述すること,要素は適時考えること)し, main関数で上記の型(設計図)の変数を配列で2つづつ宣言(生成)した後,その変数の要素に適当な初期値を格納しなさい。 最後に,main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] visual studio2005 [3.3] 言語: C++ [4] 期限: 6/15まで [5] その他の制限: 特になし よろしくお願いします。
>>997 人間の定義ぷりーず
プログラムじゃなくていいから
人間、この非人間的なるもの
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。