2 :
デフォルトの名無しさん :2009/03/02(月) 02:24:21
4 :
デフォルトの名無しさん :2009/03/02(月) 23:53:25
>>4 1. (1)i*width+j (2)i*width+width-j-1
2. i <= 20 → i < 10 と j <= 20 → j < 20
3. 45
>>4 1. 構造体がどこから出てきたのか分からない
2. エラーが何を指しているのか分からない
3. 実行してみればいいだろ
答えのついている演習問題について質問するのは有りなのですか?
>>7 こう言う問題に対してこう言う解答でしたが、理解できません教えてくださいって、
初心者スレにでも書き込め。
10 :
デフォルトの名無しさん :2009/03/03(火) 22:43:54
11 :
デフォルトの名無しさん :2009/03/03(火) 23:05:41
isdigit関数使え 問題文みてないけど
12 :
デフォルトの名無しさん :2009/03/03(火) 23:23:03
どうプログラムに組み込んでいいかがわかりません。
ちょっと見てみたけど恐ろしいプログラムだな… char str[100]; int i; gets(str); i = atoi(str); でいいんじゃね?
[1] 授業単元:情報処理入門
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8952.txt [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc 3.4.4
[3.3] 言語: C言語
[4] 期限: 平成21年3月6日金曜日正午まで
[5] その他の制限:
ライブラリ関数はstdio.hとstdlib.hに書かれているもの以外を使用しないこと。
無効な数値が入力されたら、「Invalid value input.」と表示して入力をやり直すようにすること。
goto文とscanf関数は使用しないこと。
友達がいなくて誰にも聞けません。誰か助けてください。
そもそも何をするプログラムなんでしょうか……
友達がいないことがよく分かるな いい年してボーリングもしたことないのか
>>10 gets(char*) 使用禁止てことで
char str[10];
fgets(str,10,stdin), year[1] = atoi(str); // scanf("%d",&year[1]);
fgets(str,10,stdin), month[1] = atoi(str); // scanf("%d",&month[1]);
fgets(str,10,stdin), reset = atoi(str); // scanf("%d",&reset);
>>15-16 ボ"ウ"リングだろ。
3と5がちょっと微妙だな
ダブルの時に次の1投が4倍になるようにも読める
ま、書いてあるとおりに組むしかないんだろうな
出来るのはクソプログラムだが
アルゴリズムに書いてある事を解釈せずに そのままプログラムを作ったらおかしな事になりそうだなw
ballじゃなくてbawlだったのか 球を投げるからballingと思った
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):入力仕様を、入力座標は最大2桁までの整数を 最大10件までとし、入力範囲のチェックと、最大件数のチェックを行うプログラムの 作成。 [3] 環境 [3.1] OS: xp [3.2] コンパイラ名とバージョン: MSC Ver.5.1 [3.3] 言語: C [4] 期限: 今週中 [5] その他の制限: 出来れば、各所にコメントを入れて下さい。 どういうプログラムなのか自分でも把握したいのと、コードの勉強も兼ねて。 よろしくお願いします。
日本語でおk
23 :
デフォルトの名無しさん :2009/03/05(木) 10:07:50
>>22 うっそー、やだー、お前、日本語も理解できないで日本人をやってるの?
早く海外に逃亡する準備しとけ?な?w
また麻呂かw
また麻呂を目の敵にする必死な基地外かw
>>21 の説明で仕様が正確に理解できたんなら、コード書けよw
書けないなら引っ込んでろ、クズが
27 :
本日のMVP :2009/03/05(木) 10:25:13
22 名前:デフォルトの名無しさん 投稿日:2009/03/05(木) 10:05:39 日本語でおk
お前の方が頭がおかしいことに気づけよ、意味わんねぇ=自分が理解していない=日本語が理解できないw 最近、日本語でおkとか言う奴に限って、理解力がないだけだったりするから困るね。 こりゃNHKのことばおじさんも大変だ。ネタがあって良いだろうけどw
業務くせーな この時期にこんな宿題ありえねーしw
けしからんな、バグ仕込んでやろうぜw
バグ仕込もうにも意味わからんしw
33 :
デフォルトの名無しさん :2009/03/05(木) 11:48:39
>>29 日本語が理解できないなんて、日本人として恥ずかしくないのかね?
麻呂コンプレックスめw
プロでもない麻呂に必死に噛み付く素人w そもそも、本当のプロなら、こんな場所で油を売っている暇がない。 金を稼ぐためのソフトを、次々と開発するし、金にもならん 初歩的な問題なんて、相手にしないだろ。
>>21 #include <stdio.h>
int main(void)
{
int i=0, ii, data[10], sts;
puts("整数を入力してください(EOFは^Dです)");
while(i<10){
sts = scanf("%d", &data[i]);
// printf("<%d>", sts);
if(sts==EOF || sts==0)
break;
if(data[i]>=100 || data[i]<=-100)
puts("2桁までの整数ではありません");
else
i++;
}
puts("入力結果");
for(ii=0; ii<i; ii++)
printf("%d:%d ", ii+1, data[ii]);
return 0;
}
在日うぜーw
在日日本人です
韓国人が政治家になれる時代だぜw
朝鮮人は息をするように嘘を吐く
その日本語は変、という奴は、まず自分の日本語力を証明しろ。 ほとんどの人が、この世の中の事実を知らないまま、この世を去っていくわけだが? あれもこれも、適切に発言できる人がいないことくらい、周知のこと。 お前、警察でもないのに、警察の専門用語とか話せる? あれだって、他人からしてみれば、日本語か?と思えるものもあるぞw
日本語でおk
お前らスレ違いも甚だしいぞ 害基地は華麗にスルーじゃなかったのか?
>>21 でいうと
問題文冒頭の「入力仕様を、」がまず分からない
「入力座標」が何か分からない
「最大10件」とあるが1件の単位は何?
日本語が不自由なのは問題文の不備に気づかないほうじゃないか?
その他、法律でも専門用語はある。というか、定義な。 要は、受け手が知らなければそれまでだし、自分も知らないなら 知らないことは曖昧な発言で場を濁すなってことだ。 文法だって話に出るが、句読点の使い方なども、曖昧。 身内に国語の教員がいるが、指導してみて分かることもあるぞ。
n次元座標値を管理してて '(' <num> { ',' <num> }n ')' <num> := { '-' } <digit> { <digit> } <digit> := '0' - '9' こういうフォーマット入力で <num> の取りえる範囲が -99〜99 で 上記2次元座標値を 10件登録できるように なんだかんだで高度だな
メモリの確保 と言う言葉だけで、どこまで意味が通じる? プログラミングでは、動的確保なども話しに入ってくるだろう。 しかし、自作ではメモリ増設にも話が及ぶ。いかに認識の違いが 業界、業種で違ってくることやら。分かったか?知らない奴、 知識の乏しい奴には偉そうに出来る、知ったかぶりの青二才めが。 もう一度、小学生からやり直せ、引きこもりニート
>>21 は、
>>47 の考え方であってるんじゃないか?
そのままコード書いてみろよ
>>48 はいいすぎです
「小学生からやり直せ引きこもりニート」はないんじゃない?
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):パスワード認証プログラムをつくりたい。 プログラムの概要は、パスワードを入力し、正常なら"パスワードは正常です。" と表示し、間違っていれば"パスワードが違います。"という表示してプログラムを 終了する。 入力の仕様は、パスワードは4文字とし、1文字入力される毎に'*'を1個表示する。 4文字入力後パスワードをチェックする。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: MSC Ver.5.1 [3.3] 言語: C [4] 期限: 今週中 学校の課題ではないんだけど、ちょうど春休みになるんで ここいらで一人前になりたいと思いまして。 参考にしたいんで名人の力をお貸しください
>>51 余計なことを書く奴だなw
一人前になりたきゃ自分なりにやってみて
初心者スレで晒せ
標準関数だけだと無理だから
getch() でググれよ
>>52 初心者スレに変なキチガイ流れ込ませようとすんじゃねえよクズ
自分が知っていること、理解できること だけ が日本語といっている時点で駄目。 分からない奴には、辞書を用いて参照してやっているのに、参照したお前が 日本語を知らなかったんだろ、って魂胆だろ?見え見えなんだよ、相手の揚げ足を 取ろうと必死な姿が。まぁ、所詮、こんなところで去勢を張るだけの、詰らないクズな 人生しか歩めないんだろ、お前らクズはw 悔しかったら、プログラミングで金を稼いでみろ。それも、ひと財産を稼ぐだけでなく 権力を勝ち取るくらいの巨大な額をな。
rand君大暴れw
君は、この世に様々な分野が存在するのだが、母国語で それら全てに対して、適切な説明が出来るのかね? この世の中は、ごく普通に言語弾圧というものがある。 決まっていないことに対しては、そいつが勝手にそう思ったんだろ? と、よく理解できない、知らない人間に、あたかも多数派が正しいという 洗脳を行う習慣がある。もっと、世の中を世界レベルで見るんだな。 ある国では、タブーとされていることを、別の国では当たり前のように行われている なんてことも、普通にある。しかし、それを理解しない人は、いくら 言葉 で説明しても 理解できないどころか、そいつの言葉がおかしい、と受け止めるだろう。
特に、世の中をまだよく知らず、適切に判断できない未熟者、責任能力に欠ける 未成年、あるいは精神が未発達な大人にも見られる、無責任さ。 ここは見ず知らずの人が閲覧し、書き込みをする無責任な場所でもある。 例え、事実無根、相手が嫌がる発言をしても、余程のことでなければ まず責任が問われることは無い。が、犯罪予告は、書き込みをした人を 警察を介して特定することがある。 今後、日本ではどこまで言論の自由に対して、制限がされるかは分からないが、 インターネットが普及して、ブログ炎上のようなことが頻繁に起これば、 ある特定の語彙を書き込めない、いわば規制をするかもしれないが、 所詮それらも デジタルデータ に過ぎないのが現状。 姑息な手を使って、規制をすり抜ける輩も出てくるだろう。 イタチゴッコになるだろうけど。 そして、ここで解いている問題も、所詮はデジタルデータの演算などを 人間が理解できるプログラム言語にて記述し、コンピュータはそれを コンパイルして、コンピュータ言語で解釈するのだ。
ねえこれ何の宿題?
相手の言っていることが理解できないことに対しては、 相手がまともに言葉を知らない、表現力、語彙が乏しい可能性はあるが、 自分の理解力が乏しいくせに、理解できましぇ〜ん、なんてことを いちいち表現する必要があるのかね?まぁ、世の中、自分が理解できる事、 人間なんてごく一部だが。自分が気に入らなければ、気に入らないことを している人間に対して、何かしら嫌がらせ、圧力を掛けてくる不届き者はいる。 第一、自分が関与する人間は、この世の何パーセントだと思っているんだ? 一年生になったら、友達100人できるかな?100人?名前を知っているくらいで 相手のことをよく知らないくせに、友達になった気になる? 仮に、100人の人と話をするとしよう。1人1分だけでも、1時間40分掛かるし、 1分で出来る話ってどんなもん?しかも、会うための時間も割かなければならない。 そう、例え同じクラスになった人でも、ごく一部しか友達になっていないんだよ。 また、卒業したら、何人とその後、連絡を取っているか? 人それぞれ職場が違う、職場以外の人間とも会うだろうけど、 プライベートで会う人は、何人?芸能人が芸能人全員と 交流があると思っている?同じ業界にいても、関わる人はごく一部。 そう、この世は自分が理解できないことだらけ。だから、理解できる 似た思想のもの同士が集まる習性がある。ただ、その集団が 変に大きくなると、国家権力にまで影響力が及ぶ危険性もある。 人間社会を統率するのは、本当に苦労する役割だと思いますよ。 最後に、日本語でおk、と指摘するくらいなら、何が問題か? 指摘くらいしろよ。でなければ、結局、自分がその意見を 気に入らなかった、としか、相手には受け止めてもらえないよ。
>>60 >最後に、日本語でおk、と指摘するくらいなら、何が問題か?
>指摘くらいしろよ。
>>45 を読もうね。
もうこのスレを見ている人は、普通に理解しているだろう。 論より証拠。そう、言うくらいなら、四の五の言ってないで 自分が書いた問題を解くソースコードを提示すれば良いだろ? よく理解していなくても、もう決まりきった処理をするコードは 定石というものがこの世にはあり、それを引用するだけで良いが。 クイックソートを記述する問題が出ても、世の中に普通に出回って 使われているコードを丸写しで提出すれば、それで評価はされるからねぇ。 ただ、それはその場だけでの評価。社会では、今後、予期せぬ 自分が着手したことのない問題が、嫌と言うほど立ちはだかるだろうけど、 死ぬまでが勉強、人生。がんばれよ、青二才。 君はあと、何年この世でプログラミング、C言語のソースコードを 書き続けるつもりかね?死後も、この世に自分が記述したコード、 あるいは編み出した手法が使われていると良いでちゅね。 そう、学校で習った教科書に記述されていることは、過去の人間が 発見、開発、発案した分かりきった内容に過ぎないのだよw しかし、当初の目的とは違った形で使われているのも事実。 さて、ノーベル賞で有名な、アルフレッド・ノーベルは、ダイナマイトの発明者として有名だが その後、ノーベルが目的とした以外に、どのように人類の歴史上ではダイナマイトが使用されたかね? それを見て、あんたは ダイナマイトでおk と言うのかね?w
高校数学レベルの知識が必要な問題になると逃げ出すアホが言っても説得力がないw
65 :
デフォルトの名無しさん :2009/03/05(木) 23:16:38
>>64 意味が分からんけど、あんたは全ての質問に答えているの?
あと、いつ逃げ出したか、証拠でもあるの?むしろ、あんたが出来ずに
他人を頼ったんだろ?w
とりあえず、コテハンを付けてもかまってもらえるぐらい大物にならないとな
67 :
デフォルトの名無しさん :2009/03/05(木) 23:21:39
麻呂に、剰余の問題で先を越されて悔しかったあいつかw あれは中学校レベルだがw 余程、数学が出来ることが優越感に感じる唯一の生き甲斐なんですねw 実に寂しい人生だ。こっちは、初歩的なプログラミングで楽しんで生きているというのにw
>剰余の問題で先を越されて 明らかに麻呂の方が後だったけどw
いい加減真性のキチガイに構うなよ。 長文連投されて迷惑だ。
↓君は、ライト兄弟が発明した飛行機が、その後、自爆テロに使われて ↓飛行機でおkと言うのかね?その言葉や物が、どういった使われ方をするか? ↓そんなのは、時代によって変わってしまうものだよ。 ↓ほら、山茶花って言葉、元は漢字を並べた読みの「さんざか」だったんだよ? ↓新しいは「あらたし」が転じたとか。役不足の意味、分かってる? ↓能力が不足してるのではなく、手に余るという意味だよ?日本語はおk?
早春に 怨念怨嗟の 長文連投
反論が出来ないんだろ、C言語しか取柄の無い引きこもり基地外が、 麻呂は高校レベルの数学の問題は解けないとか言うしw 逆に、数学の知識は特に必要としない、言語の使用に関しては ド素人なんだろ、その噛み付いてくる粘着常駐は。だから、ここを 自分のテリトリーと思い込んでいるようだが、ここは2ちゃんねるの管理者が 所有している掲示板。書き込んだ本人が何を思っても、書き込み内容は サーバーの中にログとして残り、誰かが保存している限り、未来永劫、 半永久的にデジタルデータとして残るわけだが。 そのログを、100年以上も未来の子孫達が閲覧して、時代背景も含めて 書き込み内容をどう思うんだろうねw
そもそも、麻呂はここのところ、来ているのか?それすら分かっていないんだろw ねぇ、とりあえずさ、鏡を見たら?ピザにメガネを掛けたようなものが映った? それ、誰のだよ?そう、お前の面だよ?ただ、あんたが目の当たりにしたのを このスレを見ただけじゃ、どんなものだったか、想像できないのが悔しいね。
>>52 余計でしたか・・・いやぁいつも周りに言われるんで
どうやらこれは僕の悪い癖みたいですね(^^;
getch()を使うのですかなるほど・・・
もう少しヒントみたいなの貰えませんか?
若しくは簡単でいいので、コード書いていただいて
それを参考に応用してみたいです
名人、よろです
お断りします お断りします お断りします ハ,,ハ ハ,,ハ ハ,,ハ ハ,,ハ ( ゚ω゚ )゚ω゚ )゚ω゚ )゚ω゚ ) お断りします / \ \ \ \ お断りします ((⊂ ) ノ\つノ\つノ\つノ\つ)) お断りします (_⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ お断りします ヽ ヘ } ヘ } ヘ } ヘ } ε≡Ξ ノノ `Jノ `J ノ `J ノ `J
MSC 5.1ってどんなコンパイラですかね smallモデルとかlargeモデルとかあるやつ?
>>78 おそらくそのはず。
Wikipediaでは、MS Cの最後のバージョンでC++コンパイラとMFC 1.0がついて、
その次からVisual C++という名称になったということになっている。
そして、VC++は1.5までが16ビット版だった。
80 :
デフォルトの名無しさん :2009/03/06(金) 15:11:04
>>68 は、まだ根に持っているんだなw あの程度のことで、麻呂の態度が気に食わなかったのか
未だに必死に、麻呂がいるもんだとトラウマになっているようだが、それとは無関係に
麻呂以外の第三者を、無闇に煽っていることに気づかない、見えない敵と戦う戦士になったようだw
ちなみに、汎用性については、麻呂の方が明らかに軍配が上がった。所詮、お前は
固有のパターンにしか対応できない、融通の利かないヘボプログラマー。環境が変わると、
一からコードを書き直す、無駄が多いタイプ。そういうの、この世界では生き残れないよ。
そう、先行きを考えた前置きが出来ないから。
81 :
デフォルトの名無しさん :2009/03/06(金) 15:14:11
64 名前:デフォルトの名無しさん 投稿日:2009/03/05(木) 22:30:57 高校数学レベルの知識が必要な問題になると逃げ出すアホが言っても説得力がないw ↑やたらと自分基準で、勘違いをして「アホ」とか罵詈雑言を平気で使う、 知能レベルの低い基地外。このスレが、生き甲斐、自分の縄張りだと思っているらしい。 66 名前:デフォルトの名無しさん 投稿日:2009/03/05(木) 23:19:37 とりあえず、コテハンを付けてもかまってもらえるぐらい大物にならないとな ↑必死に煽るくせに、自分がコテハンを名乗らない小心者。こいつの発言は、いつも無責任。 恐らく無職のニートで、社会に適合しないタイプ。 68 名前:デフォルトの名無しさん 投稿日:2009/03/05(木) 23:39:29 >剰余の問題で先を越されて 明らかに麻呂の方が後だったけどw ↑こいつは、我先にとコードの出来よりも、雑でも早く出すことが目的らしい。 恐らく、学生時代には、他人より先に答えることに集中してしまい、 間違っていても自分の答えは正しいと言い張って、周りから干されたタイプ。
いったい何が起きてんだ? 剰余の件とか。 詳しく説明よろ
まぁ、ここで陰湿な罵倒をしている、麻呂以外の人にも当り散らしている 精神障害の基地外は、恐らく本当の引きこもりなんでしょう。 まともなプログラマーが、いつまでもこんな場所にいるわけがない。 というか、日頃は商売のためのソフトウェアを開発しているしな。 暇な時は、油を売っていないで、自ら学習するし。無能な職員は 遊んでいて、他人任せで生きるんだろうけど、そういう役立たずは すぐに首切りにされるからねw
っつか、もう答えが分かりきっている、高校生だろうが大学レベルだろうが その問題を解いたくらいで、得意気になっているこの必死なアンチ麻呂は誰? 第三者から見ても、必死すぎてキモイ。
>>78 昔のNEC製PC9800シリーズに標準で付属してるコンパイラみたいです。
古すぎてこれぐらいしかわからなかったけど、後は
>>79 の通りなんじゃないかな
というか皆さん
>>76 を華麗にスルーなさってます・・・
どうかスルーしないでやってくださいお願いします
>>85 getch( )ですべてだ
#include <conio.h>
がMSC 5.1で使えるかは知らないが
剰余の問題なんて、中学校レベルだろ、ぎゃはははははwwwww あの程度で、麻呂ごときに勝ったつもりか?w
>>86 んーそうですか・・・自分が使ってる麻奈ちゃんの「やさしいC」って参考書には
getchar()しか載ってないようでして
しかも詳しく詳細が載ってるという訳でもなく、調べようにも今手元には参考書が
これぐらいしかなくお手上げ状態です(><
なもんで、申し訳ないんですけど簡単なコードでいいのでお手本書いて貰えませんか?
お願いします
>>87 はい、そうです
さっきからぐぐって調べてみてるんですけど、何分情報量が半端じゃなく
ありすぎるので、目的のサイトが中々見つからないんです
調べ方に問題があるような気もしてきてるのですが、どうしたらいいかも
具体的に思いつかなくて困りました
お助け下さい名人
>>89 #include<stdio.h>
#include<conio.h>
int main(void)
{
int i;
char c[16];
for (i = 0; i < 4; i++)
{
c[i] = getch();
putch('*');
}
c[i] = 0;
printf("\nPASS=%s\n", c);
return 0;
}
なんで別人のふりしてんの?
>>89 参考書とか要らないから
googleにgetchと入力してボタンクリックするだけ
あなたたちが課題をやってくれなかったせいで留年しました。 本当にありがとうございました。
>>93 来年も留年させてあげます。
おたのしみに。
95 :
デフォルトの名無しさん :2009/03/07(土) 03:11:32
麻呂トラウマで必死な引きこもりが痛すぎw
>>93 言う事が朝鮮人みたいだな
自分のせいなのに人のせいにしやがって
97 :
デフォルトの名無しさん :2009/03/07(土) 06:08:43
トラウ麻呂w
[1]C言語基礎 [2]麻呂と罵倒屋さんとの剰余うんぬんの経緯をも一度 詳しく教えてくれませんか? [3] 日本語 [4]本日中
[1] 授業単元:勝手にやってます
[2] 問題文(含コード&リンク):ばば抜きシミュレーターを作る
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8953.txt [3] 環境
[3.1] OS: XP Pro SP3
[3.2] コンパイラ名とバージョン: Cygwin Gcc
[3.3] 言語:C
[4] 期限: 無期限 ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
以前配列をむちゃくちゃなことやってここでお世話になりました。
一応プレイをさせれるようなところまで言ったのかなと思ったら、スタックオーバーフローを起こすようになってしまったようです。
これを回避する方法を教えてください。
あいかわらずひどいと思いますが、よろしくお願いします。
よく見てないし、関係ないけど、関数呼ぶたびにsrand()するな。
スタックオーバーフロー? 0で割ってるだけじゃねーの
>>99 本当にスタックオーバフロー?
VC++9.0で確認したら、関数choise()の中の
i = rand()%remain[N_plyer];
で、remain[N_plyer]の値が0になっている。
>>99 大域でオブジェクトを宣言するな。
特にカウンタ。局所にしろ。
そんなことしてるから問題の絞込みができないんだ。
関数を分ける意味が薄れるだろうが。
もう少し基本的なこと理解してから長いコード書いてくれ
209 [main] baba 3536 _cygtls::handle_exceptions: Error while dumping state ( probably corrupted stack) Segmentation fault (core dumped) 209や3536とかの値は毎回変わるみたいです。 Error while dumpingってのをググったらスタックオーバーフローだっていわれたのでそうだと思ったのですが、違うんですかね? >101 減らしてみます。 >102 そこのあたり確認してみます。 >103 一回ずつよく使うのをローカルで宣言するの面倒だからと思ったんですが、やっぱり関数ごとに宣言したほうがいいですか? >104 この前も同じようなこと言われました。 簡単な短いのは習ったんですが、こういう長いのを書くのは初めてな上に勘とgoogle先生に聞きながらやってるのでいろいろひどいと思います。
>>99 main以外の関数はプロトタイプ宣言を書いて
そこに説明を書いた方が読みやすいソースになる
この前あがってたシャッフルとか、理解するつもり全くないだろw
ひどいのわかってて開き直るってw
カードがなくなった人が出ると、その人から札を引こうとして0で割ってる。 カードがなくなった人は飛ばす処理が必要。
>>105 ループの先で関数呼び出して、そこでも同じループカウンタを使うとあっという間にバグの出来上がり。
独りよがりで誰にもみせねぇってソースなら後でお前が困るだけだからどうでもよし。
糞コードの添削するくらいなら1から書いたほうがよっぽど楽。
見てたら頭が痛くなってきた・・・
>>99 /*int*/void choice() の先頭で、リターンするといい事有るかも。
{
//int i, j, k;
if(remain[N_plyer] == 0) return; // 上がっているので、1回パス
// srand(time(NULL));
1^1 + 2^2 + 3^3 + ・・・ n^n を3で割った余りを求める、ような問題だったと思う。 nを指定して、それに応じて。また、発展で 1^1 - 2^2 + 3^3 - 4^4 ・・・ と +と-が交互になった場合とか。結局、コードの中の定義を変えることで nや3で割る部分を適当に変更できる使用にした麻呂に軍配が上がったわけだがw
それで、後だししただの、麻呂のクソースも見てくれだのと言ったことに 腹を立てたこのスレの常駐引きこもり基地外がファビョって、麻呂は特定可能だからって 麻呂に当り散らしていたw 精神レベルが低いんだろうね、中学校レベルの数学なのに 麻呂では解けないとか、勝手なことを言い出したが、自分がその程度の問題を解いたくらいで 得意気になっているだけという、第三者から見たら滑稽な姿だと気づかないのが痛すぎるwww
さらに、麻呂はクソースと題して、単方向、双方向リスト、それに ファイルを用いる機能を追加、並び替えも独自のコードで実装したわけだが これまた、後から後から訂正して、何がなんだかw あの手の問題は、既に定石、ありきたりの手法があるわけだが 丸写しを他人の質問で出しても、答えが側の実力とは言えないしな。 そんなこんなで、ここを自分の縄張りだと思っている、社会では まともに稼いでいないヘボプログラマーが、初心者が知識が乏しいことを良いことに 好き勝手なことを言っているわけだ。だから、こんなクソスレに成り下がっているわけで、 年々、大学や専門学校の先輩から後輩へ、このスレの存在が伝えられているのか 最近では過去に似た問題、あるいはまったく同じ問題と、同じ学校で同じ授業を受けている 生徒が鉢合わせになることもw
このキチガイ長文連投の言うこと信じる奴なんていんのかよw
信じる信じない以前に見る気しない。
↓おまいは、ある整数を1で割った余りを求めるプログラムでも作ってろ、な?
さすがにループ変数を自信満々でdoubleにして元のプログラムを間違ってると言ったアホ は言うことが違うw
122 :
デフォルトの名無しさん :2009/03/08(日) 17:33:07
コマンドラインからいくつかの文字列を入力し、 文字列を逆さに出力するプログラムを作成。 ただし、入力する文字列の長さや個数に制限をつけないために、 以下のような仕様とする。 文字列毎にその都度メモリを動的に確保する 一度確保したメモリは次の文字列を処理する前に解放する。 malloc とか使うんですかね? [動作例] % ./a.out abcde fghijklmn opqr edcba nmlkjihgf rqpo
よく見るとメモリを確保する必要性がないな
#include <stdio.h> char *reverse(char *cs) { char tmp, *p, *q; if (!cs) return 0; for (p = cs, q = p + strlen(p) - 1; p < q; p++, q--) { tmp = *p; *p = *q; *q = tmp; } return cs; } int main(int argc, char *argv[]) { int i; char *p; for (i = 0; i < argc; i++) { if (i == 0) continue; p = reverse(strdup(argv[i])); printf("%s\n", p); free(p); } }
127 :
デフォルトの名無しさん :2009/03/08(日) 20:09:23
麻呂のクソースに期待
最近は<string.h>をincludeしないのでstrlen()を使うのがが流行り?
#include <stdio.h> void print_reverse(char * s) { char * p = s; while(*p != 0) p++; for(; p != s; putchar(*p)) p--; putchar('\n'); } int main(int argc, char ** argv) { int i; for(i = 1; i < argc; i++) print_reverse(argv[i]); return 0; }
131 :
130 :2009/03/08(日) 20:51:48
ごめん問題文読んでなかった。メモリ確保がいるの。 でも別にこれで長さにも個数にも制限なくないですか
mallocと麻ー呂っくを掛けたのか?w
無意味な仕様であることは確かだな。
>for(; p != s; putchar(*p)) p--; なんでわざわざこんな記法をw
p=sのときも表示させるための工夫なんだろ while(p!=s) putchar(*--p) でいい気もするが。
136 :
122 :2009/03/08(日) 21:30:26
>123-135 いろいろありがとうございました。 次回あれば、テンプレ忘れないよう気をつけます。
> 最近は<string.h>をincludeしないのでstrlen()を使うのがが流行り? 実行ファイルが a.out だから、コンパイラは gcc ではないだろうか。
Cygwinとかならgccでもa.exeじゃね?
>>138 数学で逆は真ならずってならわなかったか
逆、裏、対偶ってあって真なのは対偶
いや、それ、命題としてもどうかと。数学とかって話じゃないだろ。 実際に分かりきっている事実なんだから、調べれば良いだけ。
>>90 遅くなりました、ありがとうございます。
おかげさまで望みのコード勉強が出来ました。
参考書みてるだけじゃ、このレベルのコードも書けないという
勉強にもなり、いい経験になりました。
>>92 なるほど、参考になります。
それと、先日の土日を利用して、図書館へ行きCの参考書を2点程借りてきて
みたのですが、どうやらその参考書にも「getch()」の記述が載ってないんですよね。
「getchar()」の方は載っているのですが、この二つは何か違いがあるのでしょうか?
スレ違いでしたらすみません。
getchar と getch は挙動が全く違うし、getch は環境依存だから。 Windows の場合は getch でいいんだが、UNIX系OSの場合は termios (あるいは curses の getch) を使うことになる。
>>142 win2kを使っててgetch()に酷い目にあわされたw
[1] 授業単元:授業とは関係なし [2] 問題文(含コード&リンク): 世界のナベアツのネタ「3の倍数と3が付く数字だけアホになり、5の倍数だけ犬っぽくなる」プログラムを作りたいと思っています。 出力は 1 2 ア3 4 犬5 ア6 のようにアホになるときは数字の前に「ア」、犬の時は数字の前に「犬」を付ける形で出力したいです。 1〜10000程度の範囲でお願いします 春休みに入り、プログラミングの授業の復習のつもりでやってみようと思ったのですが、 思っていたよりも難しくて挫折しました。 [3] 環境 [3.1] OS:Windows VISTA [3.2] コンパイラ名とバージョン:BCC Borland C++ 5.5.1 [3.3] 言語: C [4] 期限: 早いとうれしいですが、課題ではなく提出期限が無いのでいつでも [5] その他の制限: あまり深くは習っていません。あまり難しいと困ります。
>>144 #include<stdio.h>
int main(void){
int i;
for(i=1;i<=10000;i++) printf("%s%s%d ", (i%3)?"":"ア", (i%5)?"":"犬", i);
return 0;
}
FizzBuzzと言う名前、忘れてた これができないというのは正直信じられん
>>147 もう久しく紙に書く習慣がなくなってしまったので、cでも急に紙に書けといわれるとどうかな。
149 :
144 :2009/03/09(月) 22:47:04
FizzBuzzは書けました。ですが、3が付く数字がどう判定して良いかわかりません。
150 :
145 :2009/03/09(月) 22:52:10
>>144 3がつく数字忘れてた
#include<stdio.h>
int chk3(int num){
if(num%3==0) return 1;
for(;num>0;num/=10) if(num%10==3) return 1;
return 0;
}
int main(void){
int i;
for(i=1;i<=100;i++) printf("%s%s%d ", !chk3(i)?"":"ア", (i%5)?"":"犬", i);
return 0;
}
#include <stdio.h> int main(void) { int i; for(i=1;i<=10000;i++){ printf("%s%s%d ", (i%3==0 || (i/10)-(i/100)*10==3 || (i/100)-(i/1000)*10==3 || (i/1000)-(i/10000)*10==3 )?"ア":"", (i%5==0)?"犬":"", i); if(i%10==9) puts(""); } return 0; }
>num = rand() % 53; こう書くと偏るからダメだって言う奴がでるからダメ。
>>154 randの偏りをなくすのは諦めたw
あと、カードを取ってあがった場合の処理もw
num = rand() % (i + 1) もしくは num = i + rand() % (53 - i) にする。 または、 for(i=53; i>1; ) { num = rand() % i--; temp = allcard[i]; allcard[i] = allcard[num]; allcard[num] = temp; } にする。
158 :
152 :2009/03/10(火) 10:24:48
>>152 の6〜8行目。間違っていました。
訂正後:printf("%s%s%d ", (i%3==0 || i%10==3 || (i/10)%10==3 || (i/100)%10==3 || (i/1000)%10==3)
>>144 嫌がらせのように見にくいコード
#include <stdio.h>
#include <string.h>
int main()
{
char buf[256];
int i;
for(i = 1; 1; i++, sprintf(buf, "%d", i))
printf("%s%s%d ", ((i % 3 == 0 || strchr(buf, '3') != NULL) ? "ア" : ""), ((i % 5 == 0) ? "犬" : ""), i);
return 0;
}
160 :
デフォルトの名無しさん :2009/03/10(火) 11:58:21
別にこれでええやん #include "stdafx.h" #include <iostream> #include "windows.h" using namespace std; int main(void){ int i; for(i=1;i<=10000;i++){ if(i%3==0 && i%5!=0){ cout << "ア"; }else if(i%5==0 && i%3!=0){ cout << "犬"; }else if(i%3==0 && i%5==0){ cout << "ア犬"; } cout << i << endl; Sleep(500); } return 0; }
>3が付く数字
>>160 *30から*39も全部アホにならないといけないそうだ
300から399も
1からnまでの間に3の倍数と3のつく数字がいくつあるか求める関数 int nabeatu(int n) を作れ というのを以前見たような気がする
倍数を求めるのは難しくないが、3の付く数字は 一度文字列に置き換えて、3が含まれるかチェキするとか。
って、文字列に置き換える必要はなかったか。10で割った余りが3かどうかで 順に10で割っていけば良いか、すまそ。
167 :
99 :2009/03/10(火) 16:11:22
>>153 ありがとうございます。
今夜にでもゆっくりソースを読ませてもらいます。
今後の書き方の参考にもさせてもらいます。
168 :
デフォルトの名無しさん :2009/03/10(火) 18:33:38
生年月日を2000/01/01もしくは2000/1/1の形式で入力し、 誕生日から現在まで何日経過したか、現在の年齢の2項目を表示するプログラムをお願いします。
おまえら優しいな…
>>169 2行目が曖昧かな?誕生日からというのは、前の誕生日からなのか、
生まれたその日からのどちらか?
176 :
170 :2009/03/11(水) 09:50:29
そもそも、生まれた当日は0日目なのか、1日目なのか。 それの方が悩んだ。
年齢計算に関する法律について調べるべし。
178 :
170 :2009/03/11(水) 10:26:20
オッケー、日本語で。0日目で正しいようだ。 「年齢計算に関する法律」で検索した。
法律を知らないとプログラムって書けないんだね><
>>179 法律を知らないと書けないと言うか
作ろうとしてるプログラムの内容を知ってないと
作れない
181 :
99 :2009/03/11(水) 19:19:39
要求定義ってやつじゃないか?
>>178 年齢ハ出生ノ日ヨリ之ヲ起算ス
初日不算入の例外が年齢だよ
出生日が1日目
指定した年に、13日の金曜日があるか調べ、あるならそれが何月か表示せよ
指定した年に、13日の金曜日があるか調べ、あるならその日を災いにせよ
>>182 例外に含まれるのを見落としてました。
なるほどしかし、法律的には4月1日に生まれた子女は翌年の3月31日
午後12時に1歳に成るとなっている。4月1日午前0時でなく。
満年齢はそれでいいとして、課題は"経過した"日数も…(2項目)だから生まれた日の
翌日が第1日目でいいじゃないかと思う。生まれた当日は何かとバタバタしてるし。
正確に言えば翌日も出生時刻までが0日目で、第2日目てことは無いと思う。
186 :
185 :2009/03/11(水) 21:12:19
>>186 今年って3回もあるんだ
ジェイソンも大変だなw
>>188 struct tmからtime_tをつくるmk_time()つー関数がなんか便利だたよ
× mk_time ○ mktime tm構造体つくる→年月日時分秒メンバを書き換える→mktime() →localtime_s()でstruct tmに変換 →曜日・日数が自動補完されてうまー
191 :
デフォルトの名無しさん :2009/03/12(木) 11:27:49
皆C言語で書いてるってことなのか? よくわからないんだけどCとC++が微妙に構文違うのはなぜなの?
>>191 struct tm 変数名; // C structが必要
tm 変数名; // C++ structをつけなくていい
C++は、変数の宣言が処理の途中で出来る。等々
ttp://www3.uploader.jp/dl/akaiup/akaiup_uljp00797.zip.html [1] 授業単元: エムピーアイ
[2] 問題文(含コード&リンク):ガウス消去法を並列化せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2009/03/13中
[5] その他の制限:
エムピーアイの問題ですが、後退代入以外完成してます。上三角型の行列を作るところまでは
出来たのであとは単純に答えを計算するだけなのですが、アルゴリズムがわかりません。
なので115行目の”後退代入”のところを埋めて下さいまし。
エムピーアイというか単にC言語のループの書き方のレベルなのでエムピーアイを知らなくても
アルゴリズムがわかれば書けると思います。なおプロセス数はmpirun -np 4 ./a.out
で実行して下さい(添付のインプットファイルが4行4列なので)
194 :
デフォルトの名無しさん :2009/03/12(木) 19:50:50
プログラム教えてください 配列の中の数値をランダムに入れ替えたいんです たとえば int A[]={ 1,2,3,4,5,6,7,8,9,10} ↓ランダム 4,9,5,1,8,6,2,10,3,7 教えてください
>>194 for ( i = 0; i < 100; i++)
{
乱数で0-9の数字を2個( p , q )作成
tmp = A[ p ];
A[ p ] = A[ q ];
A[ q ] = tmp;
}
#include <stdio.h> #include <time.h> int main(void) { int ar[]={11,12,13,14,15,16,17,18,19,20}; int size=sizeof(ar)/sizeof(ar[0]); int i, num, temp; srand( (unsigned)time( NULL ) ); for(i=size-1; i>=0; i--){ num = rand() % (i + 1); temp = ar[i]; ar[i] = ar[num]; ar[num] = temp; printf("%d ", ar[i]); } return 0; }
>>196 偏りそうにも見えるが、上手くいくのかな?
誰か優しく証明して。
なんでこう、乱数絡みの問題が定期的に湧くんだw
偏りっていうのはrandをつかうからってことなの? どれぐらい偏るもんなの?
いやいや、randのせいじゃなく、 単純に処理としての話。 for(i=0; i < size; i++)だと分かるんだけど、 逆でも良いのかなってこと。
>>200 > for(i=0; i < size; i++)だと分かるんだけど、
> 逆でも良いのかなってこと。
逆のほうが簡潔に書けるって話だな
デバッガで追っかけるとわかる
for(i=0; i < size; i++)で書いてみ
最終的に行き着くのが196になる
なんで196に行くのかが全然わからないや。
>>196 出来ました!
ありがとうございます
すごいですね
でも、randを使っているから同じ数字が入りそうなんですけど
なんで同じ数字が入らないんだろう?
ああ、iだからrand減って行くんですね 分かりました i=size-1と(i + 1)がまだ分かりませんが なんとか分かるように頑張ります ありがとうございます
私の知能じゃ10年かかっても思いつきませんでした ありがとうございますm(_;)m
まず、全体の中から1個選んで一番後ろに入れる。 次に、残ったものから1個選んで後ろから二番目に入れる。 これを残り0個になるまで繰り返す。 簡単だろ?
規則性はあるけど、乱数発生器をiで割っているのがいいよね
要するに松田優作ってことだ
学校の課題を手伝ってください。 [1] 授業単元: データ構造アルゴリズム [2] 問題文(含コード&リンク): キューを利用して、プリンタのプリントキューを再現したプログラム(以下に要点を記載)を作成しなさい。 "1”を入力するとキューにデータが追加され"2"を入力するとキューからデータが取り出される キューが満杯になったり、空になったりした際はその旨をメッセージで表示する。 また、以下の関数を作成し、使用しなさい。 vaio enqueue(int val)キューにデータを追加する vaio dequeue() キューからデータを取り出す vaio queue_print()キュー全内容を表示する 以上ですお願いします。 [3] 環境 [3.1] OS: Linux ソラリス [3.2] コンパイラ名とバージョン: 不明 [3.3] 言語: C [4] 期限: ([2009年3月15日]) [5] その他の制限: なし
プリントキューの仕様が不明だな。
vaioも不明
頭が弱いと生きるの大変そうだね
ちょww vaio?wwww
失礼しましたvaioじゃなくvoidでした。 キューを利用して、プリンタのプリントキューを再現したプログラム(以下に要点を記載)を作成しなさい。 "1”を入力するとキューにデータが追加され"2"を入力するとキューからデータが取り出される キューが満杯になったり、空になったりした際はその旨をメッセージで表示する。 また、以下の関数を作成し、使用しなさい。 void enqueue(int val)キューにデータを追加する void dequeue() キューからデータを取り出す void queue_print()キュー全内容を表示する
学校の課題でどうしてもできないC言語があるのですかどなたか手伝ってください。 スタックを利用した逆ポーランド電卓を作成しなさい。ただし、演算は四則演算のみとし、数値と数値、数値と演算子の間は半角スペースで区切って入力することとする。 お願いします。
[1] 授業単元: データ構造アルゴリズム [2] 問題文(含コード&リンク):要素数10個の整数配列を用意します。要素を入力し、クイックソートを用いて昇順にソートするプログラムを作成しなさい。 [3] 環境 [3.1] OS: (Linux/) [3.2] コンパイラ名とバージョン: (わかりません) [3.3] 言語: (C) [4] 期限: [無期限] [5] その他の制限: なし
[1] 授業単元: データ構造アルゴリズム [2] 問題文 スタックを利用した逆ポーランド電卓を作成しなさい。ただし、演算は四則演算のみとし、数値と数値、数値と演算子の間は半角スペースで区切って入力することとする。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: [3/16] [5] その他の制限: なし
>>221 dequeue()の戻り値もvaioだぞw
>>219 #include<stdio.h>
#include<stdlib.h>
#define N 10
int f(const void*a,const void*b){
 return *(const int*)a-*(const int*)b;
}
int main(){
 int a[N],i;
 for(i=0;i<N;++i)scanf("%d",a+i);
 qsort(a,N,sizeof(int),f);
 for(i=0;i<N;++i)printf("%d ",a[i]);
}
osによってプログラムの違いってあるんですか?
for(i=0;i<N;++i)scanf("%d",a+i); for(i=0;i<N;++i)printf("%d ",a[i]); なんか気持ち悪いな
>>228 意図が読めないなんてピュアな方ですねw
>>220 終了はCtrl+Z
#include<stdio.h>
#include<stdlib.h>
int s[99],p;
void push(int n){s[p++]=n;}
int pop(void){return s[--p];}
int main(){
 char b[99];
 for(;scanf("%98s",b)==1;){
  switch(*b){
   case'+':push(pop()+pop());break;
   case'-':push(pop()-pop());break;
   case'*':push(pop()*pop());break;
   case'/':{int t=pop();push(pop()/t);}break;
   default:push(atoi(b));
  }
  printf("%d\n",s[p-1]);
 }
}
232 :
230 :2009/03/14(土) 21:13:38
やべバグあるわ。今直す
234 :
230 :2009/03/14(土) 21:18:22
>>220 少し短くなったかな
#include<stdio.h>
#include<stdlib.h>
int s[99],p;
void push(int n){s[p++]=n;}
int pop(void){return s[--p];}
int main(){
 char b[99];
 for(;scanf("%98s",b)==1;printf("%d\n",s[p-1]))
  switch(*b){
   int t;
   case'+':t=pop();push(pop()+t);break;
   case'-':t=pop();push(pop()-t);break;
   case'*':t=pop();push(pop()*t);break;
   case'/':t=pop();push(pop()/t);break;
   default:push(atoi(b));
  }
}
>>233 void PrintTreeRev(BinNode *p){
if (p != NULL) {
PrintTree(p->right);
PrintData(p->data);
PrintTree(p->left);
}
}
を追加してメニューから呼ぶようにしろ
237 :
236 :2009/03/14(土) 21:28:40
おーう、中のPrintTreeもPrintTreeRevだ 逝ってくる
>>227 微妙に質問が質問として成立してないんじゃね?
OS自体がプログラムだから、プログラムとして違いがあるし、
OSの機能を使うプログラムの場合も、OSが違うからプログラムとして違いがある。
>>234 いい感じ
でも、"%98s"じゃなく、"%98[^\n]"じゃないとダメぽ
239 :
234 :2009/03/14(土) 21:44:06
>>238 すまん。なぜダメなのか教えてくれないか。
何が入力されたときにまずい?
>>239 すんません。
勘違いしてました。
scanf一回で、式を全部持ってくるのかと思ってました。。。
241 :
234 :2009/03/14(土) 21:51:32
あるある
osの違いでC言語に違いが出てくることってあるんですか?
[1] 授業単元: データ構造アルゴリズム [2] 問題文 スタックを利用した逆ポーランド電卓を作成しなさい。ただし、演算は四則演算のみとし、数値と数値、数値と演算子の間は半角スペースで区切って入力することとする。 逆ポーランド電卓 逆ポーランド記法の数式を入力してリターンキーを押すと答えを表示してくれるもの。スタックを使用して以下のように計算する。 1.数値なら、そのままスタックにつむ 2.演算子なら、2つの数をスタックからおろして演算を行い、その結果を再びスタックにつむ。 ※逆ポーランド記法とは演算子を後ろに置く記法。例えば1+2は12+に、(1+2)*3は12+3*になる。逆ポーランド記法は後置法ともよばれる。 [3] 環境 [3.1] OS: (unix) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: [3/16] [5] その他の制限: なし よろしくお願いします。
>>249 問題が同じでも細かいところが違うんですよ。
確かにOSが違うな
252 :
249 :2009/03/15(日) 02:51:34
253 :
デフォルトの名無しさん :2009/03/15(日) 03:22:19
すみません、C初心者で、今課題をやってるのですが、入門書見ながらでもさっぱりです。 よろしくおねがいします。。 ↓↓↓↓↓ 以下のプログラムは、入力された10個の数値を引き算し、その結果を表示するプログラムです。 9〜11行目を別の関数(関数名はFuncDev)とし、修正しなさい。ただし、グローバル変数は使わないこと。 またFuncDev内のローカル変数名は任意とします FuncDev関数は以下の定義とします int FuncDec(void); FuncDev関数の戻り値は、画面入力されたint型データとします。 1:#include<stdio.h> 2:void main(void); 3:void main(void) 4:{ 5: int n1 n2; 6; int nt; 7: nt=0; 8: for(n1=0;n1<10;n1++){ 9: printf("0-9の数値を入力:"); 10: scanf(" %d",&n2); 11: nt-=n2; 12: } 13: printf("結果は%dです",nt); 14:}
#include <stdio.h> int FuncDev(void); int main(void) { int nt, n1; nt = 10000; for(n1 = 0; n1<10; n1++){ nt -= FuncDev(); } printf("結果は%dです", nt); } int FuncDev(void) { int n2; scanf(" %d", &n2); return n2; }
255 :
デフォルトの名無しさん :2009/03/15(日) 03:41:45
>>254 すばやいご回答ありがとうございました。
私は問題の意味を勘違いしていたみたいでした。
自分一人だったら白紙で出すところでした。
本当にありがとうございました
OSがunixって幅が広すぎるよな。
258 :
>>253 :2009/03/15(日) 04:18:12
>>254 さま
すみません、
今読んでいて疑問に思ったのですが、
6行目の
nt=10000;
とはどういう意味なのでしょう?
簡単に解説をしてくださると助かります
>>252 問題はいっしょだが条件が追加されてる。
>>259 どんな条件?
逆ポーランド電卓の説明が追加されているだけにしか見えんが?
>>260 ようわからんが実行結果がちがったんじゃねーの?たぶん同じやつが書き込んでるとおもわれる。
ntは引かれる数。10000は一万。
263 :
デフォルトの名無しさん :2009/03/15(日) 13:42:22
>>253 #include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include "windows.h"
using namespace std;
int FuncDec(){
int n2;
cout << "input 0-9" << endl;
cin >> n2;
return n2;
}
int main(void){
int n1;
int nt=0;
for(n1=0;n1<10;n1++){
nt-=FuncDec();
}
cout << "output " << nt;
Sleep(10000);
}
264 :
デフォルトの名無しさん :2009/03/15(日) 13:45:44
このスレ、己の描いた独自プログラムと簡単な問題文しか出さない人が多いけど 独自プログラムなんて出すよりも 詳しい問題文やどういったアルゴリズムにしようとしてるか描いてくるほうがありがたい というのもプログラムなんざ千差万別だから、そんなもの提示されても 俺のプログラムと描き方の雰囲気が少しでも違ってたらいちいち面倒なことになる
266 :
デフォルトの名無しさん :2009/03/15(日) 15:55:22
この世に存在するソフトウェアのソースが公開されているものなんて ほんのごく一部だぞ?他人の猿真似でどうにかなるもんでもなかろう 定石なんて、書店に行けばいくらでも見つかるぞ
osの違いでC言語に違いが出てくることってあるんですか?
>>267 環境依存に関わるライブラリではあり得る。
>>267 Cの規格上、差異を認めている部分(処理系定義)では起こりうる。
もちろんOSの値が以外の原因で起こることもあるけど。
型の大きさとか表現方法とか。
>>264 所詮、ここはC系で一番バカな質問を受け付ける/受け流すためのハコだからな。
問題文の読み方も分からないって手合いが多数だし、「ここまで書きました」は大概読まないほうがいい。
動かないコードを見て、何のツモリか当て推量するのは不毛だしな。
・・・動いているコードでさえ、何のツモリ(仕様)かなんて、推量はあてにならないしな。
>>248 parseあんま自信無いw
#include<stdio.h>
#include<ctype.h>
int s[99],p,a;
void push(int n){s[p++]=n;}
int pop(void){return s[--p];}
int main(){
 int c,t;
 for(;(c=getchar())!=EOF&&c!='\n';){
  if(isspace(c));
  else if(c=='+')t=pop(),push(pop()+t);
  else if(c=='-')t=pop(),push(pop()-t);
  else if(c=='*')t=pop(),push(pop()*t);
  else if(c=='/')t=pop(),push(pop()/t);
  else if(ungetc(c,stdin),scanf("%d",&t)==1)push(t);
  else return fprintf(stderr,"Parse error!");
 }
 printf("%d\n",pop());
}
272 :
271 :2009/03/15(日) 18:00:01
悪い。修正版。 #include<stdio.h> #include<ctype.h> int s[99],p; void push(int n){s[p++]=n;} int pop(void){return s[--p];} int main(){  int c,t;  for(;(c=getchar())!=EOF&&c!='\n';)   if(isspace(c));   else if(c=='+')t=pop(),push(pop()+t);   else if(c=='-')t=pop(),push(pop()-t);   else if(c=='*')t=pop(),push(pop()*t);   else if(c=='/')t=pop(),push(pop()/t);   else if(ungetc(c,stdin),scanf("%d",&t)==1)push(t);   else return fprintf(stderr,"Parse error!");  printf("%d\n",pop()); }
getchar()使うヤツって……
いちいち言うくせに、指摘や適切なものを提示しないヤツって・・・口先だけのインポ野郎だなw
こんなスレで偉そうにしているヤツって……
>>270 初心者のコード見てこき下ろしたり、黒歴史を思い返したりするのもまた一興じゃないか。
非再帰って自前でスタック使ったら、再帰アルゴリズムを 言語の再帰使わずに実装しているだけの様な。
クソ課題だなあ
282 :
自分が解けもしないくせに口だけは大きい馬鹿 :2009/03/15(日) 22:40:26
281 名前:デフォルトの名無しさん 投稿日:2009/03/15(日) 22:37:11 クソ課題だなあ
分割統治法を非再帰でやらせるとか クソ課題以外の何者でもないだろ
こんな感じかな? void quick(Data a[], int left, int right, int Cmp(Data x, Data y, int order), int order){ int pl; int pr; Data x; while(1) { pl =left; pr =right; x = a[(pl+pr)/2]; do { while(Cmp(x, a[pl], order)) pl++; while(Cmp(a[pr], x, order)) pr--; if ( pl <= pr ){ swap(Data , a[pl], a[pr]); pl++; pr--; } } while(pl <= pr ); if (left < pr) {right = pr; continue;} if (pl < right) {left = pl; continue;} break; } }
285 :
自分が解けもしないくせに口だけは大きい馬鹿 :2009/03/15(日) 23:14:59
283 名前:デフォルトの名無しさん 投稿日:2009/03/15(日) 22:55:57 分割統治法を非再帰でやらせるとか クソ課題以外の何者でもないだろ
オレが解けないのは課題が悪いからだ!
288 :
デフォルトの名無しさん :2009/03/15(日) 23:26:07
口先だけのヤツは、いつも自分がそれに対してどう思うか? という主観しか述べず、問題があるなら問題点を指摘するなり 客観性のある見解を示さず、自分が言ったことを反対されると ファビョるだけの井の中の蛙なんだなぁ
>>289 間違っる。
最初のleftとrightを記憶し、
左側を絞り込み、記憶しておいたleftとrightで右側を絞り込むように
2回に分けないといけないみたい。
>>283 再帰を反復に変換するのは普通の課題だろ。
292 :
デフォルトの名無しさん :2009/03/16(月) 01:15:13
初心者です。 /*BMI.c*/ #include<stdio.h> int main() { double a,b,c; c=b/(a*a); printf("あなたの身長(m)を入力してください。-----"); scanf("%f",&a); printf("あなたの体重(kg)を入力してください。-----"); scanf("%f",&b); printf("あなたのBMIは%fです。\n",c); if(c >=25){ printf("あなたは肥満です。"); } return 0; } これはあってますか?
修正? void quick(Data a[], int left, int right, int Cmp(Data x, Data y, int order), int order){ int pl;int pr;Data x;int _right; _right = right; while(1) { pl = left;pr = right;x = a[(pl+pr)/2]; do {while(Cmp(x, a[pl], order)) pl++;while(Cmp(a[pr], x, order)) pr--; if ( pl <= pr ){swap(Data , a[pl], a[pr]);pl++;pr--;} } while(pl <= pr ); if (left < pr) {right = pr; continue;} break; } left = 1;right = _right; while(1) { pl = left;pr = right;x = a[(pl+pr)/2]; do {while(Cmp(x, a[pl], order)) pl++;while(Cmp(a[pr], x, order)) pr--; if ( pl <= pr ){swap(Data , a[pl], a[pr]);pl++;pr--;} } while(pl <= pr ); if (pl < right) {left = pl; continue;} break; } }
それじゃ無理だろ
修正の修正? void quick(Data a[], int left, int right, int Cmp(Data x, Data y, int order), int order){ int pl; int pr; Data x; int _right; _right = right; while(1) { pl = left; pr = right; x = a[(pl+pr)/2]; do { while(Cmp(x, a[pl], order)) pl++; while(Cmp(a[pr], x, order)) pr--; if ( pl <= pr ){ swap(Data , a[pl], a[pr]); pl++; pr--; } } while(pl <= pr ); if (left < pr) {right = pr;continue;} else right = _right; if (pl < right) {left = pl;continue;} break; } }
クイックソート 非再帰でググればいくらでも転がってるだろ
>>292 a,bに値が格納される前にcを計算しているので間違い。
302 :
デフォルトの名無しさん :2009/03/16(月) 12:03:26
>>298 指摘するくらいなら、自分がそれに応じたコードを示せよ?
ここんとこ、口先だけの役立たずw
303 :
デフォルトの名無しさん :2009/03/16(月) 16:54:19
[1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク):要素数10個の整列配列を用意します。 要素を入力し、クイックソートを用いて昇順にソートするプログラムを作成しなさい。 [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([21年3月16日まで] ) [5] その他の制限: qsortを使わないでお願いします。
[1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク):qsort関数を用いてソートするプログラムを作成しなさい。身長の昇順、視力の降順など、複数の条件でソートすること。 ※qsort関数 書式 void qsort(void*base,size_t nmemb,size_t size,int(*compar)(const void*,const void)) [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([21年3月16日まで] ) [5] その他の制限:
[1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク):文字列から任意の文字を探索するプログラムを作成しなさい。 [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([21年3月16日まで] ) [5] その他の制限: なし よろしくおねがいします。
>>307 その問題はqsortを使っているので…
>>306 #include <stdio.h>
#define BUFSIZE 108
char *mstrchr(const char *src, char ch)
{
for(;*src;++src) if(*src==ch) return (char*)src;
return 0;
}
int main()
{
char buf[BUFSIZE], ch, *p;
int c = '0';
printf("文字列:", buf);
fgets(buf, BUFSIZE, stdin);
/*if(!mstrchr(buf, '\n')) while(c!='\n'&&c!=EOF) c = getchar();
if(c==EOF) return 1;*/
printf("文字:", buf); ch = getchar(); p = mstrchr(buf, ch);
if(p) printf("%d文字目\n", p-buf+1);
else printf("なかった\n");
return 0;
}
>>304 #include <stdio.h>
#define N 10
void mqsort(int x[], int left, int right){
int i=left,j=right,p=x[(i+j)/2];
while(1){
while(x[i]<p) i++;
while(p<x[j]) j--;
if(i>=j) break;
{int tmp = x[i]; x[i] = x[j]; x[j] = tmp;}
i++;j--;
}
if(left<i-1) mqsort(x, left, i-1);
if(j+1<right) mqsort(x, j+1, right);
}
int main(){
int a[N],i;
for(i=0;i<N;++i)scanf("%d",a+i);
mqsort(a,0,N-1);
for(i=0;i<N;++i)printf("%d ",a[i]);
return 0;
}
>>309 strchr() に準じてだろうけど
const char* で受けた一部を char* で戻すのって微妙に気持ち悪いよね
[1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク): "string"の先頭の三文字を入力した文字の三文字と比較して、 一致すれば0を一致しなければ1を出力するプログラムを作成しなさい。また、"XXXX"を入力すると終了するようにしなさい。 [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([21年3月16日まで] ) [5] その他の制限: なし よろしくおねがいします
[1] 授業単元:データ構造アルゴリズム [2] 問題文 ある文の中に指定した語が見つかるとその場所を表示するプログラムをBM法を用いて作成しなさい。 [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([21年3月16日まで] ) [5] その他の制限: なし おねがいします
どんだけ宿題溜め込んでるんだよw
>>315 #include <stdio.h>
#include <string.h>
int main(){char s[]="string",b[5];return fgets(b,5,stdin)&&strcmp(b,"XXXX")&&printf("%d",strncmp(b,s,3)?1:0)>=0;}
>>318 これで出したらやり直しくらいそうだがな
>>318 教員もこんな簡単な問題に対して,こんな大人げない解答出されたら疑問に思うわなw
>>315 ./a <ソース.c
#include <stdio.h>
int main()
{
char s[] = "string", b[1024]; /*
string */
do {
if(!gets(b)) return 1;
printf("%d\n", strncmp(b,s,3) ? 1:0);
} while(strcmp(b, "XXXX"));
return 0;
}
>>326 ./a<ソース.cが意味不明なんですけど
[1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク):要素数10個の整数配列を用意します。要素を入力し、シェルソートを用いて昇順にソートするプログラムを作成しなさい。 今回は、比較幅を1,2,4,8…のような2のべき乗とする。 [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([21年3月16日まで] ) [5] その他の制限: なし よろしくおねがいします
2021年か、結構先だな
>>315 ./a <ソース gets使ってしまった。
#include <stdio.h>
int main()
{
char s[] = "string", b[1024]; /*
string */
do {
if(!fgets(b,1024,stdin)) return 1;
printf("%d\n", strncmp(b,s,3) ? 1:0);
} while(strcmp(b, "XXXX\n"));
return 0;
}
[1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク):qsort関数を用いてソートするプログラムを作成しなさい。身長の昇順、視力の降順など、複数の条件でソートすること。 ※qsort関数 書式 void qsort(void*base,size_t nmemb,size_t size,int(*compar)(const void*,const void)) [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([09年3月17日まで] ) [5] その他の制限:
336 :
335 :2009/03/17(火) 00:58:08
お願いします。この問題とかないと単位がやばいです。
>>335 入力の形式が分からん。勝手に決めていいのか?
338 :
335 :2009/03/17(火) 01:05:26
いいです。レスください!
341 :
335 :2009/03/17(火) 06:18:57
342 :
335 :2009/03/17(火) 07:09:00
すいません!ヘッダとしてが必要という条件が出ているのを忘れてました。どなたか
<stdlib.h>を使った
>>335 をレスお願いします!
343 :
335 :2009/03/17(火) 07:10:59
すいません訂正ですヘッダとして<stdlib.h>が必要という条件が出ているのを忘れてました。どなたか
<stdlib.h>を使った
>>335 をレスお願いします!
344 :
335 :2009/03/17(火) 07:16:32
>>340 さんせっかくレスくれたのに申し訳ありません。
>>1 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
346 :
335 :2009/03/17(火) 07:45:25
そこをなんとか!せっぱつまってるんです。
340の void qsort(void*base,size_t nmemb,size_t size,int(*compar)(const void*,const void*)); の代わりに #include <stdlib.h> にすりゃいいだけだろw
>>346 qsort()のプロトタイプ宣言を#include<stdlib.h>に置き換える
349 :
335 :2009/03/17(火) 08:00:10
350 :
デフォルトの名無しさん :2009/03/17(火) 12:41:52
論より証拠、言葉よりソースコード、日本語よりプログラム言語 分かったか?最近、口先だけの、新入りは?
いまどきそれかよw
腹減るじゃんか。
やっぱり今時はおたふくだよねー
よろしくお願いします。 [1] 授業単元: プログラミング実習 [2] 問題文 キーボードから名前と年齢を入力し、入力した順序につながったリストを作成して、それを利用して表示するプログラムを作成しなさい。 (実行例) >%a.out Please,write down your name >taro How old are you? >27 Continue?yes(1)or no(0)>1 Please,write down your name >hanako How old are you? >27 Continue?yes(1)or no(0)>0 taro /27 hanako /27 >% [3] 環境 [3.1] OS: (UNIX) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([09年3月17日まで] ) [5] その他の制限: (なし)
>>357 張り付いてリロードリロード大変でしょ?
ネタ投下したらしばらく
本読むなりバイトするなり有意義に時間使いなよ
>>362 嫌そうじゃないだろう。
(実行例)
% ./a.out <8981.c
入力した文字列は:#include <stdio.h>
検索する文字列を入力してください:std
10 文字目で一致しました。(一致する文字列が見つかりませんでした。)
% でOK?
え?./a.out<8981.cって入力するんですか?
367 :
360 :2009/03/17(火) 18:22:37
>>361 以下のように入力すると答えが出る。
% ./a.ou std <8981.c
10
%
>>357 364に先越されたorz...
#include<stdlib.h>
#include<stdio.h>
typedef struct P{struct P*x;char n[64];int a;}P;
P h,*c=&h;int q;
int main(){
 for(;
  c->x=malloc(sizeof(*c)),c=c->x,c->x=0,
  printf("Please,write down your name >"),scanf("%63s",&c->n),
  printf("How old are you? >"),scanf("%d",&c->a),
  printf("Continue?yes(1)or no(0)>"),scanf("%d",&q),q;
 );
 for(c=&h;c=c->x;printf("%s /%d\n",c->n,c->a));
}
くせぇくせぇ、後だし麻呂の臭いがぷんぷんすんぜ
こりゃ〜生粋のクソースだ、クソースを消毒だ〜
>>357 オリジナルは
>>368 さんのソース。
#include<stdio.h>
typedef struct P {
struct P *x;
char name[64];
int age;
} Q ;
int main(){
Q h, *c = &h;
int qa;
char dmy[2];
do {
c->x = malloc(sizeof(*c));
c = c->x;
c->x = 0;
printf("Please,write down your name >"), fgets(c->name, 64, stdin);
c->name[strlen(c->name)-1] = '\0';
printf("How old are you? >"), scanf("%d", &c->age);
printf("Continue?yes(1)or no(0)>"), scanf("%d%c", &qa, dmy);
} while (qa);
for( c = &h; c = c->x; )
printf("\n%s /%d", c->name, c->age);
}
ネタ切れー?
mallocしたあとfreeしなくていいのか?
課題だから書かないとダメってぐらいのレベルじゃね?
いまどきのハードウェアでfreeしなくちゃならんヤツなんて皆無だろ freeとか気取ってやってるソース見たらデスクトップ破りたくなる
>>357 >>374 free追加したぞ。
>>376 のデスクトップ破れ。
#include<stdlib.h>
#include<stdio.h>
struct P{struct P*x;char n[64];int a;}h,*c=&h,t;
int main(){
 for(;
  (c=c->x=malloc(sizeof(*c)))->x=0,
  printf("Please,write down your name >"),scanf("%63s",&c->n),
  printf("How old are you? >"),scanf("%d%*c",&c->a),
  printf("Continue?yes(1)or no(0)>"),getchar()-'0';
 );
 for(c=&h;c=c->x;t=*c,free(c),c=&t)printf("%s /%d\n",c->n,c->a);
}
380 :
今年度最高峰のレス :2009/03/18(水) 03:28:13
ハードがどうとか言う前に、例えmainの最後だろうと、メモリの動的確保をしたら それに対してfreeはセットで使うのが望ましいのだが
struct P tいらんかった。  for(;c=h.x;h=*c,free(c))printf("%s /%d\n",c->n,c->a);
たまに、プログラムが異常終了して、跡が残ることはある。 自分は大学で、ネットワーク関連の管理に携わったことがあるが、 ユーザがログオフしても、まだログインしたまま残ることもあった。 そう、コンピュータやプログラムには完璧なんて無いんだよ。 だから、こうやって今も、昔から色々と改善がされているんだろ? その改善の経緯をもとに、こういったものも作られていくんだよ。 ただ単に、電子計算機に数値を与えて、処理をすれば良いわけじゃない、 システムを運営するのは。
どこを縦読み?
ネットゲームでクライアントを終了してもキャラがサーバーに残って 再ログインしようとしても入れませんでしたw
大学でUNIXを使っていたが、まぁそれは管理者が今も普通に使っている OSの基本。学生がワークステーションからログインして、終了するときに ログオフの手続きをせずに、接続、作業で使っているプログラムを Windowsのウィンドウの右上にあるクローズボックスで閉じてしまう人もいる。 それ以前に、コンピュータの電源スイッチを押して起動は出来るのだが 終了する際に、OSの終了手続きを取らずに電源を切ってしまった人もいた。 それにおけるトラブルも体験したさ。そういった、管理者側の立場になれば、 エンドユーザの身勝手さや、それを阻止する手立てや仕組みを作るのも、 プログラマーには必要なのさ、ワトソン君。
また、OSも完璧ではない。プログラムを作った側の措置が不十分だったのか、 あるいはハードウェアに問題があったのか?それに応じてデバッグされることもある。 ただ、それも本当は、プログラマーの思い違いにより、作り直せば解決するものもあるが、 巨大なプロジェクトでいくら個別にモジュールを改良できるとしても、根幹、組み合わせ方に 問題があれば、やり直すしかない。ただ、この世には既にある定石、常套手段を用いてやれば 特に余計なことをしなければ、問題は起きないもんだよ。 しかし、人間の行動までは、正直、予期できない。今もなお、過去から続く争い。 裁判、解決のための判例作り。そして、判例に基づいて、今後は処理される人間同士の トラブル。PCのトラブルなんて、電子計算機をちょちょいと弄れば済むことが多く、 楽なものですね、ポワロ殿。
>>386 ,387___
/ || ̄ ̄|| ∧∧
| ||__|| ( )
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___ ゴキッ
/ || ̄ ̄|| <⌒ヽ ))
| ||__|| < 丿
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___
/ || ̄ ̄|| ∧∧
| ||__|| ( )
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___
/ || ̄ ̄||
| ||__|| ミ ゴトッ
| ̄ ̄\三⊂/ ̄ ̄ ̄/ミ ,'⌒>
| | ( ./ / l、_>
それで、結局、例え初歩的だろうとプログラムを作る以上は、何かしら そういったシステムに関わる部分の知識も必要になるわけだろ? 第一、APIを使っているだけでも、既に出来上がったその仕組みを知ることになるし。 麻ー呂っくの後に、振りーを忘れないで賜う。
390 :
372 :2009/03/18(水) 15:41:13
実体のコピーを省く。 P *t; for( c=h.x; c!=0; c=t) printf("\n%s /%d", c->n, c->a), free((t=c->x,c));
病気が進行してるw
聞き方が悪いかもしれませんが hairetsu[0] = 10 hairetsu[1] = 5 hairetsu[2] = 13 ... というようなものにたいして rank[0] = 1 rank[1] = 0 rank[2] = 2 ... というような感じにしてくれる関数はありますか? それとも,自分で作らないとないですか?
>>392 無いです
multimap もしくは map
にいれてイテレータで取り出せばおk
何がしたいのか訳わからん。エスパー検定? rankと聞くと行列の階数を思い出す。 なんか、肝心な所を省略してません?
hairetsuのそれぞれの要素の大小関係をrankに0から入れていると? 並び替えの応用でやってみ。
>>392 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int hairetsu[10], rank[10], i, j, temp;
srand(time(NULL));
for(i=0; i<10; i++) rank[i] = i, hairetsu[i] = rand() % 100;
for(i=0; i<10; i++) {
for(j=9; j>i; j--) {
if(hairetsu[rank[j]] < hairetsu[rank[j-1]]) {
temp = rank[j];
rank[j] = rank[j-1];
rank[j-1] = temp;
} } }
for(i=0; i<10; i++) printf("hairetsu[%d] = %2d, rank[%d] = %d\n", i, hairetsu[i], i, rank[i]);
return 0;
}
こんな感じにrankの方をソートしても可
struct{int hairetu; int rank;} data[10]; rankには0を初期値として入れておいて、dataをhairetuでソートして、 次にrankに0〜9をセットして、もう一度、dataをrankでソート。 これは、「バブルソート」という名前。 #include <stdlib.h> #include <time.h> int main(void) { int hairetsu[10], rank[10], i, j, temp; srand(time(NULL)); for(i=0; i<10; i++) rank[i] = i, hairetsu[i] = rand() % 100; for(i=0; i<9; i++) { for(j=9; j>i; j--) { if(hairetsu[j] < hairetsu[j-1]) { temp = rank[j], rank[j] = rank[j-1], rank[j-1] = temp; temp = hairetsu[j], hairetsu[j] = hairetsu[j-1], hairetsu[j-1] = temp; } } } for(i=0; i<10; i++) printf("hairetsu[%d] = %2d, rank[%d] = %d\n", rank[i], hairetsu[i], rank[i], i); return 0; }
stdio.h 同じ値でもrankの中の値が違う
403 :
392 :2009/03/18(水) 23:24:12
適当な聞き方をしてしまってすみません。 ただ配列の値がでかい順や小さい順で順位をつけられないかなと思ったので。 ありがとうございました。
[1] 授業単元:プログラミング実習 [2] 問題 ガウス・ジョルダン法+ピボット選択法を用いて以下の連立1次方程式を解くプログラムを作成しなさい。 2x+3y+z=4 4x+y−3z=-2 −x+2y+2z=2 [3] 環境 [3.1] OS: (UNIX) [3.2] : (gcc) [3.3] 言語: (C) [4] 期限: ([09年3月19日12:00まで] ) [5] その他の制限: (なし) よろしくおねがいします。
405 :
デフォルトの名無しさん :2009/03/18(水) 23:50:24
[1] 授業単元: アルゴリズム [2] 問題文:ハッシュ探索(チェイン法)のプログラムを作成しなさい。 1・データファイル「j2」を読み込みなさい。 2・任意の語彙がいくつ使われているか調べなさい。 3.データの追加、削除、表示ができるようにしなさい。 データはyahooのtopページをテキスト化したものとする。 検索文字列:任意の文字(列)、(例として「配信」など)の使用回数を 調べなさい。 画面の表示例は、 1:表示 2:検索(任意の文字検索&任意の文字の個数) 3:追加 4:削除 5:終了 以上のことをふまえたプログラムをサンプルを変更して作りなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 3月19日夕方まで [5] その他の制限: ライブラリ関数はサンプル以外使用しない。
406 :
デフォルトの名無しさん :2009/03/18(水) 23:51:43
よろしくお願いします。 [1] 授業単元:データ構造アルゴリズム [2] 問題文(含コード&リンク):タグ名をpricetype,メンバ名をteika,waribikiとする構造体kakakuとタグ名goodstype, メンバ名をname[30],kakaku(←構造体)とする要素数10個の構造体配列goodsを作成し、商品名と定価を入力すると商品名、 定価、割り引き価格の一覧が表示されるプログラムを作成しなさい。」ただし、割引価格は、定価が1000円以上の場合は 定価の2割引、それ以外は1割引とする。また、表示するときはポインタを使用すること。 [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
408 :
407 :2009/03/19(木) 00:04:18
すいません環境等書き忘れていましたosはUNIX、コンパイラはgcc期限無期限その他制限なしでお願いします。
>>392 >>396 への追加。
#include <stdio.h>
#include <time.h>
int main(void)
{
int hairetsu[10], rank[10], index[10], i, j, temp;
srand(time(NULL));
for(i=0; i<10; i++)
rank[i] = i, hairetsu[i] = rand() % 100;
for(i=0; i<9; i++) {
for(j=9; j>i; j--) {
if(hairetsu[rank[j]] < hairetsu[rank[j-1]]) {
temp = rank[j];
rank[j] = rank[j-1];
rank[j-1] = temp;
} } }
for(i=0; i<10; i++) {
printf("hairetsu[%d] = %2d, index[%d] = %d\n", i, hairetsu[i], i, rank[i]);
index[i] = i;
}
for(i=0; i<9; i++) {
for(j=9; j>i; j--) {
if(rank[index[j]] < rank[index[j-1]]) {
temp = index[j];
index[j] = index[j-1];
index[j-1] = temp;
} } }
for(i=0; i<10; i++) printf("rank[%d] = %d\n", i, index[i]);
return 0;
}
>>410 人のコードに無駄なもの付け足すなw
for(i=0; i<10; i++) index[rank[i]] = i;
で十分だろうが
ありがとうございます。それで、2回もソートする必要ないですね。 やってみます。
413 :
407 :2009/03/19(木) 07:59:06
すみません言語c言語で期限は今日のお昼までにお願いします!
>>407 #include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct pricetype{int teika, waribiki;}kakaku;
typedef struct goodstype{char name[30];kakaku kakaku;}goods;
int get_waribiki(int price){
return (price>=1000)?round(price*0.8):round(price*0.9);
}
void print_goods(goods *p){
printf("name:%s teika:%d waribiki:%d\n", p->name, p->kakaku.teika, p->kakaku.waribiki);
}
int main(void){
goods goods[10];
int i, price, goods_num;
char buf[30], *p;
for(i=0;i<10;i++){
printf("Input name : ");
if(fgets(buf, sizeof(buf), stdin)==NULL) break;
if((p=strchr(buf, '\n'))) *p='\0';
strcpy(goods[i].name, buf);
input_price:
printf("Input price : ");
if(fgets(buf, sizeof(buf), stdin)==NULL) break;
if(sscanf(buf, "%d", &price)!=1) goto input_price;
goods[i].kakaku.teika=price;
goods[i].kakaku.waribiki=get_waribiki(price);
}
goods_num=i;
for(i=0;i<goods_num;i++) print_goods(goods+i);
return 0;
}
#include <stdio.h>
#define N 10
struct goodstype {
char name[30]; /* 商品名 */
struct pricetype {
int teika; /* 定価 */
int waribiki; /* 割り引き価格 */
} kakaku;
} goods[N];
int main(void)
{
int i, num;
struct goodstype *work;
for(i=0; i<N; i++) {
work = &goods[i];
printf("商品名[%d/%d]?",i+1,N); fgets(work->name, 30, stdin);
work->name[strlen(work->name)-1] = '\0';
do {
printf("定価[%d/%d]?",i+1,N); num = scanf("%d", &work->kakaku.teika); getchar();
} while(num == 0);
if(work->kakaku.teika >= 1000)
work->kakaku.waribiki = work->kakaku.teika * (1-0.2);
else
work->kakaku.waribiki = work->kakaku.teika * (1-0.1);
}
printf("商品名,定価,割り引き価格\n");
for(i=0; i<N; i++) {
work = &goods[i];
printf("\"%s\",%d,%d\n",work->name, work->kakaku.teika, work->kakaku.waribiki);
}
return 0;
}
>>407
416 :
407 :2009/03/19(木) 16:23:45
418 :
417 :2009/03/20(金) 01:48:36
ごめん。寝付けん暇つぶしでやっとったら、期限見落としとったorz
ネタ投下キボン
問題出す方も大変だ。
[1] 授業単元:
[2] 問題文(含コード&リンク):
http://pc11.2ch.net/test/read.cgi/tech/1232627790/211 【 課題 】
課題1.
以下のような賭をすることを考えます.
1. 開始時の所持金をA円とします.
2. 目標とする金額をB円とします.
3. さいころを投げて偶数の場合は1円を獲得,奇数の場合は1円を失います.
4. 所持金が目標額のB円に到達すれば賭は終了,また所持金が0になった場合は破産で終了とします.
数学的な考察をすると,この賭の期待値はA円となります.つまり,何回もこの賭を続けていると,成功したり破産したりしますが,平均すると元の所持金しか得られないということです.
また,勝ち負けまでに投げるさいころの回数の平均は,(B-A)×Aとなります.
たとえば,開始時の所持金をA=8円,目標額をB=10円とすると,勝つ確率は8割,1ゲームあたり平均すると(10-8)×8=16回,さいころを投げることになります.
このことは,賭をしても儲からない,ことを意味していますね.
このことを確かめるプログラムを作成しなさい.
入力した文字に対応するモールス信号を出力するプログラム、お願いします
読んだけど課題じゃないし書くのめんどくさい 頼んだぜ
>このことは,賭をしても儲からない,ことを意味していますね. ダウト。一部の人間が損をし(破産し)、一部の人間が儲かることを意味している。
分散と試行回数による
問題の問題点を指摘するルートに入ってるw >問題出す方も大変だ。 本人も問題を出すつもりだったのだから,本望かw
>また,勝ち負けまでに投げるさいころの回数の平均は,(B-A)×Aとなります. マジで?
前スレにあった気がする
スレと時刻的に8992だろ?
>>420 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, j, targetMoney, startMoney, currentMoney;
int totalGame = 10000, totalDice = 0, totalWin = 0;
srand(time(NULL));
printf("所持金を入力してください:");
scanf("%d", &startMoney);
printf("目標額を入力してください:");
scanf("%d", &targetMoney);
for(i=0; i<totalGame; i++) {
for(j=1, currentMoney = startMoney; ; j++) {
if((int)(rand() / (RAND_MAX + 1.0) * 6) & 1 ) currentMoney++;
else currentMoney--;
if(currentMoney == targetMoney) { totalWin++; break; }
if(currentMoney == 0) break;
}
totalDice += j;
}
printf("勝率%.2f%% 平均回数%.2f\n", 100.0 * totalWin / totalGame, (double)totalDice / totalGame);
return 0;
}
>>434 すみません、8992です
ありがとうございました
438 :
437 :2009/03/22(日) 02:38:00
437です。 [4]期限:4月1日12:00 [5]その他制限:特になし 改めてお願いします。
あ、printfに\n入れるの忘れてた
>>437 #include <stdio.h>
#include <stdlib.h>
int main()
{
int n, *data, key, begin, end, mid, i;
while(1){
scanf("%d", &n);
if(n <= 0) break;
data = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i++) scanf("%d", &(data[i]));
scanf("%d", &key);
begin = 0; end = n - 1;
for(i = 0; begin <= end; i++){
mid = (begin + end) / 2;
if(data[mid] == key){
i++;
break;
}
if(data[mid] < key) begin = mid + 1;
else end = mid - 1;
}
printf("%d\n", i);
free(data);
}
return 0;
}
速いなorz
i++を二箇所に書くくらいならi=1からはじめればいいのに。
begin > endで抜けることを考えてi++2つとしたが、非常に頭悪いことをしてる気がする。
こんなプログラムメンテしたくない。というか、プログラミングのセンスないね、チミ。
>>445 先生のセンスをこのスレの奴らに見せ付けてやってください!
>>445 うん、ないよ。でも、趣味でしかないし、1人でのんびりやれればいいから
下手の横好きでもいいかなー。
>>445 メンテじゃなくて、先輩社員が作ったプログラムを触る仕事しかさせてもらえないんだろ?
>>441 ぱっと見、無限ループの可能性有だな〜
問題10ではOKだけど、脱出条件組み込んだ方が吉
if(begin == end) break;見たいな
scanfで値読んでるからマイナス入れれば終了するか・・・
>>450 サンクス
それより、問題文だとファイルアクセスっぽいがコマンドラインでよいのか?
何を言ってるのかわからない >for(i = 0; begin <= end; i++){ で脱出条件とやらは十分だと思うが
>>452 いや、外のWhile抜けないでしょそれじゃ。
While抜ける条件が、nのScanf or 値が同じ時のみ。
同値無し && 入力無し時のことを言ってる
外のwhile抜けるのになんでbeginとendが出てくるんだよw
>>454 441のプログラムを見れば分かると思うが、While(1)で無限ループしてんだぞ?
んで、beginとendで配列範囲を設定して、2文探索をしてる。
同値無し時にbeginとend判定しなくなるから、同値breakがキャンセルされ、あとはScanf()のbreakだけになる。
何を持ってbegin/endで煽るのか分かりかねる。
二分探索で見つからなかった場合に終了なんて、問題文のどこを探しても書いてありませんがw
終了しないとも書いてないなw
もしかして、見つかった場合のbreakで外側のループ抜けるとか思ってないか?
459 :
デフォルトの名無しさん :2009/03/22(日) 13:18:06
>>417 返事遅くなってすいません。
期限が延びて明日までになりました。
サンプルでは読み込む関数はないので自分で作成せよと本日問題追加されました。
>>455 begin/endはプログラムの終了と関係ないからだろ。
見つからなかった場合でも、終了するのはプログラムじゃなくて「探索」だぞ。
>探索の範囲がつきてしまった時に探索
>を終了します。
>>453 > While抜ける条件が、nのScanf or 値が同じ時のみ。
値を見つけた時に抜けているのはforだぞ
そもそも0を読み込んだら終了なのも理解できてないようだ
WhileとかScanfとか書いてるからただのアホだろw
>>441 さん
>>459 % ./a.out <data でファイル入力[Enter]
#include <stdio.h>
int BinarySearch(void);
int main(void) {
while(!BinarySearch()); return 0;
}
int BinarySearch(void) {
int n=0, *data, key=0, begin=0, end, mid, i;
if(scanf("%d", &n) != 1) return 1;
if(n == 0) return 0;
if(n < 0) return 2;
if((data = (int *)malloc(sizeof(int) * n)) == NULL) return 3;
for(i = 0; i < n; i++)
if(scanf("%d", &(data[i])) != 1) {free(data); return 1;}
if(scanf("%d", &key) != 1) {free(data); return 1;}
for(i = 1, end = n-1; begin < end; i++){
mid = (begin + end) / 2;
if(data[mid] < key)
begin = mid + 1;
else
end = mid - 1;
}
printf("%d\n", i);
free(data); return 0;
}
n==0のとき0返してどうすんだよw
466 :
465 :2009/03/22(日) 16:12:54
0はfalse、while(!false);で次のデータ。
問題は0で終了なのに、また関数呼び出してscanf()失敗してからループ抜けるってのがどうなのかって話
468 :
466 :2009/03/22(日) 16:48:42
464が俺だ。どうすんだよd どうもしない。
469 :
464 :2009/03/22(日) 18:28:13
>>464 修正
#include <stdio.h>
#define returnVal(n) {free(data); return n;}
int BinarySearch(void);
int main(void) {
while(BinarySearch() == 0); return 0;
}
int BinarySearch(void) {
int n=0, *data, key=0, begin=0, end, mid, i;
if(scanf("%d", &n) != 1) return 2;
if(n == 0) return 1;
if(n < 0) return 0;
if((data = (int *)malloc(sizeof(int) * n)) == NULL) return 3;
for(i = 0; i < n; i++) {
if(scanf("%d", &(data[i])) != 1) returnVal(2)
if(data[i] == 0) returnVal(1)
}
if(scanf("%d", &key) != 1) returnVal(2)
if(key == 0) returnVal(1)
for(i = 1, end = n-1; begin < end; i++){
mid = (begin + end) / 2;
if(data[mid] < key)
begin = mid + 1;
else
end = mid - 1;
}
printf("%d\n", i);
returnVal(0)
}
気持ち悪いマクロだw
#define returnVal free(data); return {returnVal 2;} のほうがよかったかd
いやそこじゃないだろw
BinarySearch() で nの入力 malloc free をやろうとする頭がキモイ
>>437 負の値と零も検索出来るように。マクロ似のmainも外した。
#include <stdio.h>
int main(void) {
int n=0, *data, key=0, begin, end, mid, i;
while(1) {
if(scanf("%d", &n) != 1) break;
if(n == 0) break;
if(n < 0) continue; // 暫定コンティニュー
if((data = (int *)malloc(sizeof(int) * n)) == NULL) break;
for(i = 0; i < n; i++) {
if(scanf("%d", &(data[i])) != 1) break;
}
if(i != n) { free(data); break; }
if(scanf("%d", &key) != 1) { free(data); break; }
for(i = 1, begin = 0, end = n-1; begin < end; i++){
mid = (begin + end) / 2;
if(data[mid] < key)
begin = mid + 1;
else
end = mid - 1;
}
printf("%d\n", i);
free(data);
}
return 0;
}
いつまでも引っ張るようなもんでもない
char*型を引数にとる関数に std::string型に格納されてる文字列を渡したいんですが、 c_str()の返す型がconst char *であるためうまく渡せません。 (char *)でキャスト変換するとコンパイルは通るのですが安全とはいえないです。 これを安全に渡すための方法があれば教えてください。 strcpyでコピーする方法はwarningが出てしまいます。 環境はVS2005です。
>>476 (char *)でキャストで良いと思います。
キャストを用いることはプログラマーが結果に関して責任を持つということ。 プログラマーが安全だと判断すればそれで良い。
const_cast使えば? だがスレ違いだ
C++なら(char *)じゃなくconst_cast<char *>だろーと議論に資しないことを申し奉りさぶらわんと欲す
コラッツの問題だw きっと誰かが剰余演算子を使わず,さらにはアクロバティックに書いてくれると期待w
>>481 #include <stdio.h>
int collatz(int n)
{
int i;
for(i = 0; n > 1; i++){
if(n % 2 == 0) n /= 2;
else n = n * 3 + 1;
}
return i;
}
int main()
{
int n;
while(1){
scanf("%d", &n);
if(n == 0) break;
printf("%d\n", collatz(n));
}
return 0;
}
これくらいしか思いつかんかった。
#include <stdio.h>
void main(){
int i=0,j;
while((!i||printf("%d\n",j))&&scanf("%d",&i)&&i)
for(j=0;i!=1;i=((i^1)&1)*(i
>>1 )+(i&1)*((i<<1)+i+1),++j);
}
>>483 さん
#include <stdio.h>
static int n = 0;
void collatz(void)
{
int i;
for(i = 0; n > 1; i++)
if(n & 1) n *= 3, n++;
else n >>= 1;
printf("%d\n", i);
}
int main(void)
{
while(scanf("%d", &n) != EOF && n) collatz();
return 0;
}
489 :
デフォルトの名無しさん :2009/03/25(水) 20:07:37
ほ
490 :
デフォルトの名無しさん :2009/03/27(金) 04:12:17
初歩的な問題だと思いますが、勉強し始めでわかりません。どうかよろしくお願いします 。 下記のソースを記述しコンパイルと実行を確認しなさい /** データ型 */ #include<stdio.h> void printDataType1(); main(){ printDataType1(); } /** * データ型の表示 * 単純に表示 */ void printDataType1(){ int intData = 10;
ごめん、難解すぎる
printf("dec %d\n", intData); printf("hex %x\n", intData); printf("oct %o\n", intData); } と、後ろに追加する。コンパイルのしかたは、調べれば分かるので省略する。
ソースの書き方とコンパイルの仕方を質問しているんじゃないかとエスパーする どっちにしてもこれ以上のエスパーは無理だが
一番下に"}"を付けるだけでいいんじゃね
[1] 授業単元: [2] 問題文(含コード&リンク):ファイル出力で二つ以上の関数が同じファイルに続けて出力させるにはどうすればいいですか? 毎回file openさせてやってみたら、途中まで上書きになってしまいました。 [3] 環境 [3.1] OS:Win xp [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:無期限 [5] その他の制限:
>>495 二回目はアペンドモード"a"で開くしかないよ
ただしXPならMS-DOSの系統なのでテキストモードだと
EOFが最後に入っているのでこれを1バイト切り詰めてから
アペンドしないといけない
「途中まで上書き」と言ってるから、俺はfseekで解決と予測。
>>495 ファイルポインタを関数で使いまわす
FILE* fp = fopen("***", "w");
func1(fp);
func2(fp);
fclose(fp);
>>498 それあかんよ
FILE構造体にはデータも書き込むので
func1(&fp);
func2(&fp);
としておき
受ける側は
func1(FILE **fp)
func2(FILE **fp)
としないといけない
実際に実験してみればわかる
500 :
495 :2009/03/27(金) 16:26:59
みなさんありがとうございます。 やってみます。
実験してないし流れも読めないが、
>>499 の主張は間違っている気がする。
だって、FILE* fpなんでしょ?
> FILE構造体にはデータも書き込むので
FILEへのポインタの値を変えたりするつもりは無いはず。
C++のifstreamとかofstreamのようなオブジェクトなら リファレンス渡しまたはアドレス渡しをしなければいけないのは わかるが、CのFILE*ってポインタなんだからそのまま渡していいと思う
>>499 への容赦ない怒涛のツッコミにワロタww
本人ではないが、func1() や func2() の中で fopen する場合と
勘違いしたんじゃないか、とフォローしてみる。
void foo(FILE *fp) { fputs("foo\n", fp); } void bar(FILE *fp) { fputs("bar\n", fp); } int main() { FILE *fp = fopen("124-495.txt", "w"); foo(fp); bar(fp); fclose(fp); return 0; } 出力結果は foo bar
499> それあかんよ あかんって何が?
992 名前:デフォルトの名無しさん 投稿日:2009/03/26(木) 23:10:42 世界的には日本語を使う人よりも英語を使う人の方が多い 前スレのこいつが必死なんだろ。日本語よりと比較したら間違いでもないんだが。
誤爆としてもワロた
>>498 そらあかんわ
FILE *fp = fopen("***", "w");
FILE* fp, fl; は同じように見えるが2つの変数は型が違う。
FILE *fp, *fl; と書く。Javaではない。
どういう実験か書いてみてください
ところでこのゴミ、
どこに捨てたらいい?
∧_∧
(´∀`)
/⌒ 丶
/ / \_M
( /| |\__E)
\/ | / \
( イ / ウワァァン丶
| /|ハ( `Д)ノ|
| / / 丶(
>>510 ) ノ
( 丿丿  ̄ ̄ ̄
|||
|||
/ ト、\
/_ノ  ̄
515 :
デフォルトの名無しさん :2009/03/29(日) 15:19:16
ヘビのは正規表現使えたらすごく楽なんだけどな…。
519 :
デフォルトの名無しさん :2009/03/29(日) 16:19:50
いろいろ回答ありがとうございます。 問題文通りでお願いします。
520 :
デフォルトの名無しさん :2009/03/29(日) 16:36:39
すいません。追加なんですけど、2007年度の本選の問9、12をよろしくお願いします。 問題通りの出力、入力でお願いします。 後、先程の問題の回答も引き続きお願いします。 もし、何か質問で至らない点があったらこちらですぐに回答します。
問題文どおりか、ありがと、蛇の問題は考えておく。ところで、問題のタイトルは 問題9 円に内接する多角形の面積 問題12 ブラックジャック・ゲーム
>>520 #include <stdio.h>
int getLine(int*a){
int temp = 0;int i=0;int c;
while(c = getchar(),c!='\n'){
if(c==' '){
a[i]=temp<10?temp:10;i++;temp = 0;
}else{
temp*=10;temp+=c-'0';
}
}
a[i]=temp<10?temp:10;i++;
return i;
}
int main(){
int a[21];int len;
while(len = getLine(a),a[0]!=0){
int sum = 0;int cnt = 0;
for(int i=0;i<len;i++){
if(a[i]==1)cnt++;
sum+=a[i];
}
for(int i=0;i<cnt;i++){
if(sum+10<=21)sum+=10;
}
if(sum>21)sum=0;
printf("%d\n",sum);
}
return 0;
}
>>515 ヘビ
#include<stdio.h>
#include<string.h>
int is_typeA(const char *p){
int i, j;
if(strncmp(p, ">'", 2)!=0) return 0;
for(i=0,p+=2;*p=='=';i++,p++);
if(i<1 || *p++!='#') return 0;
for(j=0;j<i && *p=='=';j++,p++);
return !(j<i || strcmp(p, "~"));
}
int is_typeB(const char *p){
int i;
if(strncmp(p, ">^", 2)!=0) return 0;
for(i=0;strncmp(p+=2, "Q=", 2)==0;i++);
return !(i<1 || strcmp(p, "~~"));
}
int main(void){
char buf[100+1];
int n=0, i;
scanf("%d\n", &n);
for(i=0;i<n && gets(buf);i++){ // gets!
if(is_typeA(buf)) printf("A\n");
else if(is_typeB(buf)) printf("B\n");
else printf("NA\n");
}
return 0;
}
>>520 あってるかどうか・・・
//09 gcc -std=gnu99 main.c -o main.exe
#include <stdio.h>
#include <math.h>
double s(int n){
double sum = 0;
for(int i=0;i<n;i++){
int in=0;
scanf("%d",&in);
double theta =3.14 * (90-(in/2))/180;
sum += sin(theta)*cos(theta)*sin(theta)*cos(theta);
}
return sum;
}
int main(){
int n;
while(scanf("%d",&n),n!=0){
double sum1 = s(n);
scanf("%d",&n);
double sum2 = s(n);
//
if(sum1==sum2){
printf("0\n");
}else if(sum1>sum2){
printf("1\n");
}else{
printf("2\n");
}
}
return 0;
}
525 :
521 :2009/03/29(日) 19:40:11
>>523 短いコード!しかし、gets() を使うから、100文字を超えても一致してしまう。
バスの再掲
#include <stdio.h>
void myfunc(int, int);
int main(){
int x, y;
scanf("%d %d", &x, &y);
myfunc(x, y);
}
void myfunc(int x, int y){
int t, i;
t = 1;
i = x;
if(i <= 5)
t *= (x < y)? 1: -1;
putchar(i+'0');
while(i != y){
i += t;
if(i == 0)
t *= -1;
if(i == 10){
i = 5;
t *= -1;
}
putchar(' ');
putchar(i+'0');
}
putchar('\n');
}
あみだくじを自動的に生成するプログラムをお願いします。 参加者の人数と当たりの数を入力し、当たり部分には◎ハズレには× となるようにお願いします。
527 :
デフォルトの名無しさん :2009/03/29(日) 19:43:46
本当に助かります。ありがとうございます 申し訳ないですけど2007年本選の6と7、2007年予選10番もお願いします
ってかもう全部の問題をお願いしますね
529 :
デフォルトの名無しさん :2009/03/29(日) 20:02:14
527番の者ですが 528番の回答は自分の発言ではありません
後からちょこちょこ追加されるよりは
>>528 のほうがマシ
532 :
デフォルトの名無しさん :2009/03/29(日) 20:23:27
すいませんでした。しかし期限が詰まっているもので527番の回答なんですが、引き続き回答のほう よろしくお願いします。今回はちょこちょこと付け加えてしまい迷惑をかけました。
解き方問題文中で丁寧に説明してるのになんで解けないのか理解できない
535 :
527 :2009/03/29(日) 20:30:04
お前らガタガタ抜かさんととっとと答えんかい!!
527さん、偽者が現れ始めているのでfusianasanやった方がいいですよ
>>524 theta=3.14*in/180.0;
sum+=0.5*sin(theta);
じゃないかな?
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i, r, atari, deta=0, hito, honn; atari = 1; // printf("あたりの本数を入力:%d\n", atari); printf("あみだくじに参加する人数を入力:"); scanf("%d", &hito); printf("あみだくじの本数を入力:"); scanf("%d", &honn); if(honn < atari) { printf("あたりの数が多すぎます\n"); return 2; } if(honn < hito) { printf("くじの本数が足りません\n"); return 2; } srand(time(NULL)); for(i=1; i<=hito; i++) { r = rand(); // printf("%d/%d=%d 残り%d本\n", r, RAND_MAX/honn, r/(RAND_MAX/honn), honn ); if(r/(RAND_MAX/honn) >= 0 && r/(RAND_MAX/honn) <= atari-1) { printf("%d 番の人◎\n", i); atari--; honn--; } else { printf("%d 番の人×\n", i); honn--; } } return 0; }
>>527 2007年本選の6 有料道路料金
#include<stdio.h>
void swap(int *a, int *b){int c;c=*a;*a=*b;*b=c;}
int get_distance(int from, int to){
static const int distance[]={0, 6, 13, 18, 23, 43, 58};
if(from>to) swap(&from, &to);
return distance[to-1]-distance[from-1];
}
int get_normal_price(int from, int to){
static const int price[][6]={
{ 300}, { 500, 350}, { 600, 450, 250}, { 700, 600, 400, 250},
{1350,1150,1000, 850, 600}, {1650,1500,1350,1300,1150, 500} };
if(from>to) swap(&from, &to);
return price[to-2][from-1];
}
int is_special_time(int hour, int min){
return (1730<=(hour*100+min) && (hour*100+min)<=1930);
}
int get_price(int from_ic, int from_hour, int from_min, int to_ic, int to_hour, int to_min){
int price=get_normal_price(from_ic, to_ic);
if(get_distance(from_ic, to_ic)<=40 && (is_special_time(from_hour, from_min) || is_special_time(to_hour, to_min))) price=((price/2)+50-1)/50*50;
return price;
}
int main(void){
int from_ic=0, from_hour, from_min, to_ic, to_hour, to_min;
for(;;from_ic=0){
scanf("%d %d %d %d %d %d", &from_ic, &from_hour, &from_min, &to_ic, &to_hour, &to_min);
if(from_ic==0) break;
printf("%d\n", get_price(from_ic, from_hour, from_min, to_ic, to_hour, to_min));
}
return 0;
}
>>527 2007年本選の7 おはじき取り
#include<stdio.h>
int main(void){
int strategy_size, strategy[25];
int i, j, rest;
for(;;){
strategy_size=0;
scanf("%d", &strategy_size);
if(strategy_size<1) break;
for(i=0;i<strategy_size;i++) scanf("%d", &strategy[i]);
for(rest=32,j=0;rest>0;j++)
{
rest-=(rest-1)%5;
printf("%d\n", rest);
rest-=strategy[j%strategy_size];
if(rest<0) rest=0;
printf("%d\n", rest);
}
}
return 0;
}
int main(void) { return 0; }
543 :
デフォルトの名無しさん :2009/03/29(日) 23:01:52
回答ありがとうございました。
>>539 問題文の読み違いがあったので、修正します。
printf("あたりの本数を入力:", atari); scanf("%d", &atari);
printf("あみだくじに参加する人数を入力:"); scanf("%d", &hito);
honn = hito; // printf("あみだくじの本数を入力:%d\n", honn);
if(honn < atari) {
:
// printf("%d/%d=%d 残り%d本\n", r, RAND_MAX/honn, r/(RAND_MAX/honn), honn );
if(r/(RAND_MAX/honn) <= atari-1) {
>>526 #include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int hito, atari;
int i, j;
printf("参加者の人数 : ");
scanf("%d", &hito);
printf("当たりの数 : ");
scanf("%d", &atari);
srand(time(NULL));
printf("\n");
for(j=0;j<15;j++){
if(j%2) printf("│");
for(i=j%2;i<hito-1;i+=2) printf("%s", (rand()%3)?"├┤":"││");
if(i<hito) printf("│");
printf("\n");
}
for(i=0;i<hito;i++){
if((rand()%(hito-i))<atari){
atari--;
printf("◎");
}else printf("×");
}
printf("\n");
return 0;
}
547 :
デフォルトの名無しさん :2009/03/30(月) 21:47:58
548 :
デフォルトの名無しさん :2009/03/30(月) 21:49:07
#include <stdio.h> double abs(double d){ return d < 0 ? -d : d; } double BMI(int h, int w){ return 10000.0 * w / h / h; } void main(){ int n, i, h, w, j; double d; while(scanf("%d", &n) && n){ d = 2000000; /* BMI(1,200) */ while(n--){ scanf("%d %d %d", &i, &h, &w); if(abs(BMI(h,w)-22) < d){ j = i; d = abs(BMI(h,w)-22); } } printf("%d\n", j); } }
>>547 #include <stdio.h>
int judge(int p){
return (p & 7) == 7 || (p & (7<<3)) == (7<<3) || (p & (7<<6)) == (7<<6) ||
(p & 73) == 73 || (p & (73<<1)) == (73<<1) || (p & (73<<2)) == (73<<2) ||
(p & 273) == 273 || (p & 84) == 84;
}
void main(){
char c;
int n = 0, b = 0, w = 0;
while(scanf("%c ", &c) && c != '0'){
b <<= 1; b |= c == 'b' ? 1 : 0;
w <<= 1; w |= c == 'w' ? 1 : 0;
if(++n == 9){
if(judge(b)) printf("b\n");
else if(judge(w)) printf("w\n");
else printf("NA\n");
n = 0; b = 0; w = 0;
}
}
}
551 :
デフォルトの名無しさん :2009/03/30(月) 22:53:30
春休みに宿題があるわけが無いとはいえ、 大学生ならともかく、高校生の問題を解くのは飽きた・・・
#include <stdio.h> #include <stdlib.h> #include <math.h> double bmi(int height, int weight) { return 10000.0 * weight / (height * height); } int main(void) { int *p, i, n, height, weight, indx = 0; double min, temp; FILE *fp; if((fp=fopen("data.txt", "r"))==NULL) return 0; while(1) { fscanf(fp, "%d", &n); if(n==0) break; p = malloc(sizeof(int) * n); fscanf(fp, "%d%d%d", p, &height, &weight); min = fabs(22 - bmi(height, weight)); for(i=1; i<n; i++) { fscanf(fp, "%d%d%d", p + i, &height, &weight); temp = fabs(22 - bmi(height, weight)); if(temp < min || (temp == min && p[i] < p[indx])) min = temp, indx = i; } printf("%d\n", p[indx]); free(p); } return 0; }
>>546 #include<stdio.h>
#include<math.h>
typedef struct tag_info_t{
long i;
double h, w;
}info_t;
double get_bmi(double h, double w){
return w/(h*h);
}
int main(void){
long i, n;
double bmi, best_bmi;
info_t x, best;
for(;;){
if(scanf("%ld", &n)!=1 || n<1) break;
for(i=0;i<n;i++){
scanf("%ld %lf %lf", &x.i, &x.h, &x.w);
bmi=get_bmi(x.h/100., x.w);
if(i==0 || fabs(best_bmi-22)>fabs(bmi-22)){
best=x;
best_bmi=bmi;
}
}
printf("%ld\n", best.i);
}
return 0;
}
>>558 >受付番号の小さい方を出力することとします。
忘れてた
>>559 >>1 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
そのくらいの修正は自分でやればいいとおもうんだな
>>553 h優先とr優先の二系統で組み入れられる人形の多い方をとればいいよ。
いちおー
>>549 は
>>546 の回答なんやけどな。アンカ付け忘れたけど。
見て分からんのは、本人、問題読んでないんちゃうやろか?
読んでたらBMIって関数ある時点で判断できるやろ。すぐ下やし。
>>564 C/C++系のスレで一番バカでやる気の無い質問者の溜まり場だからな
566 :
デフォルトの名無しさん :2009/04/01(水) 04:35:17
ここで描かれたプログラム甲子園の回答は不合格とします
[1] 授業単元:ばば抜きの者です
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9010.zip [3] 環境
[3.1] OS:Redhat, Win Xp Pro
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:無期限
[5] その他の制限:いつもお世話になっています。153さんのソースを丸々使わせてもらいながらやっています。ほかにもいろいろ伺いながらやっています。
シミュレータなので何回か実行させて結果を比べたいのですが、どうも、最初の配る段階でいつも同じようにしか配ってくれない(並び替えが最初のまま)様です。
srandのtime(NULL)にプレイ回数をかけて見たら変わるかなとも思ったのですがどうやら変わらないようです。
何かヒントがあればよろしくお願いします。
今後書き出し方を変えてRで読み込めるようにしていこうと思っています。
C言語の問題なんですが、 n個の実数データx(i)(i=1,2,3・・・n)を入力し、合計kei,件数n,平均ave,標準偏差sdを計算し、表示しなさい。ただし、ave,sd,の名で関数を作りなさい。また、終了データは0とする。計算式は次の通りである。 平均値:ave=1/n納i=1,n]x(i) 標準偏差:sd=√{1/n納i=1,n](x(i)-x')^2} x'は平均値 お願いします。
570 :
569 :2009/04/01(水) 15:10:44
細く ↑のC言語のプログラムを教えてください。
571 :
569 :2009/04/01(水) 15:12:05
○補足 ×細く
>>569 #include <stdio.h>
#include <math.h>
double kei(const double *data, unsigned int n)
{
unsigned int i;
double sum = 0.0;
for(i = 0 ; i < n; i++){ sum += data[i]; }
return sum;
}
double ave(const double *data, unsigned int n)
{ return kei(data, n) / n; }
double sd(const double *data, unsigned int n)
{
unsigned int i;
double a = ave(data, n), t = 0.0;
for(i = 0 ; i < n; i++)
{ t += (data[i]-a)*(data[i]-a); }
return sqrt(t/n);
}
int main()
{
unsigned int n = 0;
double data[1024];
while(!n || data[n-1] != 0.0){ scanf("%lf", data+n); n++; }
printf("kei: %lf\nave: %lf\nsd: %lf\n", kei(data,n), ave(data,n), sd(data,n));
return 0;
}
>>573 それ以前に、そのプログラムは何をするプログラム?
>>574 A君、Bさん、C君でバドミントンをします。
A君 VS Bさんの勝負をC君が記録しましたが、記録していたのはサーブの順番だけでした。
1セット3ゲーム11点先取で行い、デュースを適用しました。
C君が残した記録から得点を出力するプログラムを作成してください。
1ゲーム目は必ずA君から始まり、以降は最終ゲームの勝者からです。
また、1ゲーム中のサーブ回数は必ず100回以内です。
こういうものです。
#include<stdio.h> #include<string.h> #define GM 3 #define MAX 101 void tokuten(char *buf){ int g,len; int Ac = 0, Bc = 0; len=strlen(buf); for(g=1;g<len;g++){ if(buf[g]=='A') Ac++; if(buf[g]=='B') Bc++; } printf("%d %d\n", Ac, Bc); } int main(void){ int i; char buf[GM][MAX]; for(i = 0; i < GM; i++){ scanf("%s", buf[i]); if(buf[i][0] == '0'){ return -1; } } for(i = 0; i < GM; i++){ tokuten(buf[i]); } return 0; }
577 :
569 :2009/04/03(金) 15:05:12
[1] 授業単元:C++ [2] 問題文: C++ではvalidではないがCではvalidなプログラムを書きなさいというなぞなぞみたいな 宿題が出ました。普通に考えるとCで動くプログラムはC++で動くはずですが、そうでないものを 書けというものみたいです。ヒントは、「C言語の経験がなくても出来る」だそうです。 型にはまらない発想でシンプルなコードを書きなさいと言われました。問題文は以上です。 (validの意味がコンパイル可能を指すのか動作可能なのかを確認し忘れてしまい、今確認 できないのですが、それでも何かピンと来る方宜しくお願いします) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C++ [4] 期限:4月6日
なそなぞではなく、C++ 優位 int main(void) { char data; char pointer = &data; pointer = &data; }
>>578 関数プロトタイプのない関数の呼び出し
void* からの暗黙のポインタ変換
583 :
578 :2009/04/04(土) 16:21:13
>>579 , 580, 581
ありがとうございました
[1] 授業単元:C++ [2] 問題文:std::copyと同じような機能が<algorithm>ヘッダのstd::tranformから提供されている。 使い方を理解し、std::transformを使用して以下のようなプログラムを作成しなさい。 - vectorにfloatを複数書き込む。 - 元のvectorのそれぞれの要素を二乗したものからなる新しいvectorを生成する。 - 新しいvectorを画面に表示する。 (ostream_iteratorを使う場合は出力時最後にコンマがつくかもしれないが、気にしなくて良い) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:g++ [3.3] 言語: C++ [4] 期限:4月6日
>>584 #include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
float power2(float x)
{ return x*x; }
int main()
{
const int size = 10; float c = 0.1;
std::vector<float> vec1(size), vec2(size);
for(int i = 0; i < size; ++i){ vec1[i] = c; c += 1.1; }
std::transform(vec1.begin(), vec1.end(), vec2.begin(), power2);
std::copy(vec2.begin(), vec2.end(), std::ostream_iterator<float>(std::cout, ","));
return 0;
}
589 :
584 :2009/04/05(日) 01:55:15
>>587 ありがとうございました!これから解読します
590 :
デフォルトの名無しさん :2009/04/05(日) 03:21:24
解読する価値ねーだろ
価値というか、問題文そのまま書き下しただけだな
592 :
デフォルトの名無しさん :2009/04/05(日) 03:29:26
お前引っこんでろ
593 :
デフォルトの名無しさん :2009/04/05(日) 03:33:04
>>589 あんまいじると可哀想だろ
そのへんでやめとけ
594 :
デフォルトの名無しさん :2009/04/05(日) 12:59:37
#include <stdio.h> 【 1 】 /* 文字列の標準ヘッダーファイルの取り込み */ #define TRUE 1 #define FALSE 0 int passCheck(char *p); /* ユーザー作成関数のプロトタイプ宣言 */ void main() { char buff[256]; int cnt, flg = FALSE; for (cnt=1; 【 2 】 ; cnt++) { printf("パスワードは?=> "); scanf("%s",buff); flg = 【 3 】 ; if (flg == TRUE) printf("パスワードは合致しました。\n"); else printf("%d回目 入力ワード %s は間違っています。\n",cnt,buff); } }
595 :
デフォルトの名無しさん :2009/04/05(日) 13:00:24
int passCheck(char *p) { static char *pass = "MissionC"; int flg; flg = strcmp(pass,p); if (【 4 】 ) return TRUE; else return FALSE; }
596 :
デフォルトの名無しさん :2009/04/05(日) 13:02:59
1,2,3,4に入る解答を教えて
>>595-596 3回もしなくても、1回で投稿できるだろう。
#include <string.h>
!fig
passCheck(buff)
!fig
598 :
デフォルトの名無しさん :2009/04/05(日) 13:22:14
回答群から選ぶ問題だった 1 #include "string.h" #include <string.h> #include <strcmp.h> #include <strings.h> 2 cnt<=3 and flg==FALSE cnt<3 && flg!=TRUE cnt<=3 && flg==FALSE newStr[5] 3 passCheck(*p) passCheck(p) passCheck(&buff) passCheck(buff) 4 flg > 0 flg = 0 flg < 0 flg == 0
>>598 >>1 >・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
#include <string.h>
cnt<=3 && flg==FALSE
passCheck(buff)
flg == 0
[1] 授業単元:C++ [2] 問題文: 16行からなるパスカルの三角形をコンソールに出力するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:g++ [3.3] 言語: C++ [4] 期限:4月7日 [5] その他制限事項: (1)正三角形にすること。(各行がコンソール左端ぴったりから始まるような直角三角形ではない) (2)一つのデータの入る領域を「レンガ」とすると、レンガのサイズは三角形を構成するデータの 最大値の桁を格納出来る大きさとしなさい。ただし見栄えの点から偶数の場合は奇数にした方がよいでしょう。 (=>つまりサイズは4桁(+1)=5にしろって言ってるんだと思います) (3)数値はレンガの真ん中に位置するようにしなさい。 (4)入れ子のコンテナを使用しなさい。(例 vector<vector<int>>) よろしるおねがいします
602 :
600 :2009/04/05(日) 15:38:41
あなたは、10とか1000の桁数偶数の場合は、5桁の中央にどう配置するのか?
_1_0_ 10_00
>>604 OK. あと、STL使うみたい。
#include <iostream>
int main(void){ std::cout <<
"_______________________________________________1__ \n" <<
"____________________________________________1_____1__ \n" <<
"_________________________________________1_____2_____1__ \n" <<
"______________________________________1_____3_____3_____1__ \n" <<
"___________________________________1_____4_____6_____4_____1__ \n" <<
"________________________________1_____5____1 0___1 0____5_____1__ \n" <<
"_____________________________1_____6____1 5___2 0___1 5____6_____1__ \n" <<
"__________________________1_____7____2 1___3 5___3 5___2 1____7_____1__ \n" <<
"_______________________1_____8____2 8___5 6___7 0___5 6___2 8____8_____1__ \n" <<
"____________________1_____9____3 6___8 4___126___126___8 4___3 6____9_____1__ \n" <<
"_________________1____1 0___4 5___120___210___252___210___120___4 5___1 0____1__ \n" <<
"______________1____1 1___5 5___165___330___462___462___330___165___5 5___1 1____1__ \n" <<
"___________1____1 2___6 6___220___495___792___924___792___495___220___6 6___1 2____1__ \n" <<
"________1____1 3___7 8___286___715__12 87_17 16_17 16_12 87__715___286___7 8___1 3____1__ \n" <<
"_____1____1 4___9 1___364__10 01_20 02_30 03_34 32_30 03_20 02_10 01__364___9 1___1 4____1__ \n" <<
"__1____1 5___105___455__13 65_30 03_50 05_64 35_64 35_50 05_30 03_13 65__455___105___1 5____1__ \n" ;
}
606 :
600 :2009/04/06(月) 00:52:27
↑こんな感じで表示出来ると助かるのですが どなたかコンテナを使ったプログラムでお願い出来ないでしょうか
これって正三角形じゃなくて二等辺三角形だよな
教員の端末がプロポーショナルフォントだったら・・・
609 :
600 :2009/04/06(月) 01:28:10
「正」じゃなくて二等辺でもたぶん大丈夫です
printf("%*d",WID,NUM); WID 文字数の指定 NUM 値
C++でも書式の指定ができるものがあったような・・・
#include <vector> typedef std::vector<int> VecInt; typedef std::vector<VecInt> VecVecInt; void main() { VecVecInt vvi; vvi[0][0] = 1; vvi[1][0] = 1; vvi[1][1] = 1; vvi[2][0] = 1; vvi[2][1] = 2; vvi[2][2] = 1; }
#include <stdio.h> #include <vector> typedef std::vector<int> VecInt; typedef std::vector<VecInt> VecVecInt; void main() { VecVecInt vvi; VecInt vi; int iRow, iCol; int iStep = 10; vi.push_back(1); vvi.push_back(vi); for (iRow = 0; iRow < iStep; iRow++) { vi.clear(); vi.resize(iRow + 2, 0); vvi.push_back(vi); for (iCol = 0; iCol <= iRow; iCol++) { vvi[iRow + 1][iCol] += vvi[iRow][iCol]; vvi[iRow + 1][iCol + 1] += vvi[iRow][iCol]; } } for (iRow = 0; iRow < iStep; iRow++) { for (iCol = 0; iCol <= iRow; iCol++) { printf("%d,", vvi[iRow][iCol]); } printf("\n"); } }
1, 1,1, 1,2,1, 1,3,3,1, 1,4,6,4,1, 1,5,10,10,5,1, 1,6,15,20,15,6,1, 1,7,21,35,35,21,7,1, 1,8,28,56,70,56,28,8,1, 1,9,36,84,126,126,84,36,9,1,
615 :
600 :2009/04/06(月) 02:27:33
毎行左端からスタートではない左辺と右辺の二等辺である三角形に出来ませんか? (イメージ的に605みたいな)
#include <stdio.h> #include <string.h> char* NumFmt(unsigned int uiNum) { static int aiPos[][5] = {{2},{1,3},{1,2,3},{0,1,3,4},{0,1,2,3,4}}; static char acRet[6]; char acBuf[16]; size_t uiLen; unsigned int ui; sprintf(acBuf, "%u", uiNum); uiLen = strlen(acBuf); if (5 < uiLen) return NULL; strcpy(acRet, "_____"); for (ui = 0; ui < uiLen; ui++) { acRet[aiPos[uiLen - 1][ui]] = acBuf[ui]; } return acRet; } void main() { printf("%s\n", NumFmt(5)); printf("%s\n", NumFmt(55)); printf("%s\n", NumFmt(555)); printf("%s\n", NumFmt(5555)); printf("%s\n", NumFmt(55555)); }
__5__ _5_5_ _555_ 55_55 55555 一応、骨格と部品は用意したんで 適当に加工してちょ もっと綺麗に書けたらなぁw
619 :
600 :2009/04/06(月) 04:00:09
>>618 完璧です。。ほんとに感謝です!
ありがとうございました!
#include <stdio.h> #include <string.h> #include <vector> #define N 14 using namespace std; void main() { vector< vector<int> > vvi; vector<int> vi; char acBuf[16]; int iRow, iCol, iMax = 0, iMaxLen, i, iSpc; for (iRow = 0; iRow < N; iRow++) { vi.push_back(1); for (iCol = iRow - 1; 0 < iCol; iCol--) { vi[iCol] += vi[iCol - 1]; iMax = __max(iMax, vi[iCol]); } vvi.push_back(vi); }
sprintf(acBuf, "%d", iMax); iMaxLen = strlen(acBuf); iMaxLen |= 1; // 奇数に繰り上げ for (iRow = 0; iRow < N; iRow++) { for (i = 0; i < (iMaxLen / 2 + 1) * (N - 1 - iRow); i++) putchar(' '); for (iCol = 0; iCol <= iRow; iCol++) { sprintf(acBuf, "%d", vvi[iRow][iCol]); iSpc = iMaxLen - strlen(acBuf); for (i = 0; i < iSpc / 2; i++) putchar(' '); printf(acBuf); for (i = 0; i < (iSpc + 1) / 2; i++) putchar(' '); putchar(' '); } putchar('\n'); } } もう解答は上がってるけど、別解として
くせぇくせぇ、後出し麻呂の臭いがぷんぷんすんぜ こりゃ〜クソースだぁ〜クソースは消毒だぁ〜
g++ だと、void main はコンパイルエラーになる。 #define __max(a,b) a>b?a:b どれだけ花がいいんだ。
template<class T> struct power : public binary_function<T, T, T> { T operator()(const T& x, const T& y) const { return x + y * y; } }; sum=std::accumulate(new_vec.begin(), new_vec.end(), 0, power<float>()); こんな感じにすればいいんじゃね?よく分からんが
>>618 #define N 17 だと、なぜかダメ。
627 :
デフォルトの名無しさん :2009/04/06(月) 15:25:28
>>626 最大表示桁数が5桁を超えるからじゃないの?
>>578 new delete 等の C++ キーワードを変数名に
629 :
624 :2009/04/06(月) 16:10:26
>>625 おぉ!すごいできました。
ありがとうございました。(^人^)感謝♪
630 :
569 :2009/04/08(水) 19:10:27
>>572 のプログラムについてなんですが、
各行にコメントをつけなきゃなくて、さらに提出するときに説明しなきゃないんですけど、
while(!n || data[n-1] != 0.0){ scanf("%lf", data+n); n++; }の文について誰か詳しく教えてくれませんか?
あとこのプログラムだと平均値が終了データの0まで件数にカウントされているらしく、
例えば1、2、3の平均値は2になるはずが、(1+2+3+0)÷4=1.5となってしまっているので、
修正の仕方を教えてくださいm(_ _)m
while (n < 1024) { if (scanf("%lf", &data[n]) != 1) { // 入力 scanf("%*s"); // 入力バッファ読み捨て printf("error\n"); continue; } if (data[n] == 0.0) { // 0なら入力終了 break; } n++; } 改良案
問題文正確か?
634 :
632 :2009/04/08(水) 21:40:51
>>633 一応正確ですよ
よろしくお願い致します。
まだ4月初めなのにもう課題がでてるの? どういう学校だろうか。 うちなんかこれから講義資料作りますよ。 自分が出した問題がここに出てくるかwktkしながら見ることにします。
636 :
632 :2009/04/08(水) 23:12:35
>>635 専門学校ですのでカリキュラムがギュウギュウなんですよ
出来るようならお願い致します
いったい何のために専門学校に入ったの?
>>636 カリキュラムがギュウギュウって本当か?
卒業時にバブルソートがなんとかできるとかじゃないよな?
>>632 int main()
{
output=fopen("vib1.inp","w");
t=0.0, x[1]=1.0; x[2]=0.0;
printf("%10.5lf\n",t);
printf("%10.5lf%10.5lf\n",x[1],x[2]);
fprintf(output,"♯AVS field file\n");
fprintf(output,"%d\n",NMAX+1);
fprintf(output,"data_geom\n");
fprintf(output,"step%d step%d\n%d %d\n%d",1,1,1,1,1);
fprintf(output,"%9.6lf%9.6lf%9.6lf\n",x[1],0.0,0.0);
fprintf(output,"%d 1 pt %d\n%d %d\n%d %d\n",1,1,1,0,1,1);
fprintf(output,"radius,\n%d%4.1f\n",1,1.0);
for(i=1; i<=NMAX;i++){
t=((double) i)*h;
fprintf(output,"step%d step%d\n%d %d\n%d",i+1,i+1,1,1,1);
////////////////////////////////////////////////////////////////////////////////
runge( vib,x,f,wrk1,wrk2,t,h,n);
////////////////////////////////////////////////////////////////////////////////
fprintf(output,"%9.6lf%9.6lf%9.6lf\n",x[1],0.0,0.0);
fprintf(output,"%d 1 pt %d\n%d %d\n%d %d\n",1,1,1,0,1,1);
fprintf(output,"radius,\n%d%4.1f\n",1,1.0);
printf("%10.5lf\n",t);
printf("%10.5lf%10.5lf\n",x[1],x[2]);
}
}
640 :
632 :2009/04/08(水) 23:21:05
>>637 プログラムの勉強をするためです
>>638 卒業時には立派なプログラマー予備軍?になってるだろうと先生から言われています
641 :
632 :2009/04/08(水) 23:27:17
>>639 このままだとエラーが結構出ますがこれを参考にしろってことですね
ありがとうございます。やってみます
プログラムの勉強をするために専門学校に入って、ここで宿題解いてもらうのか。 とりあえずうちの会社には来ないでね。
643 :
569 :2009/04/09(木) 06:40:55
644 :
デフォルトの名無しさん :2009/04/09(木) 06:54:06
>>642 とか言うお前の会社はそいつが卒業する頃には倒産しているから、安心しろw
645 :
デフォルトの名無しさん :2009/04/09(木) 06:56:19
そこまで偉そうに自分の会社のことを言うなら、名前を自分の役職を名乗れよ どうせしょぼい中小企業だろ。見向きもされていないくせに、まともな給与で 人材を雇えないくせに、こんなスレで下を見下すような発言をしに来るなんて・・・ 儲かってねーんだろ?w とっとと潰れろ
646 :
デフォルトの名無しさん :2009/04/09(木) 07:00:00
性帝トーマスか、まだ潰れてないのかよ、お前の会社は? 少なくともお前みたいなのは大企業と提携できないから、安心しろw
647 :
645 :2009/04/09(木) 07:20:21
とはいえ俺も632とは一緒に働きたくないなw
648 :
デフォルトの名無しさん :2009/04/09(木) 07:29:59
ねぇねぇ、自分の会社に来て欲しくないのに、どうして会社名を言わないの? 間違ってそいつがあんたの会社に就職活動に来た場合、知らずに雇ってたら どうするの?そいつがお前の会社に履歴書を出す前に食い止めるためにも、 こんなスレで質問するような学生に、将来自分の会社に来て欲しくない奴は 会社名と自分の名前、役職を名乗れよ?こっちはそんなバカ企業とは提携しないように ブラックリストに入れておいてやるからw
649 :
デフォルトの名無しさん :2009/04/09(木) 13:57:19
必死だな
[1] 授業単元:長桁計算 [2] 問題文(含コード&リンク):50桁程度の2つの自然数nおよびmを入力とし,nCmの値を出力するプログラムを作成せよ. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C言語 [4] 期限:無期限 [5] その他の制限:長桁計算を必ず用いること.実数型の変数を使用しないこと. 難しすぎて全くわかりません…. みなさん,おねがいします!
nCmを計算する関数はこんな感じで書ける。 あとはintで計算しているところを多倍長の加減算に置き換えればよいはず。 int comb (int n, int m) { if (m == 0 || n == m) return 1; else return comb(n - 1, m) + comb(n - 1, m - 1); }
>>651 のやり方だと多倍長の乗除算ルーチンを作らなくていいからラクチン
なんだけど、nやmが50桁になった場合、弥勒菩薩がやってくるまでに計算が
終わらない可能性がある。
654 :
651 :2009/04/10(金) 01:05:46
えへへ。
>>650 がだまされないかなと思って。
フィボナッチを漸化式通りの再帰で定義するみたいなダメ再帰の例ですね。
>>653 一応有限時間で終わる計算なんだから永遠に終わらないというのはマチガイ。
ちょっと待て。
>>650 には
>[4] 期限:無期限
とあるから、計算時間はいくらかかってもいいのではないか。
フィボナッチはメモ化を使って再帰すれば早いと思うけど。
おまいら、質問スレで質問者をいじめるなよw 現実的な時間でその桁数のコンビネーションを求めるのは不可能じゃないかな?
nCrなんてパスカルの三角形を用いればどうってことない
やれやれ、わかってないな。だから32bitで約43億、乗算せずに 加算で済むからそれに応じて後は組めば良いのだが、問題でしょって わかっとるわいw
でだ、10億を上限とすれば、int型の変数1つは999999999までだから それらを足しても上限は20億に満たないで済む。もう分かっただろ?
unsigned型なら42億まで行けるから内部の計算回数も半分で済みますね! そういうこといってるんじゃないだろ、アホ
663 :
650 :2009/04/10(金) 08:25:21
>>661 すいません。わからないです
長桁のやり方はある程度わかるんですが
nやmを50桁とするコンビネーションの計算を短時間で解くのは無理な気がします
50桁って10^50=150bitだもんなあ nCrなんてn-kかけてkで割るのを繰り返すだけだけど、 forのカウンタも長桁数でやるってのは新しいかもしれない
>>650 だとC++使っちゃいけないみたいだから
演算子オーバーロードできなくて涙目じゃね?
666 :
デフォルトの名無しさん :2009/04/10(金) 08:52:25
出力が最悪(50桁)桁になる時点で無理ぽ
「50桁用のプログラムつくれ」だから、この場合実行しなくてもいいので。 それで、一応ロングなら。 #include <stdio.h> /* mからnまでの積を再帰的に計算する関数 (m<=n) */ long int factorial (int m, int n) { if (m == n) return m; else return m * factorial(m + 1, n); } /* nCr=n(n-1)(n-2)・・・(n-r+1)/r!*/ int main(void){ int m=0, n=0; long int a, b; printf("Enter M N:"); scanf("%d%d",&m,&n); a = factorial(m-n+1, m); b = factorial(1,n); printf("%dC%d=%ld/%ld=%ld", m, n, a, b, a/b); puts(""); n = m - n; a = factorial(m-n+1, m); b = factorial(1,n); printf("%dC%d=%ld/%ld=%ld", m, n, a, b, a/b); }
>>667 ほほう、そのscanfでどうやって50桁読み込むんだい?
669 :
デフォルトの名無しさん :2009/04/10(金) 11:01:41
5000と2000でも15msしかかからんな。セレロンの初期の方だが。 #include<iostream> #include<gmpxx.h> #include <time.h> #pragma comment(lib, "gmp.lib") using namespace std; mpz_class factorial(int n){ mpz_class x = 1; for(int k=1; k<=n; k++) x*=k; return x; } int main(){ int m=5000, n=2000, cl=clock(); mpz_class x = factorial(m)/(factorial(n)*factorial(m-n)); cl=clock()-cl; cout << x.get_str() << endl; cout << cl<<" ms" << endl; getchar(); return 0; }
670 :
デフォルトの名無しさん :2009/04/10(金) 11:05:23
>>663 効率の悪い計算方法 5000!/ (2000! * 3000! )でしても
15msしかかからん。 50程度だとclock()では測定不可能。1ms以下。
671 :
デフォルトの名無しさん :2009/04/10(金) 11:06:59
>>663 間違えてた。 50程度とおもってた。 50桁だった。
階乗をまじめに計算してると途中でオーバーフローするのでは。 多倍長ならそういう心配はないのかも知れないけど。 これなら最終結果がオーバーフローしなければ途中結果もオーバー フローしない。除算があるけど常に割り切れてるから問題ない。 まあ、多倍長にしたとき除算がめんどうかもね。 int comb (int n, int r) { int ans = 1, i; for (i = n; i > n - r; i--) ans = ans * i / (n - i + 1); return ans; }
673 :
デフォルトの名無しさん :2009/04/10(金) 11:15:28
675 :
デフォルトの名無しさん :2009/04/10(金) 11:18:05
7を50個続けた数までの階乗計算しようとしたら、GMP使ってもすぐに出てこない。 30秒ほどまっても駄目だったので終了した。 #include<iostream> #include<gmpxx.h> #include <time.h> #pragma comment(lib, "gmp.lib") using namespace std; int main(){ mpz_class n, x=1, end("77777777777777777777777777777777777777777777777777"); int cl=clock(); for(n=1; n<=end; n++) x*=n; cl=clock()-cl; printf("%d\n",cl); return 0; }
676 :
デフォルトの名無しさん :2009/04/10(金) 11:35:14
計算効率よくしても無理だった。 実行時にメモリ関係のエラーで停止する。 #include<iostream> #include<gmpxx.h> #include <time.h> #pragma comment(lib, "gmp.lib") using namespace std; mpz_class combination(mpz_class m, mpz_class n){ if(m==n || m==0) return 1; return combination(m-1,n-1) + combination(m-1,n); } int main(){ mpz_class m("77777777777777777777777777777777777777777777777777"); mpz_class n("33333333333333333333333333333333333333333"); int cl=clock(); combination(m,n); cl=clock()-cl; printf("%d\n",cl); getchar(); return 0; }
677 :
デフォルトの名無しさん :2009/04/10(金) 11:39:06
よく考えると、再帰では実現無理だな。 32bit数程度の再帰回数もc++はこなせないからね。
679 :
デフォルトの名無しさん :2009/04/10(金) 11:59:38
>>678 GMPで計算してみたけど、計算が停止しそうにないな。
高速化のために足し算だけで計算したい所だが・・・。
しかし、何の処理もしない空のループであっても、10進50桁程度ではどれくらいかかるんだろうか。
#include<iostream>
#include<gmpxx.h>
#include <time.h>
#pragma comment(lib, "gmp.lib")
using namespace std;
mpz_class combination(mpz_class m, mpz_class n){
mpz_class x=1, i;
for (i = m; i > m - n; i--) x *= i / (m - i + 1);
return x; }
int main(){
mpz_class m("77777777777777777777777777777777777777777777777777");
mpz_class n("33333333333333333333333333333333333333333");
int cl=clock();
mpz_class x=combination(m,n);
//cout << x.get_str() << endl;
cl=clock()-cl;
printf("%d\n",cl);
getchar();
return 0; }
680 :
デフォルトの名無しさん :2009/04/10(金) 12:00:44
681 :
デフォルトの名無しさん :2009/04/10(金) 12:05:41
スターリングの公式の大まかな値を求めることでよしとしよう
682 :
デフォルトの名無しさん :2009/04/10(金) 12:22:16
もうBCDでやれ
683 :
デフォルトの名無しさん :2009/04/10(金) 12:32:09
>>680 「50桁程度の2つの自然数」だから
#define KETAを修正しないといけないかもね。
684 :
デフォルトの名無しさん :2009/04/10(金) 12:36:03
nが50桁の場合、nCrは最大何桁ぐらいになるのだろうか?
685 :
デフォルトの名無しさん :2009/04/10(金) 12:41:26
686 :
デフォルトの名無しさん :2009/04/10(金) 12:50:47
>>684 m=10^51-2 n=m/2
として、
log(n!)=n(logn-0.434) + (1/2)*logn + 2.5、 (スターリングの公式)
log(comb(m,n))=log(m!)-log(n!)-log((m-n)!)
を使えば求まる。
687 :
デフォルトの名無しさん :2009/04/10(金) 13:09:26
50桁の厳密解はどう考えても無理だろ? そしたら、m = 10^k 、 n = m/2 が最短で解けるアルゴリズムを考えることは意味あると思う。 無理でも何桁まで挑戦できるか考えるって事。 たとえばk=3ならば、 comb(1000,500)ってこと。
688 :
デフォルトの名無しさん :2009/04/10(金) 13:16:45
comb(1000,500)は、1000*・・・*500/500!だが 500-250までの数は2倍すると上の数と一致するから簡単に割り算できる。 250-1までの数についても、割り算の結果がすぐに判るようなアルゴリズムがあれば 実質的には500回の掛け算をするだけですむんだが。
(実数型を使わずに)文字型を使って組合せを求めるコードを書こうと思ったんだが 「長桁計算を必ず用いる」ってのは、もう書かれてるようなGMPとかで内部的に整数型を使わなきゃまずいのか?
690 :
デフォルトの名無しさん :2009/04/10(金) 14:11:22
unsigned short int型の演算だと、32bit以内に収まるから2バイトの配列に演算を定義すればいいと思う。
691 :
667 :2009/04/10(金) 14:19:02
>>672 再帰にしてみたらどうか。
>>668 scanf()はこれでどうか? ^-^
#include <stdio.h>
int comb (int n, int r, int i) {
if(i > n) return 1;
return comb(n,r,i+1)*i / (n-i+1);
}
int main(void){
int m=0,n=0;
printf("Enter M N:");
scanf("%99d%99d",&m,&n);
printf("%dC%d=%d", m, n, comb(m,n,m-n+1));
puts(""); n = m - n;
printf("%dC%d=%d", m, n, comb(m,n,m-n+1));
}
>>691 int型に99桁10進を読み込めるってどんな環境だよ
C/C++言語の課題じゃないな
>>679 > しかし、何の処理もしない空のループであっても、10進50桁程度ではどれくらいかかるんだろうか。
1loop/clockとして、最初は3GHzでムーアの法則を考慮すると、たぶん180〜190年。
さて、答えは出たかな?パスカルの三角形を使おうが、求める数が多すぎるのも厄介。 三角形を見てわかる様に、例えばnCrに於いて rがn/2以上ならn-rの組み合わせと 同じ故に求める数も半分で済むとは言え、50桁もある数ともなればご丁寧に その半分を求めたとしても大変なことだ。まぁ、そんなことせずとも rの値でどの範囲を求めれば良いか分かっているようなので、あとは個人の知識、 腕次第だ。健闘を祈る。
697 :
デフォルトの名無しさん :2009/04/11(土) 08:14:36
nが10万くらいならメモリに計算結果を蓄えられるだろうから、 パスカルの三角形で計算して上を参照すれば速い気はする。 しかし、どんだけ速くしても、50桁の空ループより時間は掛かるだろうから 695の値が正しいとして180年はかかる
698 :
デフォルトの名無しさん :2009/04/11(土) 08:17:45
あとは、n!の級数展開(スターリングの公式)が判れば それをもちいてほぼ正確な値は短時間でもとまる。 もし、下位2桁以外まで正確にもとめられたとすれば あと2桁は別の方法で計算することも出来そうだ。
699 :
デフォルトの名無しさん :2009/04/11(土) 08:27:13
ここになにかかいてある 計算機向けの変形 ガンマ関数の(関数電卓などの)計算機向けの近似として次の式がある。 これは、次と同等である。 これらはスターリングの公式を組み替えて、その結果生じる冪級数と双曲線正弦関数のテイラー展開の間の合致を観察することで得られる。 この近似は z の実数部が 8 以上のとき、小数点以下 8 桁を超える精度を持つ。 2002年、Robert H. Windschitl がリソースの制限された計算機(電卓など)でのそれなりの正確性を持った近似としてこれを示した(参考文献の 'Toth' 参照)。 Gerg? Nemes は 2007年にほぼ同程度の結果を与える近似式を提案した。こちらはより単純である。 スターリングの近似 - Wikipedia
700 :
デフォルトの名無しさん :2009/04/11(土) 08:43:18
wikipediaの記事は信頼できると思うので、これを用いれば50桁の厳密解も求められそうだ。 ガンマ関数は、階乗を一般化したものなので。 > z の実数部が 8 以上のとき、小数点以下 8 桁を超える精度
701 :
デフォルトの名無しさん :2009/04/11(土) 10:17:14
ガンマ関数の近似式を使った50桁の組合せの計算まだ
702 :
650 :2009/04/11(土) 11:25:55
たくさんの回答,ありがとうございます. 今日,先生に質問にいったところ,特に「50桁」という部分にはこだわらなくても良いとのことでした. つまり,nやmに50桁の数値を入力すると,演算時間が長すぎて解答を得るのは不可能になってしまう場合があるが, それは気にせず50桁の数値を入力できるようにしてあれば良いということだと思います. とりあえず,皆さんの今までの回答を参考にして,プログラムを作ってみたいと思います. ありがとうございました.
703 :
デフォルトの名無しさん :2009/04/11(土) 11:30:10
ガンマ関数の近似式の精度は、小数点以下8桁まで正確らしいので これを使えば50桁でもいけるはずだ。
だりぃ、っつかもうこうなるならファイル使うわ。
706 :
デフォルトの名無しさん :2009/04/12(日) 03:54:55
nCmの計算まだ?
nCm < 2^32 の範囲内であるなら求められるコードは既にあるお ( ^ω^) 50桁とか、もう常識の範囲内を超えたものは、それなりの環境が必要だお^^ 例えば、地球上を移動する程度の航空機で済むのと、宇宙へ飛び出すロケットなどと 比較したら、明らかにメンテナンスや飛行距離、上空での環境への適用などに対して 差があるのはお分かりいただけるでしょう。
>>704 警告 W8071 valuelist1.cpp 151: 変換によって有効桁が失われる(関数 valuelist::writesub(int) )
警告 W8004 valuelist1.cpp 220: 'rp' に代入した値は使われていない(関数 valuelist::diff(valuelist &,int *) )
エラー E2093 valuelist1.cpp 355: == 演算子が使われたがクラス VLint には定義が存在しない(関数 VLint::fmultir(VLint &) )
エラー E2093 valuelist1.cpp 364: < 演算子が使われたがクラス VLint には定義が存在しない(関数 VLint::fmulrsub(VLint,VLint,VLint,VLint) )
エラー E2357 valuelist1.cpp 365: 参照は 'VLint' で初期化されているが 'VLint' 型の左辺値が必要(関数 VLint::fmulrsub(VLint,VLint,VLint,VLint) )
エラー E2342 valuelist1.cpp 365: パラメータ 'b' は VLint & 型として定義されているので VLint は渡せない(関数 VLint::fmulrsub(VLint,VLint,VLint,VLint) )
エラー E2093 valuelist1.cpp 388: == 演算子が使われたがクラス VLint には定義が存在しない(関数 VLint::fdivider(VLint &) )
エラー E2093 valuelist1.cpp 400: < 演算子が使われたがクラス VLint には定義が存在しない(関数 VLint::fdivrsub(VLint,VLint,VLint,VLint) )
*** コンパイル中に 6 個のエラーが発生しました ***
>>708 ボーランドからVSに、コンパイラを取り換える。VSEE
>>710 そういう問題じゃないだろう。明らかに文法が間違ってる
演算子オーバーロードにconst修飾子が付いてないからだな
で結局
>>704 をgccでもコンパイルできるようにするには
どうすればいいのよ?
715 :
デフォルトの名無しさん :2009/04/12(日) 20:29:49
VCでGMPは難しかったような気がするなぁ VCでどのライブラリを使わせて多倍長計算させたかったんだろうなぁ ライブラリとか授業で説明されたんだろうけど>650は代返ですませてしまったんだろうなぁ
>>716 #include <stdio.h>
double num_of_A(int year)
{
return year <= 2009 ? 1000000 : num_of_A(year - 1) * 1.1;
}
double num_of_B(int year)
{
return year <= 2009 ? 500000 : num_of_B(year - 1) * 1.3;
}
int main()
{
int year = 2010;
while(1){
if(num_of_A(year) < num_of_B(year))
break;
year++;
}
printf("2009年現在\n種A 100万体\n種B 50万体\n\n");
printf("%d年で個体数逆転\nAは%d体\nBは%d体\n", year, (int)num_of_A(year), (int)num_of_B(year));
return 0;
}
>>717 ありがとうございます!
明日学校でやってみます!!
>>716 問題がよろしくないな
再帰にすると無駄なループが多いし、関数は2つも必要ない
そして
>>717 早すぎw
>>719 去年履修したときはなかった問題・・・・
むずかしいです、先生・・ orz
721 :
デフォルトの名無しさん :2009/04/12(日) 21:14:57
>>717 だがちょっと待ってほしい
計算途中の頭数もintで表現するべきではないだろうか
#include <stdio.h> int main() { double a = 1000000; double b = 500000; int year = 2009; printf("%d年現在\n", year); printf("種A %.0f体\n", a); printf("種B %.0f体\n", b); while (a >= b) { a *= 1.1; b *= 1.3; year++; } printf("\n%d年で個体数逆転\n", year); printf("Aは%.0f体\n", a); printf("Bは%.0f体\n", b); return 0; } 再帰を使う必要性は微塵も感じないな こんないい加減な問題だと小数点以下の扱いもどうでもよくなるw
再帰という手法をつかう問題を作りたかったんだろ しかも、プログラムを習ったばっかりの人間でも答えられる範囲の まあ、多少アルゴリズムを教えてからクイックソートぐらいを問題にしたほうが良いと思うが 教育現場の政治的問題があるのかもしれない
やっちゃいけない再帰の例にしか見えないがw
こういう内容の再帰を見ると、講義でSchemeをやらされたときを思い出す。
再帰は使い方次第では時間が掛かる。最悪、再起不能になっちゃう、なんて
アッカーマン関数の(4, 1)を求めるのに通常の再帰プログラムでは どうしてもスタックオーバーフローが生じて無理なので一度答えを 出した(n, m)については答えを保存して再利用するようにしたら なんとか求まった (4, 2)は今のところ無理だ x64で動かせたら考えてみよう
>>726 マージソートは良いんだが・・・
なんでこういう例ってグローバル変数使うんだろう?
(1,n)だか(n,1)だかのときに再帰を省いた奴ならどっかで見かけたと思うが
>>730 32bit環境で(x86 WindowsXPで)(4, 2)が求まる方法が
あったら教えてください
外部ファイルを使っても構いませんから
あと再帰の問題として適してるのは _findnextみたいな関数を使って ディレクトリを見つけたら再帰呼び出しするとか
735 :
デフォルトの名無しさん :2009/04/13(月) 05:40:48
nCm 50桁 で答えが返ってくるプログラムまだ?
736 :
デフォルトの名無しさん :2009/04/13(月) 05:43:03
>>732 それは適してないだろ。再帰は不安定で鈍いから、
ファイルを扱う重要な部分に使うべきではないな。
738 :
デフォルトの名無しさん :2009/04/13(月) 08:14:20
スタックオバーフロー、 関数呼び出し、復帰に掛かるコスト
739 :
デフォルトの名無しさん :2009/04/13(月) 08:17:32
スタックオーバーフロー - Wikipedia 末尾最適化を実装した言語ではある特定の再帰をループへ展開することができ、 末尾再帰ではスタックオーバーフローは起こらない。 末尾再帰はループ処理に最適化されるので、再帰することそれ自体でスタックを消費することが無いからである。 次によくある原因としては、スタック上に巨大な配列を確保しようとすることである。コールスタックに格納できる情報量には上限がある。 さらに他の原因として、関数呼び出しの階層数が深すぎる場合などがある。
740 :
デフォルトの名無しさん :2009/04/13(月) 08:21:11
741 :
デフォルトの名無しさん :2009/04/13(月) 10:52:22
void comb(mpz_t& ans, const mpz_t& n, const mpz_t& r) { mpz_t i, n_r, n_i, n_i_1, a; mpz_init_set(i, n); mpz_init(n_r); mpz_init(n_i); mpz_init(n_i_1); mpz_init(a); mpz_set_ui(ans, 1); mpz_sub(n_r, n, r); for(mpz_set(i, n); mpz_cmp(i, n_r) > 0; mpz_sub_ui(i, i, 1)) { mpz_mul(a, ans, i); mpz_sub(n_i, n, i); mpz_add_ui(n_i_1, n_i, 1); mpz_cdiv_q(ans, a, n_i_1); } mpz_clear(i); mpz_clear(n_r); mpz_clear(n_i); mpz_clear(n_i_1); mpz_clear(a); }
tempは100個の配列を有する変数 構造体変数numには1-10、letにはA-Jが入っていて、 構造体Aの中でtempを初期化したいのですが、代入の仕方が分かりません。 (tempだけをprintfさせたときに、temp[1]=[A2]やtemp[100]=[J10] と表示されるようにしたい。) 二つの構造体変数を結合させて、一つの変数配列として返したいのですが、やりかたを教えてください。 void initA(struct rub *temp){ char *num; char *let; int i,j; for(i=1; i<10; i++){ for(j=1; j<=10; j++){ temp[i*j]=(A.num,A.let); } } }
>>741 gmpって使ったことないんだけど、これで何桁くらいまでいけそう?
sprintf()もしくはstrcat()
745 :
デフォルトの名無しさん :2009/04/13(月) 11:48:41
スターリングの公式の所に載っている式で計算すると 100C30の場合、実値とのズレ比 (式の値/実値) 1.0000000000230814274901だった。 上位の桁は一致するけど、下位の桁の一致までは無理。
746 :
デフォルトの名無しさん :2009/04/13(月) 11:53:18
数値計算ソフトでスターリングの公式の近似式でも、5桁が限度だな。 50桁だと階乗の値は、ものすごい桁になる。
747 :
デフォルトの名無しさん :2009/04/13(月) 11:55:30
>>743 windowsならGMPのbinaryをうpするが
748 :
デフォルトの名無しさん :2009/04/13(月) 11:57:55
スターリングの公式で階乗計算するよりも、直接、コンビーネーションの近似式が わかれば計算量は減らせるが
>>742 こんなんでいいの?
struct rub {
char *num;
char *let;
};
void initA(struct rub *temp)
{
int i;
for (i = 0; i < 100; i++) {
temp[i].num = (char *)malloc(3);
temp[i].let = (char *)malloc(2);
sprintf(temp[i].num, "%d", i % 10);
temp[i].let[0] = "ABCDEFGHIJ"[i % 10];
temp[i].let[1] = '\0';
}
}
int main(void)
{
struct rub A[100];
int i;
initA(A);
for (i = 0; i < 100; i++)
printf("temp[%d] = [%s%s] ", i, A[i].let, A[i].num);
return 0;
}
あ、ごめん ×sprintf(temp[i].num, "%d", i % 10); ○sprintf(temp[i].num, "%d", (i % 10) + 1);
>>752 サンクス。あーこりゃx64でも無理そうですな
多倍長計算を使って放置しておけばいつかは答えが出るかもしんないけど
一度計算した結果を覚えておくのにstd::map使ってますから型を多倍長
クラスにすればできそうですが・・・・なんとも非現実的な
> パネェ なんだそりゃ?きちっと日本を使えよ!ってガチンコラーメン道、 支那そばで有名な「佐野実」が言ってた。
755 :
デフォルトの名無しさん :2009/04/13(月) 12:52:44
756 :
デフォルトの名無しさん :2009/04/13(月) 13:10:23
758 :
デフォルトの名無しさん :2009/04/13(月) 15:16:12
>>757 色のついたボールがn個あるとする。m個を選び出す組合せの数はnCm。
いま青いボールだけを取り出してみる。
全組合せ数は、青いボールを含む場合と、青いボールを含まない場合の合計と一致する。
青いボールを含む数は、残りからm-1個選ぶ数のこと。
青いボールを含まない数は、n-1個からm個選ぶ数のこと。
すみません間違えました、672 です。
760 :
デフォルトの名無しさん :2009/04/13(月) 15:31:38
>>759 nCm = n(n-1)・・・(n-m+1)/m(m-1)・・・1
上辺の左と、下辺の右を順に計算・。
n/1 ・ (n-1)/2・・・
有り難う御座います。nPrとr!では積の項数が同じでした。
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク) 繰り返し文を用いて以下の例のような(どのようなものでもよいが、単純なアルゴリズムで複雑な絵の方がよい)ASCIIアートを作成しなさい。 00000&&&&&00000 00000&&&&&00000 00000&&&&&00000 &&&&&&&&&&&&&&& &&&&&&&&&&&&&&& &&&&&&&&&&&&&&& 00000&&&&&00000 00000&&&&&00000 00000&&&&&00000 [3] 環境 [3.1] OS: Windows VISTA [3.2] コンパイラ名とバージョン: BCC [3.3] 言語: C [4] 期限:今週中 [5] その他の制限:あまり複雑すぎても困ります・・・
#include <stdio.h> int main() { int row, col; int pat[] = {0x5555, 0xAAAA}; for (row = 0; row < 15; row++) { for (col = 0; col < 15; col++) { printf((pat[row & 1] & (1 << col)) ? "&" : "0"); } printf("\n"); } return 0; } &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0& 0&0&0&0&0&0&0&0 &0&0&0&0&0&0&0&
>>763 #include <stdio.h>
int main()
{
int i, j;
const char map[] = " |-+";
for(i = 1; i <= 9; i++){
for(j = 1; j <= 14; j++){
printf("%c", map[(i % 2 == 0 ? 2 : 0) + (j % 3 == 0 ? 1 : 0)]);
}
printf("\n");
}
return 0;
}
>>765 | | | |
--+--+--+--+--
| | | |
--+--+--+--+--
| | | |
--+--+--+--+--
| | | |
--+--+--+--+--
| | | |
>>763 #include<stdio.h>
#include<string.h>
#define HEIGHT 32
#define WIDTH 79
void triangle(char screen[HEIGHT][WIDTH], int center, int top, int size)
{
int i;
if(size<3) return;
for(i=0;i<size-1;i++) screen[top+i][center-i]=screen[top+i][center+i]='*';
for(i=0;i<size;i++) screen[top+size-1][center-i]=screen[top+size-1][center+i]='*';
triangle(screen, center, top, size/2);
triangle(screen, center-size/2, top+size/2, size/2);
triangle(screen, center+size/2, top+size/2, size/2);
}
int main(void)
{
char screen[HEIGHT][WIDTH];
int i;
memset(screen, ' ', sizeof(screen));
triangle(screen, WIDTH/2, 0, HEIGHT);
for(i=0;i<HEIGHT;i++)
{
printf("%.*s\n", WIDTH, screen[i]);
}
return 0;
}
>>767 *
* *
* *
*******
* *
* * * *
* * * *
***************
* *
* * * *
* * * *
******* *******
* * * *
* * * * * * * *
* * * * * * * *
*******************************
770 :
デフォルトの名無しさん :2009/04/14(火) 10:50:22
mCnの答えが戻るプログラム
771 :
デフォルトの名無しさん :2009/04/14(火) 11:06:57
考えた方法。 mCn=(m/n)*・・*((m-n+1)/1) a=m-nとおき、f(x)=log(1+c/x)とおくと log(mCn)=f(1) + ・・・ + f(n)となる。 log(mCn)の値は、∫[1,n]f(x)dxから∫[2,n+1]f(x)dxの範囲。
772 :
デフォルトの名無しさん :2009/04/14(火) 11:22:40
F(x)=a*log(a + x) + x*log(1 + a/x)]とおけば F(n)-F(1)からF(n+1)-F(2)までの間の値。
773 :
デフォルトの名無しさん :2009/04/14(火) 11:54:59
値の範囲を積分で評価するときに、f(1)のときの値は除いたほうが都合が良いな。
774 :
taguti :2009/04/14(火) 14:39:53
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点 (x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。 ・公式:底辺x高さ÷2を使って計算してください。 お願いします!!
775 :
デフォルトの名無しさん :2009/04/14(火) 14:55:11
テーブルがNEN(年、4桁数値型)とTUKI4〜TUKI3(4月〜次年3月、1桁数値型(フラグ用))という項目をもっていて そのテーブルを1件1件READしながら、 @YMD_S(開始年月)という変数に、 NEN + TUKI4〜TUKI3でフラグ1が設定されている最初の月をセット(例:「200805」) AYMD_E(終了年月)という変数に、 NEN + TUKI4〜TUKI3でフラグ1が設定されている最後の月をセット(例:「200809」) としたい場合に、どういったロジックで考えたら 実現可能でしょうか? 処理効率とか以前に、どういう方針で考えたらいいかがわかりません。 どうか教えてください。
>>774 の問題は
A(x1, y1), B(x2, y2), C(x3, y3) → A'(0, 0), B'(x2 - x1, y2 - y1), C'(x3 - x1, y3 - y1) として
△ABC = △A'B'C' = |(x2 - x1)(y3 - y1) - (y2 - y1)(x3 - x1)|/2
の方が楽じゃないかなぁ…。
777 :
デフォルトの名無しさん :2009/04/14(火) 15:23:46
>>774 (x1, y1),(x2, y2)の間の距離は
sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
(x1, y1),(x2, y2) を通る直線の方程式は、
(y2 - y1) * x / (x2 - x1) - y + (x2 * y1 - x1 * y2) / (x2 - x1) = 0。
点(x3, y3)からこの直線へ下ろした垂線の長さは
abs((y2 - y1) * x3 / (x2 - x1) - y3 + (x2 * y1 - x1 * y2) / (x2 - x1))
/ sqrt((y2 - y1) * (y2 - y1) / (x2 - x1) / (x2 - x1) + 1)。
>>775 C言語指定でないのでC++。
#include <iostream>
using namespace std;
int main() {
int i, nen, tuki[12], ymd_s, ymd_e;
for(int c=0; c<20 ; c++) {
cin >> nen; cout << nen << ")";
for(i=1; i<=12; i++) {
cin >> tuki[i-1]; cout << tuki[i-1] << ")"; }
ymd_s = ymd_e = 0;
for(i=1; i<=12; i++)
if(tuki[i-1] == 1) {
if(i>9)
ymd_s = nen*100 + 100 + i-9;
else
ymd_s = nen*100 + i+3;
break;
}
for(i=12; i>=1; i--)
if(tuki[i-1] == 1) {
if(i>=9)
ymd_e = nen*100 + 100 + i-9;
else
ymd_e = nen*100 + i+3;
break;
}
cout << ymd_s << "," << ymd_e << endl;
}
}
>774 ほんと乙だわ。 そしてそれを全部見つけてきた779も乙
781 :
taguti :2009/04/14(火) 16:23:54
自己解決しました。
782 :
デフォルトの名無しさん :2009/04/14(火) 20:24:43
778さん、ありがとうございます。 C言語ですがC++もあまり変わらない解読でいいんですよね? もしよろしければ一行一行に説明文(コメント)を 追加していただけないでしょうか? 解読を試みているのですがさっぱりです。。
>>775 質問の意味が分からないや
テーブルの項目
NEN(4桁の数値文字列) | TUKI4〜TUKI3(2桁の数値文字列) | FLAG(1桁の数値文字列) | ...
2008 05 1 ...
2008 09 1 ...
2008 10 0 ...
2008 07 1 ...
のときに
YMD_S=200805
YMD_E=200809
としたいということ?
YMDなのにYMしか使ってないとか気持ち悪いけどw
784 :
デフォルトの名無しさん :2009/04/14(火) 20:35:45
NEN 04 05 06 07 08 09 10 11 12 01 02 03
2008 00 00 01 00 00 00 00 00 01 00 00 00
で
start 200806
end 200812
にしたいんじゃ
>>783
787 :
785 :2009/04/14(火) 20:52:59
C言語でやってみたぜ 2008年度の1月の表現は 200801 なのか 200901 なのか分からなかったので両方書いてみた #include<stdio.h> int main(void) { int year, month, flag, YMD_S, YMD_E; FILE *fp=stdin; while(fscanf(fp, "%d", &year)==1) { YMD_S=YMD_E=0; for(month=4;month<=12+3;month++) { if(fscanf(fp, "%d", &flag)!=1) break; if(flag) YMD_E=year*100+(month-1)%12+1; // if(flag) YMD_E=(year+(month-1)/12)*100+(month-1)%12+1; if(YMD_S==0) YMD_S=YMD_E; } printf("year=%d YMD_S=%d YMD_E=%d\n", year, YMD_S, YMD_E); } return 0; }
788 :
デフォルトの名無しさん :2009/04/14(火) 22:49:36
[1] 授業単元:プログラミングT [2] 問題文(含コード&リンク): ニュートン法でf(x)=x-cos(x)=0の近似値を求める。 f'(x)=1+sin(x)であるから、 a[k+1] = a[k]-(a[k]-cos(a[k])/(1+sin(a[k])) によって近似解の改良を繰り返すことになる。 初期近似解をa1=1.0,終了条件を|a[k+1]-a[k]|≦10^(-15)とし、 少数点以下15桁まで求めるプログラムを作成せよ。 ※a[k]などの"[k]"は、添え字です。 [3] 環境 [3.1] OS:Linux [3.2] cc [3.3] C言語 [4] 期限:明日
789 :
デフォルトの名無しさん :2009/04/14(火) 22:57:57
>>781 嘘つけボケが。
そのレベルを一人で解けないなんておわってんな。
>>788 #include <stdio.h>
#include <math.h>
int main()
{
double x, y;
x = 1.0;
do{
y = x;
x = y - (y - cos(y))/(1 + sin(y));
} while(fabs(x - y) > pow(10, -15));
printf("x = %.15lf", x);
return 0;
}
>pow(10, -15) 毎回計算させんのかよw
792 :
デフォルトの名無しさん :2009/04/15(水) 08:29:02
793 :
デフォルトの名無しさん :2009/04/15(水) 13:23:38
775です。 御解答ありがとうございます。 質問の仕方が悪くて申し訳ないです。 NEN 04 05 06 07 08 09 10 11 12 01 02 03 2008 00 00 01 01 01 01 01 01 01 00 00 00 で start 200806 end 200812 といった感じです。 787さん if(YMD_S==0) YMD_S=YMD_E; 以前で YMD_Sに年月がセットされるところがないように 思えますが、どういうロジックなのかご教示いただけませんか? やはりコメントがないと、見てもわかりません。 申し訳ありませんがお願いします。
797 :
794 :2009/04/15(水) 16:40:21
>>795 出力は問題ないのですが制限事項(1)でクラスを使うように指定されていますので
クラスでやってもらえるとたすかります
798 :
794 :2009/04/15(水) 16:59:58
>>796 ありがとうございます クラスなのとfind_first_of/find_last_ofでかいてもらってるので完璧です
出力も全く問題ないです find_last_ofの使い方がわからんとゆうのは使い方があまりよくないということでしょうか
外出しますが帰ったらもっかい見てみますがこれで問題ないです ありがとうございました
799 :
デフォルトの名無しさん :2009/04/15(水) 18:53:25
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):5つの数字の中から3つを選び全て出す [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:わかりません [3.3] 言語:C [4] 期限:今週いっぱい お願いします
あまりにもESP訓練が酷すぎる マインドシーカーかよ
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}, i; srand(time(NULL)); for(i=0; i<3; i++) { int j = rand() / (RAND_MAX + 1.0) * (5 - i); printf("%d ", a[j]); a[j] = a[4-i]; } return 0; }
組み合わせを列挙しろってこととじゃない?
#include <stdio.h> int main(void) { int i, j, k; for(i=1; i<=5; i++) { fof(j=1; j<=5; j++) { if(j==i) continue; for(k=1; k<=5; k++) { if(k==i||k==j)continue; printf("%d %d %d\n", i, j, k); }}} return 0; }
#include <stdio.h> int main(void) { int i, j, k; for(i=0; i<5; i++) for(j=i+1; j<5; j++) for(k=j+1; k<5; k++) printf("%d %d %d\n", i, j, k); return 0; }
806 :
sage :2009/04/15(水) 23:17:56
#include<stdio.h>
int main(void)
{
int i,j,n;
i=2;
printf("Input Num=?");
scanf("%d,&n");
printf("Dec=%d\n",n);
printf("heX=%x\n\n",n);
j=(n
>>2 )&1;
printf("bit[%d]=%d\n",i,j);
return(0);
}
↑これに適当な数を入れると決まって-4195116になってしまいます
どうすればいいでしょうか
スレ違いだ
scanf("%d,&n");
>>805 さんの流用
#include <stdio.h>
int main(void)
{
int i, j, k;
int data[5]={0,0,0,0,0};
printf("好きな数字を5個入力してください:");
if(scanf("%d%d%d%d%d", &data[0], &data[1], &data[2], &data[3], &data[4]) != 5) return 1;
for(i=0; i<5; i++)
for(j=i+1; j<5; j++)
for(k=j+1; k<5; k++) {
printf("%d %d %d\n", data[i], data[j], data[k]);
}
return 0;
}
810 :
799 :2009/04/16(木) 00:09:01
812 :
デフォルトの名無しさん :2009/04/16(木) 18:03:52
[1] 授業単元:画像処理プログラミング
[2] 問題文(含コード&リンク):
JPEG-LSでは予測誤差を量子化することでNEAR-LOSSLESSを実現している。
予測誤差を量子化せずにNEAR-LOSSLESSを実現しなさい。
なお採点は
(1)JPEG-LSのソースコードを見つける[10点]
(2)プログラムを書き、NEAR-LOSSNESSを実現する[20点]
(3)出来た画像を見て考察をする[20点]
(4)他の符号化方式で(1)〜(3)を行う.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C言語
[4] 期限: 4/18 22:00まで
[5] その他の制限:ソースコードは見つけたので
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm の:C/C++の宿題を片付けます 124代目の9035.zipにアップしておきました。
各画素の輝度値に所望誤差を加え,それを量子化ステップで割って,
可逆符号化をして,復号し,その後各画素の輝度値に量子化ステップを
かけてあげれば出来るのでないかと思い、先生に確認したところ
それでできるとのことだったのですが、書き方がよくわかりませんでした。
どなたかお願いいたします。
813 :
デフォルトの名無しさん :2009/04/17(金) 00:33:18
[1] 授業単元:応用プログラミング実習 [2] 問題文(含コード&リンク) 演習1:任意の長さのint型の配列を用意し,昇順にソートせよ.また,最小値,最大値,平均値を出力せよ. 演習2:文字列とある文字を入力し,文字列中にその文字が現れた位置を表示するプログラムを作成せよ.但し,含まれなければ“なし”と表示する. (例: ABCDとB を入力 結果 2番目 ) 演習3:任意の大きさの2つの正方行列を標準入力から入力し,2次元配列に保存し,これら2つの行列の差を求め,表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:不明 [3.3] 言語: C言語 [4] 期限: 4/20 8:00まで [5] その他の制限:まだfor、while、多次元配列などの基礎のみしか学習していません。
814 :
811 :2009/04/17(金) 00:33:56
すみません 問題4だけでもお願い出来ないでしょうか 既存のソースをテンプレート化する問題です よろしくおねがいします
Nの階乗を再帰を用いた方法で計算してその計算過程も表示するプログラムを教えてください 参考書とにらめっこしたけどさっぱりわかりません
>>814 問題4、別にあまり変えるとこないけど
template<class T>
typename T::value_type median(const T &ary) {
typename T::size_type num = ary.size();
if(num%2 != 0) {
std::partial_sort(ary.begin(), ary.begin() + (num/2)+1, ary.end());
return ary[((num+1)/2)-1];
} else {
partial_sort(ary.begin(), ary.begin() + (num+1/2), ary.end());
return (ary[(num/2)-1]+ary[num/2])/2;
}
}
>>815 #include <stdio.h>
int fact(int n)
{
if(n <= 1) return n;
int m = fact(n - 1);
printf("%d! = %d * %d! = %d * %d = %d\n", n, n, n - 1, n, m, n * m);
return n * m;
}
int main()
{
int n;
printf("n!を計算します。\nn = ");
scanf("%d", &n);
printf("%d! = %d\n", n, fact(n));
return 0;
}
818 :
811 :2009/04/17(金) 01:56:32
>>816 テンプレートが全くわかっていないのですが単純にpart3.cppのコードのmedian関数を上記に
変更してpart4.cppにしたのですがそれだとコンパイルエラーになりました。
ヘッダファイルは変更しなくていいですよね。read、prompt、mainはどこか変える必要ありますか?
>>815 をテンプレートメタプログラミングでやろうとしてみたがエラーでまくりんぐw
>>818 入れ替えるんじゃない、追加。
その構造体で動かしたいなら丸投げしとけば
double Abstract_student_info::median()
{
return ::median(homework);
}
821 :
811 :2009/04/17(金) 03:10:46
>>820 あほですみません。追加というとmedian関数を二回定義汁ということでしょうか?
申し訳ないのですが混乱していますのでヘッダとpart4.cppをうpして頂けると大変たすかります
823 :
811 :2009/04/17(金) 03:34:30
>>822 ありがとうございます!!コンパイル/実行できました。
まだコードの意味が全くわかっていませんがこれから理解につとめます
テンプレートむずかしい。。。
おやすみなさい(●'w'●)ノ
824 :
デフォルトの名無しさん :2009/04/17(金) 04:34:08
■せっかく
>>774 を行列式で書くなら
3D空間で同様に書いてみたら?
つまり宇宙的規模と言う事です。
(x1,y1,z1) (x2,y2,z2) (x3,y3,z3)
ID違うけど
>>815 です
>>817 さん
ありがとうございます
でも実際にコンパイル/実行してみると
7行目:サーバーエラー、intは間違ってます
と出てしまうんですけどどうすればいいんでしょうか?
ちなみに使っているソフトはCmachineです
勝手ですいませんが回答お願いします
int fact(int n) { int m; if(n <= 1) return n; m = fact(n - 1); printf("%d! = %d * %d! = %d * %d = %d\n", n, n, n - 1, n, m, n * m); return n * m; } これで多分おk
こまけーことはいいんだよ!(例のAA) と、言われそうだけど × if(n <= 1) return n; ○ if(n <= 1) return 1; なぜなら、0! = 1 だから。
>>827 そうするつもりで間違えた。指摘ありがとう。
>>826-828 さん
本当にありがとうございました
何度も質問して申し訳ないんですが
#include<stdio.h>
void main(void)
{
int k,n,sum;
printf("kの値は?");scanf("%d",&n);
sum=1;
for (k=1;k<=n;k++)
sum=sum*k;
printf("合計=%d\n",sum);
}
をさっきのみたいに
途中の計算結果も表示するにはどうすればいいんでしょうか?
for (k=1;k<=n;k++) { printf("%d*%d=%d\n", k, sum, sum*k); sum=sum*k; }
831 :
デフォルトの名無しさん :2009/04/17(金) 17:45:03
派生クラスのサイズが、基本クラスのサイズより小さくなる事はありますか? 例えば class A { private: int a } class B:: private A { } このように書いた時でも、classBのインスタンスは Aで定義したaが初期化されてしまうというか メモリを割り当てられてしまうんですか?
>>830-831 さん
ありがとうございます
>>830 さん
でもそれを入れなおしてコンパイルすると10行目:予期せぬEOFってでます
for (k=1;k<=n;k++) { の{をとってコンパイルするとエラーは出ないんですが
N!の答えで出てきません
申し訳ないですが回答お願いします
for (k=1;k<=n;k++) { printf("%d*%d=%d\n", k, sum, sum*k); sum=sum*k; }
>>833 だから単文でも中括弧を省略するなとあれほど口を酸っぱk
とりあえず #include<stdio.h> void main(void) { int k,n,sum; printf("kの値は?");scanf("%d",&n); sum=1; for (k=1;k<=n;k++) { printf("%d*%d=%d\n", k, sum, sum*k); sum=sum*k; } でコンパイルしたんですが10行目:予期せぬEOFです。 ってでました どうすればいいんでしょうか?
838 :
835 :2009/04/17(金) 21:22:48
for (k=1;k<=n;k++) { sum=sum*k; } printf("合計=%d\n",sum); △ ▼ for (k=1;k<=n;k++) { printf("%d*%d=%d\n", k, sum, sum*k); sum=sum*k; } printf("合計=%d\n",sum);
>>838 さん
ようやくできました・・・。
ありがとうございました
お騒がせしてもしわけなかったです
>>834 ありがとうございます。
コピペして走らせて見ました。
どうやっても増えちゃいますね。
>>841 どうでも良いけど課題3簡単過ぎじゃない?
#include <stdio.h>
main()
{
puts("名前:山田 太郎");
puts("学籍番号:00A000");
puts("好きな科目:プログラミング演習");
}
>>841 課題1
#include <stdio.h>
int main()
{
int a = 5, b = 8;
printf("a=%d\nb=%d\na*3=%d\nb*2=%d\na*3-b*2=%d",a,b,a*3,b*2,a*3-b*2);
return 0;
}
課題2
#include <stdio.h>
int main()
{
int a, b, c;
printf("a="), scanf("%d", &a);
printf("b="), scanf("%d", &b);
c=a*3-b*2;
printf("\na*3=%d\nb*2=%d\na*3-b*2=%d",a*3,b*2,c);
return 0;
}
課題4 #include <stdio.h> int main(void) { int a; printf("入学年度(2桁)?"); scanf("%2d",&a); printf("学籍番号:%02dH777\n",a); printf("山田 太郎\n"); } どうでもいいけど typoをわざとやらせるとか "が全角だとかはこういうレベルの人たちに気づかせようってのは 間違ってる気がする。 自分で間違うヤツはいっぱいいるけど
>>843 課題4
#include <stdio.h>
int main(void)
{
int a;
printf("入学年度(2桁)?");
scanf("%2d", &a);
printf("学籍番号:%02dH777\n", a);
printf("山田 太郎\n");
return 0;
}
しまった mainがintだからreturnは必要か
課題が酷すぎてそんな事どーでもよくなる
教えてる側からしたらtypoで動かないんですけどって呼ばれるのはめんどくさいから 早めに体験させとくのは悪くないと思うけど。大学の講義としてはすごくベタな問題だよそれ
849 :
841 :2009/04/17(金) 23:18:20
早速解いていただき有難うございます! まだ習いたてで何度試しても上手くいきませんでしたorz これから授業について行けるように頭に叩き込もうと思います。
>>849 こんな問題出すような先生の言うことは聞いちゃダメだぞ
自分で勉強するんだ
>>850 それじゃあ単位取れないだろw
無難にこなしつつも軽蔑しろ
といわなきゃ
課題4を除けば4月の課題としては普通だが そういえば大学でTAやってたころ、全角半角分からないヤツに 教科書を丸写ししたのにコンパイルできないんです〜〜とか そういう質問をいっぱい受けたなぁ ぐちゃぐちゃなコード見せられて これが動かない、何とかしろという馬鹿に インデントしろとかコメントかけ、何がしたいかも分からん とか言うとそんなことどうでも良いだろとか逆ギレされたなぁ 期末に全く授業出てないけどこのレポート出したら単位もらえるから 答えを教えろといってきたヤツまでいたっけ このスレとあんま変わらんか
853 :
デフォルトの名無しさん :2009/04/18(土) 01:01:27
>>813 やってくれる方どなたかいませんか?><
いるよなあ バグ持ちでなかなか動かない汚いプログラムをいつまでも いじくり回してる奴 こちらは一から綺麗に書き直してやってるのにそれに目もくれずに 「これを直してください」の一点張り 知るかよそんなの
>>813 演習3
#include <stdio.h>
int main(void) {
int i, j, n, *dataA, *dataB, *wa, *wb;
printf("Input N:"); scanf("%d", &n);
if((dataA = malloc(n*n*sizeof(int))) == 0) return 1;
if((dataB = malloc(n*n*sizeof(int))) == 0) return 1;
printf("Input Matrix A %d X %d\n", n, n);
for(i=0; i<n; i++) {
wa = &dataA[i*n];
printf("A %d : ", i+1);
for(j=0; j<n; j++) scanf("%d", &wa[j]);
}
printf("Input Matrix B %d X %d\n", n, n);
for(i=0; i<n; i++) {
wb = &dataB[i*n];
printf("B %d : ", i+1);
for(j=0; j<n; j++) scanf("%d", &wb[j]);
}
puts("Print out A-B=C");
for(i=0; i<n; i++) {
wa = &dataA[i*n];
wb = &dataB[i*n];
printf("C %d : ", i+1);
for(j=0; j<n; j++) printf("%d ", wa[j] - wb[j]);
puts("");
}
return 0;
}
>> 813 #include <stdio.h> enum { ARRAY_NUM = 10 }; void disp_array(int *array, int num) { int i; printf("Array:"); for (i = 0; i < num; i++) printf(" %d", array[i]); printf("\n"); } int main(void) { int array[ARRAY_NUM]; int min, max, sum; int i, j; int temp; for (i = 0; i < ARRAY_NUM; i++) scanf("%d", &array[i]); disp_array(array, ARRAY_NUM); min = max = array[0]; sum = 0; for (i = 0; i < ARRAY_NUM; i++) { for (j = i + 1; j < ARRAY_NUM; j++) { if (array[j] < array[i]) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } if (array[i] < min) min = array[i]; if (array[i] > max) max = array[i]; sum += array[i]; } disp_array(array, ARRAY_NUM); printf("min: %d, max: %d, average: %d\n", min, max, sum / ARRAY_NUM); return 0; }
>> 813 演習2 #include <stdio.h> enum { STRING_LENGTH = 100 }; int find_char(char *str, char ch) { int i; if (str == NULL) return -1; i = 0; while (str[i]) { if (str[i] == ch) return i + 1; i++; } return -1; } int main(void) { char str[STRING_LENGTH]; char ch; int num; printf("str >> "); scanf("%s", str); fflush(stdin); /* fflush()を使うのは本当は正しくない */ printf("char >> "); scanf("%c", &ch); num = find_char(str, ch); if (num < 0) printf("なし\n"); else printf("%d番目\n", num); return 0; }
>>856 ,857
安価の付け方ミスったぜ……。
>>856 が演習1。全角空白を適当に変換してくれ。
859 :
デフォルトの名無しさん :2009/04/18(土) 03:42:18
演習2はstrcspnかstrchr使えばええんちゃうの?
862 :
855 :2009/04/18(土) 08:14:29
すみません
>>842 がビルドエラーになるのですがとこが間違ってるのでしょうか?
少なくとも出力されているエラーを貼りましょう
mainの戻り値とかが怪しいな それ以上はエスパーじゃないから分かんない
866 :
863 :2009/04/18(土) 12:30:56
説明不足ですみません。 以下がエラーメッセージになります。 errorC4430:型指定子がありません - intと仮定しました。 メモ:C++はintを既定値としてサポートしていません。 あと、3行目に問題があるようです。
おぉ、
>>865 のESPが正解を言い当てているw
main() を int main() に。
でも、それはC++のコンパイラを使っているからであって
Cでは main() で間違いじゃない。
あと、Cでは引数なしのときはできうる限り void を使う。
よって main(void) がいい感じ。C++では逆にvoidは使わない。
コンパイルエラーはでるが、間違いではないので、
先生に言われたら「たわけがっ!」と言い張ればOK
869 :
863 :2009/04/18(土) 12:52:04
迅速に対応していただき助かりました。 無事に動きました。 皆さん有り難うございます!
>>868 C でも int main() が昔からの書き方かな。int main(void) は最近のはやりですかね。
main()のint省略は、 Microsoft VC6の時代は、拡張子CPPでもウォーニングレベル止りだったけれど、 VC8以降は拡張子CPPではエラーにした。
>>870 最近って、ISO、ANSI準拠でとっくの昔に「標準スタイル」として提唱されているが?
>>872 その ANSI 準拠がくせもの、main() 呼び出し先では引数つきで呼び出しているのに、main(void) ってかくのは変じゃないですか?
呼び出し時の引数を無視しているだけで、別に変じゃないですよ。
呼び出し側でスタックに積んでも それを使うかどうかは呼び出された側次第だしな
C言語は関数のプロトタイプ宣言で戻り値の型を省略すると コンパイラによる型チェックが停止するので(K&R第2版89p) 引数なしの場合はvoidをつけるべき。 でもmainは関係なし。実際、K&Rでもmainの引数は省略されてる。
戻り値じゃなくて、パラメータだったよ、おっかさん。 あと、K&Rはmainの戻り値も省略してる。ひゃっはー。
878 :
871 :2009/04/18(土) 17:06:14
>863 main() Cでは戻り値のウォーニング。C++では戻り値のエラー。 void main() Cではエラー無し。C++では戻り値のウォーニング。
[1] 授業単元:プログラミング演習 [2] 問題文:直線と四角形の接触判定を求めるプログラム [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: (C) [4] 期限:火曜日 [5] その他の制限:特になし 直線の式と四角形の座標を入力して直線が四角形を通過しているか (角で交わるものも含む)どうかを判定するプログラムです。 よろしくお願いします
>> 879 四角形の大きさなどは?
>>880 特に決められていないので大きさに関係なく
判定できたらいいなと思います
#include <stdio.h> typedef struct { double x, y;} point; typedef struct { double a, b, c;} line; int isCross(line l, point p1, point p2) { return (l.a*p1.x+l.b*p1.y+l.c)*(l.a*p2.x+l.b*p2.y+l.c)<=0; } int main(void) { int i; point quad[4]; line l; for(i=0; i<4; i++) scanf("%lf%lf", &quad[i].x, &quad[i].y); scanf("%lf%lf%lf", &l.a, &l.b, &l.c); if(isCross(l, quad[0], quad[2])||isCross(l, quad[1], quad[3])) { printf("通過する\n"); } else printf("通過しない\n"); return 0; }
>>882 ありがとうございます
直線のa,b,cは傾きと切片とあと何を入力してるんでしょうか?
ax + by + c = 0
あと180°以上の角があるやつには対応してないから
直線は無限なのか有限なのか 四角形は座標軸に対して傾いてないのかとか 多少気になるな 無限で傾いてないと仮定するのが一番楽そうだけど
>>886 説明がたりなくて本当にすみません。
直線は無限で四角形は座標軸に対して傾いていません
直線に対して四角形の角の四点がすべて同じ側にあるかどうかを調べる ってのが方針でしょう
>>875 ダウト。cdecl じゃなくて stdcall(pascal) だったら呼ばれた側で処理しないと。
定義からすると四角形じゃなくて長方形(矩形 Rectangle)が正しいな そして座標軸に対して傾いていない
#include <stdio.h> typedef struct { double top, bottom, left, right; } rectangle; typedef struct { double a, b, c; } line; int isCross(rectangle r, line l) { return (l.a*r.left+l.b*r.top+l.c)*(l.a*r.right+l.b*r.bottom+l.c)<=0 || (l.a*r.left+l.b*r.bottom+l.c)*(l.a*r.right+l.b*r.top+l.c)<=0; } int main(void) { rectangle r; line l; scanf("%lf%lf%lf%lf", &r.left, &r.top, &r.right, &r.bottom); scanf("%lf%lf%lf", &l.a, &l.b, &l.c); printf("通過%s\n", isCross(r,l) ? "する" : "しない"); return 0; }
数学の問題としてもC言語の問題としても面白くない
数学の問題としてもw 面白くないw
二つの対角線のうち、どちらかが直線と交わればいい。 対角線と直線が交わるってことは、対角線の両端の座標をax+by+cに代入した結果が、 片方は正で片方が負になっていればいい。
>>894 で、それって888の言ってることとどう違うの?
>>870 後者をやってるヤツなんて見たことないが・・・
わざわざint つけてvoidつけてとかバカだろと
釣れねーよw
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 任意の2つの正方行列を標準入力から入力し、2次元配列に保存し、 これら2つの行列の差を求め、表示するプログラムを作成せよ [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン:VisualC++2008 [3.3] 言語:C++ [4] 期限: 19日7時まで [5] その他の制限:なし
重複すいませんでした。
>>901 じゃあ895は888にむしろ劣ってるね
お前が888か?w 具体性皆無でクソの役にもたたねーよw
>>882 を変形四角形対応版に改良
#include <stdio.h>
typedef struct { double x, y; } point;
typedef struct { double a, b, c; } line;
int isCross(line l, point p1, point p2)
{
return (l.a*p1.x+l.b*p1.y+l.c)*(l.a*p2.x+l.b*p2.y+l.c) <= 0;
}
int main(void)
{
point quad[4];
line l;
int i;
for(i=0; i<4; i++) scanf("%lf%lf", &quad[i].x, &quad[i].y);
scanf("%lf%lf%lf", &l.a, &l.b, &l.c);
for(i=0; i<3; i++) if(isCross(l, quad[i], quad[i+1])) break;
printf("通過%s\n", i!=3 ? "する" : "しない");
return 0;
}
>>903 904みたいにコードで示してから具体性とか言え
904はダメダメだけどな
どこがダメダメなのかコードで示してから言えw
>>903 具体性も何も ax+by+c に代入して符号調べるだけじゃん
その程度のことすら書いてないのが888
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 新入生全員にパスワードを渡したい。学生ごとに異なるパスワードをコンピューターを使って自動的に生成したい。 生成するパスワードの長さは10とする。パスワードに使える文字は、英字のうち大文字のみとする。 1回のプログラム実行につき、1個のパスワードが出力されるようにせよ。 制約条件:パスワード生成時に、random()とsrandom()を使う。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: ([2009年4月21日10:00まで] [5] その他の制限:なし。 よろしくお願いします。
>>908 エスパーしろっていう内容でもないんだけど
一から十まですべて書かないと分からない?
質問者のレベルを考慮すれば分からなくても仕方ないけど
>>908 は質問者なの?
911 :
908 :2009/04/19(日) 18:14:55
いいからさっさと答えんかいカスども
異なるってことは、今まで生成したパスをファイルで保存すんの?
>>910 そういうことはコード書いてから言ってねw
>>909 #include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random(void)
{
return rand();
}
void srandom(unsigned seed)
{
srand(seed);
}
int main(void)
{
int i;
srandom(time(NULL));
for(i=0;i<10;i++)
{
printf("%c", 'A'+random()%26);
}
return 0;
}
すばやく2回実行すると同じpassができるw
同じパス出てもいいの?題意には書いてないけど
良いらしい。
random(3), srandom(3) を使えって意味じゃなかったのか…
>>920 mingw だとリンクエラーになるけど
linux だとまんまなのがあったのか
>>906 同じ点を2回計算するのがダメ
quad[3]とquad[0]が作る線分のことを考慮してないのがダメ
よってダメダメ
>>923 >quad[3]とquad[0]が作る線分のことを考慮してないのがダメ
これは問題ないと思うじぇ
925 :
923 :2009/04/19(日) 22:41:31
ああそうか、線分じゃなくて直線だから大丈夫なのか スマン
926 :
デフォルトの名無しさん :2009/04/19(日) 23:23:43
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 正の整数nを入力し、 (n+1)×n+n×(n-1)+........ +4×3+3×2+2×1 を計算し求めるプログラム [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Borland C++ 5 [3.3] 言語: C [4] 期限: 一週間後 [5] forの繰り返しを使う
#include <stdio.h> int main() { int n; double sum; printf("正の整数を入力してください>"); scanf("%d", &n); for (sum = 0.0; 0 < n; n--) { sum += (n + 1) * n; } printf("Ans. %.0f\n", sum); return 0; }
例外処理も何もしないとか論外すぎんだろksg
因にその和はn*(n+1)*(n+2)/3
930 :
デフォルトの名無しさん :2009/04/19(日) 23:47:19
>>927 for(i=1;i<=5,i++)など、なるべく簡単に最初に習う範囲でお願いします。
#include <stdio.h> int main() { int n, i; double sum = 0.0; printf("正の整数を入力してください>"); scanf("%d", &n); for (i = 1; i <= n; i++) { sum += (i + 1) * i; } printf("Ans. %.0f\n", sum); return 0; }
わざわざreturn 0つけるくらいならmain()だけで良いだろ。
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
[1] 授業単元: プログラミング 演習(構造体) [2] 問題文(含コード&リンク): 3冊の本の名前、ISBN、著者名を入力し一覧表示しなさい。 ただし、ISBNの4,6,12,16桁目に'-'が入っていない場合エラー表示しなさい。 [3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン: 不明 [3.3] 言語: C [4] 期限: 04/20 12:00 [5] その他の制限: forや配列など基礎的な事しかやっておりません。 一覧表示までは動作したんですがISBNの判定をどの様にしたらいいのか分かりません。 構造体名は「hon_t」それぞれ「name」「isbn」「tyosya」で組んでいます。
935 :
デフォルトの名無しさん :2009/04/20(月) 00:12:35
>>931 解決しました。
ありがとうございました。
927、929さんもありがとうございました。
if (hon_t.isbn[3] != '-' || hon_t.isbn[5] != '-' || hon_t.isbn[11] != '-' || hon_t.isbn[15] != '-') { // error }
937 :
デフォルトの名無しさん :2009/04/20(月) 00:24:25
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 無限等比級数の和を各項を順に加算していくことにより求めるプログラム 1+(1/3)+(1/9)+(1/27)+..... ただし、0.00001以下となる項を加えた時点で加算を終了することとする。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Borland C++ 5 [3.3] 言語: C [4] 期限: 一週間後 [5] while do-whileの繰り返しを使う 初心者用でなるべく簡単なものでお願いします。
カキコ後10分経過 鋭意清書中約3名 コンパイル中約6名 コーディング中約18名
>>937 #include <stdio.h>
int main(void){
double r = 3;
double stop = 0.00001;
double b = 1;
double ans = 0;
while(1/b > stop){
ans += 1/b;
b *= r;
}
printf("%f\n", ans);
return 0;
}
#include <stdio.h> int main() { int n = 1; double sum = 0.0; double d; do { d = 1.0 / n; sum += d; n *= 3; } while (0.00001 < d); printf("Ans. %f\n", sum); return 0; }
>>936 解決致しました。
ありがとうございました。
942 :
デフォルトの名無しさん :2009/04/20(月) 01:04:58
>>940 解決しました
ありがとうございました。
>>932 それint省かれてるだけだから結局return 0いるじゃん。
きっと戻り値の型を省略すると void になると思ってたんだろ
1] 授業単元:ディジタル回路 [2] 問題文(含コード&リンク): 次の2つの関数は異なるa,bの値を返すか。 その場合はa,bの組の例を答えよ。 1. int foo1(int a, int b){ if(a>b) return 1; else return 0; } 2. int foo2 (int a, int b){ int c; c=a-b; if(c>0) return 1; else return 0; } 続く。
[3] 環境 [3.1] OS: Vista [3.2] コンパイラ名とバージョン:不明 (指定なし?) [3.3] 言語: C [4] 期限: 今日中 自分なりに考えてみたのですが、 答えは「ある」。例はa=-32768, b=1 理由:intは16ビット符号付き2進数なので、表せられる範囲は-32768〜32767 2進数に現わすと1000000000000000〜0111111111111111 a=-32768,b=1とすると、 a<bなので、foo1関数では「0」を返すが、 c=a-bをすると表現形式の値域を超えているため、c=32767となる。 よってc>0なので、foo2関数では「1」を返す。 何か的外れな考え方をしているかも知れません・・・ 答え、考え方が合っているかどうか、ご教示お願いします。
考え方はあってるけど、Vistaでintが16ビット?
948 :
デフォルトの名無しさん :2009/04/20(月) 11:46:15
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ピクロスを解くプログラム パターンの判定(横w=15 横の数列=4.2.3) 1行の可能なパターンを全て出力 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:分からない [3.3] 言語: C [4] 期限: 4/23 [5] その他の制限:お願いします
>>915 すみませんが、エラーになってしまうんですが。
どういうエラーが出たのかも書かないと。 エラー出てるのは自分だけかもしれないぞ。
Cで短い数学問題を題材にした課題なんて出すとCも数学もダメダメに なるからね 例え自分達が良くても学生/生徒はそうじゃないから >>>>>教師
高校レベルの数学ができないアホが来たw
その高校レベルの数学が中途半端なものなので、 Cも数学もダメにする元凶だっつーの
955 :
945 :2009/04/20(月) 13:39:59
>>947 vistaって、intは16ビットではないのか・・・知りませんでした。
考え方は一応合っているのですね。もう少し考えてから宿題を提出します。
有難う御座いました。
>>954 エラーメッセージは?
うちじゃ普通にコンパイルするけどな
>>953 この程度でダメになるようなら元からダメだろw
>>949 random と srandom が再定義されるからだと思う
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int i;
srandom(time(NULL));
for(i=0;i<10;i++)
{
printf("%c", 'A'+random()%26);
}
return 0;
}
だいたいなんで自分に関係ない課題にダメだししてんだよw
だいたいさぁ、現役の学生はこの世に誕生してまだ約20年間 生きた程度で、最初の10年はまだ物心も付かない、判断力も無い 思想の面でも洗脳されていない、そのうち親や周りの影響力で 考え方も染まっていくわけだが、40年生きた人は単純に20年生きた若造の倍 なんて短絡的なものではない。何度も同じ事をやっていると飽きてくる。 自分の人生はこれに賭けた、だから失敗できない。そりゃそうだ。 スポーツ選手がそのスポーツで好成績を出さなければ、次の世代の世話役で 一生を終えるかもしれない。成功したものでも、指導者になれるとは限らない。 適正があるからな。で、数学がちょっと出来ないくらいで、諦めてどーすんの? 理数系に進んで英語バリバリな俺からしてみれば、早く海外に出ろと言いたい。 島国で視野の狭いジャポネーゼは駄目。技術力はあるけど発展性が乏しい。
そもそも、英語なんてネイチヴランゲージャーからしてみれば 学ばずとも日頃から使うからな。俺の考えもジャポネーゼだw しかし、発展させるくらいのことはするよ。どうせ使わないものを 多数取り込んでも、それを覚えるだけで限られた生きられる時間を 食いつぶすだけで終わるかもしれないしな。もしかすると明日、 事故で死ぬかもしれない人生だぞ。早くしろ、間に合わなくなっても知らないぞー
で、俺はあまり数学とは深く関わらない処理でプログラミングをしている。 確かにデジタル機器なんざ数値データの処理が重要になるため、少しでも 効率の良いアルゴリズムを記述するために、数学的な考えは必要となってくる。 if、比較演算、四則演算、その他諸々。俺は頭が良いのか悪いのか、分からない。 ランクの低い大学に通っていたが、何で大学に通ったかさえも動機が曖昧。 CMでもやってるだろ?何でここの会社を選んだ?動機は?そんなのねーよ なんとなくだろ?って奴は意外に多い。自分がそうなってしまうこともあるだろう。 誰しも人生は一度きりだ、さぁ外に出て自分を解き放てっ!(タイーホAA略)
ああ、長文低脳が自分に解けない問題が出てファビョってたのかw
悪い、久々に来たんだが、解けない問題は無かったよ?w
数値計算も関わってくるが、本当に使わない人は使わないしな。 あれこれ解けても、分かりきった答えを覚えるだけがあんたの人生なのかと? それが出来て何か「教科書で出てくる問題」を解く以外に使ったことがあるのかと? ユーティリティーソフトを作りたいなら、PCの仕組みも学ばないと駄目だよ。 コードなんて所詮文字列。それをうまいこと活用できるかは、各個人次第。
精神の方の病院に入院してたのね。 そのわりには妄想癖抜けてないみたいだけどw
2ちゃんねるだって、もともと大昔からあったわけでもなければ、 それ以前にインターネットの普及が発展に繋がった。 2ちゃんねるがインターネットを普及させたわけではないが、そこに 目を付けた博之はさすが。ただ、利用者はクズが多いがなw もともと人間なんて、自分はおかしくない、自分こそ正しいという 思い込みで生きているちんけな生き物。戦争が起こっても負けた方が悪いw だから良さそうな相手を揺さぶって脅して、戦争に持ち込もうとする国もある。 ここで見下すような発言をするだけのお前、自分が特定できるコテなりトリップなりつけて 今後は発言したら?お前こそ問題が解けなかったんじゃないの?w 自分はさも解いた、解けたみたいな、ここでは 論より証拠 言葉よりコード 日本語よりプログラム言語 ですから、コードと実行プログラムで己の実力を証明してね。 ただ、あんたが解いたのは既に世の中に知れ渡っている、教科書にも記述されていることで 例えばコカ・コーラ社のコーラの調合の仕方、ケンタッキー・フライドチキンのスパイスの調合みたいな 固有ブランドを守るような秘密を解くことは出来ないからw
つーか、お前この板になにしに来てんの?
>論より証拠 言葉よりコード 日本語よりプログラム言語 コードの1行も書かず長文連投してる人間の言っていいことじゃない
この世は教養を身に付けて賢く生きることも重要だが、あれもこれもできる人はいない。 ほとんどの事で他人を頼って生きているわけだろ?ライフライン、病院、交通、食料、 そしててめぇが使っている目の前の機械。出来ない奴をバカにする割には 自分はこの世の中でちっぽけな存在だと気づかない愚かさ。 政治家にでもなって、地元に税金を国から持ち込んで、地元が賑わって自己満足でも してたら?高額納税者には、何も高学歴しかいないわけじゃないのだが、あんたの 納税額はおいくら?プログラミングで稼いだ分ではいくら?言ってごらん。 おっちゃん、内緒にしておいてやるから。ここに書いた時点で内緒でも何でもないがw あと数年生きてみろ、相手をバカにする発言を平気でする精神レベルの低いお子ちゃま。 お前が学生なら社会に出れば分かる。もし社会人なら人生オワタ。ただの無職? それは論外だろ。プログラミングで金稼ぎできないからって、ここで自分ができることで 自分以下の奴を見下しに来ているの?恥ずかしい人生だことw 何度も言ってやるよ。ここに投稿される質問の問題は、既に答えが分かりきっているものばかり。 余ほど、講師が過去にないようなものを出さない限り。ただそれすら学校の 授業 で学んだことを 使って解くという分かりきったものなんだわ。そう、自分の考えが足りない、視野が狭いだけで 勝手にそんな問題はと否定しているだけだと気づきな、ここでしか去勢を張れない青二才。
>相手をバカにする発言を平気でする精神レベルの低いお子ちゃま。 自己紹介乙
いっとくが、
>>951 は長文カキコとは別人だからな
974 :
デフォルトの名無しさん :2009/04/20(月) 15:48:07
>>955 OSじゃなくてコンパイラ依存
VistaでもLSI-C試食版とか使えばintが16ビットになる
vistaでLSI-Cを使う理由がわからねえw
麻呂を目の敵にしたあの基地外か。いい加減、ここがお前の縄張りでも お前がボスでもないことに気づいてくれ。どこのへぼ講師か教授か知らないが 鬱陶しい。授業の合間にこのスレを閲覧?授業中に閲覧?仕事しろ。 お前がいくら数値計算に長けていようが、日本のために活動していないなら はいさようならだよw 今若くしてこれから長生きする人で、未熟な者に対して 嫉妬(shit)してるのかね?w
長文が一体何を言わんとしているのか、あなたは理解できるだろうか?
オレにはさっぱり分からないが、分からないなりに要点をまとめようと努力してみた
>>961 海外では英語さえ出来れば、内容の論理性は求められない
>>962 享楽的に生きろ
>>963 オレは一体何を言ってるんだろう?
>>966 勉強なんて何の意味があるっていうんだ
>>968 僕の考えたアルゴリズムが最強
>>971 お前より出来る奴なんて腐るほどいる
だから僕を馬鹿にするのはやめて
>>953 高校レベルの数学がきちんと身についてる人間にとっては、
そのレベルの数学と関連するC言語の課題は理解の一助となると思うが。
プログラミング、コードとにらめっこで終わる人生ってのも、嫌だな・・・
>>980 そのレベルの数学の場合でも、もっと良いツールが既に
出来ているんで(奇しくもその多くはC言語が無ければ作れなかった)
数学教育の場合Cは使わないな。
数学の教育にCを使うんじゃなくて、Cの教育に数学を使うんだよ。 新しいものを学ぶ際に既知のものと関連付けることによって学習効果を向上させるの。
>>979 の恐ろしく冷静で的確なリファクタリングに敬礼w
日本人がやっているのはより追求するものばかりだよ。 小型化、高性能化。より無駄を省いて効率化。 まぁ、別に日本人が劣っているってわけでもない。 世界的に見て何かと優秀な部類に入るしな。 だいたい、アメリカは日本と比較して明らかに規模が違うしな。 人種、移民、海外への影響力。1億3千万の島国の日本が ここまで世界に影響力があることを考えると、やはり素晴らしい。 しかし、大勢に無勢。何かと人数で負けてしまうんだよね。 逆に、人数でごり押しするのがあの国。まぁスレチだから スレが終わりそうなこの辺で。次のスレでは虚勢を張っている 講師だか教授だか知らんが、そいつが罵詈雑言を使ったらスルー、放置よろ。
Cを学ぶ際に数学の関数とCの関数の混同を防止するくらい重要な ことは無い。これを混同してしまうと数学もCも両方ダメになる。 よってCの初期学習期間中に数学とリンクするのは良く無いことが わかる。(これはCだけじゃなく、ユーザー定義関数が作れる任意の 構造化プログラミング言語全般に共通して言えること)
Cを学習する際に数学の関数とCの関数を混同するヤツはプログラムに向いてない。
という奴に限って思いっきり混同してたりするw
Cを学べなかった奴はバカ ならこのスレに来る質問者は皆バカでFA 回答者がこれじゃなw
俺の下痢便でも煎じて飲むか?
その下痢は誰の下痢便を煎じて飲んだ結果かい?
終了
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。