C言語なら俺に聞け(入門篇) Part 30

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいならこちらへ。
 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
2デフォルトの名無しさん:2008/06/13(金) 23:38:32
3デフォルトの名無しさん:2008/06/13(金) 23:38:57
4デフォルトの名無しさん:2008/06/13(金) 23:43:46
otu>>1;
5:2008/06/13(金) 23:47:50
1,文字列に母音(a,i,u,e,o)が何個含まれているかをint型数値として返すような関数VowelNumber()を作成せよ。
また,この関数を使用して,キーボードから入力された文字列に
母音が何個含まれているかを表示するプログラムを作成せよ。


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文、配列などです。まだポインタは習っていません。
解説も少し加えてくれるとありがたいです。
よろしくお願いします。
6:2008/06/13(金) 23:48:41
>>5 すいません5でした。
7デフォルトの名無しさん:2008/06/13(金) 23:49:32
8デフォルトの名無しさん:2008/06/14(土) 00:16:08
>>前スレ994
float関数群が追加されたのはC95な。
9デフォルトの名無しさん:2008/06/14(土) 00:16:55
C95なんてあったのか。
10デフォルトの名無しさん:2008/06/14(土) 00:21:24
質問なのですが
数値演算ライブラリと数値計算ライブラリは同一のものなのでしょうか?
数値演算ライブラリと検索しても詳しく出てこなくて
よろしくお願いします
11デフォルトの名無しさん:2008/06/14(土) 00:25:19
日本語がわかるならそんくらい分かるだろ\・・
12:2008/06/14(土) 00:32:18
>>7
すいません
こちらへはURLをさしてたんですね…
13デフォルトの名無しさん:2008/06/14(土) 00:33:04
JavaScript なら俺に聞け、な?
14デフォルトの名無しさん:2008/06/14(土) 00:39:45
日本語能力に問題がありすぎる・・・
15デフォルトの名無しさん:2008/06/14(土) 00:44:06
数値演算ライブラリが何か知りたくて検索してみたのですが詳しく書いてあるサイトが無く
数値演算ライブラリと数値計算ライブラリが関係があるような記述があったので…
数値演算ライブラリとは何のことなのでしょうか
よろしくお願いします
16デフォルトの名無しさん:2008/06/14(土) 00:54:44
>>15
もし君がC言語の標準ライブラリのことを言っているのなら、それはたぶん数学関係ライブラリ <math.h> のことだ。
そうでないなら、それがどのようなものであるかは、すべてそのライブラリそのものに依存する。
ライブラリのマニュアルを読むこと。
17デフォルトの名無しさん:2008/06/14(土) 01:01:09
>>15
標準ライブラリの数値演算関数って事ですか、たぶん1年の初期の問題なんでこれなんだと思います
ありがとうございました。
18デフォルトの名無しさん:2008/06/14(土) 01:41:32
いきなり難解なやりとりだね
19デフォルトの名無しさん:2008/06/14(土) 02:09:31
CPUの命令セットにない高機能な数学用関数などを
実現するライブラリのコードとか入ってるんだよね

最近のCPUは浮動小数点用の高機能命令が増えた
から数値演算ライブラリそのものが小さくなってるけど、
昔のCPUは浮動小数点演算そのものの機能がなくて
エミュレータが入っていた

今も組み込み用CPUだと浮動小数点演算ができない
ものはたくさんある
20デフォルトの名無しさん:2008/06/14(土) 02:34:26
浮動小数点のビット列ってどういう法則になってるの?
21デフォルトの名無しさん:2008/06/14(土) 02:40:14
>>20
基本的にはIEEE754とIBMエクセス64形式があるけど
ちょっと長いけど下のリンクを印刷でもしてじっくり読んでくれ
必ず役に立つ

http://docs.sun.com/source/806-4847/ncg_goldberg.html
22デフォルトの名無しさん:2008/06/14(土) 02:45:13
単にIEEE754でぐぐってもよい
山ほど出てくる
23デフォルトの名無しさん:2008/06/14(土) 02:53:11
>>21
なんだか大変そうだけど俺頑張るよ父ちゃん!
24デフォルトの名無しさん: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になってしまいました。
25デフォルトの名無しさん:2008/06/14(土) 04:32:26
if(1<=i && i<=9)
26デフォルトの名無しさん:2008/06/14(土) 04:34:45
>>24
if()の中で,で区切って複数入れると一番右のものを判定する。
つまり、
if(i == 1,2,3,4,5,6,7,8,9) は if(9) と同じになり、9は真だから常にtrueになる。
27デフォルトの名無しさん:2008/06/14(土) 04:35:44
カンマ演算子で左から右に読んでって、最後に0以外である9が評価されて必ずtrueになってる
28デフォルトの名無しさん:2008/06/14(土) 04:36:20
>>25-26

おおっ!なるほど。
言われてみれば、そのとおりです。
ありがとうございました。
29デフォルトの名無しさん:2008/06/14(土) 04:37:01
>>27

trueのスペルも間違えてましたorz
みなさん本当に感謝です
30デフォルトの名無しさん:2008/06/14(土) 20:16:39
書き込みが無いな
31デフォルトの名無しさん:2008/06/14(土) 20:44:37
誰かB木のソースもってません?
実行時間比較したいんでお願いします
32デフォルトの名無しさん:2008/06/14(土) 20:57:40
>>31
C言語によるアルゴリズム事典(奥村晴彦)の付録のでは駄目なの?
手数料だけでフロッピーディスクで入手できるけど...
33デフォルトの名無しさん:2008/06/14(土) 21:03:02
>>31
STLじゃだめか?
34デフォルトの名無しさん:2008/06/14(土) 21:33:40
STL で使ってんのは赤黒木じゃなかったっけ?
35デフォルトの名無しさん:2008/06/14(土) 21:40:41
「B木」って「ビーき」なのかな。「〜木」はたいてい連濁させていたんだけど。
36デフォルトの名無しさん:2008/06/14(土) 21:42:39
びーぼく
37デフォルトの名無しさん:2008/06/14(土) 21:49:31
プログラミング言語CのことをC言語って言うことについてどう思いますか?
英語圏では単にCと呼ばれてるみたいなのですが。
話をする場合にはCと言っても問題ないと思うのですが。
JavaやC++の語尾に言語ってつけたりしませんよね?
Cだと一文字なので検索がしづらいということがありますが。
38デフォルトの名無しさん:2008/06/14(土) 22:00:58
だってCってsexの意味もあるじゃん
39デフォルトの名無しさん:2008/06/14(土) 22:01:41
ツェーとか言ってみる
40デフォルトの名無しさん:2008/06/14(土) 22:07:41
参考書 「はじめてのC」
41デフォルトの名無しさん:2008/06/14(土) 22:07:41
wikipediaは、最初「Java言語」だったけどそれじゃ変だろってことで「Java」に変更。
「C言語」も同様の提案があったけど、アホな人が頑張って「C言語」のまま。
42デフォルトの名無しさん:2008/06/14(土) 22:08:08
>>38
確かにそうですが、ある単語が複数の意味を持っているということはよくあることなので。
それに中学生ではないのでCと聞いてセックスって思いませんよ普通。
文脈からプログラミング言語なのかセックスなのか分かると思いますが。

# 「はじめてのC」という書籍があります。
43デフォルトの名無しさん:2008/06/14(土) 22:10:40
「はじめてのキス」という魚の本もあった。まさに釣られた。
44デフォルトの名無しさん:2008/06/14(土) 22:10:54
母なる大地
Cなる言語
言語C
観念ι
勇者ライディーン

「エスペラント語」みたいなもんでしょ。呼び名としてはわかりやすいからいいんじゃないの。

>英語圏では単にCと呼ばれてるみたいなのですが。

むしろ英語圏での「the C language」「the C programming language」を直訳したんじゃないのw
45デフォルトの名無しさん:2008/06/14(土) 22:12:26
>>41
それは正式名称は何かっていう議論だよね。あれはアホじゃないだろうかと思ったけど、
まあ世の中そういうものだと思う
46デフォルトの名無しさん:2008/06/14(土) 22:14:35
K&Rの演習をやってるんだけど、難しいです
これ一通り解けなきゃ何かを作るときとかまずいの?
47デフォルトの名無しさん:2008/06/14(土) 22:19:56
>>46
できあがるものはろくなもんじゃないだろうな
基礎は大事
48デフォルトの名無しさん:2008/06/14(土) 22:21:24
>>46
全然まずくない。むしろ(ry
49デフォルトの名無しさん:2008/06/14(土) 22:22:30
>>47
>>48
どっちだ・・・
50デフォルトの名無しさん:2008/06/14(土) 22:26:11
C調言語に御用心
51デフォルトの名無しさん:2008/06/14(土) 22:47:11
>>46
まずいって、何がまずいの?
C言語理解してなくても生きていけるし、
K&Rの演習が分からなくてもプログラムは書けるよ?
52デフォルトの名無しさん:2008/06/14(土) 22:51:29
解かなくても別に問題はないけど
解こうとして解けないのは大問題だろ
53デフォルトの名無しさん:2008/06/15(日) 01:00:10
>>46
ドラクエで言うと
レベル1で「がいこつ」と戦うと「まったく勝てない」んです。
けど、ある程度レベルが上がると「何とか勝てる」んです。
もっとレベルが上がると「余裕で勝てる」んです。

「がいこつ」に余裕で勝てるようになると今度は
「まほうつかい」に「何とか勝てる」ようになったりするんです。

「がいこつ」に勝てないのに「まほうつかい」に挑んでもしょうがないんです。
がんばってくださいよ。ラダトームの勇者さん。
54スライム:2008/06/15(日) 01:02:13
オレのことは無視かよ
55デフォルトの名無しさん:2008/06/15(日) 01:02:39
がいこつ>>>まほうつかい
56デフォルトの名無しさん:2008/06/15(日) 01:04:29
PRGなんてレベルを上げれば、ほとんどの敵を余裕で倒せるが
中には特殊な道具が必要、イベント上絶対に倒せない(ことになっている)とか
プログラミングに於いては、必要なライブラリやAPIがなきゃ厳しい、無理なんて
ものもあるしぃ〜。いくらプログラマのレベルを上げても駄目なこともあるのさぁ〜
ベイビー
57デフォルトの名無しさん:2008/06/15(日) 01:33:04
>>54
スライムさんはレベル1で勝てちゃうから、ね。
けれど、あなたがいない世界では決して勇者は育たず、永遠に世界に平和が訪れません。
あなたがいたからこそりゅうおうを倒すことができた、それを忘れる事はないでしょう。

>>55
そうだっけ!?そいつぁ大きなミスだったorz

>>56
ようせいのふえがあればゴーレムをすぐ倒せるのに、使い方を知らなかったために
ゴーレムと死闘する羽目になった。つまり、APIの知識が乏しいばかりに
車輪の再開発をするプログラマのことを指しているんですよね?
58デフォルトの名無しさん:2008/06/15(日) 01:40:19
ん〜まぁそんなもん。いくら経験値を稼いでLv.99にしても、それは
無駄とは言えなくとも、他に手段を選べる、必要なものを取り込む
知識や知恵も必要ということさ。そこで、攻撃重視の戦士や武道家
だけでなく、魔法が使えるキャラ、そして攻略本も。
何か参考になる資料や開発環境を整えておくことも重要さ。
59デフォルトの名無しさん:2008/06/15(日) 01:43:24
>>51
K&Rの演習がプログラミングの基礎を抑えてると思ったんです。
ですが、どうやらもう少し簡単なものからやった方が自分にはいいみたいです。

>>52
すみません。未熟者です。

>>53
なるほど。
とりあえずスライム探してきます。
はぐれメタルもいるんですよね、きっと。

>>56
まず、道具の使い方がわかるくらいまでは勉強してみようと思います。
60デフォルトの名無しさん:2008/06/15(日) 11:24:18
有限長の文字列を総当りで生成して、それをコンパイルしていくプログラムを作れば
そのうち自分が作りたかったプログラムが自動生成されるんじゃね?
61デフォルトの名無しさん:2008/06/15(日) 11:26:51
シェークスピア全集だってその方法で書けるよ。
62デフォルトの名無しさん:2008/06/15(日) 13:03:23
>>60
天才!
あとは、そのプログラムが自分の望む動きをするかどうかを
自動判定するプログラムを作ればいいだけだな。

頑張れ。
63デフォルトの名無しさん:2008/06/15(日) 13:33:31
量子コンピュータがあれば一瞬だぜ。
64デフォルトの名無しさん:2008/06/15(日) 13:34:37
65デフォルトの名無しさん:2008/06/15(日) 16:06:48
>>60
万能検証プログラムがないとゴミプログラムに埋もれて死ねる
66デフォルトの名無しさん:2008/06/15(日) 16:53:16
検証プログラムも生成されるから大丈夫だよ
67デフォルトの名無しさん:2008/06/15(日) 16:56:03
検証プログラムかどうかを検証するプログラムを作らないとな
68デフォルトの名無しさん:2008/06/15(日) 17:00:38
悪意の無いプログラムかどうかも確認する必要があるな
69デフォルトの名無しさん:2008/06/15(日) 17:40:20
式の値が0のときtrueになるというものをif文で書くとき
if (![変数とか])
と書くべきか
if ([変数とか] == 0)
と書くべきかどちらですか?
あとヌルポインタを判定する場合も流儀があれば教えてください。
if (p == NULL)

if (!p)
かということ。
70デフォルトの名無しさん:2008/06/15(日) 17:42:36
好みかな。一貫して使えばどれでもいい。
71デフォルトの名無しさん:2008/06/15(日) 18:00:29
>>69
個人的に
◎ if (![変数とか]) <− Ok
○ if ([変数とか] == 0) <− ちょっと冗長な気がする

◎ if (p == NULL) <− Ok
△ if (!p) <− NULLは0なのだろうか!?という問題がある。
72デフォルトの名無しさん:2008/06/15(日) 18:01:56
>>71
NULLは0ではないが、
0はNULLだから...
73デフォルトの名無しさん:2008/06/15(日) 18:03:11
>>71
お前ド素人だろ?w
Cでプログラム書くなよw
周りが迷惑だからなw
74デフォルトの名無しさん:2008/06/15(日) 18:05:05
まぁ全体で一貫してくれ
75デフォルトの名無しさん:2008/06/15(日) 18:22:12
>>71
char *p;
if(!p) { }
はOK. というか C++ では NULL よりは 0 の方が好まれているようです。
>>73
あ な た の 存 在 が 迷 惑 で す。
76デフォルトの名無しさん:2008/06/15(日) 18:23:36
正常な状態を検知するのに否定を使うのはセンスに欠けると思う。
7771:2008/06/15(日) 18:27:21
ちょっと調べてみた

NULLの値が0でなくても、
if(!p)
if(p != 0)
if(p != NULL)
は同じ結果になるようです。

サンクス
78デフォルトの名無しさん:2008/06/15(日) 18:28:52
>>75
ド素人をド素人のままのさばらせておくお前もあいつと同じく迷惑な存在。
http://www.kouno.jp/home/c_faq/c5.html#3
79デフォルトの名無しさん:2008/06/15(日) 18:31:32
>>76
trueが正常とは限らないだろう。例えば、
if (!(p = malloc(n))) {
perror("malloc");
return 1;
}
正常だった場合の処理;

もっとも、この書き方は、コーディング規約で禁止しているところもあると聞くが。

それはともかく、
if (!strcmp(a, b)) ...
は頂けないかな。
80デフォルトの名無しさん:2008/06/15(日) 18:38:05
>>78
ド素人のスレなので、そこんとこよろしく
81デフォルトの名無しさん:2008/06/15(日) 18:39:12
if (!strcmp(a, b)) ... で等しい時に真なんだもんな。
直感に反するわ。
82デフォルトの名無しさん:2008/06/15(日) 18:40:06
>>69
んーまあ比較演算子のない条件式を「変」だと思えるピュアな心があればいいんじゃないかな。
ただし、識別子と意味が食い違って紛らわしくなるような場合はいかん。いかんよ。
83デフォルトの名無しさん:2008/06/15(日) 18:40:47
>if(!p)
>if(p != 0)
>if(p != NULL)
>は同じ結果になるようです。

流石ド素人。
なかなか諧謔のセンスがある。
このような頭の悪い人間はプログラミングの世界から手を引いた方がよい。
疑似科学の学者になったほうがよいのではないか?
84デフォルトの名無しさん:2008/06/15(日) 18:42:09
>>71 >>77
まあ逝ってきなさい
http://www.kouno.jp/home/c_faq/c5.html
85デフォルトの名無しさん:2008/06/15(日) 18:47:03
このおばちゃんは元気でやってるの?
この画像がニュースで流れて以来、情報が無いのですが
ちゃんと避難できたでしょうか?
http://2chart.fc2web.com/2chart/obachannnigeteeeeeeeee.html
86デフォルトの名無しさん:2008/06/15(日) 18:58:34
>>83
うっかりミスだとわかるだろうに
天下を取ったようなその書き込み

もっと大きな気持ちで行こうよ
87デフォルトの名無しさん:2008/06/15(日) 19:04:23
いや、人には色々心の傷があるんだよ。触れないでおくも吉
88デフォルトの名無しさん:2008/06/15(日) 19:04:47
>>83のような口調でエラー/警告メッセージを吐くコンパイラがあったとしたら、
俺なら窓から投げ捨てる。
89デフォルトの名無しさん:2008/06/15(日) 19:07:34
いやちょっと欲しいかも
90デフォルトの名無しさん:2008/06/15(日) 19:08:34
>>82
if (isdigit(c)) ...
とかだと比較演算子が現れないけど、これを無理矢理
if (isdigit(c) != 0) ...
とか書く訳?
91デフォルトの名無しさん:2008/06/15(日) 19:11:41
>>86
ごめんなさい、今日ちょっとイライラしているんです。
そもそも>>69を書いたのは私で論争を起こそうと考えたからなんです。
あー、ごめんなさいごめんなさい、CもしたことがないのにCのポインタがナントカとか言って
ごめんなさい。人間ド素人は私の方なんです。あぁ、こういうことを平然というから味の素並に
嫌われる元なんですね、ごめんなさいごめんなさい。
92デフォルトの名無しさん:2008/06/15(日) 19:15:29
いちいちageる奴にろくなのは居ない
93デフォルトの名無しさん:2008/06/15(日) 19:41:48
>>90
真偽を返す関数は逆に比較すべきじゃない。
94デフォルトの名無しさん:2008/06/15(日) 20:06:42
>>90
それは特殊だなって見ればわかるじゃん
95デフォルトの名無しさん:2008/06/15(日) 20:10:25
書いてもいいし書かなくてもいい
ただ、自分のやり方として首尾一貫するのが大事
96デフォルトの名無しさん:2008/06/15(日) 21:55:51
そそ if(p) と if(p != 0) では同じ実行結果となるけどコンパイラが展開したコードは微妙に違うのをだすよね(オプティマイズの指定にもよるけど)

てことは置いといてもっと気楽に行こうよ。
そう書いたらダメとか、それは間違ってる・・とかより >>74 や >> 95 に一票(もしかすると同一人?)

>>90 は頭を柔らかくね。何年かして、そのプログラム見たときに何か感じるものがあればいいんじゃない?
97デフォルトの名無しさん:2008/06/15(日) 22:03:36
pがポインタ型なら全く同じ意味だから、
まともなコンパイラなら同じコードを生成するよ。
98デフォルトの名無しさん:2008/06/15(日) 22:45:51
逆に、違うコードを吐いたところで9割9分くらいは目くじら立てることないと思う。
99デフォルトの名無しさん:2008/06/15(日) 22:55:03
GetRandom関数の意味を教えてください
100デフォルトの名無しさん:2008/06/15(日) 22:55:37
>>99
スレ違い
101デフォルトの名無しさん:2008/06/15(日) 23:02:35
>>100
すいませn
どこいけばいいですか?
102デフォルトの名無しさん:2008/06/15(日) 23:38:08
>>97
あああ、ちがうよ〜。 or reg, reg とするか cmp reg,0 とかの話。


>>98
そりゃ目くじらどころかござにも引っかからないだしょ。
103デフォルトの名無しさん:2008/06/16(月) 02:39:16
>>78
ん、確かに。失礼しました。
104デフォルトの名無しさん:2008/06/16(月) 04:33:31
HWND型の比較はどうやってすればいいですか?
105デフォルトの名無しさん:2008/06/16(月) 07:28:50
==
106aaa:2008/06/16(月) 15:30:50
scanfで入力させると
例えば
int a;
printf("数値:"); scanf("%d",&a)
実行結果  数値:●●

ってなって入力させると改行がはいるじゃないですか?
これを実行結果が 数値:●●センチ
のようにできますかね?
107デフォルトの名無しさん:2008/06/16(月) 15:34:43
一般的には無理
環境によっては可能かも知れないが、かなり特殊だと思う
108デフォルトの名無しさん:2008/06/16(月) 15:36:31
って言うかC言語の問題じゃなくてOSの入出力インタフェースの問題だな
109デフォルトの名無しさん:2008/06/16(月) 15:41:22
一回画面クリアして書き直すとか
110デフォルトの名無しさん:2008/06/16(月) 17:01:11
例えば3〜入力した数までの数をある法則で計算していく時、
その中から素数を計算から除外したい時はどのようにしたらいいんでしょうか?
111デフォルトの名無しさん:2008/06/16(月) 17:03:13
素数かどうかを判定して素数なら除外する
112デフォルトの名無しさん:2008/06/16(月) 17:03:35
>>110
素数判定して除外すればいい。
恐らくは、こんな要領。
for (int ic = 3; ic < inputedNumber; ++ic) {
if (isPrime(ic)) continue;
someFunction();
otherFunction();
}
113112:2008/06/16(月) 17:04:10
ちっ、細かく書き過ぎて先を越されたぜ
114デフォルトの名無しさん:2008/06/16(月) 19:01:41
物理シュミレーションをやりたいんだけど、いい入門書ない?
115デフォルトの名無しさん:2008/06/16(月) 19:36:59
セグメンテーションエラーをなおす方法としてなにがあります?
116デフォルトの名無しさん:2008/06/16(月) 19:39:41
>>115
デバッガの使い方覚える
117デフォルトの名無しさん:2008/06/16(月) 19:57:35
どうやってつかうの?
118デフォルトの名無しさん:2008/06/16(月) 20:00:57
べんきょうする
119デフォルトの名無しさん:2008/06/16(月) 20:09:40
>>114
分野をはっきりさせないと答えられない。
120デフォルトの名無しさん:2008/06/16(月) 20:15:55
>>115
どこまで進んで落ちてるのか調べればいいんじゃ?
適当にprintfいれるとか。
121デフォルトの名無しさん:2008/06/16(月) 20:19:35
以下のようなデータファイルをfgetsとsscanfを使って読み込みたいのですが、
どうすればよいでしょうか?

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]に格納したいです。
繰り返し構文を用いて何とかできませんでしょうか?
122デフォルトの名無しさん: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

と表示されできません。
なにがいけなかったのでしょうか。
123デフォルトの名無しさん:2008/06/16(月) 21:06:42
標準インクルードパスがちゃんと設定できてないとか?
124デフォルトの名無しさん:2008/06/16(月) 21:12:28
>>123
レスありがとうございます。

確認してみましたができてました。

ちなみにプログラムは
#include <stdio.h>
int main(void){
printf("あああああ\n");
return 0;
}
ふつうのプログラムです。
125デフォルトの名無しさん:2008/06/16(月) 21:14:37
とりあえずプログラムに間違いは全く見受けられないから、
どっかの設定に問題があるとしか。
126デフォルトの名無しさん:2008/06/16(月) 21:18:53
>>124
できてないからおかしなことになっとるんじゃ
127デフォルトの名無しさん:2008/06/16(月) 21:19:29
確認させてください。

