C言語なら俺に聞け(入門篇) Part 30
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/06/13(金) 23:38:08教えて欲しいのではなく宿題を丸投げしたいならこちらへ。
C/C++の宿題を片付けます 108代目
http://pc11.2ch.net/test/read.cgi/tech/1211980711/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 29
http://pc11.2ch.net/test/read.cgi/tech/1212329099/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0002デフォルトの名無しさん
2008/06/13(金) 23:38:32Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/
Part 14 ttp://pc11.2ch.net/test/read.cgi/tech/1181735298/
Part 15 ttp://pc11.2ch.net/test/read.cgi/tech/1182719692/
0003デフォルトの名無しさん
2008/06/13(金) 23:38:57Part 17 ttp://pc11.2ch.net/test/read.cgi/tech/1185286631/
Part 18 ttp://pc11.2ch.net/test/read.cgi/tech/1187213990/
Part 19 ttp://pc11.2ch.net/test/read.cgi/tech/1190342593/
Part 20 ttp://pc11.2ch.net/test/read.cgi/tech/1192455273/
Part 21 ttp://pc11.2ch.net/test/read.cgi/tech/1194384258/
Part 22 ttp://pc11.2ch.net/test/read.cgi/tech/1196489491/
Part 23 ttp://pc11.2ch.net/test/read.cgi/tech/1198295362/
Part 24 ttp://pc11.2ch.net/test/read.cgi/tech/1201083176/
Part 25 ttp://pc11.2ch.net/test/read.cgi/tech/1203343907/
Part 26 ttp://pc11.2ch.net/test/read.cgi/tech/1206196600/
Part 27 ttp://pc11.2ch.net/test/read.cgi/tech/1209429897/
Part 28 ttp://pc11.2ch.net/test/read.cgi/tech/1211198816/
Part 29 ttp://pc11.2ch.net/test/read.cgi/tech/1212329099/
0004デフォルトの名無しさん
2008/06/13(金) 23:43:4600054
2008/06/13(金) 23:47:50また,この関数を使用して,キーボードから入力された文字列に
母音が何個含まれているかを表示するプログラムを作成せよ。
2,
(1)
ある自然数に対して,その自然数の約数は何個かを関数値として返すような
関数FactorQuantity()を作成せよ。
例として20の場合は{1,2,4,5,10,20}なので個数は6となる。
(2)
ある自然数Nの約数の個数が2個だけ(1とNだけ)の場合,Nは素数である。
そこで(1)の関数FactorQuantity()を利用してNが素数がどうかを判定し,
Nが素数なら1を返し,素数でなければ0を返す関数Prime()を作成せよ。
(3)
(2)の関数Prime()を用いて次のプログラムを作成せよ。
2つの自然数a,bを入力させ(a<bとする),a以上b以下の素数を全て表示するプログラムを作成せよ。
※ソースファイルは1つのファイルにまとめよ。
という2問です。
OSはリナックスです。
いままで習ったのは、printf、scanf、ループ文、if文、配列などです。まだポインタは習っていません。
解説も少し加えてくれるとありがたいです。
よろしくお願いします。
00065
2008/06/13(金) 23:48:410007デフォルトの名無しさん
2008/06/13(金) 23:49:32>>1
0008デフォルトの名無しさん
2008/06/14(土) 00:16:08float関数群が追加されたのはC95な。
0009デフォルトの名無しさん
2008/06/14(土) 00:16:550010デフォルトの名無しさん
2008/06/14(土) 00:21:24数値演算ライブラリと数値計算ライブラリは同一のものなのでしょうか?
数値演算ライブラリと検索しても詳しく出てこなくて
よろしくお願いします
0011デフォルトの名無しさん
2008/06/14(土) 00:25:1900125
2008/06/14(土) 00:32:18すいません
こちらへはURLをさしてたんですね…
0013デフォルトの名無しさん
2008/06/14(土) 00:33:040014デフォルトの名無しさん
2008/06/14(土) 00:39:450015デフォルトの名無しさん
2008/06/14(土) 00:44:06数値演算ライブラリと数値計算ライブラリが関係があるような記述があったので…
数値演算ライブラリとは何のことなのでしょうか
よろしくお願いします
0016デフォルトの名無しさん
2008/06/14(土) 00:54:44もし君がC言語の標準ライブラリのことを言っているのなら、それはたぶん数学関係ライブラリ <math.h> のことだ。
そうでないなら、それがどのようなものであるかは、すべてそのライブラリそのものに依存する。
ライブラリのマニュアルを読むこと。
0017デフォルトの名無しさん
2008/06/14(土) 01:01:09標準ライブラリの数値演算関数って事ですか、たぶん1年の初期の問題なんでこれなんだと思います
ありがとうございました。
0018デフォルトの名無しさん
2008/06/14(土) 01:41:320019デフォルトの名無しさん
2008/06/14(土) 02:09:31実現するライブラリのコードとか入ってるんだよね
最近のCPUは浮動小数点用の高機能命令が増えた
から数値演算ライブラリそのものが小さくなってるけど、
昔のCPUは浮動小数点演算そのものの機能がなくて
エミュレータが入っていた
今も組み込み用CPUだと浮動小数点演算ができない
ものはたくさんある
0020デフォルトの名無しさん
2008/06/14(土) 02:34:260021デフォルトの名無しさん
2008/06/14(土) 02:40:14基本的にはIEEE754とIBMエクセス64形式があるけど
ちょっと長いけど下のリンクを印刷でもしてじっくり読んでくれ
必ず役に立つ
http://docs.sun.com/source/806-4847/ncg_goldberg.html
0022デフォルトの名無しさん
2008/06/14(土) 02:45:13山ほど出てくる
0023デフォルトの名無しさん
2008/06/14(土) 02:53:11なんだか大変そうだけど俺頑張るよ父ちゃん!
0024デフォルトの名無しさん
2008/06/14(土) 04:30:42例えばif文でint形変数iが1〜9までの範囲ならtureだとする時はどうすればいいのでしょう。
if(i == 1,2,3,4,5,6,7,8,9)とやってみたところ、なぜか10以上の数でもtureになってしまいました。
0025デフォルトの名無しさん
2008/06/14(土) 04:32:260026デフォルトの名無しさん
2008/06/14(土) 04:34:45if()の中で,で区切って複数入れると一番右のものを判定する。
つまり、
if(i == 1,2,3,4,5,6,7,8,9) は if(9) と同じになり、9は真だから常にtrueになる。
0027デフォルトの名無しさん
2008/06/14(土) 04:35:440028デフォルトの名無しさん
2008/06/14(土) 04:36:20おおっ!なるほど。
言われてみれば、そのとおりです。
ありがとうございました。
0029デフォルトの名無しさん
2008/06/14(土) 04:37:01trueのスペルも間違えてましたorz
みなさん本当に感謝です
0030デフォルトの名無しさん
2008/06/14(土) 20:16:390031デフォルトの名無しさん
2008/06/14(土) 20:44:37実行時間比較したいんでお願いします
0032デフォルトの名無しさん
2008/06/14(土) 20:57:40C言語によるアルゴリズム事典(奥村晴彦)の付録のでは駄目なの?
手数料だけでフロッピーディスクで入手できるけど...
0033デフォルトの名無しさん
2008/06/14(土) 21:03:02STLじゃだめか?
0034デフォルトの名無しさん
2008/06/14(土) 21:33:400035デフォルトの名無しさん
2008/06/14(土) 21:40:410036デフォルトの名無しさん
2008/06/14(土) 21:42:390037デフォルトの名無しさん
2008/06/14(土) 21:49:31英語圏では単にCと呼ばれてるみたいなのですが。
話をする場合にはCと言っても問題ないと思うのですが。
JavaやC++の語尾に言語ってつけたりしませんよね?
Cだと一文字なので検索がしづらいということがありますが。
0038デフォルトの名無しさん
2008/06/14(土) 22:00:580039デフォルトの名無しさん
2008/06/14(土) 22:01:410040デフォルトの名無しさん
2008/06/14(土) 22:07:410041デフォルトの名無しさん
2008/06/14(土) 22:07:41「C言語」も同様の提案があったけど、アホな人が頑張って「C言語」のまま。
0042デフォルトの名無しさん
2008/06/14(土) 22:08:08確かにそうですが、ある単語が複数の意味を持っているということはよくあることなので。
それに中学生ではないのでCと聞いてセックスって思いませんよ普通。
文脈からプログラミング言語なのかセックスなのか分かると思いますが。
# 「はじめてのC」という書籍があります。
0043デフォルトの名無しさん
2008/06/14(土) 22:10:400044デフォルトの名無しさん
2008/06/14(土) 22:10:54Cなる言語
言語C
観念ι
勇者ライディーン
「エスペラント語」みたいなもんでしょ。呼び名としてはわかりやすいからいいんじゃないの。
>英語圏では単にCと呼ばれてるみたいなのですが。
むしろ英語圏での「the C language」「the C programming language」を直訳したんじゃないのw
0045デフォルトの名無しさん
2008/06/14(土) 22:12:26それは正式名称は何かっていう議論だよね。あれはアホじゃないだろうかと思ったけど、
まあ世の中そういうものだと思う
0046デフォルトの名無しさん
2008/06/14(土) 22:14:35これ一通り解けなきゃ何かを作るときとかまずいの?
0047デフォルトの名無しさん
2008/06/14(土) 22:19:56できあがるものはろくなもんじゃないだろうな
基礎は大事
0048デフォルトの名無しさん
2008/06/14(土) 22:21:24全然まずくない。むしろ(ry
0049デフォルトの名無しさん
2008/06/14(土) 22:22:30>>48
どっちだ・・・
0050デフォルトの名無しさん
2008/06/14(土) 22:26:110051デフォルトの名無しさん
2008/06/14(土) 22:47:11まずいって、何がまずいの?
C言語理解してなくても生きていけるし、
K&Rの演習が分からなくてもプログラムは書けるよ?
0052デフォルトの名無しさん
2008/06/14(土) 22:51:29解こうとして解けないのは大問題だろ
0053デフォルトの名無しさん
2008/06/15(日) 01:00:10ドラクエで言うと
レベル1で「がいこつ」と戦うと「まったく勝てない」んです。
けど、ある程度レベルが上がると「何とか勝てる」んです。
もっとレベルが上がると「余裕で勝てる」んです。
「がいこつ」に余裕で勝てるようになると今度は
「まほうつかい」に「何とか勝てる」ようになったりするんです。
「がいこつ」に勝てないのに「まほうつかい」に挑んでもしょうがないんです。
がんばってくださいよ。ラダトームの勇者さん。
0054スライム
2008/06/15(日) 01:02:130055デフォルトの名無しさん
2008/06/15(日) 01:02:390056デフォルトの名無しさん
2008/06/15(日) 01:04:29中には特殊な道具が必要、イベント上絶対に倒せない(ことになっている)とか
プログラミングに於いては、必要なライブラリやAPIがなきゃ厳しい、無理なんて
ものもあるしぃ〜。いくらプログラマのレベルを上げても駄目なこともあるのさぁ〜
ベイビー
0057デフォルトの名無しさん
2008/06/15(日) 01:33:04スライムさんはレベル1で勝てちゃうから、ね。
けれど、あなたがいない世界では決して勇者は育たず、永遠に世界に平和が訪れません。
あなたがいたからこそりゅうおうを倒すことができた、それを忘れる事はないでしょう。
>>55
そうだっけ!?そいつぁ大きなミスだったorz
>>56
ようせいのふえがあればゴーレムをすぐ倒せるのに、使い方を知らなかったために
ゴーレムと死闘する羽目になった。つまり、APIの知識が乏しいばかりに
車輪の再開発をするプログラマのことを指しているんですよね?
0058デフォルトの名無しさん
2008/06/15(日) 01:40:19無駄とは言えなくとも、他に手段を選べる、必要なものを取り込む
知識や知恵も必要ということさ。そこで、攻撃重視の戦士や武道家
だけでなく、魔法が使えるキャラ、そして攻略本も。
何か参考になる資料や開発環境を整えておくことも重要さ。
0059デフォルトの名無しさん
2008/06/15(日) 01:43:24K&Rの演習がプログラミングの基礎を抑えてると思ったんです。
ですが、どうやらもう少し簡単なものからやった方が自分にはいいみたいです。
>>52
すみません。未熟者です。
>>53
なるほど。
とりあえずスライム探してきます。
はぐれメタルもいるんですよね、きっと。
>>56
まず、道具の使い方がわかるくらいまでは勉強してみようと思います。
0060デフォルトの名無しさん
2008/06/15(日) 11:24:18そのうち自分が作りたかったプログラムが自動生成されるんじゃね?
0061デフォルトの名無しさん
2008/06/15(日) 11:26:510062デフォルトの名無しさん
2008/06/15(日) 13:03:23天才!
あとは、そのプログラムが自分の望む動きをするかどうかを
自動判定するプログラムを作ればいいだけだな。
頑張れ。
0063デフォルトの名無しさん
2008/06/15(日) 13:33:310064デフォルトの名無しさん
2008/06/15(日) 13:34:37激しく既出。(1726年イギリスの鬼痴骸による)
http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%AA%E3%83%B4%E3%82%A1%E3%83%BC%E6%97%85%E8%A1%8C%E8%A8%98
0065デフォルトの名無しさん
2008/06/15(日) 16:06:48万能検証プログラムがないとゴミプログラムに埋もれて死ねる
0066デフォルトの名無しさん
2008/06/15(日) 16:53:160067デフォルトの名無しさん
2008/06/15(日) 16:56:030068デフォルトの名無しさん
2008/06/15(日) 17:00:380069デフォルトの名無しさん
2008/06/15(日) 17:40:20if (![変数とか])
と書くべきか
if ([変数とか] == 0)
と書くべきかどちらですか?
あとヌルポインタを判定する場合も流儀があれば教えてください。
if (p == NULL)
か
if (!p)
かということ。
0070デフォルトの名無しさん
2008/06/15(日) 17:42:360071デフォルトの名無しさん
2008/06/15(日) 18:00:29個人的に
◎ if (![変数とか]) <− Ok
○ if ([変数とか] == 0) <− ちょっと冗長な気がする
◎ if (p == NULL) <− Ok
△ if (!p) <− NULLは0なのだろうか!?という問題がある。
0072デフォルトの名無しさん
2008/06/15(日) 18:01:56NULLは0ではないが、
0はNULLだから...
0073デフォルトの名無しさん
2008/06/15(日) 18:03:11お前ド素人だろ?w
Cでプログラム書くなよw
周りが迷惑だからなw
0074デフォルトの名無しさん
2008/06/15(日) 18:05:050075デフォルトの名無しさん
2008/06/15(日) 18:22:12char *p;
if(!p) { }
はOK. というか C++ では NULL よりは 0 の方が好まれているようです。
>>73
あ な た の 存 在 が 迷 惑 で す。
0076デフォルトの名無しさん
2008/06/15(日) 18:23:36007771
2008/06/15(日) 18:27:21NULLの値が0でなくても、
if(!p)
if(p != 0)
if(p != NULL)
は同じ結果になるようです。
サンクス
0078デフォルトの名無しさん
2008/06/15(日) 18:28:52ド素人をド素人のままのさばらせておくお前もあいつと同じく迷惑な存在。
http://www.kouno.jp/home/c_faq/c5.html#3
0079デフォルトの名無しさん
2008/06/15(日) 18:31:32trueが正常とは限らないだろう。例えば、
if (!(p = malloc(n))) {
perror("malloc");
return 1;
}
正常だった場合の処理;
もっとも、この書き方は、コーディング規約で禁止しているところもあると聞くが。
それはともかく、
if (!strcmp(a, b)) ...
は頂けないかな。
0080デフォルトの名無しさん
2008/06/15(日) 18:38:05ド素人のスレなので、そこんとこよろしく
0081デフォルトの名無しさん
2008/06/15(日) 18:39:12直感に反するわ。
0082デフォルトの名無しさん
2008/06/15(日) 18:40:06んーまあ比較演算子のない条件式を「変」だと思えるピュアな心があればいいんじゃないかな。
ただし、識別子と意味が食い違って紛らわしくなるような場合はいかん。いかんよ。
0083デフォルトの名無しさん
2008/06/15(日) 18:40:47>if(p != 0)
>if(p != NULL)
>は同じ結果になるようです。
流石ド素人。
なかなか諧謔のセンスがある。
このような頭の悪い人間はプログラミングの世界から手を引いた方がよい。
疑似科学の学者になったほうがよいのではないか?
0084デフォルトの名無しさん
2008/06/15(日) 18:42:09まあ逝ってきなさい
http://www.kouno.jp/home/c_faq/c5.html
0085デフォルトの名無しさん
2008/06/15(日) 18:47:03この画像がニュースで流れて以来、情報が無いのですが
ちゃんと避難できたでしょうか?
http://2chart.fc2web.com/2chart/obachannnigeteeeeeeeee.html
0086デフォルトの名無しさん
2008/06/15(日) 18:58:34うっかりミスだとわかるだろうに
天下を取ったようなその書き込み
もっと大きな気持ちで行こうよ
0087デフォルトの名無しさん
2008/06/15(日) 19:04:230088デフォルトの名無しさん
2008/06/15(日) 19:04:47俺なら窓から投げ捨てる。
0089デフォルトの名無しさん
2008/06/15(日) 19:07:340090デフォルトの名無しさん
2008/06/15(日) 19:08:34if (isdigit(c)) ...
とかだと比較演算子が現れないけど、これを無理矢理
if (isdigit(c) != 0) ...
とか書く訳?
0091デフォルトの名無しさん
2008/06/15(日) 19:11:41ごめんなさい、今日ちょっとイライラしているんです。
そもそも>>69を書いたのは私で論争を起こそうと考えたからなんです。
あー、ごめんなさいごめんなさい、CもしたことがないのにCのポインタがナントカとか言って
ごめんなさい。人間ド素人は私の方なんです。あぁ、こういうことを平然というから味の素並に
嫌われる元なんですね、ごめんなさいごめんなさい。
0092デフォルトの名無しさん
2008/06/15(日) 19:15:290093デフォルトの名無しさん
2008/06/15(日) 19:41:48真偽を返す関数は逆に比較すべきじゃない。
0094デフォルトの名無しさん
2008/06/15(日) 20:06:42それは特殊だなって見ればわかるじゃん
0095デフォルトの名無しさん
2008/06/15(日) 20:10:25ただ、自分のやり方として首尾一貫するのが大事
0096デフォルトの名無しさん
2008/06/15(日) 21:55:51てことは置いといてもっと気楽に行こうよ。
そう書いたらダメとか、それは間違ってる・・とかより >>74 や >> 95 に一票(もしかすると同一人?)
>>90 は頭を柔らかくね。何年かして、そのプログラム見たときに何か感じるものがあればいいんじゃない?
0097デフォルトの名無しさん
2008/06/15(日) 22:03:36まともなコンパイラなら同じコードを生成するよ。
0098デフォルトの名無しさん
2008/06/15(日) 22:45:510099デフォルトの名無しさん
2008/06/15(日) 22:55:030100デフォルトの名無しさん
2008/06/15(日) 22:55:37スレ違い
0101デフォルトの名無しさん
2008/06/15(日) 23:02:35すいませn
どこいけばいいですか?
0102デフォルトの名無しさん
2008/06/15(日) 23:38:08あああ、ちがうよ〜。 or reg, reg とするか cmp reg,0 とかの話。
>>98
そりゃ目くじらどころかござにも引っかからないだしょ。
0103デフォルトの名無しさん
2008/06/16(月) 02:39:16ん、確かに。失礼しました。
0104デフォルトの名無しさん
2008/06/16(月) 04:33:310105デフォルトの名無しさん
2008/06/16(月) 07:28:500106aaa
2008/06/16(月) 15:30:50例えば
int a;
printf("数値:"); scanf("%d",&a)
実行結果 数値:●●
ってなって入力させると改行がはいるじゃないですか?
これを実行結果が 数値:●●センチ
のようにできますかね?
0107デフォルトの名無しさん
2008/06/16(月) 15:34:43環境によっては可能かも知れないが、かなり特殊だと思う
0108デフォルトの名無しさん
2008/06/16(月) 15:36:310109デフォルトの名無しさん
2008/06/16(月) 15:41:220110デフォルトの名無しさん
2008/06/16(月) 17:01:11その中から素数を計算から除外したい時はどのようにしたらいいんでしょうか?
0111デフォルトの名無しさん
2008/06/16(月) 17:03:130112デフォルトの名無しさん
2008/06/16(月) 17:03:35素数判定して除外すればいい。
恐らくは、こんな要領。
for (int ic = 3; ic < inputedNumber; ++ic) {
if (isPrime(ic)) continue;
someFunction();
otherFunction();
}
0113112
2008/06/16(月) 17:04:100114デフォルトの名無しさん
2008/06/16(月) 19:01:410115デフォルトの名無しさん
2008/06/16(月) 19:36:590116デフォルトの名無しさん
2008/06/16(月) 19:39:41デバッガの使い方覚える
0117デフォルトの名無しさん
2008/06/16(月) 19:57:350118デフォルトの名無しさん
2008/06/16(月) 20:00:570119デフォルトの名無しさん
2008/06/16(月) 20:09:40分野をはっきりさせないと答えられない。
0120デフォルトの名無しさん
2008/06/16(月) 20:15:55どこまで進んで落ちてるのか調べればいいんじゃ?
適当にprintfいれるとか。
0121デフォルトの名無しさん
2008/06/16(月) 20:19:35どうすればよいでしょうか?
test.datの中身
1 2 3 4 5 6 7 8 9 10 11 ... 1000
char line[10000];
int a[1000];
FILE *fp;
fp=fopen("test.dat","r");
fgets(line, sizeof(line), fp);
とすると、lineにtest.datの内容が文字列として格納されます。
ここからsscanfを用いて、1〜1000をa[0]〜a[999]に格納したいです。
繰り返し構文を用いて何とかできませんでしょうか?
0122デフォルトの名無しさん
2008/06/16(月) 21:04:37ためしにファイル名a.cとして文字列を表示させるだけのプログラムでコンパイルを試みたところ
Error E2209 a.c1: Unable to open include file 'stdio.h'
Warning W8065 a.c 4: Call to function'printf'with no prototype in function main
と表示されできません。
なにがいけなかったのでしょうか。
0123デフォルトの名無しさん
2008/06/16(月) 21:06:420124デフォルトの名無しさん
2008/06/16(月) 21:12:28レスありがとうございます。
確認してみましたができてました。
ちなみにプログラムは
#include <stdio.h>
int main(void){
printf("あああああ\n");
return 0;
}
ふつうのプログラムです。
0125デフォルトの名無しさん
2008/06/16(月) 21:14:37どっかの設定に問題があるとしか。
0126デフォルトの名無しさん
2008/06/16(月) 21:18:53できてないからおかしなことになっとるんじゃ
0127デフォルトの名無しさん
2008/06/16(月) 21:19:29ボーランド社のコンパイラを使っております。ファイルをC:\Borlandに解凍して、
↓
環境変数でPathの末尾に;C:\Borland\BCC55\Binを付け加える
↓
二つのcfgファイルを作る
であっていますか?
0128デフォルトの名無しさん
2008/06/16(月) 21:30:22http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6933.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6934.c
fgetsとsscanf 不使用
> char line[10000];
無理
0129デフォルトの名無しさん
2008/06/16(月) 21:35:320130デフォルトの名無しさん
2008/06/16(月) 21:36:03それをやったのですけど
そのプログラムではfread,fseekを使ってるプログラムで
ひさしぶりにつかったらどうやって組み立ててたのかわからなくて。
宿題のスレにお願いしたのですけど。
ここにはるとマルチになるので
0131130
2008/06/16(月) 21:42:14http://a-draw.com/uploader/src/up1643.zip.html
このファイルをダウンロードしてもらって解凍してもらいたいんです。
prog.cのファイルを実行してセグメンテーションエラーをとってほしいんです
けど。
0132デフォルトの名無しさん
2008/06/16(月) 21:42:250133デフォルトの名無しさん
2008/06/16(月) 21:46:20cfg ファイルの中身が間違っている可能性が高い
0134デフォルトの名無しさん
2008/06/16(月) 21:49:36レスありがとうございます
bcc32.cfg内は
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
ですよね。
ilink32.cfg内は
-L"c:\Borland\Bcc55\lib"
ですよね・・・
とくにファイルの移動とかはしていません。デフォルトのままです
0135デフォルトの名無しさん
2008/06/16(月) 21:51:49んで、そのファイルはどこに置いてる?
0136130
2008/06/16(月) 21:54:14きちんと動けばtextフォルダ内にテキストファイルができます
0137デフォルトの名無しさん
2008/06/16(月) 21:54:270138デフォルトの名無しさん
2008/06/16(月) 21:55:16>>135 は >>134 へのレス。
0139デフォルトの名無しさん
2008/06/16(月) 21:56:030140デフォルトの名無しさん
2008/06/16(月) 21:56:320141デフォルトの名無しさん
2008/06/16(月) 21:57:470142デフォルトの名無しさん
2008/06/16(月) 21:58:110143デフォルトの名無しさん
2008/06/16(月) 22:00:260144デフォルトの名無しさん
2008/06/16(月) 22:01:540145デフォルトの名無しさん
2008/06/16(月) 22:02:12拡張子もtxtではなくcfgに書き換えています。
0146デフォルトの名無しさん
2008/06/16(月) 22:02:320147デフォルトの名無しさん
2008/06/16(月) 22:03:190148デフォルトの名無しさん
2008/06/16(月) 22:04:300149デフォルトの名無しさん
2008/06/16(月) 22:04:32設定になっているがために
本当は .cfg.txt になってるのが .cfg と表示されている・・・とかはない?
0150デフォルトの名無しさん
2008/06/16(月) 22:05:43ありました。
>>146
何回も再起動しました;;
>>147
コマンドプロンプト開いてbcc32でズラズラでてきます。
0152デフォルトの名無しさん
2008/06/16(月) 22:11:370153122
2008/06/16(月) 22:15:420154デフォルトの名無しさん
2008/06/16(月) 22:28:520155デフォルトの名無しさん
2008/06/16(月) 22:43:34んじゃ、もう Borland は捨てよう。
インスコして即使える VC++ 2008 Express Edition にしよう。
0156122
2008/06/16(月) 22:51:29ですね・・・
Visual C++は初めて使う(学校ではUltra-C Proというソフトつかって勉強してました)のですが、まったく仕様がかわりますか?
基本画面を見ただけでごちゃごちゃしていてよくわからないのですが、、、
0157デフォルトの名無しさん
2008/06/16(月) 22:52:530159デフォルトの名無しさん
2008/06/16(月) 22:55:52> -I"c:\Borland\Bcc55\include"
> C:\Borland\Bcc32\include\stdio.h はある?
→ありました
Bcc使ったこと無いんだが、Bcc55ってのとBcc32ってディレクトリできるん?
0160デフォルトの名無しさん
2008/06/16(月) 23:00:56御免。それ間違えただけ。
0162デフォルトの名無しさん
2008/06/16(月) 23:01:28基本的な使い方はそこいらのサイトに載ってると思う。
0163デフォルトの名無しさん
2008/06/16(月) 23:03:23了解です。
bcc -ehoge.exe hoge.c
でいいのかな。
インクルードパスを明示的に指定するために
bcc -I"c:\Borland\Bcc55\include" -ehoge.exe hoge.c
とやってみるか、インクルードファイルをフルパス指定にするために
#include "c:\Borland\Bcc55\include\stdio.h"
に変えてみるとか。
0164デフォルトの名無しさん
2008/06/16(月) 23:04:360165デフォルトの名無しさん
2008/06/16(月) 23:05:150166122
2008/06/16(月) 23:14:16ちょっとググってみます。
>>163
おぉぉおぉぉぉおお!できました!ありがとうございます!
しかし、もうVisualC++をインストールし終えてしまいました^^;
でもありがとうございます!
0167デフォルトの名無しさん
2008/06/16(月) 23:17:29お。できたんだ?
ってことはコンフィグファイルがうまく効いてないのかしら。
その辺はますます使ったこと無いのでわかりませんが、VCに移行するんですね^^;
がんばってねー
0168122
2008/06/16(月) 23:25:10VisualC++は使い慣れるのにけっこう時間が必要のようです^^;;;
当分、メモ帳+VisualC++の併用していこうとおもいます。
167さんのアドバイスで新しい書き方を覚えましたし、満足です^^
ありがとうございました。がんばりまうs!
0169デフォルトの名無しさん
2008/06/16(月) 23:29:440170デフォルトの名無しさん
2008/06/16(月) 23:31:330171デフォルトの名無しさん
2008/06/16(月) 23:51:44メモ帳使う方が混乱すると思うぞw
0172デフォルトの名無しさん
2008/06/17(火) 00:00:15bcc32.cfgを用意するなどといった手間がない分、Borland C++より優位。
インストーラの力は偉大だ。
0173デフォルトの名無しさん
2008/06/17(火) 00:07:07今までのレス見てて原因分かったぞ
bcc32.cfgのincludeを指定してるパスが間違ってるんじゃないのか
0174デフォルトの名無しさん
2008/06/17(火) 00:08:150175デフォルトの名無しさん
2008/06/17(火) 00:09:390176デフォルトの名無しさん
2008/06/17(火) 00:31:05まずいくべきはPC初心者板だな。
0177デフォルトの名無しさん
2008/06/17(火) 00:38:14変数ってprintfで表示できるしデバッガーでも表示出来るのはわかるのですが
計算して新しいものを入れるのにクリアしないのですか?
0178デフォルトの名無しさん
2008/06/17(火) 00:40:54なにをいってるのかさっぱりわかりません、助けてください
0179デフォルトの名無しさん
2008/06/17(火) 00:42:420180デフォルトの名無しさん
2008/06/17(火) 00:43:46と思う値で初期化するなり上書きすればクリアじゃないかな
0181デフォルトの名無しさん
2008/06/17(火) 00:43:50ごめんなさい、講師の人には失礼なので聞けないので、一緒に研修受けている
人に聞いてもわかりません。
変数ってクリアしないで計算出来るんですか?
0182デフォルトの名無しさん
2008/06/17(火) 00:44:350183デフォルトの名無しさん
2008/06/17(火) 00:46:15ありがとうございます。
思う値でクリアするのがわかりません。
初期化か上書きって命令があるんでしょうか。素人ですみません。
0184デフォルトの名無しさん
2008/06/17(火) 00:47:10自分で値いれるんならクリアしなくてもいいよ
0185デフォルトの名無しさん
2008/06/17(火) 00:47:26なんというゆとり
0186デフォルトの名無しさん
2008/06/17(火) 00:48:090187デフォルトの名無しさん
2008/06/17(火) 00:48:20講師の人の言ってることは日本語が難しいので聞いても無駄だと思って。。。
0188デフォルトの名無しさん
2008/06/17(火) 00:49:070189デフォルトの名無しさん
2008/06/17(火) 00:50:16a = 1; 変数aに1を代入(上書き)
0190デフォルトの名無しさん
2008/06/17(火) 00:52:520191デフォルトの名無しさん
2008/06/17(火) 00:53:11そうすれば講義も理解しやすいかと
0192デフォルトの名無しさん
2008/06/17(火) 00:54:080193デフォルトの名無しさん
2008/06/17(火) 00:54:55っていっているので、聞けません。
a = 1って構文は理解したけど、なんでaが1になるのかわかりません。
型が同じだから代入できるということですか?
0194デフォルトの名無しさん
2008/06/17(火) 00:57:220195デフォルトの名無しさん
2008/06/17(火) 00:57:40職業訓練学校か?
>a = 1って構文は理解したけど、なんでaが1になるのかわかりません。
そういう決まりだからだ。
0196デフォルトの名無しさん
2008/06/17(火) 00:58:42授業料払ってるんだろう?
聞け
言っとくが俺らはおまえからもおまえの親からも何ももらってないんだからな
0197デフォルトの名無しさん
2008/06/17(火) 00:59:060198デフォルトの名無しさん
2008/06/17(火) 01:00:08単におまえが分不相応な講座取っただけだろ
0199デフォルトの名無しさん
2008/06/17(火) 01:01:08しようねといって、コンピュータの歴史の本みたいなのを読まされています。
わたしはプログラムしたいけれども、多分、もう見捨てられているんですね。
わかりました。
0200デフォルトの名無しさん
2008/06/17(火) 01:01:160201デフォルトの名無しさん
2008/06/17(火) 01:01:340202デフォルトの名無しさん
2008/06/17(火) 01:02:480203デフォルトの名無しさん
2008/06/17(火) 01:03:41なんでみんなこんなのでわかるのか泣きたいです。
0204デフォルトの名無しさん
2008/06/17(火) 01:05:02↑↑激しく矛盾 ↓↓
なんでaが1になるのかわかりません。
0205デフォルトの名無しさん
2008/06/17(火) 01:05:050206デフォルトの名無しさん
2008/06/17(火) 01:05:130207デフォルトの名無しさん
2008/06/17(火) 01:05:33そういうところをはっきり書いてくれないと誰もあなたが望む答えが出来ないと思うよ
0208デフォルトの名無しさん
2008/06/17(火) 01:05:41与えられた本に文句つけてる暇があったら、入門本を片っ端から読み漁れ。
講師だの学校だのにプログラム教えてもらおうなんて思ってるなら、転職・進路変更を勧める。
0209デフォルトの名無しさん
2008/06/17(火) 01:06:51どこの会社かしらんがおかしいだろ
0210デフォルトの名無しさん
2008/06/17(火) 01:08:070211デフォルトの名無しさん
2008/06/17(火) 01:08:430212デフォルトの名無しさん
2008/06/17(火) 01:08:490213デフォルトの名無しさん
2008/06/17(火) 01:09:02a = 1 って書くのはわかるけど、aは変数じゃないんですか???
ごめんなさい、たぶんわたしがまるでわかってないんですね。
0214デフォルトの名無しさん
2008/06/17(火) 01:09:05つまり a=1 を数学の数式として見てるのか・・・
0215デフォルトの名無しさん
2008/06/17(火) 01:09:200216デフォルトの名無しさん
2008/06/17(火) 01:09:550217デフォルトの名無しさん
2008/06/17(火) 01:09:57これの意味を本当に理解してる?
説明してみて
0218デフォルトの名無しさん
2008/06/17(火) 01:10:52意味わかんねえよ。
「(変数) = (値);」と書いて「(変数)に(値)を代入する」って読むんだよ。
何が分からんのか言うてみろ。
0219デフォルトの名無しさん
2008/06/17(火) 01:11:230220デフォルトの名無しさん
2008/06/17(火) 01:12:040221デフォルトの名無しさん
2008/06/17(火) 01:13:05自分で
int a;
a=1;
してからprintfでaを表示しろ
0222デフォルトの名無しさん
2008/06/17(火) 01:14:11出会い系のバナーしかリンクがねーんだけど。
0223デフォルトの名無しさん
2008/06/17(火) 01:14:19まず最初に
int a;
などのように書いてint型の変数としてaと言う箱を用意します
その箱の中身に 1 と言う値を入れる(代入)にはどうすればいいか
a = 1;
と書くのです、これはC言語の決まりごとです
0224デフォルトの名無しさん
2008/06/17(火) 01:14:24でも、どうしてaが1なんですか?
取り出すところがわかりません。どうやってクリアするのですか?
0225デフォルトの名無しさん
2008/06/17(火) 01:14:36どこが悪いか教えてもらえませんか?
どんな値を入れても18000みたいな数字が出てきてしまいます。。。
お願いします
#include<stdio.h>
int gcd(int m,int n) /*二つの自然数の最大公約数を返す*/
{ int i;
if(m > n)
{for(i =m; i==1; i--)
{if( (m%i)==0 && (n%i)==0 )
return i;
}}
else
if (m < n) {for(i =n; i==1; i--)
{if( (m%i)==0 && (n%i)==0 ) return(i); } } }
int main(void) { int x, y;
puts("二つの自然数を入力してください。");
printf("自然数1:"); scanf("%d", &x);
printf("自然数2:"); scanf("%d", &y);
printf("二つの自然数の最大公約数は%dです。 \n", gcd(x ,y));
return(0); }
0226デフォルトの名無しさん
2008/06/17(火) 01:15:22なんで止まれは止まらないといけないのかとか
0227デフォルトの名無しさん
2008/06/17(火) 01:15:26そんなところにソース上げられても誰も見ようとはしないよ
自分でリンク叩いてみろ
0228デフォルトの名無しさん
2008/06/17(火) 01:16:03「代入」の意味を説明してみろ
0229デフォルトの名無しさん
2008/06/17(火) 01:16:17クリアってなんだよ。
勝手に変な概念を作るな。
0230デフォルトの名無しさん
2008/06/17(火) 01:16:420231デフォルトの名無しさん
2008/06/17(火) 01:17:010232デフォルトの名無しさん
2008/06/17(火) 01:17:49単品だとエラー確認できないんすよー。
0233デフォルトの名無しさん
2008/06/17(火) 01:17:54i==1
0234デフォルトの名無しさん
2008/06/17(火) 01:18:37おまえら何がしてーんだよっww
0235デフォルトの名無しさん
2008/06/17(火) 01:19:100236デフォルトの名無しさん
2008/06/17(火) 01:21:23ddofile29050.zip pass errorです
みてもらえたらうれしいです
0237デフォルトの名無しさん
2008/06/17(火) 01:22:161643.zipがねーぞ?
2chなんかでリンク張るから消されたんじゃねーのw
0238デフォルトの名無しさん
2008/06/17(火) 01:22:230239デフォルトの名無しさん
2008/06/17(火) 01:22:250240デフォルトの名無しさん
2008/06/17(火) 01:22:41しねばいいよ
0241デフォルトの名無しさん
2008/06/17(火) 01:22:440242デフォルトの名無しさん
2008/06/17(火) 01:25:450243デフォルトの名無しさん
2008/06/17(火) 01:26:28そのままではそのデータが邪魔で 1 を代入することはできない
だから a からデータを取り出すなり消去する(「クリア」する)必要がある
とでも考えているんじゃなかろうか
0244デフォルトの名無しさん
2008/06/17(火) 01:26:350245デフォルトの名無しさん
2008/06/17(火) 01:28:44そうです。
どうしてクリアしなくていいんですか?
0246デフォルトの名無しさん
2008/06/17(火) 01:29:300247デフォルトの名無しさん
2008/06/17(火) 01:30:08自分が一番わかるであろう本をかいなよ。
そしてプログラムを自分が理解してうつ。
それがベストだろ。
0248デフォルトの名無しさん
2008/06/17(火) 01:30:50箱と説明されてるのがまずかったのかな?
ホワイトボードみたいなもんだを思ってくれ
a = 1;はaって言う名前のホワイトボード書き換える行為だと
0249デフォルトの名無しさん
2008/06/17(火) 01:31:090250131
2008/06/17(火) 01:31:17#include <stdlib.h>
#include <assert.h>
#define MAX 5000
#define M 25
#define STR_MAX 256
void binary_file_process(char *fname)
{ float sample1; float sample2; float sample3[5]; float s1[MAX]={0};
float input_data[150][M]; char buff[100]="text/"; FILE *fin1=fopen(fname,"rb");
strcat(buff,fname); strcat(buff,".txt");
FILE *fp =fopen(buff,"w"); int i = 0,j = 0,k = 0,l = 0,m = 0,y = 0,z = 0,max=0;
int count=0; fseek(fin1, 0, SEEK_SET);
fread(sample3, sizeof(float), 6, fin1);
fseek(fin1, 12, SEEK_SET); while(fread(&sample1, sizeof(float), 1, fin1) == 1) {
s1[k] = sample1; k++; }
count=k/M; max=k; for(i=0;i<max;i++){ printf("{%.1f}",s1[i]); if((i+1) % M ==0){
printf("\n"); } }
printf("\n\n"); printf("k:%d count:%d max:%d \n",k,count,max);
k=0; for(i=0 ; i < count ; i++){ for(j=0;j<M;j++){
printf("\t"); input_data[i][j]=s1[k];
fprintf(fp,"%f ",input_data[i][j]);
if((k+1) % M ==0){ fputs("\n",fp); } k++; } } fclose(fin1); fclose(fp);}
int main(){ char buf[100][STR_MAX]={'\0'}; FILE *fp; int i,j,k=0,count=0; system("dir power/*.data >memo.txt");
fp=fopen("memo.txt","r"); if(fp==NULL){ printf("prog001.c:file can't open memo.txt\n");
exit(-1); } printf("読み込み開始\n");
i=0; while(fscanf(fp,"%s",buf[i]) != EOF){
i++; } count=i; fclose(fp); printf("count:%d buf[0]=%s\n",count,buf[0]);
binary_file_process(buf[0]);
}
なんとかまとめてみました
お願いします
0251デフォルトの名無しさん
2008/06/17(火) 01:31:295行目と11行目のfor文を
i == 1 → i != 1 にかえるとおk
0252デフォルトの名無しさん
2008/06/17(火) 01:31:31その変数に代入すると,初期化した変数にいれられる。
0253デフォルトの名無しさん
2008/06/17(火) 01:31:45そこが言ってることがわかりません?上書きってクリアとは違うんですか?
0254デフォルトの名無しさん
2008/06/17(火) 01:31:49ホワイトボードじゃ、一回クリアしないと書けないぞw
MDでもカセットテープでもなんでもいいが、
繰り返し録音できるメディアはいちいちクリアしなくても
新しく録音できるだろ。
それと一緒だ。上書きだよ上書き。
0255デフォルトの名無しさん
2008/06/17(火) 01:32:070256デフォルトの名無しさん
2008/06/17(火) 01:32:21単品じゃうごかねえつったろw
0257デフォルトの名無しさん
2008/06/17(火) 01:32:58C言語は、プログラマのコードが全て
つまりプログラマの責任において操作する
a = 1;
の後に、aに何を代入して上書きしようがプログラマの勝手
で、その変数aの値を使用するのは、プログラマの責任で使えってこった
0258デフォルトの名無しさん
2008/06/17(火) 01:33:42nt main(){ char buf[100][STR_MAX]={'\0'}; FILE *fp; int i,j,k=0,count=0; system("dir power/*.data >memo.txt");
でエラー
0259デフォルトの名無しさん
2008/06/17(火) 01:35:430260デフォルトの名無しさん
2008/06/17(火) 01:37:03やっぱりむいてないんでしょうね。
書いている言葉は理解できるのにさっぱり意味がわかりません。
長々とありがとうございました。明日相談してみます。
0261デフォルトの名無しさん
2008/06/17(火) 01:38:52何が代入できるのだろう。
そもさん、せっぱ
0262デフォルトの名無しさん
2008/06/17(火) 01:39:12↑↑何か脳の病気なのか…↓↓
さっぱり意味がわかりません。
0263デフォルトの名無しさん
2008/06/17(火) 01:40:02型なのどの規則を守ってたら
あとは>>257の言うとおり
何も代入してない状態の変数にも中身が勝手に入ってる
ただ、それは何が入ってるか分からないから自分が分かるように
分かる値を入れるだけ
0264デフォルトの名無しさん
2008/06/17(火) 01:40:50ありがとうございます!
明日トライしてみますね!
助かりました。。
0266デフォルトの名無しさん
2008/06/17(火) 01:53:410267デフォルトの名無しさん
2008/06/17(火) 01:54:060268デフォルトの名無しさん
2008/06/17(火) 01:56:342つの素数の公約数って1でいいの?
0269デフォルトの名無しさん
2008/06/17(火) 01:56:44あるのかどうしてもわからないんですよ。
1じゃなくても入れられるのはわかっています。
なんで1があるのにそれを入れるのか、どういう時に入れれば
いいのかわからないんです。
入れたいときにっ言うけどそれがわかりません。
フローチャートも演習でやったのは書けたけど、プログラムを見て
フローチャートに出来ません。
やっぱり無理ですね。よくわかりました。
0270デフォルトの名無しさん
2008/06/17(火) 01:57:160271デフォルトの名無しさん
2008/06/17(火) 01:58:05もう寝ろ。
0272255
2008/06/17(火) 01:59:118 7 とか入力したらバグる
0273デフォルトの名無しさん
2008/06/17(火) 01:59:14全ての整数は1と(負の約数を考えるなら-1)を約数にもつ。
だから、どんな二つの整数も1を公約数に持つし、
二つの素数の最大公約数は1
0274デフォルトの名無しさん
2008/06/17(火) 02:00:25つまり、全部数値を直打ちしてプログラム書けということかいね
死ぬわ
0275デフォルトの名無しさん
2008/06/17(火) 02:01:01そういう意味だったか、すまん
確かに返り値返してないな
0276デフォルトの名無しさん
2008/06/17(火) 02:05:42すなわち、テンポラリである。
0277デフォルトの名無しさん
2008/06/17(火) 02:09:15あるのかどうしてもわからないんですよ。
ピーじゃなくても入れられるのはわかっています。
なんでピーがあるのにそれを入れるのか、どういう時に入れれば
いいのかわからないんです。
入れたいときにっ言うけどそれがわかりません。
ごめんもう寝る
0278デフォルトの名無しさん
2008/06/17(火) 02:10:020279デフォルトの名無しさん
2008/06/17(火) 02:11:10問題解決能力そのものがない
0280デフォルトの名無しさん
2008/06/17(火) 02:18:01応用をやるために基礎があるってことでおk?
0281デフォルトの名無しさん
2008/06/17(火) 02:23:06ノ
0282デフォルトの名無しさん
2008/06/17(火) 03:10:52つまり、プログラムで何をするか決めてない、理解してないのに
プログラムの構文を習った所で、そんな状態になるわな
まず、これから先に何かをする為に、そうルールでプログラムは動くって覚るしかない
変数は、プログラムを組むなら絶対使うからw
例えば、条件分岐(習ったかどうか知らんが)
int value;
// 何らかの処理でvalueに何らかの数値が入る
...
if ( value == 0 ) {
// 0の時だけにしたい処理
...
}
こんな感じで使う
a = 1; なんて、構文を教えてるだけだ、それに意味なんか求めるな
0283デフォルトの名無しさん
2008/06/17(火) 03:16:01わたしもそうすることにします
0284デフォルトの名無しさん
2008/06/17(火) 03:21:11それがいい
やってるうちに分かってくる b
0285デフォルトの名無しさん
2008/06/17(火) 03:49:54ウインドウ作成プログラムも作らないといけないのですか
0286デフォルトの名無しさん
2008/06/17(火) 03:54:580287デフォルトの名無しさん
2008/06/17(火) 03:59:01HTMLのTBL形式に出力しちゃうわよぉ〜ん
0288デフォルトの名無しさん
2008/06/17(火) 04:32:130289デフォルトの名無しさん
2008/06/17(火) 06:23:47昨年プログラムとして
とあるソフト入社したんだが、C言語でやってる。
しかし!入社して一年たっても全くと言って良い程
C言語がわからす、プログラムなんて持っての他。
テストばかり。テストばかりなのが嫌ではないのだが、
将来首切られる事ってあり得るのかな?
ちなみに勤務態度や
勤務状態(遅刻や早退)は良い。
やっぱプログラマ出来ないとリストラされるのでしょうか?
0290デフォルトの名無しさん
2008/06/17(火) 06:28:040291デフォルトの名無しさん
2008/06/17(火) 06:29:13背景がさっぱりわからんし、同じようにテストを受けてるのが
一人だけとか他にも同期で何人かいるとかでも違うしなあ。
体力ある企業で新卒でそれをさせてるなら育成の可能性が
あるから首ってことはないだろうけどなあ。
それに体力無いところは適当な案件見つけてすぐにでも
経歴偽装してデスマな現場に放り込まれそうだけどなw
0292デフォルトの名無しさん
2008/06/17(火) 06:44:28一年でやめて、違う業種で一年やって
三年程のブランクを経て今ある会社に入りました。
形としては中採かな。1ヶ月程たった。
自分づもプログラムに向いてないのは
分かってるけど、違う業界でやっていくか、
とりあえず分からないなりに
努力していくか悩んでいるのです。
スレ違う失礼しました。
ただ、このスレ野中にはプログラムの人もいるかなと思い、
参考程度に聞いてみた。
結局は自分だけど、皆さんならどうしますか?
0293デフォルトの名無しさん
2008/06/17(火) 06:54:07プログラマだろ
0294デフォルトの名無しさん
2008/06/17(火) 07:12:420295デフォルトの名無しさん
2008/06/17(火) 07:15:020296デフォルトの名無しさん
2008/06/17(火) 07:53:17char fruits;
int kind;
printf("どれが好き?\n1.リンゴ\n2.みかん\n3.バナナ\n");
scanf("%*d,%d",kind);
switch(kind){
case 1:
fruits = "リンゴ";
break;
case 2:
(中略)
}
printf("あなたは%sが好きです",fruits);
fruitsに文字を代入するところでエラーが出てしまいます。どう変えれば動くようになりますか?
0297デフォルトの名無しさん
2008/06/17(火) 07:58:51(省略)
char fruits[64];
int kind;
printf("どれが好き?\n1.リンゴ\n2.みかん\n3.バナナ\n");
scanf("%*d,%d",kind);
switch(kind){
case 1:
strcpy(fruits, "リンゴ");
break;
case 2:
(中略)
}
printf("あなたは%sが好きです",fruits);
0298デフォルトの名無しさん
2008/06/17(火) 08:03:26fruits[0] = "リンゴ"[0];
〜〜
fruits[6] = "リンゴ"[6];
fruits[7] = "リンゴ"[7];
break;
でもいいけど。
0299デフォルトの名無しさん
2008/06/17(火) 08:22:29うっかり忘れてました。thxです。
0300デフォルトの名無しさん
2008/06/17(火) 08:23:51>>292
1年なのか1ヶ月なのかはっきりしろよ
0301デフォルトの名無しさん
2008/06/17(火) 08:41:06うっかり…なのか?
何だかchar型に文字列のポインタ入れようとしたり、基本的なことが分かってないように思えるんだが
0302デフォルトの名無しさん
2008/06/17(火) 09:33:14BMPファイルを読み込んだ後にそのBMP画像を画面に出力すること
と言われて、BMPファイルをメモリに読み込ませることはできたんですけど
出力するプログラムがわかりません
0303デフォルトの名無しさん
2008/06/17(火) 09:37:10BMP画像を読み込んで、その読み込んだBMP画像を画面に出力する
というプログラムを作成するのに、そのまま出力することができるんですか
BMP画像を読み込ませることはできたんですが、それを画面に表示
させる方法がわかりません
0304デフォルトの名無しさん
2008/06/17(火) 09:38:570305デフォルトの名無しさん
2008/06/17(火) 10:28:580306デフォルトの名無しさん
2008/06/17(火) 10:43:36テキストサウンドノベルを作成する事。
キー入力でメッセージを表示し、途中で選択肢を含める。(最大3つまで)
画面をスクロールさせることは禁止。ページ切り替えは、画面全消去で対処する事。
テキスト行数は、最低50行から最大100行までとする。
画面全消去方法は、先生に聞くこと。
これってCじゃなくC++ですか?
0307デフォルトの名無しさん
2008/06/17(火) 10:49:47つ ttp://www.db.is.kyushu-u.ac.jp/rinkou/c/kougi7/Slide29.html
0308デフォルトの名無しさん
2008/06/17(火) 11:41:57cは拡張キーワードというのがありますが、
どういった場合に使用するのでしょうか?
具体的な使い方とか乗っているサイトありませんか?
0309デフォルトの名無しさん
2008/06/17(火) 12:08:19拡張キーワードって __asm __stdcall などのこと?
それぞれが必要なときに使うんだよ。
使い方は処理系のマニュアルを読む。
0310デフォルトの名無しさん
2008/06/17(火) 12:08:52サウンドのあたりがしんどいね
0311デフォルトの名無しさん
2008/06/17(火) 12:57:06これはひどい
0312デフォルトの名無しさん
2008/06/17(火) 13:14:08亀レスだが、その疑問はコンピュータサイエンスのプログラム意味論や
計算とは何かの範囲になるので、ここではスレ違い。
0313デフォルトの名無しさん
2008/06/17(火) 13:59:38Short coding以外で
0314デフォルトの名無しさん
2008/06/17(火) 14:21:01> 変数ってprintfで表示できるしデバッガーでも表示出来るのはわかるのですが
> 計算して新しいものを入れるのにクリアしないのですか?
そうだよね、変数は値(を書いた札)を入れる箱だから、元の値が邪魔になるよね。
っていうアレではないか。
0315デフォルトの名無しさん
2008/06/17(火) 15:01:500316デフォルトの名無しさん
2008/06/17(火) 19:01:20スイッチを押すとLED1が点灯→もう一度押すとLED1に続いてLED2が点灯、さらに1回押すとLED3も点灯
というように押すたびに点灯するLEDが増えてくというものを作ろうとしているのですが、
まったくできません。
プログラムをどのように書くと1つのボタンでLEDが点灯する数を増やしていくことができるのでしょうか?
こういう風に
0317デフォルトの名無しさん
2008/06/17(火) 19:03:54ポートに出力するデータに対して
最初は0
左シフトして1インクリメント
を繰り返せばOKなんじゃない?
0318デフォルトの名無しさん
2008/06/17(火) 19:17:41今は
while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=0x01;
}
}
これでボタン押すとLED1が点灯する状態です。
>>ポートに出力するデータに対して
>>最初は0
>>左シフトして1インクリメント
この辺はどんな命令文で指示すればいいのでしょうか?
0319デフォルトの名無しさん
2008/06/17(火) 19:21:25while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=outdata<<1;
outdata++:
if (outdata > 4) outdata = 0;
}
}
0320デフォルトの名無しさん
2008/06/17(火) 19:30:39詳しくありがとうございますw
char outdate=0;
の行でエラーが出るのですが、乱数使うときの#include<studlb>みたいな前置きみたいの必要なんですかね?
0321デフォルトの名無しさん
2008/06/17(火) 19:32:280322デフォルトの名無しさん
2008/06/17(火) 19:35:500323デフォルトの名無しさん
2008/06/17(火) 19:36:390324デフォルトの名無しさん
2008/06/17(火) 19:38:06まーIOポートも変数みたいに使えるようになってるからいいんでね?
>>320
char outdata = 0;
を
BYTE outdata = 0;
かな?
char型じゃないのかね?
それか
chara outdata;
outdata = 0;
のように行を分けないといけないとか
0325デフォルトの名無しさん
2008/06/17(火) 19:38:41outdata = 0;
こうだorz
0326デフォルトの名無しさん
2008/06/17(火) 19:48:312500(E) ILLEGAL TOKEN: "char"
2225(E) UNDECLARED NAME: "outdata"
っていうエラーが出てしまいます。
>>324さんのも試してみたのですが、BYTEでも同じエラーでした。
0327デフォルトの名無しさん
2008/06/17(火) 19:53:390328デフォルトの名無しさん
2008/06/17(火) 20:00:06P1.DR.BYTE = 0;
while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=P1.DR.BYTE<<1;
P1.DR.BYTE++:
if (P1.DR.BYTE > 4) P1.DR.BYTE = 0;
}
}
でもP1.DR.BYTEって読み込みできるのかな?
0329デフォルトの名無しさん
2008/06/17(火) 20:13:44char outdata = 0;
while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=outdata<<1;
outdata++:
if (outdata > 4) outdata = 0;
}
}
}
さらに面倒だからこうしちゃえば?
0330デフォルトの名無しさん
2008/06/17(火) 20:22:000331デフォルトの名無しさん
2008/06/17(火) 20:26:31無料の統合環境もこんな感じで組めたな。
0332デフォルトの名無しさん
2008/06/17(火) 20:29:580333デフォルトの名無しさん
2008/06/17(火) 20:41:17>>P1.DR.BYTE++:
>>outdata++:
最後の点々はセミコロンじゃないとエラーでるけど:じゃないと意味ないんですかね?
ちなみにセミコロンに変えて実行するとLEDは点灯するけど点灯の仕方がランダムみたいになってます;;
>>330
日立のH8/3052Fです
0334デフォルトの名無しさん
2008/06/17(火) 20:47:22あ、ごめんコロンになってたかな?
セミコロンに直してください。
ランダムというかウェイトいれないといくらマイコンって言ってもその程度の
ロジックならかなり早い点等を繰り返すはず。
なので変な点等になる。
0335デフォルトの名無しさん
2008/06/17(火) 20:47:50点灯ね
0336デフォルトの名無しさん
2008/06/17(火) 20:50:26制御系って適当に作りまくってると火を吹きそうなイメージなんだけど大丈夫なんだろか
0337デフォルトの名無しさん
2008/06/17(火) 20:51:34多分タクトスイッチが押されるとアースしてるんじゃね?
0338デフォルトの名無しさん
2008/06/17(火) 20:51:36上のレスのソースだと、スイッチが0の状態ままだと、
ひたすらインクリメントなりシフトなりするだろうから
一回押すたびに点灯という動作にはならないんじゃないか?
おそらく、スイッチがどちらかの状態になったらパパパパとつくだけかね。
0339デフォルトの名無しさん
2008/06/17(火) 20:52:080340デフォルトの名無しさん
2008/06/17(火) 20:53:38char outdata = 0;
char count = 0;
while(1){
if (count == 0) {
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=outdata<<1;
outdata++;
if (outdata > 4) outdata = 0;
count = 255;
}
}
count--;
}
}
0341340
2008/06/17(火) 20:54:130342デフォルトの名無しさん
2008/06/17(火) 20:55:020343デフォルトの名無しさん
2008/06/17(火) 20:56:56char outdata = 0;
char count = 0;
while(1){
if (count == 0) {
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=outdata<<1;
outdata++;
if (outdata > 4) outdata = 0;
count = 255;
}
} else {
count--;
}
}
}
0344デフォルトの名無しさん
2008/06/17(火) 20:58:38いきなりそれだと敷居があがるので、ベタなカウンターでやってみた。
0345デフォルトの名無しさん
2008/06/17(火) 21:00:52合計
50 49 48 47 46 ***
45 44 43 42 41 ***
40 39 38 37 36 ***
35 34 33 32 31 :
30 29 28 27 26 :
25 24 23 22 21 :
20 19 18 17 16 :
15 14 13 12 11 :
10 9 8 7 6 :
5 4 3 2 1
合計 *** *** *** *** ***
を表示するプログラムって一次元配列を使ってどの様に書けますか?
おねがいします
0346デフォルトの名無しさん
2008/06/17(火) 21:01:25>>1 >>1
0347デフォルトの名無しさん
2008/06/17(火) 21:01:420348デフォルトの名無しさん
2008/06/17(火) 21:19:43できたよ
int main()
{
char s[] = " 合計\n 50 49 48 47 46 ***\n 45 44 43 42 41\
***\n 40 39 38 37 36 ***\n 35 34 33 32 31 :\n 30 29 28 27 26 :\n 25 24 23 22 21 :\n\
20 19 18 17 16 :\n 15 14 13 12 11 :\n 10 9 8 7 6 :\n 5 4 3 2 1\n合計 *** *** *** *** ***";
printf("%s", s);
return 0;
}
0349デフォルトの名無しさん
2008/06/17(火) 21:22:25ちょっwwww カルーアミルクを噴出しちまったじゃねーかYO!
0350デフォルトの名無しさん
2008/06/17(火) 21:27:53スイッチの入力です。
>>343さん
試してみました。
スイッチを押す回数 LED
1回 ○●○○
2回 ○●●○
3回 ○●○○
4回 ●○○○
リセットしてやり直すと、また点き方が変わったりしてしまいます。
マイコンがダメなんですかね。
理想は
スイッチを押す回数 LED
1回 ○○○●
2回 ○○●●
3回 ○●●●
4回 ●●●●
なんですけど
0351343
2008/06/17(火) 21:30:04それ確認してなかったよ
0352デフォルトの名無しさん
2008/06/17(火) 21:36:31ああ驚いた
>>348 の前がどこかわからんけど
const char table[] = {0x00, 0x01, 0x03, 0x07, 0x0f}:
count = 0;
count = (++count % 5);
P1.DR.BYTES = outtable[count];
テーブルがシンプルだったりして・・・
0353デフォルトの名無しさん
2008/06/17(火) 21:43:23○○○● P1.DR.BYTE=0x01;
○○●● P1.DR.BYTE=0x03;
○●●● P1.DR.BYTE=0x07;
●●●● P1.DR.BYTE=0xf;
こういうことですか?
0354デフォルトの名無しさん
2008/06/17(火) 21:45:36あー
まあそれでOKです。
シフト演算が思惑通りに動いてない気がする(私の勘違いの可能性大)
ので>>352のような配列で持ってたほうがいいかも
0355デフォルトの名無しさん
2008/06/17(火) 21:47:13できたお
#include <stdio.h>
int main(){
int a,b,z,i,d;
int c=50;
//1行目から10行目
printf("\t\t\t\t\t\t合計\n");
for(a=0; a<10; a++){
for(b=0; b<5; b++){
i += c;
printf("\t%d",c);
c--;
}
printf("\t%d",i);
printf("\n");
d += i;
}
//11行目
printf("合計");
for(a=0; a<5; a++){
for(b=1; b<11; b++){
c += 5*b;
}
printf("\t%d",c);
}
printf("\t%d",d);
scanf("%d",z);
}
0356デフォルトの名無しさん
2008/06/17(火) 21:48:480357355
2008/06/17(火) 22:21:10スマソ
0359デフォルトの名無しさん
2008/06/17(火) 22:59:31{
char outdata = 0;
int sw_cur = 1;
int sw_prev = 1;
while(1){
sw_cur = P2.DR.BIT.B0;
if( !(sw_cur ^ sw_prev) ) continue;
sw_prev = sw_cur;
if( sw_cur == 0 ){
P1.DR.BYTE = outdata << 1;
outdata++;
if(outdata > 4) outdata = 0;
}
}
}
0360デフォルトの名無しさん
2008/06/17(火) 23:16:21ああ、すまん。こうだな。
if( sw_cur == 0 ){
P1.DR.BYTE = (1 << outdata);
outdata++;
if(outdata > 4) outdata = 0;
}
>>353のようにしたいなら、たしかH8はI/Oにバッファが
あったような気がするから
P1.DR.BYTE |= (1 << outdata);
すりゃいいんないかな?
できなったら、もうひとつ変数用意すりゃいい。
0361デフォルトの名無しさん
2008/06/17(火) 23:32:25#include <stdio.h>
#define TOTAL_NUM 50
#define COL 5
int main(void){
int i, c=TOTAL_NUM, tmpsum=0, colsum[COL]={0};
for(i=0; i<COL; i++){printf("\t");}
printf("\t合計\n");
for(; c>0; c--){
printf("\t%4d", c);
colsum[(TOTAL_NUM - c) % COL] += c;
tmpsum += c;
if((c % COL) == 1){
printf("\t%4d\n", tmpsum);
tmpsum = 0;
}
}
/*最終行*/
printf("合計");
tmpsum = 0;
for(i=0; i<COL; i++){
printf("\t%4d", colsum[i]);
tmpsum += colsum[i];
}
printf("\t%4d\n", tmpsum);
return 0;
}
0362デフォルトの名無しさん
2008/06/18(水) 00:15:45行くけどわたしだけテスト要員として来月から配属されることに
決まったそうです。
多分、辞めろっていうことなんでしょうね。
なんで自分だけわかんないのか悔しいけど、頭の構造が違うんで
しょうね、こういうのがわかる人は。
0363デフォルトの名無しさん
2008/06/18(水) 00:17:58おめでとう、死ねばいい富もうよ
0364デフォルトの名無しさん
2008/06/18(水) 00:20:35黙って居座ってればいいのだ
0365デフォルトの名無しさん
2008/06/18(水) 00:21:40気にスンナ
0366デフォルトの名無しさん
2008/06/18(水) 00:22:14放りこまれるよりは親切なほうだと思うけどなあ。
テストの間に勉強すればいい。
0367デフォルトの名無しさん
2008/06/18(水) 00:26:02資格試験でも受けてるのかと思った
テスト要員でも雇ってもらえるならいいじゃないか
辞めろって言われるまで居座ってやれ
0368デフォルトの名無しさん
2008/06/18(水) 00:26:08>>312
0369デフォルトの名無しさん
2008/06/18(水) 00:33:550370デフォルトの名無しさん
2008/06/18(水) 00:38:530371デフォルトの名無しさん
2008/06/18(水) 00:39:20ですね。スレ違いなのでもう終わります。
教えてくれた人、ありがとうございます。
プログラムがちゃんと書ける人って自分のやってることを説明できて親切で
すね。ほうんとうにありがとうございました。
0372デフォルトの名無しさん
2008/06/18(水) 00:46:01世の中良心的な会社もあったもんだね
つまり当たりを引いたわけだ
0373デフォルトの名無しさん
2008/06/18(水) 01:10:480374デフォルトの名無しさん
2008/06/18(水) 01:28:240375デフォルトの名無しさん
2008/06/18(水) 02:32:030376デフォルトの名無しさん
2008/06/18(水) 02:32:400377デフォルトの名無しさん
2008/06/18(水) 02:55:380378デフォルトの名無しさん
2008/06/18(水) 11:38:52医者はプログラミングできるのか?
弁護士はプログラミングできるのか?
0379デフォルトの名無しさん
2008/06/18(水) 11:42:390380デフォルトの名無しさん
2008/06/18(水) 11:47:56有名どころだとLZHの作者はお医者さんだったっけ
0381デフォルトの名無しさん
2008/06/18(水) 13:09:26医師免許はとってないのかな
0382デフォルトの名無しさん
2008/06/18(水) 20:40:56その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)
お願いします
0383デフォルトの名無しさん
2008/06/18(水) 20:41:56>>1を100回読め
0384デフォルトの名無しさん
2008/06/18(水) 20:43:33時間がないのです。
0385デフォルトの名無しさん
2008/06/18(水) 20:45:16情報処理の単位が欲しいだけの人はお帰りください
0386デフォルトの名無しさん
2008/06/18(水) 20:46:55答えてあげてくださいな
0387デフォルトの名無しさん
2008/06/18(水) 20:48:350388デフォルトの名無しさん
2008/06/18(水) 20:49:45その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)
0389デフォルトの名無しさん
2008/06/18(水) 20:54:20どうしてもわからない問題があるのでどなたか教えてください
問題1
三角形の底辺の幅、あるいは段数(どちらか一つ)を入力すると、逆三角形を表示する。例えば、底辺5あるいは段数3を入力すると
*****
***
*
となる。
2
下記のように横と縦の累計を計算して表示する。
配列は使わないこと。
3
10個以下の任意のn個(データ数は入力)のデータを入力し、逆順に出力する。
実行結果は奇数と偶数個の例を示すこと。
4
下記のように横と縦の累計を計算して表示する。
ただし、1次元配列を使うこと。
どの問題でもかまいません
本当に困っているので教えてください
0390デフォルトの名無しさん
2008/06/18(水) 20:55:57#include <stdio.h>
int main(void)
{
/* 入力された文字列を収めるためのcharの配列を宣言 */
/* その他の必要な変数を宣言 */
fputs("please input a string : ", stdout);
/* fgets()を使ってcharの配列に入力された文字列を格納 */
/* 文字の数を数えるint変数を0に初期化する */
/* charへのポインタにcharの配列の先頭の文字を指させ、
chraへのポインタが指している先の文字が'\0'でない間、
charへのポインタを1ずつ文字列の先へずらしながら、
以下の処理を繰り返す */;
/* もしchraへのポインタが指している先の文字が
charの配列の先頭の文字と等しければ */
/* 文字の数を数えるint変数を1増やす */
/* printf()を使って文字の数を数えたint変数の値を表示する */
return 0;
}
0391デフォルトの名無しさん
2008/06/18(水) 20:55:59文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)
0392デフォルトの名無しさん
2008/06/18(水) 20:58:04それでわからないようならあなたの日本語力と知性は壊滅的なのでおとなしく退学することを勧めます
0393デフォルトの名無しさん
2008/06/18(水) 20:58:10自分でできないなら資格はありません
0394デフォルトの名無しさん
2008/06/18(水) 20:58:13マルチ視ね
0395デフォルトの名無しさん
2008/06/18(水) 21:06:28#include<stdio.h>
#include <stdlib.h>
int main()
{
int *c, count = 1, i;
c = (char *)malloc(1);
puts("入力どうぞ");
if ((i = getchar()) == EOF) {
printf("ちゃんと入力しろ\n");
exit(1);
}
while ((*c = getchar()) != EOF) {
if (i == *c) count++;
}
printf("%d\n", count);
return 0;
}
できました
0396デフォルトの名無しさん
2008/06/18(水) 21:08:140397デフォルトの名無しさん
2008/06/18(水) 21:10:26#include<stdio.h>
#include <stdlib.h>
int main(void)
{
int *c, count = 1, i;
c = (int *)malloc(1);
puts("入力どうぞ");
if ((i = getchar()) == EOF) {
printf("ちゃんと入力しろ\n");
exit(1);
}
while ((*c = getchar()) != EOF) {
if (i == *c) count++;
}
printf("%d こです\n", count);
return 0;
}
すいませんこっちでした
0398デフォルトの名無しさん
2008/06/18(水) 21:11:320399デフォルトの名無しさん
2008/06/18(水) 21:14:070400デフォルトの名無しさん
2008/06/18(水) 21:28:260401デフォルトの名無しさん
2008/06/18(水) 21:33:36有限長の文字列を総当りで生成して、それをコンパイルしていくプログラムを作れば
そのうち自分が作りたかったプログラムが自動生成されるんじゃね?
0402デフォルトの名無しさん
2008/06/18(水) 21:35:19すっげぇ頭いいなおまえw
0403デフォルトの名無しさん
2008/06/18(水) 21:36:59判定するプログラムが要るという話になるんですね分かります
0404デフォルトの名無しさん
2008/06/18(水) 21:44:130405デフォルトの名無しさん
2008/06/18(水) 21:44:540406デフォルトの名無しさん
2008/06/18(水) 22:28:54どうしても分からないなら資格取れるわけないじゃん
なんかおかしくね?
0407デフォルトの名無しさん
2008/06/18(水) 22:30:56>>60へどうぞww
0408デフォルトの名無しさん
2008/06/18(水) 22:31:540409デフォルトの名無しさん
2008/06/18(水) 23:28:46関数を呼び出す時って他の文字に置き換えてから使えたほうがいいんですか?
例えばadd関数を呼び出してif文に入れるときの場合
x=add(n);
if(x==1)
みたいな感じか
if(add(n)==1)
どちらがいいんでしょうか?
下のほうでやっていたら友達にそのやり方は見にくくてありえないしプロがそんなことやったら確実に怒られるといわれたんですがどうなんでしょうか?
0410デフォルトの名無しさん
2008/06/18(水) 23:31:170411デフォルトの名無しさん
2008/06/18(水) 23:31:44ただ、関数の結果を他にも使う予定があるなら上の方が良いんじゃない?
0412デフォルトの名無しさん
2008/06/18(水) 23:36:20習ってる途中で後者の方がわかりやすいと思ったのですがプログラムできる友達に言われたので…
0413デフォルトの名無しさん
2008/06/18(水) 23:39:07その関数が非常に高コストで、その判定部がループの中にあるなら
よくないなあとは思うけど、そうでないなら別に気にしない。
その友達がプロで怒られた経験があるのであれば、もう少し細かい
理由を教えてもらえばいいんでない?
0414デフォルトの名無しさん
2008/06/18(水) 23:40:21x=add(n);
if(x==1)
if(x==2)
みたいな感じですか?
あとプログラマーみたいな人たちの間ではどちらが主流なんでしょうか?
0415デフォルトの名無しさん
2008/06/18(水) 23:40:54優劣をつけられない記法の差において、俺はこうすべき!って一人で
走ってるなら怒る。
0416デフォルトの名無しさん
2008/06/18(水) 23:40:58その友達がどの程度のプロなのかはこの際置いておくとして、どちらがいいとか悪いとか言うことはない。
明確なことは、前者は変数を一つ使用し、後者は使用しないということである。
add() の返す値をただ一回しか評価しないのなら、後者のように書いて何の問題もない。
値を何度も評価するのなら、前者のように一時変数に格納する必要があるか、なくても効率がいいかもしれない。
後は単なる好みの問題である。
0417デフォルトの名無しさん
2008/06/18(水) 23:41:32ところでこのお題はホントはこうじゃなかった?
x = add(n) ; if (x == 1)
と
if ((x = add(n)) == 1)
の比較。
0418デフォルトの名無しさん
2008/06/18(水) 23:42:40友達はプロではありません
普通に大学生なので…
多分趣味でやってる程度だと思います。
どこで習ったかはわかりませんが
0419デフォルトの名無しさん
2008/06/18(水) 23:43:35そうでない場合はメリットとデメリットがあるので好きにすればいいと思うよ。
○ メリット
・ 関数呼び出しが長い場合、読みやすくなる
・ デバッグ時に戻り値が何だったか分かりやすい
○ デメリット
・ その場でしか使わないような無駄な変数が広いスコープ上に現れてしまう場合もある
0420デフォルトの名無しさん
2008/06/18(水) 23:44:20if ((fp = fopen(〜)) == NULL)
Is系のメソッドに代表される真偽返却メソッド
if (isalnum(〜))
これ以外は大抵分けて書くようにしてるね。
多少冗長に思えても、他の人が読みやすいか、また、
誤解を与えにくい書き方になっているか、それを重視してる。
0421デフォルトの名無しさん
2008/06/18(水) 23:55:16使う時などに、冗長ではあるが、括弧をつけて明示するようなことね。
ちゃんと知ってればその括弧が無くても正しく動作する事は理解できるが、
うろ覚えの人でも勘違いを起こさない。
もしかしたら研修明けの新人がメンテするかもしれないし。
0422デフォルトの名無しさん
2008/06/19(木) 00:00:04ある程度理解できたと思っている頃、自分の中で勝手にスタイルが
確立されているのはよくあること。
その時、自分のスタイルとは異なる、または理解できない書き方を見ると
「なんだこの一般的ではない書き方は!俺流に直す!」
と思ってしまうこともまた、よくあること。
どんなスタイルでも読めて、それに合わせてかけるようになって一人前かな。
0423デフォルトの名無しさん
2008/06/19(木) 00:03:01英語、ローマ字、dwほにゃらら、アンダースコア区切り
0424デフォルトの名無しさん
2008/06/19(木) 00:04:250425デフォルトの名無しさん
2008/06/19(木) 00:08:04単語が長かったりすると何か使いにくくて困ったりする
そんな俺
0426デフォルトの名無しさん
2008/06/19(木) 00:08:59略すとわかんねえんだろうなあって単語の時は悩む。
0427デフォルトの名無しさん
2008/06/19(木) 00:14:52いっそローマ字にした方がいいと思う俺
0428デフォルトの名無しさん
2008/06/19(木) 00:14:570429デフォルトの名無しさん
2008/06/19(木) 00:16:020430デフォルトの名無しさん
2008/06/19(木) 00:16:11では自分の書きやすいように使い分けてればいいんですかね?
実際に使うようになったら周りにスタイルを合わせていけばOK?
ってかc言語って仕事で使うことあるんですか?
c言語は入門にはいいけど実線向きではないということお聞いたんですが
0431デフォルトの名無しさん
2008/06/19(木) 00:17:20戦線によると思いますよ
局地戦ではCが現役です
0432デフォルトの名無しさん
2008/06/19(木) 00:17:29お前の顔が変形するまで殴るぞ(半田ごてで
0433デフォルトの名無しさん
2008/06/19(木) 00:18:31え??
0434デフォルトの名無しさん
2008/06/19(木) 00:18:50XPみたいな資源が有り余ってる環境でのソフト開発ならわざわざCで作らないんじゃないかな
0435デフォルトの名無しさん
2008/06/19(木) 00:20:420436デフォルトの名無しさん
2008/06/19(木) 00:21:450437デフォルトの名無しさん
2008/06/19(木) 00:22:040438デフォルトの名無しさん
2008/06/19(木) 00:22:54C++なら超いろんなとこで現役
0439デフォルトの名無しさん
2008/06/19(木) 00:22:580440デフォルトの名無しさん
2008/06/19(木) 00:24:150441デフォルトの名無しさん
2008/06/19(木) 00:24:40一般的には main の返り値は正常終了のときに 0 を返すことが多いから
0442デフォルトの名無しさん
2008/06/19(木) 00:25:300443デフォルトの名無しさん
2008/06/19(木) 00:25:52exitを使ったときや、mainの戻り値が0以外だったときに
特別な挙動をするシステムだと、その流儀に従ったほうがいいけど
普通はexitを使わなくても、常に0を返しても問題ない
0444デフォルトの名無しさん
2008/06/19(木) 00:26:45それは例の友人が言ってたのか?
悪いことは言わないからそいつの言うことは話半分に聞いとけ
0445デフォルトの名無しさん
2008/06/19(木) 00:26:58どこらへんが強制なのか知らないけど、慣習的に0は正常終了
他人の目を気にするなら1でも返してお茶を濁しておけばおk
0446デフォルトの名無しさん
2008/06/19(木) 00:27:12ケースにもよるし、現場の考えにもよるし、いろいろだねえ。
自分で書いてるプログラムだと使ってるなあ。
ある程度の大きさの物書いてるとmainなんて全体の流れを制御する程度だし
強制終了する場合はおおよそプログラムのエラーで停止か、機能を止める
ような感じなのでさほど問題ない。
0447デフォルトの名無しさん
2008/06/19(木) 00:28:33特に指定が無く、一人で書き上げるソースであれば、インデント
スタイルも含めて一貫性が保たれていればとりあえずはOKかな。
繰り返すけど、自分のスタイルが最善とは思わないようにすること。
仕事でも使うよ。
PerlとかJavaとかC#とか、便利な面が多く、目的の機能を実装するのは
はやいけれど、実行速度は遅い。Cは逆ね。
業界でVBが空前のブームになったのは習得しやすく、出来上がるまでが
とにかくはやかったからです。
んで、習得したてのVB戦士が書き散らかしたコードをメンテする羽目に
なった現場が火を吹くわけです。
0448デフォルトの名無しさん
2008/06/19(木) 00:28:49さすがにそれはちょっと記憶違い起こしてると思われる
そうじゃなきゃその友人はわかってのに語っちゃうかなり駄目なひとだぞ
0449デフォルトの名無しさん
2008/06/19(木) 00:31:55はい 同じ人です。
正直その人がどこまでプログラムができるのかはわかりませんが
僕はまったくやったことがないのでどれが本当なのかわからないので
0450デフォルトの名無しさん
2008/06/19(木) 00:31:54もちろんabort()しなきゃだめだけどそういんじゃないだろうな
0452デフォルトの名無しさん
2008/06/19(木) 00:34:19stdlib.hにEXIT_SUCCESSが0として定義されてる処理系では、
異常終了時に0を返すべきではないね。
んで、半田ごてが必要な世界はほっといて
大抵は0なんで、異常終了時は0返さないほうがいいかなー。
/* ゴメンね、ハード屋さん愛してる。仲良くしてね */
0453デフォルトの名無しさん
2008/06/19(木) 00:34:35<stdlib.h> の abort() と atexit() と exit() の仕様を読んでみることを勧める
0454デフォルトの名無しさん
2008/06/19(木) 00:35:19exit(EXIT_FAILURE); があるじょのいこ
0455デフォルトの名無しさん
2008/06/19(木) 00:37:150456デフォルトの名無しさん
2008/06/19(木) 00:38:55またくると思うのでよろしくお願いします。
0457デフォルトの名無しさん
2008/06/19(木) 00:39:07理想的な書き方ではないけど、意味をわかって使ってるなら問題ない
どうせ今の段階ではmainやプログラムの戻り値に意味なんか持たせてないし、atexitも使ってないだろう
そういうことが必要になったら必然的にそう書かざるを得なくなるからそのとき覚えればいい
0458デフォルトの名無しさん
2008/06/19(木) 00:39:14ここは時々そうなるよ。
ちょっと前だと、配列の扱いだっけ?
ポインターに格下げだとか・・・あれは荒れた感じだったけど
0459デフォルトの名無しさん
2008/06/19(木) 00:39:510460デフォルトの名無しさん
2008/06/19(木) 00:44:27当時の俺はEXIT_FAILURE EXIT_SUCCESSを知らなくて、なんも疑問に
思わずそれで組んだけど。
痛いのが治らない会社とはいわれるが、納得だわ。
0461デフォルトの名無しさん
2008/06/19(木) 00:47:49配列の最初の要素を指すポインタに意味が格下げになる。
結果としてできるポインタの型は「Tへのポインタ」となる。
(3つの例外とは、配列がsizeofのオペランドとなるとき、
アドレス演算子&のオペランドとなるとき、
char型の配列を文字列リテラルで初期値するとき、を指す。) …
by C Programing FAQ Q.6.3
0462デフォルトの名無しさん
2008/06/19(木) 00:52:55EXIT_SUCCESSが0でないことって有り得るの?
平林さんのANSI C言語辞典では0って言いきっているけど。
と、ここまで書いたところで、X3010:2003開いてみたら、
確かに0でないといけないとはどこにも書いていない。
知らなかった。
0463デフォルトの名無しさん
2008/06/19(木) 00:53:47原因があると思うよ。
0464デフォルトの名無しさん
2008/06/19(木) 00:54:47RETは戻り値全般っぽいから、EXITの定義(0が正常、0以外が異常)とは違うかもしれんよ。
0465デフォルトの名無しさん
2008/06/19(木) 00:55:07まーねー
>>461がその回答かな?
0466デフォルトの名無しさん
2008/06/19(木) 00:57:57ごめ、語弊あったね。
mainを含む関数すべての戻り値として使ってたんだ。
0467デフォルトの名無しさん
2008/06/19(木) 01:00:04コマンド処理系で使うバッチとか?
0468デフォルトの名無しさん
2008/06/19(木) 01:01:01既に出てるけどmainを再帰呼び出しするときや、実際にシステムで戻り値を使う場合
0469デフォルトの名無しさん
2008/06/19(木) 01:02:46うん。シェルスクリプトとか。
コマンドラインでも foo && bar と書けばfooが成功した場合のみ
barが実行されるので、たまに便利。
0470デフォルトの名無しさん
2008/06/19(木) 01:04:180471デフォルトの名無しさん
2008/06/19(木) 01:55:12その友達のようなヒトノコトを半可通と呼びます。
これまでの流れで、かなりいい加減な事ばかり言っているね。
0472デフォルトの名無しさん
2008/06/19(木) 02:01:390473デフォルトの名無しさん
2008/06/19(木) 02:03:35単純に表示桁を変えてるだけだから
0474デフォルトの名無しさん
2008/06/19(木) 02:07:29int main(void) {
double a=1.555,b=1.445;
printf("a : %.0lf / b : %.0lf \n",a,b);
printf("a : %.1lf / b : %.1lf \n",a,b);
printf("a : %.2lf / b : %.2lf \n",a,b);
return 0;
}
やってみた。なんだかなぁ。
0475デフォルトの名無しさん
2008/06/19(木) 02:07:420476デフォルトの名無しさん
2008/06/19(木) 02:10:45小数点第n位まで計算しなさい、という算数の言い回しを思い出すといいよ
0477472
2008/06/19(木) 02:10:460478デフォルトの名無しさん
2008/06/19(木) 02:12:32先にそれを言え
あと自分の環境も詳しく
0479デフォルトの名無しさん
2008/06/19(木) 02:15:083000になった
0480デフォルトの名無しさん
2008/06/19(木) 02:17:29http://sdc.sun.co.jp/sunstudio/documentation/ss12/mr/man3m/fesetround.3m.html
0481472
2008/06/19(木) 02:17:36>>474さんのもコンパイルして試してみたんですがやっぱりどういう風に処理されてるのか謎すぎます…
0482デフォルトの名無しさん
2008/06/19(木) 02:18:53%0.1fで
2999.95だと 2999.9
2999.96だと 3000.0
四捨五入って訳でもないのか?
0483デフォルトの名無しさん
2008/06/19(木) 02:22:440484デフォルトの名無しさん
2008/06/19(木) 02:27:14思うけど、誤差の許容範囲云々を扱うのがあったなあ
パイとかそういう方向の読み方で・・・なんだっけかな?
0485デフォルトの名無しさん
2008/06/19(木) 02:27:41>精度指定では出力値が切り捨てられたり、浮動小数点数が丸められたりすることがあります
とは書いてあった
0486デフォルトの名無しさん
2008/06/19(木) 02:28:16イプシロンだ
http://www.asahi-net.or.jp/~UC3K-YMD/Lesson/Section03/section03_13.html
0487デフォルトの名無しさん
2008/06/19(木) 03:15:03# いや、勿論%fでないといけない場合は%fでいいが。
0488デフォルトの名無しさん
2008/06/19(木) 03:20:21マニュアルを読めば書いてあるはず
0489デフォルトの名無しさん
2008/06/19(木) 06:36:06TRUEとFALSEは標準ヘッダーでは提供されてないのね。何か理由があるの?
0490デフォルトの名無しさん
2008/06/19(木) 07:33:09標準関数の返り値はTRUEやFALSEじゃないからでしょう
0491デフォルトの名無しさん
2008/06/19(木) 07:57:350492デフォルトの名無しさん
2008/06/19(木) 07:57:450493デフォルトの名無しさん
2008/06/19(木) 16:18:46#define END }
こんな書き方する人って実在するんですか?
0494デフォルトの名無しさん
2008/06/19(木) 16:19:520495デフォルトの名無しさん
2008/06/19(木) 16:20:110496デフォルトの名無しさん
2008/06/19(木) 16:20:25IBMでも堂々とやってた気が
0497デフォルトの名無しさん
2008/06/19(木) 16:29:580498デフォルトの名無しさん
2008/06/19(木) 16:51:36トライグラフを使うよりBEGIN ENDにした方がわかりやすかった。
#define BEGIN ??<
#define END ??>
だったかなぁ
0499デフォルトの名無しさん
2008/06/19(木) 16:58:18main() ??<
printf("hello world !??/n");
exit(0);
??>
昔の人は苦労したのだな
0500デフォルトの名無しさん
2008/06/19(木) 17:12:53全部大文字を使った場合は大小文字を区別しないといった約束事もある。
どれもCの規格にまだ含まれているから手持ちのコンパイラで
コンパイルしてみるとできるはず。VC++2008でもできた。
??=INCLUDE<STDIO.H>
MAIN() ??<
PRINTF("HELLO WORLD !??/N");
EXIT(0);
??>
0501デフォルトの名無しさん
2008/06/19(木) 17:19:260502デフォルトの名無しさん
2008/06/19(木) 17:35:55そんなのがあるなんて全然しらなかったなあ。
0503デフォルトの名無しさん
2008/06/19(木) 18:32:16300桁が計算できる計算機のソースコードを教えてください
http://yutori.2ch.net/test/read.cgi/news4vip/1213867578/
0504デフォルトの名無しさん
2008/06/19(木) 18:38:00精度についてなにも言ってないのでdoubleでも使っとけば?w
0505デフォルトの名無しさん
2008/06/19(木) 18:45:380506デフォルトの名無しさん
2008/06/19(木) 18:46:31CではないがJavaのBigDecimal/BigIntegerはよく出来てるからお勧め。
0507デフォルトの名無しさん
2008/06/19(木) 19:16:230508デフォルトの名無しさん
2008/06/19(木) 19:17:270509デフォルトの名無しさん
2008/06/19(木) 19:18:240510デフォルトの名無しさん
2008/06/19(木) 19:46:360511デフォルトの名無しさん
2008/06/19(木) 20:20:09動かしてみたいのですが、どうすればよいでしょうか?
0512デフォルトの名無しさん
2008/06/19(木) 20:40:300513デフォルトの名無しさん
2008/06/19(木) 20:41:500514デフォルトの名無しさん
2008/06/19(木) 20:47:190515デフォルトの名無しさん
2008/06/19(木) 20:49:230516デフォルトの名無しさん
2008/06/19(木) 21:14:30>>511とじゃいが、基本情報とかの試験で穴埋めとかをとくコツ
みたいなのはなんかある?
スレちだったらスマソ。。。
0517デフォルトの名無しさん
2008/06/19(木) 21:17:41とか言うようなことを普通に考えるようになることかなぁ
0518デフォルトの名無しさん
2008/06/19(木) 21:44:17ソースを読む力は反復や考えようとする頭が無いと元が低い人は付かないな
好奇心持って色んなコード見る、書くのが一番だと思う
0519デフォルトの名無しさん
2008/06/19(木) 21:48:48ソースの書き方も、部分部分をしっかり分けて記述できるようになると
後でどこが問題か?部分部分で検査することも出来るしね。
いわゆるモジュールってやつ。あとは、そのモジュールを幅広く
流用できる汎用性を考慮して書けると良い。
0520デフォルトの名無しさん
2008/06/19(木) 21:54:17コメントは大事だとわかってるが書いてるときには手抜きしてしまう
0521デフォルトの名無しさん
2008/06/20(金) 01:35:19にもかかわらず
if(str[textPointer]==TEXT(' '))
でひっかかってこねー。なんで?
0522デフォルトの名無しさん
2008/06/20(金) 06:53:250523デフォルトの名無しさん
2008/06/20(金) 06:54:10定義に立ち返って考え直すんだ
0524デフォルトの名無しさん
2008/06/20(金) 07:26:220525デフォルトの名無しさん
2008/06/20(金) 07:30:44本来なら関数で分離するようなロジックをわざと入れたいような時です。
0526デフォルトの名無しさん
2008/06/20(金) 07:45:20でっかいマクロでも作るかい
0527521
2008/06/20(金) 07:45:25も試したけどダメ。
if(str[textPointer]==_T(' ')){
も試したけどダメ。
if(str[textPointer]=='a'){
としたら a がある時はちゃんとひっかかってくる。スペースの時
だけひっかかってこない。
if の行に行く前に、何が str[textPointer] に入っているのか
こんな感じ
wsprintf(szTrash, TEXT("a %c b"), str[textPointer]);
MessageBox(NULL, szTrash, TEXT("デバッグウィンドウ"), MB_OK);
で表示させてみたら
a
とだけ表示された。str[textPointer] にスペース以外が入っている
場合は正常に表示される。たとえば z が入ってたら
a z b
と表示される。わかる人、助けてくれ。
0528525
2008/06/20(金) 07:49:59マクロで可能なんですかね?
まあやろうとしてることは有効期限つきで機能を提供したい場合に
関数などの一箇所で日付チェック処理しちゃうとバイナリレベルで
書き換えられたらアウトなので、いたるところに埋め込みたい
というのが理由なんです。
0529デフォルトの名無しさん
2008/06/20(金) 07:56:47どうせ日付そのものをごまかされるからムダなんじゃw
0530デフォルトの名無しさん
2008/06/20(金) 07:59:21それは別にいいんですよ。
毎回手間が伴いますので。
一箇所で処理してるとバイナリレベルでばれればおしまいなので、それさえ回避できれば。
0531デフォルトの名無しさん
2008/06/20(金) 08:04:35int i;\
for (i=0; i<a; i++) {\
printf("hello world 1! %d\n", b);\
printf("hello world 2! %d\n", b);\
printf("hello world 3! %d\n", b);\
printf("hello world 4! %d\n", b);\
printf("hello world 5! %d\n", b);\
}}
マクロはこんな風に\改行でつないでいけばやりたい放題ぞよ
0532デフォルトの名無しさん
2008/06/20(金) 08:29:37wsprintf(szTrash, TEXT("a %c b"), TEXT(' '));
wsprintf(szTrash, L"a %c b", L' ');
こういうのもダメなわけ?
0533デフォルトの名無しさん
2008/06/20(金) 08:35:40おーありがとうございます。
関数のように処理を入れたい場所に書いておけばインライン展開してくれる
ってことなんですかね?
0534521
2008/06/20(金) 09:12:41wsprintf(szTrash, TEXT("a %c b"), TEXT(' '));
wsprintf(szTrash, L"a %c b", L' ');
は両方ともオーケーでした。このように表示されます。
a b
とりあえず HEX を見ようと
wsprintf(szTrash, TEXT("a %x b"), str[textPointer]);
ってやってみて Hex を調べたら 0 になってた。「0ってなんじゃ?」
って思って UNICODE表で調べてみたら NULL ってことがわかりました。
なんでスペースを入れたら NULL が入るんだろ。わかる人、助けてちょーだい。
0535デフォルトの名無しさん
2008/06/20(金) 09:16:54C言語でスペースのままだとアスキーコードで処理され0x20になってるんじゃね?
試しにcharでスペースを与えて、sprintfあたりで16進数表示してみ?
0536デフォルトの名無しさん
2008/06/20(金) 09:26:440537521
2008/06/20(金) 09:31:45>>535
その可能性も考えたが、テキストファイルにスペースがあったらその
スペースが 0x0 に変換されるから、関係ないってことがわかった。
0538デフォルトの名無しさん
2008/06/20(金) 09:32:420539デフォルトの名無しさん
2008/06/20(金) 09:38:31環境書け
0540521
2008/06/20(金) 09:39:46>>538
fp = _wfopen(fullPathAndFileName, TEXT("r"));
ってやって
while(fwscanf(fp, TEXT("%s"), str) != EOF){
で読んでるが、これって問題ありってこと?
0541デフォルトの名無しさん
2008/06/20(金) 09:43:060542デフォルトの名無しさん
2008/06/20(金) 09:44:09関数の仕様をちゃんと読め。
0544デフォルトの名無しさん
2008/06/20(金) 09:49:130545デフォルトの名無しさん
2008/06/20(金) 09:50:40C言語と関係ないけど一応いっとくと
UTF-8はASCIIにある文字はそのまんまのコードになる
0546デフォルトの名無しさん
2008/06/20(金) 09:51:530547デフォルトの名無しさん
2008/06/20(金) 09:56:47環境によって、 "" と L"" を切り替える。
0548デフォルトの名無しさん
2008/06/20(金) 09:57:090549デフォルトの名無しさん
2008/06/20(金) 09:59:57インライン関数にするのはどうなの?
0550デフォルトの名無しさん
2008/06/20(金) 10:08:09ttp://lol.blog12.fc2.com/blog-entry-53.html
MSのマクロ
0551デフォルトの名無しさん
2008/06/20(金) 10:12:200552デフォルトの名無しさん
2008/06/20(金) 10:21:28>ってやってみて Hex を調べたら 0 になってた。「0ってなんじゃ?」
>って思って UNICODE表で調べてみたら NULL ってことがわかりました。
っ「文字列とは何ですか。」
0553デフォルトの名無しさん
2008/06/20(金) 14:24:54何箇所あったって同じものを置くんじゃ、機械的に検索・置換でおしまい。
0554デフォルトの名無しさん
2008/06/20(金) 15:59:11http://www.geocities.jp/kenji_y0328/crenshu/index.htmlのR31なんですが、
名前にendを入力すると合計を出して終了するというプログラムなんです。
この解答http://www.geocities.jp/kenji_y0328/crenshu/renshu/r031.gifでは、
一番初めにendを入力しても終了せず点数も入力して、出力される値も%%などがでて汚い結果になります。
初めにendを入力したらすぐ終わるようにするには、どんな改変が必要なのでしょうか?
プログラムを終わらせるには、return 0;でいいんでしょうか?
0555デフォルトの名無しさん
2008/06/20(金) 16:54:42それはおいといて
while(1){
/*前処理*/
if(strcmp(tanto, "end")==0) break;
/*表示処理*/
}
0556あ
2008/06/20(金) 18:33:39【問題】数値(整数値)をキー入力して、その数だけ「#」を表示する処理。
【実行例】
表示回数は?8
########
このプログラムを作れというのですが正解はどう書けばいいのですか?
アホですみません、お願いします。
0557デフォルトの名無しさん
2008/06/20(金) 18:37:18for入りだからまず展開されないんじゃね?
0558デフォルトの名無しさん
2008/06/20(金) 18:50:39それでさあ、くだらないブログが腐るほど引っ掛かるんだよね。
知ったかとか、出鱈目とか鵜呑みにしたような内容の馬鹿ブログ。
いや、早い話がお前らブログ辞めろって。
いや、それだけなのよ。まじで。お願いだから辞めて下さい。
資源の無駄、そして多くの人、社会の利便性と生産性を根こそぎかっさらってますよ。お前達
0559デフォルトの名無しさん
2008/06/20(金) 21:09:040560デフォルトの名無しさん
2008/06/20(金) 21:10:51>>1読め
0561デフォルトの名無しさん
2008/06/20(金) 21:22:24While(1)
としたらは無限ループになりますか?
0562デフォルトの名無しさん
2008/06/20(金) 21:23:520563デフォルトの名無しさん
2008/06/20(金) 21:28:34内部に脱出する部分がなければなる
0564デフォルトの名無しさん
2008/06/20(金) 21:37:21ひっかかるなよwwww
0565デフォルトの名無しさん
2008/06/20(金) 22:00:51While( )という関数しだいだな
0566デフォルトの名無しさん
2008/06/20(金) 22:02:520567デフォルトの名無しさん
2008/06/20(金) 22:03:59BASIC かもしれない。
0568デフォルトの名無しさん
2008/06/20(金) 22:04:03何が?
内部に脱出する部分がなければ無限ループになるのは当然だろ?
0569デフォルトの名無しさん
2008/06/20(金) 22:06:59C は大文字小文字を区別するんだぜ?
0570デフォルトの名無しさん
2008/06/20(金) 22:12:180571デフォルトの名無しさん
2008/06/20(金) 22:14:130572デフォルトの名無しさん
2008/06/20(金) 22:43:000573デフォルトの名無しさん
2008/06/20(金) 22:43:250574デフォルトの名無しさん
2008/06/20(金) 22:45:410575デフォルトの名無しさん
2008/06/20(金) 22:47:110576デフォルトの名無しさん
2008/06/20(金) 22:53:394 * ( 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ・・・
0577デフォルトの名無しさん
2008/06/20(金) 22:55:360578デフォルトの名無しさん
2008/06/20(金) 23:37:53_tを_hyoとかretu_に書き換えればグンと読みやすくなるんだぜ
0579デフォルトの名無しさん
2008/06/20(金) 23:39:100580デフォルトの名無しさん
2008/06/20(金) 23:41:50hyoのかわりにtableで。
変数名が長くなることに対して何もためらわないように
0581デフォルトの名無しさん
2008/06/20(金) 23:44:510582デフォルトの名無しさん
2008/06/20(金) 23:45:490583デフォルトの名無しさん
2008/06/21(土) 01:48:400584デフォルトの名無しさん
2008/06/21(土) 07:43:02ちょっと長いんですがこのプログラムについて質問させてください
これを実行すると
無限ループにさせてるはずなのに舟の移動が一回しかできなくなってます
どこが間違っているんでしょうか?
42行目のif(check(count)==0)break;を一旦消してみたら無限ループになったので
check関数がおかしいのかもしれないってとこまでは分かったのですが・・・
0585デフォルトの名無しさん
2008/06/21(土) 08:05:04そこまでは正しい判断だ。check関数をよく調べてみるんだ。
0586デフォルトの名無しさん
2008/06/21(土) 09:02:49void encrypt(char *str, int n)
{
while(*str) {
*str = 'a' + (*str - 'a' + n) % 26;
str++;
}
}
0587デフォルトの名無しさん
2008/06/21(土) 09:12:360588デフォルトの名無しさん
2008/06/21(土) 10:11:48解決しました
分かってみると簡単なところですね
ありがとうございました
0589デフォルトの名無しさん
2008/06/21(土) 10:42:17%は割ったときの余りですよね?
0590デフォルトの名無しさん
2008/06/21(土) 10:53:56で、+nで移動。だけど、a-zは26文字しかないから、超えた分は折り返すように
%26してる。あとは「aからの距離」を文字に直すのに+'a'しておしまい。
0591デフォルトの名無しさん
2008/06/21(土) 10:57:27そういうことですか。ありがとうございました
0592デフォルトの名無しさん
2008/06/21(土) 11:24:56使いかたは理解していますが、背景が知りたいです。
0593デフォルトの名無しさん
2008/06/21(土) 11:27:180594デフォルトの名無しさん
2008/06/21(土) 11:28:480595デフォルトの名無しさん
2008/06/21(土) 11:29:06040 が仲間になりたそうにしています
0596デフォルトの名無しさん
2008/06/21(土) 11:47:02if (argc == 1) {
do_cat(stdin);
} else {
for (i = 1; i < argc; i++) {
/* 処理 */
}
}
のelse文以下の処理はコマンドラインで指定されたファイルを読んでいくのですが、
else文を用いてその中にfor文を書くのか、else文を用いないでそのままfor文を書くのか、どちらが優れていますか?
0597デフォルトの名無しさん
2008/06/21(土) 11:52:53優れているかではなく、読みやすいかで判断すべき
0598デフォルトの名無しさん
2008/06/21(土) 12:44:260599デフォルトの名無しさん
2008/06/21(土) 13:02:58環境がわからないと答えられない
とりあえずWindows用
FindFirstFile
FindNextFile
0600デフォルトの名無しさん
2008/06/21(土) 13:15:29opendir
readdir
0601デフォルトの名無しさん
2008/06/21(土) 14:21:210602デフォルトの名無しさん
2008/06/21(土) 14:27:10終了すると開放される。
まあこれにはからくりがあって、プログラム起動と同時にプログラムにいくらかの
メモリを割り当てて、プログラム内部からmallocを発行すると起動時に割り当てられた
エリアから確保したりしてるらしい。
なので、プログラムがfreeせずに終了してもシステムは最初に割り当てたエリアの
アドレスとかは知ってるので自動で開放される・・・
でもmallocの管理もできないと大きなプログラムになってくると
実行中にメモリが確保できないとかでこける可能性もでてくるんじゃね?
0603デフォルトの名無しさん
2008/06/21(土) 14:36:040604デフォルトの名無しさん
2008/06/21(土) 14:38:580605デフォルトの名無しさん
2008/06/21(土) 14:42:14そういうファイルもあるから、きっちり対応しよう
0606デフォルトの名無しさん
2008/06/21(土) 14:43:210607デフォルトの名無しさん
2008/06/21(土) 14:58:440608デフォルトの名無しさん
2008/06/21(土) 15:51:06最近Borland(コンパイラ)とC言語を始めよう!(エディタ)から
Microsoft Visual C++ 2008 Express Editionに変えた
前者の場合だとボタンを押せばコンパイル・実行できたんだけど
VC++でもボタン押したらコンパイルするようにできない?
今の設定はメニュー->ツール->外部ツールに追加して
そのボタン押したらcmd起動+path設定されて
cl Filename.cって手打ちしないといけない
作業ディレクトリはCファイルが保存してある所
0609デフォルトの名無しさん
2008/06/21(土) 16:00:390610デフォルトの名無しさん
2008/06/21(土) 16:05:44単に *.cを開いただけ。
0611デフォルトの名無しさん
2008/06/21(土) 16:06:570612デフォルトの名無しさん
2008/06/21(土) 16:10:37#include <stdlib.h>
void sub(int *p){
int *i;
i = (int *) malloc(sizeof(int));
*i = 100;
p = i;
}
int main(void){
int *ip;
sub(ip);
printf("%d", *ip);
return 0;
}
100じゃなくて0が表示されるのはなんで?
0613デフォルトの名無しさん
2008/06/21(土) 16:12:44void sub(int **p){
int *i;
i = (int *) malloc(sizeof(int));
*i = 100;
*p = i;
}
かな
0614デフォルトの名無しさん
2008/06/21(土) 16:13:490615デフォルトの名無しさん
2008/06/21(土) 16:15:480616デフォルトの名無しさん
2008/06/21(土) 16:29:48malloc使ってfreeしてないなんて
0617デフォルトの名無しさん
2008/06/21(土) 16:29:56C初めてあんま経ってないからよく分からん。
0618デフォルトの名無しさん
2008/06/21(土) 16:32:07using namespace System;
int main()
{
String^string1,^string2;
Console::Title="初めてのプログラム:");
Console::Write("性を入力してください:");
string1=Console::ReadLine();
Console::Write("名を入力してください:");
string2=Console::ReadLine();
Console::WriteLine("姓名は:"+string1+" "+string2);
return 0;
}
エラーなるんだけど、どこおかしいんですかね。
一応ここ参考にしてるんだけど、
ttp://homepage3.nifty.com/ishidate/vcpp08_1/vcpp08_1.htm
0619デフォルトの名無しさん
2008/06/21(土) 16:32:13それでさあ、くだらないブログが腐るほど引っ掛かるんだよね。
知ったかとか、出鱈目とか鵜呑みにしたような内容の馬鹿ブログ。
いや、早い話がお前らブログ辞めろって。
いや、それだけなのよ。まじで。お願いだから辞めて下さい。
資源の無駄、そして多くの人、社会の利便性と生産性を根こそぎかっさらってますよ。お前達
0620デフォルトの名無しさん
2008/06/21(土) 16:32:390621デフォルトの名無しさん
2008/06/21(土) 16:32:42ナンダコレ
0622デフォルトの名無しさん
2008/06/21(土) 16:33:38検索エンジン使いこなせなくて涙目なんですよね。
0623デフォルトの名無しさん
2008/06/21(土) 16:36:50俺車の運転出来ないんだ、だから世の中から車をなくせって理屈かw
そんな馬鹿な上から目線の理屈を展開するなら
検索エンジンのオプション位使いこなして下さい。
[blog ブログ]のキーワードを含むヒットを除外、とかさ…
0624デフォルトの名無しさん
2008/06/21(土) 16:38:51スレ違い
と言うか.NET使うならC#の方がいいんじゃないかと思う
String ^string1, ^string2;
↑
せめてここに半角スペースを入れる
0625デフォルトの名無しさん
2008/06/21(土) 16:39:52C++/CLIはこのスレ的にはどうなのだろ。
C++を拡張した言語で既にCでもC++でもないものなのだが。
0626デフォルトの名無しさん
2008/06/21(土) 16:48:07コピペにマジレスすんなよ
0627デフォルトの名無しさん
2008/06/21(土) 16:51:31ありがと
プロジェクトは別の事で使うと思ってた
0628デフォルトの名無しさん
2008/06/21(土) 16:55:55ここはC++すら御法度なんだからC++/CLIがOKなわけないだろう
かといってC++スレに来られても困る訳だが
0629デフォルトの名無しさん
2008/06/21(土) 17:04:48http://pc11.2ch.net/test/read.cgi/tech/1206447234/l50
以前は くだすれC++/CLI という初心者スレがあったのだが
需要がないのか落ちた。
0630デフォルトの名無しさん
2008/06/21(土) 18:12:200631デフォルトの名無しさん
2008/06/21(土) 18:17:11複数の言語を勉強するのが有用
0632デフォルトの名無しさん
2008/06/21(土) 18:18:31有用かどうかは目的による
0633デフォルトの名無しさん
2008/06/21(土) 18:23:46よかったらCとC++の目的の違いとか教えてくれないか?
専門用語だらけでよくわからなくて・・
0634デフォルトの名無しさん
2008/06/21(土) 18:25:15だから何がしたいんだよ?
C言語なんてやっても車の運転はうまくならないぞ
0635デフォルトの名無しさん
2008/06/21(土) 18:25:220636デフォルトの名無しさん
2008/06/21(土) 18:29:12どちらか片方にしか出来ないなんてことも無いと思う
どっちが使いやすいかも人による
0637デフォルトの名無しさん
2008/06/21(土) 18:52:130638デフォルトの名無しさん
2008/06/21(土) 19:21:090639デフォルトの名無しさん
2008/06/21(土) 19:23:180640デフォルトの名無しさん
2008/06/21(土) 19:23:580641デフォルトの名無しさん
2008/06/21(土) 19:31:53そういう話じゃないだろ。
0642デフォルトの名無しさん
2008/06/21(土) 19:32:330643デフォルトの名無しさん
2008/06/21(土) 19:35:560644デフォルトの名無しさん
2008/06/21(土) 19:36:320645デフォルトの名無しさん
2008/06/21(土) 19:37:030646デフォルトの名無しさん
2008/06/21(土) 19:37:240647デフォルトの名無しさん
2008/06/21(土) 19:44:12継承とかさせるとな、オーバーライドの有無で仮想関数テーブル作るのが大変なんだ。更にな多重継承なんかさせるとポインタを調整させるのも大変なんだよ。
0648デフォルトの名無しさん
2008/06/21(土) 19:45:270649デフォルトの名無しさん
2008/06/21(土) 19:52:34ソフトウェアとしてC++とCのどちらか片方にしか出来ないことなんて無いって事?じゃないの
0650デフォルトの名無しさん
2008/06/21(土) 19:55:190651デフォルトの名無しさん
2008/06/21(土) 19:56:540652デフォルトの名無しさん
2008/06/21(土) 19:58:200653デフォルトの名無しさん
2008/06/21(土) 20:01:000654デフォルトの名無しさん
2008/06/21(土) 20:03:44使いこなせない人にとっては C の方がマシかもしれない。
しかし、C++ も使いこなせないようでは
プログラマとしてやっていけるのか疑問。
0655デフォルトの名無しさん
2008/06/21(土) 20:05:420656デフォルトの名無しさん
2008/06/21(土) 20:40:470657デフォルトの名無しさん
2008/06/21(土) 21:04:49ぷにぷにしてた
0658デフォルトの名無しさん
2008/06/21(土) 21:08:23もっと綺麗にならないのかよ
0659デフォルトの名無しさん
2008/06/21(土) 21:19:420660デフォルトの名無しさん
2008/06/21(土) 21:21:56それは宿題スレの方がいい
0661デフォルトの名無しさん
2008/06/21(土) 21:21:59どうぞ。
0662デフォルトの名無しさん
2008/06/21(土) 21:29:07違うだろ
>>659
態度による
まずエラーメッセージくらいはちゃんと読むこと
0663デフォルトの名無しさん
2008/06/21(土) 21:31:55どなたか教えてくださる方がいましたら、お願いします。
0664デフォルトの名無しさん
2008/06/21(土) 21:32:32>>660
0665デフォルトの名無しさん
2008/06/21(土) 21:35:35麻呂のクソースは分からないでおじゃるかっ!?
0666デフォルトの名無しさん
2008/06/21(土) 21:53:27いえ、素晴らしいソースだと思うんですが、初心者の自分が持っていったら確実に怪しまれるんで・・。
0667デフォルトの名無しさん
2008/06/21(土) 22:08:000668デフォルトの名無しさん
2008/06/21(土) 22:31:28http://yutori.2ch.net/test/read.cgi/news4vip/1214054829/
vipを助けてくれ!!!!!!!!
負けそうだ!!!!!
シベリア超特急に負けそうなんだ!!!!!!!!!!!
俺 達 の v i p が 無 く な る ! ! ! ! ! ! ! !
ニュー速の本部を荒らして俺らに投票してくれ!!!!!!!!
P C ケ ー タ イ 友 達 家 族 を フ ル 動 員 し て
コードをとってきてくれ!!!!!!!!!!!!!
ここで勝ったら二回戦もよろしく!!!!!!!!!!!
つまんねー話してないで協力するんだ!!!!!!!!!!!!!!!!
2chが変わってしまうぞ!!!!!!!!!!!!!!
助けてくれ!!!!!!!!!!!
まだまだ俺たちはおわれねぇ!!!!!!!!!!!!!!!!!!
0669デフォルトの名無しさん
2008/06/21(土) 23:24:31ヒープへのデータ挿入と最大値の取り出しは作れたのですが、
これらを組み合わせて作ることは出来無いでしょうか?
データ挿入
void insert(int x,int *ary,int *n){
int p,k,tmp;
k = *n; ary[k] = x;
while(k > 0){
p = (k-1)/2;
if(ary[p] < ary[k]){
tmp = ary[k]; ary[k] = ary[p]; ary[p] = tmp;
k = p;
}
else break;
}
*n = *n+1;
}
0670デフォルトの名無しさん
2008/06/21(土) 23:25:34int deletemax(int *ary,int *n){
int max,j,k,tmp;
*n = *n-1;
if(*n < 0) return -1;
k = 0; max = ary[0]; ary[0] = ary[*n];
while((j = k*2+1) < *n){
if(j+1 < *n && ary[j] < ary[j+1]) j++;
if(ary[j] <= ary[k]) break;
tmp = ary[k]; ary[k] = ary[j]; ary[j] = tmp;
k = j;
}
return max;
}
0671デフォルトの名無しさん
2008/06/22(日) 00:39:05できない。
ヒープソートとは、いったん全てのデータをヒープ構造として構成した後で、
ヒープの根つまり最大値を取り出して残りを再度ヒープ化することを繰り返すアルゴリズムである。
つまり、この例での insert() と deletemax() は一対一の関係ではなく、
deletemax() が呼ばれ始めるときには insert() は全て実行済みでなければならない。
ついでにこの例のコードを効率化するヒントを挙げておく。
insert() は、ary に追加される数 x を、ヒープの葉から始めて順次親と比較し入れ替えながら適正な位置に挿入する。
同様に、deletemax() では、ヒープの末尾にあった子 ary[n-1] を、ヒープの根から始めて順次子と比較し入れ替えていく。
ここで重要なのは、比較する値の片方は常に x または ary[n-1] だった値で、入れ替え作業中変化しないということだ。
たとえば、
tmp=ary[0];
ary[0]=ary[1];
ary[1]=tmp;
tmp=ary[1];
ary[1]=ary[2];
ary[2]=tmp;
と
tmp=ary[0];
ary[0]=ary[1];
ary[1]=ary[2];
ary[2]=tmp;
は同じ結果をもたらすが、後者の方が明らかに速い。
0672デフォルトの名無しさん
2008/06/22(日) 01:50:59コンパイラとやらをどうやって実行するのかが分かりません。
自分のPCはWindows Vista です。
ネットで調べたところ、Visual C++というのを使うらしいのですが、
自分のPCには「プログラムのアンインストールまたは変更」というところに
Microsoft Visual C++ 2005 Redistributableというのが表示されてますが
どこからこれを実行すればいいのかわかりません。
どなたかアドバイスをください。
0673デフォルトの名無しさん
2008/06/22(日) 01:54:55この関数を使ってヒープソートが作れるかってんじゃネーノ?
>672
そりゃただのランタイムだ
0674デフォルトの名無しさん
2008/06/22(日) 01:58:35VC++はMSのサイトでダウソできるよ。
0676デフォルトの名無しさん
2008/06/22(日) 02:03:27それは考えたが、二つの関数の意味をわかっているなら、できることもわかっているはずである。
作り方を教えろと言うのなら、それはこのスレの範疇ではない。仕方がないので>>671のように解釈した。
一応、アルゴリズムの解説と、実装のためのヒントは示したつもりである。
0677デフォルトの名無しさん
2008/06/22(日) 02:30:43int tolower(int c);
>もし c が unsigned char の値でないか EOF ならば、 これらの関数の動作は未定義である。
とはどういうことですか?
引数がchar型であれば自動的にint型になるのではないですか?
0678デフォルトの名無しさん
2008/06/22(日) 02:33:090679デフォルトの名無しさん
2008/06/22(日) 02:35:290680デフォルトの名無しさん
2008/06/22(日) 03:36:30なぜこのような答えになるのか教えて下さい…考えてもわからないですorz
#include <stdio.h>
#include <conio.h>
int main(void){
double z;
int k;
k=0;
z=2.0;
while(z*z<15.0){
z+=0.5;
k++;
}
printf("%d\n%3.1f\n", k, z);
getch();
return 0;
}
答え
4
4.0
0681デフォルトの名無しさん
2008/06/22(日) 03:43:580682デフォルトの名無しさん
2008/06/22(日) 03:47:22どうなって欲しいのか書かないと何故と訊かれても困るよ
0683デフォルトの名無しさん
2008/06/22(日) 03:50:43k++;の後にprintf("k=%d z=%3.1f\n", k, z);を入れて変数の変化を確認すると、
k=1 z=2.5
k=2 z=3.0
k=3 z=3.5
k=4 z=4.0
4
4.0
となります。参考までに。
0684デフォルトの名無しさん
2008/06/22(日) 03:53:01ありがとうございます。
考え方としては、kが1のときzが4.5ということでいいのでしょうか?ほんとにわからないんです…すいません。
>>682
dぷなってほしいというか…どのように表示されるのか書きなさいという問題なんです。
0685デフォルトの名無しさん
2008/06/22(日) 04:00:43ありがとうございます!理解できました。
0686デフォルトの名無しさん
2008/06/22(日) 12:33:09#include<stdio.h>
#include<conio.h>
int main(void){
int i,s;
s=1;
for(i=1;i<=6;i++){
printf("%2d\n",s*i)
s*=-1;
}
getch();
return0;
}
なぜs*=-1;になるのでしょうか?わかるひとお願いします
0687デフォルトの名無しさん
2008/06/22(日) 12:34:46毎回Sの符号を変えてるだけでしょ?
s = s * -1;
と同じ
0688デフォルトの名無しさん
2008/06/22(日) 12:36:371
-2
3
-4
5
-6
と出力されるはず
0689デフォルトの名無しさん
2008/06/22(日) 13:13:110690デフォルトの名無しさん
2008/06/22(日) 13:18:180691デフォルトの名無しさん
2008/06/22(日) 13:35:12#include <stdio.h>
int main(void)
{
int num;
do{
printf("正の整数を入力して下さい :");
scanf("%d",&num);
if(num<0)
puts("負の整数は入力できません");
}while(num<0);
printf("入力した整数を逆から読むと ");
do{
printf("%d", num % 10);
num /= 10;
}while(num);
puts(" になります。");
return 0;
}
上記のコードで、scanfの時点でnumに負の実数を入力すると、
無限ループになってしまいます。
なぜ2順目以降のscanfが飛ばされ、新しく数値を代入することができないのでしょうか?
intをdoubleに変えて、scanf内の%dを%lfに変えても同じ結果でした。
無限ループは
「正の整数を入力して下さい :負の整数は入力できません」
が、延々出力されます。
0692デフォルトの名無しさん
2008/06/22(日) 13:41:08それで普通に動作したけどなぁ
scanf(" %d",&num); ←%dの前に半角スペース
としたらどうなる
0693デフォルトの名無しさん
2008/06/22(日) 13:47:09たぶん↓のページで挙げられてる問題でつまってると思う
ttp://www9.plala.or.jp/sgwr-t/c/sec05.html
0694デフォルトの名無しさん
2008/06/22(日) 14:20:46>>693
ありがとうございます。
%dの前に半角スペース(空白、改行を読み飛ばすですね)を試してみましたが
結果は同じでした。
693さんのページを読んで試してみたところ、
scanfの項の (3)読み込み不一致 の問題が発生していたようです。
一旦文字列として読み込んでatoiでint型に変換することで回避できました。
ありがとうございました。
0695デフォルトの名無しさん
2008/06/22(日) 14:24:000696デフォルトの名無しさん
2008/06/22(日) 14:44:54違う、実数を入れたって言ってるだろ
引っかかってるのは小数点だ
0697デフォルトの名無しさん
2008/06/22(日) 15:24:53なるほど、こういうネタ質問も面白いな
0698デフォルトの名無しさん
2008/06/22(日) 15:25:38その関数だけ別ファイルにしてコンパイルした時の
オブジェクトファイルのサイズがイコールだと思っていいですか?
0699デフォルトの名無しさん
2008/06/22(日) 15:27:550700デフォルトの名無しさん
2008/06/22(日) 15:28:01コード以外にリンク用の情報とかいろいろ付いてるんじゃないの?
0701デフォルトの名無しさん
2008/06/22(日) 15:31:31リンカの設定でmapファイルを出力すべし
0702デフォルトの名無しさん
2008/06/22(日) 15:32:37そういう方法なら普通、抱えて乗ったときと一人で乗ったときの差、という発想になるのでは
0703デフォルトの名無しさん
2008/06/22(日) 16:10:29struct list {
int key; /* キー */
char name[20]; /* 名前 */
struct list *next; /* 次のデータへのポインタ */
};
struct list *add_list(int key, char *name, struct list *head)
{
struct list *prev, *cur;
struct list *p = malloc(sizeof *p);
if (p == NULL) { printf("out of memory\n"); exit(1); }
p->key = key;
strcpy(p->name, name);
p->next = NULL;
if (head == NULL || strcmp(name, head->name) < 0) {
p->next = head;
return p;
}
for (prev = cur = head; (cur = cur->next) != NULL; prev = cur) {
if (strcmp(name, cur->name) < 0) {
p->next = cur;
break;
}
}
prev->next = p;
return head;
}
0704デフォルトの名無しさん
2008/06/22(日) 16:13:31上記は関数はリストに単語をアルファベット順に追加していく関数です。
以下の箇所の動作がいまいちよく分かりません。
for (prev = cur = head; (cur = cur->next) != NULL; prev = cur) {
if (strcmp(name, cur->name) < 0) {
p->next = cur;
break;
}
}
どなたかご教示ください。
よろしくお願いします。
0705デフォルトの名無しさん
2008/06/22(日) 16:34:50アルファベット順を保つために、これから追加しようとする単語を入れるべき位置を探す必要がある。
例えば、単語 「foo」 は、単語 「bar」 の前や、単語 「hoge」 の後ろに入れるわけにはいかない。
foo → bar → hoge や bar → hoge → foo といった順序ではアルファベット順でなくなってしまう。
つまり foo は、bar と hoge の間に入れなければならない。
その for ループと strcmp は、単語を入れる位置を探している。
p->next = cur; と break 後の prev->next = p; は、見つかった位置に実際に追加している。
0706デフォルトの名無しさん
2008/06/22(日) 16:35:16for文が効率的である反面わかりにくいのかも
while(1){
if( cur->next !=NULL ){
if( strcmp( name,cur->next->name) <0 ){
p->next=cur->next;
cur->next=p;
break;
}else
cur=cur->next;
}else{
cur->next=p;
break;
}
}
と等価。こちらのほうが分かり易いかも
(無検証につき無保証御容赦)
0707デフォルトの名無しさん
2008/06/22(日) 16:35:370708デフォルトの名無しさん
2008/06/22(日) 16:38:23ありがとうございます。
mapファイルについて調べつつとりあえずは差分で調べてみます。
0709デフォルトの名無しさん
2008/06/22(日) 16:40:38for (prev = cur = head; (cur = cur->next) != NULL; prev = cur) {
prevがひとつ前に調べた場所、curが今調べている場所
最初(head)から最後(nextがNULLの単語)までのループになっている
A→E→G→NULL というリストにFを追加する場合、
strcmp( "F", "A" )だと正の値が返ってくるので何もしない。Eも同じ。
strcmp( "F", "G" )だと負の値が返ってくるので、
FのnextにG(cur)へのポインタをセットしてループ終了、
最後にE(prev)のnextにFをセットしてる
結果としてA→E→F→G→NULLとなる
頑張って書いた割にすごいごちゃごちゃしてて少し凹んだ orz
0710デフォルトの名無しさん
2008/06/22(日) 16:47:00prev = head; /* 先頭の一歩手前 */
cur = head->next; /* 先頭から始める */
while (1) {
if (cur == NULL) break; /* 終端に到達(p->nextはNULLのままでいい) */
if (strcmp(name, cur->name) < 0) { /* 新項目pの直後にするべき項目に到達 */
p->next = cur; /* 実際にpからリンクする */
break;
}
prev = cur; /* 一歩手前を常に保存 */
cur = cur->next; /* 次へ */
}
こう?基本的には、p->nextの値を決定しているわけだよね。
ループの内部ではprevを参照していない、というのもポイントか。
0711デフォルトの名無しさん
2008/06/22(日) 16:47:05必ずしも必要でない変数が入っているし...
要するにそのコードは、最適化/考案/修正中のコードで、
教材として扱って良いコードじゃないんだな
プログラムコードはそういうものの塊で、分かりにくい
場合に、無理に理解しようとしないというのが鉄則。
(書いている本人ですらごみ箱に捨てて忘れている場合すらある)
0713デフォルトの名無しさん
2008/06/22(日) 17:05:40if (strcmp(name, prev->next->name) < 0) {
p->next = prev->next;
break;
}
}
prevオンリー。これが原形だったのかね。
0714デフォルトの名無しさん
2008/06/22(日) 17:24:23for (prev = head; prev->next != NULL && 0 <= strcmp(name, prev->next->name); prev = prev->next)
;
p->next = prev->next;
とかでいいような気が。これはこれでひどいかw
0715デフォルトの名無しさん
2008/06/22(日) 17:27:020716デフォルトの名無しさん
2008/06/22(日) 17:27:50後々の修正がキツくなる傾向が高い扱いにくい構文。
単純ループ以外、初心者は余り使わないほうがいいだろうな
0717デフォルトの名無しさん
2008/06/22(日) 17:34:25課題が明日までの奴が居て大変そうだ
0718デフォルトの名無しさん
2008/06/22(日) 17:38:520719デフォルトの名無しさん
2008/06/22(日) 17:40:440720デフォルトの名無しさん
2008/06/22(日) 18:08:430721デフォルトの名無しさん
2008/06/22(日) 18:31:560722デフォルトの名無しさん
2008/06/22(日) 18:35:120723デフォルトの名無しさん
2008/06/22(日) 20:10:41while にしたり、for のままではあるが
条件の一部を { } の中に要れたりするな。
0724デフォルトの名無しさん
2008/06/22(日) 20:33:07中身がぜんぜんなっちゃいない奴が増えるのも迷惑な話だ
0725デフォルトの名無しさん
2008/06/22(日) 20:38:24ならないって規則だから、ちょっと多めに見積もってループを展開するとかでコードを
水増しして、誤差を調整してたな。
0726デフォルトの名無しさん
2008/06/22(日) 20:42:050727デフォルトの名無しさん
2008/06/22(日) 20:42:19そこまでやったら、見積もる時間でコードが書けるわ。
0728デフォルトの名無しさん
2008/06/22(日) 20:42:220729デフォルトの名無しさん
2008/06/22(日) 20:43:200730デフォルトの名無しさん
2008/06/22(日) 20:43:47見積もりがあまりずれすぎると困るということなんだろうな。
そもそもステップ数なんぞで(ry
0731デフォルトの名無しさん
2008/06/22(日) 20:44:26メインフレーム時代の名残でしょ。
昔は作業内容を報告するのに確かステップ数管理してたはず。
新規いくら、修正いくら。
で、このステップ数から必要テストケースの数が割り出される・・・だったかな@元戸塚組
0732デフォルトの名無しさん
2008/06/22(日) 20:46:53説明ありがとう
0733デフォルトの名無しさん
2008/06/22(日) 20:47:30まるで、残業時間で評価する糞(ry
0734デフォルトの名無しさん
2008/06/22(日) 20:48:29本当なのでしょうか?まだ研修中でよくわかりません。
今はJavaとC#というのを研修してます
0735デフォルトの名無しさん
2008/06/22(日) 20:48:39仕様書なんかもキングGの分厚いファイルに修正修正で継ぎ足された常態のがあって
○Cとか○Sとか書いてやってた・・・かな・・・?
0736デフォルトの名無しさん
2008/06/22(日) 20:49:41分野による。
組み込み系はC使うし、Web系ではほとんどC使わないだろうし。
0737デフォルトの名無しさん
2008/06/22(日) 20:50:46まー昔の名残だからねえ。日立らしいといえばらしいかな
>>734
分野によるでしょ
C言語は組み込みだと現役だし、windows上のアプリだとVC++かJavaかC#とか
そんなんじゃないのかな?
0738デフォルトの名無しさん
2008/06/22(日) 20:53:440739デフォルトの名無しさん
2008/06/22(日) 21:02:09価値がないわけではない。もっと用途に応じた価値のある言語はあるというだけ。
0740デフォルトの名無しさん
2008/06/22(日) 21:02:50まあ、特定の言語を学ぶ価値が無いとか言う奴は信用するな。
所謂、ニセモノだ。
特に、高級言語風で現実のCPUの動作まで学べるCをおろそかに
するのは、目先の業務しか出来ない程度の奴だよ。
0741デフォルトの名無しさん
2008/06/22(日) 21:10:14というのは20世紀に信じられていた神話なんで忘れましょう。
Intel の80386プロセッサはPASCAL等に最適化されているし
Java仮想マシンのコードをそのまま動かせるプロセッサJavaChip
も一応発売されていた(る?)し。
0742デフォルトの名無しさん
2008/06/22(日) 21:11:190743デフォルトの名無しさん
2008/06/22(日) 21:16:300744デフォルトの名無しさん
2008/06/22(日) 21:22:40Cをアセンブラにして遊んでたのがすごく力になっていると実感する。
自分より何倍も実務経験長い先輩でもC知らない人とかいてそういう輩はほんと糞過ぎる。
当たり前のことだけどプログラマならCは絶対に勉強するべき。
0745デフォルトの名無しさん
2008/06/22(日) 21:27:23それ以上ではないけど
0746デフォルトの名無しさん
2008/06/22(日) 21:28:21今更Cなんてw
0747デフォルトの名無しさん
2008/06/22(日) 21:29:28アセンブラのマニュアル読めば書けるからね。
Cを知らない=Cが出来なかった先輩じゃないのかな。
C挫折組み=ポインターが理解できなかった連中の理解力の無さは
一緒に仕事したくないレベルだねぇ。
0748デフォルトの名無しさん
2008/06/22(日) 21:30:57いや、そのJavaが何で書いてあるかと(w
0749デフォルトの名無しさん
2008/06/22(日) 21:32:11詳細を教えてください。< i836 が pascal に最適化されていた
0750デフォルトの名無しさん
2008/06/22(日) 21:35:210751デフォルトの名無しさん
2008/06/22(日) 21:37:37どんな研修か知らないけど、あまりいっぺんにやると混乱するだろうし
0752デフォルトの名無しさん
2008/06/22(日) 21:43:12link, unlinkという命令は何のためにあると思う?
0753デフォルトの名無しさん
2008/06/22(日) 21:58:00i386 にも pascal にも link 命令なるものは見当たらないのですが。バイナリでは何?
0754デフォルトの名無しさん
2008/06/22(日) 22:05:390755デフォルトの名無しさん
2008/06/22(日) 22:06:480756デフォルトの名無しさん
2008/06/22(日) 22:08:590757デフォルトの名無しさん
2008/06/22(日) 22:20:000758デフォルトの名無しさん
2008/06/22(日) 22:27:270759デフォルトの名無しさん
2008/06/22(日) 22:38:02最近はPCに近づいてきたけど
0760デフォルトの名無しさん
2008/06/22(日) 23:20:16ネタですか?本気ですか?
0761デフォルトの名無しさん
2008/06/22(日) 23:40:520762デフォルトの名無しさん
2008/06/22(日) 23:47:16アーキテクチャーに変更されたって話は聞いた事ないな
0763デフォルトの名無しさん
2008/06/23(月) 00:11:110764デフォルトの名無しさん
2008/06/23(月) 00:32:590765デフォルトの名無しさん
2008/06/23(月) 00:39:20あれ?
0766デフォルトの名無しさん
2008/06/23(月) 00:45:51だから人並みの事は出来なくてもいいのだ。
0767デフォルトの名無しさん
2008/06/23(月) 01:07:29今までCやってた俺には振り出しに戻った気分orz
0768デフォルトの名無しさん
2008/06/23(月) 01:10:540769デフォルトの名無しさん
2008/06/23(月) 01:12:590770デフォルトの名無しさん
2008/06/23(月) 01:13:540771デフォルトの名無しさん
2008/06/23(月) 01:16:08最大20個までの実数値をscanf()で、配列に読み、呼んだデータの、平均値、分散、最大値、最小値を計算して表示するプログラムを教えてください!
条件として、データは-999.0から999.0の範囲とし、入力終了の合図として1000.0より大きい値のデータを入力すると、その数値は入力されずに入力作業を終了する。
平均値と分散については、
データ数をn、各データをXi(i=1〜n)とすると、(ΣXi)/n (データの個数で割ったもの)が平均値
(Σ(Xi-(データの相加平均))^2)/nが分散であるとする。
よろしくお願いします!!
0772デフォルトの名無しさん
2008/06/23(月) 01:16:39「組み合わせ」を求める数学の公式にコンビネーションがあります。このコンビネーションのプログラミングを教えてください!
1.nとrをscanf()で読み、nCrの値を計算して表示させます。
条件として、nとrの値はマイナスでなく、またゼロでなく、さらにここではn<=10であることを確認させて、正しい数値を入力させる。もし誤った数値を入力したら「入力ミスです」と表示させる。
2.0!=1も扱えるようにすることを忘れない。
0773デフォルトの名無しさん
2008/06/23(月) 01:24:230774デフォルトの名無しさん
2008/06/23(月) 01:27:30>>660
0775デフォルトの名無しさん
2008/06/23(月) 01:33:320776デフォルトの名無しさん
2008/06/23(月) 01:37:57聞いてやるから語ってみろよ。
0777デフォルトの名無しさん
2008/06/23(月) 01:58:310778デフォルトの名無しさん
2008/06/23(月) 01:58:450779デフォルトの名無しさん
2008/06/23(月) 02:13:5280x87 FPU は丸めフラグにより好きな方向に丸められるのですが、そういうことなら退化していますね。
0780デフォルトの名無しさん
2008/06/23(月) 11:33:02forを使った二重ループで、入力後にEOFが入力されたらループを抜け出し、
出力に移るのですが、1回目のbreak後に1周余計にまわってしまうのか、
2個目のループの計数値が0に戻されてしまい、正常な出力が出来ません。
項目を指定して出力させると、文字が正しく入っているのは確認できるのですが、
文字入力の最大値が0になってしまうので、全てがダメになっている状態です。
EOFで2個目のループを抜け出した後、もう1周回らないようにする対策が必要だと思うのですが、
どうやったらよいのでしょうか?ご教示願います。
0781デフォルトの名無しさん
2008/06/23(月) 11:33:37int main(void)
{
int num[100][100];
int i,j,temp_i,temp_j;
printf("文字列を入力\n");
for(i=0; i<50; i++) {
for(j=0; j<10; j++) { num[i][j]=getchar();
if(num[i][j]==EOF) { break; }
}
if(num[i][j]==EOF) { break; }
}
temp_i=i;
temp_j=j-1; /*EOFを取り除く*/
for(j=0; j<=temp_j; j++) {
for(i=0; i<=temp_i; i++) { printf("%c",num[i][j]); }
printf("\n");
}
return 0;
}
0782デフォルトの名無しさん
2008/06/23(月) 11:42:19まさかとは思うけど一行入れるごとにenter押したりしてないだろうね?
0783デフォルトの名無しさん
2008/06/23(月) 12:01:460784デフォルトの名無しさん
2008/06/23(月) 13:15:21■■■□□□□□□□ (■、●=(0,0)〜(temp_i,temp_j)に含まれる部分)
■■■□□□□□□□
■■●[EOF]
■□□□□□□□□□
■□□□□□□□□□
●[EOF]
□□□□□□□□□□
□□□□□□□□□□
○[EOF]
たぶん、そもそもやりたいことと全く無関係なことをしている。
文字単位で物事を考えたいというのはわからないでもないけど。。
改行やタブなど、マス目に納まらない存在を無視しているのは確実でしょう。
もう少し力を蓄えてみては。
0785デフォルトの名無しさん
2008/06/23(月) 13:18:10そういう命令があるってだけで、丸めフラグを有効にする命令も両方用意されてるんじゃないの
0786デフォルトの名無しさん
2008/06/23(月) 20:24:35どうもありがとうございました!遅れてスミマセン
その方法でやってみたのですが、
http://www.geocities.jp/kenji_y0328/crenshu/renshu/r034.html
この様にしたいんですけど
while(1){
puts("営業所を入力");
scanf("%s", eigyou);
if(strcmp(eigyou,"end") == 0){
break;
}
puts("金額を入力");
scanf("%d", &kingaku);
kensu++;
strcpy(eigyou_t[kensu],eigyou);
kingaku_t[kensu] = kingaku;
}
としたら、whileの中のkensuがうまく足されないのか、出力結果が最終的に入力したものだけが全て出て、
おかしなことになります。。。上記の方法では、kensu++は0→1、次の入力でまた0→1となってしまうのでしょうか?
質問の仕方が下手でスミマセン・・・よろしくお願いします・・・
0787デフォルトの名無しさん
2008/06/23(月) 21:28:08その入力内容と出力結果を貼れ
あと配列の添字は0スタートだってことを忘れるな
0788デフォルトの名無しさん
2008/06/23(月) 21:31:23全部貼るが吉
0789デフォルトの名無しさん
2008/06/23(月) 21:36:480790デフォルトの名無しさん
2008/06/23(月) 21:39:10strcpy(eigyou_t[kensu],eigyou);
で、kensuだからダメ
0791デフォルトの名無しさん
2008/06/23(月) 21:43:470793790
2008/06/23(月) 21:57:20puts("金額を入力");
scanf("%d", &kingaku);
strcpy(eigyou_t[kensu],eigyou);
kingaku_t[kensu] = kingaku;
kensu++;
0794デフォルトの名無しさん
2008/06/23(月) 22:26:11あとポインタにインクリメントしたらどうなっているのでしょうか?
0795デフォルトの名無しさん
2008/06/23(月) 22:32:580796デフォルトの名無しさん
2008/06/23(月) 22:38:58「ポインタを」じゃなくて「ポインタに」でいいんだな?
ならポインタが指し示す内容に、1足される
0797デフォルトの名無しさん
2008/06/23(月) 22:41:450798デフォルトの名無しさん
2008/06/23(月) 23:02:08配列の名前とはメモリ上の連続した領域につけられた名前のこと
ポインタとはあるオブジェクトを指し示すことができるオブジェクトのことで
互いに全然違うもの
ただし、配列へのアクセスが実際にはポインタ(の値)によって行われるため
両者が似たものに見えることが多い
配列の名前がポインタに成り下がる件については>>461を参照
0799デフォルトの名無しさん
2008/06/24(火) 06:02:44確かにポインタは名前ではありませんね。
値であり、名前と異なり、プログラム中でユニークな保存性を持ちます。
ポインタを変化させて無名な変数にもアクセスすることが出来る
わけですね。
それでは、配列とポインタの相違は何でしょうか?
0800786
2008/06/24(火) 06:09:42今からはらせていただきます
#include <stdio.h>
#include <string.h>
int main(void){
int i, j, kingaku, kingaku_t[10], kensu;
int jun[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
char eigyou[20], eigyou_t[10][20];
kensu = 0;
while(1){
puts("営業所を入力");
scanf("%s", eigyou);
if(strcmp(eigyou,"end") == 0){
break;
}
puts("金額を入力");
scanf("%d", &kingaku);
kensu++;
strcpy(eigyou_t[kensu],eigyou);
kingaku_t[kensu] = kingaku;
}
0801786
2008/06/24(火) 06:11:33for(j = 1; j <= kensu; j++){
if(kingaku_t[j] < kingaku_t[i]){
jun[j]++;
}
}
}
printf("________________________________________\n");/*半角40*/
printf(" 営業所 売上金額 順位 \n");
printf("========================================\n");
for(i = 1;i <= kensu; i++ ){
printf(" %6s %8d %8d\n",
eigyou_t[kensu], kingaku_t[kensu], jun[kensu]);
}
printf("=========================================\n");
return 0;
}
以上です・・・。出力結果は、たとえば3件入力したら3件とも同じ値になってしまうとです・・・
順位も1から変動しないのです。kensu++が反応してくれないみたいなんですが、どうしでかがわからんのです・・・ウッウッ
0802786
2008/06/24(火) 06:12:420803デフォルトの名無しさん
2008/06/24(火) 06:16:33じゃなくて
eigyou_t[i], kingaku_t[i], jun[i]
だろ
0804デフォルトの名無しさん
2008/06/24(火) 06:23:10>for(i = 1; j <= kensu; i++){
じゃなくて
for(i = 1; i <= kensu; i++){
な。
0805デフォルトの名無しさん
2008/06/24(火) 07:16:22どこが間違ってるのかわからないのに、ソース全部あげないでここが間違ってると思うとか
寝言を言う初心者っていなくならないだろうな。
0806786
2008/06/24(火) 10:11:28そこですか・・・・・・すみませんでした・・・・・・問題なくコンパイルできたんで、全然頭になかった・・・
思い込んでましたすみません・・・ご迷惑おかけしましたありがとうございました・・・
0807デフォルトの名無しさん
2008/06/24(火) 10:46:500808デフォルトの名無しさん
2008/06/24(火) 11:13:530809デフォルトの名無しさん
2008/06/24(火) 11:44:37配列は配列だしポインタはポインタだし。
配列しかもち得ない情報(ex.要素数)をポインタから知る事はできない。
0810デフォルトの名無しさん
2008/06/24(火) 12:57:24配列とはメモリ上に名前つきで確保された連続した領域のこと
ポインタとはあるオブジェクトを指し示すことができるオブジェクトのことで
互いに全然違うもの
ただし、配列へのアクセスが実際にはポインタ(の値)によって行われるため
両者が似たものに見えることが多い
配列の名前がポインタに成り下がる件については>>461を参照
0811デフォルトの名無しさん
2008/06/24(火) 14:21:53printf("%zd =?= %zd =?= %zd =?= %zd", sizeof(a), sizeof(&*a), sizeof(&a[0]), sizeof(a+0));
0812デフォルトの名無しさん
2008/06/24(火) 21:39:20例:数値 0924 →09:24
09:24-08:24 = 01:00
0813デフォルトの名無しさん
2008/06/24(火) 21:42:330814デフォルトの名無しさん
2008/06/24(火) 21:49:521時間は何分でしょう
0815デフォルトの名無しさん
2008/06/24(火) 22:05:310816デフォルトの名無しさん
2008/06/24(火) 22:08:22紙を1回折り曲げ、角度が90度になるように開いたときにできるカーブを第一次ドラゴンカーブという。
更に紙を1回折り曲げ、角度が90度になるように開いたときにできるカーブを第二次ドラゴンカーブという。
ドラゴンカーブはこんなカーブ
ttp://image.blog.livedoor.jp/shi_yu_mi33/imgs/3/5/35dbf174.jpg
ドラゴンカーブはL(左)とR(右)で表現することができる。
数字は折り曲げた回数
1=L (直線→左に曲がる→直線)
2=LLR (直線→左→直線→左→直線→右→直線)
3=LLRLLRR (同様)
4=LLRLLRRLLLRRLRR
・
・
n=
これを9回まで出力するようなプログラムを再帰呼び出し等をうまく活用して作成せよ。
【考え方】
・最初はL。
・n番目を求めるとき、n-1を呼び出してこれにLを加える。更にまたn-1を呼び出してこれのLをRに、RをLに変換して逆順に並べてつなげる。
自信ある人はやってみてね。回答は数日後に
0817デフォルトの名無しさん
2008/06/24(火) 22:49:00名前なしの配列もあるのでお忘れなく。
0818デフォルトの名無しさん
2008/06/24(火) 23:14:54重なりチェックとかもすんの?
0819デフォルトの名無しさん
2008/06/24(火) 23:35:15int size;
size = sizeof(a) / sizeof(a[0]);
で配列の個数が求められるのはわかるけど、sizeof(a[0])の0というのが
どうも気持ちが悪いのですが。どうして?
0820デフォルトの名無しさん
2008/06/24(火) 23:38:41嫌ならsizeof(int)でもどうぞ。
0821デフォルトの名無しさん
2008/06/24(火) 23:45:160822デフォルトの名無しさん
2008/06/24(火) 23:52:36sizeof 変数
を使い分ける人はどのくらいいるのだろ。
何も考えず( )をつけるのが普通だと思うけど。
0823デフォルトの名無しさん
2008/06/25(水) 00:01:15名前なしの配列ってどういうのですか?
>>821
それいいですね、すっきりしました。
sizeof(a) / sizeof(int)だと配列の全体÷intの幅なので気持ち悪いですよね。
sizeof(a) / sizeof(*a)だと全体÷部分=個数っていう理屈に合っていていい
感じです。
すっごく、どうでもいいこだわりですけどね。
0824デフォルトの名無しさん
2008/06/25(水) 00:12:52個数を定数なり変数なりで管理して、それを使えばいいと思うんだが。
0825デフォルトの名無しさん
2008/06/25(水) 00:23:110826デフォルトの名無しさん
2008/06/25(水) 00:23:25固定値のみの配列に対して処理するときによく使う。デバイスドライバ
でよく見るな。
0827デフォルトの名無しさん
2008/06/25(水) 00:24:47コードの実行自体にはなんの関係もないが。
0828デフォルトの名無しさん
2008/06/25(水) 00:25:28本に載ってたFFTのソースなんですが、コンパイルがとおりません。
VS2008、BCCともにダメでした・・・
0829デフォルトの名無しさん
2008/06/25(水) 00:31:03エラーメッセージは?
コンパイル時でもプログラムの実行時でもそうだが、
なにかトラブルがあったらトラブルに関する情報を収集しておくこと。
コンパイル時はエラーメッセージ。
これは基本中の基本。
0830デフォルトの名無しさん
2008/06/25(水) 00:31:19まさかmainが無いだけじゃないだろうな?
0831デフォルトの名無しさん
2008/06/25(水) 00:35:10\fft.c(8) : error C2054: 'inline' の後に '(' が必要です。
\fft.c(8) : error C2085: 'swap' : 仮パラメータ リスト内にありません。
\fft.c(14) : error C2082: 仮パラメータ 'fft_table' が再定義されました。
\fft.c(14) : error C2143: 構文エラー : ';' が '{' の前にありません。
\fft.c(104) : warning C4013: 関数 'swap' は定義されていません。int 型の値を返す外部関数と見なします。
\fft.c(110) : error C2054: 'inline' の後に '(' が必要です。
\fft.c(111) : error C2082: 仮パラメータ 'swap' が再定義されました。
\fft.c(111) : error C2143: 構文エラー : ';' が '{' の前にありません。
こんなかんじです
0832デフォルトの名無しさん
2008/06/25(水) 00:40:02inline void swap(float *a, float *b)
を
void swap(float *a, float *b)
にしたら、コンパイルが通ったりして(2箇所)
0833デフォルトの名無しさん
2008/06/25(水) 00:41:40・inlineをソースから削る
・拡張子をcppにしてコンパイルする
好きなのを選べ
0834デフォルトの名無しさん
2008/06/25(水) 00:46:43>>833
できました!
VSはC99対応してないんですねー
動作には影響しないんですか?
0835デフォルトの名無しさん
2008/06/25(水) 01:07:46>>834
inline展開をやめて関数コールにしたわけだから、関数コールのオーバーヘッドにより
処理時間が長くなる。どのくらい長くなるかは、FFTの分解能(ループの回数)による。
C++はinlineをサポートしているので、ファイル拡張子をcからcppに変更して
C++でコンパイルすればOKかな?(>>833の指摘3番目)
Cのままにしたいのなら#defineマクロかな?
#define swap(a,b) { float temp = a; a = b; b = temp; }
0836デフォルトの名無しさん
2008/06/25(水) 01:08:17n=5以降も参考に乗っけてもらえませんか?
結果があっているかの確認のため
0837デフォルトの名無しさん
2008/06/25(水) 01:19:47あ、そうそう
VCには_inlineがあったはず
inlineを_inlineに変えてみたら
0838デフォルトの名無しさん
2008/06/25(水) 01:21:53inlineつけなくても最適化で展開されるんじゃね?
0839デフォルトの名無しさん
2008/06/25(水) 01:59:054つめまでであってれば、後は大丈夫じゃね?
0840デフォルトの名無しさん
2008/06/25(水) 04:33:52カーネルや標準ライブラリ関数やSVCも含みますか?
0841デフォルトの名無しさん
2008/06/25(水) 05:01:040842デフォルトの名無しさん
2008/06/25(水) 05:39:54void dra(int n)
{
int i, j;
char *p = calloc(1<<n, 1);
for(i=0; i<n; i++) {
int l = 1 << i;
p[l-1] = 'L';
for(j=0; j<l-1; j++) p[2*l-2-j] = 'L' + 'R' - p[j];
}
puts(p);
free(p);
}
0843デフォルトの名無しさん
2008/06/25(水) 05:47:24p[l] = 'L';
for(j=0; j<l; j++) p[2*l-j] = 'L' + 'R' - p[j];
の方がいいな。
0844デフォルトの名無しさん
2008/06/25(水) 06:58:570845デフォルトの名無しさん
2008/06/25(水) 07:11:440846844
2008/06/25(水) 07:14:18へーこういう方法で可能なんですね。
ありがとうございます。
0847デフォルトの名無しさん
2008/06/25(水) 10:29:06ぼるじょあ宿題スレで見た気がする
0848デフォルトの名無しさん
2008/06/25(水) 14:10:44int main(void)
{
char ch;
float f;
double d;
ch = 'X';
f = 100.123;
d = 123.009;
printf("chは %c、", ch);
printf("fは %f、", f);
printf("dは %f", d);
return 0;
}
ハーバード・シルト著、トップスタジオ訳、柏原正三監修 『独習C 第4版』 翔泳社より
これをコンパイルすると、数値が小数第6位まで表示されてしまうのはなぜでしょうか。
なお、使っているコンパイラは 『Borland C++ Compiler5.5』 です。
0849デフォルトの名無しさん
2008/06/25(水) 14:14:42デフォルトでは小数点以下6桁まで表示することになっているから
3桁まで表示したい場合には書式指定すればよい
%.3f
0850デフォルトの名無しさん
2008/06/25(水) 14:16:05"%f"より"%g"を使おう。
0851デフォルトの名無しさん
2008/06/25(水) 14:17:37小数点の後の桁数は、精度で指定された値となる。
精度が指定されていない場合には 6 として扱われる。
精度として明示的に 0 が指定されたときには、小数点以下は表示されない。
0852デフォルトの名無しさん
2008/06/25(水) 14:53:56ソースファイルにmain.cとfunc.cという2つのファイルがあります。
main.cの中でfunc.cの中で定義している関数を使おうとすると、定義されていません とエラーになってしまいます。
解決法を教えてください
0853デフォルトの名無しさん
2008/06/25(水) 15:07:24main.c に直接書いてもいいけど、通常はfunc.h に書いておいてmain.cで #includeする。
0854デフォルトの名無しさん
2008/06/25(水) 15:08:33main.c の中から必要な関数の宣言を見ることができるようにしなければならない。
具体的には、ヘッダファイル func.h を作成して関数宣言(関数プロトタイプ)をその中に記述し、
main.c の中で #include "func.h" として取り込む。
なお、間違っても #include "func.c" としてはいけない。本来は隠しておくべき func.c 内部の
ローカルな要素が main.c から丸見えになって、問題を起こす可能性が高くなる。
外部に公開したい要素だけをヘッダファイルに入れ、それを必要なソースファイルが #include すること。
また、func.c 自身も #include "func.h" しておく。
こうすることで、外部向けの宣言が内部の定義と食い違っていたときにコンパイラが警告を出してくれる。
0855デフォルトの名無しさん
2008/06/25(水) 15:10:35>>854
どうも。
#include func.cにしたら多重定義とかでおこられましたww
0857デフォルトの名無しさん
2008/06/25(水) 17:20:35これどうにかならない?
あと実際には存在しないpath(root\ d d \ v c t o o l s \ c r t _ b l d \ s e l f _ x 8 6 \ c r t \ s r c \ c r t e x e . c)も書いてあった
何これ?
0858デフォルトの名無しさん
2008/06/25(水) 17:45:47ランタイムライブラリに入ってたんだろう。
0859デフォルトの名無しさん
2008/06/25(水) 18:26:53#include<string.h>
int main(void)
{
int i;
char str[101]="1234567890",str2[101];
for(i=1;i<=10;i++){
memset(str2,0,strlen(str2));
memmove(str2,str,i);
printf("str2=%s\n",str2);
}
return 0;
}
i=5のときだけゴミが入るのは何ででしょうか?
0860デフォルトの名無しさん
2008/06/25(水) 18:30:21初期化してないstr2で strlen(str2) は無いだろう。
sizeof str2 でどうか。
0861デフォルトの名無しさん
2008/06/25(水) 18:52:550862デフォルトの名無しさん
2008/06/25(水) 19:24:40例えば1を渡すと16843009が入っていました。
0と-1はそのまま入っていたのですが。
0863デフォルトの名無しさん
2008/06/25(水) 19:30:39例えそのmemsetのようにEOFが関係しないものであっても。
0864862
2008/06/25(水) 19:53:23返答ありがとうございます。
そういう決まりごとなんですか。
ということはintで受け取ったものをcharに変換しているということですよね?
なのに第一引数がvoid型へのポインタなのはなんか変な感じがしますね。
0865デフォルトの名無しさん
2008/06/25(水) 19:59:260x01010101 == 16853009
>>863
Cではchar型は関数の引数に渡せない。(integral promotion)
0866デフォルトの名無しさん
2008/06/25(水) 20:00:570867デフォルトの名無しさん
2008/06/25(水) 20:01:510868デフォルトの名無しさん
2008/06/25(水) 20:07:050869デフォルトの名無しさん
2008/06/25(水) 20:28:310870デフォルトの名無しさん
2008/06/25(水) 21:23:43なぜでしょうか?
0871デフォルトの名無しさん
2008/06/25(水) 21:29:23昔は char * な実装もありました。
memset() の機能が 1 byte 単位で値を設定するものですから、ポインタの指す先の正体をとやかくいう必要はないわけで。
0872デフォルトの名無しさん
2008/06/25(水) 21:30:50「誤った記述」「暴走」「クラッシュ」の定義によって答えも変わると思います。
0873デフォルトの名無しさん
2008/06/25(水) 21:33:46ん、たしかに。
文脈依存でしょうね。
鋭い指摘ですね。
0874デフォルトの名無しさん
2008/06/25(水) 21:33:47char*だったのは昔void*がなかったという理由のほうが大きい。
0875デフォルトの名無しさん
2008/06/25(水) 21:47:56void printTest(double value)
{
printf("%f %g\n", value);
}
こういう関数でも作って、
printTest(0);
printTest(1);
printTest(1e100);
printTest(1e-10);
とでも呼んでみて、気に入った方を使えばいいと思うよ。
実験的には、引き数をdouble valueではなくfloat valueにしたらもっと違いが判るかもしれない。
0876デフォルトの名無しさん
2008/06/25(水) 22:03:25実行すると以下のようになりました。
%gだと0が0と表示されなくなるってことですか?
0.000000 6.64584e-316
1.000000 6.64584e-316
10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104.000000 1.19819e-127
0.000000 -6.27769e+124
0877875
2008/06/25(水) 22:05:060878875
2008/06/25(水) 22:05:49何度も失敬。
0879デフォルトの名無しさん
2008/06/25(水) 22:11:40ん、確かにいいかんじですねぇ。
#include <stdio.h>
#include <stdlib.h>
void printTest(float value) { printf("%.12e %.12f %.12g\n", value, value, value); }
int main()
{
printTest(0);
printTest(1);
printTest(1.0 / 3);
printTest(1e10);
putchar('\n');
printTest(1e-10);
printTest(1e-9);
printTest(1e-8);
printTest(1e-7);
printTest(1e-6);
printTest(1e-5);
printTest(1e-4);
printTest(1e-3);
printTest(1e-2);
printTest(1e-1);
printTest(1e-0);
return 0;
}
/* end */
0880デフォルトの名無しさん
2008/06/25(水) 22:22:31好みの問題、ということでいいのではないでしょうか、私は好きになりましたが。
0881デフォルトの名無しさん
2008/06/25(水) 22:41:33n回目まの結果を載せたらN+1回目も欲しいな?
なんて帰納法?
0882デフォルトの名無しさん
2008/06/25(水) 23:02:580883デフォルトの名無しさん
2008/06/25(水) 23:23:20浮動小数点演算のオーバーフローとアンダーフローのことですか?
0884デフォルトの名無しさん
2008/06/25(水) 23:29:08私も知りたいです。最近は matherr() が使えないようで、困っています。
0885デフォルトの名無しさん
2008/06/25(水) 23:45:340886デフォルトの名無しさん
2008/06/25(水) 23:54:440887デフォルトの名無しさん
2008/06/26(木) 00:27:14Cで三角関数を計算させることはできるのですが、C++で同じことをしようとすると、
error C2668: 'sin' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(577): 'long double sin(long double)' の可能性があります。
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(529): または 'float sin(float)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(124): または 'double sin(double)'
1> 引数リスト '(int)' を一致させようとしているとき
と出てしまいコンパイルエラーが起きてしまいます。
オーバーロードについても調べてみたのですが、曖昧なのが原因なので、
明示的にキャストすることでこのような問題を避けることができる といことがわかったのですが
それ以降がさっぱりな状況です。
Cから学んでいるため、正直なところC++が根本から分かってないという感じもしますが・・・
よろしくお願いします。
0888デフォルトの名無しさん
2008/06/26(木) 00:30:18スレ違い。まぁ、sin(0)ではなくsin(0.)にしろってこった。
0889デフォルトの名無しさん
2008/06/26(木) 00:33:37固定長テキストをレコードで切り分けて文字列として格納したいなら
レコード単位で読み取って整形する
そのまま構造体に放り込みたいだけなら単にfreadを使えば済む
ただし改行がある場合は注意
>>887
引数に与えた値の型を特定できないという意味
詳しくはC++スレで聞け
0890デフォルトの名無しさん
2008/06/26(木) 00:34:060892デフォルトの名無しさん
2008/06/26(木) 00:43:33ここのfftsg.cの使い方がイマイチわかりません。
DFTしたいんですが
rdft(n, -1, a, ip, w)で定義されてます。
nはFFTのサイズ
aはFFT後の値を格納する配列
ipとwは作業用らしいですが、そのサイズをどのぐらいとればいいかわかりません。ご教授ねがいます
0893デフォルトの名無しさん
2008/06/26(木) 01:00:28コメントで説明があるよ
■ip[0...*]
length of ip >= 2+sqrt(n/4)
strictly,
length of ip >= 2+(1<<(int)(log(n/4+0.5)/log(2))/2).
■w[0...n*5/8-1]
0894デフォルトの名無しさん
2008/06/26(木) 01:01:552+sqrt(n/4)より大きいって書いてあるのがひっかかって
0895デフォルトの名無しさん
2008/06/26(木) 01:05:42追加
ip[2+sqrt(n/4)]、w[n*5/8]でいいんじゃないかな
心配だったら倍にしておくw
0896デフォルトの名無しさん
2008/06/26(木) 01:08:15了解です
使い方なんですが、
実信号がx[n]にはいってたら、
rdft(n, -1, x, ip, w)を実行したら
x[n]の配列にFFTした値が入ってるってことですか?
添え字が偶数に実部で、奇数のところに虚部がって
0897デフォルトの名無しさん
2008/06/26(木) 01:08:24配列のサイズが2+sqrt(n/4)以上ならOKということ
2+sqrt(n/4)を超える部分は単に使われないということ
0898デフォルトの名無しさん
2008/06/26(木) 01:09:56なるほど!
0899デフォルトの名無しさん
2008/06/26(木) 01:31:35x[n]に実信号を格納しておいて、rdft(n, 1, x, ip, w)でDFT実行。
結果はx[n]に上書きされて、添え字が偶数に実部で、奇数のところに虚部が格納される。
rdft(n, -1, x, ip, w)で逆DFT実行。x[n]に実信号が格納される。
です。
0900デフォルトの名無しさん
2008/06/26(木) 06:28:100901デフォルトの名無しさん
2008/06/26(木) 06:33:560902デフォルトの名無しさん
2008/06/26(木) 06:34:17知りたくなったところから調べればよい。
0903デフォルトの名無しさん
2008/06/26(木) 06:35:04普段だろうと何気なくだろうと、今後はやめとけ、な?
バッファオーバー蘭姉ちゃんの問題が指摘されているから。
0904デフォルトの名無しさん
2008/06/26(木) 07:30:23バーローw
0905デフォルトの名無しさん
2008/06/26(木) 07:38:490906デフォルトの名無しさん
2008/06/26(木) 07:39:16他にも危険な関数とかありますか?
0907デフォルトの名無しさん
2008/06/26(木) 07:44:25strcpy(*str1,*str2);
str2がstr2より長い場合、これまたバーローになるw
0908デフォルトの名無しさん
2008/06/26(木) 07:45:380909デフォルトの名無しさん
2008/06/26(木) 07:48:240910デフォルトの名無しさん
2008/06/26(木) 07:48:480911デフォルトの名無しさん
2008/06/26(木) 07:53:00> 常識的な範囲
何が常識かも言わずにそれは無い。どうしたら起こるか?
で話を理解してくれ。結局、そういうコードはあふれ出てしまう
欠陥を持ち合わせているため、変数を適当に変えればいつでも
不正な動作に出来る欠陥品ってことさ。
0912デフォルトの名無しさん
2008/06/26(木) 07:56:03そっち使えばいいのにわざわざ危険な関数使う意味は無いな
0913デフォルトの名無しさん
2008/06/26(木) 08:03:35予期しないでかいデータを入力したらぶっ飛ぶようなプログラムは五万とある。
でも、それは必ずしも不正なプログラムではない。
0914デフォルトの名無しさん
2008/06/26(木) 08:04:430915デフォルトの名無しさん
2008/06/26(木) 08:05:23ユーザが必ずしもその仕様を知っているとは限らない。プログラマ側が適切に
処置を施す必要があるわけだから、何を 常識 かなんて、自分の都合で
言われても、通用しないんだなぁ、これが。
0916デフォルトの名無しさん
2008/06/26(木) 08:07:15ちょっと頂けない意見だな。君は脆弱性を残し、穴を開けたままにしておくのか?
プログラマとしてではなく、他へ行っても通用しない意見だぞ。言動を慎め。
ってか、宿題スレの一言居士か、君は?
0917デフォルトの名無しさん
2008/06/26(木) 08:10:27何を基準に 予期していない としているんだね?
自分の知識や経験で考えられるものじゃ駄目だぞ。
そのもの自身が受けるもの全て、あるいは限度で考えてみるべきだし
例え巨大なデータでも、処理に時間は掛かるが当然それに応じた
対策はしてあるものもあるでしょ。昔は穴だらけだったが、それも
ユーザからの報告で、徐々に解消されてきたんだから。
少なくとも、視野の狭い自分が考えられる範囲内で物を言っても
結局穴があれば突かれて当然だろ?
にしても、まだ君は gets を擁護するのかね?あのスレでも
最後の方で叩かれたのに?向いてないぜ、あんた?
0918デフォルトの名無しさん
2008/06/26(木) 08:40:000919デフォルトの名無しさん
2008/06/26(木) 08:46:000920デフォルトの名無しさん
2008/06/26(木) 08:47:31092289
2008/06/26(木) 11:41:48手計算でDFTしたい値と、このライブラリをつかったDFTの計算値が一致しないんですがなんででしょうか?
信号列 x[n]={5.9, 0.5, -6.1, 0.5}とすると
DFT値は
X0=(1/4)*(5.9+0.5-6.1+0.5)=2
X1=3
X2=-0.3
X3=3
になると思うんですが、
rdft(n, 1, x, ip, w)を使った計算結果が一致しないんです。
0923デフォルトの名無しさん
2008/06/26(木) 12:52:57誤差は当然のように出てくるし、何度も加減乗除を繰り返す高度な数値計算では
とうぜんその誤差は積み重なってでかいものになってくる
092489
2008/06/26(木) 12:57:180925デフォルトの名無しさん
2008/06/26(木) 13:26:100926デフォルトの名無しさん
2008/06/26(木) 16:14:43うーん。
危険なものが事件を起こさないことが保証されている場面においては
安全策のコストがない分速いんだよね
事故を起こす可能性がある場面においては安全なものを使用すればいい
0927デフォルトの名無しさん
2008/06/26(木) 16:17:40>>917は対策してあるものもあるといっている
なんら対立する理由がないと思うんだが、なんで喧嘩腰?おちつけってw
0928デフォルトの名無しさん
2008/06/26(木) 17:02:20main関数内にそのまま解放部分を書くとエラーが出ません。
何故エラーが出るのかが分かりません。
/* 解放部分自作関数化 */
void DeleteHeap(char ***ptr) {
for(int i=0; i < 2; i++) {
free(ptr[i]);
ptr[i] = NULL;
}
free(*ptr);
*ptr = NULL;
}
int main()
{
char **ptr;
ptr = (char **)malloc(sizeof(char *) * 2);
for(int i=0; i<5; i++) {
ptr[i] = (char *)malloc(sizeof(char) * 5);
}
strcpy(ptr[0],"ABC");
strcpy(ptr[1],"EFG");
/* 解放部分 */
for(int i=0; i < 2; i++) {
free(ptr[i]);
ptr[i] = NULL;
}
free(*ptr);
*ptr = NULL;
return 0;
}
0929デフォルトの名無しさん
2008/06/26(木) 17:06:06あとvoid型なんだからreturnは消そう
0930デフォルトの名無しさん
2008/06/26(木) 17:09:510931デフォルトの名無しさん
2008/06/26(木) 17:10:24そして、
free(ptr);
ptr = NULL;
DeleteHeapの引数も*2個でいいのでは
0932デフォルトの名無しさん
2008/06/26(木) 17:10:54:
:
:
:return 0;
}
0933931
2008/06/26(木) 17:16:49DeleteHeapの中の
free(ptr[i]);
ptr[i] = NULL;
は
free((*ptr)[i]);
(*ptr)[i] = NULL;
これでどう
0934デフォルトの名無しさん
2008/06/26(木) 17:16:56としてみたけど特にエラーは出なかったよ。
もとのfree処理を残したままだと2重解放でダメだけど、どうかな。
0935デフォルトの名無しさん
2008/06/26(木) 17:17:21日本語で書いてみるのが早道かも。
main()関数仕様
1.char *型要素の大きさ2の配列を確保しそのポインタを
ptrにセット。
2.1.で確保したchar*配列の0番目から4番目の要素に対し
char型の大きさ5の配列を確保しそのポインタをptr[i]
(i=0..4)にセット(i=2,3,4はアクセス不能領域を指しているが
無視する)
3.ptr[0],ptr[1]に"ABC","EFG"を設定
4.ptr[i](i=0,1)を解放
5.ptr自体が指している大きさ2のchar*配列を解放
(この時メモリリーク( ptr[2] ptr[3] ptr[4])が発生している)
2.の操作に問題があると思われ。他の箇所には問題がないような
感じ
0936デフォルトの名無しさん
2008/06/26(木) 17:40:32グローバル変数にしたところ問題は解決しました。
解決出来たのですが、解決出来た理由が分かりません。
>>931
forループ内iは2でした。すみません。
main内の解放処理を
free(ptr);
ptr = NULL;にしてみました。
>>エラー内容
プロジェクトX.exeの0x00413733でハンドルされていない例外が発生しました。
0xC0000005:場所0x00000000を読み込み中にアクセス違反が発生しました。
というダイアログが出ました。
>>933
解決出来ました。
解決出来たのですが、解決出来た理由が分かりません。
>>934
私の環境はVS2005,WindowsXPですが、
DeleteHeap関数呼び出しの際はmain関数内の解放処理は省いています。
0937デフォルトの名無しさん
2008/06/26(木) 17:42:57優先順位表を確認だ。
*ptr[1] と (*ptr)[1] は違うぞ(0はたまたま同じだが)
0939デフォルトの名無しさん
2008/06/26(木) 19:15:45次は何をすべきですか?
0940デフォルトの名無しさん
2008/06/26(木) 19:15:58就職
0941デフォルトの名無しさん
2008/06/26(木) 19:18:22このプログラムについて質問です
コンパイラは何のエラーメッセージも出さないんですが
実行するとちゃんと動きません
問題点の指摘お願いします
0942デフォルトの名無しさん
2008/06/26(木) 19:31:31次はputs("good-by world!")を覚えましょう
0943930
2008/06/26(木) 19:37:24void fx(void);
int main()
{
FILE *fw=fopen("samp.txt","w");
fx();
return 0;
}
void fx(void)
{
fclose(fw);
}
これと似たようなもん
0944デフォルトの名無しさん
2008/06/26(木) 19:40:060945デフォルトの名無しさん
2008/06/26(木) 19:43:21void input(goods *mono);//価格の入力
void input(goods*){
この辺、変かな。
あと、グロバールとローカルの変数名一緒はやめたが良いよ。
0946デフォルトの名無しさん
2008/06/26(木) 19:55:47ポインタを通して操作している実体がなんであるかを確認しないで処理をしているからである。
void DeleteHeap(char ***ptr) {
for(int i=0; i < 2; i++) {
free(ptr[i]);
ptr[i] = NULL;
}
free(*ptr);
*ptr = NULL;
}
ここで *ptr は、「 ptr の指している char ** 型の変数」であり、malloc() された領域を指している。
だから free(*ptr) は正しい。
しかし、ptr[i] は、「 ptr の指している char ** 型の変数から数えて i 番目の char ** 型の変数」である。
そして、たぶんその変数は実際には存在しない。だから free(ptr[i]) したり ptr[i]=NULL としたら、問題がおきる。
本当にやりたいことは、「 ptr の指している char ** 型の変数が指している char * 型の変数から数えて i 番目の char * 型の変数」が
指している領域を開放することである。そこで正しいコードは free((*ptr)[i]) となる。
0947デフォルトの名無しさん
2008/06/26(木) 20:06:17一応直してみたよ。変えたとこはコメントつけてます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7088.txt
0948デフォルトの名無しさん
2008/06/26(木) 20:16:57> コンパイラは何のエラーメッセージも出さないんですが
修正は947がやってくれてるけど、元のはgcc4.2.3で
c:38: error: parameter name omitted
って出る。 使ってるコンパイラが何か気になる。
0949デフォルトの名無しさん
2008/06/26(木) 21:24:19ありがとうございました
スペルミスの訂正だけで一応動くことは動きましたが
他にも色々改善すべきところがあったんですね
ってか&と%間違ってたとか全然ダメダメですね
>>948
borland c++ 5.5.1です
gccってやつがかなりメジャーっぽいのでそっちにしとけばよかったかと思うこともあったりなかったりです
0950デフォルトの名無しさん
2008/06/26(木) 21:39:14[記憶クラス指定子] [戻り値型]
[関数名] [引数]
のような書き方、例えば
static int
foo(void);
この戻り値型の次を一行開けている場合がありますが、
何か意味があるのですか?
0951デフォルトの名無しさん
2008/06/26(木) 21:44:590952デフォルトの名無しさん
2008/06/26(木) 21:45:14スタイルの問題はあまり意味を考えないほうが良いよ。だいたいくだら
ないから。
0953デフォルトの名無しさん
2008/06/26(木) 21:48:07おそらく、関数名を見つけやすいというメリットからだろう。
そこんとこは、コーディングスタイル(規約)にかかわるところ。
俺がかつて見たのでは、関数の引数を行分けして、各行に引数のコメントを書くというのがあった。
int foo(
int n, /* ・・・ */
char* s /* ・・・ */
);
0954デフォルトの名無しさん
2008/06/26(木) 23:24:590955デフォルトの名無しさん
2008/06/27(金) 00:07:23ラインコメントでもいいけどね
0956デフォルトの名無しさん
2008/06/27(金) 00:19:00K&R時代の名残り(つーか、遺物)もよく使うな。
0957デフォルトの名無しさん
2008/06/27(金) 00:33:23char *old_p;
という変数があったとして、
new_p = old_p = malloc(sizeof(char));
と
old_p = malloc(sizeof(char));
new_p = old_p;
って同じことですよね?
0958デフォルトの名無しさん
2008/06/27(金) 00:38:55亀レスだが、n番目(n=1,2,3,...)はLRどちらかを計算。
#include <stdio.h>
#include <math.h>
char dra(int n){
while(n%2==0){n/=2;}
return (n%4==3)?'R':'L';
}
int main(void){
int i,order;
printf("位数 = ");
scanf("%d", &order);
for(i=1; i<pow(2,order); i++){
putchar(dra(i));
}
return 0;
}
0959デフォルトの名無しさん
2008/06/27(金) 00:54:54便乗
言われたように作ったつもりではある
付け加えるn-1の反転+逆って結局真ん中のLがRになるだけと認識
#include <stdio.h>
#define TRUE 1
#define FALSE 0
/*n:試行回数 is_rv:TRUE(正順) FALSE(反転+逆順指定)*/
void DragonCurve(int n,int is_rv){
if(1 == n){
printf("%s",(TRUE == is_rv)?"L":"R");
return;
}
DragonCurve(n-1,TRUE);
printf("%s",(TRUE == is_rv)?"L":"R");
DragonCurve(n-1,FALSE);
return;
}
int main(void){
int n;
do{
printf("整数を入力(0で終了):");
scanf("%d",&n);
DragonCurve(n,TRUE);
printf("\n");
}while(0 != n);
}
0960デフォルトの名無しさん
2008/06/27(金) 01:01:04じゃ、俺も便乗。
842をちょっと修正して、816の指定に合わせただけだけど。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, j, n;
char *p;
scanf("%d", &n);
p = calloc(1 << n, 1);
for(i=0; i<n; i++) {
int l = (1 << i) - 1;
p[l] = 'L';
for(j=1; j<=l; j++) p[l+j] = 'L' + 'R' - p[l-j];
printf("%d = %s\n", i+1, p);
}
free(p);
return 0;
}
0961デフォルトの名無しさん
2008/06/27(金) 01:04:32一般的にはそうです
0962デフォルトの名無しさん
2008/06/27(金) 03:53:56既に一般的に知られている問題点に対して、問題の起こらない
使い方をすりゃ良いとか、理解力の無い奴が口出しすると
泥沼に嵌る意味がよーく分かるわ。まだこいつ人生経験も浅い
青二才だろ。言動が自分勝手すぎ。この世の中で
自分の頭の中、自分の経験、知識、考察力なんてちっぽけなもんだぞ。
しかし、これは誰が何を言おうと、実際に起こるわかりきったトラブルだから
それが理解できないなら、プログラマーなんてやめとけ、適性がなく
自分が犯したミスもPCのせいにするんだろ?
0963デフォルトの名無しさん
2008/06/27(金) 04:23:14int main(void) {
char str[2][4];
printf("Input \"abcd\" > "); gets(str[0]);
printf("Input \"efgh\" > "); gets(str[1]);
printf("%p str[0] : %s\n",str[0],str[0]);
printf("%p str[1] : %s\n",str[1],str[1]);
return 0;
}
0964デフォルトの名無しさん
2008/06/27(金) 09:36:59おまえの知ったかにはあきれる
>>905の通りだと思うがな。
0965デフォルトの名無しさん
2008/06/27(金) 09:38:44プログラムには誤動作に対する許容度というものがある。
0966デフォルトの名無しさん
2008/06/27(金) 09:46:59PC再起動すれば直る問題もあるだろ
あんなんもダメなんか、短気だなおまえ
0967デフォルトの名無しさん
2008/06/27(金) 10:02:120968デフォルトの名無しさん
2008/06/27(金) 12:40:21関数には定義域というものがあってだな、定義域とその範囲内での動作が完全に定義されてればいいんだよ。
0969デフォルトの名無しさん
2008/06/27(金) 14:45:45おもしろいなあwためしにgetsが「なぜ」だめなのか説明してみて?
ぐぐれとか一般的にだめだといわれているからとかは望んでないからね。
0970デフォルトの名無しさん
2008/06/27(金) 16:42:360971ねこ
2008/06/27(金) 18:22:33プログラムはコピーさせてもらいました。なので、わからないことが多いです。
選ばれる数字は3桁で100から999です。なぜ、プログラムにはrand()%900+100;とかくのでしょうか。
教えてもらえますか??
これがプログラムです。
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int secret_number;
int guess_number;
int n, all;
all = 0;
while(1){
srand(time(NULL));
secret_number=rand()%900+100;
n = 0;
while(1){
printf("☆好きな数字を入力してね☆:");
scanf("%d",&guess_number);
if(guess_number !=secret_number){
printf("ぶー\n");
n++;
0972デフォルトの名無しさん
2008/06/27(金) 18:24:56その余りに100足せば100〜999と言うお望みの数になる
0973デフォルトの名無しさん
2008/06/27(金) 18:25:29これを 900で割った余りを求めれば、答えは 0から899までになるだろう。
それに100足すと、100から999までになるでしょ。
0974デフォルトの名無しさん
2008/06/27(金) 18:46:37char *p;
int n;
};
で、
main() {
struct hoge *a;
a = (struct hoge *)malloc(sizeof(struct hoge));
memset(a, 0, sizeof(struct hoge));
...
if (! a->p) {}
}
というようにメンバにポインタがある場合、構造体はmemsetで初期化してはいけないのでしょうか?
a->pはNULLで初期化されていないのでしょうか?
0975デフォルトの名無しさん
2008/06/27(金) 18:50:51俺は構造体にポインタがあってもまとめて0で初期化している
個別のポインタはNULLで初期化する
使ってるコンパイラは0とNULLが同じようだから気にしてないが
0976デフォルトの名無しさん
2008/06/27(金) 19:12:37NULL になるかもしれないし、ならないかもしれない
コンパイラによって異なる
コンパイラの違いに振り回されたくなければ a->p = NULL; などと書くべき
特定のコンパイラしか使わないと決めていて今後他のものに移植したりしないつもりなら別に構わないかも
0977デフォルトの名無しさん
2008/06/27(金) 19:47:29http://www.kouno.jp/home/c_faq/c1.html#30
0978デフォルトの名無しさん
2008/06/27(金) 19:48:33memsetでゼロを埋めたときにゼロになることを期待していいのは整数型だけ
それ以外のものは全てa->p=NULLとかa->f=0.0のように初期化するのが作法
そういうメンバが多くていちいち初期化して回るのがだるいという場合は、
初期化用のマクロを書くか、あるいはたとえばstruct hoge hoge_d={NULL,0};みたいな
グローバルな初期状態の構造体を作っておいて、*a=hoge_d;みたいにする
0979デフォルトの名無しさん
2008/06/27(金) 19:50:410980デフォルトの名無しさん
2008/06/27(金) 19:54:23ifに書き直したほうがいいですか?
0981デフォルトの名無しさん
2008/06/27(金) 19:56:07「場合によります」としかいえません
0982デフォルトの名無しさん
2008/06/27(金) 20:12:29ソース晒してみそ
0983デフォルトの名無しさん
2008/06/27(金) 20:14:07case 1:{
func1();
break;
}
}
このcaseがあと59個と別のfuncが59種類それぞれ
呼ばれます
0984デフォルトの名無しさん
2008/06/27(金) 20:15:25あと
case文に中括弧は要らない
0985デフォルトの名無しさん
2008/06/27(金) 20:17:31struct {
int (*func)(void);
} fs[] = {
NULL, /* 0 */
func1, /* 1 */
...
func60, /* 60 */
};
...
(*fs[state].func)();
...
0986デフォルトの名無しさん
2008/06/27(金) 20:24:330987デフォルトの名無しさん
2008/06/27(金) 20:42:50void (*func[61](void) =
{
func0,
func1,
func2,
};
func[state]( );
0988デフォルトの名無しさん
2008/06/27(金) 20:47:44case 2:func2();break;
みたいに横並びにすればswitchでもそんなに悪くない
値と関数名が対応してなさそうならむしろいい気もする
0989デフォルトの名無しさん
2008/06/27(金) 21:02:500990デフォルトの名無しさん
2008/06/27(金) 21:07:020991デフォルトの名無しさん
2008/06/27(金) 21:08:14十中八九テーブル作ってジャンプします
0992デフォルトの名無しさん
2008/06/27(金) 21:11:280993デフォルトの名無しさん
2008/06/27(金) 21:14:020994デフォルトの名無しさん
2008/06/27(金) 21:15:52数値が連続していて、負数とか配列サイズ以上の数値になる可能性がないならそれでもいいと思うよ
if 文でチェックしまくるよりは default 使ったほうがスッキリ(完全な主観です^^;)するから
0995デフォルトの名無しさん
2008/06/27(金) 21:17:170996デフォルトの名無しさん
2008/06/27(金) 21:26:42そうですね
----------
立てられなかった orz
誰か次スレよろしく
C言語なら俺に聞け(入門篇) Part 31
言語の入門者向け解説スレです。
教えて欲しいのではなく宿題を丸投げしたいならこちらへ。
C/C++の宿題を片付けます 110代目
http://pc11.2ch.net/test/read.cgi/tech/1213796455/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 30
http://pc11.2ch.net/test/read.cgi/tech/1213367888/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0997デフォルトの名無しさん
2008/06/27(金) 21:29:59関数呼出しが必要ない場合とか、、まあ考えてなさそうだからいいよねw
0998デフォルトの名無しさん
2008/06/27(金) 21:32:220999デフォルトの名無しさん
2008/06/27(金) 21:33:471000デフォルトの名無しさん
2008/06/27(金) 21:34:0710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。