1 :
デフォルトの名無しさん :
2008/12/31(水) 08:02:03 BE:378684285-PLT(43140)
janeの隠し機能 1.書き込みウィンドウを出し半角入力に切り替える 2.Wキーを押しっぱなしにする 3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ひっかかった
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
南蛮戦時だよまったく wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
8 :
デフォルトの名無しさん :2008/12/31(水) 18:38:19
wwwwwwwwwwwwwwwwwwwwwww
やっぱ冬休みだから少ないのかね
wの数が?
Grass wWWwwww
12 :
デフォルトの名無しさん :2009/01/01(木) 03:49:57
[1] 授業単元: プログラミング演習2 [2] 問題文(含コード&リンク): 引数として、「char型のポインタ(a)、int型整数(b)、int型2048以下の整数(c)」を渡し、 関数内で、受け取ったポインタ(a)の指定された位置のビット(b)から、11ビットで指定された整数(c)を書き込む。 というプログラム(関数)を書くのですが、どうもうまくいきません。よろしくおねがいします。 例えば引数が「*a, 3, 5」だったときは、 *aの3ビット目から11ビットで5(0000 0000 101)を書き込む。という感じです。 説明下手ですいません。 [3] 環境 [3.1] OS: WindowsXP home sp3 [3.2] コンパイラ名とバージョン: VisualC++6.0 [3.3] 言語: C [4] 期限: 1月11日(できれば早いほうが助かります。) [5] その他の制限: 特に無いです。
この前 10進数を16進数に変換せよ って課題に cin >> a; cout << hex << a; で提出したら課題が増えた
へーーっくすょん、なんか寒いな・・・
>>12 void unko(char * a, int b, int c)
{
int mask, i;
assert(0 <= c && c <= 2048);
for (mask = 2048; !(mask & c); mask >>= 1);
for (i = b - 1; 0 <= i && mask; --i, mask >>= 1) {
*a |= (c & mask ? 1 : 0) << i;
}
}
こういうことでいいのか?
>>15 いったい何ビットの整数を扱うつもりなんだw
まあ、元がcharだから1バイトしか使えないが
>>12 その説明ではどうとでも取れる
書き込み後のバイト列を具体的に書け
ポインタ(b)で指定されたアドレスのMSBが1ビット目としてビッグエンディアンか?
それとも、LSBを1ビット目としてリトルエンディアンか?
>>16 そういう解釈もあるのか
何も考えずにシフト演算ならどっちでもいい気がしたんだが
18 :
デフォルトの名無しさん :2009/01/01(木) 12:10:53
[1] 授業単元:実践プログラミング 8.2 競馬
[2] 問題文(含コード&リンク):
(先生の配慮により問題が易しくなったようなのでもう一度)
次の課題A,Bから一方を選び,そこに書かれている数値について,
問(1) 100.0以上1000未満の数
問(2) 1000以上10000未満の数
問(3) 10000以上の数
はそれぞれいくつあるか数え表示するプログラムを完成せよ.
課題[A] JRAのホームページから左にある「競争成績」をクリックし,
下部にある過去の競争成績(カレンダー)から5阪(12月7日阪神)をクリック,
下のほうにスクロールすると11Rとあるがそこをクリックせずにその行の一番右にある
「最終オッズ」をクリック,その後,「3連単オッズ」をクリック.そこに表示されるページの表について。URLを入力するなどして
他のレースの数値についても同様にすぐに数値を数えられるプログラムにすること。(激難)
課題[B] 課題[A]が難しいので,通常はこちらを解くとよい.次のテキストは課題[A]の数値の一部を
コピー・アンド・ペーストしたものである.これを[Ctrl+C]でコピーし,scanfの入力において
[Ctrl+V]で貼り付け,[Ctrl+D]を入力すると入力を終え,数え始めるようにせよ.他の数値を入力
するときも,[Ctrl+D]を入力することで入力を終え,カウントできるように.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8505.txt [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
[3.3] 言語:C
[4] 期限:2008年1月4日中山第11R(中山金杯)の発売締め切り時刻を提出期限とする.
[5] その他の制限:次回は「8.3 パチンコ」を学習します. 、だそうです。
>>18 前スレで言われたことわかってないな
URL入力では絶対に不可能なんだよ
>>18 #include <stdio.h>
int main()
{
double val;
int count[3] = {0};
while (scanf("%lf", &val) != -1) {
if (100.0 <= val && val < 1000) {
count[0]++;
} else if (1000 <= val && val < 10000) {
count[1]++;
} else if (10000 <= val) {
count[2]++;
}
}
printf("問(1) 100.0以上1000未満の数 : %d\n", count[0]);
printf("問(2) 1000以上10000未満の数 : %d\n", count[1]);
printf("問(3) 10000以上の数 : %d\n", count[2]);
return 0;
}
B
22 :
デフォルトの名無しさん :2009/01/01(木) 18:00:58
>>20 HTMLとJAVASCRIPTの知識があればできるんじゃね?
>>22 そうじゃなくて結果表示のページがPOSTリクエストの結果表示だから
URLだけじゃ不可能なんだよ
doActionとかいうメソッドの第二引数に何を渡すのかを探るのが重要であって、URLはそれほど重要じゃないってことだろ
25 :
デフォルトの名無しさん :2009/01/01(木) 18:22:30
26 :
デフォルトの名無しさん :2009/01/01(木) 18:25:11
でもブラウザにそのままソースを貼り付けてやったらちゃんと動いたけどこれじゃだめなの? C言語でPOSTするプログラムを書くとかはできないのかな?
それリクエストの結果から動的に作成されたhtmlソース(AccessO)でしょ? AccessOのURLだけを入手しても、リクエストの結果が埋め込まれてないから無意味。
28 :
デフォルトの名無しさん :2009/01/01(木) 18:51:16
* *** ***** ******* ********* *********** ************* *************** ***************** ******************* この三角形を出力するプログラムを教えてください。 forを使った場合とwhileを使った場合。
>>26 そもそも cname を何処からか取得しなくてはいけないが、法則性が不明。
おそらく、競走成績のページ(accessS.html)から辿って行くしかない。
あと、おそらく宿題のフリした図抜けたバカのリクエスト。
30 :
デフォルトの名無しさん :2009/01/01(木) 18:54:30
断る
>>28 for の場合
#include <stdio.h>
int main()
{
int i, j, n;
n = 10;
for(i = 0; i < n; i++){
for(j = 0; j < n + i + 1; j++)
if(j <= n - (i + 1))
putchar(' ');
else
putchar('*');
putchar('\n');
}
return 0;
}
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
?
35 :
デフォルトの名無しさん :2009/01/01(木) 21:17:54
forとwhileってどっちの方が いいんですか?
どっちでもいいよ ループの境界条件に関して 一定の形式でまとめられるforの方が 可読性がいいのではないかという意見もあるけど まぁどっちでも
>>35 機械にとっては大差ないんじゃね?
forの方が決まりが多いから、その分、読み手に分かりやすく書けると思う。
38 :
デフォルトの名無しさん :2009/01/01(木) 21:25:39
一般的にどちらの方が多く使われてるとか ありますか?
40 :
デフォルトの名無しさん :2009/01/01(木) 22:35:12
>>31 解くコツとかあるんですか?
俺そんなすぐにはとけません・・
41 :
デフォルトの名無しさん :2009/01/01(木) 22:43:40
42 :
デフォルトの名無しさん :2009/01/01(木) 22:45:14
>>40 別解だが山を二つに区切っちゃおう というのがあるよ
頂点の*の右側を垂直に直線を下ろし、それを境界として考える
上からx行目の空白は10-x個、右側の*はx個、左側の*はx-1個
int i,j,k; // iは空白、jは右側の*、kは左側の*
int line; //行数をカウント
for(line = 1;line <= 10;line++) {
for(i = 10;i > line;i--) printf(" "); //まず空白
for(j = 1;j <= line;j++)printf("*") //左側の個数の*を出力
for(k = 1;k <= line - 1;k++)printf("*") //右側の個数の*を出力 k <= line - 1 に注目
putchar('\n'); //改行
}
テストしてないけどまあ大丈夫じゃね?
つセミコロン
それやるんだったら x行目の空白は10-x個、*は2x-1個でいいじゃん 何のために分割してんの?
ついでに、空白の数をwhileの停止条件にすれば、 forとwhileの両方を満たせるなw
まあひとつずつ書いていった結果じゃね?w 分割はちょいイミフだがw
きっと
>>43 は宿題出した教授で
何人コピペしてくるか調べたいんだよw
>>40 コツってわけじゃないけど、おれの場合こんな流れかな
問題を見つける(質問投稿から 106秒)
空白と*が左上から順に1つずつ表示される様子をイメージする(+20秒)
複数行にまたがる出力なので、そこでまず for ループ1個書く(+10秒)
1行の中でで処理を反復するのでそこでも for ループを1個書く(+10秒)
ループに必要な変数を記述(+20秒)
どういう条件で*が出るかを考えて(+20秒)
実際に書き下す(+10秒)
コンパイル(+3秒)
実行(+2秒)
頂点が1つ足りないので条件を修正(+10秒)
コンパイル(+3秒)
実行(+2秒)
*の右側にも空白を書いていたことに気づく(+15秒)
内側の for ループの条件を修正(+20秒)
コンパイル(+3秒)
実行(+2秒)
出力は問題なさそうだが、main の return 0; を忘れていたので加筆(+2秒)
コンパイル(+3秒)
実行(+2秒)
Janeの書き込みボタンを押してウィンドウを開く(+2秒)
一言書く(+4秒)
ソースを全選択してコピー(+1秒)
書き込みウィンドウにペースト(+1秒)
書き込み投下(+1秒)
そして一生の後悔
別解示すならこれくらいでないと 取りあえず、2重ループを排除 char *s = "*******************"; char *p; int n; for(n = 10, p = s + 18; n < 20; n++, p -= 2) { printf("%*s\n", n, p); }
>>28 while使った場合
#include <stdio.h>
int main(void)
{
int i = 0, j;
while(j = 10 - i++) {
while(--j > 0) putchar(' ');
while(++j < i << 1) putchar('*');
putchar('\n');
}
return 0;
}
while(j = 10 - i++) (・∀・)
55 :
デフォルトの名無しさん :2009/01/02(金) 09:30:05
54 名前:デフォルトの名無しさん 投稿日:2009/01/02(金) 09:26:18
>>53
while(j = 10 - i++) while(j = 10 - i++) while(j = 10 - i++) while(j = 10 - i++) while(j = 10 - i++) while(j = 10 - i++) 今年一発目の・・・なぁ〜にぃ〜!?やっちまったな!
>53-55が何を言いたいのか理解できない
59 :
デフォルトの名無しさん :2009/01/02(金) 10:10:58
C言語の0以外ならばTRUEという仕様を利用しているんでしょ。
=だけ見て脊髄反射したのか
61 :
デフォルトの名無しさん :2009/01/02(金) 10:42:43
#include <stdio.h> int main(void){ int i; printf("%d\n", i = 10); return 0; }
>>59 =
>>60 あの程度の不備が理解できないなら、プログラミングなんてやらない方が良いぞ、ド素人
58 名前:デフォルトの名無しさん 投稿日:2009/01/02(金) 09:33:50
やべえ
>>52 程度が理解できないバカがいるとはw
やべぇ、あのコードの不備が理解できない知ったか大馬鹿がいるとはw
人間、年を取ると自信過剰になって、指摘する人間に圧力をかければ
自分が正当化され、正しいことを言っていると勘違いするようだな。
まるで、あの集団のように。ただ、行き過ぎて、自分らが間違っていることに
選挙で負けて気づくと。
>>52 は都合よくコンパイラが解釈して通すが、繰り返しの条件判定としては不適切。
指摘されて、気づかないくらい、自分が正しいと思い込んでいるんでしょうね。
逆に、指摘した側が知らないと思い込んでもいるようだし。
>>64 何かと勘違いしてるんだろうけど、評価順は決まってるよ。
66 :
デフォルトの名無しさん :2009/01/02(金) 11:08:20
インクリメントでコンパイラ依存になるのってどんな場合だったっけ?思い出せない
>>58 知能が低い奴ほど罵倒発言を平気でする。自分が馬鹿だと言う事にも気づかず、
擁護してくれる人がいないからって、IDのない板で、自作自演で複数を装うやり方もするしな。
コンパイラが通すんだから良いんだろ?って考えだろ。while文の括弧の中は、
本来は条件式が入るんだが、それは代入だろ。例え括弧で代入式を括っても、
それに対して条件式にあう措置をとるべき。
まぁ、コンパイラ任せの未熟者がプログラミングに手を出す時代になったってことだな。
68 :
デフォルトの名無しさん :2009/01/02(金) 11:16:06
>>67 だから代入したあとにその代入した値が評価値になるんだろ?
>>61 見ろよ。
while(j = 10 - i++) 代入と条件判定式の区別がつかないゆとり?
70 :
デフォルトの名無しさん :2009/01/02(金) 11:23:39
>>69 0以外がTRUEだから条件文は10でも100でも1000でも-1000でもいいの
#include <stdio.h>
int main(void){
int i;
if(i = 10) printf("Hello World!");
return 0;
}
>>67 whileの括弧の中は条件式じゃなく、値だ。
そして代入演算子の値は代入後の変数の値。
なんかコンパイラが都合よく解釈してくれていると勘違いしているようだが、
>>52 は完全にCの文法に合致してるぞ。
72 :
デフォルトの名無しさん :2009/01/02(金) 11:30:19
if(A) を if(A > 0) と書いちゃう人だから相手にすんな
それは自由だ。
>>66 こんなか?
#include <stdio.h>
int main(){
int i=10;
i=10;
i=(i++);
printf("%d\n",i);
i=10;
i=(i++)+0;
printf("%d\n",i);
//
i=(i++)+100;
printf("%d\n",i);
i=10;
i=(i++)+(i++);
printf("%d\n",i);
//
i=10;
int j;
j=(i++)+100;
printf("%d\n",j);
i=10;
j=(i++)+(i++);
printf("%d\n",j);
return 0;
}
相手を罵倒したり、必死に否定して間違っている自分を正当化する奴は、余計に信じられない。 不適切、適切の区別もつかないような奴がプログラミングをやると、最悪、予期できるのに 自らの不手際で考えられないバグを出すから困る。
>>74 これもか?
#include <stdio.h>
int main(){
int i=10;
i=(++i);
printf("%d\n",i);
i=10;
i=(++i)+0;
printf("%d\n",i);
//
i=(++i)+100;
printf("%d\n",i);
i=10;
i=(++i)+(++i);
printf("%d\n",i);
//
i=10;
int j;
j=(++i)+100;
printf("%d\n",j);
i=10;
j=(++i)+(++i);
printf("%d\n",j);
return 0;
}
>>75 世の中にバカがひとりも居ないなら兎も角、
全員が間抜けなのに、何を言っているんだ?
なにやら喚いてる奴は if( !( fp = fopen( 〜 ) ) ) とかも許せないんだろうか
>>79 ディルバートの法則も読んだことが無いなんて・・・
>>76 >i=(i++)+100;
の前にi=10;が抜けているな。
>>74 も
>>80 ユークリッドの原論も読んだことがないようだな
弱い犬ほどよく吠える とは言ったものだ。素人以下の基地外が、こんな時期に 寂しく過疎ってるスレで、IDが出ないからって自作自演で擁護してファビョってやがるぜ。
麻呂の初暴れか 大喜びで揚げ足とったつもりで自分だけが間違うって、何度やっても学習しないな。
>>67 条件判定式が返す「値」で判定するんであって、判定式が必須じゃないんだがw
よく無限ループで使われるwhile(1)についてはどう思ってるの?
88 :
86 :2009/01/02(金) 21:48:44
>>85 知ったか無知乙。whileの中が条件式ではなく、代入式なんだが?w
それから、条件式の真偽でif文にしろ判定していることくらい、周知のこと。
何を指摘されたか分からないなら、黙ってろ。
>>84 =本物の馬鹿麻呂
自分で言ってて恥ずかしくない?お前にとって、指摘する奴=麻呂って何それ?w
さらに、条件式でなくても、while(1)などで分かるように、そこに変数を用いて
その変数が0か否かで判定するやり方も知っているが、
>>52 は
while(j = 10 - i++) {
どーーーー考えても代入式です、ありがとうございますたwwwwwww
さてと、自信過剰知ったか無知は以後放置よろ。質問スレでも大ボケかましたよ。
識 別 子 (笑)
91 :
デフォルトの名無しさん :2009/01/03(土) 02:42:53
眠いね
a = b = 10;
>>90 横槍ですまんが、
>>52 の
int i = 0, j;
while(j = 10 - i++){
これって10回ループしたら抜けないの?
俺の知識がおかしいのか…
while(*dst++=*src++); この有名な文字列コピーの手法はどう見ても代入式ですw
>>93 jに代入される数が10から0まで減っていくから、問題なくループは終了するよ。
98 :
デフォルトの名無しさん :2009/01/03(土) 02:54:10
52はwhileの中に代入式を書くという技巧を見せつけたかったってことでいいじゃないか。 規格上何ら問題なくコンパイルは通るのも事実だし、 それを初心者に見せびらかして自慢すべき事柄ではないのもその通り。
>>99 最近この板に来た人?
こいつは何年もC系のスレでファビョりまくってるアホだから。
俺は52なんだが、まさかこんなことになるとは思わなかった。
単に行数減らしたかったから()内で代入しただけなんだが。
>>92 まさかこの程度のことで技巧とか自慢とか言われるとは思わなかったw
while(j = 10 - i++) どう考えても、while文の中は代入式で、条件式ではありません。 コンパイラも、ここの部分に対しては警告を出しているし。 while文の使い方や説明を見直すことを、お勧めします。 何を指摘されたのか分からないなら、今すぐプログラミングなんて お止めになった方が、今後の人生のためですよ。人間、適性なんて やってみなければわからないものですからね。これ以上、自分の 適性に合わないプログラミングは、死ぬまでの人生を無駄にしますよw
while()の括弧内が代入式でもCの規格として何の問題もありません。 代入式でなければいけないと主張するのならば、根拠を示してください。
>>105 別にコンパイラが警告出したっていいんじゃない?
動くし。
FILE *fp;
if(!(fp = fopen("hoge.txt", "r"))) return 1;
みたいなのと一緒だと認識してる
違うんかな?
while(j = 10 - i++) jが0か否かで判定するのもありだが、これはどう考えても 代入式 だ罠。分からないなんて、どこのクズ講師だよ? 変な自身を持っているのも、迷惑だな、生徒が。 こんな奴にだけは、絶対に習いたくないね。 教える立場だから、間違っては困るにしろ、間違っていても 指摘した人間を陰湿に罵倒して正当化する性格になってしまったんだね。 生徒も低レベルなんだろうけど。
代入式で警告出るのは==を=にするミスが多すぎたからじゃなかったっけ? 昔は出なかったから、定数を左に書くテクニックとかあったわけだし。
誰も j = 10 - i++ が代入式じゃないとは言ってないのに。 Cの規格として代入式でも全く問題ないって言ってるのが理解できないのか?
いや・・・・どうみてもこいつは・・・・・ つられるなよお前ら・・・・・・・・・
>>111 お前こそ、それが規格上問題ないということに誰も異論を述べていないことに気付け。
推奨される書き方ではないからやめろと言われ続けているだけだ。
まぁ、議論(?)はそのくらいにして
みんなで
>>98 でもやろうぜ。
fgetsでchar型配列を使わないってなんだろ
ポインタ使えってことかな
>>98 #include <stdio.h>
int main() {
int k, c, l, n, m=0;
for (k = 0; k < 3; k ++) {
for (n = l = 0; (c = getchar()) != '\n'; l ++) {
if (l == 0 && c == '-') {
printf("Error!!負の数\n");
return 1;
}
if (l < 8) {
if (c < '0' || c > '9') {
printf("Error!!数字文字以外の入力\n");
return 1;
}
n = n * 10 + c - '0';
}
}
if (l == 0) {
printf("Error!!改行のみの入力\n");
return 1;
}
m += n;
}
printf("合計は%d\n", m);
return 0;
}
fgetcの間違いなんじゃね?
代入式を使う場合のヒント (FILENAMEはファイル名を示すものとする) if( (fp=fopen(FILENAME , "r")) == NULL ) 何かついているよね?fp=fopen() だけで、果たして通用するかにゃ〜? ( ^ω^) fpの中身で条件判定するにしても、何かあるよにゃ〜♪
真である事を条件にするならfp=fopen()で通用するだろ。
真:0以外 偽:0 これが全てじゃね?
結局、文法上 while(式) のところを while(代入式) だと勘違いしていただけでしたとさ。
違った、代入式じゃなくて条件式に訂正。
そもそも、ifだのwhileだのforだの、C言語に限ったことじゃないから プログラミングをお止めになった方がよろしいかと?思われているんだが。
!= == < > <= >=のことなら比較演算子、それを使った式は比較式というほうが正確だよ。
whileやifの中身の意味で条件という言葉の用法もあるから混同しないで。
>>123 大抵のよその言語はコンパイルエラーになるから親切だ。
どこにC言語以外の話があったのかわからない
123という書きこみ自体だけだな
だからぁ、議論(?)は止めて
>>120 でもやろうぜ。
俺?
眠いからパス
どこの講師か知らんが、まじウザッ。while文も適切に使えない、教えられないで 教師なんてやるなよw
思い込みの激しい
>>129 に適切にwhileを教えることのできる教師なんていないだろうなw
分かったからそういうスレでやれ
これからは、このスレでは while(代入式) でも良いそうですよ?w
ほっほっほ、麻呂の今朝の食事は、スパゲッティーミートクソースでおじゃるが、何でおじゃる? 麻呂は余計な口出しはしないでおじゃるよ。勝手に議論してたもう。 ただし、このスレのスレタイを読んで、スレ違いだと気づいて、それ相応のスレで 議論するでおじゃるよ。いつまでも譲らない二者で。第三者を巻き込まないでたもう。
>>134 代入式を真偽として扱うのがいやなわけじゃないんだな
みんな、落ち着けよ。 代入式が値を持つことを知らないCプログラマなんて、いるワケ無いだろ。
今北産業
>>134 OKOK、じゃあ
if( fp = fopen( 〜 ) ) printf("ファイルオープン成功\n");
にするよw
実用的なところだとassert( fp = fopen( 〜 ) )とかどうよw
j=10-i++ が代入式ではなく、条件式なんだってさー えーーーっ!?
>>140 Cの条件式が論理演算子を必要としないのは最初に習うだろ。
>139 > 実用的なところだとassert( fp = fopen( 〜 ) )とかどうよw そして NDEBUG を定義するとまともに動作しないプログラムができあがるわけだな。 assert 内で副作用のある式を評価しちゃ駄目。
145 :
139 :2009/01/03(土) 12:42:18
('A`)
たしかに、全然実用的じゃなかった
いつもは
>>78 だからなあ
なんで「文法上問題ない」はスルーなんだよw
>>137 でFAなんだがな
みんなわかってるよな?
暴れてるのがCプログラマじゃないとしたら?
>>147 コンパイラの警告が見えない馬鹿ですね?w
152 :
デフォルトの名無しさん :2009/01/03(土) 17:17:39
つべこべ言ってないで
>>52 を正しく直してみろ!!
最近は似非プログラマーがC言語を扱っているノカー、時代は変わったもんだな。 while文すらまともに使えないなんて、終わってますね。進路を変えな、今すぐ。 その程度じゃ人生を失敗するぞ。
>>153 さすが人生失敗してる人が言うと説得力が違うw
>>120 labelsetの処理はなんとかならんもんかね。
>>149 多分、
>>120 の講義では指紋照合についてプログラムを書くということをやってるっぽい(ググった)。
・指紋の線の端点だと確定できる点を真マニューシャ
・指紋の線の端点だと確定できない点を偽マニューシャ
と定義してるくさい。
指紋認証だと、スキャナに指を押し付ける力加減により、スキャンする指の画像が変わってくる。
画像の境界線上にできる点を偽マニューシャと呼びたいたいのではないかと思う。
そこで、問題の意図としては、「その境界線をどうやって判断するのか?」を解かせようとしてるのかも
(処理思いつかんが)。
つーか、ほとんど推理ゲーだな。
157 :
156 :2009/01/03(土) 17:56:33
>>149 すまん。
境界線ではなく、同じラベル中で距離が近い点を全部消してるのかも。
どの程度の距離かは不明だけど。
実用とほとんど関係の薄い問題を解かせて何が楽しいんだろ。教授の自己満足か。
>>159 技術ありき
実用にするかどうかはアイディア次第
>>159 パターン認識の実用がどんなか知らないが、これは指紋の照合では基礎なのでは?
162 :
157 :2009/01/03(土) 23:39:52
>>158 申し訳ありません。
距離を基準とすると下の点は消えるべきではないですね。
取り下げさせていただきます。
>>162 依頼にも「同じ隆線上で近接して出現 したマニューシャは」云々と書いてあるし、なにかしてるはずだけど・・・
pdfに載ってる処理結果を見ると、他にも何か処理をしていなくては、辻褄が合わない。
それこそ境界線上の端点の除外とか。
工夫を考えろと言うことなのかな。
165 :
120 :2009/01/04(日) 02:03:11
>>164 >>143 ではないが、assert(expr)は、NDEBUGが#defineされているときにはexprが評価されない。
実装によるが、たいていマクロだから副作用がある式を評価させてはならない。
とりあえず、自分の環境のassert() (多分assert.hにでも書いてある)を読んでみるといいよ。
>167 一応補足。 C言語規格 9899:1999 7.2/1 によれば #include <assert.h> 時に NDEBUG が定義されている場合、assert は以下のように定義される。 #define assert(ignore) ((void)0) ということで、expr 部分(上だと ignore だが)全体が消滅する。 # ちなみに 7.2/2 では関数じゃなくてマクロで実装しろと規定されている。 そもそも assert とはプログラムのバグ(ロジックエラー)を引っかけるものであって、実稼働中に発生するようなエラーに対処するものではない。 ということで例えば VC++ だと Release ビルドでは既定で NDEBUG が定義されたりする。 結果、assert 内に副作用のある式を記述してしまうと、Debug ビルドと Release ビルドで挙動が異なるコードを生み出してしまう。
>169 != >167 で >169 では >164 に対する返答補足のつもり。
171 :
デフォルトの名無しさん :2009/01/04(日) 03:07:44
HTMLテキストデータから数値(浮動小数点)のみを順に抽出して いきたいのですが、どういう風にすればよろしいでしょうか? ご教授ください。
>>171 HTMLテキストデータのサンプルくらい提示して欲しいもんだ
>>171 後付で条件足すなよ!
#include<iostream>
#include<iterator>
#include<string>
#include<cstdlib>
#include<cctype>
int main(){
std::string src;
copy(std::istreambuf_iterator<char>(std::cin),std::istreambuf_iterator<char>(),back_inserter(src));
for(const char*s=src.c_str();;){
if(*s=='\0')break;
if(std::isspace(*s))++s;
char*next=const_cast<char*>(s);
std::strtod(s,&next);
if(s == next){++s;continue;}
std::cout.write(s,next-s);
std::cout << std::endl;
s = next;
}
}
2箇所訂正 #include<algorithm> が抜けているのでcctypeの下に追加 if(std::isspace(*s))++s; が空白1つにしか対応できていないので 任意個数の空白に対応するためにcontinueするする if(std::isspace(*s)){++s;continue;}
176 :
デフォルトの名無しさん :2009/01/04(日) 04:54:08
>>176 一応元のコードをベースにしたけどこんなんでおk?
#include <stdio.h>
#include <math.h>
int main(void)
{
{ int i, n, Limit;
n = 0x7FFFFFFF;
for(;;--n){
Limit=(int)sqrt(n);
for (i=Limit;i>1;i--)
if (n%i == 0)break;
if (i==1)break;
}
printf("int型の最大の素数は%dです\n",n);
}{ unsigned int i, n, Limit;
n = 0xFFFFFFFF;
for(;;--n){
Limit=(unsigned int)sqrt(n);
for (i=Limit;i>1;i--)
if (n%i == 0)break;
if (i==1)break;
}
printf("unsigned int型の最大の素数は%uです\n",n);
}
return 0;
}
INT_MAXとかを使った方がいいと思う
>>178 それを使うか悩んだんだけど、limits.hを授業でやったか分からない。
それとintのサイズが32bitであると問題文でわざわざ定義されている。
そんな感じで、今回はマジックナンバーを決めうちで実装した。
麻呂のクソースではおじゃるね、まずそれぞれの変数に-1を入れてやんよ? さすれば、何ビットだろうとその変数が扱える最大のFFFF・・・になるでおじゃるし。 え?邪道?それがクソースでおじゃっ!
unsigned int uint=-1;
signed int sint=uint
>>1 ;
printf("uint:%u \nsing:%d\n",uint,sint);
きんもぉ〜★なクソースでおじゃっ
丸投げキター! 1段1次のRunge-Kuttaと称してEuler法で解いてやりたい
185 :
176 :2009/01/04(日) 10:19:18
187 :
C初心者 :2009/01/04(日) 12:12:38
1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):ポインタを用いた二分探索木の作成 [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:無期限 [5] その他の制限:データはファイルから読み込むものとしています。 他のスレでも質問させてもらったのですがどうしてもわからないので、ここで質問させて頂きます。 宿題ではあったのですが、もう期限は過ぎています。 ただどうしても知りたいのでどなたかお願いします。あとオススメの参考書等教えていただけると嬉しいです。
189 :
C初心者 :2009/01/04(日) 17:37:39
>>188 ありがとうございます。 早速注文しました。
プログラムはわかりませんか??
191 :
おねがいしますw :2009/01/04(日) 17:44:13
そんなこと無いよ。deleteに小さい値渡すとsegfaultになるとか絶対ないよ
そんなこと無いよ。insertに先頭と同じ値を渡してもリストは壊れるとか絶対ないよ
見辛いし、全部作り変えたほうがいいじゃんwww
>>189 リンク先のtree.cってソースがそれだろ?
197 :
デフォルトの名無しさん :2009/01/05(月) 00:20:19
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): 文字データの入力と出力 Visual Studioを用いてConsoleApplicationを作成せよ。 以下の条件を満たすものを作成する事。 最大登録数10名の名前と年齢を入力し入力完了後に一覧をコンソールに出力させる事。 登録数は任意に決定出来、10名を超えた場合は再入力させる事。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語:C [4] 期限: 1月5日6時まで [5] その他の制限: 構造体習い始めた程度の能力
199 :
197 ◆brUNnJvSqY :2009/01/05(月) 01:10:31
>>197 訂正
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
【文字データの入力と出力】
Visual Studioを用いてConsoleApplicationを作成せよ。
以下の条件を満たすものを作成する事。
最大登録数10名の名前と年齢を入力し入力完了後に一覧をコンソールに出力させる事。
登録数は任意に決定出来、10名を超えた場合は再入力させる事。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: visualC++2005
[3.3] 言語:C
[4] 期限: 2009年1月5日6時まで
[5] その他の制限: 構造体を習い始めた程度の能力
>>198 #include <stdio.h>
int main()
{
printf("sum { 1, 3, ... , 99 } = %d\n", 50 * (1 + 99) / 2);
printf("sum { 2, 4, ... , 100 } = %d\n", 50 * (2 + 100) / 2);
return 0;
}
>>199 /* ちょっと気持ち悪く書いてみたよ */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ENTER_MAX 10
#define NAME_LEN 256
#define AGE_LEN 4
#define BUFF_SIZE (NAME_LEN + AGE_LEN + 1)
int main(void)
{
char table[ENTER_MAX][BUFF_SIZE];
char buff[BUFF_SIZE];
int n;
int i;
do {
printf("登録数 (1 から %d) >> ", ENTER_MAX);
} while ((n = atoi(fgets(buff, BUFF_SIZE, stdin))) > ENTER_MAX);
for (i = 0; i < n; ++i) {
int len;
printf("名前 >> "); fgets(table[i], NAME_LEN, stdin);
len = strlen(table[i]);
printf("年齢 >> "); fgets(&table[i][len + 1], AGE_LEN, stdin);
table[i][len - 1] = ','; table[i][len] = ' ';
}
for (i = 0; i < n; ++i) printf("%s", table[i]);
return 0;
}
>>186 親切な解答、ありがとうございました。1はまた考えてみます。
失礼しました。
>>201 ありがとうございます。
fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?
という、エラーが出てしまいます。回避法はありますでしょうか?
出来れば、初心者に毛が生えた程度のプログラムで作っていただけると有りがたいです。
>>203 #include <stdafx.h> をソースの頭に書け
あと氏ね
205 :
デフォルトの名無しさん :2009/01/05(月) 02:32:12
>>205 /* 意味が良くわからないけどこういうことかな */
#include <stdio.h>
#define N 1024
const char const *str
= "#include <stdio.h>\n\nint main() {\nint k, c, n, i;int l;int m = 0;\n\
\tfor (k = 0; k < 3; k ++) {\n\t\tfor (n = l = 0;\n\t\t\
(c = getchar()) != '\\n';l++) {\n\t\t\tif (l == 0 && c == '-') {\n\t\t\tprintf(\"Error!!負の数\\n\");\
\n\t\treturn 1;\n\t}\n\tif (l < 8) {\n\t\tif (c < '0' || c > '9') {\n\
\t\tprintf(\"Error!!数字文字以外の入力\\n\");\n\treturn 1;\n}\n\
\tn = n * 10 + c - '0';\n\t}\n}\n\tif (l == 0) {\n\tprintf\
(\"Error!!改行のみの入力\\n\");\nreturn 1;\n}\n\tm += n;\n\t}\n\
\tprintf(\"合計は%d\\n\", m);\nreturn 0;\n}\n";
int main(void)
{
int x[N], i;
for (i = 0; str[i]; ++i) x[i] = str[i];
return 0;
}
ちょ、そのクワイン的発想は何w
字義通りだと、こうだろ? むしろ、他の解釈を聞かせて欲しい。
ビルド済みのバイナリかソースのどちらかだろうとは考えた
210 :
C初心者 :2009/01/05(月) 11:00:16
>>196 すいません、リンク先に行けなくて見れてないです。
211 :
デフォルトの名無しさん :2009/01/05(月) 12:52:12
>>1 > 気に入らない質問やその他や発言はスルーの方向で。
も読めない基地外って何?別にお前個人を指定、特定して答えろなんて
誰も言って無いし、答えられない低レベル役立たずのクズになんて頼んでもいないだろ。
スレタイも読めないようだな。ここで丸投げの宿題が書き込まれるのは 分かりきっていることなのに、自分が気に入らないとファビョって 訳も分からないクレームをつける奴って何?そんなんだから 一生、成功しないままこの世を去るんだろ?w そういうのって簡単に言うと「負け組み、社会の底辺」って言うんだぜ? ほれ、お前と同じ世代、同じ学校に通っていたけど自分が見下していたあいつ、 今何をしてる?少なくともお前以上の出世はしただろうねw お前はいつまでも、こんなスレで引きこもりながら陰湿なレスをし続けるだけ。 人生終わってら。
>>211 /* たぶん大丈夫だと思う */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define L 3
#define N 8
#define M (N * sizeof(int))
int main(void)
{
int *x[L], total = 0, i;
for (i = 0; i < L; ++i) {
int n;
x[i] = (int *)malloc(M);
printf(" input number >> ");
if ((n = atoi(fgets((char *)(x[i]), M, stdin))) > (int)pow(10, N))
printf("%d\n", n %= (int)(pow(10, N)));
if (n < 0 || (n == 0 && x[i][0] != '0')) {
fprintf(stderr, "Error!\n"); return 1;
}
total += n;
}
printf("answer = %d\n", total);
return 0;
}
下から9行目の printf("%d\n", n %= (int)(pow(10, N))); は n %= (int)(pow(10, N)); に直して。
>>211 #include <stdio.h>
int input() {
char c;int a = 0;int cnt = 0;
while(1) {
c = getchar();
if(c == '\n') break;
if('0'<=c && c<='9') a = a*10 + c-'0'; else cnt=9;
cnt++;
}
if(cnt==0 || cnt>=9) return -1; else return a;
}
//
int main(void) {
int a[3],i;
printf("8桁までの整数を3つ入力してね\n");
for(i=0;i<3;i++) {
a[i] = input();
if(a[i]<0) {
fprintf(stderr,"Error : 8桁までの整数を入力してくださいませ\n");
return -1;
}
}
printf("合計 %d + %d + %d = %d\n",a[0],a[1],a[2],a[0]+a[1]+a[2]);
return 0;
}
218 :
デフォルトの名無しさん :2009/01/05(月) 14:19:49
[1] 文字列の格納、比較
[2]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8527.zip (設問もzipに入っています。)
このプログラムをポインタとstrchr関数を使わない形に書き換えていただけないでしょうか。
あと、コメントアウトでややこしいところ、ループの箇所等に説明をつけていただけるとありがたいです。
[3] 環境
[3.1] WinXP
[3.2] Borland C++ Compiler 5.5
[3.3] 言語:C言語
[4] 期限:[2008年1月15日00:00まで]
[5] 原則的にgoto 文は使用しない。
do while ループに関してはできるかぎり使用せず、while に統一する。
※キーボードからの入力は、scanf 関数およびgets 関数を使用せず、getchar 関数または、
fgets 関数を使用すること。
223 :
デフォルトの名無しさん :2009/01/05(月) 19:26:03
224 :
218 :2009/01/05(月) 20:03:05
>>222 自分のミスで問題に一部書き忘れをしてしまいましたが、ここまでしていただければ十分です
ありがとうございました
225 :
デフォルトの名無しさん :2009/01/05(月) 22:33:58
[1] 授業単元: 計算機工学 [2] 問題文(含コード&リンク): 下記 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2009年01月15日19:00まで [5] その他の制限: なし ■問題 指定した部品数で建てられる家の最大面積を求めるプログラムを作成して下さい。 窓、ドア、壁の3タイプの部品があり、部品の長さは2m。 次のルールを満たさなくてはいけません。 1)1面にはドアは1つまで 2)家には少なくとも1つのドアが必要 3)ドアの両脇は壁部品でなくてはならない 4)窓の両脇は壁部品でなくてはならない 5)家は四角型 6)部品はそれぞれ50個が上限 int MaxArea(int NumWall,int NumWin,int NumDoor) このように各部品の数を指定し、面積を返す関数を作ってください。 例) MaxArea(8,0,1) = 12 --- | | -D-
226 :
デフォルトの名無しさん :2009/01/05(月) 23:14:44
文字型配列を、"OKINAWA"を初期値として宣言し、文字列を 反転させて、"AWANIKO"と出力するプログラムを作りなさい。
227 :
デフォルトの名無しさん :2009/01/05(月) 23:25:18
>>226 char str[]="OKINAWA"; reverse(str); printf("%s",str);
228 :
226 :2009/01/05(月) 23:32:05
自己解決しました。
229 :
デフォルトの名無しさん :2009/01/05(月) 23:35:47
>>226 for使っての解き方誰かわかりますか?
>>225 Google Code Jam 2004のHousePartyってヤツだな。
231 :
デフォルトの名無しさん :2009/01/05(月) 23:44:51
>>229 reverse(char *str) {
int i; for(i=0; i<len(str)/2; i++) { char c=str[i]; str[i]=str[len(str)-i-1]; str[len(str)-i-1]=c;}
}
>>232 for(int i=0; i <= 100 ; i++ )if( i * ( i + 1 ) / 2 >= N ) { printf("%d\n",i); break;}
while( i * ( i + 1 ) / 2 < N ) { i++; }
whileの方の初期化忘れたw
>>232 #include<stdio.h>
int main() {
int i=0, n;
scanf("%d", &n);
while ((n-=++i)>0) /* または for(;(n-=++i)>0;) */
if (i==100) {printf("100まで加算してもだめだった\n"); return 0;}
printf("%dまで加算すればおk\n", i);
return 0;
}
236 :
デフォルトの名無しさん :2009/01/06(火) 00:19:31
>>232 int func_for(int n) {
int i;for(i=1;i<=100;i++) if(i*i+i >= 2*n) return i; return -1;
}
int func_while(int n) {
int i=0; while(++i<=100) if(i*i+i >= 2*n) return i; return -1;
}
main() {
int i,ans;scanf("%d",&i);ans = func_for(i);if(ans>=0) printf("answer = %d\n",ans); else printf("not found\n");
}
239 :
デフォルトの名無しさん :2009/01/06(火) 02:18:23
[1]プログラミング [2]int 型(符号つき32 ビット整数)および、unsigned int 型(符号なし32 ビット整数)のそれぞれの最大の素数を求めよ。 [3]環境 [3.1] OS:WindowsXP [3.2] コンパイラ名bcc [3.3] 言語:C言語 [4]特になしですが早めで。 [5]制限:エラトステネスを用いずに素数を求める。 どうか、よろしくお願いします。
241 :
デフォルトの名無しさん :2009/01/06(火) 04:40:34
>>240 みのがしてました。ありがとうございますです。
スイマセン、どなたか
>>200 の
(99+1)/2
の処理の意図を教えて頂けないでしょうか・・後から質問でスイマセン。
>>242 等差数列の和=項数*(初項+末項)/2
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):氏名と年齢を扱うプログラムを作りたい。これらのデータはリスト構造を用いて管理したいので、 1.リスト構造の要素となる構造体の型宣言を行え 2.上記構造体によって構築されたリスト構造の適切な箇所に新しい要素を追加する関数を作成せよ なお、以下の点も守ること ・リスト構造は単方向リストとすること ・リスト構造のデータは年齢順に並ぶようにすること ・リスト構造はポインタ変数rootから始まるようにすること ・関数は新しい要素を受け取って、それをリスト構造に追加する形式にすること ・変数rootはグローバル変数とし、関数に渡さなくてもよい [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ名とバージョン:visualC++2005 [3.3] 言語:C/C++ [4] 期限:1月7日12:00まで [5] その他の制限:特になし よろしくお願いします。
麻呂のクソースを改変するでおじゃるよ
>strは禁止。 str〜系関数のこと? 最初std::stringかと思ったが・・・
[1] 授業単元:プログラミング [2] 問題文 Step 1. float型配列の先頭アドレスを受け取り,その配列内から最大の値を探して, それを関数値として戻す関数 float max(float data[], int n) を定義せよ.ここで,nは配列data[]に入っている有効なデータの数(有効な配列要素は,0〜n-1)である. またデータに負の値はないものとする. Step 2. main()関数内で,要素数100程度のfloat型配列を宣言し,課題11-2で作成したデータ入力関数のinput()関数を再利用してデータを配列に入力するようにプログラムする. 次に,Step1で作成した関数をmain()関数内呼び出して最大値を表示せよ. [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:VC2008 [3.3] 言語:C++ [4] 期限:2009/1/8 23:00まで [5] その他の制限 特になし よろしくお願いします
まだスレタイも読めない奴がいるのか
[1] 授業単元:プログラミング演習U [2] 問題文: 以下の仕様で収支残高管理プログラムを作成せよ.ただし,残高処理の関数を独自で定義すること. その際,ファイルポインタについてはグローバル変数として宣言しても良い. 初期状態を除いてプログラム実行時に既存の残高額のファイル(balance.txt)を読み込む. ファイルが存在する場合に限り,balance.txt)を読み込む処理をすれば良い. 各処理を選択するメニュー画面を残高額とともに表示する.可能であれば,残高は桁区切りカンマを用いて表示すること. 終了時にその時点の残高額をファイル(balance.txt)に書き込む. ヒント:最初にbalance.txtを読み込みモードで開いて読み込んだ後は,即座にファイルを閉じ,最後の書き込み時に,改めて書き込みモードで開いて同名のファイルに書き込みをすれば良い. また,ファイルからの金額の読み込みにはfscanfを,書き込みにはfprintfを使用すると良い.
255 :
254 :2009/01/06(火) 17:15:48
>>254 続き
[実行例]
***** 収支残高管理 *****
残高は \0 です.
[1] 収入
[2] 支出
[99] 終了
処理を選択してください:1
収入金額:12345
***** 収支残高管理 *****
残高は \12,345 です.
[1] 収入
[2] 支出
[99] 終了
256 :
254 :2009/01/06(火) 17:16:27
>>255 続き
処理を選択してください:2
支出金額:20000
***** 収支残高管理 *****
残高は \-7,655 (赤字)です.
[1] 収入
[2] 支出
[99] 終了
処理を選択してください:99
終了します.
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio.Net 2003
[3.3] 言語:C++
[4] 期限:2009年1月8日
[5] その他の制限:特になし
よろしくお願いします。
>>251 #include<iostream>
#include<algorithm>
float max(float data[], int n){
if(n<=0) return -1.0;
return *std::max_element(data, data+n);
}
int input(float data[], int data_num_max){
int data_num;
for(data_num=0;data_num<data_num_max;){
float value;
if(!(std::cin >> value)) break;
data[data_num++]=value;
}
return data_num;
}
int main(void){
float data[100];
int data_num, data_num_max=sizeof(data)/sizeof(data[0]);
data_num=input(data, data_num_max);
std::cout << max(data, data_num) << std::endl;
return 0;
}
259 :
デフォルトの名無しさん :2009/01/06(火) 18:26:57
[1] 授業単元: プログラミング入門演習 [2] 問題文(含コード&リンク): 複数の整数のうち、指定した数で割り切れる整数の個数を求めるプログラムを作成せよ。 入力に関して キーボードから入力する整数の個数を入力し(最大で128に対応すること)改行する。 次に指した数の整数をスペース1つずつ開けて1行で入力し、改行する。 最後に1つ整数を入力し、改行する。この最後に入力した値で割り切れるかどうか 判定する。この一連の入力時,例題や解答例のような入力を保す文字等は決して表示 しないこと。 出力に関して 割り切れる整数の個数を数値のみ(+改行)を出力する。指定した数値・改行以外の 文字等の出力は一切行わないこと。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:Visual Stdio 2008 [3.3] 言語:C言語 [4] 期限: 1/8 12:00 [5] その他の制限:C言語の基礎を習っています。 よろしくお願いします
>>250 説明不足でごめんなさい
strlen関数のことです
#include <stdio.h>
void main(){
char moji[100];
int i=0,x;
printf("文字列を入力:");
gets(moji);
printf("\n\n");
while(moji[i] != '\0'){
i;
i++;
}
x=i+1;
printf("文字列の長さ=%d",x);
printf("\n\n");
}
という求め方を習ったのですが、strlen関数は習っていないので・・・
263 :
つばめ :2009/01/06(火) 20:35:24
分からない問題があります。 正の整数nを入力し、nの約数の和を表示するプログラムを作る問題です。 初心者なので、宜しくお願いします。
一つの整数の約数って・・・・1からnまで全部足せばいいのか?w
>>263 #include <stdio.h>
int sum(int n){ return n == 0 ? 0 : n + sum(n - 1); }
int main(int n){ return scanf("%d", &n), printf("%d\n", sum(n)); }
約数の意味がわからないアホがここで何してんの?
267 :
265 :2009/01/06(火) 20:56:12
>>263 #include <stdio.h>
int main(void)
{
int i, n, sum;
scanf("%d", &n);
for(i=1,sum=n; i<n; i++) if(!(n%i)) sum += i;
printf("%d", sum);
return 0;
}
>>259 #include<stdio.h>
int main(void){
int data[128], data_num;
int i, div;
scanf("%d", &data_num);
for(i=0;i<data_num;i++) scanf("%d", &data[i]);
scanf("%d", &div);
for(i=0;i<data_num;i++) if(data[i]%div==0) printf("%d\n", data[i]);
return 0;
}
表示するのは個数だろ
>>261 返事遅くなって毎度毎度すいません・・・
C++です
272 :
つばめ :2009/01/06(火) 21:31:50
質問回答ありがとうございます。 C++ではなく、C言語の方です。
なんでもツンデレ言うアホにはうんざりだ
じゃあ世話焼きで俺のことが大好きな妹で
[1] 授業単元: 情報処理応用 [2] 問題文(含コード&リンク): DirectShowを用いてtest.aviなどファイルから再生している動画をout.aviなど別ファイルとして保存する [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC++2008 [3.3] 言語: C++ [4] 期限: 1月7日 [5] その他の制限: スレ違いかもしれませんができればお願いします
>>276 #include <stdio.h>
int main(void)
{
int i, j = 0;
while (j < 2 && scanf("%d", &i) != EOF) {
if (i < 0) {
puts("negative value");
j++;
}
else {
j = 0;
printf("%d\n", 2*i);
}
}
return 0;
}
>>278 ありがとうございます
ちなみにfor文の方はどうなっているのでしょうか?
>>285 #include <stdio.h>
int main(void)
{
int i, j = 0;
for (;j < 2 && scanf("%d", &i) != EOF;) {
if (i < 0) {
puts("negative value");
j++;
}
else {
j = 0;
printf("%d\n", 2*i);
}
}
return 0;
}
こんな感じでどうかな
>>289 無視してかまわないです
追記
データ入力数は最大のmax個に達するか,負値が入力されるまでデータ入力を繰り返すものとする
291 :
デフォルトの名無しさん :2009/01/07(水) 01:21:38
[1] 授業単元:計算機工学 [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC++2008 [3.3] 言語: C [4] 期限: 1月15日 [5] その他の制限: 特になし ■ 検索問題 データ数10万 ランダムな対象を1万回検索する 先頭から検索すると平均で1000秒かかった 高速化するにはどうしたらよいか ソートされてる場合とされてない場合のそれぞれについて答えよ
>>291 ソートされてない場合
まずソートする、 このとき オーダーが n log になるようなまともなソートを使う
これを二分探索する
ソートされてる場合
二分探索する
オーダーは n * log (n) ね
>>291 それは本当にプログラミングの課題なのか?
考察ではなく実際に試したとしたら、116日ほどかかった計算になるんだが
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): キーボードから入力した整数と小数(それぞれ1つずつ)を乗算した結果を表示するプログラムを、 ポインタによる間接参照演算子を用いて作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:1月7日24時 [5] その他の制限: 入力、乗算、表示部分全てでポインタを用いる よろしくお願いします。
>>299 設問者の意図がよく分からんが、こういうことか
#include <stdio.h>
int main(void) <%
char buf<:256:>;
int n;
double d;
int *np = &n;
double *dp = &d;
printf("input interger number: ");
fgets(buf, 256, stdin);
sscanf(buf, "%d", np);
printf("input decimal number: ");
fgets(buf, 256, stdin);
sscanf(buf, "%f", dp);
printf("%d times %f equals %f.\n", *np, *dp, *np**dp);
%>
宿題出てるんですがよくわかりません よろしくお願いします 次のように、整数値を表すクラスを設計する データメンバ x:xの座標(ただし 0-1000とする) y:yの座標(ただし 0-1000とする) z:zの座標(ただし 0-1000とする) メンバ関数 void setX(int a): xの座標を設計する(範囲外の値は、error messageを出力する) void setY(int b): Yの座標を設計する(範囲外の値は、error messageを出力する) void setZ(int c) Zの座標を設計する(範囲外の値は、error messageを出力する) int getX(): Xの座標値を得る int getY(): Yの座標値を得る int getZ(): Zの座標値を得る 結果は、次のように表示する Please Input X 3 Please Input Y 1000067 The value of Y is a mistake, Please input Y again! 5 Please Input Z 7 The result is: (3,5,7)
304 :
デフォルトの名無しさん :2009/01/07(水) 09:05:19
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS: WindowsVista SP1 [3.2] コンパイラ名とバージョン:StadyC [3.3] 言語: C [4] 期限: 2009年1月7日 21時まで [5] その他の制限: 特になし 『ジョーカーを除くトランプ52枚(1~13×4種)からランダムに5枚を抜き出した時、 ・ワンペア(同じ数字が2枚) ・ツーペア(同じ数字が2枚のものが2組) ・スリーカード(同じ数字が3枚) ・ストレート(5枚連続した数値、[10,11,12,13,1]や[1,2,3,4,5]はOKだが[12,13,1,2,3]など1をまたぐケースはNG) ・フラッシュ(5枚とも同種) ・フルハウス(ワンペアとスリーカードの組み合わせ) ・フォーカード(同じ数字が4枚) ・ストレートフラッシュ(ストレートとフラッシュの組み合わせ) それぞれの役が発生する確率(実際には試行した回数)をモンテカルロ法により求めるプログラムを作成する。 ただし、上位(記載が下にあるもの)の役と下位の役を同時に満たす場合は上位の役を優先する。 因数にポインタを含む関数を適当に作成し、利用すること。 メイン関数直下での処理はできるだけ避けることが望ましい 入力に関して キーボードから、試行回数(+改行のみ入力する)。 最大でもint型に収まる数値とする。 このとき、入力を促す文字などは決して表示しないこと。 出題に関して 試行したうち、上記の8つの役の成立回数(+改行)のみワンペアから順に1行ずつ出力(計8行)。 指定した数値・改行以外の文字などの出力は一切行わないこと。 』
308 :
304 :2009/01/07(水) 09:26:40
なんとか自力で出来ました どうもお手数おかけしました
>>304 引数を「いんすう」と読んでる教育機関なんか存在しないんじゃね?
314 :
回答する気もないくせに居座るだけの無能、粘着基地外 :2009/01/07(水) 11:35:04
313 名前:デフォルトの名無しさん 投稿日:2009/01/07(水) 11:28:11
>>311
>>312 そこから考えると、
コイツは前のスレッドで同じ宿題二度投げてるやつじゃね?
マルチ先を貼られた途端におとなしくなった。
321 :
デフォルトの名無しさん :2009/01/07(水) 12:00:17
>>319 うわぁ〜〜〜、質問する側もどうかと思うが、それを見つけてくる粘着基地外暇人も
きめぇ〜〜〜
巡回先が複数あるやつは多いだろ 特に質問系のスレは
326 :
デフォルトの名無しさん :2009/01/07(水) 13:13:30
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:Visual Stdio 2008 [3.3] 言語:C言語 [4] 期限: 1/8 12:00 [5] その他の制限:なし。 中央値を求める関数を作成し、その関数を使用して中央値を出力する プログラムを作成せよ。関数は下記の通りとする。 int median(int *in,int num) in 複数の整数値が格納された配列(先頭)ポインタ num 入力値の数 戻り値 中央値 入力に関して キーボードから入力する整数の個数を入力し(最大で128に対応すること)改行する。 次に指定した数の整数をスペース1つずつ開けて1行で入力し、改行する。 よろしくお願いします。
1年前ワロタww
毎年同じ内容の講義なんて当たり前だろ?
>>330 注目点は、環境がStudy Cなところじゃね?
>>304 今年の学生はそれもつづれないようだけど。
>>326 #include <stdio.h>
int median(int *in, int num)
{
int i, j, temp;
for(i=num-1; i > 0; i--) {
for(j=0; j<i; j++) {
if(in[i] > in[j]) {
temp = in[i];
in[i] = in[j];
in[j] = temp;
}}}
return num & 1 ? in[num/2] : (in[num/2-1] + in[num/2]) / 2;
}
int main(void)
{
int i, num, in[128];
scanf("%d", &num);
for(i=0; i<num; i++) scanf("%d", in + i);
printf("%d", median(in, num));
return 0;
}
>>299 です
>>301 解答ありがとうございました。
自分の知らない関数を使っているので、この解答を参考にしながら
書いてみます。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):以下に記載 [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:Visual C++ 2005 ver8.0 [3.3] 言語: C++ [4] 期限:1/10 24:00 [5] その他の制限:特になし 次のように、整数値を表すクラスを設計する データメンバ x:xの座標(ただし 0-1000とする) y:yの座標(ただし 0-1000とする) z:zの座標(ただし 0-1000とする) メンバ関数 void setX(int a): xの座標を設計する(範囲外の値は、error messageを出力する) void setY(int b): Yの座標を設計する(範囲外の値は、error messageを出力する) void setZ(int c): Zの座標を設計する(範囲外の値は、error messageを出力する) int getX(): Xの座標値を得る int getY(): Yの座標値を得る int getZ(): Zの座標値を得る 結果は、次のように表示する Please Input X 3 Please Input Y 1000067 The value of Y is a mistake, Please input Y again! 5 Please Input Z 7 The result is: (3,5,7)
>>334 わからないながらも自分で考えてみたものの途中です
#include<iostream>
using namespace std;
class Dimension{
private:
int x;
int y;
int z;
public:
void setX(int a);
void setY(int b);
void setZ(int c);
int getX();
int getY();
int getZ();
void show();
};
void Dimension::setX(int a){
x = a;
if(a>=0 && a<=1000){
cout<<"Please Input X\n";
cin>>a;
}
else{
cout<<"The value of X is a mistake.Please input X again!"<<"\n";
cin>>a;
}
}
337 :
help me :2009/01/07(水) 16:40:29
[1] 授業単元:C言語 [2] 問題文: ニュートン・ラプソン法を用いて、x^3 −10x^2 +10x + 50 = 0 の解を求めよ。解の精度は有効数字5桁とする。 [3] 環境 [3.1] OS:Linux [3.3] 言語: C [4] 期限: 1月9日 よろしくお願いします。
>>337 #include<stdio.h>
#include<math.h>
//英語わからん
#define YUUKOUKETASUU 1e-5
double f(double x) {
return x*x*x - 10*x*x + 10*x + 50;
}
double g(double x) {
return 3*x*x - 20*x +10;
}
double NewtonMethod(double xn) {
double xn1 = xn - (f(xn)/g(xn));
if (fabs(xn1 - xn) < YUUKOUKETASUU)
return xn1;
return NewtonMethod(xn1);
}
int main(void) {
double x = NewtonMethod(0);
printf("f(x) = x^3 - 10x^2 +10x + 50\n");
printf("f(%f) = %f\n", x, f(x));
return 0;
}
>>337 #include <stdio.h>
#include <math.h>
#define YPSILON 1e-6
#define DELTA 1e-10
double f(double x)
{
return x*x*x - 10*x*x + 10*x + 50;
}
int main(void)
{
double x0, x1, d;
x0 = 0.0;
d = (f(x0+DELTA)-f(x0))/DELTA;
x1 = x0 - f(x0)/d;
while (fabs(x0 - x1) > YPSILON) {
x0 = x1;
d = (f(x0+DELTA)-f(x0))/DELTA;
x1 = x0 - f(x0)/d;
}
printf("x = %.5f\n", x1);
return 0;
}
341 :
help me :2009/01/07(水) 17:04:34
342 :
yasu :2009/01/07(水) 17:07:23
[1] 授業単元: C言語プログラミング基礎 [2] 問題文(含コード&リンク):30以上500以下の整数の和を求めるプログラム作成する。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: PAD 2 [3.3] 言語:C言語 [4] 期限: 1/9 12:00 [5] その他の制限:どうぞ宜しくお願いしますm(..)m
>>342 #include <stdio.h>
int main(void)
{
int i,sum=0;
for (i=30; i<=500; i++)
sum += i;
printf("%d", sum);
return 0;
}
>>340 なるほど、通常ありえないスペルミスを混入することで(ry
>>342 #include <stdio.h>
int main(void)
<%
printf("sam = %d\n", (500-30+1) * (30+500) / 2);
return 0;
%>
>>344 なるほど、最近見かけることのないイーグルサムを混入したのですね
348 :
yasu :2009/01/07(水) 17:40:03
解答ありがとうございます。 助かりました!!
349 :
238 :2009/01/07(水) 18:00:13
>>245 遅くなってすみません。ありがとうございます。
350 :
yasu :2009/01/07(水) 18:15:23
[1] 授業単元: C言語プログラミング基礎 [2] 問題文 nを入力し、1からnまでの3の倍数と5の倍数の和を求めるプログラム作成する。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: PAD 2 [3.3] 言語:C言語 [4] 期限: 1/9 12:00 [5] その他の制限:できるだけ簡単な関数でお願いします。 どうぞ宜しくお願いしますm(..)m
犯人はヤス
>>350 #include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
printf("%d\n", sum(n));
/*for (n=0; n<=100; n++) printf("%3d : %d\n", n, sum(n));*/
return 0;
}
int sum(int n)
{
return s(n / 3) * 3 + s(n / 5) * 5 - s(n / 15) * 15;
}
int s(int n)
{
return n * (n + 1) / 2;
}
>>334 すいません少し訂正します
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下に記載
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:cygwin
[3.3] 言語: C++
[4] 期限:1/10 24:00
[5] その他の制限:簡単な関数とクラスでお願いします
次のように、整数値を表すクラスを設計する
データメンバ
x:xの座標(ただし 0-1000とする)
y:yの座標(ただし 0-1000とする)
z:zの座標(ただし 0-1000とする)
メンバ関数
void setX(int a): xの座標を設計する(範囲外の値は、error messageを出力する)
void setY(int b): Yの座標を設計する(範囲外の値は、error messageを出力する)
void setZ(int c): Zの座標を設計する(範囲外の値は、error messageを出力する)
int getX(): Xの座標値を得る
int getY(): Yの座標値を得る
int getZ(): Zの座標値を得る
結果は、次のように表示する
Please Input X
3
Please Input Y
1000067
The value of Y is a mistake, Please input Y again!
5
Please Input Z
7
The result is: (3,5,7)
355 :
デフォルトの名無しさん :2009/01/07(水) 18:47:08
質問者が過去の質問を見てるわけねえだろアホ ましてや問題文のリンクしかみんな書かないんだから既出とかわかんねーよ
なんだこいつ
360 :
yasu :2009/01/07(水) 19:17:27
>>355 /* この問題、見るたびに最大桁数が小さくなってるのは気のせいだろうか */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int a[3], i, j;
for (i = 0; i < 3; ++i) {
a[i] = 0;
int c;
j = 0;
while ((c = getchar()) != '\n') {
if (!isdigit(c) || (j == 0 && c == '\n')) {
puts("error.");
return 1;
}
if (j < 5) a[i] = a[i] * 10 + c - '0';
++j;
}
}
printf("%d + %d + %d = %d\n", a[0], a[1], a[2], a[0] + a[1] + a[2]);
return 0;
}
362 :
デフォルトの名無しさん :2009/01/07(水) 19:37:54
[1] 授業単元: C言語 [2] 問題文 20から10までの整数を順番に空白で区切って、表示し改行するプログラムを作る。 whileを使うこと。 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:Visual Stdio 2008 [3.3] 言語:C言語 [4] 期限: 1/10 [5] その他の制限:できるだけ簡単な関数でお願いします
>>362 #include <stdio.h>
int main(void)
{
int n = 20;
while (n > 10) printf("%d ", n--);
printf("%d\n", n);
return 0;
}
365 :
デフォルトの名無しさん :2009/01/07(水) 19:48:08
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
>>292 ソートするのは反則じゃないか?
ハッシュ法と答えて欲しいんじゃないかと
369 :
yasu :2009/01/07(水) 22:00:49
>>352 初心者なので、ソースを見ても分からなかったので、nを入力し1からnまでの3の
倍数の和を求めるプログラムを宜しくお願いします。
[1] 授業単元: C言語プログラミング基礎
[2] 問題文 nを入力し、1からnまでの3の倍数の和を求めるプログラム作成する。
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: PAD 2
[3.3] 言語:C言語
[4] 期限: 1/9 12:00
[5] その他の制限:できるだけ簡単な関数でお願いします。
どうぞ宜しくお願いしますm(..)m
>>367 #include <stdio.h>
int main(void)
{
int r = 12345, a = 997, c = 1, m = 65536;
double x, sum = 0.0;
int i;
for (i = 0; i < 100; i++) {
r = r*a + c;
r = r % m;
x = (double)r/m;
sum += x;
printf("%.4f ", x);
if (i % 10 == 9) {
putchar('\n');
}
}
printf("\nmean=%.4f\n", sum / 100.0);
return 0;
}
>>369 #include <stdio.h>
int main(void)
{
int n,sum=0;
int i;
do{
printf("整数nの値を入力せよ:");
scanf("%d",&n);
if(n<1)
printf("1以上の整数値を入力せよ。\n");
}while(n<1);
for(i=1; i<=n; i++)
if((i%3)==0)
sum = sum + i;
printf("\n");
printf("1から%dまでの3の倍数の和は%dです。\n",n,sum);
return 0;
}
373 :
nyao :2009/01/07(水) 22:31:31
[1] 授業単元:自由課題
[3]環境
OS:Mac
コンパイラ名とバージョン:よくわかりません。g++ ファイル名で実行してます。
言語:C++言語
[4] 期限:1/10
自由課題で「かぶ」を作っています。
ベースは自分で何とか作れたんですが、条件付けが難しくてできません。このプログラム→
http://sugar310.dip.jp/cgi/upload/source/up15160.txt に、プログラム内に書いてあるルールを参考にして以下の6つの条件を付け足して欲しいです。
@ランダムに発生する数値から0を除外する。
(0が出たら「ランダムに発生」を繰り返す。)
Aif(v==9||w==1){
cout <<「「クッピン」で勝負だ」<<"\n";
↑
v==1||w==9でも
cout <<「「クッピン」で勝負だ」<<"\n";
Bif(v==4||w==1){
cout << 「「シッピン」で勝負だ」<<"\n";
↑
v==1||w==4でも
cout <<「「シッピン」で勝負だ」<<"\n";
C3が3枚のときは
cout << 「「アラシ」で勝負だ」<<"\n";
D2枚もしくは3枚の合計が20より大きいときは
cout << 「「ブタ」で勝負だ」<<"\n";
E2枚もしくは3枚の合計が10もしくは20になれば
cout << 「合計は10(20)だから「ニゲ」だ」 << "\n";
→1番最初のランダムに数字を発生させるところに戻る
よろしくお願いします!><
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 2項分布Pa,q(x)=Ca,b ・q^b・(1-q)^(a-b)を実装せよ。 またaを大きくして出力せよ。 [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2009年1月8日 [5] その他の制限: 特になし
>>369 誰か、このPAD 2って環境知ってる?
[1] 授業単元:アルゴリズム入門
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8558.c [3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 1月8日10時まで
[5]その他の制限:特になし
L69で適当な(文字列s の最初のn 文字のハッシュ値を返す)ハッシュ関数を定義し、mystrstr hash1() を完成させよ。
また、それを利用するメイン関数を作成し、実行せよ。
その後L71以降のローリングハッシュを用いてプログラムを改良せよ。
適切なハッシュ関数の定義だけでもお願いします。
377 :
yasu :2009/01/07(水) 23:07:23
>>372 ソース解読できました。
解答ありがとうございます。
378 :
デフォルトの名無しさん :2009/01/07(水) 23:39:58
[1] 授業単元:コンピュータ工学 [2] 問題文(含コード&リンク):行列式で二元連立方程式を解く {a1X+b1Y=C1 未知の定数:X、Y [3] 環境 a2X+b2Y=C2 変数:a1,a2,b1,b2,C1,C2 [3.1] OS: Windows vista business [3.2] コンパイラ名とバージョン:VC [3.3] 言語: C [4] 期限:無期限 [5] その他の制限:基礎全般はやってます。いきなりの宿題で困ってます;; すみませんよろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 次の処理を行うプログラムを書きなさい 1; [80A1h] ← (B+C)*2??[80A0h]*3 オーバーフローは考慮不要 2; [80B3h] [80B2h] ←[80B0h] +[80B1h] *2 和を16ビットで求める(分岐命令を使用してもよい) 3; A ← B ・C + H ・L (論理演算) [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: [2009年1月8日 [5] その他の制限: なし どれか一つでいいので教えてください まったくわかりませんww
>>378 定数と変数の違いとか、プログラム以前に数学を勉強した方がいい
>>327 for (A; B; C) {
XXXXX
}
を
A;
while (B) {
XXXXX
C;
}
に機械的に置き換えればいい。
382 :
デフォルトの名無しさん :2009/01/08(木) 00:14:29
>>379 C言語じゃなくてZ80アセンブラじゃね?ww
;2
LD DE,80B1H
XOR A
LD B,A
LD H,
LD A,(HL)
LD B,A
DEC HL
LD A,(HL)
ADD A,B
ADD A,B
384 :
383 :2009/01/08(木) 00:29:34
途中で送信してしまった。まあいいや
>>384 らめえええぇぇぇ!!
ゴメンコンピュータはさっぱりなんだ
なんでコンピュータ系に行ったんだ・・・俺・・・
386 :
デフォルトの名無しさん :2009/01/08(木) 01:56:11
>373 >「0が出たら『ランダムに発生』を繰り返す」 必要性が分からない。+1すりゃいいんでないのか? >375 不明。プログラム図面で考えろってことかね?
>376 L69、L71って何ですか?
388 :
デフォルトの名無しさん :2009/01/08(木) 03:50:41
[1] 授業単元:Computer Programming II ─ A リスト構造 ─
[2] 問題文(含コード&リンク):
例題12_3を参考にして,次のようなプログラムを完成せよ。
・探索キーとして名前を入力し,入力と一致した場合,その名前と年齢を印字することを繰り返す。
・Ctrl-Dが入力されたとき,プログラムを終了する。
ただし,文字列の比較のためにstrcmpを利用する。利用方法を以下に示す。
#include<string.h>
int strcmp(const char* str1,sonst char* str2);
【戻り値】str1 > str2 ならば正値(1)
str1 = str2 ならば0
str1 < str2 ならば負値(-1)
以上,問題終わり■
(^^)例題12_3(^^)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8564.txt [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年1月8日10:30まで
[5] その他の制限:デキる人にとっては難しくないらしいです。
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): 2段階シンプレックス法を解くプログラムを作成せよ [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 1月9日まで [5] その他の制限: 特になし よろしくお願いします
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・関数mainから2つのint型の変数を受け取って2つの変数の中身を入れ替える関数swapを作成せよ. #include <stdio.h> void swap(int *a, int *b); int main(void) { int x, y; printf("x="); scanf("%d",&x); printf("y="); scanf("%d",&y); printf("x=%d,y=%d\n",x,y); swap(&x,&y); printf("x=%d,y=%d\n",x,y); return 0; } void swap( void swap(の後をお願いします。 実行例 x=9↓ y=3↓ x=9,y=3 x=3,y=9 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2009年1月11日(日)まで [5] その他の制限: 値渡し、参照渡しは習いました。 宜しくお願いします。
>>391 void swap(int *a, int *b) {
int x=*a;
*a=*b;
*b=x;
}
395 :
デフォルトの名無しさん :2009/01/08(木) 11:24:24
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS: WindowsVista SP1 [3.2] コンパイラ名とバージョン: Visual Stdio 2008 [3.3] 言語: C [4] 期限: 2009年1月8日 AM11:50まで [5] その他の制限: できるだけ簡単にお願いします。ポインタや配列などは習っています 複数の整数のうち,指定した数で割り切れる整数の個数を求めるプログラムを作成せよ. 入力に関して キーボードから入力する整数の個数を入力し(最大で128に対応すること)改行する. 次に指定した数の整数をスペース1つずつ開けて1行で入力し,改行する. 最後に1つ整数を入力し,改行する.この最後に入力した値で割り切れるかどうか判定する. この一連の入力時,例題や解答例のような入力を促す文字等は決して表示しないこと. 出力に関して 割り切れる整数の個数を数値のみ (+改行)を出力する.指定した数値・改行以外の文字等の出力は一切行わないこと.
396 :
デフォルトの名無しさん :2009/01/08(木) 12:38:57
>>395 >>259 #include <stdio.h>
int main(void)
{
int data[128];
int i, n, d, c = 0;
scanf("%d", &n);
if (n > 128) n = 128;
for (i = 0; i < n; ++i) scanf("%d", &data[i]);
scanf("%d", &d);
for (i = 0; i < n; ++i) if (!(data[i] % d)) ++c;
printf("%d\n", c);
return 0;
}
メガネを掛けていて、ピッツァだったらメガネピッツァだろうがよぉ、紛れも無く
[1] プログラミング演習 (1) 日付データが入力された後、ファイルに保存するプログラムを書きなさい。 データのファイルはテキスト形式で、ファイル名は、day.txtとする。 データの形式は以下のとおり。 Y(改行)・・・データの1セットの始まりを表わす 96(改行)・・・年 07(改行)・・・月 12(改行)・・・日 以上を1セットとして入力する。 これを繰り返し入力する。Y 92 05 13 G・・・データの終わり(ファイルの終わり)を表わす。 ※ファイルへの出力は、fprintf関数を使う。書式は以下のとおり。 fprintf(FILE*fp,書式指定文字列、変数、変数、・・・) (2) (1)でファイルに出力された日付データを構造体に読み込んで、構造体に読み込まれた日付データを画面に表示するプログラムを書きなさい。 但し、読み込むデータの個数は、ファイルに保存されているデータの個数であり、ファイルによって変化する(固定されていない)ので、それに対応できるようなプログラムであること。 [3] 環境 [3.1] OS:Linux [3.2] Emacs [3.3] C言語のみでお願いします。 [4] 期限:早急にお願いします。
>>402 [3.2] Emacs こっちの方が突っ込みどころだと思った
>>401 gccだよな?
>>404 来年が早急じゃないという根拠でもあるのかね?
>>405 じゃなくて、それを言った奴の 感覚 についてなんだが?w
409 :
他人の真似しか出来ない低脳 :2009/01/08(木) 14:12:46
406 名前:デフォルトの名無しさん 投稿日:2009/01/08(木) 14:06:25
>>404 >>1
>>408 >>1 >[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
言葉の意味も知らずに、自分の感覚で答えるから、世間からズレてると 思われていると気づかない引きこもりが多いんだな、このスレってw 来年くらいで 早急 w
>>414 自分の感覚が絶対と思っているのは、
ひどい田舎者か、
引きこもりなんじゃね?
>>401 の者ですが、テンプレどおりに書かなくて迷惑かけてすみませんでした。
期限は2009年01月08日中にお願いします。
419 :
デフォルトの名無しさん :2009/01/08(木) 14:56:35
だれか
>>382 お願いします
……なにか不備があったのでしょうか。
>>419 とりあえず、「sample-11-1.c」ってなんだ?
>>401 です。
>>417 ありがとうございます。
ただ、今さっきわかったのですが
(1)で出来たday.txtの内容が
1回目 ××/××/××
2回目 ××/××/××
3回目 ××/××/××
・
・
・
N回目 ××/××/××
といった書き方でなければいけないようです。
後、構造体の配列と構造体の関数間での受け渡しを使用しなければならないらしいので、
お手数掛けますがもう一度(1)と(2)をお願いします。
>>421 >>1 >・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
424 :
デフォルトの名無しさん :2009/01/08(木) 15:40:53
>>420 すいません。書き忘れでした
下に書いてあるプログラムの名前です
426 :
デフォルトの名無しさん :2009/01/08(木) 16:24:01
[1] 授業単元:プログラミング演習 [2] 問題文 m*dv/dt=mg-kv をRunge-Kutta法で解き,抵抗係数k=0,0.1,0.15,0.3のときの 速度vの時間による変化を表せ。 なお質量m=0.1[kg],重力加速度g=9.8[m/s*s]とする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 1月9日 11:00 [5] その他の制限:とくにないです。 かなり急ぎの課題です。よろしくお願いします。
427 :
424 :2009/01/08(木) 16:30:18
すいません、
>>382 の課題お願いします……
もはや「おまえはもうしんでいる」状態なのでしょうか……
>>399 ありがとうございます
できれば簡単な関数でお願いしたいのですが……
431 :
デフォルトの名無しさん :2009/01/08(木) 16:40:08
[1] 授業単元:プログラミング演習 [2] 問題文 (d*d*y)/(d*x*x)=-M/(E*I)=W/(EI)*x をRunge-Kutta法で解き,片持ちばりのx方向におけるy方向 変異の分布を示せ。ただし,先端に集中荷重が負荷されている ものとし,ヤング率はE-206[GPa],集中荷重はW=30[N]とする。 求める図は文章での説明になります。 一方が壁に設置されていて厚さ5mm,オクイキが100mm 壁に設置されているところから500mm突き出ている物体です。 Wは突き出ている先端に上から下に向けてかかる力で, その点をoとします。oから壁へ向かう方向がx軸正方向, oから下へ向かう方向をy軸正方向とします。 わかりにくくてすみません。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 1月9日 11:00 [5] その他の制限:とくにないです。 かなり急ぎの課題です。よろしくお願いします。
433 :
424 :2009/01/08(木) 16:51:56
>>428 そのNODEっていうのは恐らく二分木の問題で使われてるNodeのことみたいですね。多分
わからなかったらNode使わなくていいですよ。
とりあえず、プログラムのKEY云々て列にある数値が入った二分木から標準入力でその数があればyes、無ければNoってだすプログラム作ってくれれば幸いです
>>430 言葉では何とでも言えるよな。
>>428 への回答はどうなってるんだ?
また、条件が追加されたら洒落にならんぞ。
こりゃ「おまえはもうしんでいる」状態だな。
本当に間違った事したと思ってます。
反省していますので、どうか
>>421 お願いします。
本当に時間がないんです。
438 :
424 :2009/01/08(木) 17:11:30
Nodeの定義は、下のプログラムで定義してあるのかとずっと思ってたんですが……違ったのですか? 問題文これしかなくて……
>>433 NODEとKEYを定義して、コンパイルしてみた。
KEY init_data[num_of_data]={50, 20, 70, 10, 30, 60, 100, 25, 65, 150};
で、gccだと、コンパイルエラーになる。
>>440 #include <iostream>
#include <algorithm>
int main()
{
char buf[80], a = 0;
int n = 0;
std::cout << "キーから文字を数文字入力してください";
std::cin >> buf;
std::cout << "調べる文字を入力してください= ";
std::cin >> a;
std::cout << "入力された文字列の中に m は、"
<< (n = std::count(buf, buf + 80, a))
<< " 個ありました。" << std::endl;
return 0;
}
どう見てもCじゃありません、本当にありがとうございまいました
442 :
デフォルトの名無しさん :2009/01/08(木) 17:30:42
>>444 お前、NODEがどんなものか解るんだろ。回答してやれよ。
俺はわかんね。
447 :
424 :2009/01/08(木) 18:10:56
>>442 ありがとうございます。
ちなみにgetsを使ったソースも教えてもらえると助かります。
getsの文とsizeifの文を比較してみたいので
>>449 while (...) {} に入る前に a=0; (
>>381 のAに相当)
while (...) {} 中の最後に ++a; (
>>381 のCに相当)
>>449 while(moji[a] != '\n')
>>450-451 あ、あれ。見直したら直す前のプログラムになってたorz
a=0;
while(moji[a] != '\n'){
if (moji[a] >= 'a' && moji[a] <= 'z')
++a;
}
s=a;
printf("英小文字の数 = %d\n",a);
こうでしょうか?
「文字列の長さ」の後反応がなくなるんです・・・
>>452 gets()だと\nが入らないので終了条件を'\0'にする
while(moji[a] != '\0')
>>453 ありがとうございます。
やってみたところ全部小文字で入力した場合は最後までいくのですが、一文字でも大文字が入ると途中でとまってしまうんです。
hello→最後まで
Hello→途中でとまってしまう
>>455 a=0;
while(moji[a] != '\0'){
if (moji[a] >= 'a' && moji[a] <= 'z') s++;
++a;
}
printf("英小文字の数 = %d\n",s);
>>456 できました
本当にありがとうございました!
458 :
デフォルトの名無しさん :2009/01/08(木) 20:42:58
>>460 別スレだったかも?質問してた人はちゃんと出来てた。
[1] 授業単元: 科学実習T [2] 問題文: 配列に順番に入力した数字を代入するプログラムを作れ。 すなわち、例えば以下のようなものを作れ。 1度目にinput_number()で入力した数を、numbers[0]に代入し、 2度目にinput_number()で入力した数を、numbers[1]に代入し、 … n 度目にinput_number()で入力した数を、numbers[n-1]に代入する。 input_number()という関数は、自分で定義するように。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2009年1月13日 お願いしやす
これも頼む [1] 授業単元: 科学実習T [2] 問題文: 配列に代入された数値を小さい順に並べ変えるプログラムを作れ。 ただし、数値は配列numbers[]にすでに代入されているものとし、変数nには代入された数値の個数が代入されているものとする。 (例) int numbers[10] = { 82, 47, 2, 29, 95, 15, 38, 66, 51, 72 }; int n = 10; (注意) このプログラムを実行すると、並べ変えを終えた配列ができる。 この配列は、元のnumbers[]の中身が並べ変わったものでも良いし、別の配列を作って、そ の中に並べ変えた数値が代入されているのでも良い。 出来上がった配列の要素を順に表示すると 2, 15, 29, 38, 47, 51, 66, 72, 82, 95 のようになる。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2009年1月13日
467 :
デフォルトの名無しさん :2009/01/08(木) 22:21:47
どなたか
>>426 >>431 をお願いします。
コンパイラ名ってのがよくわからないんですが
gccとか打ってコンパイルしてます
[1] 授業単元:プログラム技術 [2] 問題文(含コード&リンク): char str[5][10] = { "home", "arow", "abec","bobo" }; という二次元配列があったとして、この配列に格納されている文字列を 格納されている配列番号とともに、アルファベット順に表示させるプログラムを作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003 [3.3] 言語:C++ [4] 期限:特になし [5] その他の制限:特になし よろしくお願いします。
469 :
367 :2009/01/09(金) 00:18:53
>>465 #include<stdio.h>
#define N 10
int input_number() {
int v;
scanf("%d", &v);
return v;
}
int main() {
int i, v[N];
for (i = 0; i < N; i ++) {
v[i] = input_number();
}
for (i = 0; i < N; i ++) {
printf("%d\n", v[i]);
}
return 0;
}
>>466 #include<stdio.h>
int main() {
int numbers[10] = { 82, 47, 2, 29, 95, 15, 38, 66, 51, 72 };
int n = 10, i, j, t;
for (i = 0; i < 10; i ++) { printf("%d ", numbers[i]); }
printf("\n");
for (i = 0; i < 10-1; i ++) {
for (j = i+1; j < 10; j ++)
if (numbers[i] > numbers[j]) {
t = numbers[i];
numbers[i] = numbers[j];
numbers[j] = t;
}
}
for (i = 0; i < 10; i ++) { printf("%d ", numbers[i]); }
printf("\n");
return 0;
}
>>468 #include<iostream>
#include<string>
#include<map>
int main() {
char str[5][10] = {"home", "arow", "abec","bobo", "dummy"};
typedef std::map<std::string, int> Map;
Map m;
for (int i = 0; i < 5; i ++)
m.insert(Map::value_type(str[i], i));
for (Map::const_iterator it = m.begin(); it != m.end(); ++ it)
std::cout << it->second << ":" << it->first << std::endl;
return 0;
}
>>472 すみません、
map関数とdummyデータを使わずにやることはできませんか?
ふざけてんのか
>>473 char str[5][10] = {"home", "arow", "abec","bobo"};
typedef std::multimap<std::string, int> Map;
#include <iterator> #include <cstring> int main() { char *str[5] = {"home", "arow", "abec","bobo"}; char *str2[5]; std::partial_sort_copy(str, str + 4, str2, str2 + 4, strcmp); std::copy(str2, str2 + 4, std::ostream_iterator<char *>(std::cout, "\n")); return 0; }
280と282で教えてもらったプログラムの 2と4が動かないんですが何が悪いんでしょうか
お前の頭
>>478 おいっ、基地外、鏡を見ろよ。ほれ、何が映った?
出来の悪い面が映ったよな?それ、誰の面だ?お・ま・え・の・だ・よw
やぁ先生、見てるかい?
[1] 授業単元: C言語 [2] 問題文: スタックを操作する関数 push()とpop()を作れ。 (注意)次のようなmain()を使って、push(int v), int pop()の動作を確かめよ。 #include <stdio.h> main() { int d; push(1); push(2); push(3); d = pop(); printf("First data = %d\n", d); d = pop(); printf("Second data = %d\n", d); push(4); d = pop(); printf("Third data = %d\n", d); push(5); d = pop(); printf("Fourth data = %d\n", d); d = pop(); printf("Fifth data = %d\n", d) }
---------------- 結果は、 First data = 3 Second data = 2 Third data = 4 Fourth data = 5 Fifth data = 1 と表示します。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2009年1月20日
483 :
デフォルトの名無しさん :2009/01/09(金) 07:08:38
484 :
483 :2009/01/09(金) 07:16:27
OSはXPでも問題ないです コンパイラ名とバージョン:gcc -o でお願いします 追記すいません
485 :
デフォルトの名無しさん :2009/01/09(金) 08:33:00
>>481-482 #include <stdio.h>
int a[100];
int sp=0;
void push(int v){a[sp++]=v;}
int pop(){return a[--sp];}
int main(){
/*省略*/
printf("Fifth data = %d\n", d) ←
>>482 はセミコロン抜けてる
}
>>485 数値解析系の宿題は需要、供給ともに少ないから
なかなか回答者は現れないだろうなあ。
488 :
デフォルトの名無しさん :2009/01/09(金) 11:18:04
[1] 授業単元:プログラミング [2] 問題文 次に示すTableのデータに関して,以下の計算を行う. (1)1次式を当てはめてその式を示す.同時に2乗累積誤差Eを求める. (2)2次式を当てはめて上と同じことを行う. (3)2次式を当てはめて上と同じことを行う. Table X=-4,Y=13.4 X=-3,Y=7.2 X=-2,Y=2.7 X=-1,Y=1.2 X=0,Y=0.6 X=1,Y=3.1 X=2,Y=6.9 X=3,Y=12.5 X=4,Y=20.8 X=5,Y=31.7 X=6,Y=44.0 [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: Microsoft Windows XP [Version 5.1.2600] [3.3] 言語: C言語 [4] 期限: 2009年1月10日15:00まで [5] その他の制限: ありません よろしくお願いします.
>>485 ルンゲクッタと書かれては問題見る気もしないんだ
お前が急いでるかどうかは回答者にはどうでもいいことなので関係ないんだ
>>426 ちなみに
v(t)=mg/k+(v0-mg/k)exp(-kt/m) (k!=0.0)
v(t)=gt (k==0.0)
だと思ふ
[1] 授業単元:システム設計2 [2] 問題文:1〜100の間で数当てゲーム [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:cygwin-b20 [3.3] 言語: C [4] 期限: [2009年1月12日15:00まで] [5] その他の制限: 標準ライブラリはなるべく使わないようにお願いします。 以上お願いします。
APIをつかって入力と出力をしろというのか
どなたか
>>401 を
>>421 の条件で本当にお願いします。
期限が今日なので17時までで、できれば早めにお願いします。
構造体の関数間での受け渡しはsub関数でお願いします。
>>488 2乗累積誤差ってのがわからん。
式を適当に決めて誤差を求めるだけでいいのか?
それとも誤差を最小にするような式を求めろってこと?
(3)は3次式の間違い?
コンパイラは何だ?
>>431 I の値は?
Eの値は 10^-206 * 10^9 [Pa] ? それとも - は = の typo で E=206*10^9 [Pa] ?
# 断面2次モーメントなんて知らない
499 :
デフォルトの名無しさん :2009/01/09(金) 15:10:43
500 :
デフォルトの名無しさん :2009/01/09(金) 15:13:05
>>488 です
>>496 から説明不足で質問をいただいたので
式を求める必要はありません。誤差を求めることが、この課題の目的です。
また(3)は3次式の間違いでした。申し訳ないんですが訂正させてください。
コンパイラはコマンドプロンプトだと思います。
よろしくお願いします。
コンパイラはコマンドプロンプト コンパイラはコマンドプロンプト コンパイラはコマンドプロンプト だいじなところですからさんかいいいました
502 :
デフォルトの名無しさん :2009/01/09(金) 15:19:05
>>501 すみません。よくわからないんです。
普段は「bcc32」とか打ってコンパイルしてます。
安くない授業料も払って、マジメに出席して、 宿題が出来ないどころか、丸投げも出来ない程度にしかならないなんて、 詐欺も良いところだな。
おめー、詐欺ってのは高度な知能が必要なんだぞ。 言うなら「クズ」だろ。
低レベルの詐欺でも、騙される側が低レベルなら引っかかるんだよな・・・ 振り込め詐欺は家にもかかってきたが、回避したぞ
>>500 SSEとかいわれる奴だろ?>自乗累積誤差
double e = 0;
int i;
for (i=0; i<11; i++) {
e += pow(Y[i] - f(X[i]), 2.0);
}
たぶんこんな感じ。
n次式の当てはめ(f(x)を求める)は忘れたから誰か頼む。
1次式にしても Y[i] = a*X[i] + b とするか(2計数) a*X[i] + b*Y[i] + c = 0 とするか(3計数) 当てはめ(≒計数決定)をどうするのか? 上の累積二乗誤差を最小にするような計数を求めるのか? / 人間が適当に決めるのか? etc.
>>500 最少二乗法みたいにやるのかと思ったんだけど、
式求めずに誤差求めるだけでいいってのは、
たとえば(1)で、1次式をX=0として誤差求めるだけでもいいのか?
>>501 >>488 では
コンパイラ名とバージョン: Microsoft Windows XP [Version 5.1.2600]
なんだぜ
510 :
デフォルトの名無しさん :2009/01/09(金) 16:12:33
ぼすけて
何か一匹、頭のおかしいのが紛れ込んでいるが、スルーよろしく。あぁきめぇ、鏡を見ろよw
514 :
492 :2009/01/09(金) 16:39:24
>>513 ありがとうございます。ランダム関数の使い方が分からなかったので勉強になりました。
515 :
デフォルトの名無しさん :2009/01/09(金) 17:49:04
[1] 授業単元: プログラミング2 [2] 問題文課題7-2 以下の条件を満たすプログラムを作成する。どの程度の機能が実装されているかなどによって加点する。以下に挙げたもの以外の機能が実装してある場合にも加点がある。 なんらかのデータを扱うプログラムであり(非常にユニークなものの場合は加点がある)、データをファイルから読み込む機能と、書き込む機能がある。 例: 自分の持っている音楽CD(コレクションしているものなど)を管理するデータベースプログラム 毎日の収入・支出を管理する(家計簿)プログラム 画像ファイルを扱うプログラム 音声ファイルを扱うプログラム 新しいデータ(もしくはデータの一部分)を追加する機能、特定のデータ(もしくはデータの一部分)を削除もしくは修正する機能がある データのソート(並び替え)を行う機能がある。 ソートを行うことが適切でないデータの場合(音声データや画像データなど)は、 そのデータにあったなんらかの処理を加える機能でも良い データから特定の部分のみを取り出して表示(もしくは保存)する機能がある 構造体を使用している 構造体のポインタを引数として持つ関数を使用している enum型を使用している、もしくはプリプロセッサ「#define」を使用している [3] 環境 [3.1] OS:Windows [3.2] [3.3] 言語:C [4] 期限:2009年1月23日まで
何だろうと思って鏡見たけど別にきもいのは写らなかった。
>>511 は鏡にきもいのが写ったの?
517 :
デフォルトの名無しさん :2009/01/09(金) 18:00:11
誰も個人を特定、指定してレスしていないのに、そのレスに反応したってことは 心当たりがあるんだろう。聞かれてもいないことをわざわざ答える、それは 認めたくないが否定している意思を他人にも認めてもらいたいという心の表れ。 要するに、反応してレスした奴は、鏡を見てキモイ面が映ったんだろうよw
> 何か一匹、頭のおかしいのが紛れ込んでいるが そう、自分のことを言われたわけでもないのに、反応しちゃったわけだ。 それが何を意味しているか、分かるよな?頭のおかしい奴に対して 鏡を見ろと言ったのに、自分は・・・あぁ、そうか、お前はキモイ一匹だったのかw
>>515 何処が例で何処までが要件かわからねーよ
しね
>>518 > 何か一匹、
「答えは筆者自身」で、FAだろ。
521 :
デフォルトの名無しさん :2009/01/09(金) 18:17:20
いんや、誰もあんた個人を特定して言ってはいないが?ただ、反応したのはあんただろw
522 :
デフォルトの名無しさん :2009/01/09(金) 18:18:44
鏡を見て、映ったものをどう思ったか、報告しろとも言ってないよぉ〜?ん? 何で反応したの?心当たりがあるからだろ?w
523 :
デフォルトの名無しさん :2009/01/09(金) 18:19:01
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 簡単なゲームをクラスを用いて作れ 条件 魔王のHPをランダム(300〜500の範囲)攻撃力もランダム(25〜50)で表示 勇者のHPもランダム(100〜200)で表示 攻撃力とマジックポイントをランダムで2つを足して50になるようにする 勇者は回復魔法(名前は任意)を使えることにする 消費MPは10、回復幅はランダム(30〜100)はじめに決まったHP限界値は超えないものとする 攻撃はターン制とし(先攻後攻はランダム)Enterを押すごとに進めるようにする 勇者は攻撃と回復をキーボード(例 1.攻撃 2.回復)で選べるようにする HPは攻撃力の数値分減っていく 表示例 Maoh HP 400 Attack 40 Yusha HP 150 MP 25 Attack 25 Battle Start!! Maoh's turn! Yusha Damage 40 HP110 Yusha's turn! Attack or Recovery Maoh Damage 25 HP 375 or Yusha Recovery 80 HP 150 ... Maoh died! You Win!! [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:Visual studio 2005 ver8.0 [3.3] 言語:c++ [4] 期限:1/10 23:59:59 [5] その他の制限: わかりやすい関数でお願いします
>>515 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
#define BUF 100
typedef struct XX { int number; int data;} X;
enum {FALSE = 0};
void get(char *input){
fgets(input, BUF, stdin);
strtok(input, "\n");}
int cmp_num(const void *a_, const void *b_){
const int a = ((X *)a_)->number, b = ((X *)b_)->number; return a < b ? -1 : a > b ? 1 : 0;}
int cmp_data(const void *a_, const void *b_){
const int a = ((X *)a_)->data, b = ((X *)b_)->data; return a < b ? -1 : a > b ? 1 : 0;}
int main()
{ X a[MAX] = {{0, 0}}; char input[BUF]; int number = 1, i;
while (1) {
puts("1.入力順でソートする, 2.値でソートする, " "3.表示, 4. 数字入力, それ以外は終了");
get(input);
if (!strcmp(input, "1")) qsort(a, MAX, sizeof(X), cmp_num);
else if (!strcmp(input, "2")) qsort(a, MAX, sizeof(X), cmp_data);
else if (!strcmp(input, "3")) {
for (i = 0; i < MAX; ++i) if (a[i].number != 0) printf("%3d. %10d\n", a[i].number, a[i].data);
} else if (!strcmp(input, "4")) { get(input);
for (i = 0; i < MAX; ++i)
if (a[i].number == 0) {
a[i].number = number++;
a[i].data = atoi(input);
break; }
} else break; }
return 0;}
>>496 データをDi 、Di の平均をEとして
Σ(Di - E)^2
を行っていると思います。テイラー展開とかフーリエ級数展開とかで大活躍な指数っぽいです。
528 :
デフォルトの名無しさん :2009/01/09(金) 20:03:25
1] 授業単元: C言語基礎 [2] 問題文:正の整数nを7進数(10桁以内とする)で入力した数値に7進数の5を加算した結果を表示するプログラム [3] 環境 [3.1] OS: Windows ビスタ [3.2] コンパイラ名: CPad for LSIC-86 [3.3] 言語: C言語 [4] 期限: 1月10日 [5] その他の制限:出来るだけ簡単な関数でお願いします。
>>527 でも、オレはそれを分散と習った気がする。
あと、累積二乗誤差をググれ。
スレ違いですまんが、分散だったら個数で割るみたいな計算が入ると思う
多分だが
>>488 は、
>>509 の質問に答えるべき
531 :
デフォルトの名無しさん :2009/01/09(金) 22:37:41
[1] 情報処理 [2] エングセットの公式を計算して0.751という値を求めるプログラム (20 C 3 )0.6^3 Pb = ---------------------- = 0.751 3 Σ ( 20 C k ) 0.6^k k=0 [3] 環境 [3.1] WindowsXP [3.2] VC 6.0 [3.3] C++ [4]1月13日 [5] その他の制限:式中のCというのはコンビネーションです。できるだけ簡単な関数でお願いします。
>>531 マルチ死ね
#include <iostream>
int main()
{
std::cout << (20.0 * 19 * 18 / 1 / 2 / 3 * 0.6 * 0.6 * 0.6) /
((1 + 20.0 * 0.6+
(20.0 * 19 / 1 / 2) * 0.6 * 0.6 +
(20.0 * 19 * 18 / 1 / 2 / 3) * 0.6 * 0.6 * 0.6)) << std::endl;
}
できるだけ簡単にとのことなので関数は使わないでおきました
535 :
デフォルトの名無しさん :2009/01/09(金) 22:53:49
ごめんなさい。 本当に困っています。
困ってたらなにをしてもいいのか? 金がなければ強盗するのか?
[1] 授業単元:プログラミング演習 [2] 問題文: 直径1長さ1の円柱がある。体積をモンテカルロ法で計算せよ。 一辺が1の立方体を考え、3個の乱数で立方体内の点のxyz座標を発生させ, その点が物体の内部に落ちるかどうかを判定する。内部に落ちる確率が体積に比例することから体積が見積もれる。 [3]環境 [3.1] OS:windows xp [3.2] コンパイラ名とバージョン:visual C++ 2008 Express Edition [3.3] 言語:C [4] 期限:1月11日まで [5] その他の制限:特にありません。 よろしくお願いします。
>>478 自分の頭が悪いのは承知しています。
プログラム的なことでお願いします。
>>528 VistaでLSIC-86と言うのに吹いたので助けてやりたいが
int型が2byteだって?7^10 をどうやって格納するんだ?
まさか自分で長桁整数型を実装するのか?
他のコンパイラなら
char a[11]にscanfで文字列を受けてから
while( a[ i ] != '\0' ){ r = 7 * ( r + a[ i ] - '0' ); i++ }
で終わりのはず
540 :
539 :2009/01/09(金) 23:34:36
おっと、5を足してないけど7進数で5は10進数でも5だから関係ないな 表示は10進でもいいんだろ?そう書いてないし。
541 :
デフォルトの名無しさん :2009/01/09(金) 23:42:26
1] 授業単元: C言語 初級 [2] 問題文:数字を入力して、その値の桁数を求めて、表示するプログラムを作る [3] 環境 [3.1] OS: Windows XP [3.3] 言語: C言語 [4] 期限: 1月11日 [5] その他の制限:簡単な関数でお願いします。 テスト前です。宜しくお願いします。
542 :
デフォルトの名無しさん :2009/01/09(金) 23:50:22
>>539 C言語のテスト前で、その問題は過去問題です。試験対策でお願いしました。
なにぶん、まだ、素人です。細かいことは分からない部分あります。
たぶん、10進数で表示すると思います。
コンパイラ名を書けって言ってんだろ!
>>539 long 型は普通に使えるんじゃなかろうか
545 :
デフォルトの名無しさん :2009/01/09(金) 23:57:31
試験は筆記試験なのでコンパイラはあまりかんけいないのではと思います。
LSIC86と聞いて加勢するぜ。 ごちゃごちゃしてるが10ケタでもOKのはずだ。 #include <stdio.h> #include <string.h> int main(void) { int i; char a[12], b[12]; scanf("%s", a+1); a[0] = '0'; for (i=0; i<strlen(a); i++) { b[i] = a[i] - '0'; } b[i-1] += 5; for (i=strlen(a)-1; i>=0; i--) { b[i-1] += b[i]/7; b[i] %= 7; } if (b[0]) putchar(b[0]+'0'); for (i=1; i<strlen(a); i++) { putchar(b[i]+'0'); } return 0; }
547 :
デフォルトの名無しさん :2009/01/10(土) 00:04:38
ありがとうございます。感謝しています。
>>541 #include <stdio.h>
int main(void)
{
int n, i;
scanf("%d", &n);
for (i = 0; n >= 1; ++i) n /= 10;
printf("%d桁\n", i);
return 0;
}
549 :
デフォルトの名無しさん :2009/01/10(土) 00:18:39
ありがとうございます。
>>541 #include <stdio.h>
#include <math.h>
int main(void)
{
int n;
scanf("%d", &n);
printf("%d digits\n", 1+(int)log10(n));
return 0;
}
[1] 授業単元:休日プログラミング [2] 問題文(含コード&リンク): 6畳間の畳の敷き方を1つ求めるプログラムを作成せよ。 畳は1×2の長方形であり、6畳間は3×4の長方形である。 4枚の畳の角が一か所に集中する敷き方は縁起が悪いので避けること。 表示の仕方は問わない。 可能なら以下の機能を実現せよ。 ・全ての敷き方を求める ・6畳間以外に対応する [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:VC++2008EE [3.3] 言語:C、C++のどちらでも可 [4] 期限:2009/01/12 24:00:00 [5] その他の制限:コマンドプロンプトで実行できること。 よろしくお願いします。
554 :
デフォルトの名無しさん :2009/01/10(土) 04:28:14
[1] 授業単元: C言語 入門 [2] 問題文(含コード&リンク): 簡易整数電卓プログラム 仕様は ・数式を入力すると計算結果を表示 ・四則演算、括弧、べき乗、階乗、が使える ・扱うのは整数(intの範囲) ・演算子の優先順位を守る(乗法・除法が先。べき乗は後ろから計算) ・+と−の単項演算子が使える(-1+5等) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: わかりません・・・ [3.3] 言語: C [4] 期限: 2009/01/14 23:59 提出〆 [5] その他の制限: 特にありません。 テスト前なのにこの課題1つに1週間も悩んでます・・・ 検索とかしてみたのですが、どうしても解りませんでした。 長くなってしまうかもしれませんがよろしくお願いします。
558 :
デフォルトの名無しさん :2009/01/10(土) 10:12:08
>>483 >>484 どなたかお願いできないでしょうか
スタックを使う問題なんですが
期限は今日中です
>>558 #include <stdio.h>
typedef struct stack_ {
char d[128];
int p;
} Stack;
void push(Stack *s, char c) { s->d[(s->p)++] = c; }
void pop(Stack *s) { s->d[(s->p)--] = '\0'; }
int main(void)
{
Stack s;
s.p = 0;
push(&s, 'A'); push(&s, 'B'); push(&s, 'D'); push(&s, 'I'); pop(&s); puts(s.d);
pop(&s); push(&s, 'E'); push(&s, 'J'); pop(&s); puts(s.d);
push(&s, 'K'); push(&s, 'O'); pop(&s); puts(s.d);
pop(&s); pop(&s); pop(&s);
push(&s, 'C'); push(&s, 'F'); pop(&s); puts(s.d);
push(&s, 'G'); push(&s, 'L'); pop(&s); puts(s.d);
pop(&s); push(&s, 'H'); push(&s, 'M'); push(&s, 'O'); pop(&s); puts(s.d);
pop(&s); push(&s, 'N'); pop(&s); puts(s.d);
return 0;
}
561 :
デフォルトの名無しさん :2009/01/10(土) 13:25:26
ナンバーサイン野郎きめぇお( ^ω^)
562 :
デフォルトの名無しさん :2009/01/10(土) 13:33:32
訳の分からない#をいちいちつける目立ちたがり屋、ナンバーサイン(笑)
563 :
558 :2009/01/10(土) 13:33:43
>>559 >>560 ほんとにありがとうございました!
これから自分なりに理解してみようと思います
ナンバーサインってなんぞ?
[1] 画像処理 [2] BMP画像(カラー)をネガポジ反転するプログラムを作成せよ。 ピクセルはRGBで3つ、最大値は255とする。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] C言語 [4] 1月12日 [5] 特にありません。 よろしくお願いします。
元となる画像を出さないとトラブルの元
>>566 この種の依頼をするやつは、BMPが何かも知らない。JK
井桁の方が分からんやつ多いんじゃないか、若い連中には
シャープに似てる奴、でいいか
572 :
デフォルトの名無しさん :2009/01/10(土) 14:56:26
573 :
572 :2009/01/10(土) 15:17:48
すいません >今n枚のカ−ドに書かれている数字を次のような数列で表すものとする。 これは依頼した問題には出てこない要素なので無視してください。
574 :
572 :2009/01/10(土) 15:19:53
度々申し訳ございません。 環境はLinuxじゃなくてwindows XPでした……
576 :
537 :2009/01/10(土) 16:10:37
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
∩___∩ | ヽ / ● ● ヾ おいしいクマ | ( _●_)。. | 彡、 ) ヽノ.(⌒ヽ`ミ ww/ _wWww\ \ヽw Www wwWwwwwww (__ヽ二二フ ヽ ノ
その 草 、 腐 ってますよ?
583 :
572 :2009/01/10(土) 18:34:28
>>583 まあ、学校の宿題なら、まず、原文をアップしてくれないと
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 二重振り子を微小振動させるとして、厳密な数値解及び解析的な近似解を初期振れ角Θを機動時に指定して、 アニメーション表示させるプログラムを表示しなさい。 グラフィックはgnuplotでもEGGXでもどちらでもよい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2009年1月22日まで]
586 :
nyao :2009/01/10(土) 19:34:08
>>585 プログラムの実装より物理部分の方が難しいしwww
@厳密な数値解の式をよこせ
A近似解を求める運動方程式をよこせ
B解法の指定は?4次ルンゲ=クッタ?
C振り子の軸長さはいくつ?変数は振れ角それとも座標?初期振れ角は2つあるだろ?
解答されても俺は書かないけど、少なくともこれぐらいはないと誰も書いてくれないだろ
588 :
デフォルトの名無しさん :2009/01/10(土) 20:06:54
キーボードから入力したキーが、アルファベットの大文字ならば、小文字に変換して、画面に出力しなさい。 それ以外なら、そのまま画面に出力しなさい。 できる人お願いします。
589 :
デフォルトの名無しさん :2009/01/10(土) 20:08:10
>>589 本当に、原文に「正の自然数」って書かれてるの?
591 :
デフォルトの名無しさん :2009/01/10(土) 20:17:54
>>591 ひどいもんだな。
要件も不明だし、このままなんか作っても、なんやかんやで突っ返されるだろ
突っ返すのが楽しい人が作ったとしか思えん
あそこまでアルゴリズムを説明してくれてて何がわからないんだ?
そうかな?たしかにテスト項目とかないから曖昧だけど、授業のプログラムなんてそんなもんだろ やることはa[2k]の和とa[2k+1]の和を比較するだけだから文句のつけようもなくない? アルゴリズムは「先手の初手は問題文に書いてあるとおり・次手以降は後手の取った隣を取る」で終了だし
>>594 勉強し始めってのもあり知識不足という訳ですが、引き分けのときのプログラムがさっぱりで……
一応、授業内容は、とにかくこういうゲームをプログラミングしろってやつなんですよ
だから、自分はn枚分の整数をユーザが標準入力して、その上で先手が勝つルールを使って先手が勝てばいいのかと思ったのですが……
突っ返されたらその時、なんとか考えますので、作ってくれませんでしょうか……
>>594 オマエが何を理解してしまったのか心配だよ・・・
>>585 って本当に授業単元:Cプログラミングなのか?
もしそうなら、世の中にはレベルの高い大学もあるもんだなあと感心。
そうか? コンパイラ名とバージョンにgccしか書いてないし質問主のレベルは低いと思う
質問主のレベルが低くて学校のレベルが高いからここに来てるんじゃなかろうか
601 :
589 :2009/01/10(土) 21:59:58
すいません。今から先生にメールしてこの問題の不明な点を聞いてみるので、できれば変な所を教えてくれませんでしょうか
別に禁煙宣言しなくていいけど、
>>589 は実際にカードを作ってこのゲームを行うことができるの?
603 :
◆DMlEnlGjq. :2009/01/10(土) 22:25:01
[1] 授業単元:アルゴリズムとデータ構造1 [2] 問題文(含コード&リンク): ○プログラムを改良せよ。また、改良した部分をしるせ。 ・Dコマンドで削除する時、本当に削除してよいか確認できるようにせよ。 ・Iコマンドで学籍番号がちょうど4桁であることをチェックできるようにせよ。 ・Iコマンドで改行だけの氏名や学籍番号になってしまう。改行だけの場合、エラーメッセージをだせ。 ・Iコマンドで既に存在する学籍番号と同じ番号を入力すると二重に登録されてしまう。 二重登録されないように、エラーメッセージをだせ。 ・Iコマンドを投入した後に気が変わってコマンド入力に戻ろうとしても、何か挿入しなければならない。 コマンド入力に戻れるようにせよ。 ・このプログラムの構造はだらだらとわかりにくい。各コマンドに対応する関数を作り、わかりやすい形にせよ。 ・「コマンド?[I(挿入),D(削除),P(表示),X(終了),W(書込み),R(読出し),X(終了)]」と毎回出るのは煩わしい。 「コマンド?」だけにして、H(ヘルプ)コマンドを投入すると、各コマンドの説明が表示されるようにしなさい。 ・eメールアドレスと担当教員名のデータも格納できるようにせよ。 ・P(表示)コマンドで、表示範囲を指定できるようにせよ。例えば、前後の学籍番号を指定すると、その範囲だけが表示されるようにせよ。 [3] 環境 [3.1] OS: Windows XP [3.3] 言語: C [4] 期限: [2009年1月22日00:00まで] [5] その他の制限:特になし よろしくお願いします。
>>603 また桁外れのマヌケが到着したが、
ここでは珍しくも無い・・・
605 :
デフォルトの名無しさん :2009/01/10(土) 22:28:22
>>605 そ、そうか。
> nが偶数のとき先手も後手もn/2枚を取る。nが奇数のとき先手も後手も(n−1)/2づつ取り最後に1枚が残る。
これはどうすればいいの?
その後の例では一枚ずつ取ってるように見えて。
ああ!ごめんよみまちがえてた>< はあく。
>>589 "コンピュータプラクティス"でググった結果からみたところ、
東洋大学工学部情報工学科
コンピュータ・プラクティスIIIのカード取りゲームの課題か。(・∀・)ニヤニヤ
nが奇数の時って先手必勝なのだろうか
必勝じゃない
612 :
デフォルトの名無しさん :2009/01/10(土) 22:46:39
>>609 一年の時に仮面浪人して失敗して、プログラムさっぱりw
春休み辺りでまとめて勉強するつもりです
>>612 なんで冬休みにまとめて勉強しなかったの?
614 :
# :2009/01/10(土) 22:47:53
617 :
nyao :2009/01/10(土) 23:33:21
>>589 さっぱりわからねーな
#include <stdio.h>
int main(){
int odd=0,even=0;
while (1){
int dat;
if(scanf("%d", &dat)==EOF)break;
odd+=dat;
scanf("%d", &dat);
even+=dat;
}
//大きい方を選ぶ
if(odd<even){
int temp =odd;
odd=even;
even=temp;
}
//点数
printf("先手:%d,後手:%d\n",odd,even);
//勝敗
if(odd==even){
printf("引き分け\n");
}else{
printf("先手の勝ち\n");
}
return 0;
}
>>610 右端(or左端)と、それと最後に残る数以外の偶数番目と奇数番目合計の差との大小によってきまる。
>>621 >>610 後手が例の戦略を取るかぎり、最後に何を残すかは先手が選べる(確かめてないけど多分どれでもOK)
ということは後手は負けそうなら例の戦略をとらなくなるので、そうすると配列依存になる
つまり、奇数の時は必勝戦略は存在しない
こうなるのかな?意外に深いゲームなのかもしれん
問題文の必勝戦略は通用しないだろうが先手必勝かどうかは別の話だな
624 :
デフォルトの名無しさん :2009/01/11(日) 01:23:34
メイン関数以外で、コマンドラインの引数をとりたいです。 ARGV[1] ARGV[2]をmain以外でファイル名を受け取りたいということです。 グローバルでchar*を宣言して、mainでそのARGV[1]のアドレスを取っておけばよい? 問題はありますか?
625 :
デフォルトの名無しさん :2009/01/11(日) 01:24:44
>>619 ありがとうございます!ですが、先生にメールで聞いたところ
ユーザが全体のカードの枚数n(偶数になるように指定)とそのカードの書かれた数を被らないように繰り返し文使って標準入力させた上で、
奇数のカードの数の合計と偶数のカードの合計をだしてから、両方の合計を比べて、奇数が多いなら先手が奇数を引くように、というか先手という変数に奇数の数の合計を代入させる。
偶数なら先手が偶数のカードをひくようにして、偶数のカードの数の合計を先手という名の変数に代入する
最後に、先手=奇数か偶数の多い方の合計の点数
後手=少ないほうの
で、先手の勝ち。と画面出力
とやれと来ました……。引き分けの方はルールに従って列の端と端を比べて、大きい方をとっていけば勝てるので、
端と端を比べて大きい方を先手に代入、小さいを後手に代入して同じように先手(変数)と後手(変数)に計算結果を代入して、
さっきと同じように画面に出力するみたいです
で、多分自分なりにまとめると
カードの枚数=n(必ず偶数)
カードの数:
一枚目の数=ユーザがキーボードから入れた数値
二枚目の数=ユーザ(ry(どのカードの数とも必ず異なる数を入れさせるように指定)
…
n枚目の数=(ry
先手=奇数or偶数の多いほうの合計点数
後手=少ない方の数
判定
先手or後手の勝ち
というように結果を出せばいいようです
とりあえず先生のヒントを個人的にまとめてみたんですが……これでなんとかなりますか?
626 :
デフォルトの名無しさん :2009/01/11(日) 01:30:48
あ、ちなみにn=奇数のときは自分で考えろだそうです なので、まず偶数のパターンからなんとかしてやってください。
>>615 二重振り子の図がどっかにあるだろ
あと、わざわざエネルギー保存がどうこう書いてあるってことは、
シンプレックス積分でも使うのか?
速攻で落ちるvipロダを選ぶ理由も全く分からん
629 :
デフォルトの名無しさん :2009/01/11(日) 02:42:15
631 :
学生 :2009/01/11(日) 10:03:46
1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 単語を入力するとその単語にeがいくつ含まれているか数えてくれるプログラム。 また、単語の中に含まれるeを抜かしたものも表示せよ。 実行例 単語を入力せよ:december 単語にeが3こ含まれます。 単語のeを抜かすとd c mb r [3] 環境 [3.1] OS: Windows xp [3.2] VC 6.0 [3.3] include<stdio.h> main() { ではじめてください。 [4] 期限: 急ぎです。できれば今日の20時くらいまで [5] その他の制限:while if for などを習いました。 よろしくお願いします。
>>625 そもそも、扱う数値が自然数全体とかどうなのよ
char s[5000]; int n = 0, i = 0; fputs("単語を入力せよ:", stdout); scanf("%4999s", s); for (i = 0; s[i]; ++i) { if (s[i] == 'e') n++; } printf("単語にeが%dこ含まれます。\n", n); printf("単語のeを抜かすと"); for (i = 0; s[i]; ++i) { if (s[i] != 'e') putchar(s[i]); } putchar('\n'); }
何か最近、変なのが紛れ込んでいるねw
636 :
学生 :2009/01/11(日) 10:22:35
>>633 さん
すばやい返信ありがとうございます。
しかし、fputs stdout putchar を習っていないためそれらを使わないでプログラムを作成することは可能でしょうか??
>>635 = 変なの と自分で認めたメガネピッツァ
638 :
デフォルトの名無しさん :2009/01/11(日) 10:25:52
scanf("%4999s", s); きんもぉ〜〜 しかも、これ、結局(ry
scanfでも悪くないが、空白は無視されるんで、あしからず
>>631 お前が習ったものを全部挙げろ
> [3.3] include<stdio.h>
> main()
>{
>ではじめてください。
これだとコンパイルできないけどそれでもいいのか?
641 :
デフォルトの名無しさん :2009/01/11(日) 10:49:58
>>632 あれはどうも自然数全体じゃなくて、要は小数点と分数以外の数える数を使ってって意味みたいですよ。
例えば
n=3なら
5,16,3
てな感じで。
だから、分数と小数以外で、かつ変な文字を使わない普通の数値を入れてってことみたいです。
だから変に考えないで、普通の整数だけ使えばいいかと
>>641 プログラムを書くには、扱う数の範囲は重要だよ
643 :
デフォルトの名無しさん :2009/01/11(日) 11:38:22
#include <stdio.h> int main(void) { int i, amari; for (i = 100; i >= 1; i--){ amari = 100 % i; if( amari == 0) printf("100 は %d で割り切れる\n", i); i--; } return 0; } これだと100は1で割り切れるとでないのですが なぜですか?
645 :
デフォルトの名無しさん :2009/01/11(日) 11:40:58
>>642 範囲って言うと
異なる正の数とかそういう表現ならなんとかなったってことですか?
>>646 最大値、最小値の問題じゃないかな?
総和が long の範囲内で収まるかどうか
648 :
デフォルトの名無しさん :2009/01/11(日) 12:36:40
[2] 逆ポーランド記法で(正しく)書かれた式が入力として与えられた時、その式を評価した値を出力する、実際に動作するプログラムをC言語で作成せよ。 そのうえで、この問題を解くためのアルゴリズムの説明も書け。 [3] [3.1] Windows [3.3] C [4] 1月13日正午 ※データ構造として必ずスタックを使って実現させてください よろしくお願いします。
>>647 そういわれると、確に1〜∞じゃ普通にきついですよね…
周りは適当に、一年の時に習う配列の問題みたいに好きな数をポンポン入れて出来たーなんて言ってたから、そんな感じに出来ると思ってたけど、こんなに難しかったのか……orz
650 :
学生 :2009/01/11(日) 12:59:18
1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 単語を入力するとその単語にeがいくつ含まれているか数えてくれるプログラム。 また、単語の中に含まれるeを抜かしたものも表示せよ。 実行例 単語を入力せよ:december 単語にeが3こ含まれます。 単語のeを抜かすとd c mb r [3] 環境 [3.1] OS: Windows xp [3.2] VC 6.0 [3.3] #include<stdio.h> main() { ではじめてください。 [4] 期限: 急ぎです。できれば今日の20時くらいまで [5] その他の制限:while if for char int double sum * - + / ++ %= sqrt pow != && switch case などを習いました。 よろしくお願いします。
おいwwww
652 :
デフォルトの名無しさん :2009/01/11(日) 13:02:46
#include <stdio.h> int main(void) { char str1[100], str2[100]; int i = 0; printf("文字列入力 "); scanf("%s", str1); do { str2[i] = str1[i]; } while(str1[i++] != '\0'); printf("str2 = %s", str2); return 0; } このプログラムのwhileの条件式って どうゆう意味の判定ですか?
654 :
デフォルトの名無しさん :2009/01/11(日) 13:08:01
鏡を見るとさ、ちょ〜〜〜イケメソな面が映るわけよ。 これ、誰なんだろうなぁ〜って長年、思っていたけど、よく考えたらそれ、 俺じゃ〜〜ん。道理で、女性からチラチラ見られたわけだ。 よく注目されて、あれ?俺なんか変なことしたかな?って思っていたけど、 なんだ、見とれていたのかw
>>650 表示の仕方は何も習ってないわけか
無理だな
入力もできないじゃないか
入力といっても、別にキーボードを打って文字を記入する以外に、 プログラムは何かデータを受け付ける手段はあるわけで。屁理屈すまそw
sumなんて予約語か関数あったっけ
660 :
A :2009/01/11(日) 13:30:23
>>650 #include<stdio.h>
main()
// int main(int argc, char* argv[])
{
int loop, count;
char ch;
char input[256], output[256];
printf("単語を入力せよ :");
scanf("%s", input);
// strcpy(output, input);
count=0;
for(loop=0; ;loop++) {
ch = input[loop];
output[loop] = ch;
if (ch == NULL) {
break;
}
if (ch == 'e') {
output[loop] = ' ';
count++;
}
}
printf("単語のeを抜かすと:%s\n", output);
printf("単語にeが%d個含まれます。\n", count);
return 0;
}
>>657 >>636 によると習ってないものは使っちゃいけないらしい。
さすがに
>>650 に挙げられているものだけでデータ入出力は無理じゃね?
#include <stdio.h>
main()
{
char s[128];
int i, c = 0;
printf("単語を入力せよ:"); scnaf("%s, s);
for (i = 0; s[i] != '\0'; i++) if (s[i] == 'e') { s[i] = ' '; c++; }
printf("単語にeが%dこ含まれます。\n", c);
printf("単語のeを抜かすと%s\n", s);
return0;
}
>>661 つ コピペ
つ リダイレクト
つ 内部でファイルなどを指定する
まぁ、それらも習っていなければそれまでだがw
>>662 コピペとかリダイレクトとか関係なくね?
>>662 それにしても
>>650 を見る限りでは使っていい関数はsqrt()とpow()だけっぽいんだが・・・w
>>661 がgdgdだったので直した
#include <stdio.h>
main()
{
char s[128];
int i, c = 0;
printf("単語を入力せよ:"); scanf("%s", s);
for (i = 0; s[i] != '\0'; i++) if (s[i] == 'e') { s[i] = ' '; c++; }
printf("単語にeが%dこ含まれます。\n", c);
printf("単語のeを抜かすと%s\n", s);
return 0;
}
665 :
565 :2009/01/11(日) 13:44:47
>>575 ありがとうございます
いろいろ書き方が悪くて申し訳ないです
[1] 授業単元: プログラミング言語V [2] 問題文(含コード&リンク): 次のプログラムで本来入れるべき処理は何か。指摘せよ。 char *pstr; pstr = malloc(100); sprintf(pstr,"123"); pstr=malloc(10); sprintf(pstr,"456"); free(pstr); [3] 環境 [3.1] OS: Windows xp [3.3] 言語: C [4] 期限: 1月15日 よろしくお願いいたします。
>>667 char *pstr;
pstr = malloc(100);
sprintf(pstr,"123");
free(pstr); /*ここにfree()*/
pstr=malloc(10);
sprintf(pstr,"456");
free(pstr);
>>667 char *pstr;
goto skip_label
pstr = malloc(100);
sprintf(pstr,"123");
pstr=malloc(10);
sprintf(pstr,"456");
free(pstr);
skip_label:
セミコロン忘れたorz
672 :
667 :2009/01/11(日) 16:14:48
どうもありがとうございます。
[1] プログラミング言語 c [2] Q1 現在の地域時間から15時間後の日時を表示するプログラムを作成せよ。 表示形式は時間が表示されれば自由とします。 Q2 以下の問いに○×で答えよ。 1.複数のソースファイルによりプログラムを作成するとき、機能や目的ごとに ソースファイルを分割すると、長いソースと短いソースファイルができてしまうので 均等になるように作成したほうがよい。 2.プログラムを機能分割して考えるときコンピュータの話なので、プログラミングに 都合のいいように機能を考え、ユーザの業務内容を無視してもよい。 [3] 環境 [3.1] OS: Windows xp [3.3] 言語: C [4] 期限: 1月17日 よろしくお願いいたします。
>>674 Q2
1.×
2.○ ベストプラクティスとか言っとけば、ありがたがる。
>>674 Q1
#include<stdio.h>
#include<time.h>
int main(void){
time_t t;
t=time(NULL)+15*60*60;
puts(asctime(localtime(&t)));
return 0;
}
>>674 #include <stdio.h>
#include <time.h>
int main(void) {
time_t t;
t=time(0);
t+=15*3600;
printf("%s",ctime(&t));
return 0;
}
678 :
学生 :2009/01/11(日) 18:52:26
たくさんの方々 色々とすいませんでした。 どうもありがとうございました。
679 :
デフォルトの名無しさん :2009/01/11(日) 19:16:24
#include <stdio.h> int main(void) { double data1 = 100.0, data2; int i = 1; while (i <= 10){ printf("実数値を入力 "); scanf("%f", &data2); if (data2 == 0.0) continue; data1 = data1 / data2; printf("data1 = %f\n", data1); if ( data1 < 1.0) break; else i++; } return 0; } 間違ってるとこ教えてください。
scanf("%f", &data2); ↓ scanf("%lf", &data2);
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・関数mainから配列のアドレスを受け取ってその中の最大値を返す関数maxを作成せよ. #include <stdio.h> int max(int a[ ]); int main(void) { int x[ ] = {3,1,2,5,4}; printf("最大値は%d\n",max(x)); return 0; } int max( int max(の後をお願いします。 実行例 最大値は5 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2009年1月12日(月)まで [5] その他の制限: 値渡し、参照渡しは習いました。 宜しくお願いします。
配列の大きさはどうすんの?
> int max(int a[ ]); ちょっwwwwwwwwおまっwwwwwwwww
>>686 もとからバグってるとかないだろ。
原文でよこせ
>>686 do{
printf("入力して下さい\n");
scanf("%d",&n);
}while(n<0);
>>688 こんなじゃね?
#include<stdio.h>
int main(){
int n;
int flag=2;
do{
printf("入力して下さい\n");
scanf("%d",&n);
if(n<0){
flag--;
}else{
printf("%d\n",2*n);
flag=2;
}
}while(flag);
printf("終了します\n");
return 0;
}
>>690 数式みると拒否反応が出る
現役の時でも怪しかったというのに今となってはどうにもならんw
692 :
674 :2009/01/12(月) 00:41:03
693 :
675 :2009/01/12(月) 00:44:18
>>690 ぶっちゃけ式も読めない。
3枚目の1も2も付いてないΦは何の角度?
>>695 二枚目の式に対して三枚目の近似を適用した結果だから…
どうなるんだろう
紙に書かないとわからんw
697 :
sage :2009/01/12(月) 00:59:35
>>686 2回連続で負の数が入力されたら終了ってことでいいんだよな?
#include <stdio.h>
int main(void)
{
int n;
int flag = 0;
do {
printf("入力してください\n");
scanf("%d", &n);
if (n < 0) flag++; else { flag = 0; printf("%d\n", 2 * n); }
} while (flag != 2);
printf("終了します\n");
return 0;
}
ほんとに3枚目の式合ってるんかな。 もしくは情報不足か
とにかくさっぱりわからないので、少しでもお願いします これで最後なんです
>>697 1問目 枝狩りしてないので n=100 (190569292 通り) くらいが限界。ついでにすぐに計算結果が long を超える
#include<stdio.h>
#include<stdlib.h>
int min(int a, int b){
if(a<b) return a;
return b;
}
long huga(int n, int maximum){
int i;
long ret=0;
for(i=min(n, maximum);i>0;i--){
if(n-i>0) ret+=huga(n-i, min(i, maximum));
else ret++;
}
return ret;
}
long hoge(int n){
return huga(n, n);
}
int main(int argc, char *argv[]){
int n=4;
if(argc==2) n=atoi(argv[1]);
printf("払い方は %ld 通り (n=%d)\n", hoge(n), n);
return 0;
}
>>697 3問目
#include<stdio.h>
#include<stdlib.h>
#define ADJUST(v) (((v)=='1' || (v)=='0')?(v):'X')
int myNOT(int A){
if(A=='1') return '0';
if(A=='0') return '1';
return 'X';
}
int myOR(int A, int B){
if(A=='1' || B=='1') return '1';
if(A=='0' && B=='0') return '0';
return 'X';
}
int myAND(int A, int B){
if(A=='0' || B=='0') return '0';
if(A=='1' && B=='1') return '1';
return 'X';
}
int myRSFF(int S, int R, int Q){
if(S=='0' && R=='0') return ADJUST(Q);
if(S=='1' && R=='0') return '1';
if(S=='0' && R=='1') return '0';
return 'X';
}
int main(void){
char buf[3][10];
scanf("%9s%9s%9s", buf[0], buf[1], buf[2]);
printf("S=%c R=%c Q=%c --> Q'=%c\n", buf[0][0], buf[1][0], buf[2][0], myRSFF(buf[0][0], buf[1][0], buf[2][0]));
return 0;
}
704 :
703 :2009/01/12(月) 02:04:19
>>695 プログラム無知の数学科出身のおれの意見を書かせてくれ
おそらく二重振り子の原理はφ_1の角度にある玉が原点方向に向かって振れる運動と
φ_2の角度にある玉が原点方向に振れる運動で初期の角度に大きな違いがある
なので一枚目の画像の青い玉の連結が連立微分方程式において重要な役割を得る
が、しかしもしΔφ=φ_1-φ_2=φ≒0ならば、青い玉の部分を考えず(二重振り子にならない)
φ_1≒φ_2になるので考える振り子の運動方程式は直線OQの単振り子のそれに近似できる
φはΔφの限りなく0に近い値のことを指していると思われる
今後、宿題に答えてもらうには、一問1,000円の課金にしない?
707 :
703 :2009/01/12(月) 02:17:30
>>697 3問目
#include<stdio.h>
#include<stdlib.h>
#define ADJUST(v) (((v)=='1' || (v)=='0')?(v):'X')
int myNOT(int A){
if(A=='1') return '0';
if(A=='0') return '1';
return 'X';
}
int myOR(int A, int B){
if(A=='1' || B=='1') return '1';
if(A=='0' && B=='0') return '0';
return 'X';
}
int myAND(int A, int B){
if(A=='0' || B=='0') return '0';
if(A=='1' && B=='1') return '1';
return 'X';
}
int myNOR(int A, int B){ return myNOT(myOR(A, B)); }
int myNAND(int A, int B){ return myNOT(myAND(A, B)); }
int myXOR(int A, int B){ return myOR(myAND(myNOT(A), B), myAND(A, myNOT(B))); }
int myRSFF(int S, int R, int Q){
return myXOR(myOR(myAND(myNOR(S, R), Q), myAND(myXOR(S, R), S)), myAND(myAND(S, R), 'X'));
}
int main(void){
char buf[3][10];
scanf("%9s%9s%9s", buf[0], buf[1], buf[2]);
printf("S=%c R=%c Q=%c --> Q'=%c\n", buf[0][0], buf[1][0], buf[2][0], myRSFF(buf[0][0], buf[1][0], buf[2][0]));
return 0;
}
708 :
703 :2009/01/12(月) 02:31:05
>>707 は S=0 R=X Q=0 --> Q'=0 になっちまうけど
X 出すべきかな?www
>>682 頭に0がつく数字を考慮しない場合
#include <stdio.h>
void main(){
int gakuban;
printf("学籍番号??? ");
scanf("%d",&gakuban);
if(999999<gakuban<10000000)
printf("学籍番号は7桁の数字で入力して下さい\n");
else
printf("e-mailアドレス: g%d@〜〜〜〜〜〜\n",gakuban);
}
で動くが、例を見る限り0が頭につく数を考慮しなきゃダメそうだね
>>697 2問目
#include<stdio.h>
#include<math.h>
#define PI (3.1415926535897932384626433832795)
#define DELTA (0.01)
double Calc(double t, double digree){
double radian, x, y, vx0, vy0, v0=138000/3600.0, x0=0.0, y0=1.80, g=9.8;
radian=digree/180*PI;
vx0=v0*cos(radian);
vy0=v0*sin(radian);
x=x0+vx0*t;
y=y0+vy0*t-g*t*t/2;
printf("%e,%e\n", x, y);
return y;
}
int main(void){
double t, digree=0.0, *pdigree;
pdigree=&digree;
scanf("%lf", pdigree);
for(t=0.0;Calc(t, digree)>=0.0;t+=DELTA);
return 0;
}
>>701 以下、2問目の解答。main内のwhileの行と不要な関数を消せば1問目になるよ。
#include<stdio.h>
#include<stdlib.h>
typedef struct node_ { int v; struct node_ *l, *r; } node, *pnode;
pnode root = NULL;
void insert_r(pnode *t, pnode n) { if (*t) insert_r(n->v < (*t)->v ? &(*t)->l : &(*t)->r, n); else *t=n; }
void insert(int v) { pnode n = malloc(sizeof(node)); n->v=v; n->l=n->r=NULL; insert_r(&root, n); }
void erase_r(pnode *t, int v) {
if (*t)
if ((*t)->v == v) { pnode l = (*t)->l, r = (*t)->r; free(*t); *t = r; if (l) insert_r(t, l); }
else erase_r(v < (*t)->v ? &(*t)->l : &(*t)->r, v);
}
void erase(int v) { erase_r(&root, v); }
void print_r(pnode n) { if (n) { print_r(n->l); printf(" %d", n->v); print_r(n->r); } }
void print() { printf("data ="); print_r(root); printf("\n"); }
int input_value() { int v=0; printf("数値>"); scanf("%d", &v); return v; }
int menu() {
char s[100]; printf("a=追加、b=削除、c=表示 >"); scanf("%99s", s);
switch(s[0]) {
case 'a': insert(input_value()); break;
case 'b': erase(input_value()); break;
case 'c': print(); return 0;
}
return 1;
}
int main() {
int i; for (i = 0; i < 20; i ++) insert(rand()%101); print();
while (root && menu());
return 0;
}
>>695 クソすぎる
そのφはφ_2のTypoだしD'とかいらないし
氏ねばいいのに
>>709 おっしゃるとおり、0の場合も考えないといけないんです・・・
どうもintでやると先頭0だと0が消えちゃうのでintは無理なんでしょうか?
>>715 #include <stdio.h>
#define BUFFSIZE 256
#define FGETS(buff) fgets(buff, BUFFSIZE, stdin); *(strchr(buff, '\n')) = '\0'
int main(void)
{
FILE *ifp, *ofp;
char buff[BUFFSIZE];
int i = 0;
printf("入力ファイル名を入力:");
FGETS(buff);
ifp = fopen(buff, "r");
printf("%sを入力しました。\n", buff);
printf("出力ファイル名を出力:");
FGETS(buff);
ofp = fopen(buff, "w");
printf("%sを出力しました。\n", buff);
while (fgets(buff, BUFFSIZE, ifp) != NULL)
fprintf(ofp, "%4d: %s", ++i, buff);
fclose(ifp);
fclose(ofp);
return 0;
}
早急のお返事ありがとうございます。
>>702 long huga(int n, int maximum){
int i;
long ret=0;
for(i=min(n, maximum);i>0;i--){
if(n-i>0) ret+=huga(n-i, min(i, maximum));
else ret++;
}
return ret;
}
の処理は何を表しているのでしょうか?
後アルゴリズムがいまいちプログラムから読み取ることができないので簡単に説明していただけると助かるのですが・・・
自分で考えても思いつかなくて。
>>719 入力が7桁以下の場合でもOKなら
#include <stdio.h>
int main()
{
int gakuban;
printf("学籍番号??? ");
scanf("%d",&gakuban);
if(0 < gakuban && gakuban < 10000000) {
printf("e-mailアドレス: g%07d@〜〜〜〜〜〜\n",gakuban);
} else {
printf("学籍番号は7桁の数字で入力して下さい\n");
}
return 0;
}
>>682 #include <stdio.h>
#include <ctype.h>
#define BUFFSIZE 16
#define N 7
int main(void)
{
char buff[BUFFSIZE];
int i;
printf("学籍番号??? "); fgets(buff, BUFFSIZE, stdin);
for (i = 0; buff[i] != '\0'; ++i) if (!isdigit(buff[i])) break;
if (i != N) {
printf("学籍番号は7桁の数字で入力してください\n");
return 1;
}
buff[N] = '\0';
printf("e-mailアドレス: g%s@〜〜〜〜〜〜〜〜\n", buff);
return 0;
}
>>721 二つ目以降の数字についてはすでに使用した数字以下の数字を使うことで
順列を並べ替えたものを除外しています。そのために引数 maximum を使ってます
例) n=4 のとき
4 採用
3 1 採用
1 3 除外
2 2 採用
2 1 1 採用
1 2 1 除外
1 1 2 除外
1 1 1 1 採用
今、huga という関数が自然数 n および maximum を満たす
すべての組み合わせの数を数え上げることができると*仮定*します
ある数 i (1≦i≦n かつ i≦maximum) を使用すると決定したときの
組み合わせ数は huga(n-i, min(i, maximum)) で求まります(仮定より)
n=4 の時
4 0 → 1通り (これが else ret++;)
3 1 → huga(1, 1) 通り
2 2 → huga(2, 2) 通り
1 3 → huga(3, 1) 通り
ということで n=4 の時の総組み合わせ数は
1 + huga(1, 1) + huga(2, 2) + huga(3, 1)
になります
仮定を証明するのは自分でどうぞ
>>726 >>728 助かりました本当にありがとうございます。
>>728 失礼しました
実行結果が
総文字数:296
単語数:83
行数:16
となるのが正しいのですが、
自分が作ったものでは
総文字数 :315
単語数 :87
行数 :20
と、異なった結果が出てしまいます。
>>729 >>666 を見る限り、「文章の終端」 == 「空行が2つ連続」としているから、
char word[][50] の最後にもう一つ空行を入れてやればそのコードで正しく動く。
>>730 分かりました、ありがとうございます。
助かりました
初めまして、今Cを勉強してて。
問題文というか、ポインタと構造体が理解できなくて苦しんでいます。
http://codepad.org/H4wmHhPj このようなプログラムを組んだのですが。
mainでのAA[0]、AA[1]の値が、関数に行くとmainのAA[0]がAA[1]に入ってしまいます。
全く原因が分からず苦戦してます。
もしよろしければご教授願います。
やりたいこととしては32bit×32bit=64bitの桁あふれを解消するということです。
>>733 さん
一応課題なのでこのスレに来たのですが・・・
期限は明日です・・・
>>735 さん
有難うございます。
すぐに出来るってすごいですね・・・
多倍長やるのに構造体って必要ないんですか?
738 :
デフォルトの名無しさん :2009/01/12(月) 15:43:24
>>736 やっ、やめて下さい、殺さないで下さい、通報しますよ?
>>722 ありがとうございます
やはり配列使うしかないのでしょうか・・・
>>723 できるのですが、残念ながらbuffや、stdin,breakは習ってないのです。ごめんなさい。
>>1 >・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
>>741 >>709 は何故か7桁でも警告文がでて
>>722 は7桁以下でも警告文でなくてそのまま出力しちゃうんですよね
int型で最初に0が来た場合〜ってのはできましたっけ?配列のみ?
あー、ごめんなさい。
ifのところちょっと変えてみたら問題ありませんでした。
>>709 は先頭0の7桁のときがダメで
>>722 は7桁以下でも出力してしまうんです
>>744 してないです
色々いじってみてるんですがやっぱりできないorz
>>745 数値としての大きさじゃなくて、
ゼロパディング必須で入力しなければはじけってことね。
scanfはあきらめて、getcharでエンターまでの桁数を数えるしか・・・
747 :
715 :2009/01/12(月) 18:22:23
748 :
722 :2009/01/12(月) 18:31:36
>>746 でもそれやると、配列を使わないってのがほとんど意味がなくなる気がするんだよね。
配列使わずに作ったとしても、
>>723 みたいな感じになるなら
配列使ったほうが自然だし。
俺にはほかの方法思いつかんかった。
>>748 一文字入れるごとに、数値に換算してしまえばいい。
a=a*10+bみたいに。
結果、七文字丁度の入力でなければ、これもはじいてしまえば?
[1] 授業単元:科学実習@ [2] 問題文: sum=1の2乗+2の2乗+・・・・Nの2乗 [3] 環境 [3.1] OS: Windows xp [3.2]コンパイラ: gcc -o [3.3] C言語 [4] 期限: 2008年12月31日まで [5] その他の制限: 入力にscanf使用禁止 #include <stdio.h> #include <stdlib.h> #define SIZE 256 int main(void) { char buff[SIZE]; int N, sum = 0, i; printf("N = "); N = atoi(fgets(buff, SIZE, stdin)); for (i = 1; i <= N; ++i) sum += i * i; printf("1 x 1 + 2 x 2 + ... + %d x %d = %d\n", N, N, sum); return 0; } 何か1や2の時は、数式がおかしくなるって言われた。修正お願いします。
↑一応上の期間は延長されてます。
>>750 数式がおかしくなるって意味わかるよね
なら、お前の首の上についているものを使えよw
>>750 printf("Σ[i=1,%d](i x i) = %d\n", N, sum);
>>749 こんなでどうだろう?
#include <stdio.h>
int main()
{
int gakuban=0;
printf("学籍番号??? ");
int c,cnt=0;
while((c=getchar())!='\n'){
if('0'<=c&&c<='9'){
gakuban=gakuban*10+c-'0';
cnt++;
}else{
gakuban=-1;
break;
}
};
if(0 < gakuban && gakuban < 10000000 && cnt==7) {
printf("e-mailアドレス: g%07d@〜〜〜〜〜〜\n",gakuban);
} else {
printf("学籍番号は7桁の数字で入力して下さい\n");
}
return 0;
}
breakは使ってはいけないという指示が出てるらしい whileの中で文字数と数字の確認をしてreturnするしかない
>>756 #include <stdio.h>
int main()
{
int gakuban=0;
printf("学籍番号??? ");
int c,cnt=0;
while((c=getchar())!='\n'){
if('0'<=c&&c<='9'){
gakuban=gakuban*10+c-'0';
cnt++;
}else{
gakuban=-1;
goto hell;
}
};
hell:
if(0 < gakuban && gakuban < 10000000 && cnt==7) {
printf("e-mailアドレス: g%07d@〜〜〜〜〜〜\n",gakuban);
} else {
printf("学籍番号は7桁の数字で入力して下さい\n");
}
return 0;
}
あ〜〜うぜぇ〜なぁ、うpロダの使い方も知らない奴って知能レベルが低いのか?
あ〜〜うぜぇ〜なぁ、見たくなきゃ見なきゃいいのに そんな自己判断もできないクズがいるのか?
>>755 #include <stdio.h>
int main(){
int gakuban=0;
printf("学籍番号??? ");
int c,cnt=0;
do{
c=getchar();
if('0'<=c&&c<='9'){
gakuban=gakuban*10+c-'0';
cnt++;
}else if(c!='\n'){
gakuban=-1;
c='\n';
}
}while(c!='\n');
if(0 < gakuban && gakuban < 10000000 && cnt==7) {
printf("e-mailアドレス: g%07d@〜〜〜〜〜〜\n",gakuban);
} else {
printf("学籍番号は7桁の数字で入力して下さい\n");
}
return 0;
}
おお!できました! 手伝ってくださった方々本当にありがとうございました。
[1] 授業単元:プログラミングT
[2] 問題文:
99999 を読み込むまで,整数値を順次読み込んでいき,合計および平均を表示するプログ
ラムを作成しなさい.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual studio 2005
[3.3] 言語: C
[4] 期限: 2009年1月12日11時59分まで
[5] その他の制限: このような形で出力されるよう求められています。↓
http://lovestube.com/up/src/up4403.jpg 別のアップローダー利用ですみません
宜しくお願いします
>>762 #include<stdio.h>
int main() {
int s,n,v;
printf("整数を入力してください。\n");
for (s=n=0; printf("%d:",n+1),scanf("%d",&v),v!=99999; n++,s+=v);
printf("合計は%d、平均は%dです。\n",s,s/n);
return 0;
}
こんなにもお早い回答ありがとうございます! 助かりました
766 :
765 :2009/01/12(月) 22:37:53
>>764 しつこいな
いくつか疑問挙げられてるんだから、まずそっち解答しない限りまともに解答でないと思うよ。
769 :
デフォルトの名無しさん :2009/01/12(月) 22:44:10
>>759 汚いソースを書いて出すバカ乙w きめぇ
770 :
デフォルトの名無しさん :2009/01/12(月) 22:45:23
>>768 あ〜〜うぜぇ〜なぁ、見たくなきゃ見なきゃいいのに
そんな自己判断もできないクズがいるのか?
>>759 他にも質問者、回答者がいるし、嫌でも書き込まれれば目につくんだが
配慮のない、自己中な奴って自業自得で引きこもっちゃったんだよねw
>>770 あ〜〜うぜぇ〜なぁ、見たくなきゃ見なきゃいいのに
そんな自己判断もできないクズがいるのか?
>>770 他にも質問者、回答者がいるし、嫌でも書き込まれれば目につくんだが
配慮のない、自己中な奴って自業自得で引きこもっちゃったんだよねw
オウム信者か
773 :
デフォルトの名無しさん :2009/01/12(月) 23:48:25
775 :
デフォルトの名無しさん :2009/01/12(月) 23:52:38
>>771 は自分の言葉で相手に言い返せない基地外バカ
以後放置よろ。要するに、周りが見えず、うpロダも使えないヘタレPC、C言語初心者
恐らく、過去にここで世話になったせいか、恩返しのつもりでやっているんだろうけど
かなり迷惑。
776 :
デフォルトの名無しさん :2009/01/13(火) 00:05:39
>>776 Rがない
あとこれ手で式解いちゃってもいいの?
じゃあラーメンタイマーの仕様定義するからよろです。 ・ラーメンの待ち時間の長さ&商品によって異なる味の変化をデータベース化 例:商品Aでは4分で「麺のふにゃふにゃ感が芽生えはじめる」 というような情報に基づき柔軟に味を調節可能 データベースは、ある設定でラーメンが出来たら、感想フォームを表示、 ここに感想を入力していくことでオリジナルのデータベースが出来あがっていくという仕組み。 さらに、TCP/IP通信でこのデータベース情報を交換できる。 ・ラーメンが出来るまでの時間をミニ格闘対戦ゲームで潰せる「時間があっというまに経つね」機能 TCP/IP通信で、ロビーをデディケートサーバーで提供できるような感じで。 ・ラーメン作成回数・日時・商品情報から、ラーメンにおける摂取カロリー計算や 嗜好分析などを行える統計機能つき。 この統計から、「おすすめの新作カップメン」みたいな情報も表示できる。 タイムリミットは明日の6時までに適当なアプロダで、GPLで。
780 :
デフォルトの名無しさん :2009/01/13(火) 00:22:05
>>777 すいません不足がありました。R=0の場合とR=20の場合をそれぞれ考えるという問題です
手で式を解いてもかまわないです
>>779 ああ、わかんないってか。
それで式が合ってるかどうかも、分かんないと・・・
783 :
780 :2009/01/13(火) 00:24:56
R=0の場合とR=20の場合ではなくてR=0の場合とR=0.2の場合でしたすいません
>>781 たぶん2枚目の左下で
Δついてるやつのことだと思うんですけど
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク) ・次のプログラムは「九九」を計算する標準的なポインタ操作である。 動作原理(なぜ正しく動くのか、特に計算部分)を説明せよ。 char *p = "000"; printf("input: "), scanf("%c", p); 1[p] = (*p**p - 96**p + 2304) / 10 + 48; 2[p] = (*p**p - 96**p + 2304) % 10 + 48; printf("%c%c\n", 1[p], 2[p]); [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:BCC 5.5.1 [3.3] 言語:C言語 [4] 期限:2009年1月20日 00:00 まで [5] その他の制限:定数部分が何を表しているかの説明は省略してはいけない まったく分かりません・・・「**」なんて演算子あるんですか?
>>785 リテラルの書き換えをするなんて!
char p[]="000"; もしくは
char buf[]="000", *p=buf; ならおk
>>785 p[1]=(p[0]-'0')*(p[0]-'0')/10+'0';
p[2]=(p[0]-'0')*(p[0]-'0')%10+'0';
の'0'を整数48に書き換えてから括弧を展開しただけでしょ。
*p**pは(*p)*(*p)、つか
全く標準的とは思えないし、九九じゃなくて平方?自乗?
>>785 p[1] は *(p + 1) と同じ。
→ 足し算だからpと1を入れ替えてもよくね?
→ p[1] = *(p + 1) = *(1 + p) = 1[p]
>>786 これそのまま写したんですけど、なんかやばい奴なんですか?
>>787 そう書かれたら一気に分かりました!**は演算子じゃなかったんですね!
あと、
除算してcharにする→切り捨てられるから、十の位の数字だけを出す
剰余→10で割った余り→一の位
でいいんですか?
>>788 なるほど!
何も考えずに写して、p[1]とかの書き方したしたことがなかったんで意味不明だったんですが、理解できました!
>(*p**p - 96**p + 2304) / 10 + 48 >(*p**p - 96**p + 2304) % 10 + 48 の >(*p**p - 96**p + 2304) は x^2 - 96x +2304 =(x - 48)^2 48というのは文字'0'の文字コードで つまりx-48というのは、文字'0'~'9'を数字0~9に変換している。 これを2乗して 10で割ると自乗の1桁目、 10で剰余をとると自乗の2桁目が得られ それにまた48を足して文字に変換している。 かなりトリッキーなコードだね パズルみないなもんで、これがポインタの勉強になるとは思えない 1[p]とかの書き方が可能なのは知ってたけど 実際に使われているのははじめてみた
訂正 × 10で割ると自乗の1桁目、 10で剰余をとると自乗の2桁目が得られ ○ 10で割ると自乗の2桁目、 10で剰余をとると自乗の1桁目が得られ
>>790 ありがとうございます!
C言語の入門書とかを見ても載ってなかったので、困ってました。。
こういうのって大学でしか使わない書き方なんですか?
先生は、こういうのが瞬時に分かったら優秀なプログラマだ、とか言ってましたが・・・
>>773 「連結成分に分離する」って何すること?
>>793 横からだけど、例1だったら
1-2-4-5-6と3に分解することじゃないの?
>>792 優秀なプログラマだったらこれを見て瞬時に分かるかもしれませんが
これを見て瞬時に分かる人が優秀なプログラマなわけではありません
というかこんな糞コードはなかなかお目にかかれないし
当然優秀な人はこんなの書きません
[1] 授業単元:アプリケーションプログラム [2] 問題文:入力した3つの変数をスワップ(入れ替え)させて出力するプログラムを作りなさい [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:水曜まで お願いします
>>797 #include <iostream>
int main()
{
int a[3];
for (int i = 0; i < 3; ++i) {
std::cin >> a[i];
}
std::cout << "a = " << a[0] << ", b = " << a[1] << ", c = " << a[2] << std::endl;
std::swap(a[0], a[1]);
std::swap(a[1], a[2]);
std::cout << "after:\na = " << a[0] << ", b = " << a[1] << ", c = " << a[2] << std::endl;
return 0;
}
gccって書いてあるじゃん。
>>785 ずいぶん昔の、読みにくいコードが「偉い」みたいな頃の産物だな。
実際の仕事でこんなコード書いたらリストラの対象になるので真似しないようにな。
803 :
デフォルトの名無しさん :2009/01/13(火) 13:38:26
[1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク): 簡単なオセロやロールプレイングなどの簡単なゲーム。 [3] 環境 [3.1] OS: windows Vista HomeEdition [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C言語 [4] 期限: 水曜日の夜11時30分まで [5] その他の制限: 関数、ポインタ、配列構造体等まで
>>803 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
srand((unsigned int)time(NULL));
printf("you %s\n", rand() % 2? "won": "lost");
return 0;
}
806 :
デフォルトの名無しさん :2009/01/13(火) 14:17:20
要素の数が40の文字型配列 str1, str2, str3 を、初期化なしで 宣言する。その後、str1に"Let's"を、str2に"study"を、str3に "programming."を代入し、これらの文字をつなげて出力する プログラムを、strcat関数を使わない場合と使った場合の 2種類作りなさい。 お願いします。
gccだからfortranなのかな は、いいとして、gccてGNU C Compiler の略じゃないよ?
>>806 strcat()を使わない場合
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[40], str2[40], str3[40];
strcpy(str1, "Let's");
strcpy(str2, "study");
strcpy(str3, "programming.");
printf("%s%s%s", str1, str2, str3);
return 0;
}
こんにちは、初めまして。 次の問題が分かりません。どなたか分かる方がいましたら、宜しくお願い致します 1~12(月)の数字を入力をうけたら、その月の日数(28~31)=日にち。を表示し、 それ以外の入力であれば、再度入力を求める。 このようなアルゴリズムをC言語を使った形で求めたいのですが、どうすればよいでしょうか? 分かる方、宜しくお願い致しますm(__)m
812 :
デフォルトの名無しさん :2009/01/13(火) 14:33:06
>>808 ありがとうございます。
使う場合誰か教えてください。
>>809 テンプレを読むべき
#include <stdio.h>
int main(void)
{
int d[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m;
do {
printf("input >> ");
scanf("%d", &m);
} while (!(1 <= m && m <= 12));
printf("%d\n", d[m - 1]);
return 0;
}
>>813 ごめん、、、読まずに聞いてしまった
ありがとう
>>812 #include <stdio.h>
#include <string.h>
int main(void)
{
char str1[40], str2[40], str3[40];
strcpy(str1, "Let's");
strcpy(str2, "study");
strcpy(str3, "programming.");
printf("%s", strcat(str1, strcat(str2, str3)));
return 0;
}
817 :
A :2009/01/13(火) 16:42:32
>>809 scanf("%d",&m);
} while (!(1 <= m && m <= 12));
if (m==2) {
printf("閏年なら29,閏年でなく平年なら28");
} else
printf("%d\n", d[m - 1]);
818 :
デフォルトの名無しさん :2009/01/13(火) 17:12:50
以下の4人のデータ群を効率的に処理するために、構造体を使ってプログラムを組みたい。 #####の箇所を埋め、実行せよ。 なお、本プログラムは、4人の構造体データを初期化入力したのち、 構造体カード member[i] を引数とする関数 bmi_keisan により、 BMI値 = 体重(Kg) / ( (身長(m))*(身長(m)) ) を計算のうえ、それぞれの構造体カード member[i] のメンバ BMI に計算結果を代入するプログラムである。 void bmi_keisan(##########){BMI値の計算と構造体への代入をする関数を実現せよ。ドット演算子、アロー演算子のいずれを用いてもよい。} (構造体) struct bmi_calc 名前(name): 下記のデータを直接入力身長(weight): 下記のデータを直接入力体重(height): 下記のデータを直接入力 BMI (bmi): BMI値を計算する関数により算出 (一人目データ) 名前:斉藤体重(Kg):60.0身長(m):1.75BMI: 0 (初期値) (二人目データ)名前:田中体重(Kg):80.0身長(m):1.65BMI: 0 (初期値) (三人目データ)名前:鈴木体重(Kg):40.0身長(m):1.45BMI: 0 (初期値) (四人目データ)名前:伊藤体重(Kg):70.0身長(m):1.9BMI: 0 (初期値) (参考:BMI) 体重(Kg)を身長(m:メートル)の二乗で割った値。体格を把握するために用いられる計算式である。BMI <18.5 低体重18.5 < BMI < 25 普通25< BMI 肥満 【達成目標2】 ポインタや構造体を用いたプログラムが理解でき、それらを利用したプログラムが書ける。(学習・教育目標C)
819 :
デフォルトの名無しさん :2009/01/13(火) 17:14:07
>>818 の問題
#include <stdio.h>
#define NINZUU 4
struct bmi_calc {
char name[40];
double weight;
double height;
double bmi;
};
void bmi_keisan(struct bmi_calc *calc);
int main(void){
int i;
//ここで構造体データの初期化をせよ
struct bmi_calc member[]={
{##########################},
{##########################},
{##########################},
{##########################},
};
printf("Name \t Weight \t Height \t BMI\n");
for(i=0; i<NINZUU; i++) bmi_keisan(calc); // 関数 bmi_keisan に構造体のデータを渡す
// ここでBMI値を含めた各人の構造体データを表示させる
for(i=0; i<NINZUU; i++)
printf("%s \t %f \t %f \t %f\n",
############,############,############,############); // 名前、体重、身長、BMI値を表示させる
return(0);
}
void bmi_keisan(######################)
{
#####bmi=###################################### // 構造体におけるBMI値の計算
}
>>818 #include <stdio.h>
#define NINZUU 4
struct bmi_calc {
char name[40];
double weight;
double height;
double bmi;
};
void bmi_keisan(struct bmi_calc *calc);
int main(void)
{
int i;
struct bmi_calc member[] = {
{"斉藤", 60.0, 1.75, 0},
{"田中", 80.0, 1.65, 0},
{"鈴木", 40.0, 1.45, 0},
{"伊藤", 70.0, 1.9, 0},
};
printf("Name \t Weight \t Height \t BMI\n");
for(i = 0; i<NINZUU; i++) bmi_keisan(&member[i]);
// ここでBMI値を含めた各人の構造体データを表示させる
for(i = 0; i<NINZUU; i++)
printf("%s \t %f \t %f \t %f\n", member[i].name, member[i].weight, member[i].height, member[i].bmi);
return 0;
}
void bmi_keisan(struct bmi_calc *calc)
{
calc->bmi = calc->weight / (calc->height * calc->height);
}
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): 1.エラトステネスのふるいを行うアルゴリズムを考えなさい。 2.これを用いて30万までの素数をすべて求めよ 出力例: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 [3] 環境 [3.1] OS: Windows Vista [3.2] BCC Borland C++ 5.5.1 for Win32 [3.3] 言語: C言語 [4] 期限: 14日17時頃まで [5] その他の制限: 関数はほとんど習っていません。for if while printf scanf程度です。
822 :
デフォルトの名無しさん :2009/01/13(火) 17:37:49
すいませんもうひとつお願いします 本問題と同時に配布している data.txt ファイルには、以下のようなデータが入力済みである。 // data.txt の中身 きゅうり 100 5 きゃべつ 200 3 ピーマン 120 4 レタス 140 2 ニンジン 130 3 大根 200 4 1列目は野菜名を、2列目の数字は単価を、3列目は個数である。これを踏まえて、 (1)ファイルdata.txt の内容をプログラム中に読み込む。 (2)それぞれの野菜の単価(tannka)と個数(kosuu)を掛け合わせて求めた小計を配列shoukei[i]に入力しておく (3)すべての野菜の小計shoukei[i]の値を足し合わせた 合計値(sum)を求め、合計値(sum)を新たなファイルkekka.txtに書きこむ。 以上、3つの動作を実現するプログラムを########の箇所を埋め合わせて求め、実行せよ。
823 :
デフォルトの名無しさん :2009/01/13(火) 17:39:19
>>822 の続き
#include <stdio.h>
int main(void)
{
FILE *fp1,*fp2; // *fp1 は入力用ファイルポインタ、*fp2 は出力用ファイルポインタ
char namae[40];
int i,no,tannka,kosuu,sum;
int shoukei[10]={0}; // 小計格納用の配列。すべて0に初期化しておく。
if ((####### = fopen("############################\\data.txt", "#####")) == NULL) // data.txtファイルのフォルダは自分で指定して
printf("\aファイルをオープンできません。\n");
else {
no=0;
printf("野菜名 \t 単価 \t 個数 \t 小計\n");
while (fscanf(fp1, "%s %d %d", namae, &tannka, &kosuu) == 3) {
shoukei[no]=#####################; // それぞれの野菜(no で指定)の小計の計算をせよ
printf("%s \t %d \t %d \t %d\n", namae, tannka, kosuu, shoukei[no]);
no++;
}
fclose(###); // data.txt ファイルのクローズ }
sum=0;
for(i=0 ; i<no ; i++) #######################; // 合計(sum)の計算
printf("\n 合計金額 %d 円です。\n",########);
printf("---------------------------------\n");
if ((######## = fopen("#####################\\kekka.txt", "#####")) == NULL) // kekka.txtファイルのフォルダは自分で指定して
printf("\aファイルをオープンできません。\n");
else {
fprintf(fp2, "合計金額は= %d 円ですよ。\n", ###); // 合計金額をファイルに書き込み
fprintf(fp2,"---------------------------------\n");
fclose(###); /* kekka.txt ファイルのクローズ */
}
return (0);
}
>>821 #include <stdio.h>
#define N 300000
int main(void)
{
char sieve[N+1] = {0};
int i, j;
for (i = 2; i < N; i++) {
if (!sieve[i]) {
printf("%d ", i);
for (j = 2*i; j < N; j += i) {
sieve[j] = 1;
}
}
}
putchar('\n');
return 0;
}
>>827 おぉう。中身はCなので拡張子を.cにしてください
830 :
デフォルトの名無しさん :2009/01/13(火) 19:55:14
お願いします 次のプログラムにおいて int ######; // 変数、ポインタの宣言 ########## // int型変数 e に「値」 30 を代入 ########## // 変数e の「アドレス」を ポインタpointer_e に代入 ######### // ポインタpointer_e が指し示すアドレスのメモリ内の「値」を 変数gに代入り と処理したいとする。 各変数を適切に宣言し(#####を埋めよ)、e, pointer_e, g のアドレスと値の両方をprintf("### の[データ or アドレス]\n",###) 文により表示させるプログラムを完成させて実行せよ。 #include <stdio.h> int main(void) { int ########## // 変数、ポインタの宣言 int e = #####; // int型変数 e に「値」 30 を代入 int e = ########## // 変数e の「アドレス」を ポインタ pointer_e に代入 char buffer[30]; // ポインタ pointer_e が指し示すアドレスのメモリ内の「値」を 変数gに代入 printf(##########); printf(##########); printf(##########); printf(##########); printf(##########); printf(##########); return (0); }
>>830 #include <stdio.h>
int main(void)
{
int e, *pointer_e, g;
e = 30;
pointer_e = &e;
g = *pointer_e;
printf("e のデータ: %d\n", e);
printf("e のアドレス: %p\n", &e);
printf("pointer_e のデータ: %p\n", pointer_e);
printf("pointer_e のアドレス: %p\n", &pointer_e);
printf("g のデータ: %d\n", g);
printf("g のアドレス: %p\n", &g);
return 0;
}
832 :
デフォルトの名無しさん :2009/01/13(火) 20:16:56
本問題と同時に配布している data.txt ファイルには、以下のようなデータが入力済みである。 // data.txt の中身 きゅうり 100 5 きゃべつ 200 3 ピーマン 120 4 レタス 140 2 ニンジン 130 3 大根 200 4 1列目は野菜名を、2列目の数字は単価を、3列目は個数である。これを踏まえて、 (1)ファイルdata.txt の内容をプログラム中に読み込む。 (2)それぞれの野菜の単価(tannka)と個数(kosuu)を掛け合わせて求めた小計を配列shoukei[i]に入力しておく (3)すべての野菜の小計shoukei[i]の値を足し合わせた 合計値(sum)を求め、合計値(sum)を新たなファイルkekka.txtに書きこむ。 以上、3つの動作を実現するプログラムを########の箇所を埋め合わせて求め、実行せよ。
833 :
デフォルトの名無しさん :2009/01/13(火) 20:18:20
#include <stdio.h> int main(void) { FILE *fp1,*fp2; // *fp1 は入力用ファイルポインタ、*fp2 は出力用ファイルポインタ char namae[40]; int i,no,tannka,kosuu,sum; int shoukei[10]={0}; // 小計格納用の配列。すべて0に初期化しておく。 if ((####### = fopen("############################\\data.txt", "#####")) == NULL) // data.txtファイルのフォルダは自分で指定して printf("\aファイルをオープンできません。\n"); else { no=0; printf("野菜名 \t 単価 \t 個数 \t 小計\n"); while (fscanf(fp1, "%s %d %d", namae, &tannka, &kosuu) == 3) { shoukei[no]=#####################; // それぞれの野菜(no で指定)の小計の計算をせよ printf("%s \t %d \t %d \t %d\n", namae, tannka, kosuu, shoukei[no]); no++; } fclose(###); // data.txt ファイルのクローズ } sum=0; for(i=0 ; i<no ; i++) #######################; // 合計(sum)の計算 printf("\n 合計金額 %d 円です。\n",########); printf("---------------------------------\n"); if ((######## = fopen("#####################\\kekka.txt", "#####")) == NULL) // kekka.txtファイルのフォルダは自分で指定して printf("\aファイルをオープンできません。\n"); else { fprintf(fp2, "合計金額は= %d 円ですよ。\n", ###); // 合計金額をファイルに書き込み fprintf(fp2,"---------------------------------\n"); fclose(###); /* kekka.txt ファイルのクローズ */ } return (0); }
835 :
デフォルトの名無しさん :2009/01/13(火) 20:31:25
台形(少なくとも一組の対辺が互いに平行であるような図形)の面積を計算する関数 double daisuu(double jyotei, double katei, double takasa) { .... } を作成し、プログラムを実行せよ。 上底(台数の上部の辺の長さ):jyotei 下底(台数の下部の辺の長さ):katei 台数の高さ(並行である対辺の距離):takasa とする。 なお、「プロトタイプ宣言」に従ってプログラムを組むこと。 お願いします
今日はテンプレを読めない人が多いね
837 :
デフォルトの名無しさん :2009/01/13(火) 20:42:08
すいません [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 台形(少なくとも一組の対辺が互いに平行であるような図形)の面積を計算する関数 double daisuu(double jyotei, double katei, double takasa) { .... } を作成し、プログラムを実行せよ。 上底(台数の上部の辺の長さ):jyotei 下底(台数の下部の辺の長さ):katei 台数の高さ(並行である対辺の距離):takasa とする。 なお、「プロトタイプ宣言」に従ってプログラムを組むこと。 [3] 環境 [3.1] OS: Windows [3.3] 言語: /C++ [4] 期限: 今日まで [5] その他の制限: プロトタイプ宣言にて
>>837 double daisuu(double jyoutei, double katei, double takasa)
{
return (jyoutei + katei) * takasa / 2;
}
int main(void)
{
daisuu(1, 2, 3);
return 0;
}
840 :
デフォルトの名無しさん :2009/01/13(火) 21:37:08
>>840 何が分かったというのか全然分からんwww
あとC++じゃなくてC言語みたい
842 :
デフォルトの名無しさん :2009/01/13(火) 21:43:43
>>841 マジで・・・・orz
もしよかったら模範解答みたいのもらえないだろうか??
本当お願いだ
>>840 間違いなく何もわかっていない
#include<stdio.h>
#include<stdlib.h> // qsort関数使用時に必要なヘッダファイル
double trim_heikin(const int a[], int kosuu); // プロトタイプ宣言
int intcmp(const void *a, const void *b);
int main(void)
{
int a[11]={20,50,10,70,30,0,80,90,40,60,100}; // 配列a[] は、このデータを使うこと
int i;
printf("ソート前データ\n");
for(i=0 ; i < 11 ; i++) printf("%d ",a[i]);
qsort(a, 11, sizeof(int), intcmp);// qsort 関数を用いてa[]配列をソートする
printf("\nソート後データ\n");
for(i=0 ; i < 11 ; i++) printf("%d ",a[i]);
printf("\nトリム平均は=%f\n",trim_heikin(a, 11)); // trim_heikin関数を用いて結果を表示せよ
return(0);
}
// トリム平均の関数をプログラムせよ
double trim_heikin(const int a[], int kosuu)
{
int sum = 0;
int i;
for (i = 1; i < kosuu - 1; ++i) sum += a[i];
return (double)sum / (kosuu - 2);
}
int intcmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
844 :
デフォルトの名無しさん :2009/01/13(火) 21:57:02
それを言うならすみません、だろ
>>844 0 から始めてほしいもんだ
(配列的に)
>>849 具体的な例を示した方が良いよ。
> 数字の合計
連続していた場合はどうするの?例えば12と並んでいたら1と2に分けるのか
連続している場合は12とするとか?
851 :
773 :2009/01/13(火) 23:05:35
>>796 ありがとうございます。
講義で使っている本は茨木俊秀のCによるアルゴリズムとデータ構造という本です。
すいませんがどなたか課題2をお願いします。
853 :
デフォルトの名無しさん :2009/01/14(水) 00:01:29
【質問テンプレ】 [1] 授業単元:ソフトウェア演習 [2] 問題文(含コード&リンク): 指定されたデータファイルから都道府県名を読み込み,連結リストに格納した後に,キーボードから入力した文字列を探索し,該当する文字列があれば表示(無ければ無い旨を表示)するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:ECLIPSE [3.3] 言語: (C ) [4] 期限: 明日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) よろしくです
明日っていつだよ コンパイラは何だよ ファイルの形式は?中身は? イライラする!消せ!
856 :
デフォルトの名無しさん :2009/01/14(水) 00:34:41
[1] C++ [2] 自由発表で、私は神経衰弱をやろうと思っています 3] 環境 [3.1] OS:Mac [3.2] コンパイラ名とバージョン: emacs [3.3] 言語:C++ [4] 期限:1月14日 午前8時 ・5色×2ペア×2枚ずつ=計20枚 ・新規でゲームを始めるごとにカードの配置を新しく ・白いカードを2枚めくり、2枚が異なる色なら白に戻す⇒また同じカードを選んだ際にまた同じ色になる ・カードの色と配置を決める関数とカードをめくる関数の2つにわけて考える カードをめくる関数のほうは出来たのですが、色と配置の関数がなかなかできずに困っています。 20枚のカードに、5色を4枚ずつちりばめさせたいのですが…。 期限が急ですみません よろしくお願いします。
>>803 #include<stdio.h>
int main() {
static const char *te[] = {"グー", "チョキ", "パー"};
int you;
printf("じゃんけん・・・(1:グー、2:チョキ、3:パー)?");
scanf("%d", &you);
printf("ポン! \n あなた=%s, COM=%s\n", te[you-1], te[(you+1)%3]);
printf("あなたの負け!\n");
return 0;
}
>>849 #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define N (20 + 1)
int main(void)
{
char b[N];
int i, c, n;
fgets(b, N, stdin);
for (i = c = n = 0; i < N; ++i) {
if (isdigit(b[i])) { c++; n += b[i] - '0'; }
}
printf("個数:%d, 合計:%d\n", c, n);
return 0;
}
while( 1 ) cout << "ぬるぽ" << endl;
860 :
A :2009/01/14(水) 00:39:40
>>851 課題2 それぞれの頂点が連結している頂点を列挙するプログラムを作成せよ。
#include <stdio.h>
#define N 6
static int graph[N][N];
int main(void) {
int i, j;
printf("input %d * %d matrix\n", N, N);
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
scanf("%1d", &graph[i][j]);
}
}
for(i = 0; i < N-1; i++) {
for(j = i+1; j < N; j++) {
if(graph[i][j] == 1) {
printf("%d : %d\n", i+1, j+1);
}
}
}
return 0;
}
がんばれ、エスパー達 頭痛くなってきたから寝る
>>810-811 The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada
ググリマシタ
>>856 20枚のカードに、5色を4枚ずつちりばめるとこだけ。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int card[20] = {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5};
int i, tmp, rnd;
srand(time(NULL));
for (i = 0; i < 20; i++) {
rnd = rand() % 20;
tmp = card[i];
card[i] = card[rnd];
card[rnd] = tmp;
}
return 0;
}
865 :
864 :2009/01/14(水) 03:59:17
C++だったのか。Cで書いてた、すまん。
C++非互換の箇所あるか?
>>863 >gcc, g++ - GNU project C and C++ Compiler
アホが
>>867 一体何を見てアホとか言ってるんだろう。
公式ちゃんと読めてるか?
http://gcc.gnu.org/gcc-4.3/ > GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection.
CとC++だけとして見るなんて逆にGNUをバカにしてるとしか思えない
869 :
774 :2009/01/14(水) 07:08:50
どっちもあってるだろ、 最初はCコンパイラの略だった 後付でコンパイラコレクションの略称というのも追加設定された、と
小文字でgccって書いてあるんだからCのコンパイラだと思っていいんじゃない? コンパイラ群について言いたかったらGCCって書くと思う。
872 :
デフォルトの名無しさん :2009/01/14(水) 08:21:39
バグってね?
874 :
デフォルトの名無しさん :2009/01/14(水) 09:34:44
[1] 授業単元:プログラミング [2] 問題文: 受け取った整数を左に 4 ビットだけ桁移動(シフト)させる処理によって,元の数の何倍になるか. 受け取った整数を左に 2 ビットだけ桁移動(シフト)して xを加える処理によって,元の数の何倍になるか. 受け取った整数と2進数00001111のビットごとの論理積をとった結果によって,元の数は16の倍数になるか. ・標準入力から非負の整数を 1 つ受け取る (scanf を用いて整数を符号無し整数型 unsigned 型の変数に読み込む). ・符号無し整数型 unsigned 型の変数を二進数表示する関数 printBinary を作成する. ・処理の前後について,関数 printBinary を使って二進数表示する. #include <stdio.h> #include <stdlib.h> void printBinary(unsigned x){ int i; for (???????; ???????; i--) { ??????? }putchar('\n');} int main(void){ unsigned n,m; printf("Input non-negative integer: "); scanf("%d", &n); ??????? printf("%u / %u = %d\n", m, n, m/n); ??????? printf("%u / %u = %d\n", m, n, m/n); ??????? if ( ??????? ) printf("%u %% 16 = 0 \n", n); else printf("%u %% 16 != 0 \n", n); return 0;} [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C言語 [4] 期限:1月14日20時まで [5] その他の制限:特に無いです。 どうかよろしくお願いします。
875 :
デフォルトの名無しさん :2009/01/14(水) 09:52:10
>>864 ありがとうございます。
これをベースにいろいろいじってみます。
>>877 scanf()の %f を %lf にすればOK
>>874 #include <stdio.h>
#include <stdlib.h>
void printBinary(unsigned x){
int i;
for (i=sizeof(unsigned)*8-1; i>=0; i--) {
putchar((x>>i&0x1)+'0');
}putchar('\n');}
int main(void){
unsigned n,m;
printf("Input non-negative integer: ");
scanf("%d", &n);
m=n<<4;
printBinary(n);printBinary(m);
printf("%u / %u = %d\n", m, n, m/n);
m=(n<<2)+n;
printBinary(n);printBinary(m);
printf("%u / %u = %d\n", m, n, m/n);
m=n;n=m&0x0f;
printBinary(m);printBinary(n);
if ( !(m%16) )
printf("%u %% 16 = 0 \n", n);
else
printf("%u %% 16 != 0 \n", n);
return 0;}
882 :
デフォルトの名無しさん :2009/01/14(水) 14:48:43
>Microsoft Visual Basic 2005 > 言語:C あほか
>>874 int main(void){
unsigned n;
printf("Input non-negative integer: ");
scanf("%d", &n);
printf("%u / %u = 16\n", n<<4, n);
printf("%u / %u = 5\n", n<<2 + n, n);
printf("%u %% 16 != 0 \n", n);
return 0;
}
885 :
デフォルトの名無しさん :2009/01/14(水) 15:01:12
無理
887 :
デフォルトの名無しさん :2009/01/14(水) 15:30:49
【質問テンプレ】 [1] 授業単元:ソフトウェア演習 [2] 問題文(含コード&リンク): 指定されたデータファイルから都道府県名を読み込み,連結リストに格納した後に,キーボードから入力した文字列を探索し,該当する文字列があれば表示(無ければ無い旨を表示)するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:ECLIPSE?なんなのか少しわかりません・・・ [3.3] 言語: (C ) [4] 期限: 1月14日19時まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) よろしくです テキストファイルでいいです
指定されたデータファイルの概要について、どういった形式、内容か?
890 :
デフォルトの名無しさん :2009/01/14(水) 17:03:10
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1.入力された2進数の正の小数の値を10進数に変換して出力を行うプログラム。 (なお小数は、上位4桁が整数、下位4桁が小数とする。例00111100なら3.75のように) 2.入力された2進数の整数を10進数に変換して出力を行うプログラム。 を作成せよ。 [3] 環境 [3.1] OS: Windows or Linux [3.2] コンパイラ名とバージョン:bcc or gcc [3.3] 言語: C言語 [4] 期限: 1月15日9時 [5] その他の制限:なし よろしくお願いします
>>890 1.だけ
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 16
int main(void)
{
char b[N];
double x = 0.0;
int i;
fgets(b, N, stdin);
for (i = 0; i < 4; ++i) x += (b[i] - '0') / pow(2, 4 - i);
for (i = 4; i < 8; ++i) x += (b[i] - '0') * pow(2, 5 - i);
printf("%f\n", x);
return 0;
}
>>890 2.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 16
int main(void)
{
char b[N];
int x = 0;
int i;
fgets(b, N, stdin);
for (i = 0; i < 8; ++i) x += (b[i] - '0') * (int)pow(2, 7 - i);
printf("%d\n", x);
return 0;
}
894 :
デフォルトの名無しさん :2009/01/14(水) 18:00:29
>>888 ただ単にテキストファイルで資料とされています
>>894 だからそのテキストだとしても、どういう形式で記述されているかって話なんだが?
>>890 1,2両用。エラー処理なし(文字数8、文字'0','1'以外は動作未保障)
NDECIMALSが小数点以下桁数。0で8ビット符号なし整数(i.e. 問2)
#include <stdio.h>
#define BITSIZE 8
#define NDECIMALS 4
int main(void)
{
char buf[16];
int n = 0, i;
fgets(buf, sizeof buf, stdin);
for(i = 0; i < BITSIZE; ++i) { n <<= 1; n |= buf[i] - '0'; }
printf("%f\n", (double)n / (1 << NDECIMALS));
return 0;
}
897 :
デフォルトの名無しさん :2009/01/14(水) 18:09:13
[1] 授業単元: ソフトウェア演習 [2] 問題文(含コード&リンク): ○名簿データ構造 個人ID(int 型) 名前(半角英字のみ,29 文字以下) (注意)実装時には単方向連結リストを使用する こと. ○必要機能 (1) データの一覧表示 (2) キーボードからのデータ追加 (3) 名前によるデータ検索 (4) 学生番号によるデータの整列(昇順) (5) ファイルからデータ入力 (6) ファイルへデータ出力 ○画面設計 「(付録A)プログラム実行時画面」に従い,各画 面を設計せよ. ○○評価時プログラム動作確認手順 以下の手順でプログラムを実行する (1) プログラムの起動 (2) 起動後に入力用データをファイルから 読み込む(3) データ一覧の表示 (4) 以下のデータをキーボードから入力 98765432 tamura 67542398 yoshida (5) データの一覧表示 (6) データの整列 (7) データの一覧表示 (8) 以下のデータを検索 shibuya murata (9) データの保存 (10)プログラムの終了 (11)プログラム終了後に,保存されたデータ の内容を確認 ■ [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: ここがどのような質問なのかわかっていません…ECLIPSEであってますか? [3.3] 言語:教科書はやさしく学べるC言語入門を使っています。 [4] 期限: 1月20日 [5] その他の制限: 単方向連結リスト テキストファイルでいいです。しかしデータファイル”input.dat”があるので、そこの部分はどのようにすればいいか教えてください。。 この前にやってもらったんですが、プログラムが動きませんでした。
898 :
デフォルトの名無しさん :2009/01/14(水) 18:10:53
Hokkaidou Aomori Akita Iwate Yamagata Miyagi Fukushima Niigata Toyama Ishikawa こんな感じです
>>898 <都道府県1><空白><都道府県2><空白>...<都道府県n><改行>
* データは1行で末尾に改行がある
* <都道府県i>はローマ字の都道府県名
* 都道府県間の区切りは空白1個 (タブや改行、2個以上のスペース等は認めない)
ということか?
901 :
デフォルトの名無しさん :2009/01/14(水) 18:47:33
(p or *p) どっちかはっきりして欲しいものです
903 :
デフォルトの名無しさん :2009/01/14(水) 19:00:42
>>902 なんか・・・すまん・・
俺じゃよくわからなくて
その程度なら自分でやったほうがいい
自分でやってみてわからなかったんだ・・・・
907 :
デフォルトの名無しさん :2009/01/14(水) 19:12:45
>>900 都道府県は
kyoto
oosaka
などたてにすべての都道府県が書いてあります!
>>906 配列の要素にアクセスする方法が分からなかったのかな。
x[0] + x[1] + … + x[9]
で合計が出るよ。
i は良くループカウンタとして使われるけど、今回はループなんて使う必要ない。
911 :
849 :2009/01/14(水) 19:43:31
>>850 数字の合計
連続していた場合12と並んでいたら1と2に分けるようにしたいです。
wwwwwwwwwwwwwwwwwwwwwwwwwwwww
>>904 #include<stdio.h>
int main(void)
{
int x[10]={10, 30, 50, 80, 20, 60, 100, 55, 15, 0};
int i,sum;
for(i=0;i<10;i++){
sum += x[i];
}
printf("sum=%d",sum);
>>901 #include <stdio.h>
int main(void)
{
int a, b, *p;
a = 10; // int型変数 a に「値」 10 を代入
p =& a; // 変数a の「アドレス」を (p or *p) に代入
b = *p; // (p or *p) が指し示すアドレスにおけるメモリ内の「値」を 変数bに代入
printf("aのデータ =%d\n", a);
printf("aのアドレス=%p\n", &a);
printf("(p or *p) のデータ =%d\n", *p);
printf("(p or *p) のアドレス=%p\n", &p);
printf("bのデータ =%d\n", b);
printf("bのアドレス=##\n", &b);
return (0);
}
bのアドレスいれてねぇや printf("bのアドレス=%p\n", &b);ね
>>899 int term( void )
{
int value, v;
char op;
int i, tmp;
value = factor();
for(;;) {
op = token[0];
if( op == '!' ) {
for(i = 1, tmp = 1; i <= value; ++i) tmp *= i;
value = tmp; gettoken(); break;
}
if( !( op =='*' || op=='/' || op=='^' ) )
break;
if( !gettoken() )
break; /* ここで終ってはいけない */
v = factor();
switch( op ) {
case '*': value *= v; break;
case '/': value /= v; break;
case '^':
for(i = 0, tmp = 1; i < v; ++i) tmp *= value;
value = tmp; break;
}
}
return value;
}
922 :
デフォルトの名無しさん :2009/01/14(水) 21:10:57
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 8×8のチェスの盤面上に8個のクイーンを互いに取 られない位置に並べるプログラムを作成しなさい クイーンは縦横斜めに好きなだけ進むことができる [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:来週の月曜日 よろしくお願いします。
>>917 sumを初期化してないよ?
#include<stdio.h>
int main(void)
{
int x[10]={10, 30, 50, 80, 20, 60, 100, 55, 15, 0};
int i,sum;
sum = 0;
for(i=0;i<10;i++){
sum += x[i];
}
printf("sum=%d",sum);
}
>>927 お前ダジャレの才能あるわw
腹かかえて笑った
ってレスすればいいのか
929 :
デフォルトの名無しさん :2009/01/14(水) 21:34:19
930 :
デフォルトの名無しさん :2009/01/14(水) 21:37:56
verilogHDLの課題なのでスレチなのですが、課題を手伝っていただけるスレと言うことで、知識のある方どうかご協力をお願いします。
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8633.txt 上がHDL記述、下が私の書いたテストベンチになっています。
上のHDLがシュミュレーション出来る様に、私のテストベンチに手を加えていただけないでしょうか?
任意に入力した値数個対して出力が確認出来る簡単なもので結構です。
verilogHDLを習ってまだ一ヶ月程度なので、根本的な書き方のミスがあるかと思います。
今週中にご教授いただけると助かります。どうか、よろしくお願い致します。
>>922 #include <stdio.h>
void queen(int *board, int n)
{
int i, j;
static int cnt = 1;
if(n==8) {
printf("%d\n", cnt++);
for(i=0; i<8; i++) {
for(j=0; j<8; j++) putchar(board[i]==j ? 'Q' : '+');
putchar('\n');
}}
for(i=0; i<8; i++) {
board[n] = i;
for(j=1; j<=n; j++) if(board[n-j] == i + j || board[n-j] == i - j || board[n-j] == i) break;
if(j > n) queen(board, n + 1);
}}
int main(void)
{
int board[8];
queen(board, 0);
return 0;
}
>>930 別にベリログの課題を手伝うとはどこにも書いてないし。
…ベリログのスレってあんのかね
>書き方のミス シュミュレーション -> シミュレーション ご教授 -> ご教示
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): 2進数正の小数を10進数に変換 2進数の整数(正と負両方)を10進数に変換 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 2009年1月15日 9時まで [5] その他の制限: なるべく短く書けと問題文に書いてあります よろしくおねがします
>>937 回答ありがとうございます。
助かりました。
>>941 うん、今自力でも気づいた。ありがとう。なんか気持ちよかった。
余計なことを言わずに礼を言えば済むのに、何だお前
>>943 せっかく答えたのに、悔しいのぅ悔しいのぅ
ということにしたいのですね
>>946 IDが出ないから、自作自演で悔しいのぅ悔しいのぅ
>>949 別に悔しくはないが、いつものキチガイに絡まれてるかと思うとうんざりする
951 :
デフォルトの名無しさん :2009/01/14(水) 23:23:51
文字列処理関数の演習問題 文字列 A に入力された文字列を、100文字丁度になるまで、 文字列 B に連結しなさい。 わかるかたお願い申し上げます。
>>939 で
matを3乗したいんだけど
matrixmultiply(mat, mat, c);
matrixmultiply(c, mat, c);
じゃ駄目なんだがどう書くべき?
>>954 そう。本当に今気づいた。スレ汚しスマソ
>>951 void add(char *a, char *b)
{
char *p;
int i;
for(i=0; *b; i++, b++);
for(p=a; i<100; i++,p++,b++) {
if(*p=='\0') p = a;
*b = *p;
}
}
>>950 > いつものキチガイ
お前のことだろ、自己紹介すんなってw
961 :
デフォルトの名無しさん :2009/01/14(水) 23:42:10
>>958 は十分文字列処理関数だろw
どこにも標準のを使用しろとは書いてないし。
まあ、「文字列処理関数の演習問題」ってあれば<string.h>使えってことだとは思うが。
配慮以前に(課題で禁止されていなければ)普通は標準関数使うでしょ 標準関数使ったほうが記述が簡潔になって、意味も明確なるんだし void add(char *a, char *b) { int l, n; l = strlen(a); b[0] = '\0'; for(n = 100; n > 0; n -= l) strncat(b, a, n); }
>>921 ありがとうございます。
これを項の評価にぶち込めばいいわけですねbグッ
>>948 #include <stdio.h>
int main(void)
{
char a[] = {38, 58, 13, 15, 51, 27, 10, 19, 12, 86};
char t;
int i, s = 0;
for (i = 0; i < 5; ++i) { t = a[i]; a[i] = a[9 - i]; a[9 - i] = t; }
for (i = 0; i < 10; ++i) printf("%d ", a[i]); putchar('\n');
for (i = 0; i < 10; ++i) s += a[i];
printf("total: %d\naverage: %d\n", s, (int)(s / 10.0 + 0.5));
return 0;
}
>>850 逆に連続している場合で12とするとどうなるんですか?
>>968 どうなるも何も、数字が連続した場合はそのように扱うのか、
連続していても1文字ずつ扱うのか、どっちやねん?って話なんだが・・・
>>934 もっと短く書けるだろうけど。
>2進数正の小数を10進数に変換
n,b=1;main(d,s){char*p=s;for(gets(s);*p;p++)*p-46?n=n*2+*p-48,d*=b:b++;printf("%g\n",1.*n/d);}
>2進数の整数(正と負両方)を10進数に変換
n;main(m,s){char*p=s;for(gets(s),m=1-(*p==45&&p++)*2;*p;)n=n*2+*p++-48;printf("%d\n",m*n);}
972 :
デフォルトの名無しさん :2009/01/15(木) 01:53:49
973 :
デフォルトの名無しさん :2009/01/15(木) 02:13:24
>>891 >>892 >>896 ありがとうございます。
繰り返しになってしまうのですが、
正負の2進整数を10進数に変換をする際は、どのように改良すればよいですか?
よろしくお願いします。
改行とって短くかけるとかw
>>972 すぐ終了するので、メモリの解放はやってない
#include<stdio.h>
#include<stdlib.h>
typedef struct node_ { char name[100]; int age; struct node_ *next; } node;
void print(node *p) {
int n;
printf("No. Name Age\n-------------------------\n");
for (n = 1; p; n ++, p = p->next)
printf("(%2d)%12s%7d\n", n, p->name, p->age);
}
node *erase(node *p, int age) {
node *head, **ptail = &head;
for (; p; p = p->next) {
if (p->age != age) { *ptail = p; ptail = &(*ptail)->next; }
}
*ptail = NULL;
return head;
}
int main() {
node *head, **ptail;
char buf[100];
int age;
for (ptail = &head; fgets(buf, 100, stdin); ptail = &(*ptail)->next) {
*ptail = malloc(sizeof(node));
sscanf(buf, "%s %d", (*ptail)->name, &(*ptail)->age);
}
*ptail = NULL;
print(head);
printf("削除する年齢?"); scanf("%d", &age); head = erase(head, age); print(head); // 課題2の追加分
return 0;
}
976 :
デフォルトの名無しさん :2009/01/15(木) 06:09:30
[1] 授業単元:情報セキュリティ [2] 問題文(含コード&リンク): RSAの実装なんだけど、できないのは32^816077みたいな桁数の大きなべき乗 [3] 環境 [3.1] OS:vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年1月15日16:00まで [5] その他の制限:
>>976 32^816077 → (2^5) ^ 816077
つまり 2 を左に5 * 816977 回ビットシフトした数
[1] 授業単元:プログラミング [2] 問題文:アルファベットの小文字を大文字に変換しながらファイルをコピーするプログラムを作成する. ・コマンドラインには,「実行プログラム名」「コピー元ファイル名」「コピー先ファイル名」を入力してプログラムを実行し,これらを引数としてコピーを行う. ・コマンドラインへの入力が正しく行われているか(コピー元ファイルやコピー先ファイルも入力されているか)確認を行う. ・ファイルから読み取った文字が,小文字であるかを判断する必要があるので,ファイルから文字を「1文字ずつ」読み取って, 小文字であれば変換してコピー先に出力, その他の場合はそのままコピー先に出力. #include <stdio.h> #include <stdlib.h> int main(???????){ FILE *infp, *outfp; int ch; if ( ??????? ){ printf("There is no FILE NAME. \n"); exit(1); } if ( ??????? ) { printf("INPUT FILE OPEN error. \n"); } else { if ( ??????? ) { printf("OUTPUT FILE OPEN error. \n"); } else { ?????? fclose(???????); } fclose(???????); } return 0;} [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition [3.3] 言語:C言語 [4] 期限:1月15日16時まで [5] その他の制限:特に無いです。 どうかお願いします。
>>978 ヘッダの追加はだめなのか
#include <ctype.h>
だめなら文字コードはASCIIということでよろしいのか
>>969 数字が連続した場合はそのまま扱いたいです。
>>978 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
FILE *infp, *outfp;
int ch;
if ( argc < 3 ){
printf("There is no FILE NAME. \n");
exit(1); }
if ( (infp = fopen(argv[1], "r")) == NULL ) {
printf("INPUT FILE OPEN error. \n");
} else {
if ( (outfp = fopen(argv[2], "w")) == NULL ) {
printf("OUTPUT FILE OPEN error. \n");
} else {
while ((ch = fgetc(infp)) != EOF) {
if (ch >= 'a' && ch <= 'z') {
ch -= 32;
}
fputc(ch, outfp);
}
fclose(outfp);
}
fclose(infp);
}
return 0;
}
>>976 なんかの数を法として、何乗したら1になるか求める関数を作ってみる
>>983 #include<stdio.h>
int hyoji(int x[]);
int main(void)
{
int x[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
return hyoji(x);
}
int hyoji(int x[])
{
int i;
for(i=0;i<10;i++)
printf("%d\n", x[i]);
return(0);
}
>>985 #include<stdio.h>
int func(int x, int y);
int main(void)
{
int x,y,z;
char dummy[40];
printf("x=");
dummy[0]=scanf("%d", &x);
if(dummy[0]!=1) return 1;
printf("y=");
dummy[39]=scanf("%d", &y);
if(dummy[39]!=1) return 2;
z=func(x, y);
printf("z=%d\n",z);
}
int func(int y, int x)
{
return 5*y+2*x;
}
987 :
デフォルトの名無しさん :2009/01/15(木) 11:43:22
>>977 話は解るんだが、そんな数どうやって扱えばいいのかさっぱりなんだ。
>>982 よくわかんないので詳しく
最低限、
(32^816077) mod (1009*1013)
の答えだけでも教えてくれたら嬉しいです。
988 :
デフォルトの名無しさん :2009/01/15(木) 11:50:12
int型の変数1個を10進数4桁分と考えてそれを配列にして10進数を表したらどう?標準で用意されている型より大きな数を扱うときの常套手段。
990 :
デフォルトの名無しさん :2009/01/15(木) 12:06:57
>>988 あーそうすれば冪乗はシフトで何とかなるかも
その後の剰余を求めるときに上手い方法ある?
>>990 32^816077 = 2^4080385 = 2^(32*127512+1) = 2 * 2^(32*127512)
じゃん?だから例えば
2 mod (1009*1013) -> A
(A << 32) mod (1009*1013) -> A
(A << 32) mod (1009*1013) -> A
・・・・・・・繰り返し・・・・・・
で求められるよ。何回繰り返すのかは考えてね。
>>987 (32**816077) % (1009*1013)
=>2
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
995 :
デフォルトの名無しさん :2009/01/15(木) 13:40:05
>>990 1009*1013*XのXを順に増やしていって32^816077を超える直前のXをYとすると
32^816077-1009*1013*Yでいいんじゃないの?
>>995 それするくらいだったら
32^816077から1009*1013を繰り返し引いてった方が早くね。
998 :
デフォルトの名無しさん :2009/01/15(木) 14:30:43
音響管のに波を駆動したときに波が剛壁に反射するプログラムってどうやったらいいのですか??
>>997 論より証拠、ソースで提示すりゃ良いだろ?実装できない奴が何をほざいても無駄
1000なら
>>990 は宿題提出期限に間に合わずに留年
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。