ボーランド社のコンパイラを使っております。ファイルをC:\Borlandに解凍して、

環境変数でPathの末尾に;C:\Borland\BCC55\Binを付け加える

二つのcfgファイルを作る

であっていますか?
128デフォルトの名無しさん:2008/06/16(月) 21:30:22
129デフォルトの名無しさん:2008/06/16(月) 21:35:32
セミコロン有って98?
130デフォルトの名無しさん:2008/06/16(月) 21:36:03
>>120
それをやったのですけど
そのプログラムではfread,fseekを使ってるプログラムで
ひさしぶりにつかったらどうやって組み立ててたのかわからなくて。

宿題のスレにお願いしたのですけど。
ここにはるとマルチになるので
131130:2008/06/16(月) 21:42:14
これ
http://a-draw.com/uploader/src/up1643.zip.html
このファイルをダウンロードしてもらって解凍してもらいたいんです。
prog.cのファイルを実行してセグメンテーションエラーをとってほしいんです
けど。
132デフォルトの名無しさん:2008/06/16(月) 21:42:25
すでに現段階でマルチだよ
133デフォルトの名無しさん:2008/06/16(月) 21:46:20
>>127
cfg ファイルの中身が間違っている可能性が高い
134デフォルトの名無しさん:2008/06/16(月) 21:49:36
>>133
レスありがとうございます
bcc32.cfg内は
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
ですよね。
ilink32.cfg内は
-L"c:\Borland\Bcc55\lib"
ですよね・・・

とくにファイルの移動とかはしていません。デフォルトのままです
135デフォルトの名無しさん:2008/06/16(月) 21:51:49
中身は問題なさそうだな・・・。
んで、そのファイルはどこに置いてる?
136130:2008/06/16(月) 21:54:14
prog.cですけど
きちんと動けばtextフォルダ内にテキストファイルができます
137デフォルトの名無しさん:2008/06/16(月) 21:54:27
あいや、cfg ファイルね
138デフォルトの名無しさん:2008/06/16(月) 21:55:16
って、質問者からしてちゃうやんけw
>>135>>134 へのレス。
139デフォルトの名無しさん:2008/06/16(月) 21:56:03
ワロタ
140デフォルトの名無しさん:2008/06/16(月) 21:56:32
Binに入れています。
141デフォルトの名無しさん:2008/06/16(月) 21:57:47
だが断る
142デフォルトの名無しさん:2008/06/16(月) 21:58:11
cfg ファイルは非Unicodeのプレーンテキストファイル?
143デフォルトの名無しさん:2008/06/16(月) 22:00:26
はい
144デフォルトの名無しさん:2008/06/16(月) 22:01:54
C:\Borland\Bcc32\include\stdio.h はある?
145デフォルトの名無しさん:2008/06/16(月) 22:02:12
文字コードはANSIでした。
拡張子もtxtではなくcfgに書き換えています。
146デフォルトの名無しさん:2008/06/16(月) 22:02:32
環境変数かえてから再起動してないってオチでわ?
147デフォルトの名無しさん:2008/06/16(月) 22:03:19
コンパイラ走ってるからそのあたりは大丈夫そうに思える。
148デフォルトの名無しさん:2008/06/16(月) 22:04:30
自分のレス番名前に入れろ
149デフォルトの名無しさん:2008/06/16(月) 22:04:32
「登録された拡張子は表示しない」
設定になっているがために
本当は .cfg.txt になってるのが .cfg と表示されている・・・とかはない?
150デフォルトの名無しさん:2008/06/16(月) 22:05:43
>>144
ありました。

>>146
何回も再起動しました;;

>>147
コマンドプロンプト開いてbcc32でズラズラでてきます。
151122:2008/06/16(月) 22:07:27
>>149
拡張子は全て表示するようにしています.

152デフォルトの名無しさん:2008/06/16(月) 22:11:37
だが断る
153122:2008/06/16(月) 22:15:42
蛇足(?)ですが、JDKも導入しています。こちらはフツウに動作してくれます。
154デフォルトの名無しさん:2008/06/16(月) 22:28:52
見てみようと思ったがダウンロードできん。
155デフォルトの名無しさん:2008/06/16(月) 22:43:34
>>151
んじゃ、もう Borland は捨てよう。
インスコして即使える VC++ 2008 Express Edition にしよう。
156122:2008/06/16(月) 22:51:29
>>155
ですね・・・

Visual C++は初めて使う(学校ではUltra-C Proというソフトつかって勉強してました)のですが、まったく仕様がかわりますか?
基本画面を見ただけでごちゃごちゃしていてよくわからないのですが、、、
157デフォルトの名無しさん:2008/06/16(月) 22:52:53
コマンドプロンプトからコンパイルする時にインクルードパスを指定してみたら?
158122:2008/06/16(月) 22:54:56
>>157

コマンドプロンプトの使い方がまったくわかりません;;
159デフォルトの名無しさん:2008/06/16(月) 22:55:52
> bcc32.cfg内は
> -I"c:\Borland\Bcc55\include"

> C:\Borland\Bcc32\include\stdio.h はある?
→ありました

Bcc使ったこと無いんだが、Bcc55ってのとBcc32ってディレクトリできるん?
160デフォルトの名無しさん:2008/06/16(月) 23:00:56
>>159
御免。それ間違えただけ。
161122:2008/06/16(月) 23:01:08
>>159

>C:\Borland\Bcc32\include\stdio.h

これはBcc55の間違いでした。すみません。
162デフォルトの名無しさん:2008/06/16(月) 23:01:28
>>156
基本的な使い方はそこいらのサイトに載ってると思う。
163デフォルトの名無しさん:2008/06/16(月) 23:03:23
>>160-161
了解です。

bcc -ehoge.exe hoge.c
でいいのかな。

インクルードパスを明示的に指定するために
bcc -I"c:\Borland\Bcc55\include" -ehoge.exe hoge.c
とやってみるか、インクルードファイルをフルパス指定にするために
#include "c:\Borland\Bcc55\include\stdio.h"
に変えてみるとか。
164デフォルトの名無しさん:2008/06/16(月) 23:04:36
って\あやしくね?Windows分かりませんで逃げていい?(汗
165デフォルトの名無しさん:2008/06/16(月) 23:05:15
#include の中は \ 1つでいいよ
166122:2008/06/16(月) 23:14:16
>>162
ちょっとググってみます。

>>163

おぉぉおぉぉぉおお!できました!ありがとうございます!
しかし、もうVisualC++をインストールし終えてしまいました^^;
でもありがとうございます!
167デフォルトの名無しさん:2008/06/16(月) 23:17:29
>>166
お。できたんだ?
ってことはコンフィグファイルがうまく効いてないのかしら。
その辺はますます使ったこと無いのでわかりませんが、VCに移行するんですね^^;
がんばってねー
168122:2008/06/16(月) 23:25:10
>>167

VisualC++は使い慣れるのにけっこう時間が必要のようです^^;;;
当分、メモ帳+VisualC++の併用していこうとおもいます。
167さんのアドバイスで新しい書き方を覚えましたし、満足です^^
ありがとうございました。がんばりまうs!
169デフォルトの名無しさん:2008/06/16(月) 23:29:44
どうでもいいけどC言語以前の問題だと思う
170デフォルトの名無しさん:2008/06/16(月) 23:31:33
さらに入門以前の問題でもある
171デフォルトの名無しさん:2008/06/16(月) 23:51:44
>>168
メモ帳使う方が混乱すると思うぞw
172デフォルトの名無しさん:2008/06/17(火) 00:00:15
しかし、Visual C++コマンドプロンプトの存在は
bcc32.cfgを用意するなどといった手間がない分、Borland C++より優位。
インストーラの力は偉大だ。
173デフォルトの名無しさん:2008/06/17(火) 00:07:07
>>168
今までのレス見てて原因分かったぞ
bcc32.cfgのincludeを指定してるパスが間違ってるんじゃないのか
174デフォルトの名無しさん:2008/06/17(火) 00:08:15
>>134 で特に間違いはないように見えるけど
175デフォルトの名無しさん:2008/06/17(火) 00:09:39
見逃してたwww
176デフォルトの名無しさん:2008/06/17(火) 00:31:05
コマンドプロンプトがわかりませんとか言ってる時点で・・・
まずいくべきはPC初心者板だな。
177デフォルトの名無しさん:2008/06/17(火) 00:38:14
研修を受けて2週間めですが、さっぱりわかりません、助けてください。
変数ってprintfで表示できるしデバッガーでも表示出来るのはわかるのですが
計算して新しいものを入れるのにクリアしないのですか?
178デフォルトの名無しさん:2008/06/17(火) 00:40:54
>>177
なにをいってるのかさっぱりわかりません、助けてください
179デフォルトの名無しさん:2008/06/17(火) 00:42:42
日本語の研修ですか?
180デフォルトの名無しさん:2008/06/17(火) 00:43:46
変数は初期化か上書きしかない、自分がこうしたらクリアだな
と思う値で初期化するなり上書きすればクリアじゃないかな
181デフォルトの名無しさん:2008/06/17(火) 00:43:50
>>178
ごめんなさい、講師の人には失礼なので聞けないので、一緒に研修受けている
人に聞いてもわかりません。
変数ってクリアしないで計算出来るんですか?
182デフォルトの名無しさん:2008/06/17(火) 00:44:35
いや、講師に聞いてくださいよ…
183デフォルトの名無しさん:2008/06/17(火) 00:46:15
>>180
ありがとうございます。
思う値でクリアするのがわかりません。
初期化か上書きって命令があるんでしょうか。素人ですみません。
184デフォルトの名無しさん:2008/06/17(火) 00:47:10
なんかよくわからんけど
自分で値いれるんならクリアしなくてもいいよ
185デフォルトの名無しさん:2008/06/17(火) 00:47:26
>講師の人には失礼なので聞けない
なんというゆとり
186デフォルトの名無しさん:2008/06/17(火) 00:48:09
理解できずに終わる事のほうが失礼だから聞けよクズ
187デフォルトの名無しさん:2008/06/17(火) 00:48:20
>>182
講師の人の言ってることは日本語が難しいので聞いても無駄だと思って。。。
188デフォルトの名無しさん:2008/06/17(火) 00:49:07
なら分かりやすく教えてくださいって聞けばいいだろ…
189デフォルトの名無しさん:2008/06/17(火) 00:50:16
int a = 0; int型変数aを0で初期化
a = 1;   変数aに1を代入(上書き)
190デフォルトの名無しさん:2008/06/17(火) 00:52:52
この質問者の日本語が一番難しい。
191デフォルトの名無しさん:2008/06/17(火) 00:53:11
本とか買って予習したほうがいいと思うよ
そうすれば講義も理解しやすいかと
192デフォルトの名無しさん:2008/06/17(火) 00:54:08
ここんとこC言語以前の質問ばっかりじゃねぇか
193デフォルトの名無しさん:2008/06/17(火) 00:54:55
丁寧に図解して説明してくれて他の受講生は他の学校で習ったよりわかりやすい
っていっているので、聞けません。

a = 1って構文は理解したけど、なんでaが1になるのかわかりません。
型が同じだから代入できるということですか?
194デフォルトの名無しさん:2008/06/17(火) 00:57:22
悪いことは言わないからまず電子計算機のなんたるかを勉強しろ
195デフォルトの名無しさん:2008/06/17(火) 00:57:40
なんだ他の学校って。
職業訓練学校か?

>a = 1って構文は理解したけど、なんでaが1になるのかわかりません。
そういう決まりだからだ。
196デフォルトの名無しさん:2008/06/17(火) 00:58:42
大学の授業なんだろう?
授業料払ってるんだろう?
聞け

言っとくが俺らはおまえからもおまえの親からも何ももらってないんだからな
197デフォルトの名無しさん:2008/06/17(火) 00:59:06
もしかしてりんごの絵とかで解説してあげないと駄目なレベルなのかな
198デフォルトの名無しさん:2008/06/17(火) 01:00:08
はっきり言ってしまうと
単におまえが分不相応な講座取っただけだろ
199デフォルトの名無しさん:2008/06/17(火) 01:01:08
講師の人には他の人とは差があって当然だから、基礎的な事をまずは勉強
しようねといって、コンピュータの歴史の本みたいなのを読まされています。
わたしはプログラムしたいけれども、多分、もう見捨てられているんですね。
わかりました。
200デフォルトの名無しさん:2008/06/17(火) 01:01:16
コンピュータ内部の事象をイメージできない人間がプログラミングできるわけがない
201デフォルトの名無しさん:2008/06/17(火) 01:01:34
ああ、新入社員の研修じゃなかったのか。よかったよかった
202デフォルトの名無しさん:2008/06/17(火) 01:02:48
うーむ・・・正直相当不向きと見える
203デフォルトの名無しさん:2008/06/17(火) 01:03:41
学校じゃないから真剣なんです。社会人の研修です。

なんでみんなこんなのでわかるのか泣きたいです。
204デフォルトの名無しさん:2008/06/17(火) 01:05:02
a = 1って構文は理解したけど、
↑↑激しく矛盾 ↓↓
なんでaが1になるのかわかりません。
205デフォルトの名無しさん:2008/06/17(火) 01:05:05
おすすめ図書 猫でも分かるc言語プログラミング
   
206デフォルトの名無しさん:2008/06/17(火) 01:05:13
ごめんなさい、明日も早いから寝ます。いろいろありがとうございました。
207デフォルトの名無しさん:2008/06/17(火) 01:05:33
逆に質問したいんだがなんでaが1になるのが変だと思ったんだ?
そういうところをはっきり書いてくれないと誰もあなたが望む答えが出来ないと思うよ
208デフォルトの名無しさん:2008/06/17(火) 01:05:41
プログラマはプロ・アマ問わず本買うなりネットで調べるなりして自学自習が基本だ。
与えられた本に文句つけてる暇があったら、入門本を片っ端から読み漁れ。
講師だの学校だのにプログラム教えてもらおうなんて思ってるなら、転職・進路変更を勧める。
209デフォルトの名無しさん:2008/06/17(火) 01:06:51
なんでこんなのをプログラミングの研修に回すんだ…
どこの会社かしらんがおかしいだろ
210デフォルトの名無しさん:2008/06/17(火) 01:08:07
たぶん変数とか代入とかの概念がないんだろう
211デフォルトの名無しさん:2008/06/17(火) 01:08:43
まわりが経験者ばっかりで焦ってたんだろね
212デフォルトの名無しさん:2008/06/17(火) 01:08:49
1+1はなんで2になるの?くらいのレベルの質問
213デフォルトの名無しさん:2008/06/17(火) 01:09:02
>>207
a = 1 って書くのはわかるけど、aは変数じゃないんですか???
ごめんなさい、たぶんわたしがまるでわかってないんですね。
214デフォルトの名無しさん:2008/06/17(火) 01:09:05
あーそうか
つまり a=1 を数学の数式として見てるのか・・・
215デフォルトの名無しさん:2008/06/17(火) 01:09:20
a = 1の構文に違和感を覚えるのなんてよくあること
216デフォルトの名無しさん:2008/06/17(火) 01:09:55
と思ったけど>>213を見た限りそういうわけじゃないみたいだなwwwww
217デフォルトの名無しさん:2008/06/17(火) 01:09:57
a=1;

これの意味を本当に理解してる?
説明してみて
218デフォルトの名無しさん:2008/06/17(火) 01:10:52
>>213
意味わかんねえよ。
「(変数) = (値);」と書いて「(変数)に(値)を代入する」って読むんだよ。
何が分からんのか言うてみろ。
219デフォルトの名無しさん:2008/06/17(火) 01:11:23
たぶん「代入」が理解できてない
220デフォルトの名無しさん:2008/06/17(火) 01:12:04
131だけどどなたかわかりましたか?
221デフォルトの名無しさん:2008/06/17(火) 01:13:05
一番いいのは
自分で
int a;
a=1;
してからprintfでaを表示しろ
222デフォルトの名無しさん:2008/06/17(火) 01:14:11
zipファイルが落とせないの俺だけ?
出会い系のバナーしかリンクがねーんだけど。
223デフォルトの名無しさん:2008/06/17(火) 01:14:19
よく言われるのは、変数は箱の名前

まず最初に
int a;
などのように書いてint型の変数としてaと言う箱を用意します

その箱の中身に 1 と言う値を入れる(代入)にはどうすればいいか
a = 1;
と書くのです、これはC言語の決まりごとです
224デフォルトの名無しさん:2008/06/17(火) 01:14:24
代入演算子で1を代入してるんですよね。理解しています。
でも、どうしてaが1なんですか?
取り出すところがわかりません。どうやってクリアするのですか?
225デフォルトの名無しさん:2008/06/17(火) 01:14:36
2つの数の最大公約数を出すプログラミングを書いていたのですが、どうしてもうまくいきません
どこが悪いか教えてもらえませんか?
どんな値を入れても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); }



226デフォルトの名無しさん:2008/06/17(火) 01:15:22
決まりごとになぜっていわれるのが一番こまるよなー。
なんで止まれは止まらないといけないのかとか
227デフォルトの名無しさん:2008/06/17(火) 01:15:26
>>220
そんなところにソース上げられても誰も見ようとはしないよ
自分でリンク叩いてみろ
228デフォルトの名無しさん:2008/06/17(火) 01:16:03
>>224
「代入」の意味を説明してみろ
229デフォルトの名無しさん:2008/06/17(火) 01:16:17
>>224
クリアってなんだよ。
勝手に変な概念を作るな。
230デフォルトの名無しさん:2008/06/17(火) 01:16:42
どこにうpすれば。。。
231デフォルトの名無しさん:2008/06/17(火) 01:17:01
おまいら釣られすぎwww
232デフォルトの名無しさん:2008/06/17(火) 01:17:49
131
単品だとエラー確認できないんすよー。
233デフォルトの名無しさん:2008/06/17(火) 01:17:54
>>225
i==1
234デフォルトの名無しさん:2008/06/17(火) 01:18:37
あーもー、
おまえら何がしてーんだよっww
235デフォルトの名無しさん:2008/06/17(火) 01:19:10
いったいこいつの頭の中がどうなってるのかを確かめたいと言う知的好奇心
236デフォルトの名無しさん:2008/06/17(火) 01:21:23
131
ddofile29050.zip pass errorです
みてもらえたらうれしいです
237デフォルトの名無しさん:2008/06/17(火) 01:22:16
>>131
1643.zipがねーぞ?
2chなんかでリンク張るから消されたんじゃねーのw
238デフォルトの名無しさん:2008/06/17(火) 01:22:23
ここは半角板じゃねぇぇ。
239デフォルトの名無しさん:2008/06/17(火) 01:22:25
やぱりからかれてるんだ。
240デフォルトの名無しさん:2008/06/17(火) 01:22:41
>>236
しねばいいよ
241デフォルトの名無しさん:2008/06/17(火) 01:22:44
明日ゼミあるのに全くゼミ資料も裏付けもやってねー
242デフォルトの名無しさん:2008/06/17(火) 01:25:45
いくらなんでもa = 1がわからないやつを2週間も放置する会社は無いだろ
243デフォルトの名無しさん:2008/06/17(火) 01:26:28
a = 1; において、a という箱にはなにかしらデータが入っているから
そのままではそのデータが邪魔で 1 を代入することはできない
だから a からデータを取り出すなり消去する(「クリア」する)必要がある

とでも考えているんじゃなかろうか
244デフォルトの名無しさん:2008/06/17(火) 01:26:35
なぜreturn aで返るんですか?
245デフォルトの名無しさん:2008/06/17(火) 01:28:44
>>243
そうです。
どうしてクリアしなくていいんですか?
246デフォルトの名無しさん:2008/06/17(火) 01:29:30
上書きしてるから
247デフォルトの名無しさん:2008/06/17(火) 01:30:08
自分でC言語のコーナーいって
自分が一番わかるであろう本をかいなよ。
そしてプログラムを自分が理解してうつ。
それがベストだろ。
248デフォルトの名無しさん:2008/06/17(火) 01:30:50
>>245
箱と説明されてるのがまずかったのかな?

ホワイトボードみたいなもんだを思ってくれ

a = 1;はaって言う名前のホワイトボード書き換える行為だと
249デフォルトの名無しさん:2008/06/17(火) 01:31:09
+=とか|=なら、245的クリアしない代入と言えるのだろうか?
250131:2008/06/17(火) 01:31:17
#include <stdio.h>
#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]);
}

なんとかまとめてみました
お願いします
251デフォルトの名無しさん:2008/06/17(火) 01:31:29
>>255
5行目と11行目のfor文を
i == 1 → i != 1 にかえるとおk
252デフォルトの名無しさん:2008/06/17(火) 01:31:31
変数の初期化
その変数に代入すると,初期化した変数にいれられる。
253デフォルトの名無しさん:2008/06/17(火) 01:31:45
>>246
そこが言ってることがわかりません?上書きってクリアとは違うんですか?
254デフォルトの名無しさん:2008/06/17(火) 01:31:49
>>245
ホワイトボードじゃ、一回クリアしないと書けないぞw

MDでもカセットテープでもなんでもいいが、
繰り返し録音できるメディアはいちいちクリアしなくても
新しく録音できるだろ。
それと一緒だ。上書きだよ上書き。
255デフォルトの名無しさん:2008/06/17(火) 01:32:07
間違った >>225
256デフォルトの名無しさん:2008/06/17(火) 01:32:21
>>150
単品じゃうごかねえつったろw
257デフォルトの名無しさん:2008/06/17(火) 01:32:58
>>245
C言語は、プログラマのコードが全て
つまりプログラマの責任において操作する
a = 1;
の後に、aに何を代入して上書きしようがプログラマの勝手
で、その変数aの値を使用するのは、プログラマの責任で使えってこった
258デフォルトの名無しさん:2008/06/17(火) 01:33:42
データがねーから

