C言語なら俺に聞け(入門編)Part 92

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

★前スレ
C言語なら俺に聞け(入門編)Part 91
http://hibari.2ch.net/test/read.cgi/tech/1319581056/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 153代目
http://hibari.2ch.net/test/read.cgi/tech/1320365280/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
2デフォルトの名無しさん:2011/11/10(木) 22:56:09.00
     ,.;'‐、____,:-;';:、.
   /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ.
  /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ.
  /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ.
  i;:;:;:;:;:/ノ-'-''"ヽ;:;:;ヽ'''-ヽ、;:;:;:;:;|
  {;:;:;:;:ノ■■■   ■■■ヽ;:;:;}
  ヽ;:;{    _   _    |;:;:{
   };:;|三/ ●),. 、(● ヽ三 |〈
   ヽ| " ゙='"/:::ヾ='"゙  | }     __________
   { |∫ ∴ (,.、::,. )  ∵ |/    /
    ゝ::●. ...:人:人:::.....  ...!   < そーですワタスが変なおじさんです
    {;;ヽ:.:.:.:.:.:.:.<Ξ>:.::.:.:.:.:.:.:/;}    \
   / ヽ:.:.:.:.::.:.:.:.:.:.:.:.:.:.:/ \       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 /    |ヽ:.:.:.:.:.:.:.:.:.:/|    \
       ヽ ̄ ̄ ̄  /
        ヽ___/
3デフォルトの名無しさん:2011/11/10(木) 23:10:16.68
>>1
大変お疲れ様です
死にます
4デフォルトの名無しさん:2011/11/11(金) 00:57:39.31
長文失礼します。

戻り値が構造体の関数を宣言し、構造体を戻り値として返したときに、
その構造体をポインタ変数へ代入したいのですが、うまくいきません。
p = tesFunc;
(p:ポインタ変数、tesFunc:戻り値が構造体の関数)
イメージとしては、こういう風にしたいのです。

いくつか、やり方を変えて試したのですが、エラーが出てしまいます。

私がやりたいことは、
ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。
なので、違う方法でもできるのなら、そちらの方法で試してみたいと思います。
5デフォルトの名無しさん:2011/11/11(金) 01:01:51.76
構造体へのポインタを引数として関数に渡す
6デフォルトの名無しさん:2011/11/11(金) 01:07:35.10
>>4
まぁ素人さんはポインタなんか使わずに構造体をそのまま受け取るようにした
方がいい。
構造体を戻り値とするんだから、受け取るにもポインタではなく構造体を指定す
ればいい。
ただのintなんかと同じに考えればいい。
7デフォルトの名無しさん:2011/11/11(金) 01:16:22.78
>>5 その方法でやってみます!!

>>6 確かにポインタなんて使いたくはないんですが、
  戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
  というのが、ちょっと具合が悪くて。
8デフォルトの名無しさん:2011/11/11(金) 01:17:34.03
tesFuncの中の構造体をstaticにしてその構造体のポインタ返すようにしてみれ
グローバルに置いておきexternするみたいなことをちょっと隠蔽してみたりしたいんだよな?
9デフォルトの名無しさん:2011/11/11(金) 01:58:44.81
765プロの事務所のトイレになりたい
10デフォルトの名無しさん:2011/11/11(金) 02:28:23.20
>>4です。
解決しました。

戻り値が構造体へのポインタの関数を使うことと、staticを使用することの2つがキーだったみたいです。

皆さん、ありがとうございました。
11デフォルトの名無しさん:2011/11/11(金) 02:41:46.21
>>10
わけのわからんバグに悩まされると思うぞ?
元の変数に戻したければ素直に代入しとけ。intと同じに考えればいい。
12デフォルトの名無しさん:2011/11/11(金) 02:58:23.03
>ある構造体を色々な関数で使い、なおかつ値を変えたりしたいわけです。

こういう目的なら、構造体を1個だけ確保しておいて、「色々な関数」へは、
その構造体を指すポインタを引数として渡すのがシンプルだと思うけどな。
構造体がごく小さいものであれば>>11の言うとおり。
13デフォルトの名無しさん:2011/11/11(金) 03:36:44.59
struct A {int i;};

struct A* f(void) {
    struct A a = {.i = 9999999};
    return &a
}

先に予想しとくわ
14デフォルトの名無しさん:2011/11/11(金) 05:23:01.80
ふーん
15デフォルトの名無しさん:2011/11/11(金) 05:43:59.66
どうでもいいが、
--
戻り値の構造体と、受け取り側の構造体が別々の変数になってしまう
  というのが、ちょっと具合が悪くて。
--
これが何を言いたいのか誰か解説してくれ。
16デフォルトの名無しさん:2011/11/11(金) 06:00:24.97
どうでもいいならどうでもいいじゃん。
17デフォルトの名無しさん:2011/11/11(金) 10:02:01.51
mallocってなんなんですか??
18デフォルトの名無しさん:2011/11/11(金) 10:10:58.12
19デフォルトの名無しさん:2011/11/11(金) 13:17:49.84
bool型使って0と1だけのループ回したいんですけど
for(boo=0 ;boo <=1 ;boo++){
みたいなループ作ったら
warning: incrementing a bool value is deprecated
っていう警告が出ます。
確かにbool型に足し上げることは推奨されないですが何か別の方法ありますか?
20デフォルトの名無しさん:2011/11/11(金) 13:22:35.87
>>19
for( i=0; i < 2; ++i ){
boo=i;

わりとマジレス
21デフォルトの名無しさん:2011/11/11(金) 13:26:01.02
func();
func();
でいいだろ
22デフォルトの名無しさん:2011/11/11(金) 13:31:11.25
関数形式マクロの定義で、ある関数を呼び出すのはあまり良いコーディングとは言えないでしょうか
例えば、

int Function1(int x, int y)
{
int temp;
temp = (x + y) / Function2(x, y);
return temp;
}

こんな関数の代わりに、関数呼び出しのオーバーヘッドを考慮して、

#define Function1(x,y) (((x) + (y)) / Function2(x, y))

このようにマクロを定義するのってマズイですか?
23デフォルトの名無しさん:2011/11/11(金) 13:32:39.59
callocってサイズ指定方法とゼロクリアの違い以外はmallocと同等の機能?
24デフォルトの名無しさん:2011/11/11(金) 13:37:36.46
>>22
引数の評価に副作用がある場合はマズイ。
そうでないならおk。
25デフォルトの名無しさん:2011/11/11(金) 14:09:01.46
>>23
大抵そう。極端な場合、内部でmalloc()とmemset()を呼んでいる。
26デフォルトの名無しさん:2011/11/11(金) 14:23:25.46
>>22
C99/C++処理系ならインライン関数も検討したほうがいいと思う
27デフォルトの名無しさん:2011/11/11(金) 17:19:34.93
>>20
ありがとう
やっぱそんな感じにしないとダメですね
28デフォルトの名無しさん:2011/11/11(金) 20:39:01.57
マクロの中でリターンしてると後から読んだときに途中でリターンしてることに気付かないんだよな
29デフォルトの名無しさん:2011/11/11(金) 20:54:21.42
確保されていないポインタをfreeに投げたらどうなるの?
30デフォルトの名無しさん:2011/11/11(金) 20:59:42.33
>>29
最悪の場合宇宙が崩壊する
結構マジで
31デフォルトの名無しさん:2011/11/11(金) 21:20:42.61
ポインタにNULLを入れて何回でもfreeしてやる
32デフォルトの名無しさん:2011/11/11(金) 21:22:22.74
ポインタに宇宙を入れて見たい
33デフォルトの名無しさん:2011/11/11(金) 21:38:11.03
単方向リストを表示したいんですけど、うまくできません><
どこが間違っているか教えてください!
http://codepad.org/GDXIYcVE
34デフォルトの名無しさん:2011/11/11(金) 21:40:25.92
見てないけどヌルポで初期化してないと予言
35デフォルトの名無しさん:2011/11/11(金) 21:52:55.76
>>34
ごめんなさい、わからないです。
リストを作るところまでは、合ってますか?
36 ◆QZaw55cn4c :2011/11/11(金) 21:53:18.23
>>33
http://ideone.com/YXuBD

>>34
いまだにその落とし穴にはまって首をひねることが。
37デフォルトの名無しさん:2011/11/11(金) 21:56:23.04
p=p->next; ←ココ
38デフォルトの名無しさん:2011/11/11(金) 22:02:53.97
>>36 ありがとうございます!
>>37 p=p->nextじゃ、移れてないってことですか?
あと実行したときに、後ろから?表示されているのもよくわかりません。
39デフォルトの名無しさん:2011/11/11(金) 22:14:01.85
うん、p->next初期化されてないも。
40デフォルトの名無しさん:2011/11/11(金) 22:19:26.90
>>38
逆順になるのは、リンクリストの最初のほうにセルを挿入してるからだな。
41デフォルトの名無しさん:2011/11/11(金) 22:21:10.39
地球どころか太陽系すべてが吹き飛ぶほどの気力がたまっているぞ
42デフォルトの名無しさん:2011/11/11(金) 22:25:43.46
>>39 p->next = start->head;
start->head = p; で、セルをつなげてる?
>>40 わかった!ところてんみたいに入れてった感じですね!
43デフォルトの名無しさん:2011/11/11(金) 22:46:38.06
いけーーーーーーー!!
ところてんマグナム!!
44デフォルトの名無しさん:2011/11/11(金) 23:10:16.53
そんなふにゃチンじゃいけんだろ。
45デフォルトの名無しさん:2011/11/11(金) 23:31:51.28
何でコンピュータの基幹演算部分って十数桁までの計算しかできないのですか?
多倍桁の計算をするときは実装するほかないですよね?

大学の考察でこんな課題がでました。
教えてください。
どうしてでしょうか?
46 ◆QZaw55cn4c :2011/11/11(金) 23:34:42.51
>>45
>どうしてでしょうか?
How を説明すればいいのでしょうか?それとも Why ?
47デフォルトの名無しさん:2011/11/11(金) 23:41:34.79
>>45
つうか、それが分からない人間がなんで多倍桁なんて言葉を知ってるの?
48デフォルトの名無しさん:2011/11/11(金) 23:41:43.28
>>45
そうしたほうが作る人が楽だから
49デフォルトの名無しさん:2011/11/11(金) 23:42:40.74
>>46
両方お願いします。必然性があるのか、そもそもどういう仕組みになっているのか、
両方において曖昧な認識です。

プロフィール: 進研数学偏差値74.8
50デフォルトの名無しさん:2011/11/11(金) 23:45:13.26
>>47
アルゴリズムとして知ってるから。
ちなみに、桁*桁の計算が4つあったら、桁*桁を3つと足し算といった感じで
計算量を大幅に減らす事もできるんですよね。
>>48
コンピュータの内部の事情って関係ありますかね?
51デフォルトの名無しさん:2011/11/11(金) 23:51:16.19
普通に考えればわかることだよ
質問するほどのことではない
52デフォルトの名無しさん:2011/11/11(金) 23:52:32.50
メモリの無駄が増えるからですよね?
これでいいですか?
53デフォルトの名無しさん:2011/11/11(金) 23:54:50.27
多倍長演算とかcpuでサポートしたらハードウエアが複雑になるからじゃないの?
そこまでしてやる需要がないとか。

8086とか68000くらいのころはけっこう複雑な命令があったけど、その後RISCが流行って
単純な命令を高速実行する流れになって、またその後CISCががんばって効率化して
RISCとかCISCって分類が無意味になって、みたいな流れだよね。

8086のころはBCD演算をサポートする命令があったから、RISCのトレンドがなかったら
そっち方面に技術が発展して、もしかしたら多倍長演算がCPUでサポートされてる
ような世界になってたかもしれない。それはないかな?
54デフォルトの名無しさん:2011/11/11(金) 23:56:33.91
1 メモリが無駄になるから。
2 根幹演算を組み合わせて実装した方が効率の良いアルゴリズムが開発できるから。
3 ハードウェアが複雑になるから。

こういう認識でいいでしょうか?
55デフォルトの名無しさん:2011/11/12(土) 00:01:26.32
結局は互換性がうんぬんじゃろ
ハードに変更があると多大な範囲に影響が及ぶから
変えるに変えられネーってことでだらだらやってんだろ
56デフォルトの名無しさん:2011/11/12(土) 00:07:11.54
CPUにメモリって何個入ってるんですか?
57デフォルトの名無しさん:2011/11/12(土) 00:07:36.28
昔はメモリも少なかったし、必要だったら自分で作ればいいじゃん的な事
58デフォルトの名無しさん:2011/11/12(土) 00:11:06.21
>>56
レジスタだったら何十個もあるんじゃないかな。
8086の系統は少ないかもしれないけど、内部的にはたくさんもってるみたいな
話を聞いたことがある。
59デフォルトの名無しさん:2011/11/12(土) 00:25:22.04
CPUを自作ってできるのかな?
60デフォルトの名無しさん:2011/11/12(土) 00:38:00.65
なんでできないと思う?
昔はみんな自作してた。
61デフォルトの名無しさん:2011/11/12(土) 00:42:42.74
>>59
情報系なら大学の実験なんかで作るだろ。
62デフォルトの名無しさん:2011/11/12(土) 00:44:33.59
FPGAでなんちゃって自作じゃないの?
63デフォルトの名無しさん:2011/11/12(土) 00:44:43.14
最近はFPGAで自作してる人とかいるね。
64デフォルトの名無しさん:2011/11/12(土) 00:45:13.72
ttp://www.alles.or.jp/~thisida/mycpu_gougai.html
今更こんなもんやってられんわ
FPGAのほうがなんぼかやろうって気になれる
65 ◆QZaw55cn4c :2011/11/12(土) 02:16:45.26
>>64
熱い‥‥‥。

>>61
電子系ならそうだったみたい。制御系ならせいぜい TTL ゲートでシリアル4bit 加算、というレベルでした、うちの大学は。

>>49
ふーん、今の若い子はそういう自己を表現することもあるんだ。
いや、別に否定するわけじゃあありません。私だったら‥‥これこれこうこうの本を読みました、って書くなあ(実のところ読めてなくて見たレベルなんでしょうけれども、それに気づくのはずっとあとの話)。
66デフォルトの名無しさん:2011/11/12(土) 02:37:41.99
>>65
早く説明してやれよ。>>46
67 ◆QZaw55cn4c :2011/11/12(土) 02:46:15.39
え?もうたくさんコメントがついているので、いまさら、じゃないですかね。
68デフォルトの名無しさん:2011/11/12(土) 03:09:03.79
素直に「分からなかったので即答できませんでした」って言えよ
69 ◆jMy.vROSfw :2011/11/12(土) 03:17:15.15
はい
70デフォルトの名無しさん:2011/11/12(土) 03:38:42.21
基本的にそれぞれの桁は前の桁からの繰り上がりを待たないといけないから
桁数が増えると必然的に結果が出るのが遅くなるんだよね
71 ◆QZaw55cn4c :2011/11/12(土) 03:44:32.35
>>70
キャリールックアヘッド、というのがあってキャリーの伝播を極力早くする方法があります。回路はその分多くなりますが。
証明は論理式の and と or の内外をいれかえるだけだったかと記憶しています。
繰り上がり待ち方式はリップルキャリーといいます。
72 ◆QZaw55cn4c :2011/11/12(土) 03:46:50.98
>回路はその分多くなりますが。
ちょっと不正確。多入力ゲートが2入力ゲートのくみあわせよりも早いと期待できることがポイントだったかと。だから多入力ゲートの入力数の限界までは適用できますが、それ以上は実際どうなんでしょうね、よくわかんない。
73デフォルトの名無しさん:2011/11/12(土) 03:56:20.52
そういえばどうして計算機工学の話になってるんだっけ?
74デフォルトの名無しさん:2011/11/12(土) 04:13:33.96
>>73
知ったかしたいがために、
訊かれもしていないことをぺらぺらしゃべるやつが約1名いるようなんでね
75 ◆jMy.vROSfw :2011/11/12(土) 04:25:25.73
じゃぁお前も喋ればいいじゃん。
気持ち悪いなお前
76 ◆QZaw55cn4c :2011/11/12(土) 04:28:13.28
>>73
>>49 からの流れ。

>>74
ま、所詮暇つぶしですからね。
77デフォルトの名無しさん:2011/11/12(土) 04:29:07.43
ああ、自覚はあるんだな
俺はお前のことだとはこれっぽっちも言ってないぜ(笑)
78 ◆QZaw55cn4c :2011/11/12(土) 04:30:49.59
>>77
ん?私も私のことだとは言ってませんね。
79デフォルトの名無しさん:2011/11/12(土) 04:33:18.33
暇つぶしだと分かってるのにか?
80 ◆jMy.vROSfw :2011/11/12(土) 04:33:29.82
ヒョードルやジョシュにとってハントは休憩みたいなもんだろ。
81 ◆jMy.vROSfw :2011/11/12(土) 04:39:13.92
>>80
え? もう鳥パクッタ?
82 ◆jMy.vROSfw :2011/11/12(土) 04:44:42.18
69で使ったばっかりのトリップなのに何でもうパクられてんだ!
83 ◆xTnvTYkz3o :2011/11/12(土) 04:48:06.96
こえぇぇ。(´・ω・`) 鳥変えた。
84デフォルトの名無しさん:2011/11/12(土) 06:02:44.63
コテつけて暇をつぶすスレはここですか?
85デフォルトの名無しさん:2011/11/12(土) 06:18:05.00
もう一回>>83の鳥解析してよ
86デフォルトの名無しさん:2011/11/12(土) 11:49:35.81
bool a();
bool b();

if (a() || b()) ... としたときに b() が呼ばれない可能性がある。。というのはいいんだけど、

bool x = false;
x |= a()
x |= b()

こういう場合でも b() が呼ばれない可能性ってあるの?
87デフォルトの名無しさん:2011/11/12(土) 11:51:24.47
a()でexitしてたら、駄目かな?
88デフォルトの名無しさん:2011/11/12(土) 12:00:04.55
つーかそもそもコンパイル通らないから呼ばれない確率100%だよ
89デフォルトの名無しさん:2011/11/12(土) 12:43:50.98
>>82
すぐバレる嘘つくな糞vipperがwww
お前の鳥でググってら一杯出てくる出てくるwwwwwwwwwwwww
90デフォルトの名無しさん:2011/11/12(土) 13:00:52.95
なに、この基地外?
91デフォルトの名無しさん:2011/11/12(土) 13:04:06.48
たぶん糞コテがVIPから呼び込んだ奴
92デフォルトの名無しさん:2011/11/12(土) 13:09:12.93
全角二文字の一般的な単語じゃ被ってもおかしくないか。
しかし、1時間ちょいで同じコテ見つけて書き込めるかねぇ?
93デフォルトの名無しさん:2011/11/12(土) 13:15:15.57
>全角二文字の一般的な単語

それが分かるのは糞コテ本人か解析者
レス内容からして>>92は糞コテ本人と推定
94デフォルトの名無しさん:2011/11/12(土) 13:31:52.08
推定も糞も>>69,83は俺だって。
最近のコテだと◆QZaw55cn4cと>>80は別人だが。

コテ付けてほしいのか?
今時コテ叩きして楽しいかい?
95デフォルトの名無しさん:2011/11/12(土) 13:41:12.63
君の余計な一言

>最近のコテだと◆QZaw55cn4cと>>80は別人だが。

いや、君と◆QZaw55cn4cが同一人物の可能性なんてちっとも考えなかったよw
96デフォルトの名無しさん:2011/11/12(土) 13:42:49.23
ちょっとはカンガエロヨ
97デフォルトの名無しさん:2011/11/12(土) 13:48:30.65
>>86
下のは両方呼ばれるよ。
しかし、bool型にビット演算って違和感が。
警告とか出ないのだろうか。
98デフォルトの名無しさん:2011/11/12(土) 17:02:00.63
重複順列に関してです。
A,B,C,...,G,Hという7個以上の要素から6つ取り出して並べたときの、全ての組み合わせを出したいのですが、うまくいきません。

例としては、
AAAAAA
AAAAAB・・・
と出していくのですが、同じ要素を使っていても並び方が違えば別のパターンとして表示します。

長文申し訳ありませんが、手におえず、ご教授頂きたい次第です。
よろしくお願いします。
99デフォルトの名無しさん:2011/11/12(土) 17:22:21.29
>>98
7進数6桁の数値として考えればOK
100デフォルトの名無しさん:2011/11/12(土) 17:27:25.98
CでホームページのCGIを組んでいる人っているのかな?
101デフォルトの名無しさん:2011/11/12(土) 17:36:30.17
>>100
いる
102デフォルトの名無しさん:2011/11/12(土) 18:03:53.75
>>100
そもそもこの2chのread.cgiはCだろ
103デフォルトの名無しさん:2011/11/12(土) 18:11:40.61
2chもC言語で作られているのか。
それなら、Cを知っていれば、他の言語なんて
そんなに勉強する必要は無いのかな?
104デフォルトの名無しさん:2011/11/12(土) 18:28:13.44
>>103
CGIを作りたたいなら、他の言語も学んでおいて損はない。
105デフォルトの名無しさん:2011/11/12(土) 18:29:47.34
Cとアセンブラがあれば全てができる。
場合によっては他の言語処理系を作ることも含めて。
そう思っていた時期が私にもありました。

でも、現実に多くの言語があるのは、それが必要だからだよ。
それぞれにメリットとデメリットがある。
結論を言えば「用途による」としか言いようがないなぁ。

とりあえず C で CGI を作るのはあまりオススメできない。
106デフォルトの名無しさん:2011/11/12(土) 19:46:36.97
文字の扱いが面倒という程度
107デフォルトの名無しさん:2011/11/12(土) 21:28:12.24
>>99
ありがとうございます。
ただ、もしよろしければですが、コードを教えていただけないでしょうか。
108デフォルトの名無しさん:2011/11/12(土) 21:32:03.87
宿題スレ行け
109デフォルトの名無しさん:2011/11/12(土) 21:33:51.60
>>105
お前が他の処理系を作れないだけだろ。
110デフォルトの名無しさん:2011/11/12(土) 22:05:41.93
うらかたに行け
111デフォルトの名無しさん:2011/11/13(日) 10:55:16.42
縦5px横pxの画像があります
どの位置が何色(RGB)なのかを調べたいのですが
どのように調べるのでしょうか?
112デフォルトの名無しさん:2011/11/13(日) 10:57:57.46
win32apiにGetPixelというのがあるからそれで
113デフォルトの名無しさん:2011/11/13(日) 10:59:03.85
画像のフォーマットを調べてバイナリでファイルを読みこんで該当する位置のデータを調べる
114デフォルトの名無しさん:2011/11/13(日) 11:01:50.71
>>112-113ありがとうございます
115デフォルトの名無しさん:2011/11/13(日) 13:47:41.59
前も質問した者です。
末尾に新しいセルを挿入したいのですが、先頭に入ってしまいます><

http://codepad.org/UDC0PS5l
116デフォルトの名無しさん:2011/11/13(日) 13:53:13.89
そうですね
117デフォルトの名無しさん:2011/11/13(日) 14:11:48.82
>>115
これ先頭にも入らないだろ?
while(p->next != NULL)
にして最後にp->nextに入れろ
もちろんslist->headがNULLだったらわかってんだろうな
あとループがむかつく、slistにtailとか入れて最後のを保存しとけ
118デフォルトの名無しさん:2011/11/13(日) 16:05:24.68
質問させて下さい。
多次元配列でchar a[N][M]のNの部分をreallocで拡張した場合、
元々格納されていた文字列は新しく確保した領域にコピーされているのでしょうか?
119デフォルトの名無しさん:2011/11/13(日) 16:08:08.62
>>118
realloc はできません
120デフォルトの名無しさん:2011/11/13(日) 16:20:00.86
>>117
できました!ありがとうございます。
121デフォルトの名無しさん:2011/11/13(日) 16:23:35.31
>>119
回答ありがとうございます。
realloc出来ないんですか。。
ではこの場合Nを動的に拡張するには一般的にどういった方法があるんでしょうか?
122デフォルトの名無しさん:2011/11/13(日) 16:26:15.06
>>121
char (*)[M]
という型の変数を用意します
123デフォルトの名無しさん:2011/11/13(日) 16:26:33.06
動的に1次元配列を確保して二次元として扱えばいいよ
124デフォルトの名無しさん:2011/11/13(日) 16:35:28.87
>>122-123
回答ありがとうございます。
char a[N][M]のNとMの両方を動的に作成しようとしていたので困っていました。

125デフォルトの名無しさん:2011/11/13(日) 16:46:24.69
>>124
両方動的にするなら
char**
126デフォルトの名無しさん:2011/11/13(日) 19:22:34.08
switch文についてなのですが,breakを入れないと下にある文も実行してしまうと思うのですが,逆に利用して
switch (式){
case 値1:
case 値2:
処理A
break;
case 値3:
処理B
break;
default:
処理C
break;
}
とすることで,値1または値2の場合には処理Aを,値3で処理Bを,それ以外で処理Cを実行するといったことは出来るのでしょうか?
また,こういった書き方って嫌わられるものなのでしょうか?値1のところにも値2と同じ処理をコピペしておいた方がいいのでしょうか?
127デフォルトの名無しさん:2011/11/13(日) 19:23:31.90
>>126
良くある手法
128デフォルトの名無しさん:2011/11/13(日) 19:23:35.43
もともとそういう使い方です
129デフォルトの名無しさん:2011/11/13(日) 19:25:23.81
130デフォルトの名無しさん:2011/11/13(日) 19:54:09.12
>>126
実際上、使う状況はかなり珍しいとは指摘しておく
しかもfall-throughがデフォルトなのは、珍しいどころかバグの元(breakの書き忘れ)なので
コメントで明示的にfall-throughだと書くぐらい

機械語の観点からすると自然な仕様なんだが、
最適化コンパイラが当たり前の現代ではC言語の欠陥
131デフォルトの名無しさん:2011/11/13(日) 20:02:16.42
>>126
みたいにcaseが連続してる場合はいちいちコメントは入れないな。
処理があるのにbreakなしの時にはコメントを入れる。
処理があるのにbreakなしってことはめったにないけど、caseラベルが連続してるのは
ちょくちょくあるね。
132デフォルトの名無しさん:2011/11/13(日) 20:35:47.20
皆さんありがとうございます。
参考書にbreak必ず入れろみたいなことが書いてあったのでこういう使い方すると慣例的にダメなのか気になったんですが
使っても大丈夫のようで安心しました。
133デフォルトの名無しさん:2011/11/13(日) 21:51:28.37
個人的に嫌いなやつがだだこねるだけ
goto アレルギーと全く同じ
134デフォルトの名無しさん:2011/11/13(日) 22:01:35.24
必ず入れろというより、必要なところに入れ忘れるなって意味で書いてたんじゃないか?
135デフォルトの名無しさん:2011/11/13(日) 22:05:45.61
caseからbreakまでを一行で書いてコロンとかセミコロンを縦でそろえるのが見やすいと思うんだけど職場が許してくれない
136デフォルトの名無しさん:2011/11/13(日) 22:21:29.96
寧ろ神経質なコーディング規約だとこうなる。
switch (key) {
case 0:
{
...;
}
break;
case 1: case 2:
{
...;
}
break;
default:
break;
}
137デフォルトの名無しさん:2011/11/13(日) 22:35:37.14
参考書じゃなくてWebでしたhttp://www9.plala.or.jp/sgwr-t/c/sec06-5.html
また,SBクリエイティブの基礎からのCには,break書かないのは行儀が悪いと書かれてました
まぁcaseという名前からすると直感的でない感じもします
138デフォルトの名無しさん:2011/11/13(日) 22:44:05.46
>>126
case 値1:  と case 値2:  のあいだに何の処理も入れないなら、
意図も明白だし、なんの問題も無いような気がする。

switch (式){
case 値1:
処理A
case 値2:
処理B
break;

のような場合に、
「値1 の場合は、処理Aと処理Bを行い、値2の場合は処理Bのみを行う」という意味なのか、
「値1 の場合は、処理Aを行い、値2の場合は処理Bを行う、というつもりだったが、break を入れ忘れた」
のか判別しづらいってことが問題なのでは。
139 忍法帖【Lv=40,xxxPT】 :2011/11/14(月) 00:34:40.15
質問なんですけど、C++で強制的にadministrator権限で
実行をしたいんですが、どうすればいいのでしょうか?

質問なのでageさせてもらいました。
140デフォルトの名無しさん:2011/11/14(月) 00:35:26.76
まず、服を脱ぎます。
141 忍法帖【Lv=40,xxxPT】 :2011/11/14(月) 00:35:50.23
>>140
ネタはいらん
142デフォルトの名無しさん:2011/11/14(月) 00:36:36.55
>>139
Win32APIスレへいきな
143デフォルトの名無しさん:2011/11/14(月) 00:36:38.66
ネタにネタでこたえただけちゃうんか?
144デフォルトの名無しさん:2011/11/14(月) 01:03:38.64
残念ながらC言語スレだし
145デフォルトの名無しさん:2011/11/14(月) 01:54:49.21
C言語を知っていれば、なんでもできるように思うよね。
作者がいなくなっても、発展は続くのだろうか
146デフォルトの名無しさん:2011/11/14(月) 02:35:17.49
>>145
C言語は今の状態で固定されたほうがいい
変な拡張するなら色々なシガラミを切り捨てて別言語にしてしまうのが吉
147デフォルトの名無しさん:2011/11/14(月) 06:09:10.43
>>141
マルチしている奴が威張るな
148片山博文MZ:2011/11/14(月) 16:30:35.88
ふふふ、諸君はわたくしに勝てるかな。。。
149デフォルトの名無しさん:2011/11/14(月) 17:22:22.67
皆趣味でC言語のために使った費用どのくらい?
CPU代金くらいだよね?プログラミングほど金のかからないものはないよね。
情報処理系の学科進んで本当によかった。
150デフォルトの名無しさん:2011/11/14(月) 17:35:23.70
1997年くらい前まではパソコン何て金持ちしか持ってなかった。
151デフォルトの名無しさん:2011/11/14(月) 17:46:13.28
今のスパコンもオモチャのようになる時代が来るのかな
152デフォルトの名無しさん:2011/11/14(月) 17:58:14.66
>>149
言語オタクになると毎月の技術書代が・・・
何か一つの言語に集中した方が技術は身に付くし、金も掛からないんだろうな
153デフォルトの名無しさん:2011/11/14(月) 18:03:03.00
そうは言っても情報系の技術書って、高くても1万円を越えるのは珍しいくらいだろ。
美術系の専門書とか無茶苦茶高いぞ。
154デフォルトの名無しさん:2011/11/14(月) 18:07:46.52
図書館で頼んでコピーすればいいじゃん
本で購入なんて、お前さん情強のくせにアナログなことしてんじゃねーよ
155デフォルトの名無しさん:2011/11/14(月) 18:38:54.86
>>154
満足できる品揃えじゃ無いんでね>図書館

156デフォルトの名無しさん:2011/11/14(月) 18:39:48.75
>>155
B型乙www
157デフォルトの名無しさん:2011/11/14(月) 18:41:28.19
>>154
まともな本を書いてる人に金を落とすのが情強だろ
158デフォルトの名無しさん:2011/11/14(月) 18:41:33.10
>>155
だから品揃えは自分で注文して良くするんだよ
159デフォルトの名無しさん:2011/11/14(月) 18:41:43.59
てか俺の学校では、図書館で勉学に関係する本を図書の本として
買ってくれる制度があるんだがww
それで専門書頼めば買ってくれるかな。
160デフォルトの名無しさん:2011/11/14(月) 18:42:28.67
>>157
俺は購入厨とは友達になれない。
161デフォルトの名無しさん:2011/11/14(月) 18:43:04.45
学校じゃなくても普通の図書館なら注文ぐらい受け付けてるわ
162デフォルトの名無しさん:2011/11/14(月) 18:45:37.87
>>161
まじで図書館って便利だよな。

俺今までにコンピュータ関連でハード以外金使ったことないわ。
163デフォルトの名無しさん:2011/11/14(月) 18:48:59.54
>>160
こっちから願い下げだよ
164デフォルトの名無しさん:2011/11/14(月) 18:53:27.04
>>163
少ない友達大切にしろよ購入厨。
165デフォルトの名無しさん:2011/11/14(月) 19:10:24.45
市場経済は常にバカや弱者から搾取するためにあるんだぜ
金払わなくてもいいものに金払ったら負けだろ
166デフォルトの名無しさん:2011/11/14(月) 19:15:19.52
時間の価値が低い人なら、そうやって金を払わないために手間をかけるのがいいんだろうな
167デフォルトの名無しさん:2011/11/14(月) 19:18:37.89
書店で探すほうが手間だろwww
168デフォルトの名無しさん:2011/11/14(月) 19:18:46.43
>>165
そういう人の金の使いみちを知りたい
169デフォルトの名無しさん:2011/11/14(月) 19:21:00.68
貯金
170デフォルトの名無しさん:2011/11/14(月) 19:54:53.92
main関数を2つ作ることってできますか?
171デフォルトの名無しさん:2011/11/14(月) 19:58:23.16
試してご覧
172デフォルトの名無しさん:2011/11/14(月) 20:13:32.64
>>168
家賃とか光熱費とか言い出しそうでなぁ
173デフォルトの名無しさん:2011/11/14(月) 22:30:34.19
食費は大丈夫か?
174デフォルトの名無しさん:2011/11/14(月) 22:57:31.43
エンゲル係数が50%以上とか
175デフォルトの名無しさん:2011/11/14(月) 23:09:25.96
>>149
ハード・ソフト込みでゼロ
趣味で大金つかったのはアセンブラ
BASIC は親のすねが大部分で、自分の稼ぎで買ったのはほんの数十万
176デフォルトの名無しさん:2011/11/15(火) 01:20:26.55
>>173
食糞に見えた
177デフォルトの名無しさん:2011/11/15(火) 01:35:50.81
>>149
C言語のためというかプログラムのために新しいビデオカード買ったりUSBカメラ買ったり あーそういえばタブレットも買ったなぁ
あとかわいい表紙の技術書買ってみたりググって参考にしたサイトが参考にしたという技術書をあさってみたりしてるぜ
タッチディスプレイも買ったし、あぁHMZだっけか?ソニーのヘッドマウントディスプレイも欲しいな
178デフォルトの名無しさん:2011/11/15(火) 02:19:01.10
>>177
で、趣味でC言語のために使ったのは?
179デフォルトの名無しさん:2011/11/15(火) 02:39:58.45
>>178
合計金額のことなら聞かないでくれ、計算したくない
最近はHacker's Delightって本買ったのが趣味でのC言語のための出費かな
ってかC言語のためにっての難しいな、趣味(と仕事)のためのC言語だし
180デフォルトの名無しさん:2011/11/15(火) 02:45:57.07
大学の学費くらいかな
卒業してからはLSIC-86試食版が手に入るまでC言語は使わなかったな。
C++もボーランドのフリー版が出るまでは使わなかったし・・・
181デフォルトの名無しさん:2011/11/15(火) 02:48:19.60
趣味のC言語のために大学行くとは、世の中すごいやつがいるもんだな。
182デフォルトの名無しさん:2011/11/15(火) 03:04:53.37
彼女を作るために大学いくやつほどすごくないと思うな。
183デフォルトの名無しさん:2011/11/15(火) 03:10:34.88
あ、趣味でVisualStudio買ったんだった
Vista以降にしてからそのバージョンだと起動時になんか言われるようになったから新しいの買おうかとも思ってるところ
184デフォルトの名無しさん:2011/11/15(火) 03:15:25.05
趣味といっても、人生とか命とか全力でかけている奴もいる(というかむしろ多い)から
何?カジノで20億とか使ったという馬鹿は?こいつのせいで社員何人辞めることになるんだよ
185デフォルトの名無しさん:2011/11/15(火) 03:20:06.86
主にCが絡んでる出費だと本が5万くらいで、ソフト(ライセンス)はMSDNぐらいかなぁ。
PC代は含めていいのか分からず。
最近は仮想化でいろいろ楽できるからいいなとおもう。
もしかすると本はもう少しかかってるかも。
186デフォルトの名無しさん:2011/11/15(火) 03:20:44.47
>>183
管理者権限で起動しないとデバッガが動かない
187デフォルトの名無しさん:2011/11/15(火) 03:22:22.62
大体趣味にいくら金をかけたかを計算したくないなんて思うようになったらそれはもう趣味じゃないよ。
興味がうせかけてる。
188デフォルトの名無しさん:2011/11/15(火) 03:23:38.29
VSって10万ぐらいするんじゃありませんでした?
安く買える学生のうちに買っておいた方がいいですかね
189デフォルトの名無しさん:2011/11/15(火) 03:24:48.39
VSも種類があるから一概に言えないんだけど、とりあえず5万くらいからで。
でもとりあえずはExpressから使えばいいと思うよ。
190デフォルトの名無しさん:2011/11/15(火) 03:25:40.12
って、学生ならなんかもっと太っ腹なことやってなかったかな。
開発用OSライセンス含めて無料ってやつ。興味があるなら探してみ
191デフォルトの名無しさん:2011/11/15(火) 03:45:17.87
「いくら金かけたか計算したくない」ってのは、そんだけ金かけちゃったんだぜーwっていう自慢含みだろ
文字通りにしか解釈できないとか、アスペもいいとこ
192デフォルトの名無しさん:2011/11/15(火) 03:58:19.30
>>186
あれ?トレースデバッグとかできたような

>>187
ゲームにも結構な金突っ込んでるけどまだ飽きてないよ
そもそも金勘定嫌いな人なんで
193デフォルトの名無しさん:2011/11/15(火) 04:47:42.93
総額?やめてくれよーwww
いっぱい使ってるから計算したくないんだよーってか計算嫌いだしwいっぱい使ってるけどねw
194デフォルトの名無しさん:2011/11/15(火) 08:00:08.82
C言語なら本4冊程度。
VCとなると・・・ソフト代+5000円超えの本が6冊ぐらいかな。
195デフォルトの名無しさん:2011/11/15(火) 08:35:32.59
学生ライセンスって卒業しても使ったらFBIが来てライセンス違反だ金を払えってなるんでしょ
196デフォルトの名無しさん:2011/11/15(火) 09:19:10.78
そういえば、VS2005 だけど事情により管理者権限で動かしてないんだよな
今のところ実害ないけど(デバッグも普通にできてる)、何が動かないんだろう?
197デフォルトの名無しさん:2011/11/15(火) 09:25:06.98
趣味っていうか、道楽だろ
198デフォルトの名無しさん:2011/11/15(火) 10:28:13.99
うん
199デフォルトの名無しさん:2011/11/15(火) 12:00:20.67
int n;
200デフォルトの名無しさん:2011/11/15(火) 12:04:12.87
>>195
卒業しても使用していいってMSが言ってたはず
あと昔は学校関係者じゃなくて、学生限定の激安(5000円弱)のもあった

でも今はタダで使えるExpressがあるからなぁ
ホビー用途ならこれで十分じゃね
201デフォルトの名無しさん:2011/11/15(火) 13:12:54.45
あれ、デバッガのための権限だったように思うけど、流れみてるとどうも違うっぽいのかな
ウソ情報すみませぬ
202デフォルトの名無しさん:2011/11/15(火) 21:19:44.24
基本的に購入厨って仕事していて金持ちの人多いよな。
俺は学生で割厨だから、金かけてパソコン勉強してる人見るとリッチだなと思う。
203デフォルトの名無しさん:2011/11/15(火) 21:28:46.31
C言語ってオブジェクト指向が理解できない人がやる初心者向けの言語ですか?
204デフォルトの名無しさん:2011/11/15(火) 21:30:13.43
オブジェクト指向言語を使わなくてもオブジェクト指向プログラミングができる人が使う言語
205デフォルトの名無しさん:2011/11/15(火) 21:31:37.02
工業高校出身でC言語習った奴っている?どんな感じだった?
206デフォルトの名無しさん:2011/11/15(火) 21:34:21.25
卓球部だったけど、何で

コンピュータ部=BASIC
学科の授業=C言語

がデフォなんだろ・・
逆はない気がする。
207デフォルトの名無しさん:2011/11/15(火) 21:53:08.09
いや、コンピュータ部で BASIC が全盛だった時期と、
学科で C が全盛だった時期にはタイムラグがあるだろ。
208デフォルトの名無しさん:2011/11/15(火) 21:55:01.90
>>203
まさに、おまえさん向きということか
209デフォルトの名無しさん:2011/11/15(火) 21:58:07.34
>>203
主人公の成長に合わせて育つ言語
210 ◆QZaw55cn4c :2011/11/15(火) 22:00:16.31
>>207
C の教科書が出始めたのは 1987年ごろだったかな。そのころは確か 8bit 機に統一OSの動きがあったかと。(S-OS"Sword" http://www.retropc.net/ohishi/s-os/)
211デフォルトの名無しさん:2011/11/15(火) 22:11:21.92
>>206
それは表面しか見ていない論評だ
コン部の BASIC はマシン語ランチャ
212デフォルトの名無しさん:2011/11/15(火) 22:18:27.82
sinxの式をテーラー展開で実装するプログラム作ってください。
どうなりますか?出力は16桁のfloat型でお願いします。

213デフォルトの名無しさん:2011/11/15(火) 22:50:05.41
>>205
ポケコンのリセットボタンを乗っ取って、
試験のとき押されてもダミーを表示する感じだった。
214デフォルトの名無しさん:2011/11/16(水) 01:05:09.55
おまえらC言語でどのくらい稼いでるの?プログラミングのバイトとかあるんだろ?
215デフォルトの名無しさん:2011/11/16(水) 01:14:17.33
Cでプログラミングのバイトってあんまなくね?
web系ならたくさんあるけど
216デフォルトの名無しさん:2011/11/16(水) 01:15:47.98
わざわざC言語を使うような仕事にバイトをあてるとか
金をドブに捨てるようなもんだ
217デフォルトの名無しさん:2011/11/16(水) 01:46:27.06
>>212
floatに16桁も精度はない。
218デフォルトの名無しさん:2011/11/16(水) 01:58:45.77
>>216
そうなんだけど、中国に出しちゃったりするんだよね。あれもドブ
219デフォルトの名無しさん:2011/11/16(水) 02:38:20.22
これからプログラミングを勉強しようと思って,今話題のC#から始めようと思ったんですが,
大学の友達に,C言語がまず基本だからCからやれというようなことを言われたんですけど,C言語からやった方がいいですかね?
いきなりC#をやるのは算数やらずに数学やるようなもの?
220デフォルトの名無しさん:2011/11/16(水) 02:51:26.77
どちらがいいともいえない。
とりあえず両方手を付けてみて、続けられそうなほうをがんばればいいよ。
とっかかりはどちらも覚えることが多くて大変だろうけどね。

ちなみに最後の例えは、
πを3.14と覚えればそれでいい算数(C#)と
πをどうやって求めるかを学ぶ数学(C)の
どちらから始めるかって言うこともできるので。
221デフォルトの名無しさん:2011/11/16(水) 05:07:10.62
なるほど.より本質的な理解をするために,まずC言語をやる必要がある,ということですね.
とりあえずC言語一通りやってからC#をやってみようと思います.ありがとうございます.
222デフォルトの名無しさん:2011/11/16(水) 05:10:18.64
C#でやりたいことが決まってるなら、最初からそっちをやったほうがいい
223デフォルトの名無しさん:2011/11/16(水) 06:56:28.70
どのくらいC言語できたらプログラマで食っていけるの?
224デフォルトの名無しさん:2011/11/16(水) 07:12:53.47
一概にはいえない。他のスキルとかの兼ね合いしだい。
C言語のスキルだけで食っていけるという話なら、
自分でコンパイラ作っちゃえるぐらいのレベル。
225デフォルトの名無しさん:2011/11/16(水) 07:40:17.69
>>224
コンパイラだって純粋なC言語のスキルだけじゃ作れないだろうがw
226デフォルトの名無しさん:2011/11/16(水) 10:21:32.43
どっちを先に覚えても、他方を覚えるときに役に立つよ。
227片山博文MZ:2011/11/16(水) 10:27:08.46
ふふふ、諸君はわたくしに勝てるかな。。。
228デフォルトの名無しさん:2011/11/16(水) 15:59:57.39
ぐぐって出てくるほとんどのアルゴリズムなどのソースはC
それらを書かなくても最低限のものが最初から用意されてるのがC#
229デフォルトの名無しさん:2011/11/16(水) 16:00:52.78
基本を学んで色々な料理を上手に作れる料理人と
チェーン店で定型レシピの料理を上手に作れる料理人
どちらも本人次第で運が良ければもうかる
230デフォルトの名無しさん:2011/11/16(水) 16:38:29.56
福島汚染野菜を平気で人に食わせられる腐った根性を持ってれば料理が微妙でも儲かる
231デフォルトの名無しさん:2011/11/16(水) 17:10:30.53
>>228
しかしC#で用意されていないものを作ろうとしたとき、Cで書かれたアルゴリズムを参照することになる
232デフォルトの名無しさん:2011/11/16(水) 17:23:16.22
あるものを使えということ自体は間違っていないが
もっといいものを作る気がないやつの来るところではない
233デフォルトの名無しさん:2011/11/16(水) 17:30:29.70
コカコーラの秘伝の味に近づけるよう努力するのは無駄だということ
234デフォルトの名無しさん:2011/11/16(水) 19:13:29.79
まずアセンブラから覚えないと
何をやっても砂上の楼閣だよ。
235デフォルトの名無しさん:2011/11/16(水) 19:18:01.67
半田ごてからやり直せ
236デフォルトの名無しさん:2011/11/16(水) 19:30:41.70
>>231
それが必要になるくらいC#を使えるなら、
Cのコードもなんとか読めるくらいにはなってると思う。
237デフォルトの名無しさん:2011/11/16(水) 19:37:00.47
printf("%c\n",20,'*');
上の文の20って、どういう意味があるんですか?
238デフォルトの名無しさん:2011/11/16(水) 19:43:52.06
装置制御4
239デフォルトの名無しさん:2011/11/16(水) 19:47:24.98
>>237
>上の文の20って、どういう意味があるんですか?
10進数の20です。

第一引数の%cに20が対応しているので、ASCIIコード20が表示されますね。
表示できるキャラクタかしら?

それより第3引数は対応する変換器号がないから、どこかコードがおかしくないかな?
240デフォルトの名無しさん:2011/11/16(水) 19:54:14.37
printf("%*c",20,'*');
じゃないの?
241デフォルトの名無しさん:2011/11/16(水) 20:14:02.89
>>240
そうです、書き間違えしてしまいスミマセン。
これを出力すると、20文字分スペースが開いて*が出力されるのですが、
出力桁数を変えるには、%cの部分に20を書かなければならないと習ったので、この20はどういう意味なのだろう?
と思い質問させていただきました。
追記申し訳ないです
242デフォルトの名無しさん:2011/11/16(水) 20:28:32.17
243デフォルトの名無しさん:2011/11/16(水) 20:33:08.30
>>242
なるほど、*を付けると次の引数分スペースを開けて出力という意味になるのですか
ありがとうございました。
244デフォルトの名無しさん:2011/11/16(水) 20:35:38.91
えっ?
245デフォルトの名無しさん:2011/11/16(水) 20:38:25.57
えっ?
246デフォルトの名無しさん:2011/11/17(木) 01:12:11.38
FFTのプログラムなんですが、実行するとSegmentation faultになってしまいます。
どこが原因なんでしょうか?

http://codepad.org/Sm40ZyMW
247デフォルトの名無しさん:2011/11/17(木) 01:16:08.82
デバッガ使ってないの?
248デフォルトの名無しさん:2011/11/17(木) 01:26:37.88
>>246
>fscanf(fpr,"%d",d);

fscanf(fpr,"%d",&d);

これじゃね?
ぱっと見だけでまじめに読んでないけど。

249デフォルトの名無しさん:2011/11/17(木) 01:35:04.82
>>247
gdbを使おうとしたのですが、まだ良く分かっていなくて…

>>248
それでした!完全に見落としてました。
ありがとうございました。
250デフォルトの名無しさん:2011/11/17(木) 01:36:35.19
俺Cはよく知らないんだけど、double sin(),cos();ってどういう意味なの?
251デフォルトの名無しさん:2011/11/17(木) 02:04:35.99
double型変数sinとcosを0で初期化する
252デフォルトの名無しさん:2011/11/17(木) 02:24:03.14
ありがと。
253デフォルトの名無しさん:2011/11/17(木) 02:29:28.94
いやいやいやいやw
254デフォルトの名無しさん:2011/11/17(木) 04:51:33.27
プロトタイプ宣言
255デフォルトの名無しさん:2011/11/17(木) 04:54:24.86
>>250
昔の流儀で、プロトタイプ宣言の代わりに自前で関数を宣言している。
今なら、#include <math.h>で事が足りる。
256デフォルトの名無しさん:2011/11/17(木) 13:32:18.44
>>251
あほw
257デフォルトの名無しさん:2011/11/17(木) 13:42:35.10
引数なしのsin cos関数ってこと?
258デフォルトの名無しさん:2011/11/17(木) 14:39:47.81
古のK&Rではコール側がお掃除する前提だから引数プロトタイプなんて飾りなんだよ
259デフォルトの名無しさん:2011/11/17(木) 18:06:48.93
>>258
(・∀・)ニヤニヤ
260デフォルトの名無しさん:2011/11/17(木) 18:07:29.88
>>258
アホすぐる
261デフォルトの名無しさん:2011/11/17(木) 18:18:37.91
すみません
関数の中にある、変数宣言や代入、他の関数の呼び出し、IF文など、まとめてなんと呼ぶんでしょうか?
ステートメントと呼んでいる文献もありましたが入門書だと触れてないのが多くて困っています。
名前なんてどうでもいいという意見もあるかも知れませんが・・・。
262 ◆QZaw55cn4c :2011/11/17(木) 18:25:52.70
>>258
cdecl なら今でも。あと、構造体をもらったり返したりするようになってからは、やっぱりいるんじゃないかな。
263デフォルトの名無しさん:2011/11/17(木) 18:33:18.49
>>261
ステートメントか文でいいよ
264デフォルトの名無しさん:2011/11/17(木) 19:17:07.14
>>261
入門書にイラつけるようになったら規格票買え
265デフォルトの名無しさん:2011/11/17(木) 19:41:24.36
実数型変数で、指数部を符号なし整数として
オフセットを用いて表現するにはどうすればいいですか?
266デフォルトの名無しさん:2011/11/17(木) 20:23:35.89
Cなら

return 2;
printf("d");

はOKだけど

javaだと

return 2;
println(3);

だとエラーがでる?

これはプログラミング言語のコンパイラ及び実行マシンのどのような
性質によるものか?

レポートの問題なんですが良く分かりません。
267デフォルトの名無しさん:2011/11/17(木) 20:25:40.60
つまり何故Cではreturnの後に処理がかけるのかっていうことです。
268デフォルトの名無しさん:2011/11/17(木) 20:28:46.47
無限ループの後に、returnがあってもいいよね?
269デフォルトの名無しさん:2011/11/17(木) 20:42:23.13
本当に「レポートの」問題だな
「OKだけど」とあるが、そのあと二重質問で「エラーが出る」のはなぜかになっている
270デフォルトの名無しさん:2011/11/17(木) 20:46:44.64
>>266
単純にそういう言語仕様だからってだけのような気がするけど、なんか深い理由でもあんのかね。
javaのほうが後発だからチェックが厳しくなってるとか。
271266:2011/11/17(木) 21:09:21.88
>>269
嘘ついてすいませんw
自分が疑問に思った質問ですww


レポートと言ったら皆はりきってやってくれるかとおもいましたw
272デフォルトの名無しさん:2011/11/17(木) 21:11:08.08
Cなら警告だね。まぁgotoで飛べるし、構文上も問題ないし余計なことは
しないっつーポリシーだからじゃね?
Javaだとエラー扱いなのか?
273デフォルトの名無しさん:2011/11/17(木) 21:21:37.35
javaだとエラーなの?
暫定的に処理を打ち切りたいときとかめんどくさそうだね
274デフォルトの名無しさん:2011/11/17(木) 21:25:54.19
苦Cが書籍化されたの今日本屋で見つけた
内容はwebとまったく同じだった
275デフォルトの名無しさん:2011/11/17(木) 21:30:41.91
unreachable statementってエラー
276デフォルトの名無しさん:2011/11/17(木) 22:41:43.11
ひどいな。Java。
277デフォルトの名無しさん:2011/11/17(木) 22:54:01.00
失礼します。
K&Rにしたがって以下のようなコードをコンパイルしました。
#include <stdio.h>
main(){
int c;

while( (c = getchar()) != EOF )
putchar(c);
}

実行したところ、入力した文字列はコピーされたのですが、その後入力待ち状態になります。
いろいろと実験したところ、getchar関数で最後に読み込まれている文字は'\n'のようで、
while文の条件式を(c = getchar()) != '\n'に変えると文字列コピー後プログラムが終了しました。
どうしてこのようにテキストと違う結果になるのでしょうか?
よろしくおねがいします。
278デフォルトの名無しさん:2011/11/17(木) 22:55:12.98
>>277
君がそういう環境でやっているからだよ。
279デフォルトの名無しさん:2011/11/17(木) 23:01:24.83
>>278
それはK&Rの想定するマシンでは最後に読み込まれるのはEOFだけれど、
自分のマシンでは\nになってしまっているためにwhile文が無限ループになっているという解釈で
良いのでしょうか?
280デフォルトの名無しさん:2011/11/17(木) 23:04:07.92
>>277
DOSのときは、Ctrl-ZでEOFが入力できたから、windowsでも同じなんじゃないの?
unix系は知らないけどEOFを入力する方法があるはず。
281デフォルトの名無しさん:2011/11/17(木) 23:23:48.56
RUBY参考書の文字列の所読んでたら、正則表現っていう言葉が出てきたんだけど
正規表現とか正則表現ってどういう意味ですか?

プログラムではなく言語の一般的な概念らしいけどどういうことですか?
掻い摘んで教えてください。
282デフォルトの名無しさん:2011/11/17(木) 23:44:11.03
>>277
unix系なら ^D で入力おしまい。
283デフォルトの名無しさん:2011/11/17(木) 23:45:28.61
284デフォルトの名無しさん:2011/11/17(木) 23:46:39.09
>>279
お前、Enterキーを押してないか?
285デフォルトの名無しさん:2011/11/17(木) 23:58:03.08
>>284
押してますが・・・
わざわざEOFを>>280>>282のように手でEOFを入力しないといけなかったんですか?
てっきり自動的にEOFが最後に読み込まれるのかと思ってましたが・・・
286デフォルトの名無しさん:2011/11/18(金) 00:02:57.81
>>285
標準入力から入ってくるものは改行も含めて全部読むんだよ。
だから改行を入力したらgetchar()は'\n'を返す。
何も読めるものがなくなったらEOFを返して終わりだって事を示すの。
287デフォルトの名無しさん:2011/11/18(金) 00:10:57.82
だから標準入力なら自分でEOFを入力するんですね。
みなさん長々とありがとうございました。
288デフォルトの名無しさん:2011/11/18(金) 00:16:28.45
EOFを入力するんじゃなくて、特定の操作で入力を終わりにするんだよ。
そうしたらgetchar()はもう終わりだよという意味でEOFを返すの。

標準入力がファイルに繋がってる場合なら、getchar()を繰り返せば
ファイルの中身が「終わり」まで全部読めるわけ。
最初の1行だけとかじゃなくてね。
289デフォルトの名無しさん:2011/11/18(金) 00:21:25.14
なるほど
上のCtrl+DなどはEOFという値ではなく、「入力終わり」を示してるってことですね?
理解が遅くて申し訳ないです。
290デフォルトの名無しさん:2011/11/18(金) 01:53:56.15
いやいや、勘のいい方だと思うよ。
中には「EOFを入力する」なんて言い張るのもいるからね。
291デフォルトの名無しさん:2011/11/18(金) 03:12:08.11
ファイルにEOFを入力したいんだけど、どうしたらいい?
292デフォルトの名無しさん:2011/11/18(金) 03:35:14.50
>>291
ネタはいいから。
293デフォルトの名無しさん:2011/11/18(金) 08:19:52.62
閉じればいいと思うよ
294デフォルトの名無しさん:2011/11/18(金) 09:33:42.86
ファイルにEOFを入力する方法はないの?
UNIXの場合なら、^D、DOSの場合なら^Zを
データとしてコンソールから入力したい時、
どうするの?
295デフォルトの名無しさん:2011/11/18(金) 09:54:09.09
^Dや^Zを打てばいいだけだ。
296デフォルトの名無しさん:2011/11/18(金) 10:06:03.96
scanf 関数で文字列を読み込む際、&が必要でない理由ってなに?
297デフォルトの名無しさん:2011/11/18(金) 10:22:00.59
>>294
どうしても必要なら、unix系はsttyコマンドでeofを別の文字に割り当てられるけど、
エディタで予め作っておいた方がいいんじゃね?

298デフォルトの名無しさん:2011/11/18(金) 10:25:18.35
>>294
ファイル内にEOFを書くためには
ファイルシステムから選びなおさないとダメだよ
FAT とか NTFS とか ext2 ext3 なんかはダメだね
299デフォルトの名無しさん:2011/11/18(金) 10:52:57.80
>>296
配列の場合、随所でCが勝手にポインタ型に変換するから。
char s[]; の場合、sと書くと、ほとんどの場所で自動的に &s[0] に変換される。
300デフォルトの名無しさん:2011/11/18(金) 12:56:57.71
wchar_tっていうのは文字列を対象としたアルゴリズムを書くのが楽だから存在してるんですか?
301デフォルトの名無しさん:2011/11/18(金) 16:36:07.36
>>300
何も言わずにTCHARでググれ。
そして何も考えずに一番互換性のある文字型を使え。
302デフォルトの名無しさん:2011/11/18(金) 16:47:59.36
TCHARなんてWindowsの世界に引きこもる時しか使えないし、
それが何なのか理解してないと混乱するばかりだと思うけど。
303デフォルトの名無しさん:2011/11/18(金) 18:48:25.08
「ワイド文字」と「マルチバイト文字」でググった方が収穫が大きいと思う
304デフォルトの名無しさん:2011/11/18(金) 19:36:37.56
>>296
scanf()が欲しいのはデータを格納する先であり、変数の中身ではない。
だから殆どのものは変数名に&をつけ、変数の中身ではなく、場所をscanf()に教えている。
(つけないとそれはただの「式」であり、結果として変数の「中身」を渡してしまうことになる)

でも、文字列を読み込むときに与えるのは配列名。
[添字]を後ろにつけずに配列名だけ書いた場合、
それが意味するのは配列の内容ではなく「配列のデータを格納している場所」そのものだからね。
場所を与えているのだから、書かなくて正解なのよ。
305デフォルトの名無しさん:2011/11/18(金) 19:42:20.59
utf8のファイルを読み込んで
そのまま出力したらバグるのはなんで?
306デフォルトの名無しさん:2011/11/18(金) 19:43:32.23
>>305
ターミナルの設定ができてないから
307デフォルトの名無しさん:2011/11/18(金) 19:44:44.27
環境を言わないと
308デフォルトの名無しさん:2011/11/18(金) 21:08:26.05
char A[10];

for(i=0; i<10; i++)
{

for(j=0; j<10)A[j]=

}


forの中のforみたいに箱入り娘になってるA[]が

二重forを抜けたら元々のAに戻ってるのですが何故ですか?
二重forによって得られたAが欲しいのに二重forを抜けたら
その得られたAじゃない。
309デフォルトの名無しさん:2011/11/18(金) 21:10:09.74
何を言ってるかわからない
310デフォルトの名無しさん:2011/11/18(金) 21:13:14.52
>>308
省略せずにソース全部書かないと、意味不明
311308:2011/11/18(金) 21:46:22.88
#include<stdio.h>
#include<string.h>
int main(void)
{
char C[10]; int i,j;
for(i=0; i<10; i++)
{
char G[10]; sprintf(G,"%d",1234);
for(j=0; j<10; j++){C[i]=G[j];printf("%c\n",C[i]);}
}
printf("C=%s",C);
}
何故か配列の値がforを抜けると変わっているという・・・ わけがわかりません。
312308:2011/11/18(金) 21:48:44.60
#include<stdio.h>
#include<string.h>
int main(void)
{
char C[10]; int i,j;
for(i=0; i<10; i++)
{
char G[10]; sprintf(G,"%d",1234);
for(j=0; j<10; j++){C[i]=G[i];printf("%c\n",C[i]);}
}
printf("C=%s",C);
}

訂正しました。 j→i 下から4行目
313デフォルトの名無しさん:2011/11/18(金) 21:50:37.10
>>311
途中で NUL文字が入るから
314デフォルトの名無しさん:2011/11/18(金) 21:56:59.39
>>312
それ、Cに"1234"って文字列が入る動作だけど、どう動いて欲しいの?
315デフォルトの名無しさん:2011/11/18(金) 22:06:30.22
意味が分からんな。j のループ内で j 使ってないし。
C[0]=G[0] を10回実行して何がしたいんだ
「どうなってほしいのに」「こうなってしまう」って具体的に書いてくれ
316デフォルトの名無しさん:2011/11/18(金) 22:11:31.07
>>311-312
http://codepad.org/lVZY9Y7D

正しく動いてると思うけど?
317308:2011/11/18(金) 22:26:27.93
それと、%cで一つずつ表示しようとすると、全部表示されるのに
例えば strが abc re tみたいなのだと、 %cで表示しようとすると
abc re tと出ますが

%s表示だと何も表示されません?何故ですか?

for(i){printf("%c",str[i])};←表示される

printf("%s",str);←表示されない

318デフォルトの名無しさん:2011/11/18(金) 22:33:08.59
まあ、なんていやらしい><
319デフォルトの名無しさん:2011/11/18(金) 22:35:20.18
>>317
えろいマーク書く前に落ちついて。
ちゃんとでるよ
320308:2011/11/18(金) 22:36:26.91
>>316
すいません・・・
結局>>317につきました・・・
321デフォルトの名無しさん:2011/11/18(金) 22:38:29.11
せめて日本語で書け。
322デフォルトの名無しさん:2011/11/18(金) 22:39:55.71
http://codepad.org/Q8UjVj0k

%c で一文字ずつ表示しようが %sで表示しようが、ちゃんと動いてるよね。
>>308はいったいどこでC言語を学んだんだ。
もし入門書とかで勉強したなら、変な入門書は窓から投げ捨てろ。
323308:2011/11/18(金) 22:41:00.29
表示されないんですが・・・

何故でしょう?

forの二重の前にchar Aと宣言してるんです。

二重の中でAに文字が代入されて

さぁprintf("A=%s",A);とするとA=    となるんです。
でもfor(i=0; i<10; i++)printf("%c",A[i])とすると、
abc re とでます。
何故でしょう?
string.hはちゃんとヘッダで読み込んでます。
324デフォルトの名無しさん:2011/11/18(金) 22:43:19.67
K&R第二版以外の本で勉強するからそんなことになるんだよ。
325308:2011/11/18(金) 22:48:20.65
#include<stdio.h>
#include<string.h>
int main(void)
{

char A[10];

A[0]='S';


printf("%s",A);

}

の場合はちゃんとSがでました。\0を入れてないから文字化けした部分はありますが。
326デフォルトの名無しさん:2011/11/18(金) 22:50:13.18
>>323
Aは初期化してるの?
変数は宣言したら初期化しておかないと変なバグを生み出す可能性があるよ。

いったい何がやりたいんだろう?
327デフォルトの名無しさん:2011/11/18(金) 22:50:41.21
string.hいらない
%sで文字列出力するとき、最後に改行入れてみ
328デフォルトの名無しさん:2011/11/18(金) 22:54:06.37
末端が \0 で終わって無くて
ごみ中の CR を受けて表示端末行頭に戻って
(でも LF居ないので次の行にいかず)
続く文字が非表示可能文字かスペースで消された
なんてことはないよな?

リダイレクトしてファイルに出力:バイナリエディタで確認すりゃわかるかもしれないが
329デフォルトの名無しさん:2011/11/18(金) 22:56:59.86
それが起こりうる状況を提示できるならその可能性があるといってもいいが、ないよね。
330デフォルトの名無しさん:2011/11/18(金) 23:00:25.71
いったい何がしたいんだ?
表示されないと言っているが、どう表示してほしいんだ?
デバッグしてやるからソース全文さらせ。
331308:2011/11/18(金) 23:06:32.17
>>328
あ、その可能性かもしれません。
ちょっと調べます。
332デフォルトの名無しさん:2011/11/18(金) 23:14:45.63
>>290
遅くなりましたがありがとうございました
いろいろとつながりました
333308:2011/11/19(土) 13:08:41.13
>>308
その可能性ありでした。
ありがとうございました。
334デフォルトの名無しさん:2011/11/19(土) 14:23:08.98
ダメだこりゃ。
335デフォルトの名無しさん:2011/11/19(土) 16:35:04.56
基本的にシステムコールだけ(fopenなどではなくopenなど)を使ってUNIXでいう"cat -n"の単純機能を実装しようとしています。

しかしバッファを1バイトずつ読んでいって"\n"があったらその場所に行番号をfprintfで追加していくようにしても、
ファイルの中身が最終行まで全部出力された後に、行番号がまとめて出力されてしまいます。。。

ファイルをreadした後は、writeとcloseが実行されるまで、fprintfの中身の出力は追加できないのでしょうか?
どなたか詳しい方、教えていただけませんか?
336 ◆QZaw55cn4c :2011/11/19(土) 16:38:16.22
337335:2011/11/19(土) 16:52:32.70
>>336
あんたが ネ申 ですか

すげぇ・・・すげぇよ・・・俺の10時間は何処へいった
338デフォルトの名無しさん:2011/11/19(土) 17:10:39.43
>>335
>行番号をfprintfで追加して

行の本体も、その時に編集すればいいのに。
339335:2011/11/19(土) 17:42:58.92
>>338
それってバッファ自体を変更するってことですか?
そんなの可能なんでしょうか・・・?
340デフォルトの名無しさん:2011/11/19(土) 17:57:35.36
#include <stdio.h>
void print_array(int size,int *a[]);

int main(void){
int b[3];
print_array(3,&b);
printf("%d",b[0]);
printf("%d",b[1]);
return 0;
}
void print_array(int size,int *a[]){
int i;

for(i=0;i<size; ++i){
*a[i]=1;
}
}

ユーザ関数内で得たものを配列に入れて返したいのですが
上のプログラムだとコンパイルすると
警告 W8075 a.c 8: 問題のあるポインタの変換(関数 main )
と出て実行すると停止してしまいます。
どうすればよいのでしょうか?
341 ◆QZaw55cn4c :2011/11/19(土) 18:02:56.28
342デフォルトの名無しさん:2011/11/19(土) 18:15:01.91
>>341
&bをbにすれば良かったんですね!ありがとうございます。
ちなみにどうしてただの変数を返す時と違って配列では&を使ってはいけないのでしょうか?
343デフォルトの名無しさん:2011/11/19(土) 18:28:03.54
これはCの宣言を解析するコードなんですが、
ttp://codepad.org/FXbWcoKj
読みにくいので
ttp://codepad.org/pnBO3znk
このように書き換えましたが、多次元配列を解析する場合、入力と出力される型が
異なります。三項演算子からif文に直している部分の直し方が多分変だと思うのですが、
バグの原因が分かる人おられますか。
344デフォルトの名無しさん:2011/11/19(土) 18:32:45.83
>>342
配列の場合、配列名自体が先頭アドレスを指しているので
&b[0]と同じ意味を持つからです。
345デフォルトの名無しさん:2011/11/19(土) 18:41:32.88
>>340
これで型の整合性は合うんじゃないかな?
可変長配列をサポートしていなければ、int (*a)[3]にしないといけないけどね。

#include <stdio.h>

void print_array(int size,int (*a)[size]){
int i;

for(i=0;i<size; ++i){
(*a)[i]=1;
}
}

int main(void){
int b[3];
print_array(3,&b);
printf("%d",b[0]);
printf("%d",b[1]);
return 0;
}
346デフォルトの名無しさん:2011/11/19(土) 18:59:26.15
b を 3 で宣言してるのに可変長で渡す意味は皆無
しかもプロトタイプ逃げてるし
憶えたての厨二コードだな
347デフォルトの名無しさん:2011/11/19(土) 19:25:44.49
>343
ちゃんと確認していないが、D()の中のwhile()の条件を関数外出しとかしてから、綺麗にしてみたら?
パッと見、
Wが40の時に return (t(0),printf("func returning "),t(41));
Wが91 && t(0)==32 の時に return (printf("array[0..%d] of ",atoi(X)-1),t(0));
Wが91 && t(0)!=32 の時に return (printf("array of "),t(93));
それ以外 return 0;
だろ?
348デフォルトの名無しさん:2011/11/19(土) 19:51:37.43
int *a[]って何を渡すんですか?
349335:2011/11/19(土) 20:17:20.05
すいません、質問させて下さい。

先ほど同様、基本的にシステムコールだけ(fopenなどではなくopenなど)を使ってUNIXでいう"cat"コマンドのように
ファイル名・開始行・終了行を指定してやると、ファイルの内容(行番号付き)が指定した開始行から終了行までのみ表示されるような
プログラムを実装しようとしています。

しかし行番号は指定した通りになるのですが、肝心のファイルの内容が指定した行の通りに出力されません。
どうしたらいいのでしょうか?どなたか教えて戴きたいです。

現時点のコードは以下の通りです.
http://codepad.org/U8HzseFI
350デフォルトの名無しさん:2011/11/19(土) 20:39:25.27
肝心のファイルの内容
を printf なり汁w
351デフォルトの名無しさん:2011/11/19(土) 20:46:13.30
つーか、ファイルの中身をwrite()で出力するのに行番号だけprintf()するってのが間抜けすぎるんだけど、
なぜ低レベルI/Oを使うの?
352デフォルトの名無しさん:2011/11/19(土) 20:59:11.35
エディタのようなインタラクティブな動きをするんじゃなきゃ、
文字列出力に低レベル I/O を使う必要は無いと思うんだがな。
353335:2011/11/19(土) 21:08:51.86
>>350
いやもちろんwrite()やってるんで出力はされるんですが
たとえば

$ ./a.out test.txt 4 8

4 <01行目の内容>
5 <02行目の内容>
6 <03行目の内容>
7 <04行目の内容>
8 <05行目の内容>

みたいになるのです。
1バイトずつread()して、if文を使って指定行の範囲内でのみwrite()するようにしているのですが・・・。

readしたものをwriteしないまま再びreadをすると、次にwriteした時に、前回writeしなかったものもまとめてwriteされるという事でしょうか?
よく分からないのですが、これを解決するにはlseekとかを使えばいいのですか?

354335:2011/11/19(土) 21:09:34.04
>>351
低レベルIOでcat -nコマンドとその発展を実装するという課題だからです
355デフォルトの名無しさん:2011/11/19(土) 21:12:13.35
>>354
じゃあ sprintf 使って作った文字列を write したほうが早くね?
356335:2011/11/19(土) 21:31:23.87
すいません知識不足でよく分かりません。どういう事ですか?

read -> 改行を発見したらsprintfで行番号を追加 -> writeということでしょうか?
357デフォルトの名無しさん:2011/11/19(土) 21:31:42.12
>>355
俺もそれ知りたい

kwsk
358デフォルトの名無しさん:2011/11/19(土) 21:32:35.86
ってゆーか、指定の"4行目から"writeしてないだけじゃんw

行番号変数だけは指定の4から開始しているが、
無条件に1行目からwriteしてる
(んで、行番号が指定に達したら停止しているけど)
359デフォルトの名無しさん:2011/11/19(土) 21:34:45.83
sprintf(文字列格納領域, ...);
write( ,文字列格納領域, );
って話だよw
360デフォルトの名無しさん:2011/11/19(土) 21:52:26.46
問題点が三つある。
・行番号の数え方が間違っている
・read(), write()を使う課題でprintf()を使っている
・改行文字のみならず復帰文字まで改行と扱っている
361デフォルトの名無しさん:2011/11/19(土) 21:54:17.86
>>360
・readしたものを全てwriteしないで該当行まで捨てるだけだな。
・本人がいいと思うのならいいんじゃね?
・本人が(ry
362デフォルトの名無しさん:2011/11/19(土) 21:59:16.40
うぜえ
363デフォルトの名無しさん:2011/11/19(土) 22:05:41.60
C言語の方からプロンプトの設定を指定することはできないんですか?
UTF-8のchar配列を出力して文字化けしないようにしたいのですが
そういうことはできなくて毎回shift-jisに変換しないとだめなのでしょうか?
364デフォルトの名無しさん:2011/11/19(土) 22:07:37.68
環境による。
つまり、C言語は関係ない。
365 ◆QZaw55cn4c :2011/11/19(土) 22:10:57.12
>>353
http://codepad.org/
read/write 系と stdio.h とを一緒に使わないのが近道
366335:2011/11/19(土) 22:12:27.43
>>358
oh... まさにその通りですね。。。
17行目でlinenumの初期値を1ではなく linenum = atoi(argv[2]); 
としてしまっていたせいでファイルの中身が最初から表示されてしまっていました。

今思うと明らかに意味不明なのに自分じゃ気づかないものですね・・・ご指摘本当にありがとうございます。。助かりました、。。
367335:2011/11/19(土) 22:19:26.75
>>360
・行番号の数え方が間違っている
→解決しました.ありがとうございます。

・read(), write()を使う課題でprintf()を使っている
→すいません、勉強不足なもので。。
fprintf(stdout, %d, x)でもやはりだめなのでしょうか?

・改行文字のみならず復帰文字まで改行と扱っている
→read()とwrite()で一文字ずつ読んでいった時の挙動が分からなかったのでとりあえず\rと\nと\r\nのどれが来ても改行
結果として改行が2回続いていても行番号が1つしか出力されないバグが出来ましたが・・・。
こちらもどうすればいいのかご存じでしたら教えて戴きたいです。
368デフォルトの名無しさん:2011/11/19(土) 22:29:50.65
>>367
>361も書いているけど、仕様の問題だから教えるもへったくれもないよ。
369 ◆QZaw55cn4c :2011/11/19(土) 22:48:42.34
370デフォルトの名無しさん:2011/11/19(土) 23:07:06.29
もうすぐ年号が変わりそうだね
忙しい時期に仕事が増える
371デフォルトの名無しさん:2011/11/20(日) 00:42:11.16
すんません
こんな感じで配列に何度も数字を入れなおしたら
メモリ消費とか酷くなりますか?

int a[50]
while(j=1000){
for(i=0;i<50;i++){
a[i]=i;
}
j++
}
372デフォルトの名無しさん:2011/11/20(日) 00:51:03.07
いえ、気にしなくていいです
373デフォルトの名無しさん:2011/11/20(日) 00:53:06.06
>>371
アセンブラでも少しは覚えたほうがいい
374デフォルトの名無しさん:2011/11/20(日) 00:53:17.90
>>371
ならない。
メモリアロケーションは int a[50] の分だけ。
何度読み書きしようとメモリ消費量が変動したりはしない。
375デフォルトの名無しさん:2011/11/20(日) 00:54:44.37
ただしエンドユーザーの神経がすり減り消費されます
376デフォルトの名無しさん:2011/11/20(日) 00:58:25.07
>>373
アセンブラの前に、
アセンブラはCPUを設計出来るようになってからやるべき
コンピュータの基礎が全くない奴がプログラムなんて作れない
377デフォルトの名無しさん:2011/11/20(日) 01:00:54.44
そんなことはない
378デフォルトの名無しさん:2011/11/20(日) 01:04:57.08
>>376
こいつ最高にバカ
379デフォルトの名無しさん:2011/11/20(日) 01:10:14.01
いま学校でverilogでCPU設計をやっているが
ようやくCPUが何をしているのか理解出来るようになった
マになった奴って学校でCPUの設計やらされたんじゃないのか
380デフォルトの名無しさん:2011/11/20(日) 01:20:04.46
まずは自作トランジスタからだな。
381デフォルトの名無しさん:2011/11/20(日) 01:20:55.71
CASL IIで十分だよ
とりあえずはね
382デフォルトの名無しさん:2011/11/20(日) 01:21:19.55
>>379
学校でやるレベルだとストップウォッチを作ってみましょうで終わるんじゃないの?
HDL か RTL か C 記述かで変わるんだろうけど
383デフォルトの名無しさん:2011/11/20(日) 01:26:43.53
研究者じゃあるまいし使えればいいじゃん
384 ◆QZaw55cn4c :2011/11/20(日) 01:32:01.20
>>379
kwsk! kwsk! kwsk!
385デフォルトの名無しさん:2011/11/20(日) 01:50:06.96
>>384
チャールズペゾルドのCODEって本読むといいよ
386デフォルトの名無しさん:2011/11/20(日) 01:54:04.12
Segmentation faultについて教えてください。
linux上でアプリケーションを作成しました。
シェルがプログラムAとプログラムBを呼び出します。

プログラムAがプログラムCをSYSTEMで呼び出します。

暫く実行すると、プログラムCがSegmentation faultかabortで終了します。
ただし、シェルで呼び出しているプログラムBをコメント化すると、Cが落ちることはなくなります。
プログラムBは単純に内部でSYSTEMコールで外部プログラムを起動するだけのものです。
(呼び出す外部プログラムは計算を行うPGですが、数秒で終了します。)

そもそも、Segmentation faultが、Cでのコードにより発生する要因として、
添え字の範囲外はmallocのfree忘れくらいしかないと思いますが、他になにかありますか?
387デフォルトの名無しさん:2011/11/20(日) 01:57:33.02
>>386
プログラムCが悪い
プログラムBは無実

プログラムCが無効なアドレスを読み書きしようとしているのが原因
388デフォルトの名無しさん:2011/11/20(日) 01:58:31.92
>>386
ファイル操作とかはないの?
389デフォルトの名無しさん:2011/11/20(日) 02:08:02.55
>>387
ところが、プログラムBの機能をプログラムAに入れると、
今度はプログラムAがSegmentation faultで落ちだします。
反面、Cが落ちることは何度か動かしましたが、確認していません。
Aに追加した場合、単純にSYSTEMコールを行うスレッドをループさせているだけなのですが。。。

>>388
ファイル操作はあります。
ただ、繰り返しでオープン、クローズを繰り返したりはないのですが。。。
書き込みファイルをオープンしたままで、プログラムCは書き込み続けます。

プログラムBはプロセスを大量に生成しますが、それは問題ないのでしょうか?
system()を使用し、同期させてますので、Bが同時に子プロセスを大量に作成することは無いし、
呼び出したプロセスが残ってる訳でもないのですが、
新しいプロセスを作るたびになにかしらの資源が消費されたりするのでしょうか?
前のプロセスは終了してるのもかかわらず。。。
390デフォルトの名無しさん:2011/11/20(日) 02:10:46.76
>>389
それならプログラムBとプログラムCの共犯だな
391 ◆QZaw55cn4c :2011/11/20(日) 02:18:46.24
>>385
petzold氏 って Windows 以外の本も書いてるんですねえ。(Programming Windows 3.1 以来ご無沙汰ですけどね)
でも、目次を見るかぎりは、CPU の作り方 http://www.amazon.co.jp/dp/4839909865/ のほうが面白そう。amazon の個人お勧めリストにもいろいろとあるようですけれども。

それはそうと、verlog でどのくらいの規模の cpu を書いてるんですか?kwsk! kwsk! kwsk!
392デフォルトの名無しさん:2011/11/20(日) 02:42:08.79
>>391
むしろどの規模なら書いたことあるの?
393 ◆QZaw55cn4c :2011/11/20(日) 05:21:04.97
>>392
cpu はない。xilinx/spartan3e/10万ゲートor2000ロジックのおもちゃで遊んだことなら。なんだかいろいろ積み上げていくうちに急に動かなくなってしまった記憶があります。
えーと、たぶんこれ:http://www.amazon.co.jp/dp/4789838617/
394デフォルトの名無しさん:2011/11/20(日) 06:40:10.06
調べるのに時間かかったか
395デフォルトの名無しさん:2011/11/20(日) 07:52:20.20
>>343
9行目
:w("array of "),t(93) の解釈がおかしい
t(93)がカンマ演算子でくっついてるのは直前のw("array of ")ではなく
t(0)==32?からの三項演算子式だ

だから>>343のでいうとt(93);はif (t(0) == 32){..}else{..}の後になる
396デフォルトの名無しさん:2011/11/20(日) 08:06:42.09
つうか、 Segmentation fault なら、
core 調べりゃどこで起きたかわかるっしょ。
それ調べずに憶測で話をしててもしょうがない。
397308:2011/11/20(日) 09:42:13.67
#include<stdio.h>
int main(void){
char x[10]; char y[10]; int i;sprintf(x,"%d",123);
for(i=0;i<10;i++)y[i]='\0';y[4]=x[0]; y[2]=x[1]; y[5]=x[2];
printf("%s",y);putchar('\n');
for(i=0; i<10; i++)printf("%c",y[i]);}
398308:2011/11/20(日) 09:44:40.59
実行結果
> 2 13
こうなります・・・何がまずいのでしょうか? 本当は
>2 13
>2 13
こうなって欲しいのですが・・・
399308:2011/11/20(日) 09:46:55.04
3行目の空白埋めました。
#include<stdio.h>
int main(void){
char x[10];char y[10];int i;sprintf(x,"%d",123);
for(i=0;i<10;i++)y[i]='\0';y[4]=x[0]; y[2]=x[1]; y[5]=x[2];
printf("%s",y);putchar('\n');
for(i=0; i<10; i++)printf("%c",y[i]);}
訂正しました・・どこが悪いのでしょうか?
400デフォルトの名無しさん:2011/11/20(日) 09:49:53.31
頭?
401デフォルトの名無しさん:2011/11/20(日) 09:50:06.61
>>394
Qは大嘘付きだからな
野田みたい
402デフォルトの名無しさん:2011/11/20(日) 10:00:53.28
>>399
スレの上のほうを見るのが面倒だから見てなくて、なにをやりたいのかいまいちわからないけどこんな感じ?
#include <stdio.h>
int main()
{
char x[10];
char y[10];
sprintf(x, "%d", 123);
y[0] = x[0];
y[1] = x[1];
y[2] = x[2];
y[3] = x[3];
printf("%s\n", x);
printf("%s\n", y);
return 0;
}
403デフォルトの名無しさん:2011/11/20(日) 10:12:52.26
すみません、初心者ですが
int main()

int main(void)
どちらでもいいんですか?
404デフォルトの名無しさん:2011/11/20(日) 10:17:31.43
下にするべし
405デフォルトの名無しさん:2011/11/20(日) 10:40:55.17
>>399
あのさぁ、printf("%s",y); ってしてるけど、y[0]に何が入ってるか理解してるよね?
y[0] == '\0' だからmainからprintfに入った時点で文字列は終端を迎えていると判断されるんだけど。
残りのy[1]からy[9]までは表示されないよ?

y[4]=x[0]; y[2]=x[1]; y[5]=x[2]; ではなく y[0]=x[1]; y[1]=x[0]; y[2]=x[2];
にしてみれば?
406デフォルトの名無しさん:2011/11/20(日) 11:02:43.69
>>403
どちらでもいいよ。
407デフォルトの名無しさん:2011/11/20(日) 11:14:51.26
>>403
Cの場合、main() は、引数があるのかもしれない(引数の個数は不定)
C++の場合、main() は、main(void)とおなじ(引数がない)
408デフォルトの名無しさん:2011/11/20(日) 12:12:49.11
>>404
>>406
>>407
ありがとうございます。
意味がわかるまではint main ()
にしときます。
409デフォルトの名無しさん:2011/11/20(日) 12:37:48.77
・・・
410デフォルトの名無しさん:2011/11/20(日) 12:51:42.27
意味がわかるまでは、省略しない書き方で覚えた方がいいと思った
411308:2011/11/20(日) 12:54:59.06
>>405
なるほど!!!'\0'の性質今やっと知りました・・
一応xとyの添え字の対応はランダムです。
ってことは,必要な所以外は' 'のスペースをいれておけばいいのですね。
ありがとうございます・・
412デフォルトの名無しさん:2011/11/20(日) 13:05:37.48
とりあえず、いつも実行可能な一式のソースコードを提示しつつ説明するQZの姿勢には、素直に感心する。
あと、初心者の質問に、わざわざ実ソースコードを書いて親身に説明するところも感心するし、尊敬もする。普通はめんどくさくてやらない。
QZは、普通に良コテになれる素質は十分にある。

とりあえず演技でもいいから、「俺は実はすごい人なんです。うふふ」的な演出を所々に挟むのは控えたほうがいい。
それだけで印象は大分変わる。
反感買いそうな憎まれ口的な要素を含んだ発言は、コテ外してやった方がいい。いつもコテ付ける正直者もいいけど、
その辺は要領良く使い分けようぜ…orz
413デフォルトの名無しさん:2011/11/20(日) 13:10:29.16
>>412
ちゃんとコテつけて書きこめよ、Q
414デフォルトの名無しさん:2011/11/20(日) 13:41:35.58
>>410
どうだろなあ。
CとC++の区別がハッキリ判るまでは省略形のが良い気がするけど。
415デフォルトの名無しさん:2011/11/20(日) 14:02:50.03
教わる・覚えるのは、CとC++のどっちかなんだから、
その言語の規定に従って記述すべき。
省略は、意味が分かってからでもできる。
416デフォルトの名無しさん:2011/11/20(日) 14:14:18.41
明示的に書くほうがどっちの言語にしろ良いんだからそれぐらいのタイプケチってどうする
417デフォルトの名無しさん:2011/11/20(日) 14:39:08.18
>>416
いや、ケチるんじゃなくて
たまたま動く誤った記法になり得る記法を続けるよりは
一応どっちでも正しく通る記法を使ったほうがよくね?
418デフォルトの名無しさん:2011/11/20(日) 14:43:04.55
auto i = begin( v );
よりも
std::vector< int >::iterator i = v.begin();
の方が明示的なので良い、と。
419 ◆QZaw55cn4c :2011/11/20(日) 15:06:39.90
>>407
それがC99 で変わった。
ISO/IEC 9899:1999 6.7.5.3.14
An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied

つまり、int main() { ... } のように、part of definition of that funcsion ――関数宣言と同時に関数の内容も同時に定義している場合には、
int main() は no parameters、すなわち int main(void) と同じ。
すなわち
>>406 が厳密にあてはまって、どちらでもいい。

>>401
せめてここまで記述できるぐらいにまで成長してほしいものですが、百年一日なんにも変わらないのは、もう obsolete ―精神的に干上がった―なのでしょうか?
420 ◆QZaw55cn4c :2011/11/20(日) 15:11:43.44
>>412
>「俺は実はすごい人なんです。うふふ」的な演出を所々に挟むのは控えたほうがいい。

そっかー。
身の丈でお話しているつもりで、そんな演出意図はぜんぜんないのですけれども、そうなってしまうのですか‥‥‥。
ちょっと考えていましたが、とりあえず >>336 の方針でやっていこうと思っています。
421デフォルトの名無しさん:2011/11/20(日) 15:23:47.64
C言語のコマンドプロンプトの実行結果を
いちいち下に表示していくんじゃなくてアニメーションみたいにするにはどうすればいいですか?
422デフォルトの名無しさん:2011/11/20(日) 15:26:32.95
>>412
無理だろ
Qは人格障害だから
423デフォルトの名無しさん:2011/11/20(日) 15:33:32.28
>>421
アニメーションと言うわけにはいかないけれど、改行文字の代わりに復帰文字を使ってはどうだろう。
424デフォルトの名無しさん:2011/11/20(日) 15:34:21.14
有償質問スレ立ててるのに良コテって
425デフォルトの名無しさん:2011/11/20(日) 15:38:24.24
>>412はバレバレの自作自演(ノ∀`)'`,、'`,、'`,、'`,、'`,、
426デフォルトの名無しさん:2011/11/20(日) 15:52:09.25
小学生未満の理解力で良コテとかねーよw
427デフォルトの名無しさん:2011/11/20(日) 15:54:22.94
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10007
ここの>ただし、この問題は以下に示すようにいくつかのデータセットが与えられることに注意して下さい。
に対する、関数が宣言できずに困ってます。
とりあえず,int k[20]; でつくって提出しましたWrong Answerになってしました。
提出したソース
#include <stdio.h>
int main()
{
int i,j,count;
int k[20];
i = 0;
count = 0;
while(1){
scanf("%d",&k[i]);
if(k[i] == 0)break;
i++;
count++;
}
for(j=0;j<count;j++)
printf("Case %d: %d\n",j+1,k[j]);
return 0;
}
428デフォルトの名無しさん:2011/11/20(日) 15:58:08.95
>>427
問題読んだ?
リンク間違い?
429デフォルトの名無しさん:2011/11/20(日) 15:58:42.56
430デフォルトの名無しさん:2011/11/20(日) 16:07:18.46
Cで指数関数を求めているのだが
小数第15位(double)くらいまで近時させるにはどういった計算をすべきだろう?
おしえてエロい人。
431デフォルトの名無しさん:2011/11/20(日) 16:10:47.42
>>429
一行単位で扱うようにして fgets
数値かどうか判定して sscanf
逐次出力 配列いらない
すればいいんじゃね?
432デフォルトの名無しさん:2011/11/20(日) 16:11:28.95
>>430
exp(x, y)
433デフォルトの名無しさん:2011/11/20(日) 16:15:22.31
>>432
すまんこ
説明不足だったライブラリ無しで作ってる
ちなみに今はe^x = 1 + Σ(x^n)/n!
これだと一つの項が大きくなりすぎて切り捨てられてしまう。
434デフォルトの名無しさん:2011/11/20(日) 16:21:48.82
>>430
int a[20];
1.23456789なら
a[0]=1;
a[1]=2;
とかやって、n倍、桁上がりを自分で実装か?
435デフォルトの名無しさん:2011/11/20(日) 16:31:51.88
>>421
まず用語の意味を正しく覚えよう。
436デフォルトの名無しさん:2011/11/20(日) 16:32:54.55
>>433
これで
有効桁数15桁じゃなくて常に小数点以下15桁が必要なら多倍長演算しないとダメ
#include <stdio.h>

double myexp2(int x, int n, double x_n_n)
{
if(x_n_n<1.0e-16) return 0.0;

return myexp2(x, n+1, x_n_n*x/n)+x_n_n;
}

double myexp(int x)
{
return myexp2(x, 1, 1.0);
}

int main(void)
{
printf("%.20f\n", myexp(5));

return 0;
}
437デフォルトの名無しさん:2011/11/20(日) 16:39:43.17
逐次出力でいけました。ありがとうございます。
438デフォルトの名無しさん:2011/11/20(日) 16:49:30.73
>>429
ありがとう。暇つぶしによさげだわw

ちなみに、こんな感じのコードを提出したらAcceptedになりました。
http://ideone.com/rtZqP
439デフォルトの名無しさん:2011/11/20(日) 16:51:31.78
>>433
積み残し誤差が問題なら後ろ側から足してけ

小さい方から足すと積み残し誤差は最小限に抑えられる
浮動小数点数の宿命だな
440デフォルトの名無しさん:2011/11/20(日) 16:55:48.66
>>429
realloc()とか使ったらだめなん?
配列の大きさを決め打ちするとWrong Answerになるならvectorみたいな
コンテナがいいけど、頑張ればCでも書けない事もない
441デフォルトの名無しさん:2011/11/20(日) 17:15:43.51
>>429
いささかトリッキーだけど、Cでもこういう風に書けばメモリの許す限りデータを入力出来る

http://ideone.com/KBxEV
442デフォルトの名無しさん:2011/11/20(日) 17:47:39.28
>>434 >>436 >>439
色々と助言ありがとう
実戦してみる
443デフォルトの名無しさん:2011/11/20(日) 17:55:54.10
んふー。ラムダ式使ったら弾かれたw
444デフォルトの名無しさん:2011/11/20(日) 18:19:47.00
>>443
topcoderいきな
445デフォルトの名無しさん:2011/11/20(日) 19:33:03.92
topcoderって登録に大学名入力しないといけないの?
俺専門(笑)何だけど
446デフォルトの名無しさん:2011/11/20(日) 19:42:55.97
それちがうとこ見てるだろ
447デフォルトの名無しさん:2011/11/20(日) 20:03:09.57
複素数型の配列を用意して、
この配列の各要素に、10進数の各位の数をセットしたものを、多倍長型として定義して、
この多倍長型同士の掛け算関数も実装して、
多倍長型を使って適当に固定小数点数として扱ってA,Bを乗算すれば、仕組みがシンプルで簡単じゃね?
448447:2011/11/20(日) 20:04:39.47
まちがえた。
複素数じゃなくて、普通のchar型配列とかでいいですw
449デフォルトの名無しさん:2011/11/20(日) 20:08:38.65
二進化十進?
450デフォルトの名無しさん:2011/11/21(月) 02:26:59.48
失礼します。
引数を二つ持った再帰関数の問題なのですが、
停止条件がなぜ1ではなく(base)になるのか理解できません。
停止条件を1にしてみると27になり、1乗分足りないようです。
なぜなのでしょうか?
自分なりに調べましたが、引数を2つ持った再帰関数の情報が見つけられませんでした、
お手数とは思いますが、よろしくお願いします。

#include<stdio.h>
int power (int ,int);
int main (void){
printf("%d\n",power(3,4));
return(0);
}

int power (int base ,int exponent){
if(exponent == 1)
return (base);
else{
return(base * power(base,(exponent-1)));
 }
}
451デフォルトの名無しさん:2011/11/21(月) 02:57:55.47
xの1乗はxだからだ。
return 1にしたいならexponent==0だろ。
452デフォルトの名無しさん:2011/11/21(月) 03:03:02.92
再帰やループで詰まったら一回一回手書きしてみるとだいらい原因がわかる。
453450:2011/11/21(月) 03:35:34.08
解りました!!
if(exponent == 1) return (base);
つまり、baseの1乗はbaseなので、1乗になったらbaseを返す。
if(exponent == 0) return (1);
baseの0乗は1、0乗になったら1を返す。解ってしまえば当たり前な事でした。
再帰一回分余計になるからこうなっているのですね。
階乗の停止条件を形だけでしか見れていなかったようです。

return(base * power(base,(exponent-1)));
ここの理解も曖昧だったのですが、
手書きでなぞってみたら
return(base * 3);
return(base * 9);
return(base * 27);
と帰っていく流れが掴めました。
(base * power(base,(exponent-1)))
停止条件のreturnからbaseを返してもらって、
(base * base)
(base * (base * base))
(base * (base * base * base))
最後にprintfに81を返すと。

良かったです、ありがとうございました。
つぎはハノイの塔に挑戦してきます。
454デフォルトの名無しさん:2011/11/21(月) 06:41:25.81
do-whileの所を教えてください。

#include <stdio.h>
int main(void)
{
int num = 0;
int sum = 0;
printf("計算したい数字を入力(0で終了)\n");
do{
scanf("%d", &num);  
sum += num;      
}while(num);              
printf("合計は%dです\n",sum);
return 0;
}


@scanfして数字をnumへ
Asumに加算する
Bくり返しの条件はnumが0以外の時

while(num != 0)なら、0以外ならくり返し(=0入力で終了) と分かるのですが、
while(num) がなぜ0のとき終了できるのか分かりません。どういうことでしょうか(´;ω;`)
455デフォルトの名無しさん:2011/11/21(月) 07:01:55.46
JISX3010より。

6.8.5 繰返し文
構文規則
     繰り返し文:
            while (式) 文
            do 文 while (式)
            for (式opt ; 式opt ; 式opt) 文
            for (宣言 式opt ; 式opt) 文

(中略)

意味規則 繰返し文は、ループ本体 (loop body) と呼ばれる文を、
制御式が0と比較して等しくなるまでの間、繰り返して実行する。
456 ◆QZaw55cn4c :2011/11/21(月) 07:09:56.69
>>454
確かに普通わかりやすく書くのであれば
do {...} while(num != 0)
で 「num が 0 でなければループ続行」。
これは != 演算子が「二つの項が等しくなければ 1、それ以外ならば 0 」を返す2項演算子と考えてよいから。
printf("%d\n", 1 != 0)
printf("%d\n", 1 != 1)
を実行させて値を調べてみよ。

do {...} while () 文は条件式が 0 以外のときループを続行する。
したがって、これを
do { ... } while (num)
と書いても同じ意味。

if 文でも同じことがいえる。
if (a != 0) { ... }

if (a) { ... }
と書くことができる。
457デフォルトの名無しさん:2011/11/21(月) 08:02:59.48
>>454
難しく考えることはない。式の値は、0じゃなければ真となる。
でも、!=0を書くことは意味をはっきりさせることになるから必要が無ければ書かない癖はつけない方がいい。
458デフォルトの名無しさん:2011/11/21(月) 08:51:11.45
>>455-457
おぉありがとうございました(´;ω;`)気が楽になりました モヤモヤすっ飛んだ
459デフォルトの名無しさん:2011/11/21(月) 09:53:20.10
教えていただけないでしょうか?
/*5件の体重データをキーボードから入力し体重の最大、最小、平均、合計を求めよ*/

#include<stdio.h>
int main(void)
{
float weight,kei=0,heikin,max=0,min=1000;
int n=1; //ここはint型にするべきなのか?float型にすべきか?
while(1){
printf("%d件目のデータを入力してください: ",n);
scanf("%f",&weight);
if(n==0)break;
kei = n;
n++;
if(n==1){
不明;
不明;
}
if(weight>max)
max=weight;
if(min>weight)
min=weight;
}
heikin=kei/n;
printf("合計 %6.1f\n件数 %6.0f\n平均値 %6.1f\n最大値%6.1f\n最小値%6.1f\n",kei,n,heikin,max,min);
return 0;
}
460デフォルトの名無しさん:2011/11/21(月) 10:16:32.23
>>459
論理的思考がきちんとできていない悪寒。
n は件数を数えるだけだから整数型でいい。
それ以外のことは、ロジックをきちんと考えて作り直してからだな。
461デフォルトの名無しさん:2011/11/21(月) 15:33:40.03
インデントしない、変数名はローマ字読みだったりと…
指摘されないのかね?
462デフォルトの名無しさん:2011/11/21(月) 16:16:52.26
keiって合計のことならweightを足すべきじゃないんかね。
463デフォルトの名無しさん:2011/11/21(月) 16:54:18.45
kei→totalとかsum
heikin→ave
n→cnt
などのようにして統一するべき

それよりも型が不明ですとか
ソースが埋められませんだと
勉強の仕方や手順に問題があるな
464デフォルトの名無しさん:2011/11/21(月) 16:55:47.77
>461
重箱の隅
465デフォルトの名無しさん:2011/11/21(月) 17:07:43.38
>>459はコピペじゃなかったっけ?何年も前に見た記憶がある。
466デフォルトの名無しさん:2011/11/21(月) 17:26:51.40
そのレベルの問題はどの本でもあるしな
似たような問題があっても可笑しくない
467デフォルトの名無しさん:2011/11/21(月) 17:30:23.94
一寸前なら憶えちゃいるが
数年前だとチト判らねェなあ
コピペ臭いソースだって?
ここにゃ沢山あるからねェ
468デフォルトの名無しさん:2011/11/21(月) 17:32:06.28
>>465
教える内容なんて毎年変わらない
469デフォルトの名無しさん:2011/11/21(月) 17:33:35.01
もう仕様何て変わらない言語だしな
470デフォルトの名無しさん:2011/11/21(月) 18:00:32.76
仕様を変えてもC89のままのコンパイラーが多いし
471デフォルトの名無しさん:2011/11/21(月) 18:02:26.19
C89とか何年後の話だよ
472デフォルトの名無しさん:2011/11/21(月) 18:42:30.94
>>471
78年後だよ。どうしてそんなのも計算できないのにプログラムやってるのはなぜ?
473デフォルトの名無しさん:2011/11/21(月) 19:21:00.87
78年後もCってあるのか
474 ◆QZaw55cn4c :2011/11/21(月) 19:44:02.00
>>473
lisp と同じくらいに C も存在しているだろう。
475デフォルトの名無しさん:2011/11/21(月) 20:02:42.43
「だろう」は仮定形
それにlispもCもあるか分からないが正解
476デフォルトの名無しさん:2011/11/21(月) 20:43:33.21
50年もしたらなにかブレイクスルーがおきて、SFに出てくるような人工知能が開発されて、
プログラミングなんてなくなってるような気がする。
自然言語でおkみたいな。
477デフォルトの名無しさん:2011/11/21(月) 20:50:23.60
>>472
ん??順当に考えれば2015年の冬じゃないか?
478デフォルトの名無しさん:2011/11/21(月) 20:52:56.71
Lisp が登場してから 50年以上経つわけだが。
479デフォルトの名無しさん:2011/11/21(月) 20:54:15.63
ネタってわかってやれよ
480デフォルトの名無しさん:2011/11/21(月) 20:56:03.15
>>476
ビル・ゲイツはPowerPointみたいにプログラミング出来ないか?と社内で言い続けて、それでもVC/VB/VC#しか無いんだぞ
理想にいちばん近いのでもスクラッチが今の限界だ
481デフォルトの名無しさん:2011/11/21(月) 21:11:43.88
文字列についてなんですが
char str[] = "ABCDEFG";
と宣言するのと
char *str = "ABCDEFG";
と宣言するのと
char str[8];
と宣言してヌル文字含めて一文字ずつ代入するのとで出来上がるstrに違いってありますか?
出力したりサイズ測ったりSTRCMPで比べたりしてみた限りでは違いは無いみたいなのですが・・・
482デフォルトの名無しさん:2011/11/21(月) 21:11:55.19
コミケの事だろ
483デフォルトの名無しさん:2011/11/21(月) 21:12:26.14
なんか改行多いって怒られるので分けます スミマセン
//ソースコード
int main(void){
char str1[] = "ABCDEFG";
char *str2 = "ABCDEFG";
char str3[8];
str3[0] = 'A';
str3[1] = 'B';
str3[2] = 'C';
str3[3] = 'D';
str3[4] = 'E';
str3[5] = 'F';
str3[6] = 'G';
str3[7] = '\0';
printf("str1:%s, sizeof str1:%lx\n",str1, sizeof str1);
printf("str2:%s, sizeof str2:%lx\n",str2, sizeof str2);
printf("str3:%s, sizeof str3:%lx\n",str2, sizeof str3);
printf("str1 = str2 :%d\n", strcmp(str1,str2));
printf("str2 = str3 :%d\n", strcmp(str2,str3));
printf("str3 = str1 :%d\n", strcmp(str3,str1));
}
484デフォルトの名無しさん:2011/11/21(月) 21:12:38.34
//実行結果
str1:ABCDEFG, sizeof str1:8
str2:ABCDEFG, sizeof str2:8
str3:ABCDEFG, sizeof str3:8
str1 = str2 :0
str2 = str3 :0
str3 = str1 :0
485デフォルトの名無しさん:2011/11/21(月) 21:16:07.19
配列の領域が確保されるか
read onlyの文字列の領域が確保された後にそのアドレスをポインタで指すか
486デフォルトの名無しさん:2011/11/21(月) 21:18:14.10
>>483
文字数変えても sizeof str2 の数値だけは変わらんよ

ポインタが 8byte ってことは 64bit でコンパイルしたのかな?
487デフォルトの名無しさん:2011/11/21(月) 21:25:03.81
>>480
60年代とか、チェスで人間に勝つのは絶対無理とか言ってた学者がいたのに勝てたじゃん。
50年もしたらなにがおきるかわからん。
488デフォルトの名無しさん:2011/11/21(月) 21:34:48.83
皆さん有難う御座います。
>>485
なるほど、str1とstr2は後から書き換えできないんですね。
書き換えるとしたら、別の文字列を用意してポインタの参照先変更ですか。

>>486
あー確かにこれだとポインタ変数のサイズになっちゃいますね
STRLEN使わないとダメですか。
Macでやってるので64bitになってるかも知れません・・・
32ビットだと4バイトになるのですか?

てか最後の出力のとこ間違ってstr2になってますね 正しくはstr3です
489デフォルトの名無しさん:2011/11/21(月) 21:52:39.58
>>488
str1は配列の初期化、最後に\0ははいらない
490デフォルトの名無しさん:2011/11/21(月) 21:56:25.15
なんてことはなく、入る
str1とstr3は初期化と代入という違いはあるけどほぼ同じ
491デフォルトの名無しさん:2011/11/21(月) 21:57:36.10
>>487
50年もしたら将棋で人間に勝てるようになってるかもね
492デフォルトの名無しさん:2011/11/21(月) 22:15:49.58
10年後には人間は勝てなくなるよ
493 ◆QZaw55cn4c :2011/11/21(月) 22:40:22.99
>>491
女流は負けた。将棋連盟会長も苦しいだろう。ここは光速の谷川さんに期待したい。
494デフォルトの名無しさん:2011/11/21(月) 22:45:16.07
わざわざ年明け早々にやらなくてもいいのに
495デフォルトの名無しさん:2011/11/21(月) 23:07:48.75
50年後には人間は生きていけなくなるよ
496デフォルトの名無しさん:2011/11/21(月) 23:12:55.77
switch文の質問です。
下の(1)と(2)って意味が異なりますか?
どちらも必ず処理を1つ行った後にbreakされると思っているのですが
結果が異なるようです。何か助言があればお願いします。

(1)breakを出した状態
switch (c) {
case A: if(aa>bb){処理 A;}
break;
case B: if(aa>bb){処理 B;}
break;
default:処理 N;
}
---------------------------------------------------------
(2)breakを{}に含めた場合
switch (c) {
case A: if(aa>bb)
    {
    処理 A;
     break;
    }
case B: if(aa>bb)
   {
    処理 B;
    break;
   }
default:処理 N;
}
497デフォルトの名無しさん:2011/11/21(月) 23:15:49.51
>>496
全然ちがいます
498デフォルトの名無しさん:2011/11/21(月) 23:18:54.48
>>496
入門書読め
499デフォルトの名無しさん:2011/11/21(月) 23:22:15.25
なるほど
ってことはこうですかね

パターン1:char str[(要素数)] (= 文字列リテラル);
要素数分の配列を用意してから、文字列リテラルで初期化する。文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない。
文字列リテラルで初期化した場合のみ、要素数を省略可能。その場合、文字列リテラルの文字数+1(ヌル文字分)の要素数の配列となる。
要素数を指定した場合、文字列リテラルの文字数に関わらず指定した要素数の配列になるが、要素数≧文字列リテラルの文字数+1でないと初期化するときにエラーが出る。
後から各要素に代入可能だが、ヌル文字のない文字列にならないよう注意しなければいけない。

パターン2:char *str = 文字列リテラル;
書き換え不能な文字列リテラルがメモリ上に用意されたあと、文字列の先頭アドレスがstrに格納される。アドレスの参照先は変更可能だが、文字列の各要素に代入は出来ない。

それにしてもC言語の文字列の扱いは面倒ですねぇ
なんかまだ落とし穴がありそう・・・
500496:2011/11/21(月) 23:22:58.86
>>497
>>498
case Aが必ず選択されて、aa>bbが真になる場合でも
処理が違うということでしょうか??

case Aが選択されてaa>bbが偽になる場合にcase Bが実行されるのは分かるんですが
501デフォルトの名無しさん:2011/11/21(月) 23:25:10.23
間違えた
×文字列リテラルで初期化した場合のみ、

○文字列または配列要素列挙で初期化した場合のみ、
または、
○初期化した場合のみ、

てかリテラルじゃなくても初期化は出来ますな
502デフォルトの名無しさん:2011/11/21(月) 23:26:26.60
>>500
何を聞きたいのか分からん

いつもそれが成り立つなら switch いらないよ
503デフォルトの名無しさん:2011/11/21(月) 23:28:40.46
>>496
(2)だとcase A:で処理Aを行った時しかブレークしないじゃん
つまりcase Aかつ、 aa>bbでないとき、ブレークせずにcaseBの分岐に行っちゃう。
504デフォルトの名無しさん:2011/11/21(月) 23:29:41.32
>>500
そこだけみれば一緒じゃないかな。
ただaa>bbが偽のときに処理Nに行くけどいいのか?
505496:2011/11/21(月) 23:30:21.50
>>502
>>503
ありがとうございました。
解決しました!!
506デフォルトの名無しさん:2011/11/21(月) 23:37:11.59
>>488
>str1とstr2は後から書き換えできないんですね。
str1は書き換えられる。
str1とstr3は初期値付の宣言か、宣言後の代入かの違いで、
ほぼ同等といえる。
507デフォルトの名無しさん:2011/11/21(月) 23:42:25.91
>>499
>要素数分の配列を用意してから、文字列リテラルで初期化する。文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない
NULキャラ込で初期化されるぞ。

>要素数を指定した場合、文字列リテラルの文字数に関わらず指定した要素数の配列になるが、要素数≧文字列リテラルの文字数+1でないと初期化するときにエラーが出る。
今手元にK&Rが無いので調べられないが、配列サイズより文字列リテラルが大きい場合は、
未定義だったと思う。

>後から各要素に代入可能だが、ヌル文字のない文字列にならないよう注意しなければいけない。
先に述べたように、NULキャラ込で初期化されるので、サイズだけ気にすれば良い。
508デフォルトの名無しさん:2011/11/21(月) 23:47:33.20
3日ほど前から「ゼロからはじめるプログラミング」という本を読みながら勉強をしています。
本でサイコロを作成し、
label1.Textにランダムで1〜6の数字を表示させるプログラムがあります。
それを今度、数字ではなく、●の数(1であれば●1つ)で表現する演習があります。


Random suuji = new Random();
label1.Text= suuji.Next(1, 7).ToString();
509デフォルトの名無しさん:2011/11/21(月) 23:48:02.08
>>507
マジですか!
てことは
char str = {'A','B','C','D','E','F','G'};
でもちゃんと文字列として最後にヌル文字勝手に追加されて初期化されるんですかね?
逆に文字列としてではなく単なる文字型の配列として初期化したい場合どうすればいいんでしょうか?

また、ヌル文字のある要素にヌル文字以外の文字を代入した場合、自動的に次の要素にヌル文字が自動代入されるってことでしょうか?
510デフォルトの名無しさん:2011/11/21(月) 23:51:06.61
3日ほど前から「ゼロからはじめるプログラミング」という本を読みながら勉強をしています。
本でサイコロを作成し、
label1.Textにランダムで1〜6の数字を表示させるプログラムがあります。
それを今度、数字ではなく、●の数(1であれば●1つ)で表現する演習があります。

数字を表示させる行を少し改良し

Random suuji = new Random();
label1.Text= suuji.Next(1, 7).ToString(); から

Random suuji = new Random();
suuji.Next(1, 7).ToString(); 

if (suuji="1")
label1.Text="●"

とif文を入れてみたのですがうまくいきません・・・
本の中に答えが無く、先に進めません・・・どうすればいいのですか?
511デフォルトの名無しさん:2011/11/21(月) 23:52:45.71
>>510
スレチ
言語が違うよ
512デフォルトの名無しさん:2011/11/21(月) 23:54:23.73
label1.Text="●"

label1.Text="●";
513デフォルトの名無しさん:2011/11/21(月) 23:55:36.87
suuji.Next(1, 7).ToString(); 
if (suuji="1")

if (suuji.Next(1, 7)=="1")
514デフォルトの名無しさん:2011/11/21(月) 23:56:30.86
suuji.Next(1, 7).ToString(); 
if (suuji="1")

if (suuji.Next(1, 7)==1)
515507:2011/11/22(火) 00:46:13.21
>>509
>char str = {'A','B','C','D','E','F','G'};
>でもちゃんと文字列として最後にヌル文字勝手に追加されて初期化されるんですかね?

ちがう。>>499自分で言っているように
char str[(要素数)] (= 文字列リテラル);
で初期化する場合はヌル文字込で初期化される。
「文字列リテラル」ってのは"でくくられたものだよ。わかっている?
char str[] = {'h', 'o', 'g', 'e', '\0'};
の簡易記法が
char str[] = "hoge";
と思っておけば良い。

>逆に文字列としてではなく単なる文字型の配列として初期化したい場合どうすればいいんでしょうか?
下記だね。
char str[] = {'h', 'o', 'g', 'e'};

>また、ヌル文字のある要素にヌル文字以外の文字を代入した場合、自動的に次の要素にヌル文字が自動代入されるってことでしょうか?
もちろん、そんな気の利いたことはしてくれない。
516デフォルトの名無しさん:2011/11/22(火) 00:57:20.49
>>515
えっと、つまり、やっぱり
文字列リテラル(ダブルクォーテーションで括られた文字の羅列)で初期化した場合と違って、
配列要素を列挙して初期化した場合ヌル文字は自動で追加されないから最後にヌル文字も列挙しないといけないってことですよね?

また、要素にアクセスしてヌル文字を上書きしてしまった場合、ヌル文字を自動で追加したりはしてくれないので、ヌル文字が無い配列にならないよう、
ヌル文字より前だけをいじるか、ヌル文字を上書きした場合、それより後ろにちゃんとヌル文字を自分で挿入しないといけないってことですよね。

>>499はそういうつもりで書いたのですが・・・
517デフォルトの名無しさん:2011/11/22(火) 01:02:50.36
>>516
は?
分かってるんだったら>>509みたいに揚げ足取りみたいな聞き方しないでそういうつもりで書きましたって最初から書けばいいじゃん。
わざわざ試すような聞き返し方して、どういうつもり?舐めてんのお前?立場分かってる?死ねば?
518デフォルトの名無しさん:2011/11/22(火) 02:26:38.10
>>516
言いたいことをシンプルに伝えられるようにするか、規格読むのがいい。

>>507は普通に間違えてるからびっくりする気持ちもわかるけどね。
> > 文字列リテラルの代わりに{'A','B','C',・・・'\0'}でも初期化出来るが、ヌル文字は自動で追加されない
> NULキャラ込で初期化されるぞ。
519デフォルトの名無しさん:2011/11/22(火) 03:48:38.50
507がアホなのに逆ギレしてるw
520デフォルトの名無しさん:2011/11/22(火) 07:59:30.36
無能な働き者
521デフォルトの名無しさん:2011/11/22(火) 08:36:42.54
>無能な働き者
上司がよければそれなりに役に立つが
勝手に問題をばら撒く、もしくは勝手に悩んでつぶれるやつが多い
522デフォルトの名無しさん:2011/11/22(火) 09:00:34.63
有能な怠け者は司令官に、
有能な働き者は参謀にせよ。
無能な怠け者は...
そうだな、連絡将校ぐらいならできるだろう。
無能な働き者?
それは処刑するしかあるまい。
523デフォルトの名無しさん:2011/11/22(火) 12:09:05.10
char c = 'a';
printf("%c",c);
としなくてはいけないところ、
int c = 'a';
printf("%c",c);
でもちゃんとaと表示されるのはなぜですか?
524デフォルトの名無しさん:2011/11/22(火) 12:14:16.58
>>523
'a'は97の別の書き方。(文字コードがASCIIの場合)
charもintも整数。
525デフォルトの名無しさん:2011/11/22(火) 12:22:58.94
charをintにキャストしてprintfに渡されてるから。
526デフォルトの名無しさん:2011/11/22(火) 12:28:02.44
ANSIの規格書たけーんだよ(#゚Д゚)ゴルァ!! って思ってるのは俺だけですか?
527デフォルトの名無しさん:2011/11/22(火) 12:32:29.15
無料でダウンロードするのが真のハッカー
528デフォルトの名無しさん:2011/11/22(火) 12:32:52.25
char cc='a';
int ic='b';
printf("%c %c\n",cc,ic);

逆アセンブル
char cc='a';
004113CE mov byte ptr [cc],61h
int ic='b';
004113D2 mov dword ptr [ic],62h

printf("%c %c\n",cc,ic);
004113D9 mov esi,esp
004113DB mov eax,dword ptr [ic] ;/*int型変数icの値を32bitレジスタに読み込み*/
004113DE push eax
004113DF movsx ecx,byte ptr [cc] ;/*char型変数ccの値を32bitレジスタに読み込み*/
004113E3 push ecx
004113E4 push offset string "%c %c\n" (4157A0h)
004113E9 call dword ptr [__imp__printf (4182C8h)]
004113EF add esp,0Ch
004113F2 cmp esi,esp
004113F4 call @ILT+325(__RTC_CheckEsp) (41114Ah)

charでも32ビットの数値として渡してる。
529523:2011/11/22(火) 12:36:45.59
みなさんありがとうです。
てことはintでも正解ということですか?
やっぱりcharにしないとダメですか?
530デフォルトの名無しさん:2011/11/22(火) 12:57:45.41
見やすくするためにcharにしとけ。
531523:2011/11/22(火) 13:12:07.48
はい。charんとわかりました。
ほintにありがとう。
532デフォルトの名無しさん:2011/11/22(火) 13:52:03.60
531をあぼ〜んした。
後悔はしてない。
533デフォルトの名無しさん:2011/11/22(火) 14:49:09.41
intptr_t ってポインタを格納するのに充分なサイズってだけで、
ポインタと同じサイズと定義されてるわけじゃないのか。

ポインタと同サイズと定義されてる整数型ある?
534デフォルトの名無しさん:2011/11/22(火) 14:57:23.43
無い。
535デフォルトの名無しさん:2011/11/22(火) 17:37:33.45
ロベールのC++入門講座 http://book.mycom.co.jp/book/978-4-8399-2605-2/978-4-8399-2605-2.shtml
これどうですかね?
Cの勉強にはなりませんか?
536デフォルトの名無しさん:2011/11/22(火) 17:49:49.62
>>535
C勉強したけりゃCの入門書買えよw
537デフォルトの名無しさん:2011/11/22(火) 17:59:33.27
Cを知っていたら、なんでもできるような気分になれるよね
538デフォルトの名無しさん:2011/11/22(火) 18:08:42.65
言語だけ知ってたって意味のある事は何にもできやしないよ。
539デフォルトの名無しさん:2011/11/22(火) 18:31:03.67
日本語を知っているだけで素晴らしい文章が書ける訳じゃないしな
540デフォルトの名無しさん:2011/11/22(火) 18:54:19.09
良い文を読んで其に習い自分で書く事が重要だね
541デフォルトの名無しさん:2011/11/22(火) 18:56:22.31
其なんて背伸びして使ってみても場違いで下手な文章にしかならないしな
542デフォルトの名無しさん:2011/11/22(火) 19:10:29.36
n=1;
543デフォルトの名無しさん:2011/11/22(火) 19:17:30.56
故意に使ったのか?
544デフォルトの名無しさん:2011/11/22(火) 19:19:50.84
>>543
うん
545デフォルトの名無しさん:2011/11/22(火) 21:35:08.95
scanfで文字+スペース+数字を読み込む所で、つまづいて
fgetsに置き換えたんですが、fgets前の別のscanfで1度読み込んだ行(最後の改行だけ?)を読み込んでしまいます。
問題は http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10015
作ったソースは http://codepad.org/45oveU94 です
現状は1回目のfgetsだけ、入力前に読み込んでその後はちゃんと意図通り読み込んでます
(ただ、ひとつずれた状態で必要な回数−1だけ)
546デフォルトの名無しさん:2011/11/22(火) 21:38:17.57
>>527
その程度で「真」とか言ってるのはバッカー
もっと上のレベルで破壊活動する奴と開拓的なことをする人を区別する呼び名がある
547510:2011/11/22(火) 21:57:12.26
>>511
すいません・・・。


>>512-514
スレ違いなのに回答ありがとうございます。
無事、動くようになりました!
548デフォルトの名無しさん:2011/11/22(火) 22:23:18.50
>>545
scanfでやればいいのに
549デフォルトの名無しさん:2011/11/22(火) 22:32:37.01
はじめはscanfでやってたんだけど、読み込む回数が指定より少なくて
ググってたら、scanfつかうな みたいなのがいくつかあって迷走しちゃいました(涙
つかったときのソース
http://codepad.org/sIqIrd29
これは前行の改行をよみこんじゃってるのかな?
550デフォルトの名無しさん:2011/11/22(火) 22:46:31.57
自解しちゃったんで解答おいて退散します λ
これに休日の6時間つかちゃった
http://codepad.org/g2V94Wn8
551デフォルトの名無しさん:2011/11/22(火) 22:48:50.00
>>550
fgets して、sscanf
552 ◆QZaw55cn4c :2011/11/22(火) 22:59:06.13
>>523
printf() のような可変長引数関数の場合は、char 引数は int に格上げ(integral/integer promotion)される。

>>526
ISO/IEC 9899:1999 TC2ならいくらでも転がっている。
553デフォルトの名無しさん:2011/11/22(火) 22:59:36.47
554デフォルトの名無しさん:2011/11/22(火) 23:03:10.03
scanfの直後に,fgets+sscanfつかうと入力する前に改行が入ってしまうとおもうんですけど
そういうときはどうしてますか?
混合させずにscanfはもう使わないほうがいいのかな
555 ◆QZaw55cn4c :2011/11/22(火) 23:16:54.81
>>545
fgets() と *scanf() は混在できないらしい。理由は私もわからない。
http://ideone.com/Aj46b
556デフォルトの名無しさん:2011/11/22(火) 23:20:59.93
>>550
>int cards[4][13]={0};
厳密にはまずい。>>555 参照。
>cards[0][d-1]=1;
さりげなくちゃんと訂正してますね。
557デフォルトの名無しさん:2011/11/22(火) 23:30:43.26
558デフォルトの名無しさん:2011/11/22(火) 23:55:17.89
void CMain::TP2(int left_in_x,int up_in_y,int right_in_x,int down_in_y,float *left_x,float *up_y,float *right_x,float *down_y){

*left_x=(1/16*(left_in_x-1));
*up_y=(1/16*(up_in_y-1));
*right_x=(1/16*right_in_x);
*down_y=(1/16*down_in_y);
}

float
Tx_Left_X,
Tx_Right_X,
Tx_Up_Y,
Tx_Down_Y;

TP2(1,1,1,1,&Tx_Left_X,&Tx_Up_Y,&Tx_Right_X,&Tx_Down_Y);

うまく数字が返ってこないです
ホントはTP2関数を使ったら
Tx_Left_Xとかの値が変わってるはずなんですが…

559デフォルトの名無しさん:2011/11/23(水) 00:04:04.70
詳しくソースコードまでありがとうございます
すごく参考になりました。
560デフォルトの名無しさん:2011/11/23(水) 00:08:14.08
C言語でCGIの勉強したいのですがおすすめのわかりやすい書籍を教えて下さい
561デフォルトの名無しさん:2011/11/23(水) 00:13:13.44
>>558
整数同士の割り算の結果は整数になるので例えば1/16 = 0 となっている、と思う。
562デフォルトの名無しさん:2011/11/23(水) 00:14:27.25
>558
1/16が整数のまま計算されて0になるんじゃね。
1.0/16.0とかやってみたら?
563デフォルトの名無しさん:2011/11/23(水) 00:20:10.40
なるほど!試してみます!
564デフォルトの名無しさん:2011/11/23(水) 00:22:25.09
出来ました、ありがとうございました
x.0にしないと、floatとか小数点まで計算してくれないですね、勉強になりました
565デフォルトの名無しさん:2011/11/23(水) 00:47:57.22
×2とか×4とか÷2、÷4などのビット演算で表すことが出来る計算はビット演算使ったほうが早いんですか?
566デフォルトの名無しさん:2011/11/23(水) 01:15:58.06
>>565
CPUによるかもしれないが普通はそう

もっとも現代的なプログラミングだと、そういう命令レベルの選択は
最適化コンパイラに任せたほうがいいよねっていう流れ
下手に人間が頑張るより賢い結果を出すことも多い
567デフォルトの名無しさん:2011/11/23(水) 02:30:42.88
char moji[100];
int a,b,c,d,i;
a = b = c = d = i = 0;

printf("文字列を入力せよ\n");
scanf("%s",moji);
printf("結果:%s\n",moji);

for(i=0 ; i <= 3 ; i++){
if(moji[i] == 'a')
a =+ 1;
else if(moji[i] == 'b')
b =+ 1;
else if(moji[i] == 'c')
c =+ 1;
else if(moji[i] == 'd')
d =+ 1;
}

文字列としてaaaaを入力してもループ2周目にてaの値が増えません。
文字の場合の比較の仕方が間違ってたりする?
568デフォルトの名無しさん:2011/11/23(水) 02:40:53.90
>>567
複合代入演算子はa += 1
他の行も同様
569デフォルトの名無しさん:2011/11/23(水) 02:47:47.81
有難うございます。 盲点でした。
=+ の場合はそのような演算子はないわけですが、どのように処理されているのでしょう?
570デフォルトの名無しさん:2011/11/23(水) 02:55:38.82
a=1;
571デフォルトの名無しさん:2011/11/23(水) 02:56:42.68
aに+1を代入してる。
-1のようなもん
572デフォルトの名無しさん:2011/11/23(水) 03:02:41.25
なるほど a =+ 1; ⇒ a = +1 と見られるんですね。
それと区別するために+=
良くわかりました。有難うございます。
573デフォルトの名無しさん:2011/11/23(水) 10:15:08.38
>>560
書籍じゃないが猫でもわかるのサイトで紹介してる
574デフォルトの名無しさん:2011/11/23(水) 13:47:38.96
>>560
自分の知る限り、本はこれしか見たことない
分かりやすいかどうかは知らん

http://www.amazon.co.jp/gp/aw/d/477411541X/ref=mp_s_a_1?qid=1322023561&sr=8-1
575デフォルトの名無しさん:2011/11/23(水) 14:28:40.24
規格に厳密な話をすると
整数型a_typeとb_typeがあって
bit幅がa_type > b_typeであっても
最大値がa_type > b_typeである保証はどこにもないですよね?
576デフォルトの名無しさん:2011/11/23(水) 15:02:23.15
型毎にxxx_MAXってマクロがあるからそれで比較してみたら?
577デフォルトの名無しさん:2011/11/23(水) 15:03:38.05
>>575
それがintやshortのことなら保証されてる。
578デフォルトの名無しさん:2011/11/23(水) 15:55:07.21
BCDコード有効なら…
579デフォルトの名無しさん:2011/11/23(水) 16:13:02.86
int・64ビット・最大値2147483647でshort・32ビット・最大値2147483647の処理系とかも規格上は許されるはずだ
580デフォルトの名無しさん:2011/11/23(水) 17:36:19.47
一般的想定からかけ離れた仕様のコンパイラなんか使いたくない。
581デフォルトの名無しさん:2011/11/23(水) 17:55:37.66
一般想定決め打ちして、なんかあると書き直さなきゃなんないような
コードなんか書きたくない。
582デフォルトの名無しさん:2011/11/23(水) 18:06:39.97
100行くらいのプログラムが3つあって、
その8割くらいは全く同じ記述になっている場合に、
3つのプログラムを一つにまとめて2割の異なっている部分だけを条件分岐で処理を分けた方がいいんでしょうか
前者だと冗長ですが分かりやすいと思います
後者は簡潔だけどさらに条件分岐が増えた場合などに段々可読性が落ちてくると思います
どっちがいいんでしょうか
583デフォルトの名無しさん:2011/11/23(水) 18:17:43.57
文面見る限り、ほぼ自分でもわかってると思うけど、
それは後々の変更の可能性によるんじゃね。
584デフォルトの名無しさん:2011/11/23(水) 18:19:39.40
スレ違いだがそういう時こそ継承の出番なんだがな
585デフォルトの名無しさん:2011/11/23(水) 18:21:27.75
というか、その8割方同じだというソースをライブラリとして分離すればいいだけなのでは?
物によるだろうけど、c++ならテンプレート関数使えば綺麗に書ける可能性もある。
586デフォルトの名無しさん:2011/11/23(水) 18:42:51.82
>>582
「全く同じ記述」の部分が、プログラム中のあちこちに分散してるんだとエスパーしてみた。
587デフォルトの名無しさん:2011/11/23(水) 19:08:27.41
Cでデスクトップに貼り付けるガジェットのようなものを作っているのですが、
ショートカットキーやクイック起動でデスクトップの表示を実行すると消えてしまいます。
これを常に表示させるようにできないでしょうか?

また、デスクトップの表示は処理的に言うとすべてのウインドウを最小化しているのでしょうか?
その辺もわかる方がいれば教えてください
588デフォルトの名無しさん:2011/11/23(水) 19:12:30.28
マルチ(・A・)イクナイ!!
589デフォルトの名無しさん:2011/11/23(水) 19:34:45.13
マルチってなんでダメなん?
590デフォルトの名無しさん:2011/11/23(水) 19:39:46.04
飛んできてるメッセージ見りゃわかりそうなもんだけど、そうでもないの?
591デフォルトの名無しさん:2011/11/23(水) 19:43:40.30
592デフォルトの名無しさん:2011/11/23(水) 19:43:51.30
>>587
Win32API板に池

Win32API質問箱 Build98
http://hibari.2ch.net/test/read.cgi/tech/1321456608/
593デフォルトの名無しさん:2011/11/23(水) 19:46:56.79
デスクトップメタファはwindowsに限った概念では無いわけだが
594デフォルトの名無しさん:2011/11/23(水) 19:47:19.28
>>589
自分で適切な聞く場所すら見つけられませんでした。と言う、私馬鹿過ぎるんです宣言してるから、回答しても理解してもらう率は低い
595デフォルトの名無しさん:2011/11/23(水) 19:52:07.75
>>593
>>587がWinじゃないといった時点で誘導すれば良いだけの事
Unix系OSでもMacでも、デスクトップガジェットって使ってるの見たことない
(ググるガジェットとかは使えるの知ってるが)

こういうのは、大抵オタクが作りたがる類のもの
596デフォルトの名無しさん:2011/11/23(水) 20:18:08.46
>>593
クイック起動のデスクトップの表示
597デフォルトの名無しさん:2011/11/23(水) 20:22:26.53

>これを常に表示させるようにできないでしょうか?

壁紙に書き込む
598デフォルトの名無しさん:2011/11/23(水) 21:16:12.30
>>597
トップレベルじゃない時点で没だろ
599デフォルトの名無しさん:2011/11/23(水) 21:50:16.09
>>581
いまさらintが16bitの環境を想定して書きたくないっていうか。
600デフォルトの名無しさん:2011/11/23(水) 23:07:04.01
>>599
って言って 32bit で決め打ちした連中は、
ちょっと前に UNIX 系が64bitに移行したときは、
必死になって64bit に書き直してたな。
601デフォルトの名無しさん:2011/11/23(水) 23:14:12.86
結局、いまのintって何ビットなの?
602デフォルトの名無しさん:2011/11/23(水) 23:18:32.06
32bitが普通
603デフォルトの名無しさん:2011/11/23(水) 23:21:09.99
変数名でmax_numとmaxNumとどっちが良いかな?
っていうかこういう二つの単語のときはどう付けたらいいんだ
604デフォルトの名無しさん:2011/11/23(水) 23:24:37.44
どっちでもいいよ
605デフォルトの名無しさん:2011/11/23(水) 23:29:54.39
>>604
thx
606デフォルトの名無しさん:2011/11/23(水) 23:46:34.39
lpszCmdLine みたいな変数の命名法ってハンガリアン記法っていうんだっけ。人によっては嫌われるらしいけど。
バッファのサイズとかにunsigned int szBuffer; とか
データ受け取り用の変数に char *rcvData; とかは許して欲しいと思わなくもない。
607デフォルトの名無しさん:2011/11/23(水) 23:49:09.51
プレフィックスに型情報を埋めたやつがハンガリアンだと思う。
608デフォルトの名無しさん:2011/11/23(水) 23:49:27.05
>>606
システムハンガリアンとアプリケーションハンガリアンは違うよ
609デフォルトの名無しさん:2011/11/23(水) 23:52:53.12
システムハンガリアン: 変数の型をプレフィックスに
アプリケーションハンガリアン: 動作や大きさ等の変数の用途概要をプレフィックスに
こういうこと?
610デフォルトの名無しさん:2011/11/23(水) 23:55:01.60
2種類あるって初めて知った。
611デフォルトの名無しさん:2011/11/23(水) 23:58:31.16
ポインタにpHogeだけは癖でやってしまう俺
612デフォルトの名無しさん:2011/11/24(木) 00:02:06.98
>>608
それは知っているのだけれど、全部まとめて「ハンガリアンはクソ」って主張を見かけることがあるので・・・

>>609
そう。

>>611
それ、わかるわw
613デフォルトの名無しさん:2011/11/24(木) 00:09:33.22
スコープでプレフィックスを付けたりはする。
614デフォルトの名無しさん:2011/11/24(木) 00:17:15.80
c++ならプレフィックスより型を変えて安全策にするけどCは面倒臭いね
615デフォルトの名無しさん:2011/11/24(木) 00:22:38.67
高級アセンブラに多くを求めすぎるアホどもが勢いだけはご立派で
さすがの C もずいぶん汚染されたものだ
616デフォルトの名無しさん:2011/11/24(木) 00:25:22.24
fgetsを利用して配列に入力した文字列を出力するプログラムを作成しているのですが
問題のあるポインタの変換(関数 main )というエラーがでてきて実行することができません。
おそらくfgetsの書き方がおかしいと思うのですがどなたか教えていただけませんか?

私が書いたソースコードは以下の通りです。

#include <stdio.h>

main()
{
char str[3][20];
int i;


printf( "3つの文字列を入力して下さい\n" );

for(i = 0; i < 3; i++ ) {
//scanf( "%s",str);
fgets(str,sizeof(str),stdin);
printf( "入力した文字は%sです。\n" ,str);
}
617デフォルトの名無しさん:2011/11/24(木) 00:32:30.55
618デフォルトの名無しさん:2011/11/24(木) 00:33:22.51
fgets(str[i],sizeof(str),stdin);
619デフォルトの名無しさん:2011/11/24(木) 00:34:26.21
sizeof(str) はダメだろ。
620デフォルトの名無しさん:2011/11/24(木) 00:34:56.77
fgets(str[i],sizeof(str[i]),stdin);
printf( "入力した文字は%sです。\n" ,str[i]);

ってしたかったんちゃうの?
621デフォルトの名無しさん:2011/11/24(木) 00:37:57.07
fgetsで改行が入って変な表示になるけどね。
622デフォルトの名無しさん:2011/11/24(木) 00:39:44.39
>618さん
>619さん
>620さん
ありがとうございます。無事に動いたようです。
sizeof(str)で配列STRの要素数を取得するのだと思ってたのですが
違うのでしょうか?

配列を使うのでしたらやはり620さんみたいな形式で書くべきみたいですね。
ありがとうございます
623デフォルトの名無しさん:2011/11/24(木) 00:43:35.05
sizeof(str)はstrのサイズであって要素数ではない。
624デフォルトの名無しさん:2011/11/24(木) 00:45:14.10
>>622
sizeof(str)だと、str[3][20] のサイズ=60
625デフォルトの名無しさん:2011/11/24(木) 01:02:27.87
>581 は全ての型が何bitでもよく、
文字コードはどれでもよく、
エンディアンがどちらでも稼働するようなソースを常に考えてソースを書いているのか。
626デフォルトの名無しさん:2011/11/24(木) 01:06:44.94
ビットパターンからfloatの仮数部、指数部のビット数を類推することは出来ますか?

また、出来るのならやり方を教えて下さい
627デフォルトの名無しさん:2011/11/24(木) 01:38:54.91
カッコつけるなボケ
628デフォルトの名無しさん:2011/11/24(木) 01:39:07.36
>>626
2^nを代入すると指数部だけが変化する
3 を代入すると仮数部の最上位ビットが1になる

かもしれない
629デフォルトの名無しさん:2011/11/24(木) 01:42:48.91
llist_t clone(const llist_t ls){   //リストをコピーし新たなリストを返す関数
llist_t np;

if(ls == NULL){
return ls;
}
else if(ls != NULL){
np = allocNode();  //ノード領域の確保
np->next = clone(ls->next);  //ノードへのポインタ
np->data = ls->data;  //リストの要素

return np;
}

return np;
}

これを逆順にコピーしたいんですが、教えていただけないでしょうか。
630デフォルトの名無しさん:2011/11/24(木) 01:58:22.06
もしかして文字列じゃなくても
配列の変数名を要素指定せずに書いたら
先頭要素へのポインタになるのですか?
631デフォルトの名無しさん:2011/11/24(木) 02:35:26.60
>>629
双方向リストにするか再帰にする

>>630
文字列ってヌル終端であるような文字の配列だよ。さして特殊な配列ってわけじゃない
632デフォルトの名無しさん:2011/11/24(木) 02:48:41.60
>>631
9行目で再帰をつかってるんですが逆順にできませんでした。
再帰をつかって逆順にするにはどうしたらいんでしょうか?
633デフォルトの名無しさん:2011/11/24(木) 03:02:35.01
struct {
char *buf;
} hoge;
の構造体をstaticで宣言して中のbufはmallocで動的に確保することって出来ますか?
634デフォルトの名無しさん:2011/11/24(木) 03:50:45.22
static hoge h;
void f(int s) { h.buf = malloc(s); }
635632:2011/11/24(木) 04:10:36.93
>>631
解決しました。ありがとうございました。
636デフォルトの名無しさん:2011/11/24(木) 08:49:19.77
>>628

何に代入するんですか?
637デフォルトの名無しさん:2011/11/24(木) 09:03:13.03
>>636
変数にだろ。
そもそもIEEE754のfloat/double以外のどんな存在を仮定して知りたいのかを説明しろ。
638デフォルトの名無しさん:2011/11/24(木) 11:06:43.23
文章の各文字を指定した文字数だけ、ずらすシーザー暗号を作成せよ。と言う問題なのですが、解らなくて困っています。
例:文字列入力:Nobember 25th.
ずらす文字:3
生成文字:Qryhpehu 25wk.

よろ
639デフォルトの名無しさん:2011/11/24(木) 11:07:42.84
↑予測変換を押さないで送信してしまいました…よろしくお願いします。
640デフォルトの名無しさん:2011/11/24(木) 11:19:29.32
>>638
数字はずらさないのか?
641デフォルトの名無しさん:2011/11/24(木) 11:28:42.78
アルファベットの文字コードを3ずらすだけか?
char型配列で変換テーブルつくるか、
以下のことを判断する処理で一字づつしょりする。
・アルファベットか否か。
・大文字か小文字か。
・xyz/XYZか否か。
642デフォルトの名無しさん:2011/11/24(木) 11:37:37.67
void f(char* s, int shift)
{
 static const char* u = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 static const char* l = "abcdefghijklmnopqrstuvwxyz";

 while (*s) {
  if (isalpha(*s)) {
   const char* a = isupper(*s) ? u : l;
   *s = a[ ((*s - a[0]) + shift) % 26 ];
  }
  s++;
 }
}
643デフォルトの名無しさん:2011/11/24(木) 12:24:16.85
void f(char* s, int shift)
{
 while(*s) {
  if (isupper(*s)) {
   *s = 'A' + ((*s - 'A') + 26 + shift) % 26;
  } else if (islower(*s)) {
   *s = 'a' + ((*s - 'a') + 26 + shift) % 26;
  }
  s++;
 }
}
644デフォルトの名無しさん:2011/11/24(木) 13:22:09.57
>>642-643 フランス語では不正解。
645デフォルトの名無しさん:2011/11/24(木) 13:45:11.73
>>644
フランス語を考慮したコードをどうぞ。
646デフォルトの名無しさん:2011/11/24(木) 13:46:56.28
よくわからんがその理屈だと日本語でも不正解じゃないのか
647デフォルトの名無しさん:2011/11/24(木) 13:56:26.57
漢字が何文字あると思ってるんだ>>644は・・・・
日本語に対応したプログラム書いてみろや
648デフォルトの名無しさん:2011/11/24(木) 14:02:03.66
漢字に対応するなら別に文字数関係ないだろ。
なんでテーブル持つ前提なんだよw
649デフォルトの名無しさん:2011/11/24(木) 14:16:34.24
>581の出番だぞ。
650デフォルトの名無しさん:2011/11/24(木) 14:32:24.98
ベトナムアルファベット:クオックグーでの正解実装例を頼む。
651デフォルトの名無しさん:2011/11/24(木) 14:33:00.70
>>642はASCII限定ならこれで十分かも。
と、>>643を見て思った。

void f(char* s, int shift)
{
 while (*s) {
  if (isalpha(*s)) {
   char a = isupper(*s) ? 'A' : 'a';
   *s = a + (*s - a + shift) % 26;
  }
  s++;
 }
}
652デフォルトの名無しさん:2011/11/24(木) 14:36:30.49
何小学生みたいなことやってんだよw
653デフォルトの名無しさん:2011/11/24(木) 16:17:20.22
いい加減言語を統一するべきだよね
各文化圏の固有の言語は文化財として保存する目的のみで継承して日常や仕事では英語を使う
これが世界にとってもっとも良い選択
654デフォルトの名無しさん:2011/11/24(木) 16:19:45.09
UNICODEというのがあってだな。
655デフォルトの名無しさん:2011/11/24(木) 16:23:15.11
>>654
それは文字コードを統一しただけだろ
言語そのものを統一するべき時代がもう来てるんだよ
個々の人間の活動領域に対して世界は狭くなりすぎた
656デフォルトの名無しさん:2011/11/24(木) 16:28:10.18
学術文化知識蓄積の無い辺境言語はエー語でもシナ語でもなんでも適当に飲み込まれてしまえばいいと思うよ
657デフォルトの名無しさん:2011/11/24(木) 16:33:57.47
エスペラントというのがあってだな。
658デフォルトの名無しさん:2011/11/24(木) 16:43:01.70
肉体言語一択
659デフォルトの名無しさん:2011/11/24(木) 17:02:39.28
なら日本語を選択するべきだな。
識字率から考えれば至極当然の結論となる。
660デフォルトの名無しさん:2011/11/24(木) 17:11:26.06
>>655
熱心なキリスト教徒が許さんだろ

>>659
日本の日本語識字率が世界一であるかのような言い方だなぁ
661デフォルトの名無しさん:2011/11/24(木) 17:18:24.55
音読出来るのと読み解くのは違うからねー
訓読みの概念が無い中華てよくもまぁ教育破綻せず過ごしてるもんだと思うわ
日本語が連想コンテナとすれば中華はベッタリswitch-caseで判別してる様なモンだろ?
662デフォルトの名無しさん:2011/11/24(木) 17:25:44.75
またこういうくだらない話が低脳のレスで埋まっていくのか。
663デフォルトの名無しさん:2011/11/24(木) 17:55:12.61
学校でc言語の課題でた
たすけて
664デフォルトの名無しさん:2011/11/24(木) 18:04:22.73
>>659
中国語をパクったパクリ言語を選択しなくても良いだろ
665デフォルトの名無しさん:2011/11/24(木) 19:05:14.42
日本に伝わった漢字を作ったのは中国じゃなくて、漢な。
モンゴル帝国の時代を経て、今のチャイナが使っているものは漢字に似た何か。
666デフォルトの名無しさん:2011/11/24(木) 19:15:40.15
>>665
それを言ったら日本も漢字に似た何かだよ。
台湾のほうがより漢字に近い
667デフォルトの名無しさん:2011/11/24(木) 19:21:24.73
東アジアの言葉の起源は日本アルニダ
中国、朝鮮の言葉は日本の言葉のパクリ言語ニダアル
668デフォルトの名無しさん:2011/11/24(木) 20:21:01.67
669デフォルトの名無しさん:2011/11/24(木) 21:18:20.79
>>606
szとかしないで普通にbufferSizeとか書けばいいじゃん。
rcvも一文字省略してなにがうれしいの。
670デフォルトの名無しさん:2011/11/24(木) 21:34:11.29
まあ、そりゃそうなんだけど、皆でよってたかってハンガリアン記法をいじめなくてもいいじゃん、と思いまして。
671デフォルトの名無しさん:2011/11/24(木) 21:36:56.40
ハンガリアン記法を強いられて、いじめられた過去があるんじゃないの?
672デフォルトの名無しさん:2011/11/24(木) 21:38:16.16
>>664
文字体系と言語体系の区別すらできないってどうよ?
673デフォルトの名無しさん:2011/11/24(木) 21:40:39.94
szはサイズのプレフィックスじゃないだろ
674デフォルトの名無しさん:2011/11/24(木) 21:42:32.15
>>669
commandLineBufferSizeとか長すぎるからだろ。
で、receiveのどこを1文字省略?
675デフォルトの名無しさん:2011/11/24(木) 21:45:55.75
recvという伝統的な関数名からさらに一文字省略
676デフォルトの名無しさん:2011/11/24(木) 21:48:54.51
>>674
それが長すぎるかどうかは状況によるな。
単語の数を減らせない状況ならcmdLneBuffSzとか省略するより、そのままのほうがいい。
677デフォルトの名無しさん:2011/11/24(木) 21:54:05.81
buffとかlenとかは使うな。
sizeはもともと短いからあんまり略さない。
プレフィックスでszとかつけると文字列っぽくなるな。
678デフォルトの名無しさん:2011/11/24(木) 21:58:37.82
ふと思ったけど、XXXの個数を表すのにcntXXXとかnumXXXとかするのはハンガリアン記法なんだろうか?
それぞれ、CountOfXXXやNumberOfXXX (キャメルケース) を省略しただけ、とも取れるような気が。
あと、szはなんで文字列なんだろう? sz => string which terminates with zeroの略?
ゼロ終端文字列なら zero-terminated string => zs じゃねーの?と、よく思う。
679デフォルトの名無しさん:2011/11/24(木) 22:01:31.04
680デフォルトの名無しさん:2011/11/24(木) 22:05:27.05
>>679
出典のないwikipなんて意味あるんだろうか。
681デフォルトの名無しさん:2011/11/24(木) 22:06:40.38
お前の妄想よりはな。
682デフォルトの名無しさん:2011/11/24(木) 22:07:15.20
>>678
szは昔のMSのコードで文字列のプレフィックスだった。
683デフォルトの名無しさん:2011/11/24(木) 22:09:06.15
>>681
おれの妄想と同程度だと思われ。
アプリケーションハンガリアンとかシステムハンガリアンとか、最近言われだした言葉なのに
それすら出典が乗ってない。
684デフォルトの名無しさん:2011/11/24(木) 22:09:58.08
じゃぁ編集しとけよ。
685デフォルトの名無しさん:2011/11/24(木) 22:12:16.55
>>684
なんで?
686デフォルトの名無しさん:2011/11/24(木) 22:20:48.41
システム・モンゴリアン・チョップ
687デフォルトの名無しさん:2011/11/24(木) 22:21:28.52
>>682
ほほう。慣習ってことですかね。

過去の資産を流用する場合等は別として、マイクロソフトでさえ非推奨なハンガリアン記法を、
あえて、いまさら使用することにメリットは見出しにくいんだけどね。
ハンガリアン記法を使ってる奴なんて、脳みそ膿んでるんじゃねーの、
とか言われると、好きにさせてくれ、と思わない訳でもないのですよ。
688デフォルトの名無しさん:2011/11/24(木) 22:22:58.65
>>687
日本語でおk。
689デフォルトの名無しさん:2011/11/24(木) 23:23:10.93
ここも雑魚スレだな
690デフォルトの名無しさん:2011/11/24(木) 23:44:38.16
雑魚乙。
691デフォルトの名無しさん:2011/11/25(金) 00:08:23.03
AIZU自動ジャッジな22番の問題に手こずる私…。
>与えられた整数の並び a1, a2, a3, , , an で、連続した項の和の最大値を出力して終了するプログラムを作成して下さい。
という問題なんだけど、
5 -1 3 -6 -3 11
という並びの最大値は 9 (全部の項の和)でしょうか、11(最後の一項のみ)でしょうか。
AIZU的な正解は 11 なんですが、連続してないように思うんですが。そういうものなのでしょうか?
高校生レベル未満の私にご教授(教示ではなく)ください。お願いします。
692デフォルトの名無しさん:2011/11/25(金) 01:09:53.37
>>1
C言語最近始めたんだけど
C言語で金を稼ぎたいんだけど、主にC言語って何ができるの
693デフォルトの名無しさん:2011/11/25(金) 01:13:03.14
>>691につられてやってみたが22がクリアできないw
答えが間違ってるとだけ言われて何がおかしいのかわからずどうすればいいんだw
694デフォルトの名無しさん:2011/11/25(金) 01:15:16.04
処理系によって、floatとdouble、またはfloatとdoubleとlong doubleの形式が同一のものがあるそうなんですが、そうすることのメリットについて具体的に教えて下さい
695デフォルトの名無しさん:2011/11/25(金) 01:16:20.20
>692
この世にあるプログラムと同等なことすべて。
696デフォルトの名無しさん:2011/11/25(金) 01:32:10.85
>>691

もしも最後の11 を 6にして、最初の手前に -100 を追加した場合は、答えは何になるのが正しいってことなの?
new                   new
-100  +5  -1  +3  -6  -3  +6

この場合は答えは7ってことなのか?

+5 -1 +3 = +7 の時が一番大きいから7ってことなの?


「任意の連続した区間の合計によって得られた、もっとも大きい数は? (要素1個だけでも連続した区間とみなす)」ってことなのか?
問題の意味が、いまいち分かりにくいんだが。
697デフォルトの名無しさん:2011/11/25(金) 01:34:26.32
>>694
floatを実装する意味がない、long doubleのサポートがコストに見合わない、
などの理由だな。
つまり、処理系側の都合ってこと。
698デフォルトの名無しさん:2011/11/25(金) 01:35:50.33
typedef struct CommandLineBufferSize_ { int value ; } CommandLineBufferSize ;
CommandLineBufferSize n = { 100 } ;
n.value = 200;
printf("%d", n.value) ;
これがベストな選択
699デフォルトの名無しさん:2011/11/25(金) 01:42:19.22
>>691
その手の問題では一つの項も含むのが普通
700デフォルトの名無しさん:2011/11/25(金) 01:55:25.78
>>699
どもです。数学的には「連続する」とはゼロでなければ
(1個であっても)連続していると考えてよいわけですね。

>>696
そういうことになりますね。
701デフォルトの名無しさん:2011/11/25(金) 02:51:20.65
さらにこの手の問題では要素0個の区間も含むと思ったが。

>>700
数学かあ... どうなんだろ。
要素1個の区間が連続で「ない」として、矛盾はないだろうか。例えば任意の連続
する区間を1か所で分断してできる2つの区間は連続であると期待されるとか...
702デフォルトの名無しさん:2011/11/25(金) 02:59:23.31
×連続する区間
○連続な区間

ああ元の話だと区間でなくて項か
703デフォルトの名無しさん:2011/11/25(金) 10:21:32.37
C言語で大富豪を作りたいです。とっかきりから教えてくれる方いませんか?
704デフォルトの名無しさん:2011/11/25(金) 10:27:10.87
まず、服を脱ぎます。
705デフォルトの名無しさん:2011/11/25(金) 10:28:43.20
>>704
次は?
706デフォルトの名無しさん:2011/11/25(金) 10:30:15.74
外交官に話を持って行きます。
707デフォルトの名無しさん:2011/11/25(金) 10:33:13.92
プルトニウムを飲んで健康になります
708デフォルトの名無しさん:2011/11/25(金) 10:33:50.38
>>703
まずおまいのC言語のレベルはどんなもんだ
配列操作くらいは一通り知らんと何ともならんぞ
709デフォルトの名無しさん:2011/11/25(金) 10:36:13.44
>>708
配列は何となくわかります。あとは構造体?とか if文?とかそのくらは授業でやったんですが。
710デフォルトの名無しさん:2011/11/25(金) 10:50:27.95
まずトランプのシャッフルからだ。
711デフォルトの名無しさん:2011/11/25(金) 10:51:23.70
>C言語で大富豪を作りたいです。
金持ちになりたいってこと?
712デフォルトの名無しさん:2011/11/25(金) 10:53:38.78
>>711
自分がじゃなくて他人を金持ちにするってことだろ。
713デフォルトの名無しさん:2011/11/25(金) 10:58:08.37
>>712
こき使われる側になりたいってことか
それ俺得意だぜ
714デフォルトの名無しさん:2011/11/25(金) 11:02:46.73
こんなマゾな仕事してる人間はほとんど、こき使われることに関してはプロフェッショナルだろ
715デフォルトの名無しさん:2011/11/25(金) 11:13:28.07
まずは4人対戦だとしたらランダムに13枚のトランプを用意するんだよね
716デフォルトの名無しさん:2011/11/25(金) 11:14:12.45
>>703
C言語でトランプゲームを作りたい
http://hibari.2ch.net/test/read.cgi/tech/1189892773/
717デフォルトの名無しさん:2011/11/25(金) 11:18:01.98
イカサマありか無しかが問題だ
718デフォルトの名無しさん:2011/11/25(金) 11:36:52.51
ローカルルールに採択について。
719デフォルトの名無しさん:2011/11/25(金) 12:50:55.43
簡単なCPUのアルゴだったら出てる数字より大きい一番小さいトランプを選択させたら良いんだろうけど
720デフォルトの名無しさん:2011/11/25(金) 12:57:06.14
アウトロー大富豪
場外乱闘がウリ。
721デフォルトの名無しさん:2011/11/25(金) 13:17:17.25
C言語でbmp画像を作ったりする方法教えてください
722デフォルトの名無しさん:2011/11/25(金) 14:10:21.64
>>721
bmpファイルを出力できるライブラリを使って作るのが無難。
723デフォルトの名無しさん:2011/11/25(金) 14:40:35.66
BMPのファイル構造調べてそれに沿ってバイナリー書き込みすればいい。
724デフォルトの名無しさん:2011/11/25(金) 15:14:11.96
のは面倒だし、大抵遅いので>>722
725デフォルトの名無しさん:2011/11/25(金) 15:39:42.18
結局、ライブラリを探せば、C言語だったらなんでもできてしまうんだよな
726デフォルトの名無しさん:2011/11/25(金) 15:59:40.77
猫でもわかるC言語の内容は理解してだいたいプログラミング
できるのですが 

もう少し高度なプログラムが組めるようになりたいのですが
お勧めの本とかありますでしょうか?

宜しければ伝授お願いいたします
727デフォルトの名無しさん:2011/11/25(金) 16:30:56.96
BMPもフルに実装すると色々気を付けないといけないんだよね
上下逆とかゴミが入ったりズレまくったりするソフトとかあったな
728デフォルトの名無しさん:2011/11/25(金) 16:36:29.02
>>726
アルゴリズムの本でも読んだらどうだろう。
でもそれよりやりたいことをしたほうが良いと思うけどね
729デフォルトの名無しさん:2011/11/25(金) 17:07:40.16
BMPは各行(行=横一列)のドット数が、何かの倍数じゃないといけなくて、(4byteだったか?)
その制約のせいで、よく表示がズレるBMPローダーライブラリーなんてのが量産されてた。

24bit ランレングス圧縮無し のBMP画像専用に限定すれば、
BMP←→char配列
の変換を行う関数は、わりと短いコードで作れるはず。

BMP←→ベタ変換ライブラリーを超コンパクトなコードで作っておけば、
こういう所に張るような、ライブラリー非依存かつ1ファイル簡潔なコードを書くときに、printfのかわりにbmp出力で結果を示すコードを簡単に書けて便利かもな。
730片山博文MZ ◆0lBZNi.Q7evd :2011/11/25(金) 17:31:13.77
下手の考え、休むに似たり
731デフォルトの名無しさん:2011/11/25(金) 19:29:26.88
何も考えないニート
732デフォルトの名無しさん:2011/11/25(金) 22:36:18.31
復活
733デフォルトの名無しさん:2011/11/25(金) 23:15:27.69
え?
734デフォルトの名無しさん:2011/11/25(金) 23:53:09.08
C言語でビットマップを作ったり弄ったりする方法が載ってるサイトがなかなか見つからないんですけど
本とかサイトでいいところありますか?
735デフォルトの名無しさん:2011/11/26(土) 00:03:48.85
【中国BBS】台湾の最も友好的な国は日本

台湾の社会福祉団体が行った調査によると、台湾の若者の56.1%が最も友好的な国は日本と答えた。

一方の87.9%の学生が友好的ではない国として中国を挙げてトップ、その次が韓国の47.4%だった。

http://news.searchina.ne.jp/disp.cgi?y=2011&d=1125&f=national_1125_031.shtml
736デフォルトの名無しさん:2011/11/26(土) 00:27:58.68
737デフォルトの名無しさん:2011/11/26(土) 01:37:35.79
質問です。
今、二次元の配列の中身をすべて出力する関数を作ろうと思っているのですが、つまずいています。

print_array( array, x, y );

のようにした場合に、x行y列分を出力できるようにしたいのですが…
関数に二次元配列を引数で渡す際、受け取る側では列の指定をしなければならないのですよね?
(勉強中なのでいまいち良く分かっていません。)
こういった場合、どうすればよいのでしょうか?
738デフォルトの名無しさん:2011/11/26(土) 01:56:36.31
>>737
こういう事?
http://codepad.org/vVlKJ6YH
739デフォルトの名無しさん:2011/11/26(土) 02:05:32.33
>>738
まさにこれでした。
ありがとうございます!
740デフォルトの名無しさん:2011/11/26(土) 06:08:42.74
インストールせずに(コピーするだけ)でコンソールでのマニュアル作業する
だけで実行できる32bit以上のコンパイラとかありますか?
少なくともDOS時代にはあった。
741デフォルトの名無しさん:2011/11/26(土) 09:13:23.21
bccあたりはどうだい?
って思ったけどググって2〜3ページ見たけどDLできなさそうだから試すのあきらめた
742デフォルトの名無しさん:2011/11/26(土) 09:28:40.46
>>740
mingwか何かでインストーラ無しの、一式をzipで固めただけのが無かったっけなあと思うが自信がない
743デフォルトの名無しさん:2011/11/26(土) 10:15:29.71
え?
BCC、フツーにエンバカデロ先生からDLできたけど・・・
744デフォルトの名無しさん:2011/11/26(土) 10:21:26.64
CD-ROMブート版Ubuntuならインストール要らないね。
745デフォルトの名無しさん:2011/11/26(土) 11:16:19.78
コンパイル環境でインストール必要なんてあり得んわ
ランタイムが関わってゴチャゴチャ過ぎて手動設定が苦しくなるのはあるけど
746デフォルトの名無しさん:2011/11/26(土) 15:06:41.52
c言語の顔文字作ったよ

(´・c・`)
747デフォルトの名無しさん:2011/11/26(土) 15:37:32.62
(´+c+`)
748デフォルトの名無しさん:2011/11/26(土) 15:45:10.80
(・c・#)
749デフォルトの名無しさん:2011/11/26(土) 16:10:33.36
(^D^)
750デフォルトの名無しさん:2011/11/26(土) 18:55:35.69
(JAVA)
751デフォルトの名無しさん:2011/11/26(土) 19:15:46.91
('A')
752デフォルトの名無しさん:2011/11/26(土) 19:45:31.35
天才プログラマーに慣れる方法教えてください
753デフォルトの名無しさん:2011/11/26(土) 19:46:26.50
バカになることじゃないの?
754デフォルトの名無しさん:2011/11/26(土) 20:23:00.78
Stay hungry, stay foolish.
755デフォルトの名無しさん:2011/11/26(土) 20:38:32.95
>752
2chを見ない。
756デフォルトの名無しさん:2011/11/26(土) 20:43:31.97
小学生の頃からプログラムを打つこと
757デフォルトの名無しさん:2011/11/26(土) 20:45:54.24
いっぺん転生すること
758デフォルトの名無しさん:2011/11/26(土) 21:09:29.63
使う言語で使う言語の再実装にチャレンジ
759デフォルトの名無しさん:2011/11/26(土) 22:08:59.45
単純にCでやったほうが楽だよ
760デフォルトの名無しさん:2011/11/26(土) 22:26:37.91
知り合いに天才プログラマいるけど、小学校のときからアセンブリとかやるようじゃなきゃダメだよ
761デフォルトの名無しさん:2011/11/26(土) 23:00:47.48
ここも雑魚だらけだな
762デフォルトの名無しさん:2011/11/26(土) 23:33:02.91
ようクズ。
763デフォルトの名無しさん:2011/11/27(日) 08:45:51.32
全部を理解して細かい部分は覚えずに
調べながらやれば十分でしょ。
764デフォルトの名無しさん:2011/11/27(日) 10:01:32.04
>>740
自分はStrawberry PerlのPortable版(strawberry-perl-5.12.3.0-portable.zip)に付属している
Cコンパイラーを使ってる。

Strawberry Perl for Windows
http://strawberryperl.com/releases.html
765デフォルトの名無しさん:2011/11/27(日) 11:42:29.21
>>764
MinGW を入れてると衝突してヤな感じなんだけど、こっちだけで使うならそれはそれでアリなのか。 目から鱗。

>>760
今30才くらいのプログラマ (俺含む) の小学生時代はアセンブリが普通な感じだったよ。
だからといってその年代に天才プログラマが多いってわけでもない。
766片山博文MZ ◆0lBZNi.Q7evd :2011/11/27(日) 12:00:45.39
libcurl使っています。
現在のURLと相対パスから絶対パスのURLを作る方法を教えてください。
767片山博文MZ ◆0lBZNi.Q7evd :2011/11/27(日) 12:36:18.33
TinyXMLとTinyXPathを使ってみることにします。
768デフォルトの名無しさん:2011/11/27(日) 12:44:16.31
>>766
自分のしたい文字列操作をするだけ
769デフォルトの名無しさん:2011/11/27(日) 13:13:41.44
これはまた、低レベルなコテだな。
770デフォルトの名無しさん:2011/11/27(日) 13:21:21.92
771デフォルトの名無しさん:2011/11/27(日) 14:16:12.38
>>770
節子、それはんだごてや
772デフォルトの名無しさん:2011/11/27(日) 14:16:31.15
コマンド引数ってなんすか?
773デフォルトの名無しさん:2011/11/27(日) 14:28:19.97
コマンドライン引数の方が正しいのかな?
コマンドプロンプト(コマンドライン)から実行する時にアプリへ渡す引数

c:\>xxx.exe [引数1] [引数2] ...
774デフォルトの名無しさん:2011/11/27(日) 14:38:08.19
このスレ的には、

int main( int argc, char *argv[] )
{
ほげほげ ・・・


の、 argv[1] 〜argv[argc-1]に入ってる文字列のこと。
(argc が 1 の場合はコマンドライン引数無し)
775デフォルトの名無しさん:2011/11/27(日) 14:38:10.59
          iヽ       /ヽ
           | ゙ヽ、    /  ゙i
            |   ゙''─‐'''"    l
         /:::\::::::::<○ >   `ヽ     コマンド引数ってなんすか?
    ((   / <○>::::::::::⌒      )
        |  ⌒(_人__)       ノ | |  
        ヽ    )vvノ:      / ノノ
          ヽ (__ン       人
         人           \
        /

776デフォルトの名無しさん:2011/11/27(日) 14:59:26.96
コマンド引数www
777デフォルトの名無しさん:2011/11/27(日) 16:22:02.93
そんなに笑うなよ(´;ω;`)
778デフォルトの名無しさん:2011/11/27(日) 16:56:18.06
いつから一発ギャグスレになったんだw
779デフォルトの名無しさん:2011/11/27(日) 17:11:18.80
みなさんC言語でどんな分野のプログラム作っているの?
自分はニューラルネット
780デフォルトの名無しさん:2011/11/27(日) 17:16:55.42
int array[10];
この場合ゼロクリアは
memset(&array, 0, sizeof(array));
でも大丈夫ですか?
781デフォルトの名無しさん:2011/11/27(日) 17:22:42.08
だめ

memset(&array[0], 0, sizeof(array));
または
memset(array, 0, sizeof(array));
782デフォルトの名無しさん:2011/11/27(日) 17:28:32.63
>>781
ありがとうございます
認識が曖昧だったので助かりました
783デフォルトの名無しさん:2011/11/27(日) 17:53:51.85
>>782
int array[10] = {0};

>>781
だめか?
784デフォルトの名無しさん:2011/11/27(日) 18:18:27.36
いつのタイミングの話だ
785デフォルトの名無しさん:2011/11/27(日) 18:33:04.81
{int zero[sizeof(array)]={0};memcopy(&array,zero,sizeof(array));}
786デフォルトの名無しさん:2011/11/27(日) 18:53:36.99
memcopy
787デフォルトの名無しさん:2011/11/27(日) 19:10:17.59
gets関数を使って、入力した文字列の文字数を表示するプログラムを教えていただきたいです。
788デフォルトの名無しさん:2011/11/27(日) 19:21:21.35
(σ・∀・)σゲッツ!!

(σ・∀・)σゲッツ!!三( ・)アンド三(σ・∀・)ターン三(・ )アンド(σ・∀・)σリバース!!
789デフォルトの名無しさん:2011/11/27(日) 19:27:49.73
>785
sizeof()はバイト単位だろ。
790デフォルトの名無しさん:2011/11/27(日) 19:29:53.01
>785
これだとzeroはスタックに詰まれるからzeroをクリアした後にarrayをクリアするから二度手間だよ。
791デフォルトの名無しさん:2011/11/27(日) 19:41:21.53
>>787
strlen()
792デフォルトの名無しさん:2011/11/27(日) 20:29:40.05
遺伝的アルゴリズムの質問は、このスレでよろしいでしょうか?
793デフォルトの名無しさん:2011/11/27(日) 20:34:00.24
遺伝的アルゴリズムの話でしたらJAVAスレが専門なのでそちらに行ってください
794デフォルトの名無しさん:2011/11/27(日) 20:35:41.31
C言語で実装する話なら、いいんじゃないかな?
795デフォルトの名無しさん:2011/11/27(日) 21:31:53.18
あれれと思って探してみたらアルゴリズムのスレってないんだな。
796デフォルトの名無しさん:2011/11/27(日) 21:51:11.10
前はあった
797デフォルトの名無しさん:2011/11/27(日) 22:06:44.45
遺伝的アルゴリズムって何ですか?
798デフォルトの名無しさん:2011/11/27(日) 22:13:29.37
最適化手法です
799デフォルトの名無しさん:2011/11/27(日) 22:23:31.53
おれもアルゴリズムで言えば遺伝と淘汰の違いがいまひとつ判らんな
800デフォルトの名無しさん:2011/11/27(日) 22:27:24.59
http://codepad.org/ybqvVD39
↑のような、コマンドライン引数で2つか3つの数字を
足し算引き算掛け算割り算するプログラムを作ったのですが、
コマンドプロンプトで数字と符号の間に半角スペースを入れずに
入力しても計算できるにはどうすればよいのでしょうか?
801デフォルトの名無しさん:2011/11/27(日) 22:33:17.39
自分で数字と演算子を切り分ける処理を入れる。
802デフォルトの名無しさん:2011/11/27(日) 22:36:36.62
>>800
構文解析すればいいよ
803デフォルトの名無しさん:2011/11/27(日) 22:40:01.35
strtokで文字列の分割処理
804デフォルトの名無しさん:2011/11/27(日) 23:31:56.09
strtol(), strtod()などで数値を切り出して、次に数字が出現するまで記号を処理すればいいよ。
strtok()を使うよりもいろんな意味でお勧め。
805デフォルトの名無しさん:2011/11/27(日) 23:36:09.48
つ yacc
806デフォルトの名無しさん:2011/11/28(月) 00:26:07.93
つgcc
807デフォルトの名無しさん:2011/11/28(月) 00:31:22.58
僕は>>800じゃないですが、
だれか>>800のプログラム作ってください
808デフォルトの名無しさん:2011/11/28(月) 00:32:26.44
>>765
小学生時代って今から20年位前か? もうちゃんとした開発環境とかあったと思うが
すごいな。

オレは小学生のときなんてゲームしかしてなかったなw 真面目にプログラムとか
書いたのは大学に入ってからだなあ。アセンブリーはさらにその後。
でもまあそこそこのレベルにはなったかな。
809デフォルトの名無しさん:2011/11/28(月) 00:35:20.28
>808
MON
*■
810デフォルトの名無しさん:2011/11/28(月) 01:52:28.36
>>807
めんどくさいから嫌だ
811デフォルトの名無しさん:2011/11/28(月) 02:05:59.51
>>807
計算式が書いてある文字列から結果を出すプログラムなら作ったけど公開する気はまったく無いよ
812デフォルトの名無しさん:2011/11/28(月) 05:31:28.85
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int ac, char **av)
{
char buf[4096], cmd[4096];
while(1){
fprintf(stdout, "formula> "); fflush(stdout);
fgets(buf, 4096, stdin); buf[strlen(buf) - 1] = '\0';
if(buf[0] == '\0') break;
fprintf(stdout, "%s = ", buf); fflush(stdout);
sprintf(cmd, "perl -e 'print eval \"%s\";'", buf);
system(cmd);
fprintf(stdout, "\n");
}
return 0;
}
813デフォルトの名無しさん:2011/11/28(月) 07:07:15.04
コマンドライン引数よりコマンド引数の方がしっくり来る。
話をむし返してなんだが。
814デフォルトの名無しさん:2011/11/28(月) 09:37:57.09
未来を指すポインタを宣言しました
815デフォルトの名無しさん:2011/11/28(月) 09:50:52.00
仮想未来へのポインタですか?
816デフォルトの名無しさん:2011/11/28(月) 10:11:57.46
NULLPTREXCEPTION
817デフォルトの名無しさん:2011/11/28(月) 12:43:14.41
>>816
ガッ
818デフォルトの名無しさん:2011/11/28(月) 13:21:52.80
http://www.kumei.ne.jp/c_lang/index.html
「猫でもわかるプログラミング」の内容はCを学習するの役に立つと
思うのですが 書籍化されてないんですかね?
819デフォルトの名無しさん:2011/11/28(月) 13:28:32.14
>>818
http://www.amazon.co.jp/dp/4797325089/

あと、そこのサイトに載っているWindowsSDK編は情報が古かったりするので注意。
820818:2011/11/28(月) 13:38:58.56
返答ありがとうございます
猫でもわかるC言語プログラミングは既に持っていてひととおりやってます

>>818のサイトのC言語編の丁半博打や石とりゲームなど
ある程度コードがながく発展的なプログラムが載っている本を
探しております
821デフォルトの名無しさん:2011/11/28(月) 14:17:16.69
>>820
Amazonで同じ著者の本を探してみたけど、こういうのしかなかった。
http://www.amazon.co.jp/dp/4797355581/

英語だけど、The C Programming Languageに逆ポーランド記法の電卓プログラム等、
少し発展的なプログラムが載ってる。C言語のバイブル的な本で評価高い。
あと、私は読んだことがないのですが、The Art of Computer Programming という本はアルゴリズムを学ぶのに最適らしいです。
822818:2011/11/28(月) 14:25:06.71
ご丁寧にありがとうございます

紹介して下さった3冊 参考にさせて頂きます
823デフォルトの名無しさん:2011/11/28(月) 14:41:46.23
>ある程度コードがながく発展的なプログラム
自己満足に浸るにはもってこいの素材だね。
824デフォルトの名無しさん:2011/11/28(月) 15:39:59.20
>>820
Code Compliteとinside Windows読んどけ
あとプログラミング作法とそれに書いてある本全部
825デフォルトの名無しさん:2011/11/28(月) 18:57:37.52
エクセルの以下の関数をC言語で実装したいのですが、
エクセルのヘルプを見てもΣの解法がわかりません。
どなたか教えて頂けないでしょうか。

 STEYX
 GROWTH
 FORECAST
 TREND
 LINEST

エクセルのヘルプを見たのですが、STEYX の計算式の一部には

nΣy^2

のようにΣが使われています。
通常シグマとは、

 10
 Σ 2i
 i=0

のように、上と下に条件がついているものだと思ってます。
上にも下にも数字の付いていないシグマはどのように計算したらよいでしょうか。
826デフォルトの名無しさん:2011/11/28(月) 19:28:14.79
C関係ねえよ
上下限無ければ集合全体だよ
827デフォルトの名無しさん:2011/11/28(月) 19:31:15.43
標準誤差を使いたい人は標準誤差の求め方を知っているだろうというのは無理があるのかな。
828デフォルトの名無しさん:2011/11/28(月) 19:50:34.72
>>826
集合全体、というと?
-∞から∞ってこと?
829デフォルトの名無しさん:2011/11/28(月) 19:51:36.52
指定範囲のセル全体
830デフォルトの名無しさん:2011/11/28(月) 20:47:03.41
どうせベクトルの絶対値でしょ?
ベクトルの要素全部を2乗して足してってるだけじゃね?
831デフォルトの名無しさん:2011/11/28(月) 21:34:47.99
ここほんとに入門編でつか?チンプンです。
832デフォルトの名無しさん:2011/11/28(月) 23:34:26.64
>>825
http://www.geisya.or.jp/~mwm48961/statistics/correl.htm
数学の基礎からやり直したら
833デフォルトの名無しさん:2011/11/28(月) 23:58:34.33
m=1;
834デフォルトの名無しさん:2011/11/29(火) 00:47:19.58
>>831
多くの質問者は、どこまでいっても初心者って感覚だよ
実際プログラミングってのは上には上がいるから、そういう気分にもなるし
ある分野が得意な人も、それを一歩出れば、他の分野のことはサッパリってのは割とよくある

まあ、気にせずお前が入門だと思うなら質問すればいいんじゃね
あんまりぶっ飛んでたらツッコミ入るさ
835デフォルトの名無しさん:2011/11/29(火) 02:36:47.06
10年前からhello worldしか書けない俺が居ます。
836デフォルトの名無しさん:2011/11/29(火) 03:01:19.28
>>835
がんばれ〜
837デフォルトの名無しさん:2011/11/29(火) 03:20:48.20
winapiとかDirectXとかなしでC言語でどこまでゲームを作れるんだろう?
838デフォルトの名無しさん:2011/11/29(火) 03:43:48.77
>>837
君のスキルしだいだ
839デフォルトの名無しさん:2011/11/29(火) 07:04:19.26
ジグソー「ゲームをしよう」
840デフォルトの名無しさん:2011/11/29(火) 08:31:19.29
標準準拠で入力がなければすぐ抜ける入力ってないよね
と言うことはリアルタイムゲームは製作不可能だろう
非リアルタイムならばコンソールの面積をでかくするほど文字をドットに近似できるからほぼ何でも作れる
841デフォルトの名無しさん:2011/11/29(火) 08:37:26.89
>>840
別途入力だけ受け付けるプログラムを作っておいて
入力されたらテキストファイルに書き込む
ゲーム側で永久ループでテキストファイルを読み込んで
書かれていた文字に関して処理をする(毎回オープン&クローズしないといけない)

でどうだろう
コンソール二つ開く必要があるが
842デフォルトの名無しさん:2011/11/29(火) 09:10:18.39
C標準だけでなんとかしようとするのは構わないが
それに拘り過ぎるのはどうかと思うよ

環境依存を減らしたきゃクロスプラットフォームなライブラリもあるし
そういうの使って思い切り書く方がいいと思うが
843デフォルトの名無しさん:2011/11/29(火) 11:36:27.87
どなたか教えて下さい。
マイコンのプログラムをgccで作成しています。
指定時間の遅延が欲しいのでusleep()を使おうと思いましたが、
そんな関数ないよとエラーが使用できません。
調べていったら、sleep()が_exfunというマクロ?で定義されているのですが、
これはどういう意味でしょうか?

unsigned _EXFUN(usleep, (unsigned int __useconds));
844デフォルトの名無しさん:2011/11/29(火) 11:44:43.81
>>843
そのマイコンのマニュアルを見ろ。
845デフォルトの名無しさん:2011/11/29(火) 11:45:32.72
>>843
unsigned usleep(unsigned int __useconds);
だと解釈しとけば問題ない。

そんな関数ないよっていうのは、実際にないのでは?
846デフォルトの名無しさん:2011/11/29(火) 11:54:54.95
範囲内で2ループさせたいのですが変数を使わないで行えますか?
847843:2011/11/29(火) 11:54:55.85
>>845

ヘッダファイルに定義されているのだから、関数本体も当然ある物だと思っていました。
確認しましたら、usleep.c自体がありませんでした。
自分で相当の機能を作り込めって事ですね。

exfunの用途・意味を教えて頂けると助かります。
848デフォルトの名無しさん:2011/11/29(火) 11:59:13.31
>>846
組込みなら、ポート見るとか。
849デフォルトの名無しさん:2011/11/29(火) 11:59:40.20
>>847
コンパイラによってプロトタイプの形式を変えるためにあるんじゃないの?
こんなの(↓)の中から適当な定義が有効になるようになってるでしょ。

#define _EXFUN(name, proto) __cdecl name proto
#define _EXFUN(name, proto) name proto
#define _EXFUN(name, proto) name()

つかヘッダファイル検索してまわればすぐわかるだろ。
850デフォルトの名無しさん:2011/11/29(火) 12:03:46.22
>>848
ごめんなさい、ポートとはなんでしょうか?
851デフォルトの名無しさん:2011/11/29(火) 12:05:47.32
てめえが使おうとしてる環境も出さずに質問とはたいした奴だな
852デフォルトの名無しさん:2011/11/29(火) 12:19:13.67
範囲内って何の範囲?
853デフォルトの名無しさん:2011/11/29(火) 12:26:49.05
指定した範囲だ。
854デフォルトの名無しさん:2011/11/29(火) 12:55:59.85
コピペしろ。
855デフォルトの名無しさん:2011/11/29(火) 13:00:05.18
ナニで指定した範囲だ?
856デフォルトの名無しさん:2011/11/29(火) 14:10:15.80
ナニで指定した範囲だ。
857デフォルトの名無しさん:2011/11/29(火) 14:16:22.54
VC++2008でグローバルフックの練習をしています。
やりたいことは、オンマウスでそのウインドウやコントロールのクラスIDやHWNDを
取得したいのですが、グローバルフックを行ってもどうもうまく処理されません。
フックプロシージャの中で
if (wp == WM_MOUSEMOVE)
{
  TCHAR cn[255];
  int cnt;
  memset( cn, 0x00, 255 );
  _stprintf( cn, _T("(%d %d)\n"), pmh->pt.x, pmh->pt.y );
  SetWindowText( hWnd, cn );
  return TRUE;
}
として、単純に大本となるEXEのキャプションに座標を表示しているのですが、
クライアント領域以外になると、処理されなくなるようなのです。
グローバルフックで全てのアプリケーションのボタンとかのHWNDを取得できる方法を知りたいのです。
最終的には、選んだコントロールのHDCを切り取って、画像を保存することなのですが、
どなたか、ご存知の方、お教え頂ければ幸いです。
858デフォルトの名無しさん:2011/11/29(火) 19:07:26.77
>>847
sleepはハードのタイマーとかが絡んでくるから、自分で実装する
妄想だがexfunは標準では提供していないから自分で作れ関数ってことだろ
859デフォルトの名無しさん:2011/11/29(火) 19:55:36.08
>>825 です。
おかげさまでシグマの関連は実装することができました。
ですが、どうしても GROWTH 関数だけ実装することが出来ません。
どう実装したらよいでしょうか。
860デフォルトの名無しさん:2011/11/29(火) 21:09:16.12
http://atiboh.sub.jp/t11shisuukinzi.html
この辺見たらなんかわかるんでない
861デフォルトの名無しさん:2011/11/29(火) 22:01:57.09
お聞きしたいのですが文字列を名前の昇順にソートするにはどうすればいいのですか?

862デフォルトの名無しさん:2011/11/29(火) 22:05:22.22
qsort()使えばいい。
863デフォルトの名無しさん:2011/11/29(火) 22:09:16.89
>>861
「文字列を名前の昇順にソート」じゃ意味がさーっぱり解らんぞ
文字列は確かに配列とみなせるが、入ってるのは文字(コード)であって名前じゃない
ひとつの文字列の中の文字を、文字コード順に並べかえて別の文字列にするということか?
仕様が曖昧過ぎる
864デフォルトの名無しさん:2011/11/29(火) 22:16:14.59
少し質問させてください

C言語で512行以上書き出せないんですけどそういう仕様なんでしょうか?
追加書込みfopen("out.csv","a")で開いてるんだけど512行以降が出力されない……
コンパイラはMinGWでgccです
865デフォルトの名無しさん:2011/11/29(火) 22:20:33.28
>862
構造体配列に氏名を入力し氏名の五十音順の昇順に並べ替えて
出力したいのですがさっぱりわからないのです。

866デフォルトの名無しさん:2011/11/29(火) 22:21:03.36
>>864ですけど自己解決しました
スレ汚し失礼しました
867デフォルトの名無しさん:2011/11/29(火) 22:59:34.59
>>865
とりあえず、
>構造体配列に氏名を入力し
の部分を、Cのコードでどう書こうとしてるのか書いてみ?
868デフォルトの名無しさん:2011/11/29(火) 23:05:18.75
C++なんですがこちらで質問です
とあるクラスのOperator+を定義したところ
CHoge CHoge::operator+( const CHoge& val )
{
MNBigUint _obj(*this);
_obj += val;
return _obj;
}
869デフォルトの名無しさん:2011/11/29(火) 23:07:42.36
すみません、ミスって投稿してしまいました

C++なんですがこちらで質問です
とあるクラスのOperator+を定義したところ。
適切なコピーコンストラクタがありませんというエラーが発生してしまいます。

CHoge CHoge::operator+( const CHoge& val )
{
CHoge _obj(*this);
_obj += val;
return _obj;
}

operator+=は定義済みで正常に動いています。
コピーコンストラクタ(CHoge ( const CHoge& ))も定義済みで正常に動いています。
何がまずいのかさっぱりわからないので助けて下さい。
870デフォルトの名無しさん:2011/11/29(火) 23:08:30.04
#include <stdio.h>
struct PIXEL {unsigned char r,g,b,e;};
void draw_sandstorm_fb(struct PIXEL* a,int w,int h) {
        int i = w*h;
        while (i-->0) {a[i].r=a[i].g=a[i].b=rand()&0xFF;}
}

void print_fb_scr(FILE* scr,struct PIXEL* a,int w,int h) {
        fseek(scr,0,SEEK_SET);
        fwrite(a,1,4*w*h,scr);
}

main() {
        FILE* scr=fopen("/dev/fb0","wb");        // または"my_fb0"など
        const int w=1920, h=1080;
        struct PIXEL fb[w*h];
        while(1) {
                draw_sandstorm_fb(fb,w,h);
                print_fb_scr(scr,fb,w,h);        
        }
}
871デフォルトの名無しさん:2011/11/29(火) 23:13:55.59
>867
for(i=0; i<3; i++ ){
printf( "%d番目の人の情報を入力してください\n",i+1 );
printf( "まず氏名を入力して下さい\n" );
fgets(linebuf,BUFSIZE,stdin);
sscanf(linebuf,"%s",&Person1[i].name);

printf( "住所を入力して下さい\n" );
fgets(linebuf,BUFSIZE,stdin);
sscanf(linebuf,"%s",&Person1[i].address);

printf( "年齢を入力して下さい\n" );
fgets(linebuf,BUFSIZE,stdin);
sscanf(linebuf,"%s",&Person1[i].age);
printf( "\n" );
}

こんな感じで書いてます。
872デフォルトの名無しさん:2011/11/29(火) 23:20:12.77
>>871
とりあえず、50音順にソートしたいなら、氏名だけでなく、
よみがなを入力させないと無理だろう。
873870:2011/11/29(火) 23:20:24.59
>>840
linuxの場合は標準的なC関数のみで、画面へのグラフィック描画が可能です。
標準C関数のみではprintfくらいしかできないという一般的なイメージはdos/windowsの影響が大きいのかもしれません。

ビルド方法:
ファイル名を a.c だとして
gcc a.c

実行方法:
sudo ./a.out

なぜ sudo (スーパーユーザー権限での実行)をするかというと、スペシャルファイル /dev/fb0 は、標準ユーザーでは直接読み書きできない設定にされてる場合があるからです。



そこで、フレームバッファーのスペシャルファイルを、/dev/fb0ではなく、自分用に標準ユーザー権限で作成すれば手軽に実験できて良いかもしれません。
(実行時に sudo しなくて済むように)

方法:
my_fb0という名前で作るとして
sudo mknod -m 666 my_fb0 c 29 0
sudo chown ユーザー名:ユーザー名 my_fb0

これで、my_fb0というファイル(スペシャルファイル)に対して、標準ユーザー状態で読み書きできます。
適当なプログラムで my_fb0 というファイルに対して数字を書き込むだけで、フレームバッファーに対応した画面の各ピクセルの発光度合いを調整できます。
874870:2011/11/29(火) 23:24:01.99
備考:
xwindow上では動きません。
起動直後のdosっぽい黒い画面で動きます。

 xwindow上で Alt+Ctrl+F1〜F6などで、その画面へと切り替えられるかもしれません。
 xに戻る時はAlt+F7orF8かもしれません。

875デフォルトの名無しさん:2011/11/29(火) 23:24:25.01
Windowsではどうするの?
876デフォルトの名無しさん:2011/11/29(火) 23:27:58.42
>872
もしかしてよみがなを入力してそのよみがなを文字コードにして
それを比較しないとできないってことですか?
877デフォルトの名無しさん:2011/11/29(火) 23:32:58.71
>>876
火星
↑読みが「びーなす」かもしれないし「まあず」かもしれない。
読み仮名入力しないと分からない→比較できない→ソートできない
878デフォルトの名無しさん:2011/11/29(火) 23:38:32.27
>>870
20年前のUNIXでそんなコード見たな。
進歩のないやつめ。
879デフォルトの名無しさん:2011/11/29(火) 23:51:48.65
というか文字コード順番に並んでるのかな
880デフォルトの名無しさん:2011/11/30(水) 00:03:02.39
文字コードは順番に並んでいると思います
881デフォルトの名無しさん:2011/11/30(水) 00:03:56.88
>>876
漢字のままでも文字コード順になるよ。
882デフォルトの名無しさん:2011/11/30(水) 00:04:41.56
>>881
音読みとか訓読みとか知ってるか?
883デフォルトの名無しさん:2011/11/30(水) 00:08:26.77
>>882
もちろん知っているが、>>876の口ぶりからすると、文字コード順にソートすることが大変難しいことのように思っているのかとおもって。
884デフォルトの名無しさん:2011/11/30(水) 00:11:19.89
EUCとかSJISとかなら大体音読み順になるでしょ。
885876:2011/11/30(水) 00:11:34.30
はい、文字コード順にソートするの難しく感じてます。
数値をソートするのは簡単なのですが・・・
886デフォルトの名無しさん:2011/11/30(水) 00:12:35.96
なんかそういう読み方予想してくれるDLLかなんかあった気がする
887デフォルトの名無しさん:2011/11/30(水) 00:12:43.55
>>885
入門編だからstrcmpでいいよ
888デフォルトの名無しさん:2011/11/30(水) 00:15:25.80
strcmpを使うにしても比較したあとに
どうすればいいかが分からないのです。
例えばstrcmpだと比較して文字が同じなら0で
違ったら−1を返すんですよね?
889デフォルトの名無しさん:2011/11/30(水) 00:16:04.19
違うべ
890デフォルトの名無しさん:2011/11/30(水) 00:19:44.08
>>888
strcmpは大小を返す。
文字列の大小が何をさすのかはその辺当たってもらうとして、
よみがなを入力するようにして、strcmpとqsortを使えば目的は達すると思われる。

よみがなをいれずとも、辞書順、たとえばWindowsのファイルの名前順でソートしたときと同じような結果は得られる。
そのときの順番は「ひらがな→カタカナ→漢字(大体音読み)」になる。
大体ってのは、常用外漢字とかがへんな位置に配置されてるため、ずいぶん後ろに追いやられる。
891デフォルトの名無しさん:2011/11/30(水) 00:28:35.78
構造体に氏名・年齢・住所を入力するようになっていて
仕様によみがなを入力するようにはなっていないのですが
この場合もqsortとstrcmpでできますか?
892デフォルトの名無しさん:2011/11/30(水) 00:33:25.28
ああごめん、構造体の大小を比較する関数を作る必要がある。
内容は、受け取った2つの構造体の氏名のstrcmpの結果を返却するだけでいい。

んで、qsortの使い方がわかりにくいと思うけど、例などを見てやってみてください。

そのあと、よみがなに対応すればいいとおもう。
893デフォルトの名無しさん:2011/11/30(水) 00:44:43.98
アドバイスありがとうございます。
少し分かったのでプログラム組んでみますね
894デフォルトの名無しさん:2011/11/30(水) 12:27:15.53
>>868-869
CHoge ( CHoge& )を定義しなきゃ
それで分からないならC++相談室の方へ
895デフォルトの名無しさん:2011/11/30(水) 18:47:34.33
int* p;
int *p;

int* func(void);
int *func(void);

int* Class::func(void);
int *Class::func(void);

どっちにすべきなんでしょうか
896デフォルトの名無しさん:2011/11/30(水) 18:56:06.77
どっちでもいい。そんなことを気にしていたら永久にコード書けないよ
897デフォルトの名無しさん:2011/11/30(水) 18:58:25.67
2番目が好き
898デフォルトの名無しさん:2011/11/30(水) 19:05:21.41
int* p,q;
899デフォルトの名無しさん:2011/11/30(水) 19:22:52.78
前者はC++の人の間で流行り始めた悪臭
古き良き正統派C利用者は後者一択
900デフォルトの名無しさん:2011/11/30(水) 19:24:23.50
int * p ;
が一番スタンダードかな
901デフォルトの名無しさん:2011/11/30(水) 19:27:32.08
>>895
整形ツールに任せる。
902デフォルトの名無しさん:2011/11/30(水) 19:32:47.79
プロポーショナルに慣れるとコードの書式なんてどうでも良くなる
めんどくさくなって改行すら真面目にしなくなるけど意外と読みやすいという不思議
この事実は有益なのでプロポーショナルフォントをもっと流行らせるべき

903デフォルトの名無しさん:2011/11/30(水) 19:37:07.84
>>902
プロポーショナルでもコードの書式は重要だよ。
904デフォルトの名無しさん:2011/11/30(水) 20:22:11.65
質問なのですが自分でヘッダファイルを作ろうと思うのですがグローバル変数は作らないほうがいいんでしょうか?
905デフォルトの名無しさん:2011/11/30(水) 20:27:27.14
プログラムが分かりやすくなるならどんどん使うべき
906デフォルトの名無しさん:2011/11/30(水) 20:34:01.53
グローバルでわかりやすくなることってほとんどないよね
ウィンドウのクラス化する時とかに仕方なく使ったりはするけど
907デフォルトの名無しさん:2011/11/30(水) 20:38:13.09
>>905-906
ありがとうございます。
後グローバル変数にはexternを付けるべきとか見たのですが何故なんでしょう?
後定義ファイルに#defineは使っていいですか?
質問ばかりですみません
908デフォルトの名無しさん:2011/11/30(水) 20:42:17.76
externをつける意味を理解してるなら自ずと付けるべきかそうでないかの区別はつく
わからないということはexternがなんだかよくわかってないということなんだろう
事故を起こす前にもう一度調べなおしたほうがいいよ
まあ結論だけ言うとヘッダに書くときはつけるが正解なんだけどね
909デフォルトの名無しさん:2011/11/30(水) 20:46:23.25
externが付いてるのは宣言・・・こういうのがありますよっていう宣言。
ついてないのは定義・・・実際にメモリを確保して実体を作る。

ヘッダに定義があったら、それを複数のファイルでインクルードした時に、
同じ名前の実体が複数できちゃうので、リンカが怒る。
ぶっちゃけるとだいたいそんな感じ。
910デフォルトの名無しさん:2011/11/30(水) 21:38:03.93
>>908-909
分かりやすい解説ありがとうございました。
911 ◆QZaw55cn4c :2011/11/30(水) 21:45:53.97
>>909
初期化 int x = 0; という書き方さえしなければ、extern はいかなる場合も不要。
宣言時の初期化にメリットはあまりないので、実際の初期化はコードで行い extern を一切使わないやりかたもある。
912デフォルトの名無しさん:2011/11/30(水) 22:00:09.53
>>911
それってたぶんC++だと怒られるよね。
まあ共用しないならいいけど。
913デフォルトの名無しさん:2011/11/30(水) 22:02:45.61
サーバーに公開したSVNリポジトリをブラウザから閲覧したりコミットしたりコメント残したりできるツールないですかね
RedmineとかTracみたいなやつでもっと簡素なやつないですかね
914デフォルトの名無しさん:2011/12/01(木) 00:36:17.55
コンソールからが一番簡単
915デフォルトの名無しさん:2011/12/01(木) 00:40:05.25
hgのhttpサーバが簡素
916デフォルトの名無しさん:2011/12/01(木) 05:14:29.40
フォー!!
917デフォルトの名無しさん:2011/12/01(木) 05:19:44.75
HGというとMELCOのHDDを思い出す
918デフォルトの名無しさん:2011/12/01(木) 05:20:34.98
故障率 No.1
919デフォルトの名無しさん:2011/12/01(木) 05:37:19.21
話がズレてるけど簡素なHTTPDならBusyBoxに勝る物無し
920デフォルトの名無しさん:2011/12/01(木) 06:49:26.37
日本の全産業の雇用の調整便がIT技術者
昭和に作られた大手の時代遅れの雇用環境を守るため搾取され使い捨てにされるのがIT技術者
古い産業の既得権益を守るため新しい産業の人材が搾取されるのがこの国のシステム
お客さんに素晴らしいサービスを届けたい
技術を蓄積して海外との競争に勝ちたい
そんな純粋な気持ちは踏みにじって面倒なことは下請け丸投げで
楽して生活費を稼いで問題が起きたら知らん振りするのが日本人
921デフォルトの名無しさん:2011/12/01(木) 17:25:51.09
クイックソートが一番早い言語ってどれ?
ちなみに100億個の整数ソートです。
922デフォルトの名無しさん:2011/12/01(木) 17:32:33.97
>>921
おれならopenCL
923デフォルトの名無しさん:2011/12/01(木) 17:33:28.68
>>921
クイックソートじゃ無理
924デフォルトの名無しさん:2011/12/01(木) 17:33:52.61
>>921
100億個だとオンメモリは厳しいね。
ちなみに、何のデータ?
925デフォルトの名無しさん:2011/12/01(木) 17:41:42.02
>>924
メモ帳に書いた100億個の数字かなぁ。
926デフォルトの名無しさん:2011/12/01(木) 17:47:39.95
>>921
マージソートでやれ
927デフォルトの名無しさん:2011/12/01(木) 18:09:47.27
10年前と比べてC言語の処理速さってどれくらいアップしたの?
928デフォルトの名無しさん:2011/12/01(木) 18:33:04.33
10年前だと1GHzになったくらいだからまぁ10倍前後だな。
929デフォルトの名無しさん:2011/12/01(木) 18:59:28.21
(´・ω・`)モワッ
930デフォルトの名無しさん:2011/12/01(木) 20:48:31.53
>>921
ランを使ったファイルでのマージソート
931デフォルトの名無しさん:2011/12/01(木) 22:21:01.26
>>921
おもしろいとでも思ったんだろうがとんだクソだったな。
932デフォルトの名無しさん:2011/12/01(木) 22:30:34.16
雑魚スレだな
ガチホモ兄貴いる?
933デフォルトの名無しさん:2011/12/02(金) 00:33:38.77
ネットワークで分散ソート
934デフォルトの名無しさん:2011/12/02(金) 00:36:33.86
マルチコアで分散でよくね?
935デフォルトの名無しさん:2011/12/02(金) 02:42:09.65
ちょっと困った事があるんだ。聴いてくれる会?

VC2008Expressでクラスのエクスポーツをしたいんですけど、
ビルドするとゴルァされるんだよ。


#define EXPORT __declspec( dllexport )

class EXPORT BASECLASS
{
public:
 BASECLASS()=0;
 virtual BASECLASS()=0;
};

class CHOMECHOMECLASS
{
public:
 CHOMECHOMECLASS();
 ~CHOMECHOMECLASS();
};


BASECLASSのコンストラクタにvirtualを付けないでビルドすると
「仮想関数が、純粋関数または抽象オーバーライド関数であると指定されています」で、
virtualを付けてビルドすると、↑のに更に付け加えて
「'inline' のみがコンストラクタの正しいストレージ クラスです」
って言われるんだわ。

nline BASECLASS()=0; でもダメみたいでね、
ググっても同じ事象が見つけられないし、参考書買う金も無い俺にはお手上げです。
誰か解決方法教えてくダサい。
936デフォルトの名無しさん:2011/12/02(金) 02:44:16.08
ごめん、CHOMECHOMECLASS間違えてた。訂正ね。

class CHOMECHOMECLASS : public BASECLASS
{
public:
 CHOMECHOMECLASS();
 ~CHOMECHOMECLASS();
};
937デフォルトの名無しさん:2011/12/02(金) 03:04:48.27
BASECLASSのコンストラクタとデストラクタを定義しないと
ビルドされるんだけど、それでいいのか?

連投すまぬ
938デフォルトの名無しさん:2011/12/02(金) 03:05:45.41
virtual BASECLASS()=0;
って
virtual ~BASECLASS()=0;
の間違い?
939デフォルトの名無しさん:2011/12/02(金) 03:07:58.16
こうじゃないの?

class EXPORT BASECLASS
{
public:
 virtual ~BASECLASS() {}
};
940デフォルトの名無しさん:2011/12/02(金) 03:46:54.05
そうです。
そこも間違えていましたね。スマッソ
941デフォルトの名無しさん:2011/12/02(金) 04:39:16.34
あ〜、違うよ。
俺、視力弱いみたいで見間違えてた。

正しくは、↓こういう風にしたかったんだ。

#define EXPORT __declspec( dllexport )

class EXPORT BASECLASS
{
public:
 virtual BASECLASS()=0;
 virtual ~BASECLASS()=0;
 virtual bool Create(int)=0;
 virtual void Release()=0;
};

class CHOMECHOMECLASS : public BASECLASS
{
public:
 CHOMECHOMECLASS();
 ~CHOMECHOMECLASS();
 bool Create(int);
 void Release();
};

でね、これだとBASECLASSのコンストラクタとデストラクタでエラーになるのね。
コンストラクタとデストラクタを削除するとエラーは0でビルドできるんですわ。

それで正解なのかもしれないけれど、腑に落ちないというか・・・
コンストラクタもデストラクタも記述したいな〜ってのが本音。
942デフォルトの名無しさん:2011/12/02(金) 04:54:20.96
>>941
ふがっ
943デフォルトの名無しさん:2011/12/02(金) 05:04:27.50
実体の無い物はエクスポートしようがない。
コンストラクタとデストラクタを削除すると、暗黙のデフォルトコンストラクタとデストラクタの実体が生まれるのでエクスポートできる。
944デフォルトの名無しさん:2011/12/02(金) 05:05:36.39
と、書いたもののあまり自信はなく、C++スレで聞いてみてはいかがか。
945デフォルトの名無しさん:2011/12/02(金) 05:39:43.16
コンストラクタにvirtualは必要ないだろ チョメチョメのほうが生成されるときに自動でベースのコンストラクタ→チョメチョメのコンストラクタって呼ばれるものだろうし
デストラクタはvirtualつけてもチョメチョメ→ベースの順で呼ばれるものだから純粋仮想関数だとまずいとかなんじゃない?
 BASECLASS() {};
 virtual ~BASECLASS() {};
としておけばいいんじゃね?
946デフォルトの名無しさん:2011/12/02(金) 06:03:43.66
デストラクタを純粋仮想関数にするのはインスタンス生成を不可とするためにやるが
947デフォルトの名無しさん:2011/12/02(金) 09:09:58.56
スレチの話題延々続けるチンカスは死んだほうがいいよね
948デフォルトの名無しさん:2011/12/02(金) 10:28:41.63
CとC++を厳密に分ける必要ってある??
949デフォルトの名無しさん:2011/12/02(金) 10:31:33.51
ある。
950デフォルトの名無しさん:2011/12/02(金) 10:42:32.25
勘違いしている阿呆を排除できるのはメリットだな。
951デフォルトの名無しさん:2011/12/02(金) 11:16:54.31
C++のクラスをDLLにしない方が良いって言われてるけど
みんなどうしてんのかな
952デフォルトの名無しさん:2011/12/02(金) 11:20:42.66
しない方が良い
953デフォルトの名無しさん:2011/12/02(金) 11:24:11.03
Cのインターフェイスだけ外に見せるようにラップしてる。
954デフォルトの名無しさん:2011/12/02(金) 11:34:46.06
馬鹿には無理
955デフォルトの名無しさん:2011/12/02(金) 11:56:53.33
>>951
COM
956デフォルトの名無しさん:2011/12/02(金) 13:27:09.81
引数をたった1個節約するだけなのにスレッドじゃインスタンスじゃなんじゃと言語内で片付けられん要素が多すぎるからな
957デフォルトの名無しさん:2011/12/02(金) 17:22:31.06
virtual f() =0 は純粋virtual関数。(関数定義の最後に =0 を付けると、純粋virtual関数としての宣言)

純粋仮想関数は、そのクラス内では内容を定義できない。
かつ、派生クラス内では「必ず、内容を定義しなくてはならない」のが純粋仮想関数。
たとえば
class A { virtual f() = 0; }
は、A::f() { printf("hello"); } として内容を定義することはできない。
かつ、
A から派生したクラスでは、f() を”必ず”定義しなくてはならない。(定義し忘れるとエラーになる)
class B : A { virtual f(); }
B::f() {printf("hello");}

全ての関数が純粋仮想関数の基底クラスを、とくに抽象基底クラスという。抽象クラスはインスタンスを生成できない。
しかし、定義としてなら使用できる。たとえば A->f() として任意の関数内等で利用するだけなら行える。(エラーにならない)
void test(A* a) {a->f();}

Aは抽象クラスなので a=new Aできないので、一見 test() は実際には利用できないように思えるが、
Aから派生したBなら、インスタンス生成できるので、b=new BをA型に型変換して渡すことはできる。
test((A*)b);
つまりAから直接派生したクラスでは、それぞれが必ず独自に f() を再定義していることが、言語として保証される。
派生クラスBを作る際に、最低限自前で用意しなければならない関数名のリスト。雛形に相当するのがA。

なぜこんな仕組みが用意されているかというと、ポリモフィズムを言語的に保証するため。
f() を定義しわすれるとエラーになるという言語仕様は、将来的にAの派生クラスを増やしても、ポリモフィズム動作する関数test()が破綻しないという保証になる。

純粋仮想関数は、派生クラスを定義したなら、必ず派生クラス内で再定義されなくてはならないが、デストラクタを純粋仮想関数とした場合。
class A { virtual ~A() = 0; } の場合は、
class B : A { ~A() {} } と必ず ~A() を定義しなければならないことになる。しかし、
~A() の名前(デストラクタ名)での関数定義は、クラスA内でしか許されない。クラスB内で~A()の名前での定義はエラーとなる。

最近のC++は知らないが、namespace登場以前のC++では、コンストラクタは特別で、通常のvirtualにさえできなかったはず。
958デフォルトの名無しさん:2011/12/02(金) 17:27:37.23
もしかしてスレ違いなんじゃね?
959デフォルトの名無しさん:2011/12/02(金) 19:52:28.73
>>957
> 純粋仮想関数は、そのクラス内では内容を定義できない。

> たとえば
> class A { virtual f() = 0; }
> は、A::f() { printf("hello"); } として内容を定義することはできない。

上記は正しくないかと…C++11のFDISで申し訳ないけど
10.4p2
A pure virtual function need be defined only if called with, or as if with (12.4), the qualified-id syntax (5.1).

実際にコンパイルすると通ります:
ttp://ideone.com/zIWSs

ただ、クラス定義の中で純粋指定子と関数定義の両方を与えることはできません(10.4p2)
struct C {
 virtual void f() = 0 { }; // ill-formed
};

あと、コンストラクタは、仮想関数にはなれません:
12.1p4
A constructor shall not be virtual (10.3) or static (9.4).
960959:2011/12/02(金) 21:19:23.12
ごめん>>957をよく読んでなかった

> 純粋仮想関数は、そのクラス内では内容を定義できない。

は、あってる
961デフォルトの名無しさん:2011/12/02(金) 23:29:06.14
scanfなりgetcharなりのバッファに改行残す仕様って何なん?
バグの要因にしかならん気がするんだが
962デフォルトの名無しさん:2011/12/02(金) 23:31:00.10
例えばどういう動きの事?
963デフォルトの名無しさん:2011/12/02(金) 23:34:43.80
次のscanfが改行のバッファを食ってしまうところ
964デフォルトの名無しさん:2011/12/02(金) 23:39:21.46
よくわかんね。読まなきゃ残ってるに決まってるじゃんと思うけど。
965デフォルトの名無しさん:2011/12/03(土) 00:25:40.72
入門編スレならではの話題だなw
966デフォルトの名無しさん:2011/12/03(土) 00:33:05.42
C言語でQRコードを読み取るにはどうすればいいですか?
967デフォルトの名無しさん:2011/12/03(土) 00:36:40.58
>>966
QRコードを読み込むライブラリがあった気がするからそれ使えばいいんじゃないか
968デフォルトの名無しさん:2011/12/03(土) 00:39:14.70
>>967
標準のライブラリ以外は使用禁止されてるんで無理です^^;
969デフォルトの名無しさん:2011/12/03(土) 00:42:04.62
>>968
標準ライブラリだけで全部やらとなるとけっこう大規模だよ。
画像のデコードやら認識やら全部手で書くはめになるじゃん。
970デフォルトの名無しさん:2011/12/03(土) 00:42:10.52
まずスキャナを用意します
971デフォルトの名無しさん:2011/12/03(土) 00:43:03.52
>>969
/(^o^)\
972デフォルトの名無しさん:2011/12/03(土) 00:58:37.96
>>968
冗談だろ・・・
973デフォルトの名無しさん:2011/12/03(土) 00:59:30.41
ここじゃとても扱いきれん
全部真面目にやったら本が一冊書ける……というか、もうありそうだ
974デフォルトの名無しさん:2011/12/03(土) 00:59:50.73
>>972
冗談じゃないよ
課題なんだけどそう告げられた
975デフォルトの名無しさん:2011/12/03(土) 01:00:27.88
>>968
何行あるプログラムを作る気だよ・・・
976デフォルトの名無しさん:2011/12/03(土) 01:05:54.39
撮影した画像を台形補正して二値化して使用に則って変換するだけだろ
特に難しいこととは思えないけど
977デフォルトの名無しさん:2011/12/03(土) 01:06:58.88
>>976
作ってくださいおねがいします><
978デフォルトの名無しさん:2011/12/03(土) 01:09:08.89
>>976
例えばリードソロモン符号の復号コードをサクッと書いてくれと言われても
大抵の人は戸惑うと思うの
979デフォルトの名無しさん:2011/12/03(土) 01:10:09.74
それよりは数倍簡単だな。
980デフォルトの名無しさん:2011/12/03(土) 01:10:52.60
ここは雑魚しか居ないのか
981デフォルトの名無しさん:2011/12/03(土) 01:12:58.72
自己紹介乙。
982デフォルトの名無しさん:2011/12/03(土) 01:16:21.22
そもそも画像を撮影してるときに認識させるところから作るのか
保存されてる画像から情報を読み取る所から作るのかでだいぶ違うと思うんだけど
どっから作ればいいんだ
983デフォルトの名無しさん:2011/12/03(土) 01:17:50.15
>>982
保存されてる画像からです><
984デフォルトの名無しさん:2011/12/03(土) 01:24:59.60
テクスチャーマッピングの為の画像変形を標準関数だけでフルスクラッチで書くとこからはじめてみては?
985デフォルトの名無しさん:2011/12/03(土) 01:26:10.15
>>982
なんだそこからか
画像認識がおもしろい所なのに
986デフォルトの名無しさん:2011/12/03(土) 01:36:37.55
静止画対象でも画像認識には変わりないでしょ。
QRコードじゃトラッキングとか必要ないだろうし。
987デフォルトの名無しさん:2011/12/03(土) 03:02:38.45
Webに貼られた画像データからの解析か、
デジカメで写した画像からの解析かでずいぶん処理が変わると思うが。

画像の形式は?
QRコードの仕様書は?
988デフォルトの名無しさん:2011/12/03(土) 04:29:52.37
すみません
GOTOってそんなに使っちゃダメなんですか?
また、普通の変数ではなくポインタを使うメリットとは??
989デフォルトの名無しさん:2011/12/03(土) 04:34:07.10
人に聞かなきゃ使って良いか悪いか分からない間は、gotoは使わない方が無難
990デフォルトの名無しさん:2011/12/03(土) 04:36:33.08
そうですかー。
どう考えてもGOTO使った方がスッキリすると思んだけどなぁ。
991デフォルトの名無しさん:2011/12/03(土) 04:51:26.34
自分がgotoを使うのは、エラー処理と、状態遷移図のハードコードみたいな事をする時だけ。
992 ◆QZaw55cn4c :2011/12/03(土) 06:10:30.66
>>991
>状態遷移
で goto を使うのか?まさか!
993デフォルトの名無しさん:2011/12/03(土) 07:54:43.02
次スレ立てます
994デフォルトの名無しさん:2011/12/03(土) 07:56:22.45
次スレ立てました
C言語なら俺に聞け(入門編)Part 93
http://hibari.2ch.net/test/read.cgi/tech/1322866566/
995デフォルトの名無しさん:2011/12/03(土) 10:15:20.62
プログラムが分かりやすくなるならどんどんgoto文をつかうべき
996デフォルトの名無しさん:2011/12/03(土) 10:25:39.66
>>987
画像はbmpからで、QRコードの仕様は何も聞いてません
997デフォルトの名無しさん:2011/12/03(土) 10:46:37.25
QRコードの仕様はJIS X 0510:2004 です
本屋に行けば4,830円ほどで取り寄せてもらえるので購入してください
お急ぎであればPDFとして購入できますのでJISのサイトから買ってください
998デフォルトの名無しさん:2011/12/03(土) 10:49:52.60
無料で作ってください。
必要な資料は有料です。
自分で買ってください。
999977:2011/12/03(土) 10:59:13.48
>>997はぼくじゃないよ!
1000デフォルトの名無しさん:2011/12/03(土) 11:00:06.06
>>997
図書館においてあるだろ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。