nt main(){ char buf[100][STR_MAX]={'\0'}; FILE *fp; int i,j,k=0,count=0; system("dir power/*.data >memo.txt");
でエラー
259デフォルトの名無しさん:2008/06/17(火) 01:35:43
まさにカオス
260デフォルトの名無しさん:2008/06/17(火) 01:37:03
何を代入してもいいのに1を代入するとかもうわけがわからないのは
やっぱりむいてないんでしょうね。
書いている言葉は理解できるのにさっぱり意味がわかりません。
長々とありがとうございました。明日相談してみます。
261デフォルトの名無しさん:2008/06/17(火) 01:38:52
何を代入してもいい箱には
何が代入できるのだろう。

そもさん、せっぱ
262デフォルトの名無しさん:2008/06/17(火) 01:39:12
書いている言葉は理解できるのに
↑↑何か脳の病気なのか…↓↓
さっぱり意味がわかりません。
263デフォルトの名無しさん:2008/06/17(火) 01:40:02
1は例えであって別に何しようが勝手だって
型なのどの規則を守ってたら
あとは>>257の言うとおり

何も代入してない状態の変数にも中身が勝手に入ってる
ただ、それは何が入ってるか分からないから自分が分かるように
分かる値を入れるだけ
264デフォルトの名無しさん:2008/06/17(火) 01:40:50
>>255
ありがとうございます!
明日トライしてみますね!
助かりました。。
265255:2008/06/17(火) 01:50:52
>>264
あと公約数がない場合もつけたしておいたほうがいいよ
266デフォルトの名無しさん:2008/06/17(火) 01:53:41
公約数がないなんてありうるの?
267デフォルトの名無しさん:2008/06/17(火) 01:54:06
ねぇよwww
268デフォルトの名無しさん:2008/06/17(火) 01:56:34
素数って1とそれ自身以外の約数がないんじゃなかったっけ?
2つの素数の公約数って1でいいの?
269デフォルトの名無しさん:2008/06/17(火) 01:56:44
aが1かなんでもいいを入れられるのにどうして1を入れる必要が
あるのかどうしてもわからないんですよ。
1じゃなくても入れられるのはわかっています。
なんで1があるのにそれを入れるのか、どういう時に入れれば
いいのかわからないんです。

入れたいときにっ言うけどそれがわかりません。

フローチャートも演習でやったのは書けたけど、プログラムを見て
フローチャートに出来ません。
やっぱり無理ですね。よくわかりました。
270デフォルトの名無しさん:2008/06/17(火) 01:57:16
約数って素数じゃなきゃいけないんだっけ?
271デフォルトの名無しさん:2008/06/17(火) 01:58:05
>>269
もう寝ろ。
272255:2008/06/17(火) 01:59:11
あのプログラムだとループの i が1になった瞬間終了だから
8 7 とか入力したらバグる
273デフォルトの名無しさん:2008/06/17(火) 01:59:14
>>268
全ての整数は1と(負の約数を考えるなら-1)を約数にもつ。
だから、どんな二つの整数も1を公約数に持つし、
二つの素数の最大公約数は1
274デフォルトの名無しさん:2008/06/17(火) 02:00:25
変数の存在自体に疑問を持ってるということかいね
つまり、全部数値を直打ちしてプログラム書けということかいね
死ぬわ
275デフォルトの名無しさん:2008/06/17(火) 02:01:01
>>272
そういう意味だったか、すまん
確かに返り値返してないな
276デフォルトの名無しさん:2008/06/17(火) 02:05:42
変数の意義とは何ぞや。
すなわち、テンポラリである。
277デフォルトの名無しさん:2008/06/17(火) 02:09:15
女がピーかなんでもいいを入れられるのにどうしてピーを入れる必要が
あるのかどうしてもわからないんですよ。
ピーじゃなくても入れられるのはわかっています。
なんでピーがあるのにそれを入れるのか、どういう時に入れれば
いいのかわからないんです。

入れたいときにっ言うけどそれがわかりません。


ごめんもう寝る
278デフォルトの名無しさん:2008/06/17(火) 02:10:02
いや、別に入れたくないなら入れなくていいよ。
279デフォルトの名無しさん:2008/06/17(火) 02:11:10
根本的に無理だな
問題解決能力そのものがない
280デフォルトの名無しさん:2008/06/17(火) 02:18:01
>>277
応用をやるために基礎があるってことでおk?
281デフォルトの名無しさん:2008/06/17(火) 02:23:06
釣りだと思う人挙手

282デフォルトの名無しさん:2008/06/17(火) 03:10:52
>>269
つまり、プログラムで何をするか決めてない、理解してないのに
プログラムの構文を習った所で、そんな状態になるわな
まず、これから先に何かをする為に、そうルールでプログラムは動くって覚るしかない

変数は、プログラムを組むなら絶対使うからw
例えば、条件分岐(習ったかどうか知らんが)

int value;

// 何らかの処理でvalueに何らかの数値が入る
...

if ( value == 0 ) {
// 0の時だけにしたい処理
...
}
こんな感じで使う

a = 1; なんて、構文を教えてるだけだ、それに意味なんか求めるな
283デフォルトの名無しさん:2008/06/17(火) 03:16:01
つまりみなさんよくわかないけど使ってるんですね
わたしもそうすることにします
284デフォルトの名無しさん:2008/06/17(火) 03:21:11
>>283
それがいい
やってるうちに分かってくる b
285デフォルトの名無しさん:2008/06/17(火) 03:49:54
c言語でbmpファイルを読み込んで、それを表示させるプログラムを作るには、
ウインドウ作成プログラムも作らないといけないのですか
286デフォルトの名無しさん:2008/06/17(火) 03:54:58
Cとウィンドウ作成の関係について詳しく
287デフォルトの名無しさん:2008/06/17(火) 03:59:01
おいちゃんの作ったプロ、グラマーなクソースなら
HTMLのTBL形式に出力しちゃうわよぉ〜ん
288デフォルトの名無しさん:2008/06/17(火) 04:32:13
これは ひどい
289デフォルトの名無しさん:2008/06/17(火) 06:23:47
スレ違うかもしれません。だが教えて欲しい!
昨年プログラムとして
とあるソフト入社したんだが、C言語でやってる。
しかし!入社して一年たっても全くと言って良い程
C言語がわからす、プログラムなんて持っての他。
テストばかり。テストばかりなのが嫌ではないのだが、
将来首切られる事ってあり得るのかな?
ちなみに勤務態度や
勤務状態(遅刻や早退)は良い。
やっぱプログラマ出来ないとリストラされるのでしょうか?
290デフォルトの名無しさん:2008/06/17(火) 06:28:04
時や場所をわきまえない奴は首
291デフォルトの名無しさん:2008/06/17(火) 06:29:13
入社したのが新卒なのか、中途で他業種からなのかとか
背景がさっぱりわからんし、同じようにテストを受けてるのが
一人だけとか他にも同期で何人かいるとかでも違うしなあ。

体力ある企業で新卒でそれをさせてるなら育成の可能性が
あるから首ってことはないだろうけどなあ。
それに体力無いところは適当な案件見つけてすぐにでも
経歴偽装してデスマな現場に放り込まれそうだけどなw
292デフォルトの名無しさん:2008/06/17(火) 06:44:28
289ですが、専門卒で新卒でソフト会社入って
一年でやめて、違う業種で一年やって
三年程のブランクを経て今ある会社に入りました。
形としては中採かな。1ヶ月程たった。
自分づもプログラムに向いてないのは
分かってるけど、違う業界でやっていくか、
とりあえず分からないなりに
努力していくか悩んでいるのです。
スレ違う失礼しました。
ただ、このスレ野中にはプログラムの人もいるかなと思い、
参考程度に聞いてみた。
結局は自分だけど、皆さんならどうしますか?
293デフォルトの名無しさん:2008/06/17(火) 06:54:07
プログラムの人ってなんだよw
プログラマだろ
294デフォルトの名無しさん:2008/06/17(火) 07:12:42
とりあえずちゃんとした文章を書こうよ
295デフォルトの名無しさん:2008/06/17(火) 07:15:02
まーまだ20代なんだからやる気次第かもね〜
296デフォルトの名無しさん:2008/06/17(火) 07:53:17
質問です。char変数に代入する方法がわかりません。次のようなプログラムなんですが、

char fruits;
int kind;
printf("どれが好き?\n1.リンゴ\n2.みかん\n3.バナナ\n");
scanf("%*d,%d",kind);
switch(kind){
case 1:
fruits = "リンゴ";
break;
case 2:
(中略)

printf("あなたは%sが好きです",fruits);

fruitsに文字を代入するところでエラーが出てしまいます。どう変えれば動くようになりますか?
297デフォルトの名無しさん:2008/06/17(火) 07:58:51
#include <string.h>
(省略)
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);
298デフォルトの名無しさん:2008/06/17(火) 08:03:26
別に
fruits[0] = "リンゴ"[0];
〜〜
fruits[6] = "リンゴ"[6];
fruits[7] = "リンゴ"[7];
break;
でもいいけど。
299デフォルトの名無しさん:2008/06/17(火) 08:22:29
大きさを宣言するんですね!
うっかり忘れてました。thxです。
300デフォルトの名無しさん:2008/06/17(火) 08:23:51
>>289
>>292
1年なのか1ヶ月なのかはっきりしろよ
301デフォルトの名無しさん:2008/06/17(火) 08:41:06
>>299
うっかり…なのか?
何だかchar型に文字列のポインタ入れようとしたり、基本的なことが分かってないように思えるんだが
302デフォルトの名無しさん:2008/06/17(火) 09:33:14
>>286
BMPファイルを読み込んだ後にそのBMP画像を画面に出力すること
と言われて、BMPファイルをメモリに読み込ませることはできたんですけど
出力するプログラムがわかりません
303デフォルトの名無しさん:2008/06/17(火) 09:37:10
>>286
BMP画像を読み込んで、その読み込んだBMP画像を画面に出力する
というプログラムを作成するのに、そのまま出力することができるんですか
BMP画像を読み込ませることはできたんですが、それを画面に表示
させる方法がわかりません
304デフォルトの名無しさん:2008/06/17(火) 09:38:57
スレ違い
305デフォルトの名無しさん:2008/06/17(火) 10:28:58
つまり「日本語なら俺に聞け(入門篇)」のスレへ行け、ということですね。わかりますた
306デフォルトの名無しさん:2008/06/17(火) 10:43:36
問04(最終問題)
テキストサウンドノベルを作成する事。
キー入力でメッセージを表示し、途中で選択肢を含める。(最大3つまで)
画面をスクロールさせることは禁止。ページ切り替えは、画面全消去で対処する事。
テキスト行数は、最低50行から最大100行までとする。
画面全消去方法は、先生に聞くこと。
これってCじゃなくC++ですか?
307デフォルトの名無しさん:2008/06/17(火) 10:49:47
308デフォルトの名無しさん:2008/06/17(火) 11:41:57
質問だけですが、分かる方お願いします。
cは拡張キーワードというのがありますが、
どういった場合に使用するのでしょうか?
具体的な使い方とか乗っているサイトありませんか?
309デフォルトの名無しさん:2008/06/17(火) 12:08:19
>>308
拡張キーワードって __asm __stdcall などのこと?
それぞれが必要なときに使うんだよ。
使い方は処理系のマニュアルを読む。
310デフォルトの名無しさん:2008/06/17(火) 12:08:52
>>306
サウンドのあたりがしんどいね
311デフォルトの名無しさん:2008/06/17(火) 12:57:06
>テキストサウンドノベル
これはひどい
312デフォルトの名無しさん:2008/06/17(火) 13:14:08
>>269
亀レスだが、その疑問はコンピュータサイエンスのプログラム意味論や
計算とは何かの範囲になるので、ここではスレ違い。
313デフォルトの名無しさん:2008/06/17(火) 13:59:38
エレガントなコードを書くのに参考になるような本って何かありますか?
Short coding以外で
314デフォルトの名無しさん:2008/06/17(火) 14:21:01
>>177
> 変数ってprintfで表示できるしデバッガーでも表示出来るのはわかるのですが
> 計算して新しいものを入れるのにクリアしないのですか?

そうだよね、変数は値(を書いた札)を入れる箱だから、元の値が邪魔になるよね。
っていうアレではないか。
315デフォルトの名無しさん:2008/06/17(火) 15:01:50
>>314>>243-245で既出だった
316デフォルトの名無しさん:2008/06/17(火) 19:01:20
1つのスイッチと4個のLEDを使ってプログラムを作ろうと思っています。
スイッチを押すとLED1が点灯→もう一度押すとLED1に続いてLED2が点灯、さらに1回押すとLED3も点灯
というように押すたびに点灯するLEDが増えてくというものを作ろうとしているのですが、
まったくできません。
プログラムをどのように書くと1つのボタンでLEDが点灯する数を増やしていくことができるのでしょうか?

こういう風に
317デフォルトの名無しさん:2008/06/17(火) 19:03:54
どういう接続かしらんけど
ポートに出力するデータに対して
最初は0
左シフトして1インクリメント
を繰り返せばOKなんじゃない?
318デフォルトの名無しさん:2008/06/17(火) 19:17:41
>>317
今は

while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=0x01;
}
}

これでボタン押すとLED1が点灯する状態です。
>>ポートに出力するデータに対して
>>最初は0
>>左シフトして1インクリメント

この辺はどんな命令文で指示すればいいのでしょうか?
319デフォルトの名無しさん:2008/06/17(火) 19:21:25
char outdata = 0;
while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=outdata<<1;
outdata++:
if (outdata > 4) outdata = 0;
}
}
320デフォルトの名無しさん:2008/06/17(火) 19:30:39
>>319
詳しくありがとうございますw

char outdate=0;
の行でエラーが出るのですが、乱数使うときの#include<studlb>みたいな前置きみたいの必要なんですかね?
321デフォルトの名無しさん:2008/06/17(火) 19:32:28
組み込みスレで聞いたほうがよくないか?
322デフォルトの名無しさん:2008/06/17(火) 19:35:50
エラーの内容くらい読め
323デフォルトの名無しさん:2008/06/17(火) 19:36:39
釣りだろ
324デフォルトの名無しさん:2008/06/17(火) 19:38:06
>>321
まーIOポートも変数みたいに使えるようになってるからいいんでね?

>>320
char outdata = 0;

BYTE outdata = 0;

かな?

char型じゃないのかね?

それか

chara outdata;
outdata = 0;

のように行を分けないといけないとか
325デフォルトの名無しさん:2008/06/17(火) 19:38:41
char outdata;
outdata = 0;
こうだorz
326デフォルトの名無しさん:2008/06/17(火) 19:48:31
釣りじゃないですが

2500(E) ILLEGAL TOKEN: "char"
2225(E) UNDECLARED NAME: "outdata"

っていうエラーが出てしまいます。
>>324さんのも試してみたのですが、BYTEでも同じエラーでした。
327デフォルトの名無しさん:2008/06/17(火) 19:53:39
変数を定義できる場所とできない場所がある。
328デフォルトの名無しさん:2008/06/17(火) 20:00:06
面倒だからこうするか
P1.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って読み込みできるのかな?
329デフォルトの名無しさん:2008/06/17(火) 20:13:44
{
char outdata = 0;
while(1){
if (P2.DR.BIT.B0==0){
P1.DR.BYTE=outdata<<1;
outdata++:
if (outdata > 4) outdata = 0;
}
}
}

さらに面倒だからこうしちゃえば?
330デフォルトの名無しさん:2008/06/17(火) 20:22:00
日立のSHCか?
331デフォルトの名無しさん:2008/06/17(火) 20:26:31
H8/3664で遊んだときにどこかの会社の
無料の統合環境もこんな感じで組めたな。
332デフォルトの名無しさん:2008/06/17(火) 20:29:58
たぶん制御系スレが一番詳しいはずってか初心者が組み込みに手出すのは無謀じゃないのか
333デフォルトの名無しさん:2008/06/17(火) 20:41:17
>>328-329
>>P1.DR.BYTE++:
>>outdata++:
最後の点々はセミコロンじゃないとエラーでるけど:じゃないと意味ないんですかね?
ちなみにセミコロンに変えて実行するとLEDは点灯するけど点灯の仕方がランダムみたいになってます;;

>>330
日立のH8/3052Fです
334デフォルトの名無しさん:2008/06/17(火) 20:47:22
>>333
あ、ごめんコロンになってたかな?
セミコロンに直してください。

ランダムというかウェイトいれないといくらマイコンって言ってもその程度の
ロジックならかなり早い点等を繰り返すはず。
なので変な点等になる。
335デフォルトの名無しさん:2008/06/17(火) 20:47:50
点等orz
点灯ね
336デフォルトの名無しさん:2008/06/17(火) 20:50:26
スイッチ押してる間ずっとP2.DR.BIT.B0が0だったりして。
制御系って適当に作りまくってると火を吹きそうなイメージなんだけど大丈夫なんだろか
337デフォルトの名無しさん:2008/06/17(火) 20:51:34
>>336
多分タクトスイッチが押されるとアースしてるんじゃね?
338デフォルトの名無しさん:2008/06/17(火) 20:51:36
あんまりよく読んでないけどP2.DR.BIT.B0はスイッチの入力か?
上のレスのソースだと、スイッチが0の状態ままだと、
ひたすらインクリメントなりシフトなりするだろうから
一回押すたびに点灯という動作にはならないんじゃないか?
おそらく、スイッチがどちらかの状態になったらパパパパとつくだけかね。
339デフォルトの名無しさん:2008/06/17(火) 20:52:08
よくわかんないけど、ボタンを放すまで待つとか、そういう処理はいらないのかな
340デフォルトの名無しさん:2008/06/17(火) 20:53:38
{
char 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--;
}
}
341340:2008/06/17(火) 20:54:13
応急策ね
342デフォルトの名無しさん:2008/06/17(火) 20:55:02
あ、ごめん>>340だめだわ
343デフォルトの名無しさん:2008/06/17(火) 20:56:56
{
char 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--;
}
}
}
344デフォルトの名無しさん:2008/06/17(火) 20:58:38
本当はマイコンが持ってるタイマーとか使えばいいんだろうけど
いきなりそれだと敷居があがるので、ベタなカウンターでやってみた。
345デフォルトの名無しさん: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
合計 *** *** *** *** ***

を表示するプログラムって一次元配列を使ってどの様に書けますか?
おねがいします
346デフォルトの名無しさん:2008/06/17(火) 21:01:25
347デフォルトの名無しさん:2008/06/17(火) 21:01:42
ずれた・・・すみません;;
348デフォルトの名無しさん:2008/06/17(火) 21:19:43
>>345
できたよ

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;
}
349デフォルトの名無しさん:2008/06/17(火) 21:22:25
>>348
ちょっwwww カルーアミルクを噴出しちまったじゃねーかYO!
350デフォルトの名無しさん:2008/06/17(火) 21:27:53
>>338
スイッチの入力です。

>>343さん
試してみました。
スイッチを押す回数     LED
1回           ○●○○
2回           ○●●○
3回           ○●○○
4回           ●○○○

リセットしてやり直すと、また点き方が変わったりしてしまいます。
マイコンがダメなんですかね。
理想は
スイッチを押す回数     LED
1回           ○○○●
2回           ○○●●
3回           ○●●●
4回           ●●●●
なんですけど
351343:2008/06/17(火) 21:30:04
あーLEDってP1.DR.BYTEのどのビットに接続されてるかわかる?
それ確認してなかったよ
352デフォルトの名無しさん:2008/06/17(火) 21:36:31
>>348
ああ驚いた


>>348 の前がどこかわからんけど
const char table[] = {0x00, 0x01, 0x03, 0x07, 0x0f}:

count = 0;

count = (++count % 5);
P1.DR.BYTES = outtable[count];

テーブルがシンプルだったりして・・・
353デフォルトの名無しさん:2008/06/17(火) 21:43:23
>>351
○○○● P1.DR.BYTE=0x01;
○○●● P1.DR.BYTE=0x03;
○●●● P1.DR.BYTE=0x07;
●●●● P1.DR.BYTE=0xf;

こういうことですか?
354デフォルトの名無しさん:2008/06/17(火) 21:45:36
>>353
あー
まあそれでOKです。

シフト演算が思惑通りに動いてない気がする(私の勘違いの可能性大)
ので>>352のような配列で持ってたほうがいいかも
355デフォルトの名無しさん:2008/06/17(火) 21:47:13
<<345
できたお
#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);
}
356デフォルトの名無しさん:2008/06/17(火) 21:48:48
間違った>>345
357355:2008/06/17(火) 22:21:10
配列使ってないうえに合計がめちゃくちゃだった
スマソ
358355:2008/06/17(火) 22:28:05
書き込むスレ間違えた
>>355-358 はスルーしてくれ
359デフォルトの名無しさん:2008/06/17(火) 22:59:31
>>354
{
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;
}
}
}
360デフォルトの名無しさん:2008/06/17(火) 23:16:21
>>359
ああ、すまん。こうだな。
if( sw_cur == 0 ){
P1.DR.BYTE = (1 << outdata);
outdata++;
if(outdata > 4) outdata = 0;
}

>>353のようにしたいなら、たしかH8はI/Oにバッファが
あったような気がするから

P1.DR.BYTE |= (1 << outdata);

すりゃいいんないかな?
できなったら、もうひとつ変数用意すりゃいい。
361デフォルトの名無しさん:2008/06/17(火) 23:32:25
>>345
#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;
}
362デフォルトの名無しさん:2008/06/18(水) 00:15:45
昨日相談したものですが、今日会社からほかのメンバーは皆開発に
行くけどわたしだけテスト要員として来月から配属されることに
決まったそうです。

多分、辞めろっていうことなんでしょうね。

なんで自分だけわかんないのか悔しいけど、頭の構造が違うんで
しょうね、こういうのがわかる人は。
363デフォルトの名無しさん:2008/06/18(水) 00:17:58
>>362
おめでとう、死ねばいい富もうよ
364デフォルトの名無しさん:2008/06/18(水) 00:20:35
お前を採用したのは会社なんだからお前を活用する責任も会社にある
黙って居座ってればいいのだ
365デフォルトの名無しさん:2008/06/18(水) 00:21:40
給料くれるなら別に良いよ
気にスンナ
366デフォルトの名無しさん:2008/06/18(水) 00:22:14
自信がないっていってたんだし、そのままいきなり開発に
放りこまれるよりは親切なほうだと思うけどなあ。

テストの間に勉強すればいい。
367デフォルトの名無しさん:2008/06/18(水) 00:26:02
テストってデバッグ要員のことだったのか
資格試験でも受けてるのかと思った

テスト要員でも雇ってもらえるならいいじゃないか
辞めろって言われるまで居座ってやれ
368デフォルトの名無しさん:2008/06/18(水) 00:26:08
369デフォルトの名無しさん:2008/06/18(水) 00:33:55
会社に行ったらテスト要員になった 辞めろってか
370デフォルトの名無しさん:2008/06/18(水) 00:38:53
辞めろよ
371デフォルトの名無しさん:2008/06/18(水) 00:39:20
多分、若干おかしくなりかけていたから講師から人事に相談されてたっぽい
ですね。スレ違いなのでもう終わります。

教えてくれた人、ありがとうございます。
プログラムがちゃんと書ける人って自分のやってることを説明できて親切で
すね。ほうんとうにありがとうございました。
372デフォルトの名無しさん:2008/06/18(水) 00:46:01
しかし開発要員に採っておいて使えないのにクビ宣告しないなんて
世の中良心的な会社もあったもんだね
つまり当たりを引いたわけだ
373デフォルトの名無しさん:2008/06/18(水) 01:10:48
ワシは単にコネでねじこまれたという説を推すよ
374デフォルトの名無しさん:2008/06/18(水) 01:28:24
俺が新人の頃は同期に全然できない奴がいて、そのうちのひとりは研修中に辞めたよ
375デフォルトの名無しさん:2008/06/18(水) 02:32:03
まあ開発部隊に入りたいならゆっくりでもいいから勉強することだねー
376デフォルトの名無しさん:2008/06/18(水) 02:32:40
入らないほうが幸せにはなれるかもな
377デフォルトの名無しさん:2008/06/18(水) 02:55:38
ゆっくりしていってね(AA略)
378デフォルトの名無しさん:2008/06/18(水) 11:38:52
公務員はプログラミングできるのか?
医者はプログラミングできるのか?
弁護士はプログラミングできるのか?
379デフォルトの名無しさん:2008/06/18(水) 11:42:39
趣味でプログラムできる人もいるんじゃね?
380デフォルトの名無しさん:2008/06/18(水) 11:47:56
仕事でそういう二足のわらじを履いてる人は結構いるよ
有名どころだとLZHの作者はお医者さんだったっけ
381デフォルトの名無しさん:2008/06/18(水) 13:09:26
森田将棋の人も医学部だったね
医師免許はとってないのかな
382デフォルトの名無しさん:2008/06/18(水) 20:40:56
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)

お願いします
383デフォルトの名無しさん:2008/06/18(水) 20:41:56
>>382
>>1を100回読め
384デフォルトの名無しさん:2008/06/18(水) 20:43:33
>>381
時間がないのです。

385デフォルトの名無しさん:2008/06/18(水) 20:45:16
ここはC言語を学ぼうとしている人のためのスレです
情報処理の単位が欲しいだけの人はお帰りください
386デフォルトの名無しさん:2008/06/18(水) 20:46:55
>>382
答えてあげてくださいな

387デフォルトの名無しさん:2008/06/18(水) 20:48:35
ばればれの自演は逆効果w
388デフォルトの名無しさん:2008/06/18(水) 20:49:45
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)
389デフォルトの名無しさん:2008/06/18(水) 20:54:20
大学で資格の関係でどうしてもC言語をやらなければなりません
どうしてもわからない問題があるのでどなたか教えてください

問題1
三角形の底辺の幅、あるいは段数(どちらか一つ)を入力すると、逆三角形を表示する。例えば、底辺5あるいは段数3を入力すると
*****
***
*
となる。

2
下記のように横と縦の累計を計算して表示する。
配列は使わないこと。

3
10個以下の任意のn個(データ数は入力)のデータを入力し、逆順に出力する。
実行結果は奇数と偶数個の例を示すこと。

4
下記のように横と縦の累計を計算して表示する。
ただし、1次元配列を使うこと。

どの問題でもかまいません
本当に困っているので教えてください


390デフォルトの名無しさん:2008/06/18(水) 20:55:57
>>382

#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;
}
391デフォルトの名無しさん:2008/06/18(水) 20:55:59
C言語始めて2ヶ月でこんなもんだいだされました。
文字列の入力を促し、入力。
その文字列の先頭の文字と同じ文字が文字列の中にいくつふくまれるかを求めるプログラム。
先頭の文字も数のうちに入れる。
(ポインタを用いる)

392デフォルトの名無しさん:2008/06/18(水) 20:58:04
>>1を読んでください
それでわからないようならあなたの日本語力と知性は壊滅的なのでおとなしく退学することを勧めます
393デフォルトの名無しさん:2008/06/18(水) 20:58:10
>>389
自分でできないなら資格はありません
394デフォルトの名無しさん:2008/06/18(水) 20:58:13
ああそうですか。
マルチ視ね
395デフォルトの名無しさん:2008/06/18(水) 21:06:28
>>382
#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;
}
できました
396デフォルトの名無しさん:2008/06/18(水) 21:08:14
これはひどい(笑
397デフォルトの名無しさん:2008/06/18(水) 21:10:26
>>382
#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;
}
すいませんこっちでした
398デフォルトの名無しさん:2008/06/18(水) 21:11:32
どっちも微妙にまちがってんじゃねえか
399デフォルトの名無しさん:2008/06/18(水) 21:14:07
だめだこりゃ
400デフォルトの名無しさん:2008/06/18(水) 21:28:26
故意だろ
401デフォルトの名無しさん:2008/06/18(水) 21:33:36
>>382
有限長の文字列を総当りで生成して、それをコンパイルしていくプログラムを作れば
そのうち自分が作りたかったプログラムが自動生成されるんじゃね?
402デフォルトの名無しさん:2008/06/18(水) 21:35:19
>>401
すっげぇ頭いいなおまえw
403デフォルトの名無しさん:2008/06/18(水) 21:36:59
そして自分が作りたかったプログラムかどうかを
判定するプログラムが要るという話になるんですね分かります
404デフォルトの名無しさん:2008/06/18(水) 21:44:13
故意はかんべん
405デフォルトの名無しさん:2008/06/18(水) 21:44:54
なんだこのviper的なノリはwww
406デフォルトの名無しさん:2008/06/18(水) 22:28:54
>>389
どうしても分からないなら資格取れるわけないじゃん
なんかおかしくね?
407デフォルトの名無しさん:2008/06/18(水) 22:30:56
またこの流れかよw
>>60へどうぞww
408デフォルトの名無しさん:2008/06/18(水) 22:31:54
恋はかんべん
409デフォルトの名無しさん:2008/06/18(水) 23:28:46

関数を呼び出す時って他の文字に置き換えてから使えたほうがいいんですか?

例えばadd関数を呼び出してif文に入れるときの場合
x=add(n);
if(x==1)
みたいな感じか
if(add(n)==1)
どちらがいいんでしょうか?
下のほうでやっていたら友達にそのやり方は見にくくてありえないしプロがそんなことやったら確実に怒られるといわれたんですがどうなんでしょうか?
410デフォルトの名無しさん:2008/06/18(水) 23:31:17
場面にもよるが、ステップによるデバッグがしづらいかもしれない。>後者
411デフォルトの名無しさん:2008/06/18(水) 23:31:44
いや好きにすればいいと思うよ
ただ、関数の結果を他にも使う予定があるなら上の方が良いんじゃない?
412デフォルトの名無しさん:2008/06/18(水) 23:36:20
できる限り前者でやったほうがいいんですか?
習ってる途中で後者の方がわかりやすいと思ったのですがプログラムできる友達に言われたので…
413デフォルトの名無しさん:2008/06/18(水) 23:39:07
>>409
その関数が非常に高コストで、その判定部がループの中にあるなら
よくないなあとは思うけど、そうでないなら別に気にしない。

その友達がプロで怒られた経験があるのであれば、もう少し細かい
理由を教えてもらえばいいんでない?
414デフォルトの名無しさん:2008/06/18(水) 23:40:21
ほかにも使うというのは
x=add(n);
if(x==1)
if(x==2)
みたいな感じですか?
あとプログラマーみたいな人たちの間ではどちらが主流なんでしょうか?
415デフォルトの名無しさん:2008/06/18(水) 23:40:54
ちなみに、プロになれば周りのコードにあわせるということのほうが大事。
優劣をつけられない記法の差において、俺はこうすべき!って一人で
走ってるなら怒る。
416デフォルトの名無しさん:2008/06/18(水) 23:40:58
>>409
その友達がどの程度のプロなのかはこの際置いておくとして、どちらがいいとか悪いとか言うことはない。
明確なことは、前者は変数を一つ使用し、後者は使用しないということである。
add() の返す値をただ一回しか評価しないのなら、後者のように書いて何の問題もない。
値を何度も評価するのなら、前者のように一時変数に格納する必要があるか、なくても効率がいいかもしれない。
後は単なる好みの問題である。
417デフォルトの名無しさん:2008/06/18(水) 23:41:32
文脈によるがこの場合はどちらでもいい。
ところでこのお題はホントはこうじゃなかった?
x = add(n) ; if (x == 1) 

if ((x = add(n)) == 1) 
の比較。
418デフォルトの名無しさん:2008/06/18(水) 23:42:40
>>413
友達はプロではありません 
普通に大学生なので…
多分趣味でやってる程度だと思います。
どこで習ったかはわかりませんが
419デフォルトの名無しさん:2008/06/18(水) 23:43:35
値を使い回したい場合に変数に入れるのは当然として、
そうでない場合はメリットとデメリットがあるので好きにすればいいと思うよ。

○ メリット
・ 関数呼び出しが長い場合、読みやすくなる
・ デバッグ時に戻り値が何だったか分かりやすい

○ デメリット
・ その場でしか使わないような無駄な変数が広いスコープ上に現れてしまう場合もある
420デフォルトの名無しさん:2008/06/18(水) 23:44:20
慣用句的なもの
 if ((fp = fopen(〜)) == NULL)
Is系のメソッドに代表される真偽返却メソッド
 if (isalnum(〜))

これ以外は大抵分けて書くようにしてるね。
多少冗長に思えても、他の人が読みやすいか、また、
誤解を与えにくい書き方になっているか、それを重視してる。
421デフォルトの名無しさん:2008/06/18(水) 23:55:16
誤解を与えにくいように、というのはあまりメジャーではない二項演算子を
使う時などに、冗長ではあるが、括弧をつけて明示するようなことね。

ちゃんと知ってればその括弧が無くても正しく動作する事は理解できるが、
うろ覚えの人でも勘違いを起こさない。

もしかしたら研修明けの新人がメンテするかもしれないし。
422デフォルトの名無しさん:2008/06/19(木) 00:00:04
>>418
ある程度理解できたと思っている頃、自分の中で勝手にスタイルが
確立されているのはよくあること。
その時、自分のスタイルとは異なる、または理解できない書き方を見ると
「なんだこの一般的ではない書き方は!俺流に直す!」
と思ってしまうこともまた、よくあること。

どんなスタイルでも読めて、それに合わせてかけるようになって一人前かな。
423デフォルトの名無しさん:2008/06/19(木) 00:03:01
命名規則なんかは特に…
英語、ローマ字、dwほにゃらら、アンダースコア区切り
424デフォルトの名無しさん:2008/06/19(木) 00:04:25
しかし !strcmp だけは真似しようと言う気になれない
425デフォルトの名無しさん:2008/06/19(木) 00:08:04
英語で名前付けようとして辞書引いてみて調べた結果
単語が長かったりすると何か使いにくくて困ったりする
そんな俺
426デフォルトの名無しさん:2008/06/19(木) 00:08:59
そういう場合は適当に略すけど、
略すとわかんねえんだろうなあって単語の時は悩む。
427デフォルトの名無しさん:2008/06/19(木) 00:14:52
直感で分かりにくい(もしくは分からない)単語を使うよりは
いっそローマ字にした方がいいと思う俺
428デフォルトの名無しさん:2008/06/19(木) 00:14:57
なんとなく先頭3文字を使って略してるけど、structもstringもstrだから困る
429デフォルトの名無しさん:2008/06/19(木) 00:16:02
word とか list とか簡単な名前をつけたい時にも悩むオレ
430デフォルトの名無しさん:2008/06/19(木) 00:16:11
>>422
では自分の書きやすいように使い分けてればいいんですかね?
実際に使うようになったら周りにスタイルを合わせていけばOK?
ってかc言語って仕事で使うことあるんですか?
c言語は入門にはいいけど実線向きではないということお聞いたんですが
431デフォルトの名無しさん:2008/06/19(木) 00:17:20
>>430
戦線によると思いますよ
局地戦ではCが現役です
432デフォルトの名無しさん:2008/06/19(木) 00:17:29
>ってかc言語って仕事で使うことあるんですか?
お前の顔が変形するまで殴るぞ(半田ごてで
433デフォルトの名無しさん:2008/06/19(木) 00:18:31
>>432
え??
434デフォルトの名無しさん:2008/06/19(木) 00:18:50
>>430
XPみたいな資源が有り余ってる環境でのソフト開発ならわざわざCで作らないんじゃないかな
435デフォルトの名無しさん:2008/06/19(木) 00:20:42
電気屋とか電話屋みたいな旧役所系のシステムだと今でも余裕でC使ってる場合がある
436デフォルトの名無しさん:2008/06/19(木) 00:21:45
別にCに拘る必要は無い。アルゴリズムや手法など、そういった点が重要。
437デフォルトの名無しさん:2008/06/19(木) 00:22:04
勘定系のCOBOLはそろそろ駆逐されはじめたと聞いた
438デフォルトの名無しさん:2008/06/19(木) 00:22:54
勘違いしてそうだから言っとくけど
C++なら超いろんなとこで現役
439デフォルトの名無しさん:2008/06/19(木) 00:22:58
あとmain文で強制終了するときにreturn 0はあまり使わないほうがいいといわれたんですがどうなんですか?
440デフォルトの名無しさん:2008/06/19(木) 00:24:15
正直どーでもいい
441デフォルトの名無しさん:2008/06/19(木) 00:24:40
>>439
一般的には main の返り値は正常終了のときに 0 を返すことが多いから
442デフォルトの名無しさん:2008/06/19(木) 00:25:30
なんかreturnは関数を返すのに使うからmain文では使わないほうがいいといってました。
443デフォルトの名無しさん:2008/06/19(木) 00:25:52
>>439
exitを使ったときや、mainの戻り値が0以外だったときに
特別な挙動をするシステムだと、その流儀に従ったほうがいいけど
普通はexitを使わなくても、常に0を返しても問題ない
444デフォルトの名無しさん:2008/06/19(木) 00:26:45
>>442
それは例の友人が言ってたのか?
悪いことは言わないからそいつの言うことは話半分に聞いとけ
445デフォルトの名無しさん:2008/06/19(木) 00:26:58
>>439
どこらへんが強制なのか知らないけど、慣習的に0は正常終了
他人の目を気にするなら1でも返してお茶を濁しておけばおk
446デフォルトの名無しさん:2008/06/19(木) 00:27:12
>>439
ケースにもよるし、現場の考えにもよるし、いろいろだねえ。

自分で書いてるプログラムだと使ってるなあ。
ある程度の大きさの物書いてるとmainなんて全体の流れを制御する程度だし
強制終了する場合はおおよそプログラムのエラーで停止か、機能を止める
ような感じなのでさほど問題ない。
447デフォルトの名無しさん:2008/06/19(木) 00:28:33
>>430
特に指定が無く、一人で書き上げるソースであれば、インデント
スタイルも含めて一貫性が保たれていればとりあえずはOKかな。
繰り返すけど、自分のスタイルが最善とは思わないようにすること。

仕事でも使うよ。
PerlとかJavaとかC#とか、便利な面が多く、目的の機能を実装するのは
はやいけれど、実行速度は遅い。Cは逆ね。
業界でVBが空前のブームになったのは習得しやすく、出来上がるまでが
とにかくはやかったからです。
んで、習得したてのVB戦士が書き散らかしたコードをメンテする羽目に
なった現場が火を吹くわけです。
448デフォルトの名無しさん:2008/06/19(木) 00:28:49
>>439
さすがにそれはちょっと記憶違い起こしてると思われる

そうじゃなきゃその友人はわかってのに語っちゃうかなり駄目なひとだぞ
449デフォルトの名無しさん:2008/06/19(木) 00:31:55
>>442
はい 同じ人です。
正直その人がどこまでプログラムができるのかはわかりませんが
僕はまったくやったことがないのでどれが本当なのかわからないので
450デフォルトの名無しさん:2008/06/19(木) 00:31:54
まあmainを再帰呼び出しすることまで考えてるなら
もちろんabort()しなきゃだめだけどそういんじゃないだろうな
451デフォルトの名無しさん:2008/06/19(木) 00:33:44
452デフォルトの名無しさん:2008/06/19(木) 00:34:19
細かい言いまわしをすれば、
stdlib.hにEXIT_SUCCESSが0として定義されてる処理系では、
異常終了時に0を返すべきではないね。

んで、半田ごてが必要な世界はほっといて
大抵は0なんで、異常終了時は0返さないほうがいいかなー。
/* ゴメンね、ハード屋さん愛してる。仲良くしてね */
453デフォルトの名無しさん:2008/06/19(木) 00:34:35
参考までに main() とプログラムの終了の仕方について詳しく知りたいなら
<stdlib.h> の abort() と atexit() と exit() の仕様を読んでみることを勧める
454デフォルトの名無しさん:2008/06/19(木) 00:35:19
>>439
exit(EXIT_FAILURE); があるじょのいこ
455デフォルトの名無しさん:2008/06/19(木) 00:37:15
珍しく健全な流れで逆に吹いたw
456デフォルトの名無しさん:2008/06/19(木) 00:38:55
みなさんありがとうございました。
またくると思うのでよろしくお願いします。
457デフォルトの名無しさん:2008/06/19(木) 00:39:07
>439
理想的な書き方ではないけど、意味をわかって使ってるなら問題ない
どうせ今の段階ではmainやプログラムの戻り値に意味なんか持たせてないし、atexitも使ってないだろう
そういうことが必要になったら必然的にそう書かざるを得なくなるからそのとき覚えればいい
458デフォルトの名無しさん:2008/06/19(木) 00:39:14
>>455
ここは時々そうなるよ。

ちょっと前だと、配列の扱いだっけ?
ポインターに格下げだとか・・・あれは荒れた感じだったけど
459デフォルトの名無しさん:2008/06/19(木) 00:39:51
ポインタに格下げ(笑)
460デフォルトの名無しさん:2008/06/19(木) 00:44:27
業界入ってすぐに行った現場ではRET_OKとRET_NGが定義されていたなあ。
当時の俺はEXIT_FAILURE EXIT_SUCCESSを知らなくて、なんも疑問に
思わずそれで組んだけど。
痛いのが治らない会社とはいわれるが、納得だわ。
461デフォルトの名無しさん:2008/06/19(木) 00:47:49
… 式中に現われる「Tの配列」型のオブジェクトへの参照は(3つの例外を除いて)、
配列の最初の要素を指すポインタに意味が格下げになる。
結果としてできるポインタの型は「Tへのポインタ」となる。
(3つの例外とは、配列がsizeofのオペランドとなるとき、
アドレス演算子&のオペランドとなるとき、
char型の配列を文字列リテラルで初期値するとき、を指す。) …

    by C Programing FAQ Q.6.3
462デフォルトの名無しさん:2008/06/19(木) 00:52:55
>>452
EXIT_SUCCESSが0でないことって有り得るの?
平林さんのANSI C言語辞典では0って言いきっているけど。

と、ここまで書いたところで、X3010:2003開いてみたら、
確かに0でないといけないとはどこにも書いていない。
知らなかった。
463デフォルトの名無しさん:2008/06/19(木) 00:53:47
その時の論争は「格下げ」の内容をうまく説明できなかったことに
原因があると思うよ。
464デフォルトの名無しさん:2008/06/19(木) 00:54:47
>>460
RETは戻り値全般っぽいから、EXITの定義(0が正常、0以外が異常)とは違うかもしれんよ。
465デフォルトの名無しさん:2008/06/19(木) 00:55:07
>>463
まーねー

>>461がその回答かな?
466デフォルトの名無しさん:2008/06/19(木) 00:57:57
>>464
ごめ、語弊あったね。
mainを含む関数すべての戻り値として使ってたんだ。
467デフォルトの名無しさん:2008/06/19(木) 01:00:04
そういえばmainの戻り値を意識するのってどんなのがあるんだ?
コマンド処理系で使うバッチとか?
468デフォルトの名無しさん:2008/06/19(木) 01:01:01
>>467
既に出てるけどmainを再帰呼び出しするときや、実際にシステムで戻り値を使う場合
469デフォルトの名無しさん:2008/06/19(木) 01:02:46
>>467
うん。シェルスクリプトとか。
コマンドラインでも foo && bar と書けばfooが成功した場合のみ
barが実行されるので、たまに便利。
470デフォルトの名無しさん:2008/06/19(木) 01:04:18
expr を忘れてもらっちゃ困るな
471デフォルトの名無しさん:2008/06/19(木) 01:55:12
>>449
その友達のようなヒトノコトを半可通と呼びます。
これまでの流れで、かなりいい加減な事ばかり言っているね。
472デフォルトの名無しさん:2008/06/19(木) 02:01:39
printfで出力桁数を.0のように整数部分だけにした場合は小数の部分は切り上げですか?四捨五入ですか?
473デフォルトの名無しさん:2008/06/19(木) 02:03:35
切り上げも四捨五入もないよ
単純に表示桁を変えてるだけだから
474デフォルトの名無しさん:2008/06/19(木) 02:07:29
#include <stdio.h>
int 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;
}
やってみた。なんだかなぁ。
475デフォルトの名無しさん:2008/06/19(木) 02:07:42
つまり切り捨てってことか。
476デフォルトの名無しさん:2008/06/19(木) 02:10:45
切り捨ててるんじゃなくて、整数部分だけ表示してる
小数点第n位まで計算しなさい、という算数の言い回しを思い出すといいよ
477472:2008/06/19(木) 02:10:46
自分の環境だと%fのままある数入れたら2999.5で%.0fにしたら3000.0になったので聞いてみたんですが……
478デフォルトの名無しさん:2008/06/19(木) 02:12:32
>>477
先にそれを言え

あと自分の環境も詳しく
479デフォルトの名無しさん:2008/06/19(木) 02:15:08
今VC++ 2008 EE で試してみたら
3000になった
480デフォルトの名無しさん:2008/06/19(木) 02:17:29
Solarisだとこういうので丸め方を指定できるようだ
http://sdc.sun.co.jp/sunstudio/documentation/ss12/mr/man3m/fesetround.3m.html
481472:2008/06/19(木) 02:17:36
XPでコンパイラはBorland5.5です。

>>474さんのもコンパイルして試してみたんですがやっぱりどういう風に処理されてるのか謎すぎます…
482デフォルトの名無しさん:2008/06/19(木) 02:18:53
色々試してみたが

%0.1fで
2999.95だと 2999.9
2999.96だと 3000.0

四捨五入って訳でもないのか?
483デフォルトの名無しさん:2008/06/19(木) 02:22:44
誤差が出てるんだろ
484デフォルトの名無しさん:2008/06/19(木) 02:27:14
そういえば浮動小数点の場合、この間宿題スレで見たんだと
思うけど、誤差の許容範囲云々を扱うのがあったなあ


パイとかそういう方向の読み方で・・・なんだっけかな?
485デフォルトの名無しさん:2008/06/19(木) 02:27:41
ヘルプには
>精度指定では出力値が切り捨てられたり、浮動小数点数が丸められたりすることがあります
とは書いてあった
486デフォルトの名無しさん:2008/06/19(木) 02:28:16
487デフォルトの名無しさん:2008/06/19(木) 03:15:03
%fは捨てて、%gを使おう。
# いや、勿論%fでないといけない場合は%fでいいが。
488デフォルトの名無しさん:2008/06/19(木) 03:20:21
丸め処理の詳細は処理系依存
マニュアルを読めば書いてあるはず
489デフォルトの名無しさん:2008/06/19(木) 06:36:06
そういえば、EXIT_SUCCESSとEXIT_FAILUREはstdlib.hにあるけど、
TRUEとFALSEは標準ヘッダーでは提供されてないのね。何か理由があるの?
490デフォルトの名無しさん:2008/06/19(木) 07:33:09
>>489
標準関数の返り値はTRUEやFALSEじゃないからでしょう
491デフォルトの名無しさん:2008/06/19(木) 07:57:35
stdbool.hにtrueもfalseもありますね。
492デフォルトの名無しさん:2008/06/19(木) 07:57:45
boolean型自体が存在しないからか
493デフォルトの名無しさん:2008/06/19(木) 16:18:46
#define BEGIN {
#define END }

こんな書き方する人って実在するんですか?
494デフォルトの名無しさん:2008/06/19(木) 16:19:52
伝説です
495デフォルトの名無しさん:2008/06/19(木) 16:20:11
都市伝説だと思いたいけど、実在したんだろうね。
496デフォルトの名無しさん:2008/06/19(木) 16:20:25
Cが出始めのころ、PASCALから抜けられない人がやってたなw
IBMでも堂々とやってた気が
497デフォルトの名無しさん:2008/06/19(木) 16:29:58
その発想はなかった
498デフォルトの名無しさん:2008/06/19(木) 16:51:36
IBMのメインフレーム端末のキーボードに { や } がなかった。
トライグラフを使うよりBEGIN ENDにした方がわかりやすかった。

#define BEGIN ??<
#define END ??>
だったかなぁ
499デフォルトの名無しさん:2008/06/19(木) 16:58:18
??=include<stdio.h>
main() ??<
  printf("hello world !??/n");
  exit(0);
??>
昔の人は苦労したのだな
500デフォルトの名無しさん:2008/06/19(木) 17:12:53
英小文字が使えないターミナルもあったので
全部大文字を使った場合は大小文字を区別しないといった約束事もある。
どれもCの規格にまだ含まれているから手持ちのコンパイラで
コンパイルしてみるとできるはず。VC++2008でもできた。

??=INCLUDE<STDIO.H>
MAIN() ??<
  PRINTF("HELLO WORLD !??/N");
  EXIT(0);
??>
501デフォルトの名無しさん:2008/06/19(木) 17:19:26
コンパイラ屋さんも大変だな
502デフォルトの名無しさん:2008/06/19(木) 17:35:55
gcc -trigraphs でトライグラフは使えたが大文字INCLUDEでつまった。

そんなのがあるなんて全然しらなかったなあ。
503デフォルトの名無しさん:2008/06/19(木) 18:32:16
1 名前:愛のVIP戦士@全板人気トナメ開催中[sage] 投稿日:2008/06/19(木) 18:26:18.50 ID:XhrRc/uD0
300桁が計算できる計算機のソースコードを教えてください

http://yutori.2ch.net/test/read.cgi/news4vip/1213867578/
504デフォルトの名無しさん:2008/06/19(木) 18:38:00
>>503
精度についてなにも言ってないのでdoubleでも使っとけば?w
505デフォルトの名無しさん:2008/06/19(木) 18:45:38
ハードウェアが許す限りの可変長整数演算ができるライブラリどっかになかったっけ
506デフォルトの名無しさん:2008/06/19(木) 18:46:31
長任意精度数値計算ライブラリ。
CではないがJavaのBigDecimal/BigIntegerはよく出来てるからお勧め。
507デフォルトの名無しさん:2008/06/19(木) 19:16:23
使ったこと無いけどmathematicaはどうなの?
508デフォルトの名無しさん:2008/06/19(木) 19:17:27
ソースコードないじゃん
509デフォルトの名無しさん:2008/06/19(木) 19:18:24
maximaでおk
510デフォルトの名無しさん:2008/06/19(木) 19:46:36
mathematica大学のライセンスでただだから使ってるけどぜんぜん使いこなせねー
511デフォルトの名無しさん:2008/06/19(木) 20:20:09
基本情報処理試験のc言語の問題を実際に打って
動かしてみたいのですが、どうすればよいでしょうか?
512デフォルトの名無しさん:2008/06/19(木) 20:40:30
まずエディタを起動します
513デフォルトの名無しさん:2008/06/19(木) 20:41:50
服を脱ぎます
514デフォルトの名無しさん:2008/06/19(木) 20:47:19
ワッフルワッフル
515デフォルトの名無しさん:2008/06/19(木) 20:49:23
コンパイラを入手しましょう
516デフォルトの名無しさん:2008/06/19(木) 21:14:30
ソースを読む力をつけるためにはどういうところに気をつければよい?
>>511とじゃいが、基本情報とかの試験で穴埋めとかをとくコツ
みたいなのはなんかある?
スレちだったらスマソ。。。
517デフォルトの名無しさん:2008/06/19(木) 21:17:41
まずソースを読む力の意味を定義してくれ

とか言うようなことを普通に考えるようになることかなぁ
518デフォルトの名無しさん:2008/06/19(木) 21:44:17
基本情報程度なら選択肢先に見ればできない人でもなんとなく流れがわかるかと
ソースを読む力は反復や考えようとする頭が無いと元が低い人は付かないな
好奇心持って色んなコード見る、書くのが一番だと思う
519デフォルトの名無しさん:2008/06/19(木) 21:48:48
とりあえず、基本を理解することやなぁ。
ソースの書き方も、部分部分をしっかり分けて記述できるようになると
後でどこが問題か?部分部分で検査することも出来るしね。
いわゆるモジュールってやつ。あとは、そのモジュールを幅広く
流用できる汎用性を考慮して書けると良い。
520デフォルトの名無しさん:2008/06/19(木) 21:54:17
自分の書いたコードですらしばらくいじってないとわけがわからなくなるからな
コメントは大事だとわかってるが書いてるときには手抜きしてしまう
521デフォルトの名無しさん:2008/06/20(金) 01:35:19
UTF8 のファイルから1行ずつ読み込み、半角スペースが入っている
にもかかわらず

if(str[textPointer]==TEXT(' '))

でひっかかってこねー。なんで?
522デフォルトの名無しさん:2008/06/20(金) 06:53:25
みるみるコード力UP
523デフォルトの名無しさん:2008/06/20(金) 06:54:10
>>521
定義に立ち返って考え直すんだ
524デフォルトの名無しさん:2008/06/20(金) 07:26:22
TEXT って・・・
525デフォルトの名無しさん:2008/06/20(金) 07:30:44
cソースのいたることろに同じロジックを入れ込むようにするにはどうすればいいんだろ?
本来なら関数で分離するようなロジックをわざと入れたいような時です。
526デフォルトの名無しさん:2008/06/20(金) 07:45:20
>>525
でっかいマクロでも作るかい
527521:2008/06/20(金) 07:45:25
if(str[textPointer]==' '){
も試したけどダメ。
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

と表示される。わかる人、助けてくれ。
528525:2008/06/20(金) 07:49:59
>>526
マクロで可能なんですかね?

まあやろうとしてることは有効期限つきで機能を提供したい場合に
関数などの一箇所で日付チェック処理しちゃうとバイナリレベルで
書き換えられたらアウトなので、いたるところに埋め込みたい
というのが理由なんです。
529デフォルトの名無しさん:2008/06/20(金) 07:56:47
>>528
どうせ日付そのものをごまかされるからムダなんじゃw
530デフォルトの名無しさん:2008/06/20(金) 07:59:21
>>529
それは別にいいんですよ。
毎回手間が伴いますので。
一箇所で処理してるとバイナリレベルでばれればおしまいなので、それさえ回避できれば。
531デフォルトの名無しさん:2008/06/20(金) 08:04:35
#define HOGE(a,b) {\
 int 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);\
 }}
マクロはこんな風に\改行でつないでいけばやりたい放題ぞよ
532デフォルトの名無しさん:2008/06/20(金) 08:29:37
>>527
wsprintf(szTrash, TEXT("a %c b"), TEXT(' '));
wsprintf(szTrash, L"a %c b", L' ');
こういうのもダメなわけ?
533デフォルトの名無しさん:2008/06/20(金) 08:35:40
>>531
おーありがとうございます。
関数のように処理を入れたい場所に書いておけばインライン展開してくれる
ってことなんですかね?
534521:2008/06/20(金) 09:12:41
>>532

wsprintf(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 が入るんだろ。わかる人、助けてちょーだい。
535デフォルトの名無しさん:2008/06/20(金) 09:16:54
つーかUTF8のスペースとコードが違うんじゃね?

C言語でスペースのままだとアスキーコードで処理され0x20になってるんじゃね?
試しにcharでスペースを与えて、sprintfあたりで16進数表示してみ?
536デフォルトの名無しさん:2008/06/20(金) 09:26:44
普通に考えると、strを読み込むのに失敗してるんじゃないの
537521:2008/06/20(金) 09:31:45

>>535

その可能性も考えたが、テキストファイルにスペースがあったらその
スペースが 0x0 に変換されるから、関係ないってことがわかった。
538デフォルトの名無しさん:2008/06/20(金) 09:32:42
scanf系の %s で読んでいたというオチですね、わかります
539デフォルトの名無しさん:2008/06/20(金) 09:38:31
わけわからん
環境書け
540521:2008/06/20(金) 09:39:46

>>538

fp = _wfopen(fullPathAndFileName, TEXT("r"));

ってやって

while(fwscanf(fp, TEXT("%s"), str) != EOF){

で読んでるが、これって問題ありってこと?
541デフォルトの名無しさん:2008/06/20(金) 09:43:06
無知な俺に教えてほしいんだけどTEXT()ってなんだ
542デフォルトの名無しさん:2008/06/20(金) 09:44:09
問題大有り。
関数の仕様をちゃんと読め。
543521:2008/06/20(金) 09:48:57

>>542

仕様を読んでくる。つまらん質問をしたようでスマン。
544デフォルトの名無しさん:2008/06/20(金) 09:49:13
%s指定子は空白を読むとそこで停まる
545デフォルトの名無しさん:2008/06/20(金) 09:50:40
>>535
C言語と関係ないけど一応いっとくと
UTF-8はASCIIにある文字はそのまんまのコードになる
546デフォルトの名無しさん:2008/06/20(金) 09:51:53
どうして初心者は一足飛びに難しいことをやろうとするんだ
547デフォルトの名無しさん:2008/06/20(金) 09:56:47
>>541
環境によって、 "" と L"" を切り替える。
548デフォルトの名無しさん:2008/06/20(金) 09:57:09
環境つーか、defineか
549デフォルトの名無しさん:2008/06/20(金) 09:59:57
>>533
インライン関数にするのはどうなの?
550デフォルトの名無しさん:2008/06/20(金) 10:08:09
551デフォルトの名無しさん:2008/06/20(金) 10:12:20
_wfopenの場合はL""だな TEXT("")使っちゃ駄目だろ
552デフォルトの名無しさん:2008/06/20(金) 10:21:28
>>534
>ってやってみて Hex を調べたら 0 になってた。「0ってなんじゃ?」
>って思って UNICODE表で調べてみたら NULL ってことがわかりました。

っ「文字列とは何ですか。」
553デフォルトの名無しさん:2008/06/20(金) 14:24:54
>>530
何箇所あったって同じものを置くんじゃ、機械的に検索・置換でおしまい。
554デフォルトの名無しさん:2008/06/20(金) 15:59:11
質問です。
http://www.geocities.jp/kenji_y0328/crenshu/index.htmlのR31なんですが
名前にendを入力すると合計を出して終了するというプログラムなんです。

この解答http://www.geocities.jp/kenji_y0328/crenshu/renshu/r031.gifでは
一番初めにendを入力しても終了せず点数も入力して、出力される値も%%などがでて汚い結果になります。

初めにendを入力したらすぐ終わるようにするには、どんな改変が必要なのでしょうか?
プログラムを終わらせるには、return 0;でいいんでしょうか?


555デフォルトの名無しさん:2008/06/20(金) 16:54:42
なぜgif

それはおいといて

while(1){
 /*前処理*/
 if(strcmp(tanto, "end")==0) break;
 /*表示処理*/
}
556:2008/06/20(金) 18:33:39
繰り返し処理についてなんですが

【問題】数値(整数値)をキー入力して、その数だけ「#」を表示する処理。

【実行例】
表示回数は?8
########

このプログラムを作れというのですが正解はどう書けばいいのですか?
アホですみません、お願いします。
557デフォルトの名無しさん:2008/06/20(金) 18:37:18
>>549
for入りだからまず展開されないんじゃね?
558デフォルトの名無しさん:2008/06/20(金) 18:50:39
全然関係ない話なんだけどさあ、検索するじゃん。検索。googleとかで。
それでさあ、くだらないブログが腐るほど引っ掛かるんだよね。
知ったかとか、出鱈目とか鵜呑みにしたような内容の馬鹿ブログ。
いや、早い話がお前らブログ辞めろって。
いや、それだけなのよ。まじで。お願いだから辞めて下さい。
資源の無駄、そして多くの人、社会の利便性と生産性を根こそぎかっさらってますよ。お前達
559デフォルトの名無しさん:2008/06/20(金) 21:09:04
検索エンジンの使い方が分からないだけ
560デフォルトの名無しさん:2008/06/20(金) 21:10:51
>>556
>>1読め
561デフォルトの名無しさん:2008/06/20(金) 21:22:24
初心者ですが
While(1)
としたらは無限ループになりますか?
562デフォルトの名無しさん:2008/06/20(金) 21:23:52
釣れますか?
563デフォルトの名無しさん:2008/06/20(金) 21:28:34
>561
内部に脱出する部分がなければなる
564デフォルトの名無しさん:2008/06/20(金) 21:37:21
>>563
ひっかかるなよwwww
565デフォルトの名無しさん:2008/06/20(金) 22:00:51
>>561
While( )という関数しだいだな
566デフォルトの名無しさん:2008/06/20(金) 22:02:52
マクロかもしれないぜ
567デフォルトの名無しさん:2008/06/20(金) 22:03:59
C とは限らない。
BASIC かもしれない。
568デフォルトの名無しさん:2008/06/20(金) 22:04:03
>>564
何が?
内部に脱出する部分がなければ無限ループになるのは当然だろ?
569デフォルトの名無しさん:2008/06/20(金) 22:06:59
釣りか?
C は大文字小文字を区別するんだぜ?
570デフォルトの名無しさん:2008/06/20(金) 22:12:18
ヒント:内部とは何の内部だろうか
571デフォルトの名無しさん:2008/06/20(金) 22:14:13
ギャグの解説をするようなまねはやめてくれ恥ずかしい
572デフォルトの名無しさん:2008/06/20(金) 22:43:00
おっさん IN JAPAN!!!!!!!
573デフォルトの名無しさん:2008/06/20(金) 22:43:25
ごめん誤爆
574デフォルトの名無しさん:2008/06/20(金) 22:45:41
Πの近似値を求めるプログラム教えてくれ
575デフォルトの名無しさん:2008/06/20(金) 22:47:11
super pi
576デフォルトの名無しさん:2008/06/20(金) 22:53:39
>>574 これを計算すればいいよ。

4 * ( 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ・・・
577デフォルトの名無しさん:2008/06/20(金) 22:55:36
そんな収束の遅いものをw
578デフォルトの名無しさん:2008/06/20(金) 23:37:53
>>554
_tを_hyoとかretu_に書き換えればグンと読みやすくなるんだぜ
579デフォルトの名無しさん:2008/06/20(金) 23:39:10
それだと頭悪そうだからrowとかcolumnにしてやれよ
580デフォルトの名無しさん:2008/06/20(金) 23:41:50
学生の頃はrowとcolumnをよく取り間違えたものです。
hyoのかわりにtableで。
変数名が長くなることに対して何もためらわないように
581デフォルトの名無しさん:2008/06/20(金) 23:44:51
せっかくローマ字なんだから統一しようぜ
582デフォルトの名無しさん:2008/06/20(金) 23:45:49
雹とか烈とかそんなのしか思い浮かばなかった俺はどうすれば
583デフォルトの名無しさん:2008/06/21(土) 01:48:40
row/column じゃなくて row/col にすると文字数揃って読みやすくなる箇所が増えるよ
584デフォルトの名無しさん:2008/06/21(土) 07:43:02
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6995.txt
ちょっと長いんですがこのプログラムについて質問させてください
これを実行すると
無限ループにさせてるはずなのに舟の移動が一回しかできなくなってます
どこが間違っているんでしょうか?
42行目のif(check(count)==0)break;を一旦消してみたら無限ループになったので
check関数がおかしいのかもしれないってとこまでは分かったのですが・・・
585デフォルトの名無しさん:2008/06/21(土) 08:05:04
>>584
そこまでは正しい判断だ。check関数をよく調べてみるんだ。
586デフォルトの名無しさん:2008/06/21(土) 09:02:49
アルファベットをn文字分ずらす関数なんです。*str + nでn文字ずれるがzからaにいかないことはわかるんですが*str = 'a' + (*str - 'a' + n) % 26; のとこがよくわからないので教えて頂けませんか?

void encrypt(char *str, int n)
{
while(*str) {
*str = 'a' + (*str - 'a' + n) % 26;
str++;
}
}
587デフォルトの名無しさん:2008/06/21(土) 09:12:36
%の意味はわかってる?
588デフォルトの名無しさん:2008/06/21(土) 10:11:48
>>585
解決しました
分かってみると簡単なところですね
ありがとうございました
589デフォルトの名無しさん:2008/06/21(土) 10:42:17
>>587
%は割ったときの余りですよね?
590デフォルトの名無しさん:2008/06/21(土) 10:53:56
まず、*str-'a'の部分で、文字(a〜z)を、aからの距離に変換している。
で、+nで移動。だけど、a-zは26文字しかないから、超えた分は折り返すように
%26してる。あとは「aからの距離」を文字に直すのに+'a'しておしまい。
591デフォルトの名無しさん:2008/06/21(土) 10:57:27
>>590
そういうことですか。ありがとうございました
592デフォルトの名無しさん:2008/06/21(土) 11:24:56
0x20と32と' 'が同じなのはどういう理由なのでしょう。
使いかたは理解していますが、背景が知りたいです。
593デフォルトの名無しさん:2008/06/21(土) 11:27:18
人に宿題やらさせてるだけじゃねえか?
594デフォルトの名無しさん:2008/06/21(土) 11:28:48
0x20と32が同じだって理由を知らないで、使い方を理解してるかっていえるのか。
595デフォルトの名無しさん:2008/06/21(土) 11:29:06
>>592
040 が仲間になりたそうにしています
596デフォルトの名無しさん:2008/06/21(土) 11:47:02
catコマンドを書いているんですけど、

if (argc == 1) {
    do_cat(stdin);
} else {
    for (i = 1; i < argc; i++) {
        /* 処理 */
    }
}

のelse文以下の処理はコマンドラインで指定されたファイルを読んでいくのですが、
else文を用いてその中にfor文を書くのか、else文を用いないでそのままfor文を書くのか、どちらが優れていますか?
597デフォルトの名無しさん:2008/06/21(土) 11:52:53
>>596
優れているかではなく、読みやすいかで判断すべき
598デフォルトの名無しさん:2008/06/21(土) 12:44:26
フォルダの中のある拡張子を持つファイルを読み込んで順次処理をしていきたいのですが、フォルダの中にあるファイルを検索する関数や処理などの方法はどのようなものがあるのでしょうか?
599デフォルトの名無しさん:2008/06/21(土) 13:02:58
>>598
環境がわからないと答えられない
とりあえずWindows用
FindFirstFile
FindNextFile
600デフォルトの名無しさん:2008/06/21(土) 13:15:29
POSIX用
opendir
readdir
601デフォルトの名無しさん:2008/06/21(土) 14:21:21
mallocで動的に確保したメモリを開放しないでプログラムを終了したらどうなりますか?
602デフォルトの名無しさん:2008/06/21(土) 14:27:10
環境によるかもしれないけどかなりの確率でmallocを発行したプログラムが
終了すると開放される。

まあこれにはからくりがあって、プログラム起動と同時にプログラムにいくらかの
メモリを割り当てて、プログラム内部からmallocを発行すると起動時に割り当てられた
エリアから確保したりしてるらしい。
なので、プログラムがfreeせずに終了してもシステムは最初に割り当てたエリアの
アドレスとかは知ってるので自動で開放される・・・

でもmallocの管理もできないと大きなプログラムになってくると
実行中にメモリが確保できないとかでこける可能性もでてくるんじゃね?
603デフォルトの名無しさん:2008/06/21(土) 14:36:04
ファイルの末尾に'\n'がないってどういうケースですか?
604デフォルトの名無しさん:2008/06/21(土) 14:38:58
ファイルの末尾に'\n'がない場合、としか
605デフォルトの名無しさん:2008/06/21(土) 14:42:14
>>603
そういうファイルもあるから、きっちり対応しよう
606デフォルトの名無しさん:2008/06/21(土) 14:43:21
いやちょっと管理ミスあったときどうなるのかな〜とか気になって・・・

607デフォルトの名無しさん:2008/06/21(土) 14:58:44
2chのログにもなかったきがするぜ!
608デフォルトの名無しさん:2008/06/21(土) 15:51:06
Win XP Home SP3
最近Borland(コンパイラ)とC言語を始めよう!(エディタ)から
Microsoft Visual C++ 2008 Express Editionに変えた
前者の場合だとボタンを押せばコンパイル・実行できたんだけど
VC++でもボタン押したらコンパイルするようにできない?

今の設定はメニュー->ツール->外部ツールに追加して
そのボタン押したらcmd起動+path設定されて
cl Filename.cって手打ちしないといけない
作業ディレクトリはCファイルが保存してある所

609デフォルトの名無しさん:2008/06/21(土) 16:00:39
画面の上の方を良く探せ
610デフォルトの名無しさん:2008/06/21(土) 16:05:44
>>608はプロジェクトを作ってないのだと思われる。
単に *.cを開いただけ。
611デフォルトの名無しさん:2008/06/21(土) 16:06:57
とりあえずヘルプを読むなり、サイトを当たるなりしようや
612デフォルトの名無しさん:2008/06/21(土) 16:10:37
#include <stdio.h>
#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が表示されるのはなんで?
613デフォルトの名無しさん:2008/06/21(土) 16:12:44
>>612
void sub(int **p){ 
  int *i; 
  i = (int *) malloc(sizeof(int)); 
  *i = 100; 
  *p = i; 
}
かな
614デフォルトの名無しさん:2008/06/21(土) 16:13:49
sub( &ip ); // 呼び出すところはもちろん
615デフォルトの名無しさん:2008/06/21(土) 16:15:48
あぁ、そういうことか。d
616デフォルトの名無しさん:2008/06/21(土) 16:29:48
この場合大した問題は無いんだろうけど
malloc使ってfreeしてないなんて
617デフォルトの名無しさん:2008/06/21(土) 16:29:56
C言語でグラフィック表示とかできるの?

C初めてあんま経ってないからよく分からん。
618デフォルトの名無しさん:2008/06/21(土) 16:32:07
#include "stdafx.h"

using 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
619デフォルトの名無しさん:2008/06/21(土) 16:32:13
全然関係ない話なんだけどさあ、検索するじゃん。検索。googleとかで。
それでさあ、くだらないブログが腐るほど引っ掛かるんだよね。
知ったかとか、出鱈目とか鵜呑みにしたような内容の馬鹿ブログ。
いや、早い話がお前らブログ辞めろって。
いや、それだけなのよ。まじで。お願いだから辞めて下さい。
資源の無駄、そして多くの人、社会の利便性と生産性を根こそぎかっさらってますよ。お前達
620デフォルトの名無しさん:2008/06/21(土) 16:32:39
例えばWin32 APIはCですよ。
621デフォルトの名無しさん:2008/06/21(土) 16:32:42
String^string1,^string2;
ナンダコレ
622デフォルトの名無しさん:2008/06/21(土) 16:33:38
>>619
検索エンジン使いこなせなくて涙目なんですよね。
623デフォルトの名無しさん:2008/06/21(土) 16:36:50
>>619
俺車の運転出来ないんだ、だから世の中から車をなくせって理屈かw

そんな馬鹿な上から目線の理屈を展開するなら
検索エンジンのオプション位使いこなして下さい。
[blog ブログ]のキーワードを含むヒットを除外、とかさ…
624デフォルトの名無しさん:2008/06/21(土) 16:38:51
>>618
スレ違い
と言うか.NET使うならC#の方がいいんじゃないかと思う

String ^string1, ^string2;
    ↑
    せめてここに半角スペースを入れる
625デフォルトの名無しさん:2008/06/21(土) 16:39:52
>>618
C++/CLIはこのスレ的にはどうなのだろ。
C++を拡張した言語で既にCでもC++でもないものなのだが。
626デフォルトの名無しさん:2008/06/21(土) 16:48:07
>>622-623
コピペにマジレスすんなよ
627デフォルトの名無しさん:2008/06/21(土) 16:51:31
>>609-611
ありがと
プロジェクトは別の事で使うと思ってた
628デフォルトの名無しさん:2008/06/21(土) 16:55:55
>>625
ここはC++すら御法度なんだからC++/CLIがOKなわけないだろう
かといってC++スレに来られても困る訳だが
629デフォルトの名無しさん:2008/06/21(土) 17:04:48
一応専門スレはあるが初心者向きではない。
http://pc11.2ch.net/test/read.cgi/tech/1206447234/l50

以前は くだすれC++/CLI という初心者スレがあったのだが
需要がないのか落ちた。
630デフォルトの名無しさん:2008/06/21(土) 18:12:20
今からCを勉強しようと思うんだが他の言語のほうが有用なのか?
631デフォルトの名無しさん:2008/06/21(土) 18:17:11
有用かどうか考えるのであれば
複数の言語を勉強するのが有用
632デフォルトの名無しさん:2008/06/21(土) 18:18:31
>>630
有用かどうかは目的による
633デフォルトの名無しさん:2008/06/21(土) 18:23:46
レスありがとう。
よかったらCとC++の目的の違いとか教えてくれないか?
専門用語だらけでよくわからなくて・・
634デフォルトの名無しさん:2008/06/21(土) 18:25:15
>>633
だから何がしたいんだよ?
C言語なんてやっても車の運転はうまくならないぞ
635デフォルトの名無しさん:2008/06/21(土) 18:25:22
C++ を覚えられない人が C を使う。
636デフォルトの名無しさん:2008/06/21(土) 18:29:12
目的の違いなんて使う人による
どちらか片方にしか出来ないなんてことも無いと思う
どっちが使いやすいかも人による
637デフォルトの名無しさん:2008/06/21(土) 18:52:13
C++ の例外はそう簡単には C では実装できないけどね
638デフォルトの名無しさん:2008/06/21(土) 19:21:09
仮想関数もつらいな、
639デフォルトの名無しさん:2008/06/21(土) 19:23:18
仮想関数は関数ポインタ持てばいいだけ
640デフォルトの名無しさん:2008/06/21(土) 19:23:58
自動的にデストラクタが走るとかも C では無理
641デフォルトの名無しさん:2008/06/21(土) 19:31:53
>>640
そういう話じゃないだろ。
642デフォルトの名無しさん:2008/06/21(土) 19:32:33
643デフォルトの名無しさん:2008/06/21(土) 19:35:56
自動変数なんてただのシンタックスシュガーじゃん。
644デフォルトの名無しさん:2008/06/21(土) 19:36:32
??
645デフォルトの名無しさん:2008/06/21(土) 19:37:03
!!!
646デフォルトの名無しさん:2008/06/21(土) 19:37:24
?!
647デフォルトの名無しさん:2008/06/21(土) 19:44:12
>>639
継承とかさせるとな、オーバーライドの有無で仮想関数テーブル作るのが大変なんだ。更にな多重継承なんかさせるとポインタを調整させるのも大変なんだよ。
648デフォルトの名無しさん:2008/06/21(土) 19:45:27
とんだジョーンズインディですね。
649デフォルトの名無しさん:2008/06/21(土) 19:52:34
実装のあれこれで別にC++の言語仕様を再現しようとかじゃなくて
ソフトウェアとしてC++とCのどちらか片方にしか出来ないことなんて無いって事?じゃないの
650デフォルトの名無しさん:2008/06/21(土) 19:55:19
それを言い出したらFORTRANでもいいって話に
651デフォルトの名無しさん:2008/06/21(土) 19:56:54
アセンブ...
652デフォルトの名無しさん:2008/06/21(土) 19:58:20
トランジスタをつな...
653デフォルトの名無しさん:2008/06/21(土) 20:01:00
COBO....
654デフォルトの名無しさん:2008/06/21(土) 20:03:44
C++ の方が開発の最大効率は高いが
使いこなせない人にとっては C の方がマシかもしれない。
しかし、C++ も使いこなせないようでは
プログラマとしてやっていけるのか疑問。
655デフォルトの名無しさん:2008/06/21(土) 20:05:42
そうなると使いこなせるの定義云々
656デフォルトの名無しさん:2008/06/21(土) 20:40:47
C++に触ったことないヒトは問題外だそうです><
657デフォルトの名無しさん:2008/06/21(土) 21:04:49
とりあえず触ってみた

ぷにぷにしてた
658デフォルトの名無しさん:2008/06/21(土) 21:08:23
C++ってごちゃごちゃしてて気色悪い
もっと綺麗にならないのかよ
659デフォルトの名無しさん:2008/06/21(土) 21:19:42
ここって、自分の作ったソースのどこが悪いかって見てもらえるんですか?
660デフォルトの名無しさん:2008/06/21(土) 21:21:56
>>659
それは宿題スレの方がいい
661デフォルトの名無しさん:2008/06/21(土) 21:21:59
誘導されてきたのですね、わかります。
どうぞ。
662デフォルトの名無しさん:2008/06/21(土) 21:29:07
>>660
違うだろ

>>659
態度による
まずエラーメッセージくらいはちゃんと読むこと
663デフォルトの名無しさん:2008/06/21(土) 21:31:55
リスト構造で、どんどんデータが追加されていくというソースを作ってるんですが、上手くいきません。
どなたか教えてくださる方がいましたら、お願いします。
664デフォルトの名無しさん:2008/06/21(土) 21:32:32
665デフォルトの名無しさん:2008/06/21(土) 21:35:35
http://pc11.2ch.net/test/read.cgi/tech/1213796455/240
麻呂のクソースは分からないでおじゃるかっ!?
666デフォルトの名無しさん:2008/06/21(土) 21:53:27
>>665
いえ、素晴らしいソースだと思うんですが、初心者の自分が持っていったら確実に怪しまれるんで・・。
667デフォルトの名無しさん:2008/06/21(土) 22:08:00
理解できるなら自分で初心者っぽく改造すれば?
668デフォルトの名無しさん:2008/06/21(土) 22:31:28
【本日VIP投票日ですた】●第3回全板人気トナメ●【反省会会場】
http://yutori.2ch.net/test/read.cgi/news4vip/1214054829/

vipを助けてくれ!!!!!!!!
負けそうだ!!!!!
シベリア超特急に負けそうなんだ!!!!!!!!!!!


 俺 達 の v i p が 無 く な る ! ! ! ! ! ! ! !

ニュー速の本部を荒らして俺らに投票してくれ!!!!!!!!
 P C ケ ー タ イ 友 達 家 族 を フ ル 動 員 し て
コードをとってきてくれ!!!!!!!!!!!!!


ここで勝ったら二回戦もよろしく!!!!!!!!!!!


つまんねー話してないで協力するんだ!!!!!!!!!!!!!!!!
2chが変わってしまうぞ!!!!!!!!!!!!!!
助けてくれ!!!!!!!!!!!


まだまだ俺たちはおわれねぇ!!!!!!!!!!!!!!!!!!
669デフォルトの名無しさん: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;
}
670デフォルトの名無しさん:2008/06/21(土) 23:25:34
最大値の取り出し
int 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;
}
671デフォルトの名無しさん:2008/06/22(日) 00:39:05
>>669
できない。
ヒープソートとは、いったん全てのデータをヒープ構造として構成した後で、
ヒープの根つまり最大値を取り出して残りを再度ヒープ化することを繰り返すアルゴリズムである。
つまり、この例での 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;
は同じ結果をもたらすが、後者の方が明らかに速い。
672デフォルトの名無しさん:2008/06/22(日) 01:50:59
C言語を勉強してみたいのですが、
コンパイラとやらをどうやって実行するのかが分かりません。
自分のPCはWindows Vista です。
ネットで調べたところ、Visual C++というのを使うらしいのですが、
自分のPCには「プログラムのアンインストールまたは変更」というところに
Microsoft Visual C++ 2005 Redistributableというのが表示されてますが
どこからこれを実行すればいいのかわかりません。
どなたかアドバイスをください。
673デフォルトの名無しさん:2008/06/22(日) 01:54:55
>671
この関数を使ってヒープソートが作れるかってんじゃネーノ?

>672
そりゃただのランタイムだ
674デフォルトの名無しさん:2008/06/22(日) 01:58:35
>>672
VC++はMSのサイトでダウソできるよ。
675672:2008/06/22(日) 02:01:44
>>673
>>674
ありがとうございます。これはコンパイラではなかったのですね…。
MSのサイトに行ってきます!
676デフォルトの名無しさん:2008/06/22(日) 02:03:27
>>673
それは考えたが、二つの関数の意味をわかっているなら、できることもわかっているはずである。
作り方を教えろと言うのなら、それはこのスレの範疇ではない。仕方がないので>>671のように解釈した。
一応、アルゴリズムの解説と、実装のためのヒントは示したつもりである。
677デフォルトの名無しさん:2008/06/22(日) 02:30:43
manのtolower(3)の説明で

int tolower(int c);

>もし c が unsigned char の値でないか EOF ならば、 これらの関数の動作は未定義である。

とはどういうことですか?
引数がchar型であれば自動的にint型になるのではないですか?
678デフォルトの名無しさん:2008/06/22(日) 02:33:09
int型で例えば1000とか-1とか与えたときは未定義ってことだろう
679デフォルトの名無しさん:2008/06/22(日) 02:35:29
char型はマイナスの値を持てる場合があるけど、それを渡してはならないということ
680デフォルトの名無しさん:2008/06/22(日) 03:36:30
C言語超初心者です。。。
なぜこのような答えになるのか教えて下さい…考えてもわからないです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
681デフォルトの名無しさん:2008/06/22(日) 03:43:58
zの2乗が15を超えるまでループしてるから。
682デフォルトの名無しさん:2008/06/22(日) 03:47:22
>>680
どうなって欲しいのか書かないと何故と訊かれても困るよ
683デフォルトの名無しさん:2008/06/22(日) 03:50:43
>>680
k++;の後に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
となります。参考までに。
684デフォルトの名無しさん:2008/06/22(日) 03:53:01
>>681
ありがとうございます。
考え方としては、kが1のときzが4.5ということでいいのでしょうか?ほんとにわからないんです…すいません。
>>682
dぷなってほしいというか…どのように表示されるのか書きなさいという問題なんです。
685デフォルトの名無しさん:2008/06/22(日) 04:00:43
>>683
ありがとうございます!理解できました。
686デフォルトの名無しさん: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;になるのでしょうか?わかるひとお願いします
687デフォルトの名無しさん:2008/06/22(日) 12:34:46
s*=-1;
毎回Sの符号を変えてるだけでしょ?

s = s * -1;
と同じ
688デフォルトの名無しさん:2008/06/22(日) 12:36:37
実行すると
1
-2
3
-4
5
-6
と出力されるはず
689デフォルトの名無しさん:2008/06/22(日) 13:13:11
宿題丸投げは宿題スレへ
690デフォルトの名無しさん:2008/06/22(日) 13:18:18
ありがとうございました!
691デフォルトの名無しさん: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に変えても同じ結果でした。

無限ループは
「正の整数を入力して下さい :負の整数は入力できません」
が、延々出力されます。

692デフォルトの名無しさん:2008/06/22(日) 13:41:08
>>691
それで普通に動作したけどなぁ

scanf(" %d",&num); ←%dの前に半角スペース
としたらどうなる
693デフォルトの名無しさん:2008/06/22(日) 13:47:09
>>691
たぶん↓のページで挙げられてる問題でつまってると思う
ttp://www9.plala.or.jp/sgwr-t/c/sec05.html
694デフォルトの名無しさん:2008/06/22(日) 14:20:46
>>692
>>693
ありがとうございます。
%dの前に半角スペース(空白、改行を読み飛ばすですね)を試してみましたが
結果は同じでした。
693さんのページを読んで試してみたところ、
scanfの項の (3)読み込み不一致 の問題が発生していたようです。

一旦文字列として読み込んでatoiでint型に変換することで回避できました。
ありがとうございました。


695デフォルトの名無しさん:2008/06/22(日) 14:24:00
-(マイナス)じゃなくてー(長音)入れてたりして
696デフォルトの名無しさん:2008/06/22(日) 14:44:54
>>695
違う、実数を入れたって言ってるだろ
引っかかってるのは小数点だ
697デフォルトの名無しさん:2008/06/22(日) 15:24:53
>>691 >>696
なるほど、こういうネタ質問も面白いな
698デフォルトの名無しさん:2008/06/22(日) 15:25:38
特定の関数のコードサイズを知りたいんですが、
その関数だけ別ファイルにしてコンパイルした時の
オブジェクトファイルのサイズがイコールだと思っていいですか?
699デフォルトの名無しさん:2008/06/22(日) 15:27:55
> scanf内の%dを%lfに変えても
700デフォルトの名無しさん:2008/06/22(日) 15:28:01
>>698
コード以外にリンク用の情報とかいろいろ付いてるんじゃないの?
701デフォルトの名無しさん:2008/06/22(日) 15:31:31
>>698
リンカの設定でmapファイルを出力すべし
702デフォルトの名無しさん:2008/06/22(日) 15:32:37
>>698
そういう方法なら普通、抱えて乗ったときと一人で乗ったときの差、という発想になるのでは
703デフォルトの名無しさん:2008/06/22(日) 16:10:29
質問です。
struct 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;
}

704デフォルトの名無しさん:2008/06/22(日) 16:13:31
>>703の続き

上記は関数はリストに単語をアルファベット順に追加していく関数です。
以下の箇所の動作がいまいちよく分かりません。

 for (prev = cur = head; (cur = cur->next) != NULL; prev = cur) {
   if (strcmp(name, cur->name) < 0) {
     p->next = cur;
     break;
   }
 }

どなたかご教示ください。
よろしくお願いします。
705デフォルトの名無しさん: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; は、見つかった位置に実際に追加している。
706デフォルトの名無しさん:2008/06/22(日) 16:35:16
>>704
for文が効率的である反面わかりにくいのかも
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;
}
}
と等価。こちらのほうが分かり易いかも
(無検証につき無保証御容赦)
707デフォルトの名無しさん:2008/06/22(日) 16:35:37
確保していない領域を使用したり突っ込みどころ満点だな
708デフォルトの名無しさん:2008/06/22(日) 16:38:23
>>700-702
ありがとうございます。
mapファイルについて調べつつとりあえずは差分で調べてみます。
709デフォルトの名無しさん:2008/06/22(日) 16:40:38
>>704
for (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
710デフォルトの名無しさん:2008/06/22(日) 16:47:00
ちょい変形
 prev = 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を参照していない、というのもポイントか。
711デフォルトの名無しさん:2008/06/22(日) 16:47:05
prevなんて、速度向上にも寄与しないし、論理的に
必ずしも必要でない変数が入っているし...
要するにそのコードは、最適化/考案/修正中のコードで、
教材として扱って良いコードじゃないんだな

プログラムコードはそういうものの塊で、分かりにくい
場合に、無理に理解しようとしないというのが鉄則。
(書いている本人ですらごみ箱に捨てて忘れている場合すらある)
712704:2008/06/22(日) 16:53:39
>>705-707
>>709-711
トレースしてみて理解できました。
アドバイスと解説ありがとうございました。
713デフォルトの名無しさん:2008/06/22(日) 17:05:40
 for (prev = head; prev->next != NULL; prev = prev->next) {
   if (strcmp(name, prev->next->name) < 0) {
     p->next = prev->next;
     break;
   }
 }
prevオンリー。これが原形だったのかね。
714デフォルトの名無しさん:2008/06/22(日) 17:24:23
つーか、NULLの場合を分けなくても
 for (prev = head; prev->next != NULL && 0 <= strcmp(name, prev->next->name); prev = prev->next)
   ;
 p->next = prev->next;
とかでいいような気が。これはこれでひどいかw
715デフォルトの名無しさん:2008/06/22(日) 17:27:02
ここは何時から宿題スレになったんだ?
716デフォルトの名無しさん:2008/06/22(日) 17:27:50
for文はどっかカッコイイから使いたくなるものだが、
後々の修正がキツくなる傾向が高い扱いにくい構文。
単純ループ以外、初心者は余り使わないほうがいいだろうな
717デフォルトの名無しさん:2008/06/22(日) 17:34:25
>>715
課題が明日までの奴が居て大変そうだ
718デフォルトの名無しさん:2008/06/22(日) 17:38:52
for文に条件式詰め込んでまで行数を削る必要ってあるの?
719デフォルトの名無しさん:2008/06/22(日) 17:40:44
必要ないし、ある条件を満たすものを探索する場合はむしろダメ
720デフォルトの名無しさん:2008/06/22(日) 18:08:43
行数を減らすとカッコイイと勘違いする時期ってのがあるんだよ
721デフォルトの名無しさん:2008/06/22(日) 18:31:56
社会に出ればむしろ行数を増やすように言われることもあります
722デフォルトの名無しさん:2008/06/22(日) 18:35:12
そういうのは社会に出ればとは言いたくないな
723デフォルトの名無しさん:2008/06/22(日) 20:10:41
for があまり複雑になるようだと、
while にしたり、for のままではあるが
条件の一部を { } の中に要れたりするな。
724デフォルトの名無しさん:2008/06/22(日) 20:33:07
社会に出て行数を増やすことばかり専念して
中身がぜんぜんなっちゃいない奴が増えるのも迷惑な話だ
725デフォルトの名無しさん:2008/06/22(日) 20:38:24
今はしらんけど、日立とか、行数の見積もりの誤差が±数パーセント以内でなければ
ならないって規則だから、ちょっと多めに見積もってループを展開するとかでコードを
水増しして、誤差を調整してたな。
726デフォルトの名無しさん:2008/06/22(日) 20:42:05
行数だけで見積もるからそんなのになるw
727デフォルトの名無しさん:2008/06/22(日) 20:42:19
そんなに正確に見積もれるわけないじゃんw
そこまでやったら、見積もる時間でコードが書けるわ。
728デフォルトの名無しさん:2008/06/22(日) 20:42:22
行数見積もりする意味がわからん
729デフォルトの名無しさん:2008/06/22(日) 20:43:20
昔の話だから今はしらんよ。 > 日立
730デフォルトの名無しさん:2008/06/22(日) 20:43:47
ステップ数至上主義でステップ数で業績評価してると、
見積もりがあまりずれすぎると困るということなんだろうな。
そもそもステップ数なんぞで(ry
731デフォルトの名無しさん:2008/06/22(日) 20:44:26
>>728
メインフレーム時代の名残でしょ。

昔は作業内容を報告するのに確かステップ数管理してたはず。
新規いくら、修正いくら。
で、このステップ数から必要テストケースの数が割り出される・・・だったかな@元戸塚組
732デフォルトの名無しさん:2008/06/22(日) 20:46:53
>>731
説明ありがとう
733デフォルトの名無しさん:2008/06/22(日) 20:47:30
ステップ数で評価って、コードを改良してコンパクトにして高速化すると評価を下げられるのね。

まるで、残業時間で評価する糞(ry
734デフォルトの名無しさん:2008/06/22(日) 20:48:29
今はC言語は勉強する価値がないそうですが
本当なのでしょうか?まだ研修中でよくわかりません。
今はJavaとC#というのを研修してます
735デフォルトの名無しさん:2008/06/22(日) 20:48:39
ものすごく細かかったな。
仕様書なんかもキングGの分厚いファイルに修正修正で継ぎ足された常態のがあって
○Cとか○Sとか書いてやってた・・・かな・・・?
736デフォルトの名無しさん:2008/06/22(日) 20:49:41
>>734
分野による。
組み込み系はC使うし、Web系ではほとんどC使わないだろうし。
737デフォルトの名無しさん:2008/06/22(日) 20:50:46
>>733
まー昔の名残だからねえ。日立らしいといえばらしいかな


>>734
分野によるでしょ

C言語は組み込みだと現役だし、windows上のアプリだとVC++かJavaかC#とか
そんなんじゃないのかな?
738デフォルトの名無しさん:2008/06/22(日) 20:53:44
まだXDMシリーズって現役なんだなw
739デフォルトの名無しさん:2008/06/22(日) 21:02:09
>>734
価値がないわけではない。もっと用途に応じた価値のある言語はあるというだけ。
740デフォルトの名無しさん:2008/06/22(日) 21:02:50
>>734
まあ、特定の言語を学ぶ価値が無いとか言う奴は信用するな。
所謂、ニセモノだ。

特に、高級言語風で現実のCPUの動作まで学べるCをおろそかに
するのは、目先の業務しか出来ない程度の奴だよ。
741デフォルトの名無しさん:2008/06/22(日) 21:10:14
CはCPUアセンブリーとのコレスポンデントが最も良い
というのは20世紀に信じられていた神話なんで忘れましょう。
Intel の80386プロセッサはPASCAL等に最適化されているし
Java仮想マシンのコードをそのまま動かせるプロセッサJavaChip
も一応発売されていた(る?)し。
742デフォルトの名無しさん:2008/06/22(日) 21:11:19
Javaチップなんてあってないようなもんだろw
743デフォルトの名無しさん:2008/06/22(日) 21:16:30
C/C++はアセンブラが透けて見えてくるのが最大の利点ではある。
744デフォルトの名無しさん:2008/06/22(日) 21:22:40
26歳でPGに転職した負け組み人生だけど
Cをアセンブラにして遊んでたのがすごく力になっていると実感する。
自分より何倍も実務経験長い先輩でもC知らない人とかいてそういう輩はほんと糞過ぎる。
当たり前のことだけどプログラマならCは絶対に勉強するべき。
745デフォルトの名無しさん:2008/06/22(日) 21:27:23
まあ教養の一種ではあるな
それ以上ではないけど
746デフォルトの名無しさん:2008/06/22(日) 21:28:21
基幹システムの7割がJavaで出来ているのに
今更Cなんてw
747デフォルトの名無しさん:2008/06/22(日) 21:29:28
まぁ本当はアセンブラやったほうがいいが、本当にCが書ければ
アセンブラのマニュアル読めば書けるからね。

Cを知らない=Cが出来なかった先輩じゃないのかな。
C挫折組み=ポインターが理解できなかった連中の理解力の無さは
一緒に仕事したくないレベルだねぇ。
748デフォルトの名無しさん:2008/06/22(日) 21:30:57
>>746
いや、そのJavaが何で書いてあるかと(w
749デフォルトの名無しさん:2008/06/22(日) 21:32:11
>>741
詳細を教えてください。< i836 が pascal に最適化されていた
750デフォルトの名無しさん:2008/06/22(日) 21:35:21
Java書いたOSあるだろうがボケ
751デフォルトの名無しさん:2008/06/22(日) 21:37:37
JavaやC#と一緒にCを勉強する価値はないってことじゃ
どんな研修か知らないけど、あまりいっぺんにやると混乱するだろうし
752デフォルトの名無しさん:2008/06/22(日) 21:43:12
>>749
link, unlinkという命令は何のためにあると思う?
753デフォルトの名無しさん:2008/06/22(日) 21:58:00
>>752
i386 にも pascal にも link 命令なるものは見当たらないのですが。バイナリでは何?
754デフォルトの名無しさん:2008/06/22(日) 22:05:39
Cはゲームに向いてる?向いてない?
755デフォルトの名無しさん:2008/06/22(日) 22:06:48
サッカーや野球には向いてないような
756デフォルトの名無しさん:2008/06/22(日) 22:08:59
スペックさえ許せばC以外の方が楽だと思うよ
757デフォルトの名無しさん:2008/06/22(日) 22:20:00
ゲームに最も使われているのがC++
758デフォルトの名無しさん:2008/06/22(日) 22:27:27
ゲームって動作速度を確保するために結構ムリヤリな効率化をする必要があるからなー
759デフォルトの名無しさん:2008/06/22(日) 22:38:02
ゲームっつうのは組み込みに近いモノがあるからな
最近はPCに近づいてきたけど
760デフォルトの名無しさん:2008/06/22(日) 23:20:16
>>741
ネタですか?本気ですか?
761デフォルトの名無しさん:2008/06/22(日) 23:40:52
10年位前の雑誌でも読んだんだろ
762デフォルトの名無しさん:2008/06/22(日) 23:47:16
Intelプロセッサが、C/C++等のような高級言語処理系の存在を無視した
アーキテクチャーに変更されたって話は聞いた事ないな
763デフォルトの名無しさん:2008/06/23(月) 00:11:11
Intelプロセッサは.NETに最適化されてるだろ
764デフォルトの名無しさん:2008/06/23(月) 00:32:59
本気?
765デフォルトの名無しさん:2008/06/23(月) 00:39:20
ICCに最適化されてるんじゃね。

あれ?
766デフォルトの名無しさん:2008/06/23(月) 00:45:51
俺の脳はCに最適化されている。
だから人並みの事は出来なくてもいいのだ。
767デフォルトの名無しさん:2008/06/23(月) 01:07:29
VC++でウィンドウやらダイアログ作ってもソースはC++だから
今までCやってた俺には振り出しに戻った気分orz
768デフォルトの名無しさん:2008/06/23(月) 01:10:54
意味不明
769デフォルトの名無しさん:2008/06/23(月) 01:12:59
SSE2か何かの、丸めフラグを見ず常に0方向へ丸める命令は、おそらくCを意識している。
770デフォルトの名無しさん:2008/06/23(月) 01:13:54
MFCとかの話じゃね?
771デフォルトの名無しさん:2008/06/23(月) 01:16:08
統計計算のプログラミングの例を教えてください。

最大20個までの実数値をscanf()で、配列に読み、呼んだデータの、平均値、分散、最大値、最小値を計算して表示するプログラムを教えてください!

条件として、データは-999.0から999.0の範囲とし、入力終了の合図として1000.0より大きい値のデータを入力すると、その数値は入力されずに入力作業を終了する。
平均値と分散については、
データ数をn、各データをXi(i=1〜n)とすると、(ΣXi)/n (データの個数で割ったもの)が平均値
(Σ(Xi-(データの相加平均))^2)/nが分散であるとする。

よろしくお願いします!!
772デフォルトの名無しさん:2008/06/23(月) 01:16:39
以下のようなプログラミングはどのようにすればよいのでしょうか?

「組み合わせ」を求める数学の公式にコンビネーションがあります。このコンビネーションのプログラミングを教えてください!

1.nとrをscanf()で読み、nCrの値を計算して表示させます。
条件として、nとrの値はマイナスでなく、またゼロでなく、さらにここではn<=10であることを確認させて、正しい数値を入力させる。もし誤った数値を入力したら「入力ミスです」と表示させる。

2.0!=1も扱えるようにすることを忘れない。
773デフォルトの名無しさん:2008/06/23(月) 01:24:23
gobakusimasuta
774デフォルトの名無しさん:2008/06/23(月) 01:27:30
775デフォルトの名無しさん:2008/06/23(月) 01:33:32
webにしてもサーバーモジュールなんか普通にC使ってるけどなw
776デフォルトの名無しさん:2008/06/23(月) 01:37:57
で、386がpascalに最適化されてるって
聞いてやるから語ってみろよ。
777デフォルトの名無しさん:2008/06/23(月) 01:58:31
興味があるのなら自分で調べろ。そういう話は
778デフォルトの名無しさん:2008/06/23(月) 01:58:45
PS3はしらんがPS2まではC++だった
779デフォルトの名無しさん:2008/06/23(月) 02:13:52
>>769
80x87 FPU は丸めフラグにより好きな方向に丸められるのですが、そういうことなら退化していますね。
780デフォルトの名無しさん:2008/06/23(月) 11:33:02
記入された文字列(横)を入力し、縦に出力するプログラムを書きました。
forを使った二重ループで、入力後にEOFが入力されたらループを抜け出し、
出力に移るのですが、1回目のbreak後に1周余計にまわってしまうのか、
2個目のループの計数値が0に戻されてしまい、正常な出力が出来ません。

項目を指定して出力させると、文字が正しく入っているのは確認できるのですが、
文字入力の最大値が0になってしまうので、全てがダメになっている状態です。
EOFで2個目のループを抜け出した後、もう1周回らないようにする対策が必要だと思うのですが、
どうやったらよいのでしょうか?ご教示願います。
781デフォルトの名無しさん:2008/06/23(月) 11:33:37
#include <stdio.h>
int 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;
}
782デフォルトの名無しさん:2008/06/23(月) 11:42:19
文字列どうやって入力してる?
まさかとは思うけど一行入れるごとにenter押したりしてないだろうね?
783デフォルトの名無しさん:2008/06/23(月) 12:01:46
改行なしで入力したとしてもjが0とかで終了したらどうなるか、少し考えたらわかりそうなもんだが。
784デフォルトの名無しさん:2008/06/23(月) 13:15:21
>>781
 ■■■□□□□□□□ (■、●=(0,0)〜(temp_i,temp_j)に含まれる部分)
 ■■■□□□□□□□
 ■■●[EOF]

 ■□□□□□□□□□
 ■□□□□□□□□□
 ●[EOF]

 □□□□□□□□□□
 □□□□□□□□□□
○[EOF]
たぶん、そもそもやりたいことと全く無関係なことをしている。
文字単位で物事を考えたいというのはわからないでもないけど。。
改行やタブなど、マス目に納まらない存在を無視しているのは確実でしょう。
もう少し力を蓄えてみては。
785デフォルトの名無しさん:2008/06/23(月) 13:18:10
>>779
そういう命令があるってだけで、丸めフラグを有効にする命令も両方用意されてるんじゃないの
786デフォルトの名無しさん:2008/06/23(月) 20:24:35
>>550
どうもありがとうございました!遅れてスミマセン
その方法でやってみたのですが、
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となってしまうのでしょうか?
質問の仕方が下手でスミマセン・・・よろしくお願いします・・・
787デフォルトの名無しさん:2008/06/23(月) 21:28:08
>786
その入力内容と出力結果を貼れ
あと配列の添字は0スタートだってことを忘れるな
788デフォルトの名無しさん:2008/06/23(月) 21:31:23
>>786
全部貼るが吉
789デフォルトの名無しさん:2008/06/23(月) 21:36:48
営業所名の一時保存用のテーブルは1次元配列でいいのかな?
790デフォルトの名無しさん:2008/06/23(月) 21:39:10
>>789
strcpy(eigyou_t[kensu],eigyou);
で、kensuだからダメ
791デフォルトの名無しさん:2008/06/23(月) 21:43:47
まあ配列以上の文字数入力したとかもありそうだし
792790:2008/06/23(月) 21:48:09
あれ?
>>789>>786かと思ってたんだが、そうすると>>790はコンパイル通らないよな・・・
793790:2008/06/23(月) 21:57:20
とりあえずkensuのインクリメントする位置変えてください・・・

puts("金額を入力");
scanf("%d", &kingaku);
strcpy(eigyou_t[kensu],eigyou);
kingaku_t[kensu] = kingaku;
kensu++;
794デフォルトの名無しさん:2008/06/23(月) 22:26:11
配列の名前とポインタの違いってなにかありますか?
あとポインタにインクリメントしたらどうなっているのでしょうか?
795デフォルトの名無しさん:2008/06/23(月) 22:32:58
アホス
796デフォルトの名無しさん:2008/06/23(月) 22:38:58
>>794
「ポインタを」じゃなくて「ポインタに」でいいんだな?

ならポインタが指し示す内容に、1足される

797デフォルトの名無しさん:2008/06/23(月) 22:41:45
あのさ、直ぐ答えを求めたくなるだろうけどデバックする力もいるじょ。
798デフォルトの名無しさん:2008/06/23(月) 23:02:08
>>794
配列の名前とはメモリ上の連続した領域につけられた名前のこと
ポインタとはあるオブジェクトを指し示すことができるオブジェクトのことで
互いに全然違うもの

ただし、配列へのアクセスが実際にはポインタ(の値)によって行われるため
両者が似たものに見えることが多い
配列の名前がポインタに成り下がる件については>>461を参照
799デフォルトの名無しさん:2008/06/24(火) 06:02:44
配列の名前がポインタとは違うことはわかりました。
確かにポインタは名前ではありませんね。
値であり、名前と異なり、プログラム中でユニークな保存性を持ちます。
ポインタを変化させて無名な変数にもアクセスすることが出来る
わけですね。
それでは、配列とポインタの相違は何でしょうか?
800786: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;

}
801786:2008/06/24(火) 06:11:33
for(i = 1; j <= kensu; i++){
for(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++が反応してくれないみたいなんですが、どうしでかがわからんのです・・・ウッウッ
802786:2008/06/24(火) 06:12:42
ああ、すみません半角40てのは気にしないでください・・・字数を数えてたのです
803デフォルトの名無しさん:2008/06/24(火) 06:16:33
>eigyou_t[kensu], kingaku_t[kensu], jun[kensu]
じゃなくて
eigyou_t[i], kingaku_t[i], jun[i]
だろ
804デフォルトの名無しさん:2008/06/24(火) 06:23:10
あと
>for(i = 1; j <= kensu; i++){
じゃなくて
for(i = 1; i <= kensu; i++){
な。
805デフォルトの名無しさん:2008/06/24(火) 07:16:22
結局最初にあげたところは関係なしか。

どこが間違ってるのかわからないのに、ソース全部あげないでここが間違ってると思うとか
寝言を言う初心者っていなくならないだろうな。
806786:2008/06/24(火) 10:11:28
ああああああああああああああああああああああああ
そこですか・・・・・・すみませんでした・・・・・・問題なくコンパイルできたんで、全然頭になかった・・・
思い込んでましたすみません・・・ご迷惑おかけしましたありがとうございました・・・
807デフォルトの名無しさん:2008/06/24(火) 10:46:50
初心者のくせに状況説明にフィルターをかけるな、というのが人情というものです
808デフォルトの名無しさん:2008/06/24(火) 11:13:53
のび太のくせに、生意気だー ですね、わかります。
809デフォルトの名無しさん:2008/06/24(火) 11:44:37
>>799
配列は配列だしポインタはポインタだし。
配列しかもち得ない情報(ex.要素数)をポインタから知る事はできない。
810デフォルトの名無しさん:2008/06/24(火) 12:57:24
>>799
配列とはメモリ上に名前つきで確保された連続した領域のこと
ポインタとはあるオブジェクトを指し示すことができるオブジェクトのことで
互いに全然違うもの

ただし、配列へのアクセスが実際にはポインタ(の値)によって行われるため
両者が似たものに見えることが多い
配列の名前がポインタに成り下がる件については>>461を参照
811デフォルトの名無しさん:2008/06/24(火) 14:21:53
int a[100];
printf("%zd =?= %zd =?= %zd =?= %zd", sizeof(a), sizeof(&*a), sizeof(&a[0]), sizeof(a+0));
812デフォルトの名無しさん:2008/06/24(火) 21:39:20
数値から時刻に変換して時刻での計算をするにはどうしたらいいんでしょうか。
例:数値 0924 →09:24
09:24-08:24 = 01:00
813デフォルトの名無しさん:2008/06/24(火) 21:42:33
if(924/100 == 9) puts("!");
814デフォルトの名無しさん:2008/06/24(火) 21:49:52
>>812
1時間は何分でしょう
815デフォルトの名無しさん:2008/06/24(火) 22:05:31
オーバーフローとアンダーフローを監視するにはどうすればいいの?
816デフォルトの名無しさん: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に変換して逆順に並べてつなげる。

自信ある人はやってみてね。回答は数日後に
817デフォルトの名無しさん:2008/06/24(火) 22:49:00
>>810
名前なしの配列もあるのでお忘れなく。
818デフォルトの名無しさん:2008/06/24(火) 23:14:54
>>816
重なりチェックとかもすんの?
819デフォルトの名無しさん:2008/06/24(火) 23:35:15
int a[100];
int size;
size = sizeof(a) / sizeof(a[0]);
で配列の個数が求められるのはわかるけど、sizeof(a[0])の0というのが
どうも気持ちが悪いのですが。どうして?
820デフォルトの名無しさん:2008/06/24(火) 23:38:41
どうしても何も要素をsyzeofに渡すためとしか。
嫌ならsizeof(int)でもどうぞ。
821デフォルトの名無しさん:2008/06/24(火) 23:45:16
sizeof a / sizeof *a
822デフォルトの名無しさん:2008/06/24(火) 23:52:36
sizeof(型) と
sizeof 変数
を使い分ける人はどのくらいいるのだろ。
何も考えず( )をつけるのが普通だと思うけど。
823デフォルトの名無しさん:2008/06/25(水) 00:01:15
>>817
名前なしの配列ってどういうのですか?

>>821
それいいですね、すっきりしました。
sizeof(a) / sizeof(int)だと配列の全体÷intの幅なので気持ち悪いですよね。
sizeof(a) / sizeof(*a)だと全体÷部分=個数っていう理屈に合っていていい
感じです。

すっごく、どうでもいいこだわりですけどね。
824デフォルトの名無しさん:2008/06/25(水) 00:12:52
配列要素の個数をsizeofで求めることって、実際にあるのかなあ?
個数を定数なり変数なりで管理して、それを使えばいいと思うんだが。
825デフォルトの名無しさん:2008/06/25(水) 00:23:11
追加したり減らしたりするような配列は、sizeofで求めるとわざわざ定数を使わなくて非常に楽
826デフォルトの名無しさん:2008/06/25(水) 00:23:25
>>824
固定値のみの配列に対して処理するときによく使う。デバイスドライバ
でよく見るな。

827デフォルトの名無しさん:2008/06/25(水) 00:24:47
#defineで配列のサイズを決めていても、なぜかsizeof使ってサイズを求めなおすヤツもいるしな。
コードの実行自体にはなんの関係もないが。
828デフォルトの名無しさん:2008/06/25(水) 00:25:28
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7046.txt

本に載ってたFFTのソースなんですが、コンパイルがとおりません。

VS2008、BCCともにダメでした・・・
829デフォルトの名無しさん:2008/06/25(水) 00:31:03
>>828
エラーメッセージは?

コンパイル時でもプログラムの実行時でもそうだが、
なにかトラブルがあったらトラブルに関する情報を収集しておくこと。
コンパイル時はエラーメッセージ。
これは基本中の基本。
830デフォルトの名無しさん:2008/06/25(水) 00:31:19
>>828
まさかmainが無いだけじゃないだろうな?
831デフォルトの名無しさん:2008/06/25(水) 00:35:10
>>829
\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: 構文エラー : ';' が '{' の前にありません。

こんなかんじです
832デフォルトの名無しさん:2008/06/25(水) 00:40:02
>>831
inline void swap(float *a, float *b)

void swap(float *a, float *b)
にしたら、コンパイルが通ったりして(2箇所)
833デフォルトの名無しさん:2008/06/25(水) 00:41:40
・C99対応コンパイラを使う
・inlineをソースから削る
・拡張子をcppにしてコンパイルする
好きなのを選べ
834デフォルトの名無しさん:2008/06/25(水) 00:46:43
>>832
>>833
できました!
VSはC99対応してないんですねー

動作には影響しないんですか?
835デフォルトの名無しさん:2008/06/25(水) 01:07:46
>>834
>>834
inline展開をやめて関数コールにしたわけだから、関数コールのオーバーヘッドにより
処理時間が長くなる。どのくらい長くなるかは、FFTの分解能(ループの回数)による。

C++はinlineをサポートしているので、ファイル拡張子をcからcppに変更して
C++でコンパイルすればOKかな?(>>833の指摘3番目)
Cのままにしたいのなら#defineマクロかな?

#define swap(a,b) { float temp = a; a = b; b = temp; }
836デフォルトの名無しさん:2008/06/25(水) 01:08:17
>>816
n=5以降も参考に乗っけてもらえませんか?
結果があっているかの確認のため
837デフォルトの名無しさん:2008/06/25(水) 01:19:47
>>834
あ、そうそう

VCには_inlineがあったはず
inlineを_inlineに変えてみたら
838デフォルトの名無しさん:2008/06/25(水) 01:21:53
>>835
inlineつけなくても最適化で展開されるんじゃね?
839デフォルトの名無しさん:2008/06/25(水) 01:59:05
>>836
4つめまでであってれば、後は大丈夫じゃね?
840デフォルトの名無しさん:2008/06/25(水) 04:33:52
処理系ってよく耳にしますけど、コンパイラのことですか?
カーネルや標準ライブラリ関数やSVCも含みますか?
841デフォルトの名無しさん:2008/06/25(水) 05:01:04
コンパイルから、その環境下における事、OSでの実行まで過程全部
842デフォルトの名無しさん:2008/06/25(水) 05:39:54
>>816
void 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);
}
843デフォルトの名無しさん:2008/06/25(水) 05:47:24
int l = (1 << i) - 1;
p[l] = 'L';
for(j=0; j<l; j++) p[2*l-j] = 'L' + 'R' - p[j];
の方がいいな。
844デフォルトの名無しさん:2008/06/25(水) 06:58:57
プログラム毎に起動時にmallocで確保可能なヒープのサイズを制御する方法ってあるのかな?
845デフォルトの名無しさん:2008/06/25(水) 07:11:44
たとえばUNIX系ならulimitとかの話か?
846844:2008/06/25(水) 07:14:18
>たとえばUNIX系ならulimitとかの話か?
へーこういう方法で可能なんですね。

ありがとうございます。
847デフォルトの名無しさん:2008/06/25(水) 10:29:06
>>816
ぼるじょあ宿題スレで見た気がする
848デフォルトの名無しさん:2008/06/25(水) 14:10:44
#include <stdio.h>

int 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』 です。
849デフォルトの名無しさん:2008/06/25(水) 14:14:42
>>848
デフォルトでは小数点以下6桁まで表示することになっているから
3桁まで表示したい場合には書式指定すればよい
%.3f
850デフォルトの名無しさん:2008/06/25(水) 14:16:05
>>848
"%f"より"%g"を使おう。
851デフォルトの名無しさん:2008/06/25(水) 14:17:37
>>848
小数点の後の桁数は、精度で指定された値となる。
精度が指定されていない場合には 6 として扱われる。
精度として明示的に 0 が指定されたときには、小数点以下は表示されない。
852デフォルトの名無しさん:2008/06/25(水) 14:53:56
Visual studioでプログラミングしています。
ソースファイルにmain.cとfunc.cという2つのファイルがあります。

main.cの中でfunc.cの中で定義している関数を使おうとすると、定義されていません とエラーになってしまいます。

解決法を教えてください
853デフォルトの名無しさん:2008/06/25(水) 15:07:24
プロトタイプ宣言を書くんだ。
main.c に直接書いてもいいけど、通常はfunc.h に書いておいてmain.cで #includeする。
854デフォルトの名無しさん:2008/06/25(水) 15:08:33
>>852
main.c の中から必要な関数の宣言を見ることができるようにしなければならない。
具体的には、ヘッダファイル func.h を作成して関数宣言(関数プロトタイプ)をその中に記述し、
main.c の中で #include "func.h" として取り込む。

なお、間違っても #include "func.c" としてはいけない。本来は隠しておくべき func.c 内部の
ローカルな要素が main.c から丸見えになって、問題を起こす可能性が高くなる。
外部に公開したい要素だけをヘッダファイルに入れ、それを必要なソースファイルが #include すること。

また、func.c 自身も #include "func.h" しておく。
こうすることで、外部向けの宣言が内部の定義と食い違っていたときにコンパイラが警告を出してくれる。
855デフォルトの名無しさん:2008/06/25(水) 15:10:35
>>853
>>854
どうも。

#include func.cにしたら多重定義とかでおこられましたww
856848:2008/06/25(水) 15:34:39
>>849-851
ありがとうございます。
コンパイラの異常でないことが分かって安心しました。
857デフォルトの名無しさん:2008/06/25(水) 17:20:35
VC++でビルドしたexeをテキストで開いたら保存フォルダpathが書いてあった
これどうにかならない?

あと実際には存在しない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)も書いてあった

何これ?
858デフォルトの名無しさん:2008/06/25(水) 17:45:47
どうにかなるよ。

ランタイムライブラリに入ってたんだろう。
859デフォルトの名無しさん:2008/06/25(水) 18:26:53
#include<stdio.h>
#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のときだけゴミが入るのは何ででしょうか?
860デフォルトの名無しさん:2008/06/25(水) 18:30:21
たまたま。
初期化してないstr2で strlen(str2) は無いだろう。
sizeof str2 でどうか。
861デフォルトの名無しさん:2008/06/25(水) 18:52:55
上手くいきました。ありがとうございます。
862デフォルトの名無しさん:2008/06/25(水) 19:24:40
memsetの第二引数はintなのに、整数を渡すとおかしな値が入るのは何故ですか?
例えば1を渡すと16843009が入っていました。
0と-1はそのまま入っていたのですが。
863デフォルトの名無しさん:2008/06/25(水) 19:30:39
文字を受け取る引数の型をintにするのは標準ライブラリのお約束のようなもの、
例えそのmemsetのようにEOFが関係しないものであっても。
864862:2008/06/25(水) 19:53:23
>>863
返答ありがとうございます。
そういう決まりごとなんですか。
ということはintで受け取ったものをcharに変換しているということですよね?
なのに第一引数がvoid型へのポインタなのはなんか変な感じがしますね。
865デフォルトの名無しさん:2008/06/25(水) 19:59:26
>>862>>864
0x01010101 == 16853009

>>863
Cではchar型は関数の引数に渡せない。(integral promotion)
866デフォルトの名無しさん:2008/06/25(水) 20:00:57
int単位でしかmemsetできなかったら嫌すぎる
867デフォルトの名無しさん:2008/06/25(水) 20:01:51
誤った記述でもコンパイルできた場合、そのプログラムを実行した時に暴走してクラッシュする可能性とかありますか?
868デフォルトの名無しさん:2008/06/25(水) 20:07:05
異常終了という現象を知りながら、可能性がありますかってどういう
869デフォルトの名無しさん:2008/06/25(水) 20:28:31
WM_TIMER内にMessageBoxしたらメッセージボックスが出続けるとかね
870デフォルトの名無しさん:2008/06/25(水) 21:23:43
>>850
なぜでしょうか?
871デフォルトの名無しさん:2008/06/25(水) 21:29:23
>>864
昔は char * な実装もありました。
memset() の機能が 1 byte 単位で値を設定するものですから、ポインタの指す先の正体をとやかくいう必要はないわけで。
872デフォルトの名無しさん:2008/06/25(水) 21:30:50
>>867
「誤った記述」「暴走」「クラッシュ」の定義によって答えも変わると思います。
873デフォルトの名無しさん:2008/06/25(水) 21:33:46
>>840
ん、たしかに。
文脈依存でしょうね。
鋭い指摘ですね。
874デフォルトの名無しさん:2008/06/25(水) 21:33:47
>>871
char*だったのは昔void*がなかったという理由のほうが大きい。
875デフォルトの名無しさん:2008/06/25(水) 21:47:56
>>870
void printTest(double value)
{
printf("%f %g\n", value);
}
こういう関数でも作って、
printTest(0);
printTest(1);
printTest(1e100);
printTest(1e-10);
とでも呼んでみて、気に入った方を使えばいいと思うよ。
実験的には、引き数をdouble valueではなくfloat valueにしたらもっと違いが判るかもしれない。
876デフォルトの名無しさん:2008/06/25(水) 22:03:25
>>875
実行すると以下のようになりました。
%gだと0が0と表示されなくなるってことですか?

0.000000 6.64584e-316
1.000000 6.64584e-316
10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104.000000 1.19819e-127
0.000000 -6.27769e+124
877875:2008/06/25(水) 22:05:06
あーごめん、printf("%f %g\n@, value, value)だね。
878875:2008/06/25(水) 22:05:49
ダブルコーテーションがアットに化けた……
何度も失敬。
879デフォルトの名無しさん:2008/06/25(水) 22:11:40
>>875
ん、確かにいいかんじですねぇ。
#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 */
880デフォルトの名無しさん:2008/06/25(水) 22:22:31
>>876
好みの問題、ということでいいのではないでしょうか、私は好きになりましたが。
881デフォルトの名無しさん:2008/06/25(水) 22:41:33
>>836
n回目まの結果を載せたらN+1回目も欲しいな?
なんて帰納法?
882デフォルトの名無しさん:2008/06/25(水) 23:02:58
オーバーフローとアンダーフローを検出する方法を教えてください
883デフォルトの名無しさん:2008/06/25(水) 23:23:20
>>882
浮動小数点演算のオーバーフローとアンダーフローのことですか?
884デフォルトの名無しさん:2008/06/25(水) 23:29:08
>>882
私も知りたいです。最近は matherr() が使えないようで、困っています。
885デフォルトの名無しさん:2008/06/25(水) 23:45:34
固定長テキスト形式のファイルを構造体に読み込むにはどうしたらよいのでしょうか?
886デフォルトの名無しさん:2008/06/25(水) 23:54:44
fread
887デフォルトの名無しさん:2008/06/26(木) 00:27:14
お願いします。使用コンパイラはVisual C++ 2008 です。
Cで三角関数を計算させることはできるのですが、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++が根本から分かってないという感じもしますが・・・
よろしくお願いします。
888デフォルトの名無しさん:2008/06/26(木) 00:30:18
>>887
スレ違い。まぁ、sin(0)ではなくsin(0.)にしろってこった。
889デフォルトの名無しさん:2008/06/26(木) 00:33:37
>>885
固定長テキストをレコードで切り分けて文字列として格納したいなら
レコード単位で読み取って整形する
そのまま構造体に放り込みたいだけなら単にfreadを使えば済む
ただし改行がある場合は注意

>>887
引数に与えた値の型を特定できないという意味
詳しくはC++スレで聞け
890デフォルトの名無しさん:2008/06/26(木) 00:34:06
てらツンデレ
891887:2008/06/26(木) 00:38:13
>>888
>>889
回答ありがとうございます。できました。
仰る通りスレ違いでした・・・申し訳ないですorz
892デフォルトの名無しさん:2008/06/26(木) 00:43:33
http://www.kurims.kyoto-u.ac.jp/~ooura/fft-j.html

ここのfftsg.cの使い方がイマイチわかりません。

DFTしたいんですが

rdft(n, -1, a, ip, w)で定義されてます。


nはFFTのサイズ

aはFFT後の値を格納する配列

ipとwは作業用らしいですが、そのサイズをどのぐらいとればいいかわかりません。ご教授ねがいます
893デフォルトの名無しさん:2008/06/26(木) 01:00:28
>>892
コメントで説明があるよ

■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]
894デフォルトの名無しさん:2008/06/26(木) 01:01:55
>>893
2+sqrt(n/4)より大きいって書いてあるのがひっかかって
895デフォルトの名無しさん:2008/06/26(木) 01:05:42
>>892
追加
ip[2+sqrt(n/4)]、w[n*5/8]でいいんじゃないかな
心配だったら倍にしておくw
896デフォルトの名無しさん:2008/06/26(木) 01:08:15
>>895
了解です

使い方なんですが、

実信号がx[n]にはいってたら、

rdft(n, -1, x, ip, w)を実行したら

x[n]の配列にFFTした値が入ってるってことですか?

添え字が偶数に実部で、奇数のところに虚部がって
897デフォルトの名無しさん:2008/06/26(木) 01:08:24
>>894
配列のサイズが2+sqrt(n/4)以上ならOKということ
2+sqrt(n/4)を超える部分は単に使われないということ
898デフォルトの名無しさん:2008/06/26(木) 01:09:56
>>897
なるほど!
899デフォルトの名無しさん:2008/06/26(木) 01:31:35
>>896
x[n]に実信号を格納しておいて、rdft(n, 1, x, ip, w)でDFT実行。
結果はx[n]に上書きされて、添え字が偶数に実部で、奇数のところに虚部が格納される。
rdft(n, -1, x, ip, w)で逆DFT実行。x[n]に実信号が格納される。
です。
900デフォルトの名無しさん:2008/06/26(木) 06:28:10
普段何気なく使っているgets関数などの仕組みを知りたいのですが、初心者だとそこまで知る必要はないのでしょうか?
901デフォルトの名無しさん:2008/06/26(木) 06:33:56
釣り?
902デフォルトの名無しさん:2008/06/26(木) 06:34:17
>>900
知りたくなったところから調べればよい。
903デフォルトの名無しさん:2008/06/26(木) 06:35:04
>>900
普段だろうと何気なくだろうと、今後はやめとけ、な?
バッファオーバー蘭姉ちゃんの問題が指摘されているから。
904デフォルトの名無しさん:2008/06/26(木) 07:30:23
>>903
バーローw
905デフォルトの名無しさん:2008/06/26(木) 07:38:49
>>900は関数の仕組みを知りたいといっているのに、何に反応しているんだろうか?
906デフォルトの名無しさん:2008/06/26(木) 07:39:16
返答ありがとうございます。ググッてみたらgetsが問題ありな関数だとわんさかでてきました
他にも危険な関数とかありますか?
907デフォルトの名無しさん:2008/06/26(木) 07:44:25
>>906
strcpy(*str1,*str2);
str2がstr2より長い場合、これまたバーローになるw
908デフォルトの名無しさん:2008/06/26(木) 07:45:38
うわっ、なんかラリってるw str2がstr1より長いとき
909デフォルトの名無しさん:2008/06/26(木) 07:48:24
サイズを指定しないで文字列を操作する関数には危険がある可能性が高い
910デフォルトの名無しさん:2008/06/26(木) 07:48:48
常識的な範囲の中で正常動作すればいいんだよ。
911デフォルトの名無しさん:2008/06/26(木) 07:53:00
>>910
> 常識的な範囲
何が常識かも言わずにそれは無い。どうしたら起こるか?
で話を理解してくれ。結局、そういうコードはあふれ出てしまう
欠陥を持ち合わせているため、変数を適当に変えればいつでも
不正な動作に出来る欠陥品ってことさ。
912デフォルトの名無しさん:2008/06/26(木) 07:56:03
ほとんどの関数は安全な仕様にした関数あるんだから
そっち使えばいいのにわざわざ危険な関数使う意味は無いな
913デフォルトの名無しさん:2008/06/26(木) 08:03:35
>>911
予期しないでかいデータを入力したらぶっ飛ぶようなプログラムは五万とある。
でも、それは必ずしも不正なプログラムではない。
914デフォルトの名無しさん:2008/06/26(木) 08:04:43
だからと言って不正なものをそのままにしていい理由にはなんねーよw
915デフォルトの名無しさん:2008/06/26(木) 08:05:23
まぁ、何事も完璧はなく、ユーザが問題の起こらない範囲内で使うというのは分かるが
ユーザが必ずしもその仕様を知っているとは限らない。プログラマ側が適切に
処置を施す必要があるわけだから、何を 常識 かなんて、自分の都合で
言われても、通用しないんだなぁ、これが。
916デフォルトの名無しさん:2008/06/26(木) 08:07:15
>>913
ちょっと頂けない意見だな。君は脆弱性を残し、穴を開けたままにしておくのか?
プログラマとしてではなく、他へ行っても通用しない意見だぞ。言動を慎め。
ってか、宿題スレの一言居士か、君は?
917デフォルトの名無しさん:2008/06/26(木) 08:10:27
>>913
何を基準に 予期していない としているんだね?
自分の知識や経験で考えられるものじゃ駄目だぞ。
そのもの自身が受けるもの全て、あるいは限度で考えてみるべきだし
例え巨大なデータでも、処理に時間は掛かるが当然それに応じた
対策はしてあるものもあるでしょ。昔は穴だらけだったが、それも
ユーザからの報告で、徐々に解消されてきたんだから。
少なくとも、視野の狭い自分が考えられる範囲内で物を言っても
結局穴があれば突かれて当然だろ?

にしても、まだ君は gets を擁護するのかね?あのスレでも
最後の方で叩かれたのに?向いてないぜ、あんた?
918デフォルトの名無しさん:2008/06/26(木) 08:40:00
gets()は全く擁護するに値しないが、限定的にはstrcpy()は使える。
919デフォルトの名無しさん:2008/06/26(木) 08:46:00
strlcpyを毛嫌いする人たちもいるね。
920デフォルトの名無しさん:2008/06/26(木) 08:47:31
きちんとサイズが管理できてれば問題ないしな。
921896:2008/06/26(木) 10:06:54
>>899
ありがとうございます
92289:2008/06/26(木) 11:41:48
http://www.kurims.kyoto-u.ac.jp/~ooura/fft-j.html

手計算で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)を使った計算結果が一致しないんです。
923デフォルトの名無しさん:2008/06/26(木) 12:52:57
浮動小数点数は実数そのものではなく、あくまで実数のシミュレーションに過ぎない
誤差は当然のように出てくるし、何度も加減乗除を繰り返す高度な数値計算では
とうぜんその誤差は積み重なってでかいものになってくる
92489:2008/06/26(木) 12:57:18
誤差のレベルじゃないぐらちがくなるんです・・・
925デフォルトの名無しさん:2008/06/26(木) 13:26:10
ならどっちかが間違ってるんだろう
926デフォルトの名無しさん:2008/06/26(木) 16:14:43
>>912
うーん。
危険なものが事件を起こさないことが保証されている場面においては
安全策のコストがない分速いんだよね
事故を起こす可能性がある場面においては安全なものを使用すればいい
927デフォルトの名無しさん:2008/06/26(木) 16:17:40
>>913は対策されてないものもあるといっていて
>>917は対策してあるものもあるといっている

なんら対立する理由がないと思うんだが、なんで喧嘩腰?おちつけってw
928デフォルトの名無しさん:2008/06/26(木) 17:02:20
動的に確保した二次元配列の解放部分を自作関数化するとエラーが出るのですが、
main関数内にそのまま解放部分を書くとエラーが出ません。
何故エラーが出るのかが分かりません。
/* 解放部分自作関数化 */
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;
}
929デフォルトの名無しさん:2008/06/26(木) 17:06:06
エラーメッセージは?
あとvoid型なんだからreturnは消そう
930デフォルトの名無しさん:2008/06/26(木) 17:09:51
グローバル関数でptr宣言して自作関数でfreeしてみ
931デフォルトの名無しさん:2008/06/26(木) 17:10:24
for ループの i は5じゃなくて2だろ。
そして、
free(ptr);
ptr = NULL;
DeleteHeapの引数も*2個でいいのでは
932デフォルトの名無しさん:2008/06/26(木) 17:10:54
int main()
:
:
:
:return 0;
}
933931:2008/06/26(木) 17:16:49
ってDeleteHeapの呼び出し無いからmainしかみて無かったわ
DeleteHeapの中の
free(ptr[i]);
ptr[i] = NULL;

free((*ptr)[i]);
(*ptr)[i] = NULL;
これでどう
934デフォルトの名無しさん:2008/06/26(木) 17:16:56
解放部分をDeleteHeap(&ptr);
としてみたけど特にエラーは出なかったよ。
もとのfree処理を残したままだと2重解放でダメだけど、どうかな。
935デフォルトの名無しさん:2008/06/26(木) 17:17:21
>>928
日本語で書いてみるのが早道かも。
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.の操作に問題があると思われ。他の箇所には問題がないような
感じ
936デフォルトの名無しさん:2008/06/26(木) 17:40:32
>>930
グローバル変数にしたところ問題は解決しました。
解決出来たのですが、解決出来た理由が分かりません。
>>931
forループ内iは2でした。すみません。
main内の解放処理を
free(ptr);
ptr = NULL;にしてみました。
>>エラー内容
プロジェクトX.exeの0x00413733でハンドルされていない例外が発生しました。
0xC0000005:場所0x00000000を読み込み中にアクセス違反が発生しました。
というダイアログが出ました。
>>933
解決出来ました。
解決出来たのですが、解決出来た理由が分かりません。
>>934
私の環境はVS2005,WindowsXPですが、
DeleteHeap関数呼び出しの際はmain関数内の解放処理は省いています。
937デフォルトの名無しさん:2008/06/26(木) 17:42:57
>>936
優先順位表を確認だ。
*ptr[1] と (*ptr)[1] は違うぞ(0はたまたま同じだが)
938934:2008/06/26(木) 19:09:44
>>936
エラーが出るコードを載せてもらえませんか?
こちらはVS2003です。
939デフォルトの名無しさん:2008/06/26(木) 19:15:45
もう何十年も"Hello World"の次の段階に進めません。
次は何をすべきですか?
940デフォルトの名無しさん:2008/06/26(木) 19:15:58
>>939
就職
941デフォルトの名無しさん:2008/06/26(木) 19:18:22
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7087.txt
このプログラムについて質問です
コンパイラは何のエラーメッセージも出さないんですが
実行するとちゃんと動きません
問題点の指摘お願いします
942デフォルトの名無しさん:2008/06/26(木) 19:31:31
>>939
次はputs("good-by world!")を覚えましょう
943930:2008/06/26(木) 19:37:24
>>936
void fx(void);

int main()
{
FILE *fw=fopen("samp.txt","w");
fx();
return 0;
}

void fx(void)
{
fclose(fw);
}

これと似たようなもん
944デフォルトの名無しさん:2008/06/26(木) 19:40:06
香ばしい
945デフォルトの名無しさん:2008/06/26(木) 19:43:21
>>941
void input(goods *mono);//価格の入力
void input(goods*){

この辺、変かな。
あと、グロバールとローカルの変数名一緒はやめたが良いよ。
946デフォルトの名無しさん:2008/06/26(木) 19:55:47
>>928
ポインタを通して操作している実体がなんであるかを確認しないで処理をしているからである。

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]) となる。
947デフォルトの名無しさん:2008/06/26(木) 20:06:17
>>941
一応直してみたよ。変えたとこはコメントつけてます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7088.txt
948デフォルトの名無しさん:2008/06/26(木) 20:16:57
>>941
> コンパイラは何のエラーメッセージも出さないんですが

修正は947がやってくれてるけど、元のはgcc4.2.3で
c:38: error: parameter name omitted
って出る。 使ってるコンパイラが何か気になる。
949デフォルトの名無しさん:2008/06/26(木) 21:24:19
>>945>>947
ありがとうございました
スペルミスの訂正だけで一応動くことは動きましたが
他にも色々改善すべきところがあったんですね
ってか&と%間違ってたとか全然ダメダメですね
>>948
borland c++ 5.5.1です
gccってやつがかなりメジャーっぽいのでそっちにしとけばよかったかと思うこともあったりなかったりです
950デフォルトの名無しさん:2008/06/26(木) 21:39:14
関数のプロトタイプや定義についての質問です。
[記憶クラス指定子] [戻り値型]
[関数名] [引数]
のような書き方、例えば
static int
foo(void);
この戻り値型の次を一行開けている場合がありますが、
何か意味があるのですか?
951デフォルトの名無しさん:2008/06/26(木) 21:44:59
関数定義が検索しやすくなるんじゃないでしょうか
952デフォルトの名無しさん:2008/06/26(木) 21:45:14
関数の定義を探すときに「行頭+関数名」で探せる。
スタイルの問題はあまり意味を考えないほうが良いよ。だいたいくだら
ないから。
953デフォルトの名無しさん:2008/06/26(木) 21:48:07
>>950
おそらく、関数名を見つけやすいというメリットからだろう。
そこんとこは、コーディングスタイル(規約)にかかわるところ。

俺がかつて見たのでは、関数の引数を行分けして、各行に引数のコメントを書くというのがあった。
int foo(
int n,   /* ・・・ */
char* s  /* ・・・ */
);
954デフォルトの名無しさん:2008/06/26(木) 23:24:59
そうも書けるのがC言語。
955デフォルトの名無しさん:2008/06/27(金) 00:07:23
ブロックコメントが実装されててそうかけない言語があったらびっくりですお
ラインコメントでもいいけどね
956デフォルトの名無しさん:2008/06/27(金) 00:19:00
>>953
K&R時代の名残り(つーか、遺物)もよく使うな。
957デフォルトの名無しさん:2008/06/27(金) 00:33:23
char *new_p;
char *old_p;
という変数があったとして、
new_p = old_p = malloc(sizeof(char));

old_p = malloc(sizeof(char));
new_p = old_p;
って同じことですよね?
958デフォルトの名無しさん:2008/06/27(金) 00:38:55
>>816
亀レスだが、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;
}
959デフォルトの名無しさん:2008/06/27(金) 00:54:54
>>816
便乗
言われたように作ったつもりではある
付け加える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);
}
960デフォルトの名無しさん:2008/06/27(金) 01:01:04
>>816
じゃ、俺も便乗。
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;
}
961デフォルトの名無しさん:2008/06/27(金) 01:04:32
>957
一般的にはそうです
962デフォルトの名無しさん:2008/06/27(金) 03:53:56
>>910 >>905 >>913 < こいつ鬱陶しいな。ろくに答えもせず
既に一般的に知られている問題点に対して、問題の起こらない
使い方をすりゃ良いとか、理解力の無い奴が口出しすると
泥沼に嵌る意味がよーく分かるわ。まだこいつ人生経験も浅い
青二才だろ。言動が自分勝手すぎ。この世の中で
自分の頭の中、自分の経験、知識、考察力なんてちっぽけなもんだぞ。
しかし、これは誰が何を言おうと、実際に起こるわかりきったトラブルだから
それが理解できないなら、プログラマーなんてやめとけ、適性がなく
自分が犯したミスもPCのせいにするんだろ?
963デフォルトの名無しさん:2008/06/27(金) 04:23:14
#include <stdio.h>
int 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;
}
964デフォルトの名無しさん:2008/06/27(金) 09:36:59
>>962
おまえの知ったかにはあきれる
>>905の通りだと思うがな。
965デフォルトの名無しさん:2008/06/27(金) 09:38:44
>>962
プログラムには誤動作に対する許容度というものがある。
966デフォルトの名無しさん:2008/06/27(金) 09:46:59
>>962
PC再起動すれば直る問題もあるだろ
あんなんもダメなんか、短気だなおまえ
967デフォルトの名無しさん:2008/06/27(金) 10:02:12
そいつに触るな
968デフォルトの名無しさん:2008/06/27(金) 12:40:21
>>962
関数には定義域というものがあってだな、定義域とその範囲内での動作が完全に定義されてればいいんだよ。
969デフォルトの名無しさん:2008/06/27(金) 14:45:45
>>962
おもしろいなあwためしにgetsが「なぜ」だめなのか説明してみて?
ぐぐれとか一般的にだめだといわれているからとかは望んでないからね。
970デフォルトの名無しさん:2008/06/27(金) 16:42:36
962の人気に嫉妬
971ねこ:2008/06/27(金) 18:22:33
こんにちは。私は、大学1年生です。学校の課題で数あてゲームをつくり、レポートを提出しなければなりなせん。
プログラムはコピーさせてもらいました。なので、わからないことが多いです。
選ばれる数字は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++;
972デフォルトの名無しさん:2008/06/27(金) 18:24:56
どんな整数でも900で割った余りは0〜899の間になるでしょ?
その余りに100足せば100〜999と言うお望みの数になる
973デフォルトの名無しさん:2008/06/27(金) 18:25:29
rand() は 0から RAND_MAX (32767) までが返る
これを 900で割った余りを求めれば、答えは 0から899までになるだろう。
それに100足すと、100から999までになるでしょ。
974デフォルトの名無しさん:2008/06/27(金) 18:46:37
struct hoge {
char *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で初期化されていないのでしょうか?
975デフォルトの名無しさん:2008/06/27(金) 18:50:51
>>974
俺は構造体にポインタがあってもまとめて0で初期化している
個別のポインタはNULLで初期化する
使ってるコンパイラは0とNULLが同じようだから気にしてないが
976デフォルトの名無しさん:2008/06/27(金) 19:12:37
>>974
NULL になるかもしれないし、ならないかもしれない
コンパイラによって異なる
コンパイラの違いに振り回されたくなければ a->p = NULL; などと書くべき
特定のコンパイラしか使わないと決めていて今後他のものに移植したりしないつもりなら別に構わないかも
977デフォルトの名無しさん:2008/06/27(金) 19:47:29
978デフォルトの名無しさん:2008/06/27(金) 19:48:33
C規格はポインタや不動少数点数の内部表現について規定してないので、
memsetでゼロを埋めたときにゼロになることを期待していいのは整数型だけ
それ以外のものは全てa->p=NULLとかa->f=0.0のように初期化するのが作法

そういうメンバが多くていちいち初期化して回るのがだるいという場合は、
初期化用のマクロを書くか、あるいはたとえばstruct hoge hoge_d={NULL,0};みたいな
グローバルな初期状態の構造体を作っておいて、*a=hoge_d;みたいにする
979デフォルトの名無しさん:2008/06/27(金) 19:50:41
#define HOGE_INIT(hoge) (hoge.a=NULL, hoge.n=0)
980デフォルトの名無しさん:2008/06/27(金) 19:54:23
switch文のcase要素が60個あるのですがこれは
ifに書き直したほうがいいですか?
981デフォルトの名無しさん:2008/06/27(金) 19:56:07
>>980
「場合によります」としかいえません
982デフォルトの名無しさん:2008/06/27(金) 20:12:29
>>980
ソース晒してみそ
983デフォルトの名無しさん:2008/06/27(金) 20:14:07
switch(state){
case 1:{
func1();
break;
}
}

このcaseがあと59個と別のfuncが59種類それぞれ
呼ばれます
984デフォルトの名無しさん:2008/06/27(金) 20:15:25
switchのままで良いと思うよ
あと
case文に中括弧は要らない
985デフォルトの名無しさん:2008/06/27(金) 20:17:31
>>983
struct {
int (*func)(void);
} fs[] = {
NULL, /* 0 */
func1, /* 1 */
...
func60, /* 60 */
};

...
(*fs[state].func)();
...
986デフォルトの名無しさん:2008/06/27(金) 20:24:33
関数のポインタでぐぐれ
987デフォルトの名無しさん:2008/06/27(金) 20:42:50
>>983

void (*func[61](void) =
{
func0,
func1,
func2,

};

func[state]( );
988デフォルトの名無しさん:2008/06/27(金) 20:47:44
case 1:func1();break;
case 2:func2();break;
みたいに横並びにすればswitchでもそんなに悪くない
値と関数名が対応してなさそうならむしろいい気もする
989デフォルトの名無しさん:2008/06/27(金) 21:02:50
switch のままの方がいい気がする
990デフォルトの名無しさん:2008/06/27(金) 21:07:02
switchで60個caseがあると最悪の場合60回評価が行われるのでしょうか?
991デフォルトの名無しさん:2008/06/27(金) 21:08:14
>>990
十中八九テーブル作ってジャンプします
992デフォルトの名無しさん:2008/06/27(金) 21:11:28
関数呼ぶだけのswitchなら関数配列でいいんじゃない
993デフォルトの名無しさん:2008/06/27(金) 21:14:02
イーアルカンスー
994デフォルトの名無しさん:2008/06/27(金) 21:15:52
>>992
数値が連続していて、負数とか配列サイズ以上の数値になる可能性がないならそれでもいいと思うよ
if 文でチェックしまくるよりは default 使ったほうがスッキリ(完全な主観です^^;)するから
995デフォルトの名無しさん:2008/06/27(金) 21:17:17
どっちもオーダー1ですよね?
996デフォルトの名無しさん:2008/06/27(金) 21:26:42
>>995
そうですね

----------
立てられなかった 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
997デフォルトの名無しさん:2008/06/27(金) 21:29:59
関数ポインタの配列にすれば色々メリットもあると思うけど、
関数呼出しが必要ない場合とか、、まあ考えてなさそうだからいいよねw
998デフォルトの名無しさん:2008/06/27(金) 21:32:22
999デフォルトの名無しさん:2008/06/27(金) 21:33:47
999
1000デフォルトの名無しさん:2008/06/27(金) 21:34:07
1000なら優秀なプログラマになれる
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。