1 :デフォルトの名無しさん2011/06/26(日) 21:03:13.81
C言語の*入門者*向け解説スレッドです。

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

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
2 :デフォルトの名無しさん2011/06/26(日) 23:31:53.45
>>1

4 :デフォルトの名無しさん2011/06/27(月) 09:21:11.17
C言語を最近はじめたものです。
double型の精度について質問させてください。
doubleの有効桁は、調べたところ16桁と書いてありました。
これはつまり、
a=1.0*10^(-15)
b=1.0*10^(-14)
b-a = 0.9*10^(-14)
が正しく表示されるくらいの精度はあるということでしょうか?
8 :デフォルトの名無しさん2011/06/27(月) 15:00:12.48
>>4
以下の説明は10進法で説明してるから例え話のようなものです(実際は2進数です)
1.0*10^(-15)は1.0っていう情報とそれを15桁ずらすっていう情報に分けて保存するの、小数点をずらす感じだから不動小数点と呼ばれる
で、16桁程度の精度ってのは1.0の部分の話なので1.0*10^(-15)はもっと精度がある

どのみちdouble型の誤差を気にするなら気をつけないといけないことがいくつかあるので
他の人が入ってる通り調べたほうがいい
9 :デフォルトの名無しさん2011/06/27(月) 15:02:36.14
>>4
それって計算精度3桁だから余裕
10 :デフォルトの名無しさん2011/06/27(月) 20:22:01.42
>>9
なにを言っているんだ・・・
5 :デフォルトの名無しさん2011/06/27(月) 10:42:06.17
いいえ、「正しく」の定義次第ですが。
そもそも、cでは規格では精度について詳細に言及していないので、16桁が保証されている訳ではありません。
11 :デフォルトの名無しさん2011/06/27(月) 21:11:28.45
C言語初心者です。現在入力した数字が
5の倍数かどうかを判定するプログラムを作っているのですが
ifの後の計算式がどうしてもわかりません…
どのように訂正したらいいでしょうか。以下ソースになります。
12 :デフォルトの名無しさん2011/06/27(月) 21:12:50.66
#include <stdio.h>

int main(void)
{
int a;
int b;

b = 5;




printf("整数を1つ入力せよ\n");
scanf("%d",&a);

if(a/b ==5 )
{
printf("【 %d 】は5の倍数である\n",a/b);
}
else
{
printf("【 %d 】は5の倍数でない\n",a/b);
}

return 0;
}
14 :デフォルトの名無しさん2011/06/27(月) 21:18:42.61
>>12
釣れますか?
15 :デフォルトの名無しさん2011/06/27(月) 21:23:01.66
>>13

その式をやってみたのですが、
「50」等を入力しても「5の倍数ではない」と言われてしまいました…
printfのa/bが間違っているからでしょうか?

>>14
すいません、多分初歩とかそんなレベルじゃないですよね
学校の授業について行けず独学で頑張っていますが
数学というか算数が元々苦手なもので…もしスレ違いだったらすみません
13 :デフォルトの名無しさん2011/06/27(月) 21:18:38.01
a/b==5 →
16 :デフォルトの名無しさん2011/06/27(月) 21:25:04.15
a % 5 == 0
18 :デフォルトの名無しさん2011/06/27(月) 21:31:24.96
>>16

ありがとうございます!プログラムは出来上がりました。
ただ計算式の意味がまだ理解できていません…
aが50だったとして、それを5で割ると10ですよね?
10と0が等しかったら何故5の倍数だと判定できるのでしょう…
うまく説明できないのですが、数式の読み解き方を教えて頂けると嬉しいです…
19 :デフォルトの名無しさん2011/06/27(月) 21:33:02.30
%は余り
20 :デフォルトの名無しさん2011/06/27(月) 21:36:16.74
>>19
今少し考えていて、解ったかも知れません。
50を5で割ると割り切れて10で、
余りが出ないから 0と等しくなるという考え方でよいのでしょうか?
22 :デフォルトの名無しさん2011/06/27(月) 21:43:08.15
>>20
初等整数の受験用参考書買え
23 :デフォルトの名無しさん2011/06/27(月) 21:49:54.92
>>20だけ読むとゼロという概念で梃子摺ってるようにすら見えるw
41 :デフォルトの名無しさん2011/06/28(火) 15:33:59.57
>>20
0〜4まで等間隔で打たれてる時計の文字盤のようなものを創造してみるんだ
 50 だと10回転して 0 の位置を指してる
 13 だと2回転して 3 の位置を指してる

# 高度計って一般的じゃないからなぁ…
# % の左側が負の値の時は… とりあえず思考停止だw
21 :デフォルトの名無しさん2011/06/27(月) 21:42:11.86
算数できない人には向いてないと思うけど、そのうち地獄見ることになりそうな
24 :デフォルトの名無しさん2011/06/27(月) 22:40:28.29
問題:
8 * 16 の格子に、色が配置されてます。色は赤・青・黄・緑・オレンジの5色です。
+ー+ー+ー+ー・・・
|赤|緑|赤|黄|・・・
|赤|赤|黄|青|・・・
|橙|赤|黄|青|・・・

縦横で同じ色の場合はリンクしてると考えて、4つ以上リンクした状態の領域を検索したいです。
検索結果は同じく8*16の格子に TRUE と
25 :242011/06/27(月) 22:43:20.04
FALSEで書き出した配列的なデータとして得たいです。

8*16の色の配列アドレスを渡して、8*16のtrue/falseの配列を得る関数を作りたいのですが、どうやればいいですか?
C言語で可能ですか?
27 :デフォルトの名無しさん2011/06/28(火) 00:21:19.09
そりゃ可能だろう
作ってみればいい

落ちゲーでも作るのか
29 :242011/06/28(火) 00:59:50.69
できたのでやっぱいいです。
http://codepad.org/St12kXIa
意外に簡単だった(^_^v
30 :デフォルトの名無しさん2011/06/28(火) 01:58:09.24
> {int _;srand(_);}

これってどうなの
31 :デフォルトの名無しさん2011/06/28(火) 02:06:54.36
>>30
int a; srand(a); と同じ。
処理系によっては、繰り返し実行しても a の値が変わらない場合があるから、この場合 srand() したことになっていない。
36 :デフォルトの名無しさん2011/06/28(火) 09:53:47.50
>>30
C FAQで呼んだ話であって規格のどこに書いてあるのかは知らないんだが
未初期化変数の利用は一応未定義動作らしいな、普通は動くけど
34 :デフォルトの名無しさん2011/06/28(火) 09:39:16.48
馬鹿かよ
_は変数名だから定義されてる
37 :デフォルトの名無しさん2011/06/28(火) 09:57:21.58
ちゃんと未定義動作って言わないから>>34-35みたいなのが出てくる
38 :デフォルトの名無しさん2011/06/28(火) 10:38:52.35
どーでもいいけど、FAQ邦訳のあの独特な上から目線の言い回しがすげー好きだ
まぁ目線云々はなくて単に訳を断定口調で統一させてるだけのハナシであるっつーのは分かるんだけど
特にヌルポインターの章とかたまらん
39 :デフォルトの名無しさん2011/06/28(火) 12:58:05.61
ターミナルエディタの設定ってCプログラム内で反映できる?
たとえばターミナルの大きさを変えたらそれに応じて表示する一行の文字数が変わるみたいなことをしたいんだけど
42 :デフォルトの名無しさん2011/06/28(火) 15:39:04.65
負の可能性があるときは%を使うべきじゃないしな
43 :デフォルトの名無しさん2011/06/28(火) 15:49:45.09
>>42
問題ないぞ
44 :デフォルトの名無しさん2011/06/28(火) 15:55:06.29
>>43
適当なこと言うなよハゲ
47 :デフォルトの名無しさん2011/06/28(火) 16:02:11.26
>>44
50の倍数か判定するのに問題ある例を挙げよ
45 :デフォルトの名無しさん2011/06/28(火) 16:00:32.94
VCのヘルプには
x % y で x, y 何れかが負の場合には処理系依存 って書いてあったが
C89 でもそうなのかどうかは知らない
46 :デフォルトの名無しさん2011/06/28(火) 16:02:04.81
割り切れるかどうかの判定には問題ない
50 :デフォルトの名無しさん2011/06/28(火) 16:20:59.70
>>46
勝手に割り切れる時の判定の話にされても困る
52 :デフォルトの名無しさん2011/06/28(火) 16:23:06.42
>>50
実際そうなんだから
はやく謝れよクズ
48 :デフォルトの名無しさん2011/06/28(火) 16:08:10.72
プロトタイプ宣言ってどういうときにするもんなの?
いきなり定義書いていったらだめなの?
55 :デフォルトの名無しさん2011/06/28(火) 16:51:57.71
>>48
たとえばこんなときプロトタイプが欲しくなる
dir(p)
char *p;
{
file((char *)0);
}

file(p)
char *p;
{
dir((char *)0);
}
別になくても詰みはせんが
57 :デフォルトの名無しさん2011/06/28(火) 17:01:06.44
>>55
ああ 式の構文解析なんかは そういうパターンになるね
49 :デフォルトの名無しさん2011/06/28(火) 16:12:42.21
1ソースで完結するならご自由に
複数ソースであちこちのソースから呼び出されるならヘッダーにプロトタイプ宣言書く
51 :デフォルトの名無しさん2011/06/28(火) 16:21:50.15
>>49
そうなんですか
まだファイル分割するようなレベルまで来ていないので
いまいちピンッときませんが
ありがとうございました
53 :デフォルトの名無しさん2011/06/28(火) 16:32:33.22
Cでは負の剰余は処理系依存なだけだから尻から目が出ることはない
54 :デフォルトの名無しさん2011/06/28(火) 16:38:42.31
>>53
C99だと仕様で決められた
除算は0方向に丸める
Javaもそう
56 :デフォルトの名無しさん2011/06/28(火) 16:58:40.41
>>54
yが非0前提で

x/y は整数での割り算のルールに則ったまま
(x/y) * y + (x % y) が 常に x と等しい ってこと? < C99 の仕様
61 :デフォルトの名無しさん2011/06/28(火) 23:48:02.57
>>56
横から。厳密な事を言うと、「x/yが表現可能ならば」という前提がつく
こういうめんどくさい述べ方をするのは、ゼロ除算ともう一つ、2の補数でINT_MIN / (-1)ってケースだと
オーバーフローが生じるから
62 :デフォルトの名無しさん2011/06/28(火) 23:58:12.62
if文がもしあるならば必ず、そのif文は吟味されるのでしょうか?

if(i==1)
if(i==2)




とif文が10個あった場合全部吟味されますか?
69 :デフォルトの名無しさん2011/06/29(水) 03:28:31.00
>>62
コンパイラによっては最適化されることもあり、なんともいえません。
ただ、そういうコンパイラでも最適化を行わないようにコンパイル時に指定することができるのがほとんどですが、
そういうときには、if 文を 10 個かけば、10個とも吟味されるコードを生成すると思います。
63 :デフォルトの名無しさん2011/06/29(水) 00:02:18.53
数値の扱いについて質問です。

unsigned char hoge;
hoge = 1000. / (unsigned char)(moge);

のようなコードがあるのですが、数値の後に ’.’ があるとどういう扱いになるのでしょうか?
少数の意味なのかなとも思うのですが…
64 :デフォルトの名無しさん2011/06/29(水) 00:17:11.40
>>63
暗黙の型変換でぐぐるよろし
65 :デフォルトの名無しさん2011/06/29(水) 00:22:04.68
>>63
浮動小数点定数という理解であってる
66 :デフォルトの名無しさん2011/06/29(水) 00:25:59.48
>>64 >>65
ありがとうございます。
ピリオドとかだと上手く検索できなくて困っていました。

1000.0 のようにピリオドの後に数字がなくても大丈夫なんですね。
勉強になりました。
67 :デフォルトの名無しさん2011/06/29(水) 00:53:03.20
http://codepad.org/NnxwEul5

よくあるforループのパターンで
for(j=0; j<10; j++) {
    A:
    for(i=0; i<10; i++) {
        B:
    }
    C:
}
2次元配列などにアクセスする場合、度々この2重ループが現れるので、
これを抽象化すれば、コードがよりシンプルになるだろうと思ったのですが上手くいきませんでした。

シンプルどころか、グチャグチャのドロドロでカオスなコードになってしまいました。
(内容は>>29とほぼ同じなのに、どう考えても逆に読み辛くなってる気がする。)



よく上級者が「イテレーターを用いるとコードがシンプルになる」と言ってますが、いまいち実感が沸かないです。

Cでシンプルにイテレーターを実現する例を教えてほしいです。
68 :デフォルトの名無しさん2011/06/29(水) 01:08:31.09
>>67
なにこれキモイ
70 :デフォルトの名無しさん2011/06/29(水) 03:45:21.39
>>67
>抽象化すれば、コードがよりシンプルになる
まず「抽象化する」という言葉の内容がなになのか、明確に意図する必要があります。
関数やマクロを使うことなのでしょうか?

>「イテレーターを用いるとコードがシンプルになる」と言ってますが、いまいち実感が沸かないです。
そもそも、すでに「配列にアクセスする」という処理主体で書かれている内容にイテレータを導入しても仕方がないと思います。
あるいは、いわゆる foreach() 文を導入したいのであれば、それについて、shiro さんがなんかしゃべってはったのを記憶しているのですが、ググってもでてきませんね。


>{volatile int _;srand(_);}
残念ながら volatile をつけても意味は変わらず、この文では srand() を意図したとおりには使えていません。
71 :デフォルトの名無しさん2011/06/29(水) 08:17:44.53
>62
ifの内容見るかぎり1つ目のif通っても2つ目のifで蹴られるだけだろ。
吟味って値チェックするか?ってことだろ

mov eax,[i]
cmp eax,01h
jnz end1  ;i==1でなきゃ終了
cmp eax,02h
jnz end1  ;i==2でなきゃ終了
...
{}内処理
end1:
...

こんな感じのコード書くんじゃね?
最適化で削除される可能性もあるが。
72 :デフォルトの名無しさん2011/06/29(水) 18:53:11.46
>>71
スクリプトでかくなよ・・・
全然わからん。
89 :デフォルトの名無しさん2011/06/30(木) 00:28:42.56
C言語のスレなのに、コマンドラインで書くスクリプト用のC言語をこのスレで
書いてレスしてる人なんなの?

>>71さんとか。

エディタでつくるほうのC言語で答えてくれ・・・
91 :デフォルトの名無しさん2011/06/30(木) 00:33:46.72
>>89
あれはアセンブラだよ

ところで、「コマンドラインで書くスクリプト用のC言語」ってなんなの?
94 :デフォルトの名無しさん2011/06/30(木) 00:39:26.95
>>89
i386 のアセンブラでしょう。
C をやる人間は必然的にマシン語レベルまで意識するようになるというものです。
97 :デフォルトの名無しさん2011/06/30(木) 00:44:02.88
>>91
だから勘違いですよ・・・
74 :デフォルトの名無しさん2011/06/29(水) 19:05:54.79
数学の範疇なので適したすれあれば誘導お願い。

自然対数loge X をlog関数を使わずに近似等で計算するコードってありますか。

組み込みではlog関数使えないと言われたので別の計算法探してます。
75 :デフォルトの名無しさん2011/06/29(水) 19:11:25.24
Xは不定なのかい?

>組み込みではlog関数使えないと言われたので
誰に言われたのかな?
logが使えないということは浮動小数点計算が出来ないってことになるような?
76 :デフォルトの名無しさん2011/06/29(水) 19:12:11.64
級数って言葉とセットでぐぐれば見つかると思う
口ぶりからしてコードには自力で落としこめるだろうし
77 :742011/06/29(水) 19:17:59.24
すいません。最近やりはじめたんで浮遊なんちゃら(少数?)わかりません。

Xは、定数ではありません。

logだめ言われたのは上司です…
79 :デフォルトの名無しさん2011/06/29(水) 19:34:01.65
>>77
超いい加減な数値でよければ

double damelog(double x)
{
double tmp;
int i;

for(i=0,tmp=x;tmp>=2.0;i++,tmp*=0.5);
if(i==0) for(i=0;tmp<=0.5;i--,tmp*=2.0);

return i*0.3010;
}
80 :デフォルトの名無しさん2011/06/29(水) 19:45:31.11
>>77
>>79 より格段に精度アップしたよw
double damelog(double x)
{
static double table[]={0.0, 0.0000, 0.3010, 0.4771, 0.6021, 0.6990, 0.7782, 0.8451, 0.9031, 0.9542};
int i;

for(i=0;x>=10.0;i++,x*=0.1);
if(i==0) for(i=0;x<1.0;i--,x*=10.0);

return table[(int)x]+i;
}
87 :デフォルトの名無しさん2011/06/29(水) 21:39:34.14
>>77
マクローリン展開を使ったもの
劇的に精度が上がったよ
マクローリン展開の収束範囲になるまで 2 で割り続けてる(掛け続けてる)
double damelog(double x)
{
double ret, x_1, x_1_n;
int i;

for(i=0;x>1.0;i++,x*=0.5);
if(i==0) for(i=0;x<0.5;i--,x*=2.0);

ret=i*0.69314718055994530941723212145818;

x_1=x-1;
x_1_n=-1.0;
for(i=1;i<15;i++)
{
x_1_n*=-x_1;
ret+=x_1_n/i;
}
return ret;
}
82 :デフォルトの名無しさん2011/06/29(水) 20:09:47.67
CとC++って両方覚えるべきですか?
92 :デフォルトの名無しさん2011/06/30(木) 00:35:57.14
>>82
まずは、C を覚えて宿題スレで沢山コードをかいていると、自然に C++ に移行したくなると思います。それからでも遅くはないでしょう。
98 :デフォルトの名無しさん2011/06/30(木) 00:46:53.06
>>82
Cだけで良いよ
Cを覚えたら、何か一つLLを習得すると良いと思います
RubyとかPythonとか、日常のスクリプティングに使える言語を知っておくと便利です
あとはJavaScriptかな

C++はどうしても必要になった時以外は無視してオケ
83 :デフォルトの名無しさん2011/06/29(水) 20:13:26.56
脱初心者の為の本教えてください
84 :デフォルトの名無しさん2011/06/29(水) 20:42:17.09
>>83
web検索
101 :デフォルトの名無しさん2011/06/30(木) 01:38:37.10
>>83
自分で問題意識を持って技術を磨けるのが脱初心者の状態だと思いますぜ
86 :デフォルトの名無しさん2011/06/29(水) 21:30:52.48
Linux環境で開発する場合、C,Javaは必須ですか?
90 :デフォルトの名無しさん2011/06/30(木) 00:32:48.49
何で>>71がスクリプトって事になってるの?

>>86
Cは知ってた方が良いけど、後回しでも良いよ
Javaはサーバサイドやりたいなら必須に近い感じ

作りたい物を一番簡単に作れる言語から手を付けるのがお勧め
88 :デフォルトの名無しさん2011/06/29(水) 22:30:06.07
ハッシュってのが良く分からないんですが・・

例えばAPPLEみたいなのを12という整数に直すってことですか?
93 :デフォルトの名無しさん2011/06/30(木) 00:37:56.59
>>88
そのとおり。
広意には、任意のオブジェクトに対して、それに対応する数値を計算する関数をハッシュ関数といいます。
95 :デフォルトの名無しさん2011/06/30(木) 00:41:15.61
デバッグするにも最適化するにも解析するにもアセンブラの知識があった方が
何かと捗るからね
96 :デフォルトの名無しさん2011/06/30(木) 00:42:29.95
>89 はコンパイル言語、コンパイラ、アセンブリ言語、アセンブラ、マシン語の用語について調べてみろ。
99 :デフォルトの名無しさん2011/06/30(木) 00:51:19.08
>82
素直にC言語から始めるのを勧める。
100 :デフォルトの名無しさん2011/06/30(木) 01:03:00.25
>97
次質問するときは礼儀とかマナーとか覚えてから質問してね。
102 :デフォルトの名無しさん2011/06/30(木) 13:20:13.37
内部的に二進数じゃなくて十進数とか三進数とか使ってる環境が仮に存在するとして
C言語のビット演算は二進数として正常に動作する?しない?
103 :デフォルトの名無しさん2011/06/30(木) 13:24:51.59
>>102
規格に準拠してるなら正常に動作する
でも規格無視な環境(コンパイラ)もあるので確実ではない
104 :デフォルトの名無しさん2011/06/30(木) 13:26:14.17
#include <stdio.h>
void tes(void *d){
int *b;
b=(void *)d;
b++;
}
int main(void){
int k[2]={100,200};
int *a=k;
printf("%8d\n",*a);
tes(&a);
printf("%8d\n",*a);
return 0;
}
int型のポインタaのアドレスを受け取り其のポインタが指しているアドレスを一つ進める関数を作ろうとしたが
うまい事いかない。
実行結果が
100
100
に成ってしまう

どこに問題が有るのか教えてください
105 :デフォルトの名無しさん2011/06/30(木) 13:30:35.35
>>104
#include <stdio.h>
void tes(int **d){
*d+=1;
}
int main(void){
int k[2]={100,200};
int *a=k;
printf("%8d\n",*a);
tes(&a);
printf("%8d\n",*a);
return 0;
}
106 :デフォルトの名無しさん2011/06/30(木) 13:39:28.52
>>105
ありがとう

108 :デフォルトの名無しさん2011/06/30(木) 15:46:02.35
http://codepad.org/kbByGE9Z
これをハッシュツカッテ高速化しようとしたら
http://codepad.org/N9q37bou
ぎゃくに遅くなったしcodepadコンピューター知能からkillとか言われた怖い
109 :デフォルトの名無しさん2011/06/30(木) 17:11:44.02
110 :デフォルトの名無しさん2011/06/30(木) 17:33:29.42
malloc関数を1万回呼び出すプログラムと,i=1を1万回繰り返す
プログラムだとどっちが遅いですか?
112 :デフォルトの名無しさん2011/06/30(木) 17:51:10.79
malloc関数を1万回呼び出すプログラムだろうね
i=1がmallocより遅い可能性は実例を見つけてから論ずべきことだ
113 :デフォルトの名無しさん2011/06/30(木) 18:14:24.64
ハッシュ便利すぎワロタwwww
実行時間1万分の1になったww
ハッシュ値が一緒になる場合はでもどうしたらいいんだろ・・・
118 :デフォルトの名無しさん2011/06/30(木) 23:05:16.83
以前ここで100万行のソートについて質問したものですけど
そのときに皆様たくさんの方がコードを書いてくださったのを思い出しました
119 :デフォルトの名無しさん2011/07/01(金) 00:49:46.39
rand()使ってるんですが、1回の実行で100個の異なる値を
出さねばならんのに全部同じ値がでます・・・
何故でしょうか?
120 :デフォルトの名無しさん2011/07/01(金) 00:51:37.03
>1回の実行で100個の異なる値
意味わかんねーよ

エスパーに挑戦してみるとsrandもいちいち呼んでるとかかね
123 :デフォルトの名無しさん2011/07/01(金) 00:55:35.52
>>120
この範囲内じゃないともっぺんrand()で探すよっていう条件を付け加えると
100個とも全部同じ値になります・・・



単にforループ内でrand()だけだと100個とも違う値なんですが・・・
126 :デフォルトの名無しさん2011/07/01(金) 00:58:19.24
>>120


for(100)
{
rand()
}
全部違う値


for(100)
{
while(条件)
{rand()}
}

全部同じ値
127 :デフォルトの名無しさん2011/07/01(金) 00:59:06.22
>>126
ソースコード出してみろよ馬鹿
128 :デフォルトの名無しさん2011/07/01(金) 00:59:22.98
>>126
実際にだめだったコードを問題が発生する最小までけずって出してこいハゲ
そんなんで分かるかボケ
130 :デフォルトの名無しさん2011/07/01(金) 01:02:46.96
>>126
そんな糞情報はいらねーんだよ死ね
122 :デフォルトの名無しさん2011/07/01(金) 00:54:52.29
あぁ一回の実行ってプログラム一回の実行か
俺がアホだったなすまん

どのみち原因分からんが
124 :デフォルトの名無しさん2011/07/01(金) 00:55:50.01
rand()を1回呼び出すプログラムを100回動かしても全部同じ値!
→srandを呼びましょう。その引数は実行のたびに変わる値、例えば現在時刻などにしましょう。
125 :デフォルトの名無しさん2011/07/01(金) 00:57:29.44
もう一回探すときに同じ値でsrandしちゃってるんでしょ
1度srandしたら基本的にそれ以降はsrandしなくてよい
129 :デフォルトの名無しさん2011/07/01(金) 01:00:21.28
>>125
srandではなくてrandです。
randしか使いません。
132 :デフォルトの名無しさん2011/07/01(金) 01:12:01.69
randが呼ばれずに前回の値を使ってるとかかな
133 :デフォルトの名無しさん2011/07/01(金) 01:13:57.99
>>132
もう一ついいですか・・?

forループの中ではint i;と宣言してもエラーでないのですが
whileループの中ではint i;と宣言するとエラーがでるのですが
何故でしょう?他に問題があるのでしょうか?
134 :デフォルトの名無しさん2011/07/01(金) 01:15:14.79
>>133
お前の頭かな
135 :デフォルトの名無しさん2011/07/01(金) 01:17:05.28
>>134
ガチで真面目にお願いします。頭悪くても結構ですから・・
136 :デフォルトの名無しさん2011/07/01(金) 01:18:37.05
>>135
真面目にお前の頭だよ
少し前の指摘も見えんのか

可能性としてはint i;がスコープの先頭に無いとかじゃね?
137 :デフォルトの名無しさん2011/07/01(金) 01:22:33.56
>>136
動きました。
ありがとうございました。
138 : ◆tWL/wYPcVw 2011/07/01(金) 01:23:12.70
>>137
偽者やめてください・・・
144 :デフォルトの名無しさん2011/07/01(金) 01:46:01.84
>>133
rand() なのに同じ値が云々は、やっぱりソースを晒さないことには、なんとも。
あと、while () の中には変数宣言はできません。
145 : ◆tWL/wYPcVw 2011/07/01(金) 01:48:57.42
>>140
それだけは傷つくから言わないでください・・


>>144
そうなんですか?
whileの中でも変数宣言してもちゃんと動くときもあります・・
int j;
j=0
while(j<100)
{
int i;
i=1;
j++;
}
これだめなんですか?
146 :デフォルトの名無しさん2011/07/01(金) 01:50:32.06
>>144
馬鹿だと見越してwhile()の括弧の中にねじ込んでる可能性に対してのレスかもしれないが
whileループ中では普通宣言できる
C89であってもね
スコープだから
148 : ◆tWL/wYPcVw 2011/07/01(金) 01:52:07.57
>>146
それは違います。
while(){}の{}の部分です。
while(){}の()のことを言っているのではありません。
140 :デフォルトの名無しさん2011/07/01(金) 01:36:07.08
頭悪いのに真面目という最悪なパターンでは
141 :デフォルトの名無しさん2011/07/01(金) 01:37:35.25
釣りをしているつもりなんだろう
そのままでも十分アレなのに
142 :デフォルトの名無しさん2011/07/01(金) 01:38:27.73
バカって正しい考え方を知らないから、どんだけ考えても時間の無駄にしかならない
143 :デフォルトの名無しさん2011/07/01(金) 01:40:11.84
本当に頭のいい奴はとっくにやりたいことを終えて寝てるだろ
バカだから終わらなくて頭も働かなくて効率悪くなって悪循環してるんだろ

俺・・・早く寝ろ
147 :デフォルトの名無しさん2011/07/01(金) 01:51:18.31
だからrandが動かないって言うソースを出せよ
行数が多すぎるって言うならhttp://codepad.orgとかに貼ってでも出せよ
説明が下手だと解決できんぞ
150 : ◆tWL/wYPcVw 2011/07/01(金) 01:54:45.95
>>147
そのプログラムシュミレーションサイトってテキストファイル読み込みもできるんですか?
151 :デフォルトの名無しさん2011/07/01(金) 01:56:41.94
>>150
できねーよ、でもそんなことはどうでもいいだろ
お前のとこで動かはなかった奴をそのままコピペしろよ
152 :デフォルトの名無しさん2011/07/01(金) 02:01:55.29
■答えが欲しい場合
>>147のサイトのソースコードを貼る

■どうでもいいから雑談をしていたい場合
ソースコードを貼るなんてとんでもない!
149 :デフォルトの名無しさん2011/07/01(金) 01:54:15.86
動くソースは皆知ってから貼らなくてもいいよ
変数宣言がエラーって言うソースを貼れば間違いを指摘できるよ
153 :デフォルトの名無しさん2011/07/01(金) 02:02:07.46
ソース公開をじらされてヤキモキしてるオレらって何なの?遊ばれてるの?
155 :デフォルトの名無しさん2011/07/01(金) 02:58:27.56
スタック領域とヒープ領域、どちらがメモリの上位に存在するかは環境依存なんですかね?
157 :デフォルトの名無しさん2011/07/01(金) 03:51:54.40
>>155
どっちかというとコンパイラ依存
176 :デフォルトの名無しさん2011/07/01(金) 11:07:34.46
>>155
yes

OS によって違うし、同じ OS でも CPU 毎に違う
それと、「メモリの上位」というより「上位アドレス」と言う方が多いと思う
156 :デフォルトの名無しさん2011/07/01(金) 03:50:25.15
ふたつのスレッドA,Bがそれぞれ、
ひとつの変数(int s)に代入しまくってるときに
みっつめのスレッドCが s を読みだして
AやBが代入してもいない変数を読み出すことってある?

仕様的に余裕でありえることは理解してるんだけど
どんなCPUだったら起こり得るのかってのが知りたい
158 :デフォルトの名無しさん2011/07/01(金) 08:05:32.64
>>156
ローカル変数なら当然そうなるんじゃねww
159 :デフォルトの名無しさん2011/07/01(金) 08:11:05.53
>>156
代入しても居ない変数ってなんだよ
代入しても居ない値って言いたかったのか?
178 :デフォルトの名無しさん2011/07/01(金) 11:09:52.87
>>159
そう言いたかった。
191 :デフォルトの名無しさん2011/07/01(金) 12:25:29.42
>>156
例えば、Aが65536、Bが1を代入していてCが65537を読む出すのは、バスの狭いCPUなら起きるんじゃね。
193 :デフォルトの名無しさん2011/07/01(金) 12:45:29.15
>>191
なるほど
160 :デフォルトの名無しさん2011/07/01(金) 09:49:23.07
fscanfでファイルを読み込むとき2行目から読み込む方法がわかりません。
ファイル

height
170.5
165.8

とあり、2行目と3行目の和をとり平均をとりたいです。
173 : 忍法帖【Lv=14,xxxPT】 2011/07/01(金) 10:54:09.88
>>160
・fgets()で一行目を読み捨てる。但し、バッファが必要。
・fgetc()で一行目を読み捨てるループを作る。
・fscanf()で一行目を読み捨てる。
fscanf(fp, "%*[^\n]%*c");
184 :デフォルトの名無しさん2011/07/01(金) 11:44:02.91
>>173 助かります。fscanfで読み飛ばすやつをもう少し詳しく教えてもらえませんか?
190 :デフォルトの名無しさん2011/07/01(金) 12:17:19.41
>>184
改行文字を含まない文字列を読み飛ばし、一文字(すなわち改行文字)を読み飛ばす。
240 :デフォルトの名無しさん2011/07/02(土) 00:32:47.55
>>190とりあえずうまく行きました。ありがとう。
164 :デフォルトの名無しさん2011/07/01(金) 10:01:40.94
windows apiのlinux版は何を使えば良いでしょうか?
166 :デフォルトの名無しさん2011/07/01(金) 10:07:37.30
>>164
wine
165 :デフォルトの名無しさん2011/07/01(金) 10:01:56.13
きのうからc言語始めたんで全然わからないんでお願いします
167 :デフォルトの名無しさん2011/07/01(金) 10:20:00.96
C言語でGUIを作るとしたら何のライブラリ?を使うのがお勧めですか?
できたらマルチプラットフォームがいいですが、windows用にしてもいいです
やはりMFCとかになるんでしょうか?
227 :デフォルトの名無しさん2011/07/01(金) 14:54:17.30
>>167
GLUT
168 :デフォルトの名無しさん2011/07/01(金) 10:21:15.57
Qt
179 :デフォルトの名無しさん2011/07/01(金) 11:10:11.91
>>168
C++じゃん
169 :デフォルトの名無しさん2011/07/01(金) 10:27:27.84
テストコードの書き方を教えてください。

今はよくわからないので、我流で
関数を呼ぶだけのmainを書いて
結果の判定をperlでおこなってるんですが
そういう感じでいいんでしょうか。
170 :デフォルトの名無しさん2011/07/01(金) 10:29:08.71
printfしまくってからperlに食わせてると言うことか?
判定までC言語内でやればいいのに
171 :デフォルトの名無しさん2011/07/01(金) 10:38:28.64
引数を受け取って戻り値を返す、と言う関数のテストなら、
例えば
void test_func1(){
 int arg = 入力;
 int ret;
172 :デフォルトの名無しさん2011/07/01(金) 10:41:20.30
間違えて途中送信した

void test_func1(){
 int arg = 入力;
 int ret;
 ret = func(arg); /* テスト対象関数 */
 assert(ret == 期待値);
}
みたいなテスト関数を作る

printfの出力が結果になるような関数であれば、それをperlで確認というのもまあありだろう
177 :デフォルトの名無しさん2011/07/01(金) 11:08:41.85
>>170
たとえばあるフォーマットにのっとったファイル出力をするプログラム
とかをテストするとき、Cで検査コード書くのが面倒だったので
perlで検査してます。

>>172
やはりそういうコードをルート数分書かないとだめなんですね
ありがとうございました。
180 :デフォルトの名無しさん2011/07/01(金) 11:22:15.44
>>177
なぜデバッガを使わないんだ?複数の入力を検査したいなら、なおさら
182 :デフォルトの名無しさん2011/07/01(金) 11:32:39.85
>>180
デバッガでテストが書くんですか?
やり方が想像できないのでちょっと具体的な例をお願いします。
174 :デフォルトの名無しさん2011/07/01(金) 11:00:35.78
main関数の引数の数の文字列を取得し取得した文字列をソートするプログラムを作ってみたが
まともに動かなかった。どこに問題があるのか分りません
http://codepad.org/HbcbK5nA
175 :デフォルトの名無しさん2011/07/01(金) 11:04:14.56
>>174
型の理解ができていないところが問題
188 :1742011/07/01(金) 12:00:29.84
>>175
型を修正したらちゃんと文字列を読み込んでくれるようになりました
183 :デフォルトの名無しさん2011/07/01(金) 11:41:46.10
デーモンでよくあるような無限ループの関数って
どうやってテストするんだろ
185 :デフォルトの名無しさん2011/07/01(金) 11:52:14.80
>>183
無限ループ内の機能部分は別関数にしておいて普通にテスト(無限ループはほぼガワだけにする)
デバッガをスクリプトで操作して、ブレークして期待値になってるか確認
長時間稼動させて出力部分(コンソールとかファイルとか?)に異常が出ていないか確認

想像で書いてみたけどこんなんじゃないの?
実際はどうするものなんでしょうね
186 :デフォルトの名無しさん2011/07/01(金) 11:55:21.35
>>185
>無限ループはほぼガワだけにする
やっぱこれやって無限部分は手確認かねぇ
187 :デフォルトの名無しさん2011/07/01(金) 11:58:02.95
ブラックボックス・テストをしたいのか、ホワイトボックス・テストをしたいのか
192 :デフォルトの名無しさん2011/07/01(金) 12:42:27.01
>>187
基本的にはブラックボックステストをしたいです

ブラックボックステストとして項目を作成して
中身はほぼルートカバーするのが理想だけど
それはまああとのお楽しみとしてとっときます。
194 :デフォルトの名無しさん2011/07/01(金) 13:34:47.96
main関数3つ書きたいです
208 :デフォルトの名無しさん2011/07/01(金) 14:16:56.87
>>194
できました。次の3つのファイルを作ってコンパイルすればおk

/* main1.c */
static int __attribute__ ((constructor)) main(void);
int main(){ printf("main1\n"); return 0; }

/* main2.c */
int main(){ printf("main2\n"); return 0 }

/* main3.c */
static int __attribute__ ((destructor)) main(void);
int main(){ printf("main3\n"); return 0 }


実行すると
$ ./a.out
main1
main2
main3
213 :デフォルトの名無しさん2011/07/01(金) 14:27:09.20
>>208
main1.c と main3.c の2行目は
int main(){ printf("main1\n"); return 0; }
じゃなくて
static int main(){ printf("main1\n"); return 0; }
の間違いだ
215 :デフォルトの名無しさん2011/07/01(金) 14:29:03.30
>>212
>>194によれば main関数を3つ書きたいと書いてある
main1関数はmain関数ではないから仕様は満たされてないよね
220 :デフォルトの名無しさん2011/07/01(金) 14:35:04.89
これほんとは>>194はこたえ知ってて聞いたんじゃねぇの?
221 :デフォルトの名無しさん2011/07/01(金) 14:36:02.45
>>214
グローバル変数とローカル変数の名前の衝突時のふるまいと同じ考え方か。

(アプリケーションエントリーポイント) ↓
グローバルスコープの main() 呼び出し ↓
  ローカルスコープの main() 呼び出し
  ローカルスコープの main() 呼び出し
  ローカルスコープの main() 呼び出し

>>208 の機構はさっぱりわからんが、
__attribute__ ((constructor)) ってのが
アプリケーションエントリーポイントから呼ばれる関数の追加?
223 :デフォルトの名無しさん2011/07/01(金) 14:39:46.41
>>221
本来はライブラリの初期化ルーチン用の仕組みです

ライブラリをリンクしただけで、起動時に自動的に
管理スレッドを起こしてみたり変数初期化したりといった
ことを実現するためのgcc拡張よ
224 :デフォルトの名無しさん2011/07/01(金) 14:43:15.02
>>208のを試してみたが、全部mainって名前だと
コンパイルできても実行すると落ちるな(gcc version 4.3.4 20090804 (release) 1 (GCC))
ちゃんと動くものなのか?
226 :2212011/07/01(金) 14:45:23.30
>>223
ありがとー
windows でいう DllMain() みたいなやつなのね。
 __attribute__ ((constructor)) が ロード時用
 __attribute__ ((destructor)) が アンロード時用 と。 (プロセスなのかスレッドなのか OSの事情次第だろうけど…
228 :デフォルトの名無しさん2011/07/01(金) 14:55:23.23
>>224
念のため3.3.5と4.3.2と4.4.5で確認したけど、動いた
195 :デフォルトの名無しさん2011/07/01(金) 13:51:10.26
その3つのmain関数にどのように動いてほしいのか?
おそらくその希望の動作は別の方法で実現するものだろう
196 :デフォルトの名無しさん2011/07/01(金) 13:53:31.87
>>195
1つ目のmain関数が終了したら
次のmain関数
219 :デフォルトの名無しさん2011/07/01(金) 14:34:23.89
>>195の解答で十分じゃないの?
まあ確かにこういうアイデアの出し合いは面白いから好きだけどね
222 :デフォルトの名無しさん2011/07/01(金) 14:38:17.29
>>219
十分だと思うのはお前のレベルが低いからだ
198 :デフォルトの名無しさん2011/07/01(金) 13:55:17.49
void main(){
 main1();
 main2();
 main3();
}
これじゃだめなの?
199 :デフォルトの名無しさん2011/07/01(金) 13:56:29.67
>>198
だめ
203 :デフォルトの名無しさん2011/07/01(金) 14:01:08.47
>>199なんだただのキチガイか
204 :デフォルトの名無しさん2011/07/01(金) 14:03:40.02
>>203
main関数1つしかないじゃん
206 :デフォルトの名無しさん2011/07/01(金) 14:14:29.15
>>204
どうダメなのか理由を述べよ
>>196の要件は十分満たしているはず
「そんなことはどうでもいいよmainが3つ書きたい」ならば>>203
211 :デフォルトの名無しさん2011/07/01(金) 14:22:35.52
>>203
自分に出来ない要求をする者をキチガイ呼ばわりするのは
あまり良くないと思うんです。
212 :デフォルトの名無しさん2011/07/01(金) 14:26:38.45
>>211
>>206
216 :デフォルトの名無しさん2011/07/01(金) 14:30:38.94
>>212
もうあきらめろよ
209 :デフォルトの名無しさん2011/07/01(金) 14:18:17.99
gcc限定だけど、これどんどん増やせるから
好きなだけ main() をつくってくだしあ
214 :デフォルトの名無しさん2011/07/01(金) 14:28:25.28
gcc 限定ならこんなんもできる
警告出るけど
#include <stdio.h>

int main(void)
{
{
int main(void){puts("main1");return 0;}
main();
}
{
int main(void){puts("main2");return 0;}
main();
}
{
int main(void){puts("main3");return 0;}
main();
}

return 0;
}
217 :デフォルトの名無しさん2011/07/01(金) 14:31:39.81
>>214
超ずりぃwww でも条件満たしてるwww

いやまて・・・よく見るとmain関数を4つ書いてるぞ・・・ゴゴゴゴゴ
225 :デフォルトの名無しさん2011/07/01(金) 14:44:41.45
2chのバカ煽り怖いです
リアルも怖いのに俺どこにいればいいんでしょうか
229 :デフォルトの名無しさん2011/07/01(金) 15:00:55.55
中身見ずにヘッダーファイルインクルードするの怖くね?
235 :デフォルトの名無しさん2011/07/01(金) 18:27:27.32
>>229
くわしく
230 :デフォルトの名無しさん2011/07/01(金) 16:38:37.34
入力した二つの数(a,b)からaのb乗を求めるプログラムの作成が課題として出されて
scanfを使って入力された二つの数を変数に格納し、カウンタ用の変数を用意して
for文を使って繰り返しaをb回掛け合わせるところまで分かったんですが
肝心のfor文の中の処理が全く分かりません、結果を格納する変数cを用意して
aを何度か掛け合わせればできると思ったんですが、どうも上手くいきません(bに3を入れたのに5乗の結果が帰ってくる等)
特別な関数を用いずに累乗を実現する繰り返し構文の解説をお願いしたいです

for(i=1; i<=b; i++)
{
/*ここの処理が分かりません*/
}
231 :デフォルトの名無しさん2011/07/01(金) 16:42:56.76
>>230
c = 1;
for(i=1; i<=b; i++)
{
c *= a;
}
233 :2302011/07/01(金) 16:56:06.11
>>231-232
即レスありがとうございます。

結果の格納用の変数cの初期化を忘れていたようです
{a *= a;}もやってましたw

下らない質問ですいませんでした、精進します
234 :デフォルトの名無しさん2011/07/01(金) 17:17:44.06
>>233
こんな方法もあるよ
http://codepad.org/KTVB38pE
237 :デフォルトの名無しさん2011/07/01(金) 21:53:14.95
C初心者です。
下のイメージのようにargvで取得した可変引数のうち、
第4引数以降を別の配列(subopt)に格納したいのですが、
必要数分をmalloc出来ません。
間違っている点はどこですか?

+++イメージ
argv → ./cmd a b c d e
subopt → c d e
argv → ./cmd 1 2 3
subopt → 3
+++ヘッダ
extern char *subopt[];
+++ソース
subopt = (char *)malloc(sizeof(char) * (argc-3));
239 :デフォルトの名無しさん2011/07/01(金) 23:55:59.60
>237
+++ヘッダ
extern char *subopt[];
これだと、どっかでchar *subopt[N];みたいな定義を期待しているからchar **subopt;にすべき
(ここに、Nは正数)
241 :デフォルトの名無しさん2011/07/02(土) 00:52:31.68
scanf って、ぶっちゃけ不便だよな。
実用的じゃない。
ちょっと凝ったことやろうとするとすぐ破綻する。
sscanf は便利なのにな。
242 :デフォルトの名無しさん2011/07/02(土) 01:36:47.38
・初心者にループで繰り返し処理をさせたり、エラーチェックをやらせようと
すると必ずハマるわかりにくい仕様

・ストリームを消費する単位が、行でも文字でも固定長でもなくて
しかもエラーが発生したときに消費されないという独特の仕様で、
使いこなせるようになってもほかの入力関数に応用がきかない。

・入門用のテキストを卒業したらまず使わないから
「使いこなせるようになれ」とか、時間の無駄感がすごい


・scanf("%10s", str) のようにバッファサイズを直で書かなきゃならない
ださい仕様

・数値入力ではオーバーフローを検知できない

・最初scanf()で作っていて、エラーチェックを厳密にする必要がでてきて
途中でfgets()などの関数に切り替えると、ストリームの消費の仕様の違いから
動きの互換性を保つのが難しい。

最初からfgets()で入力を受け付けてatoi()などで処理してるのをstrtol()などに
変更してエラーチェックを厳密にするとしたらそういう問題はない。

244 :デフォルトの名無しさん2011/07/02(土) 01:41:47.45
たぶん、
>>242
>ストリームの消費の仕様の違いから
のせいだと思いますが、fscanf() と fgets() とを混在できないのがつらいところ。
fgets() -> sscanf() でいいや、と思ってしまいます。
243 :デフォルトの名無しさん2011/07/02(土) 01:41:36.22
> エラーが発生したときに消費されないという独特の仕様で、
> 使いこなせるようになってもほかの入力関数に応用がきかない。

ダウト
事故状況が保存されていてば修復処理はどうにでも書きようがある
246 :デフォルトの名無しさん2011/07/02(土) 01:47:11.07
>>243
scanf()のバッドノウハウ的なテクニックを覚えても、ほかの入力関数で
使えないだろって話。
245 :デフォルトの名無しさん2011/07/02(土) 01:45:14.99
scanf と fgets を混ぜる時点で生じる問題が
そんなに面倒なら、もっと腕のいい PG やとえばいい

「互換性が保てる」という条件は喜ぶ奴や喜ぶよ
どんな連中が PG 廃業しはじめてて、そこにどんなベンチャーがあるか知ってるから
247 :デフォルトの名無しさん2011/07/02(土) 01:48:35.37
>>245
地の言葉を使いたまえ。君にあわせよう。
248 :デフォルトの名無しさん2011/07/02(土) 02:00:31.19
> fscanf() と fgets() とを混在できない

そーね、そんなヘボやけんそんな仕事しよーとねw
249 :デフォルトの名無しさん2011/07/02(土) 02:04:44.67
scanf()に肩入れしてるやつがいるってのがびっくりだ。
scanf()の使いこなしにプライドとかもってるから、馬鹿にされて
暴れるんだろうな。
255 :デフォルトの名無しさん2011/07/02(土) 06:16:32.97
>>249
fgtes()とscanf()をまぜて使えるPGが優秀だって時点でダメ。
250 :デフォルトの名無しさん2011/07/02(土) 02:12:03.18
俺は scanf のサブセット的な使い方を言っているに過ぎないんだが
この程度が「信者」に見えるほどの下郎がいるってことか
251 :デフォルトの名無しさん2011/07/02(土) 02:13:55.45
scanf系全否定ではなくてscanfとfscanfの否定ってことね。
それならわかる。
sscanfは無いともう生活に困るレベルで使ってるわ。
253 :デフォルトの名無しさん2011/07/02(土) 04:11:09.14
人間が入力するのか、そうじゃないのかによって異なると思うよ。
254 :デフォルトの名無しさん2011/07/02(土) 05:04:44.23
>>253
どうだろ。そのへんはあまり意識しないな。

ていうか、「入力は寛容に、出力は厳格に」の原則にのっとって
人間だろうと機械だろうとどちらが入力しても問題ないように
作るのが一番だと思うんだが。
257 :デフォルトの名無しさん2011/07/02(土) 10:36:04.62
printf じゃなくて、ただの print が欲しいね。
単純でシンプルなの。
258 :デフォルトの名無しさん2011/07/02(土) 11:00:17.97
>>257
readは?
259 :デフォルトの名無しさん2011/07/02(土) 13:33:55.22
>>257
つputs
260 :デフォルトの名無しさん2011/07/02(土) 15:54:07.16
ループ文でflagを使った脱出ってあんまりマナー的に良くない?
261 :デフォルトの名無しさん2011/07/02(土) 15:55:21.97
絶対にGoto文使うな厨に睨まれるから
262 :デフォルトの名無しさん2011/07/02(土) 16:23:55.09
>>261
なるほどありがとうw
263 :デフォルトの名無しさん2011/07/02(土) 18:17:10.36
(int a&&int b)
この意味教えて
265 :デフォルトの名無しさん2011/07/02(土) 18:26:46.68
>>263
a かつ b
267 :デフォルトの名無しさん2011/07/02(土) 19:22:15.44
多次元配列つくりたいのですが

moji[100][100]


moji[0]="MORITA"
moji[1]="TERADA"
moji[2]="ISHII"




これができません・・・
何故でしょう?
269 :デフォルトの名無しさん2011/07/02(土) 19:24:56.02
>>267
char *moji[100];
にするといいよ
282 :デフォルトの名無しさん2011/07/02(土) 19:43:07.32
>>267
1次元配列で動くものを書いてみませう
270 :デフォルトの名無しさん2011/07/02(土) 19:26:26.88
> moji[100][100]

char moji[100];
moji="ABCDEF";
271 :デフォルトの名無しさん2011/07/02(土) 19:27:08.22
>>270はアホ
274 :デフォルトの名無しさん2011/07/02(土) 19:30:42.99
>>271
お前がな
272 :デフォルトの名無しさん2011/07/02(土) 19:29:14.96
moji[0]="MORITA"
ってのは"MORITA"という文字列が格納されている先頭アドレスをmoji[0]に突っ込もうとしてるけど
moji[0]はchar型だから型が合わないでコンパイルエラーということ
ポインタと配列の違いについて学習されると良かろう
276 :デフォルトの名無しさん2011/07/02(土) 19:37:29.12
>>272
ポインタと配列の違いについて学ぶ必要があるのはおまえだな
277 :デフォルトの名無しさん2011/07/02(土) 19:37:48.82
>>272

moji[0]の0のは行が0番目って意味で
100文字まで入れれるってことじゃないのですか?

0 1 2 3 4 5
0 M O R I T A
1
2
3
4

じゃないんですか?
280 :デフォルトの名無しさん2011/07/02(土) 19:40:44.83
>>276
うむw
char moji[100][100];
でmojiの領域は確保されてて
moji[0] = "MORITA"
ではmoji[0]のアドレスを書き換えることができないからコンパイルエラーになるのの間違い
あうw
281 :デフォルトの名無しさん2011/07/02(土) 19:42:54.87
>>280
char moji[100][100]で
101*101=10201の領域の文字列を入れれるんですよね?

この配列の5個の領域にMORITAって入れたいときはどうすればいいんですか?

多次元配列に限ります。char*とかstrcpyは関係ないので無しということで。

283 :デフォルトの名無しさん2011/07/02(土) 19:44:37.45
>>281
何が言いたいのか、さっぱりわからん
297 :デフォルトの名無しさん2011/07/02(土) 20:31:18.26
>>281

>この配列の5個の領域にMORITAって入れたいときはどうすればいいんですか?
初期化時点なら下記。
char moji[100][100] = {"MORITA", "MORITA","MORITA","MORITA","MORITA"};

式中ならstrcpyを使う。

>101*101=10201の領域
100*100じゃないの?
301 :デフォルトの名無しさん2011/07/02(土) 20:45:27.97
>>297
初期化の場合はできて式中ではそれができないってやっぱり不便でしょうか?
何故できないのでしょう?何都合が悪いのでしょうか?
275 :デフォルトの名無しさん2011/07/02(土) 19:35:15.86
moji[][0]=
moji[][1]=
moji[][2]=
278 :デフォルトの名無しさん2011/07/02(土) 19:38:00.88
>>275もアホ
284 :デフォルトの名無しさん2011/07/02(土) 19:45:36.00
>101*101
いきなりアウトすぎる
最初からやり直してこいこの馬鹿は
286 :デフォルトの名無しさん2011/07/02(土) 19:48:40.65
>>284
何がアウトなんだよ。
101行、101列だとchar1バイトの要領が10201だろ?
287 :デフォルトの名無しさん2011/07/02(土) 19:49:47.72
>>286
moji[99][99]までだろ?
289 :デフォルトの名無しさん2011/07/02(土) 19:51:54.52
>>287
うん、だから設定時は数、実際に単位にわけると添え字は設定数-1とか
そういう細かいことはどうでもいいです・・

ただ単に
moji[0][1]=M
moji[0][2]=R
moji[0][3]=I



これがしたいだけ、ただそれだけ。
295 :デフォルトの名無しさん2011/07/02(土) 20:08:47.96
>>289
どうでもよくない
致命的な間違いだ

いいか、どうでもよくないぞ、絶対に
実際に長さ 101 の文字列を入れて結果を確認すれば
ことの重大さがわかる

文字数とは別な話、行数を1つ余計に数えるのは何のためだと教わった?
師匠によっては破門を宣告されるほどのことだぞ
288 :デフォルトの名無しさん2011/07/02(土) 19:50:25.99
リテラル文字列の返す値はアドレスだからな。
ポインターにしか入れたら駄目だよ。
290 :デフォルトの名無しさん2011/07/02(土) 19:54:01.50
char moji[100][100];
で&(moji[0][0])が1000番地として
"MORITA"で"MORITA"が2000番地に確保されたとして
moji[0] = "MORIATA"
でmoji[0]が2000になったとしたら
moji[0][0]の番地が2000になるだろ?
291 :デフォルトの名無しさん2011/07/02(土) 19:56:38.19
="〜〜文字列〜〜"
では文字は代入できないわけですか?

='文字'
だと代入できるんですが・・
293 :デフォルトの名無しさん2011/07/02(土) 20:02:38.83
あぁそうだった・・
C言語は文字型がないのか。
文句言っても仕方ないな。

ちょっと別の方法考えますわ。
298 : 忍法帖【Lv=21,xxxPT】 2011/07/02(土) 20:33:22.87
>>293
>C言語は文字型がないのか。

charもあるし文字型リテラルもあるけど?
294 :デフォルトの名無しさん2011/07/02(土) 20:03:35.09
Cの=演算子は配列を代入することができません
例えば
int a[5], b[5];
a = b;
のようなことはできません
同様に
char c[5];
c = "ABC";
のようなこともできません
文字列文字列と言っていますが、Cでは文字の配列ですので
296 :デフォルトの名無しさん2011/07/02(土) 20:11:53.00
>>294
なるほど・・・・
となると多次元配列で文字列使うときはstrcpyか。
299 :デフォルトの名無しさん2011/07/02(土) 20:38:22.39
文字型リテラルなんてねえよ、あれは int だしリテラルとして実装される保証がないからポインタで指せない
302 :デフォルトの名無しさん2011/07/02(土) 20:45:57.81
二次元配列使うなら構造体にする。

#typedef struct {
char name[100]:
} ST_NAME;

ST_NAME meibo[100] = {"MORITA", "MORITA","MORITA","MORITA","MORITA"};
printf("%s\n",(char *)meibo[0].name);
meibo[0]=meibo[1];

DOSのTurboC++で作ってたときはchar *のキャストもいらんかった。
エラーレベルの設定が低かったからかな?
305 :デフォルトの名無しさん2011/07/02(土) 20:54:19.65
>>302
とっつぁんよ、いつからキャストがいるようになったんだい?
プリプロセッサ指令はともかくコロンとか、そんな時代なかったぞ

static の件も健忘か、コレステロールは怖いねえ
310 :デフォルトの名無しさん2011/07/02(土) 21:14:56.08
>>302
おお!!!!!
その手があったか。

構造体の中って要素が型名+変数名で型名になってややこしくて
(typedef{char KOIRU[100],int REAKOIRU}JIBAKOIRUだと
JIBAKOIRUは型名、int REAKOIRUは変数宣言じゃなくてintとREAKOIRUで
int REAKOIRU型の変数てか単にint型があるよってだけでREAKOIRUとか
変数名っぽく記述するのって約束なのかな?)


であんま考えた事なかったんだよな



312 :デフォルトの名無しさん2011/07/02(土) 21:21:25.03
>>302
に対してありがとうすぎる・・・・・
勉強に励むわ・・
313 :デフォルトの名無しさん2011/07/02(土) 21:23:49.22
配列は構造体型もいけるのか・・
まじで目から鱗だ。

本当にありがとう>>302
304 :デフォルトの名無しさん2011/07/02(土) 20:53:38.18
main関数4つ書きたいです
307 :デフォルトの名無しさん2011/07/02(土) 21:00:58.42
>>304
おやすいご用で
main() {}
main() {}
main() {}
main() {}
コンパイルや実行がしたいとは言わなかったよな
309 :デフォルトの名無しさん2011/07/02(土) 21:10:03.09
>>307
なんつうかさ、このスレにいる必要ないよね、おまえ
306 :デフォルトの名無しさん2011/07/02(土) 21:00:03.54
多少のも違いぐらいスルーしよろ。キモイよこの基地外。
308 :デフォルトの名無しさん2011/07/02(土) 21:03:39.05
>>306
キモくて結構、おまえにモテようとは思ってないさ
メカをキモがるバカ女みてえのは願い下げだ
311 :デフォルトの名無しさん2011/07/02(土) 21:20:11.77
>294
上のはGCC拡張でできた気がするが、まぁいいや
314 :デフォルトの名無しさん2011/07/02(土) 21:28:10.93
よく見ると>302は正しくない
ST_NAME meibo[100] = {{"MORITA"}, {"MORITA"}, ...以下略
のように、外側は配列のブレース、内側は構造体のブレースが必要
まぁ、もっと言うと{{{"MORITA"}}, ...のようにchar []のブレースも必要だけど文字列での初期化時にはなくてもいい(冗長だから)
まぁ、構造体のブレースも要素が一つだから気を利かせてくれているんだろうけど
316 :デフォルトの名無しさん2011/07/02(土) 21:46:27.90
>>314
何いってるんだ・・・・
321 :デフォルトの名無しさん2011/07/02(土) 22:42:34.59
>>302 も >>314 も間違ってるってだけ
317 :デフォルトの名無しさん2011/07/02(土) 22:12:17.90
ブレースがなぜ必要か知らずに枝葉末節だけ憶えるのは大変そうだね、まあ頑張れや
318 :デフォルトの名無しさん2011/07/02(土) 22:13:58.28
>>317
言ってしまえば終わり、確かにいわれてみればそうかも的なことを
あらゆる事に関して付け加えるのは止めろ。
319 :デフォルトの名無しさん2011/07/02(土) 22:21:40.57
>>318
やめねーよハゲ
2chでなに命令してんだ
323 :デフォルトの名無しさん2011/07/02(土) 22:53:53.03
>302
サンプルソース作って動作確認。
#include<stdio.h>
typedef struct {
char name[100];
} ST_NAME;

ST_NAME meibo[100]={"TANAKA","SUZUKI","SATO","\0"};

int main(void)
{
int i=0;
while(meibo[i].name[0]) {
printf("%s\n",meibo[i].name);
i++;
}
return 0;
}

結果
ttp://ichigo-up.com/cgi/up/qqq/nm38263.jpg
329 :デフォルトの名無しさん2011/07/02(土) 23:28:54.82
もう処理系に依存するとか面倒くさいこというなよな。
最大公約数的なことを教えてくれればそれでいい。


>>321

>>323はまちがってねーだろうが
331 :デフォルトの名無しさん2011/07/02(土) 23:35:56.43
処理系に依存したくなければ >>323 てか? …絶望の壁…
333 :デフォルトの名無しさん2011/07/03(日) 00:05:56.42
>>323
\0入れなくても要素数に大して初期化値数が足らない場合は0埋されるよ。

俺から質問。
"\0"ってした場合、 0が2つ入るってことだよね?
325 :デフォルトの名無しさん2011/07/02(土) 22:57:10.99
>while(meibo[i].name[0]) {
この条件って大丈夫なの?
大丈夫だとしてもなんか怖い
326 :デフォルトの名無しさん2011/07/02(土) 22:59:13.28
>>325
こういうのはふつうは
for(int i=0;meibo[i].name[0]!=0;i++) {
と書く。
!=0は好みだけどオレは省かない
327 :デフォルトの名無しさん2011/07/02(土) 22:59:40.21
大丈夫だよ
慣れれば気にしなくなる

while(meibo[i].name[0] != '\0'){
と等価だけどこっちのほうがいい?
330 :デフォルトの名無しさん2011/07/02(土) 23:35:22.54
処理系に依存するのをめんどくさいと言う奴がめんどくさい
分かってて書いててそれを伝えてるならいいがそうでないなら書くな

あ、過去レスが合ってるかとかは見てないから知らん
332 :デフォルトの名無しさん2011/07/03(日) 00:00:45.12
>>330
処理系依存は原理的なことじゃねーだろ。

基礎概念的なことがまず先にあって処理系だろ。

概念→応用だろ。


334 :デフォルトの名無しさん2011/07/03(日) 00:08:17.05
>>332
じゃ、原理的なことって何だよ? C 以外の言語で話せばご満足か?
E7 6D 26 4A CC 6F 2A 13 00 80 32 14 …
335 :デフォルトの名無しさん2011/07/03(日) 00:11:02.73
>>334
最大公約数つっただろ。
そういうな、分かってて、あえて自分の知恵をヒケラカスノやめろ。
参考書にのってる文法的なことがこのスレの場合原理的なことくらい
わかんだろ。
338 :デフォルトの名無しさん2011/07/03(日) 00:16:03.87
>>335
結局何が言いたいの?
処理系依存のコード書くなってこと?
処理系依存だと言う指摘がいらないってこと?

前者なら賛成 後者なら反対
339 :デフォルトの名無しさん2011/07/03(日) 00:20:13.85
>>335
じゃ、最大公約数って何だよ? 知恵がないから聞きに来てる身の者が根拠もなく
処理系依存はイヤよって拒否反応を勝手に作って耳ふさいでるだけだろ

お仕事は職場に依存しなきゃできないんだよ
いやならせいぜいコンビニのバイトでもしてたら? (コンビニのバイトさんに失礼だが)
あそこでも通貨は円だったり色々あるが
340 :デフォルトの名無しさん2011/07/03(日) 00:24:45.78
>>339
i386系amd64系で動くコードにしときゃだいたい問題ないんだよ
343 :デフォルトの名無しさん2011/07/03(日) 00:29:42.79
>>340
ふーん、それで TANAKA SUZUKI SATO が出せればいいのか
C は最大公約数でも原理でもねえな
344 :デフォルトの名無しさん2011/07/03(日) 00:32:03.67
>>343
337 :デフォルトの名無しさん2011/07/03(日) 00:13:24.63
概念があってたとして、それを実現した処理系依存のコードで説明されても
違う処理系の人はうまく動かなくて混乱するだけだな

処理系依存だって書いてくれれば、意図(概念)を汲み取ろうとできるかも知れんけど
345 :デフォルトの名無しさん2011/07/03(日) 01:07:34.56
C++やればすべてが解決
346 :デフォルトの名無しさん2011/07/03(日) 01:10:01.37
>>345
メモリが解放されません><
347 :デフォルトの名無しさん2011/07/03(日) 01:26:35.61
ポインタのときの*っていらなくね?
型のサイズがわかったらいいんだろ?
348 :デフォルトの名無しさん2011/07/03(日) 01:30:39.68
**のとき、何のサイズがわかったらいいんだ?
349 :デフォルトの名無しさん2011/07/03(日) 01:31:51.45
>>348
自分で考えろタコスケ
350 :デフォルトの名無しさん2011/07/03(日) 01:34:20.64
うん、すっごーく深く考えてるよ
人に丸投げするような下郎とは次元の違うところで
351 :デフォルトの名無しさん2011/07/03(日) 01:37:41.50
>>350
よう低脳
352 :デフォルトの名無しさん2011/07/03(日) 02:15:35.77
絶望の壁 [単行本]
北村 謙 (著)
商品の説明
内容(「BOOK」データベースより)
弱音を吐くな!―やれば出来るのさ。あなたは死ぬまでに幾つの夢を手にする事が出来るだろうか?絶望という壁を乗り越えて。
353 :デフォルトの名無しさん2011/07/03(日) 03:33:21.49
メモリ使用量の話なんだけど
配列でn要素取得するのと
ポインタ配列をn要素取得した後malloc関数で
n要素領域確保して割り当てた場合では
後者のほうがポインタ変数n-1個分多くなる?
354 :デフォルトの名無しさん2011/07/03(日) 03:35:45.93
>>353
管理領域があるから差はもっと大きくなるよ
356 :デフォルトの名無しさん2011/07/03(日) 16:04:35.76
void Func(int m, int n)
{
if(m < n)
{
/* do something */ ;

return Func(m , n - 1) ;
}
}

こういうコードはループに置き換えられるって本当?
357 :デフォルトの名無しさん2011/07/03(日) 16:10:15.65
>>356
末尾再帰の最適化の事なら、出来るよ
358 :デフォルトの名無しさん2011/07/03(日) 20:59:12.19
>>356
アセンブラ読めるようになれ
359 :デフォルトの名無しさん2011/07/03(日) 21:13:07.60
>>356
returnするということは、もうその関数内でm,nは使われない
ということは変更してしまってもいい
ということで以下のように変換できるし、勝手にコンパイラが最適化してくれる
voidじゃなかったとしても大体同じ感じで書き換えられる

void Func(int m, int n)
{
while(m < n)
{
/* do something */ ;

n = n - 1;
}
}
360 :デフォルトの名無しさん2011/07/03(日) 21:22:48.70
配列とポインタの関係がよく理解出来ない(´・ω・`)
361 :デフォルトの名無しさん2011/07/03(日) 21:24:44.39
>>360
ポインタのポインタや
構造体のポインタをやるといい
364 :デフォルトの名無しさん2011/07/03(日) 21:34:21.91
>>360
配列
□□□□□□□

ポインタ
362 :デフォルトの名無しさん2011/07/03(日) 21:28:02.63
もうちょっと具体的に行ってくれないと困るな
隅から隅まで説明することもできないし
368 :デフォルトの名無しさん2011/07/04(月) 02:08:47.99
松本龍復興担当相、やや遅れて入室したことにへそを曲げ
知事との握手を拒否

http://www.youtube.com/watch?v=VtUqWdbjnTk

「客を出迎えるときはおまえが先に部屋に入ってから俺を呼べ」
「今のはオフレコで」
「書いたらその社は終わりだからな!」
369 :天使 ◆uL5esZLBSE 2011/07/04(月) 12:27:52.78
Rubyバカにしてる子ってさ
変数に$ついてる言語触ってるって事だよね

いちいちSHIFT+4キーおして $ 打ちまくってる感触はどう?
土方が何をほざいて
371 :デフォルトの名無しさん2011/07/05(火) 00:21:58.72
struct VECTOR {
float x, y, z, pad;
};
struct VECTOR A, B;
f()
{
A = B;
}
このコードを gcc -S a.c して出力されたアセンブラコードを見たら
.file "a.c"
.comm A,16,4
.comm B,16,4
.text
.globl f
.type f, @function
f:
pushl %ebp
movl %esp, %ebp
movl B, %eax
movl %eax, A
movl B+4, %eax
movl %eax, A+4
movl B+8, %eax
movl %eax, A+8
movl B+12, %eax
movl %eax, A+12
popl %ebp
ret
.size f, .-f
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
.section .note.GNU-stack,"",@progbits
372 :3712011/07/05(火) 00:28:38.03
コンパイルオプションでSSEを指定すれば変わるかと思って
gcc -S a.c -O4 -msse3 -march=core2とした場合だと
.file "a.c"
.text
.p2align 4,,15
.globl f
.type f, @function
f:
movl B, %eax
pushl %ebp
movl %eax, A
movl %esp, %ebp
movl B+4, %eax
movl %eax, A+4
movl B+8, %eax
movl %eax, A+8
movl B+12, %eax
movl %eax, A+12
leave
ret
.size f, .-f
.comm A,16,4
.comm B,16,4
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
.section .note.GNU-stack,"",@progbits
SSEの128bitレジスターを使った転送をしてくれるかと思ったら、ぜんぜん普通にmovlで32bitづつだった。
(gcc version 4.5.2)

最適化によるSSEのフル活用って、実際はあまり期待できないのかもしれない。
この辺はインラインアセンブラなどで手書きするのが確実なのかもしれない。
374 :デフォルトの名無しさん2011/07/05(火) 01:56:33.97
>>372
SSEの128bitレジスターを使った転送
だとどのくらい早くなるの?
376 :デフォルトの名無しさん2011/07/05(火) 05:56:53.87
>>372
SSEはMMXと違ってOSのサポート云々があるからgccが躊躇してるとか?
377 :デフォルトの名無しさん2011/07/05(火) 07:54:30.59
代入先のアドレスのアライメントが仕様外の可能性あるからという線は?
378 : 忍法帖【Lv=18,xxxPT】 2011/07/05(火) 11:27:19.55
// これならgcc4.3.4でmovapsを使うんだけど。
// 構造体だったりローカル変数だったりするとどうも弱いね。
typedef struct {float x, y, z, w;} Foo;

static void f(float * A, float * B, int cnt)
{
for (int ic = 0; ic < cnt; ++ic) A[ic] = B[ic];
}

void foo()
{
static Foo A;
static Foo B;
f((float *) & A, (float *) & B, sizeof(A) / sizeof(float));
}
383 :デフォルトの名無しさん2011/07/06(水) 12:51:44.26
ポインタってどうゆう場面で使うんですか?
使い道が想像つかない...
385 :デフォルトの名無しさん2011/07/06(水) 13:01:58.80
>>383
想像つかないうちは使わないほうが良いプログラムをかけるから使わないほうがいいよ
386 :デフォルトの名無しさん2011/07/06(水) 13:22:05.15
>>383
swap関数とか作った事ないの?
387 :デフォルトの名無しさん2011/07/06(水) 13:25:16.52 BE:2145322548-2BP(0)
テキストファイルの文字数と数字と改行をカウントするプログラムなのですが、
うまく実行できず、困ってます
#include <stdio.h>
#include <stdlib.h>
void main (void){
FILE*fp;
int ou,co,su,nn,kk;
char fn[20];
printf("ファイル名を入力してください \n");
scanf("%s",&fn);
fp=fopen(fn,"r");
if(fp==NULL){
printf("ファイルが開けません。\n");
exit(0);
}
ご指摘お願いいたします。
388 :デフォルトの名無しさん2011/07/06(水) 13:28:48.84 BE:4826974289-2BP(0)
while(kk!=EOF){
if((kk>='a')&&(kk<='z')){
co++;
}
else if((kk>='A')&&(kk<='Z')){
ou++;
}
else if((kk>='0')&&(kk<='9')){
su++;
}
else if(kk=='\n'){
nn++;
}
kk=fgetc(fp);
}
printf("英大文字は%d文字\n",ou);
printf("英小文字は%d文字\n",co);
printf("数字は%d\n",su);
printf("改行は%d\n",nn);
fclose(fp);
}
391 : 忍法帖【Lv=19,xxxPT】 2011/07/06(水) 13:48:40.40
>>388
突っ込みどころが多過ぎるが、取り敢えず1レスに収まらないソースはcodepadかideoneに貼れ。
それからコンパイラの警告レベルを引き上げて、警告をきちんと読め。
389 :デフォルトの名無しさん2011/07/06(水) 13:32:00.08
>383
大量のデータを関数に渡すor複数のデータを関数から受け取るとき。
最大データ量が不明のとき。
390 :デフォルトの名無しさん2011/07/06(水) 13:41:46.20
>383
ファイル読み込むとき、
「このファイルのデータをここ(ポインター指定)に最大nバイト読み込んでください」
って指定をする。

gfetc、fscanfとか例外もあるけど。
392 :デフォルトの名無しさん2011/07/06(水) 13:49:51.60
>>390
fscanf()は例外じゃないな。
394 :デフォルトの名無しさん2011/07/06(水) 19:23:24.59
例えば10進数で15は2進数で1111ですが
この1111を1000+100+10+1に分解して
出てきた2のn乗をそれぞれ記録したいんですが
1111を分解するいい方法はありませんか?
396 :デフォルトの名無しさん2011/07/06(水) 19:32:02.24
>>394
右シフト >> と 1との&
402 :デフォルトの名無しさん2011/07/06(水) 21:01:10.55
Cって呼び出せる場所を制限した関数ってつくれなかったっけ?
405 :デフォルトの名無しさん2011/07/06(水) 21:19:51.87
>>402
関数内関数はCには無いな
手続き型言語で非オブジェクト指向言語だとpascal位かな
406 :デフォルトの名無しさん2011/07/06(水) 21:25:05.30
>>405
gccだとできる
407 :デフォルトの名無しさん2011/07/06(水) 21:27:43.13
codepadで書いたプログラムって保存される?
今課題で書いてる宿題プログラムがあるんだが
パクられたくないから、ネット上に保存されたくない。

codepadってどういう仕組み?
408 :デフォルトの名無しさん2011/07/06(水) 21:31:35.20
>>407
privateにチェック入れる
あとで削除する
410 :デフォルトの名無しさん2011/07/06(水) 21:36:31.24
>>408
privateの横の?あるけど英語分からんかった。
日本語に翻訳してもちょっと理解しにくいんで
翻訳してくれ。

絶対に誰にもばれたくない。
414 :デフォルトの名無しさん2011/07/06(水) 21:42:34.65
>>410
前半は省略して

privateにチェック入れるとRecent Pastesってところにリンクを張らない
検索エンジンにも引っかからない
URLを知っている人しか見られない
409 :デフォルトの名無しさん2011/07/06(水) 21:33:10.14
そもそも書いたコードをネットにうpしなければいいんじゃない?
411 :デフォルトの名無しさん2011/07/06(水) 21:38:37.67
手元に開発環境つくれよ
412 :デフォルトの名無しさん2011/07/06(水) 21:40:13.82
>>411
何か簡単なプログラミング環境ないですか?

Cygwinしか入ってないです。
413 :デフォルトの名無しさん2011/07/06(水) 21:41:17.59
VC++
MinGW/GCC
VirtualBox/Ubuntu
415 :デフォルトの名無しさん2011/07/06(水) 21:47:09.84
>>413
30分くらいで出来る奴頼む・・・
cygwinは20〜30分くらいで導入出来た。
もちろんパッケージは制限してだよ。

窓の杜とかも見たけど、何かいいのないですか?
416 :デフォルトの名無しさん2011/07/06(水) 21:48:24.32
>>415
つLSI-C
学習用途ならこれで十分だろ
417 :デフォルトの名無しさん2011/07/06(水) 21:51:17.08
>>416
cygwinみたいに実行時の端末もデフォでありますか?
418 :デフォルトの名無しさん2011/07/06(水) 22:21:56.00
>>417
つcommand.com/cmd.exe
419 :デフォルトの名無しさん2011/07/06(水) 22:28:10.61
>>415
つーかcygwinの何が不満なの?

インストールが楽なのはVC++だけど、
Cの学習用としてCygwinよりBetterだとは思わない。
422 :デフォルトの名無しさん2011/07/06(水) 22:38:27.09
>>419
二つの環境で動作OKだったら安心だから。
安心チェック!
423 :デフォルトの名無しさん2011/07/06(水) 22:39:18.48
>>415
TCC はインストール不要

http://bellard.org/jslinux/

プロンプトが出たら tcc hello.c でコンパイル
必要なのはウェブブラウザだけ

バイナリもあるからインストールも簡単だと思われ

http://bellard.org/tcc/
424 :デフォルトの名無しさん2011/07/06(水) 22:42:01.39
>>419
cygwinってやっぱ良いの?
何が具体的に良いの?

メモリを効率よく多く呼び出せるとか?
425 :デフォルトの名無しさん2011/07/06(水) 22:44:36.62
>>422

んじゃ、gcc系はダブルチェックにならないのでVC++かな。
インストールは簡単。インストーラを起動して、次々、同意、
とかしていればよい。
だが、ネットワークインストールになるので
ダウンロードに時間はかかる。

分かっている人にはなんでもないけど、初めのうちはC++として
コンパイルしがちなので注意。
420 :デフォルトの名無しさん2011/07/06(水) 22:36:53.33
今時LSI-Cは有り得ない。intが2バイトなんて学習用途として最悪だ。
458 :デフォルトの名無しさん2011/07/07(木) 00:15:15.81
>>420
学習用途でバイトの違いって重要か?
変な所にこだわるな。。。
465 :デフォルトの名無しさん2011/07/07(木) 00:24:35.43
>>420
学習用途でバイトの違いって重要か?
しかも独学じゃなく、学校のお授業だぞ?

独学ならwinじゃvcかcygwin+gcc薦めるとこだが
(bccが個人的に一番好きだったが、亡くなったしね)
421 :デフォルトの名無しさん2011/07/06(水) 22:37:58.34
ショートファイルネームしか扱えなかったんじゃなかったっけ
今じゃ辛いな
426 :デフォルトの名無しさん2011/07/06(水) 22:45:29.37
VC++って何の略?

ビジュアルスタジオのことじゃないよね?
427 :デフォルトの名無しさん2011/07/06(水) 22:48:35.14
>>424

おっと、回答しているうちにレスが。

期待した答えと違うかもしれないが、cygwinが
優れているわけではない。
gccがコンパイラの定番であり、同時に最前線といえる存在だから、
ということが大きいかな。

>>426
VC++ = Visual C++
431 :デフォルトの名無しさん2011/07/06(水) 22:56:20.80
>>427
visual studioとvisual C++は一緒?
432 :デフォルトの名無しさん2011/07/06(水) 22:58:23.34
>>431
ちがう
433 :デフォルトの名無しさん2011/07/06(水) 23:00:18.18
>>432
え?でもgoogleでvisual C++で検索かけると
Microsoft visual studio expressってのが一番上にくるんだが・・・
436 :デフォルトの名無しさん2011/07/06(水) 23:08:27.78
>>433

VisualStudioはMSの開発用スイート
MS Officeにワード、エクセル、パワポ・・・が含まれているように
VisualStudioにVB,VC#、VC++…が含まれている。

ネットワークインストールっていうのは、ネットワークを介して
インストールすること。VC++のインストーラは、インストールイメージの
ダウンロードやその実行をしてくれる。レジュームなどの面倒も
見てくれる。
428 :デフォルトの名無しさん2011/07/06(水) 22:48:37.25
c言語で参照範囲にかかわる修飾詞は
externのほかになにかありますか?
430 :デフォルトの名無しさん2011/07/06(水) 22:54:37.89
>>428

externは記憶クラス指定子(storage-class-specifier)のひとつ。
同じく記憶クラス指定子に属するのは

auto, register, static, typedef

実際はstaticとexternだけ気にすれば良い。
435 :デフォルトの名無しさん2011/07/06(水) 23:06:48.16
ネットワーク経由じゃないインストールって逆にあるのかw?
437 :デフォルトの名無しさん2011/07/06(水) 23:12:54.21
>>435
前は(VS2005とか2007あたりだったとおもうが)インストールイメージを
まるごとダウンロードできた。

インストールイメージは600MB位だったので、
いっぺんに10台とかインストールするときには
ダウンロードしたイメージをCD-Rに焼いてから、実行すると
効率的だった。
442 :デフォルトの名無しさん2011/07/06(水) 23:23:30.27
>>437
全然言ってる意味わからんくてワロタww

環境を導入するときってzipファイルとかじゃないんですか?
449 :デフォルトの名無しさん2011/07/06(水) 23:58:29.18
>>441
vi、emacs以前はわからない。ラインエディタとかあったのだろうか。
もしかしてパンチングカード?

>>443
catって編集できないぞ。まぁ釣りだろうけど。

>>444
当たっていそう。CD-Rにそのまま焼けたり、deamon Toolでマウント出来たりする。

>>442
>全然言ってる意味わからんくてワロタww
わからんのは、あなたが無知だから。
無知すぎて説明のしようがない。
451 :デフォルトの名無しさん2011/07/07(木) 00:06:24.58
>>449
>catって編集できないぞ。まぁ釣りだろうけど。

Bill Joy cat で検索
453 :デフォルトの名無しさん2011/07/07(木) 00:10:24.89
>>449
>vi、emacs以前はわからない。ラインエディタとかあったのだろうか。

http://web.cecs.pdx.edu/~kirkenda/joy84.html
457 :4492011/07/07(木) 00:14:44.07
>>451

>>449書いたあとで、ワンライナー位なら行けるか、と思っていたらviですか。
まぁそれは都市伝説にしても、ラインエディタでコーディングとか、
とても想像できない。
462 :デフォルトの名無しさん2011/07/07(木) 00:19:33.56
>>449
vi,emacs以前というと。。。edだな
まんまediterの略
438 :デフォルトの名無しさん2011/07/06(水) 23:16:32.18
Unix時代ってどうやってプログラム書いてたんですか?CUIですよね?
メモ帳とかワードパッドとか、編集用のアプリケーションとかあったんですか?
439 :デフォルトの名無しさん2011/07/06(水) 23:18:13.62
>>438
定番はその頃からVIとemacs。どちらも元々ターミナル用のエディタだった。
440 :439 忍法帖【Lv=26,xxxPT】 2011/07/06(水) 23:20:14.26
>>439
違和感あるなと思ったら、VIはないな。vi
VSの流れで大文字にしてしまった。
443 :デフォルトの名無しさん2011/07/06(水) 23:23:53.80
>>438
cat で
441 :デフォルトの名無しさん2011/07/06(水) 23:21:23.54
そもそもvi自体がない
444 :デフォルトの名無しさん2011/07/06(水) 23:31:22.74
イメージファイルって、例えばPCゲームの場合でいうと,ソフトCDを
CD-ROMドライブにいれてないのに、それが入ってる状態としてハードディスク
が認識している状態のファイルのことですか?

良く分かりません。
445 :デフォルトの名無しさん2011/07/06(水) 23:36:40.66
学校の課題で
タイピングゲームで単語の先頭から1 文字ずつ比べて初めてミスタイプした文字をミスタイプ文字とし
て記録し、一番多くミスタイプした文字を表示するようにせよ。というものがでました。途中までは頑張ったのですが
27行目をどうしたらよいか悩んでいます。教えてください。途中までhttp://codepad.org/o56IuzN8
言語:C言語
OS:Linux
コンパイラ;gcc
446 :デフォルトの名無しさん2011/07/06(水) 23:51:54.68
>>445

そういうのは宿題スレへ
ttp://hibari.2ch.net/test/read.cgi/tech/1308749241/
448 :デフォルトの名無しさん2011/07/06(水) 23:56:51.45
>>446
すみませんでした。
447 :デフォルトの名無しさん2011/07/06(水) 23:54:07.18
最近仕事はマンネリ気味・・・
どこかに面白いソースとか転がってないかな?
450 :デフォルトの名無しさん2011/07/06(水) 23:58:49.94
>>447
基本的に面白いソースってどういうものをいうの?
プログラムって基本的に計算だよね、面白さはどこに見出すの?
452 :デフォルトの名無しさん2011/07/07(木) 00:08:56.53
>>447
>どこかに面白いソースとか転がってないかな?

http://bellard.org/otcc/

これはどう?
454 :デフォルトの名無しさん2011/07/07(木) 00:10:59.20
>>452
英語読めってのか?って突っ込まれたいだけだろお前。
456 :デフォルトの名無しさん2011/07/07(木) 00:13:00.29
>>454
英語は読まなくていいよ
そこにある otccn.c と otccelfn.c が面白そうなので紹介しただけ
460 :デフォルトの名無しさん2011/07/07(木) 00:17:27.34
>>456
どんなプログラムなの?
461 :デフォルトの名無しさん2011/07/07(木) 00:18:27.20
>>447

これはどう?
ある意味すごく面白いよ。

改訂新版 Cプログラミング診断室
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/
463 :デフォルトの名無しさん2011/07/07(木) 00:22:01.32
>>460
C コンパイラ

>>447
これも良いかも
ドキュメント合わせても 1000 行以下の仮想マシン

https://github.com/GenTiradentes/tinyvm
464 :デフォルトの名無しさん2011/07/07(木) 00:22:24.03
>>459>>460

>>461の8章がまさにそれ。

ttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.1.html
466 :デフォルトの名無しさん2011/07/07(木) 01:48:35.76
>>464
こういうマクロの組み方には
有名な元ネタがあるんじゃなかったっけ?
何かで読んだ気がする
459 :デフォルトの名無しさん2011/07/07(木) 00:16:22.76
そういや以前マクロを駆使してPascalっぽいコーディングをしていたソースを見たことあるな
467 :デフォルトの名無しさん2011/07/07(木) 04:54:05.00 BE:670413825-2BP(0)
どなたか入力された英大文字、英小文字、数字、改行の数を数えるプログラム書いてください。
自分ではなぜかうまくいかないので、参考にしたいのでお願いします。
468 :デフォルトの名無しさん2011/07/07(木) 05:20:11.59
>>467
宿題を丸投げするなら宿題スレへ
ttp://hibari.2ch.net/test/read.cgi/tech/1308749241/
469 : 忍法帖【Lv=20,xxxPT】 2011/07/07(木) 10:48:50.13
出納帳の真似事をやってみたと思いねぇ。
intが2バイトじゃ、ちょっと買い物したら覿面にオーバーフローしちまう。
おまけにprintf("%g", price * 1.05)なんてやろうと思った日には、リンクするライブラリにまで気を遣わなくちゃなんねぇ。
それがLSI-Cを使うってこった。
470 :デフォルトの名無しさん2011/07/07(木) 11:04:50.92
>>469
なぜ long を使わないんだ?
471 :デフォルトの名無しさん2011/07/07(木) 11:17:31.31
いまどきintが2バイトかもしれないと考えながら教える人も少ないだろ
472 :デフォルトの名無しさん2011/07/07(木) 11:29:08.15
危ないから int は禁止(goto と同様に)

ってバカ避けを増やしていかないといけないってことか
バカを取り除くほうが有用な気もするが
474 :デフォルトの名無しさん2011/07/07(木) 18:53:34.16
今のご時勢... 入門ならほとんどググッて解決せん? インターネットに繋がらなければ知らんが
CのOOPページを紹介してくれ 最近ホットな話題なんで
477 :デフォルトの名無しさん2011/07/07(木) 19:05:48.22
>>474
ホット。。。か?
あんな苦し紛れな事するぐらいなら、C++をベターCとして使った方が良いだろ

漢の浪漫としても2流
475 :デフォルトの名無しさん2011/07/07(木) 18:54:22.75
それこそぐぐれしw
476 :デフォルトの名無しさん2011/07/07(木) 19:00:42.47
[迷信]今どき int が 16 ビットの処理系なんて無い
http://www.kijineko.co.jp/tech/superstitions/there-is-not-16bit-int-now.html
479 :デフォルトの名無しさん2011/07/07(木) 19:08:10.76
>>476
LSI-CはDOSでも動きますが?
481 :デフォルトの名無しさん2011/07/07(木) 19:12:23.25
>>476
LSI-C は 32bit Windows 上で動きますが?
483 :デフォルトの名無しさん2011/07/07(木) 19:21:50.88
>>481
内容見てから口あけろ
480 :デフォルトの名無しさん2011/07/07(木) 19:11:18.93
アホだな 苦行の世界だから 未知の価値があるのに C++他なんて出来て当たり前 エンベッティドの世界はOOPはまだまだだよ!
てか C++でROMとヒープに納めきられる?
484 :デフォルトの名無しさん2011/07/07(木) 19:27:31.07
>>480
むしろ、そんな小さいプログラムにOOPが必要有るのかと。。。
482 :デフォルトの名無しさん2011/07/07(木) 19:13:12.69
CでOOPならGObjectだ
で、マクロ書くのメンドクサくなってValaへ移行するんだ
485 :デフォルトの名無しさん2011/07/07(木) 19:35:39.14
OOPって言葉を最近覚えて使ってみたかったんだな。(゚σ ゚)ホジホジ
486 :デフォルトの名無しさん2011/07/07(木) 19:45:55.35
なんだよ 一辺に答えるのか w

>>475
ほう... デザパタのメディエーターの実装例を見たいんじゃが

>>484
もはや512KROM 64KSRAMも当たり前のチップ世界なんだが 小さいのか?
ただC++ではオーバフローするが...

>>485
残念ながらCでのOOPの導入は済んでる... がデザパタがいまいちしっくりきていない

入門編はOOPの入門編もある このスレの範疇であれば良いが...
488 :デフォルトの名無しさん2011/07/07(木) 20:07:03.90
>>486
良く読め馬鹿野郎
その規模だとオブジェクト指向で作る事自体が無駄だって言ってんだろ
linuxのカーネルの規模でさえc++使ってねーよ
(linusがc++嫌いってのもあるが)

オブジェクト指向が生きるのはメモリがMB単位になってからだ
487 :デフォルトの名無しさん2011/07/07(木) 19:59:29.20
>[迷信] 今どき int が 16 ビットの処理系なんて無い
...
>では、int 型が 16 ビットの処理系は過去の遺物で、今では極例外的な存在でしかないのでしょうか? 
>もし、本気でそのように考えているのであれば、井の中の蛙になっていることを疑わなければなりません。

>現在でも、H8 や M16C、PIC など、組込み向けの処理系では int 型が 16 ビットのことは普通にあります。
>それらの処理系は、レガシーなものだといえばそうかもしれませんが、広く普及し、現在でも広く使われているわけですから、
>これらを無視して「今どき int が 16 ビットの処理系なんて無い」という論は成り立ちません。

そもそも「今どき int が 16 ビットの処理系なんて無い」という主張を聞いたこと無いんだけど…。
489 :デフォルトの名無しさん2011/07/07(木) 20:22:04.28
そもそも「オブジェクト指向が生きるのはメモリがMB単位になってからだ」という主張を聞いたこと無いんだけど…。
490 :デフォルトの名無しさん2011/07/07(木) 20:26:20.20
>>489
今言った
でも、これなら聞いた事無いか?
オブジェクト指向は規模が小さいと逆にコード量が増える
491 :デフォルトの名無しさん2011/07/07(木) 20:37:11.12
これは新しい学説ですな。φ(・ω・ )カキカキ
492 :デフォルトの名無しさん2011/07/07(木) 20:45:37.13
>>491
むしろ昔から言われてるがな。。。
オブジェクト指向は万能薬じゃないんだし
マンセーし過ぎ
494 :デフォルトの名無しさん2011/07/07(木) 20:51:55.22
まぁでもコード全域に渡ってオブジェクト指向的にする必要はないと思うけどね。
再利用できそうな部分はうまく分離できるように作ってあれば、なんでもいいんじゃない。
495 :デフォルトの名無しさん2011/07/07(木) 22:03:04.58
int ttt(){
char *po=malloc(size);

...
if(...){
/*ここにあるエラー処理から下のfree(po);へジャンプしたい*/
}
...

free(po); /* ← ここに飛びたい*/
return 0;
}

goto使用以外にジャンプする手段ありますか?
497 :デフォルトの名無しさん2011/07/07(木) 22:10:22.93
>>495
malloc と free の間を関数にするか do{}while(0); で囲む
498 :デフォルトの名無しさん2011/07/07(木) 22:10:27.91
> ...
> if(...){
> /*ここにあるエラー処理から下のfree(po);へジャンプしたい*/
> }

...
if(...){
/*ここにあるエラー処理から下のfree(po);へジャンプしたい*/
} else {
...
}

とか。関数にしてreturnさせるとか。
499 :デフォルトの名無しさん2011/07/07(木) 22:11:55.80
お願いします
[1] 授業単元:C演習
[2] 問題文(含コード&リンク)
getopt_longを使ったargv引数解析を行いなさい。
引数:
--apple 1 (省略形はなし,ハイフンは2つ,続引数は必ずあり)
-peach (省略形はなし,ハイフンは1つ,続引数はなし)
-lemon (省略形はありで-l,ハイフンは1つ,続引数はなし)
-melon (省略形はなし,ハイフンは1つ,続引数はあってもなくてもよい)
※続引数がある場合はそれを表示しなさい
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日中
504 :デフォルトの名無しさん2011/07/07(木) 23:49:10.07
typedef struct s{
  char ch[2];
} S;
S s[100];
ってやるのと

char ch[100][2];
ってやるのではどっちのほうがメモリ節約できますか?
506 :デフォルトの名無しさん2011/07/08(金) 00:49:10.75
ぐぐってみたがよく分からん
管理領域が関係してるのか
508 :デフォルトの名無しさん2011/07/08(金) 01:26:28.93
変わんねーよ

添え字のアクセスはコンパイル時に決定されるから領域使わない
511 :デフォルトの名無しさん2011/07/08(金) 01:33:49.65
比較演算を等号の意味で使う馬鹿が後を絶たないのは何でだ?
516 :デフォルトの名無しさん2011/07/08(金) 19:02:10.20
>>511は行間が読めないだけだよ
通常はこの文章を

sizeof(S) == 4
が正となる可能性無い?

と読み解く。
547 :デフォルトの名無しさん2011/07/09(土) 10:58:04.13
>>516
このバカは、比較演算子が正負を返すとでも思っているのだろうか?
512 :デフォルトの名無しさん2011/07/08(金) 01:46:39.41
掲示板で他人を馬鹿呼ばわりする人間が後を絶たない事の方が不思議だわ
515 :デフォルトの名無しさん2011/07/08(金) 05:02:09.03
そもそも、等号というのは比較演算をした結果を返値とする演算子なので。
517 :デフォルトの名無しさん2011/07/08(金) 19:06:30.10
C言語のソースでもないのに==を比較演算と捉えるバカが後を絶たないのはなんで?
518 :デフォルトの名無しさん2011/07/08(金) 19:09:42.74
じゃあ普通に等号書けよ

前者だと
sizeof(S) = 4
となる可能性無い?

こう書けばいいだろ。
520 :デフォルトの名無しさん2011/07/08(金) 19:17:45.92
いわゆるtouchコマンドをエレガントに実装したいんだけど
どうしたら格好いい?
521 :デフォルトの名無しさん2011/07/08(金) 19:19:44.52
>>520
$ cp `which touch` elegant_touch
522 :デフォルトの名無しさん2011/07/08(金) 19:33:26.08
>>521
C言語でお願いします
523 :デフォルトの名無しさん2011/07/08(金) 19:57:23.36
>>522
$ cat elegant_touch.c
#include <sys/syslimits.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
  if(argc < 2) exit(1);
  char buf[ARG_MAX];
  snprintf(buf, ARG_MAX, "/usr/bin/touch %s", argv[1]);
  system(buf);
}
524 :デフォルトの名無しさん2011/07/08(金) 20:23:38.48
>>523
なあ、これバグってね?
525 :デフォルトの名無しさん2011/07/08(金) 20:24:41.80
うん、やっぱりバグってる。
ギャグがすべるのはしょうがないとしても、噛んじゃうのはダサいな。
526 :デフォルトの名無しさん2011/07/08(金) 20:26:07.42
>>525
そうじゃなくてエレガントな実装をお願いします
527 :デフォルトの名無しさん2011/07/08(金) 20:33:57.55
コードを書く阿呆と
コードを書かない阿呆は
どっちが偉いんだろう?
532 :デフォルトの名無しさん2011/07/08(金) 22:15:50.02
能力なくてガチで逃げ回ってるアホにはかなわんだろ
上には上がいる
537 :デフォルトの名無しさん2011/07/09(土) 05:16:35.69
ポインタに関してなんですが、授業、教本
に書いてある解説は読むと言っていることは理解出来ます。
ですが、ポインタのメリットが良く分からないのでイマイチ使い所が分かりません。
郵便番号に例えられても、ああそれで?となってしまうので、ポインタのメリットとポインタを使う意義を教えて貰えませんでしょうか?
541 :デフォルトの名無しさん2011/07/09(土) 09:42:16.78
>>537
ずっと複雑な構成のプログラムになると、ポインタでなければ表現できないものも存在します。
「アルゴリズムとデータ構造」
でググッてみてください。

ポインタの存在そのものが計算機科学にかかせないのです。
538 :デフォルトの名無しさん2011/07/09(土) 07:28:34.71
関数にデータを渡すとき、引数のコピーを渡します。
10Mのデータを渡したとすると、呼び出し元関数、呼び出し先関数両方で合計20Mのメモリを消費し、
呼び出し先関数がさらに別の関数に渡せばさらに消費します。
またデータのコピーするのに時間も消費します。

ポインターを使うと2〜8バイト程度の処理で済みます。
539 :デフォルトの名無しさん2011/07/09(土) 07:31:03.22
あと、関数の戻り値は1つのデータしか返せません。
ですがポインタを利用することで多数のデータを返すことが可能です。
540 :デフォルトの名無しさん2011/07/09(土) 08:08:26.21
ありがとうございます。完結で分かりやすい説明でした。メモリの節約、スピードアップに効力を発揮するわけですね。
542 :デフォルトの名無しさん2011/07/09(土) 09:48:20.09
横から済みません。ポインタが存在しない言語では実装できないロジックってあるんですか?
544 :デフォルトの名無しさん2011/07/09(土) 10:22:37.16
>>542
ポインタと陽にいっていないだけで、ポインタと同じだったり(Java)、あるいは、ポインタのかわりに参照があったり(Pascal)、
ポインタがなくとも、自分で領域管理をして配列の添え字をもってポインタとしたり、手はいろいろあります。
546 :デフォルトの名無しさん2011/07/09(土) 10:49:24.52
>>542
言語仕様上はポインターが無くても、チューリング完全であれば、実装は理論的には可能です。(Brainf*ckなど)
ただしアプリケーションの目的によっては、実行パフォーマンスなどが、実用的でない場合も多々あります。
逆に言えば、アプリケーションの分野ごとに最優先事項が異なるため、多数のプログラミング言語が考案された、とも言えます。
543 :デフォルトの名無しさん2011/07/09(土) 10:07:31.70
質問があります.
UnixのプログラムをWindowsに移植しています.
initstate(2, rngState, 256)
って関数はマイクロソフトのCのライブラリには無いようで
調べてみると乱数と関係する関数の用です.
これを移植するにはどんな関数や代替的な処理をすればよいでしょうか?

545 : 忍法帖【Lv=21,xxxPT】 2011/07/09(土) 10:33:37.45
>>543
・initstate()を使用している目的を調査する。
・その結果、必要があれば自前で同等の乱数生成器を作る。
・それができないならrand()を何らかの方法で変更し、呼び出す毎に値を保存する。
・そもそも乱数系列がUnixのそれと一致していないといけないのなら、諦める。

要は、乱数をどう利用しているかの調査が必要。
548 :デフォルトの名無しさん2011/07/09(土) 10:58:40.81
8bit時代のBASICは配列サイズが固定だったから不便だったな。
clearで初期化できるけど全変数消えちゃうし。
まぁ、アロケート出来ないなら出来ないなりの処理を考えるけど。
549 :デフォルトの名無しさん2011/07/09(土) 10:59:26.16
>547
まだ居たの?粘着キモイよ。
552 :デフォルトの名無しさん2011/07/09(土) 11:12:13.13
>>549
バカ発見。ねえねえ、比較演算子って正負を返すと本気で思ってたの?
569 :デフォルトの名無しさん2011/07/09(土) 11:38:48.64
>>567
>>516はバカであり>>549は>>516本人以外にありえない。つまり>>549はバカ。
550 :デフォルトの名無しさん2011/07/09(土) 11:09:50.83
自作関数を作ったんだけど引数は呼び出し側でもらったほうがいいの?
それとも関数の中でもらったほうがいいの?
553 :デフォルトの名無しさん2011/07/09(土) 11:13:55.02
>>550
グローバル変数で渡すのが簡単だよ
554 :デフォルトの名無しさん2011/07/09(土) 11:15:38.75
普通は外部ファイルにテキストで書き出して関数の中でテキストを読み直すよ
555 :デフォルトの名無しさん2011/07/09(土) 11:16:34.52
値は返すだろ
558 :デフォルトの名無しさん2011/07/09(土) 11:20:41.58
556 :デフォルトの名無しさん2011/07/09(土) 11:16:55.75
呼び出す前に引数の内容をprintfして関数内でscanfを呼び出して
テキスト入力させるのが一般的だよ
557 :デフォルトの名無しさん2011/07/09(土) 11:19:57.60
>>556
ありがとうございます
559 :デフォルトの名無しさん2011/07/09(土) 11:21:32.55
Cの場合は真=1、偽=0なので
正となる可能性
真となる可能性
どちらもおんなじ
560 :デフォルトの名無しさん2011/07/09(土) 11:23:02.53
偽:0
真:0以外
561 :デフォルトの名無しさん2011/07/09(土) 11:23:40.02
>>560
それは真偽判定の場合だボケ
562 :デフォルトの名無しさん2011/07/09(土) 11:25:09.97
>>560
559は関係演算子での話ね
564 :デフォルトの名無しさん2011/07/09(土) 11:28:14.63
>>562
Cでは関係演算子は全部1か0だが
566 :デフォルトの名無しさん2011/07/09(土) 11:30:25.10
>>564
アンカー間違えてない?
559=562=俺
563 :デフォルトの名無しさん2011/07/09(土) 11:26:55.87
コンピュータで連続的な量ってどうやって扱うんですか?
568 :デフォルトの名無しさん2011/07/09(土) 11:35:16.82
>>563
"連続的な量"の事例をプリーズ。
570 :デフォルトの名無しさん2011/07/09(土) 11:39:23.59
>>568
連続的な量=アナログ量
565 :デフォルトの名無しさん2011/07/09(土) 11:30:23.40
数として連続量を扱いたいというのなら原理的に不可能
567 :デフォルトの名無しさん2011/07/09(土) 11:34:49.91
>552
バカはお前だ。
549は比較演算子の話しなんかしてねぇよ。お前がキモイってこと以外書いてないだろ。

林先生「まさかとは思いますが、549が「比較演算子って正負を返す」と主張したというのは、
あなたの想像上の出来事にすぎないのではないでしょうか。」
571 :デフォルトの名無しさん2011/07/09(土) 11:40:27.61
正となる → 正負を返す

どうやら0を認識出来ないようだ
572 :デフォルトの名無しさん2011/07/09(土) 11:41:18.94
>>571
インド人すげー
574 :デフォルトの名無しさん2011/07/09(土) 11:55:25.35
そのアナログ量が周期的なものか、そうでないのかによって扱い方がかわる。
578 :デフォルトの名無しさん2011/07/09(土) 12:22:43.22
>563
PCMデータについて色々調べてみたら?
579 :デフォルトの名無しさん2011/07/09(土) 13:23:59.91
最小の単位を設定するだけだろ。
アナログもクソもない。
582 :デフォルトの名無しさん2011/07/09(土) 15:40:28.06
>>579
な に い っ て ん の ?
581 :デフォルトの名無しさん2011/07/09(土) 14:38:41.38
量子れべるでかんがえたら、しょせんこのよは、みんなでじたる。
583 :デフォルトの名無しさん2011/07/09(土) 17:38:16.81
>>581
物理勉強しなおしてこい
584 :デフォルトの名無しさん2011/07/09(土) 20:16:35.30
配列から二つの要素を削除したいんですがどうすれば良いですか。
585 :デフォルトの名無しさん2011/07/09(土) 20:20:47.46
>>584
Cでは出来ません、が正しい答えだけど、どうなれば「削除」したことになると思っている?
595 :デフォルトの名無しさん2011/07/10(日) 01:09:09.46
>>584
void
del(int a[], int n, int p1, int p2){
int i;
if (p1 < p2) {
i = p1;
p1 = p2;
p2 = i;
}
for (i = p1; i < n - 1; i++)
a[i] = a[i + 1];
for (i = p2; i < n - 1; i++)
a[i] = a[i + 1];
}
609 :デフォルトの名無しさん2011/07/10(日) 05:56:39.60
>>593>>595
出来ました!
どうもありがとう
586 :デフォルトの名無しさん2011/07/09(土) 20:24:30.45
とりあえず消したい配列の要素を格納しといて後から詰める方法でやろうと思ってるんだけど消したい要素が2つあると難しい
588 :デフォルトの名無しさん2011/07/09(土) 20:45:24.83
「1つの要素を削除する」という処理を2回やれば済むだろ
592 :デフォルトの名無しさん2011/07/09(土) 23:55:46.44
>>588
例えば
a[10]で2と5の要素を詰めようとすると2の要素を詰めることで5の要素でなくなるということじゃまいか
591 :デフォルトの名無しさん2011/07/09(土) 22:10:15.61
まず問題が正しく理解できてないな。
質問が曖昧すぎる。
593 :デフォルトの名無しさん2011/07/10(日) 00:04:01.69
for(i = j = 0; i < N; i++) {
if(i == b || i == c) continue;
a[j++] = a[i];
}
594 :デフォルトの名無しさん2011/07/10(日) 01:05:13.07
( ゚д゚)ノ ハイ!シツモーン!
Visual Studio コマンドプロンプト(2010)を使っての操作です。
Winのメモ帳で

#include <stdio.h>

int main(void)
{
printf("Hello World!!");

return 0;
}
って書いて、「smp1.c」って保存したんだ。
ここでコマンドプロンプトをつかって、
notepad smp1.c
って入力してEnterを押したんだが、

メモ帳
「ファイルsmp1.cが見つかりません。新しく作成しますか?」

ってでてくる。
ちゃんとはじめにメモ帳に保存したのにできんのはなぜなんだあああああああああああああああああ
596 :デフォルトの名無しさん2011/07/10(日) 01:11:02.57
>>594
cdコマンド打て
597 :デフォルトの名無しさん2011/07/10(日) 01:16:04.30
>>596
cd notepad smp1.c
ってことでふか?
これ入力したけど指定されたパスが」見つかりませんってでるお( ^ω^)

やり方間違えてたら指摘よろ
598 :デフォルトの名無しさん2011/07/10(日) 01:19:13.97
>>597
help cd
で使い方を
599 :デフォルトの名無しさん2011/07/10(日) 01:41:52.58
式Aが真のときある動作をして1を返し、負のとき何もせず0を返す、という関数aを作って、
別の関数bで、関数aが真なら0からカウントアップしていく、という事をさせたいです。

//関数a
int a(){
if (A) {
「ある動作」;
return 1;
}
else {return 0;}
}

//関数b
int b(){
int n;
n=0;
if(関数a()==1){n++;}
return n;
}

色々省いて概ねこのように組んでるんですが、nが0で帰ってきます。何がおかしいんでしょうか…
603 :デフォルトの名無しさん2011/07/10(日) 02:11:36.02
>>599
それだと
int b(){ return a(); }
と同じ意味になってしまうけどいいの?

カウントアップするなら
int b(){
static int n = 0; // 最初に呼ばれた時だけnを0に設定する
if(関数a()==1){n++;}
return n;
}
こうすればa()が1を返す毎にnが+1される
600 :デフォルトの名無しさん2011/07/10(日) 01:49:03.65
すみません、関数bですが、

if(関数a()==1){n++;}

はfor文で何度か式を評価させてます。

602 :デフォルトの名無しさん2011/07/10(日) 02:09:58.36
しかし「ある動作」はなされているので、真になっているはずなのですが…
604 :6002011/07/10(日) 02:41:28.22
http://codepad.org/DNmEL09p
こういうプログラムを組んでいます。printfで関数aの値を表示させてもやはり0ばかり帰ってきます…。
605 :デフォルトの名無しさん2011/07/10(日) 02:54:24.95
>sudoku_del(s,r1,c,k);
>if(sudoku_del(s,r1,c,k)==1){n++;}
606 :デフォルトの名無しさん2011/07/10(日) 03:01:58.76
>>605
すみません、sudoku_del(s,r1,c,k)の行を消しておくのを忘れていました。
しかしそれでも依然0が返ってきます。よろしくお願いします。
607 :デフォルトの名無しさん2011/07/10(日) 03:56:55.64
データがおかしいんじゃね?

sudoku_t dat = { // cell[0][0]は3で確定してるものとする
0x004, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff,
0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff, 0x1ff
};

int main() {
int n = sudoku_del_col( &dat, 0, 0);
return 0;
}

これでn=8になるよ。
608 :デフォルトの名無しさん2011/07/10(日) 04:37:09.25
あと出来るだけシンプルに書いた方がいいよ。頭が混乱するからw
たとえばこんな感じ

int sudoku_del(struct sudoku_t *s, int r, int c, int k) {
int mask = 1 << (k-1);
int *cell = &(s->cell[r][c]);
if(*cell & ~mask) {
*cell &= ~mask;
return 1;
}
return 0;
}
611 :デフォルトの名無しさん2011/07/10(日) 11:55:25.05
>>608
ありがとうございます!テキストのデータは与えられていて、読み込みには成功してると思うのですが…
http://codepad.org/HUSe1tPQ
全プログラムはこうなってます。再三申し訳ないですがご鞭撻の程お願いします。(ブロックによる制約が煩雑なのはすみません)
614 :6082011/07/10(日) 13:11:23.64
>>612
コラコラw

>>611
mainの中だけの変更でできたっぽい
//*** start update ***
// int r0,c0,n0;
int r0,c0,n0 = 1; // n0をちゃんと初期化する
//*** end update ***

for(c0=0;c0<=8;c0++){
//*** start update ***
// sudoku_kill_col(&s,r0,c0);
// sudoku_kill_row(&s,r0,c0);
// sudoku_kill_block(&s,r0,c0);
// いらない
//*** end update ***
n0 = n0 + sudoku_kill_col(.....
<出力>
258|736|941
619|824|357
437|915|268
---+---+---
395|271|486
762|498|135
841|653|729
---+---+---
184|369|572
576|142|893
923|587|614
615 :デフォルトの名無しさん2011/07/10(日) 13:21:12.61
>>608
ビット反転多用するくらいなら
01の意味を逆にしたほうがよくね?
616 :6082011/07/10(日) 13:42:18.12
>>615
そこまで変えちゃうと質問者が理解出来なくなるんじゃね?
653 :デフォルトの名無しさん2011/07/10(日) 23:33:06.67
>>614
ありがとうございました!やはりmain関数のほうで良くない動作してたみたいですね・・・
612 :6082011/07/10(日) 12:44:45.75
あ?
617 :デフォルトの名無しさん2011/07/10(日) 14:31:21.68
もうちっとシンプルに書けないもんかね
618 :デフォルトの名無しさん2011/07/10(日) 14:49:14.89
>>617が画期的なほどにシンプルなソースを公開してくれるそうですよ!
620 :デフォルトの名無しさん2011/07/10(日) 15:34:59.56
int kill(struct sudoku_t *s, int r, int c)
{
int i, j, k, n = 0, tr, tc;

for(k = 1; k <= 9; k++) {
i = 0001 << (k - 1);
if(s->cell[r][c] == i) {
for(j = 0; j < 9; j++) {
if(j != r && s->cell[j][c] & i) s->cell[i][c] &= ~i, n++;
if(j != c && s->cell[r][j] & i) s->cell[r][c] &= ~i, n++;
tr = r / 3 * 3 + j / 3, tc = c / 3 * 3 + j % 3;
if((tr != r && tc != c) && s->cell[tr][tc] & i) s->cell[tr][tc] &= ~i, n++;
}
break;
} }

return n;
}
621 :デフォルトの名無しさん2011/07/10(日) 15:35:39.91
関数なんですが

値Xを受け取るとします。
{
if(){Xの操作 return X}
else if(){Xの操作 return X}

}
とするのと
{
if(){Xの操作 }
else if(){Xの操作 }
return X
}

とするのでは結果が違います・・・何故でしょうか?
Xが決まった段階でreturnするのだから結果は同じだろうと思うのだが・・・
622 :デフォルトの名無しさん2011/07/10(日) 15:40:33.83
>>621
コード晒してみな
625 :デフォルトの名無しさん2011/07/10(日) 15:41:50.15
>>621
{
if(){Xの操作 }
else if(){Xの操作 }
else{ }
return X
}
636 :デフォルトの名無しさん2011/07/10(日) 17:03:48.24
話ぶった切ると、>>621の解決法は「正しく動く方を使え」。
どうせ使わない変更後のコードの話なんかしてたら、時間が幾らあっても(ry
640 : ◆QZaw55cn4c 2011/07/10(日) 17:41:40.70
>>632
書くならこんなかんじかと。
http://codepad.org/uzTNDg44

よく読んでいないけれども、>>630 は、0<=th&&th<=PI がおかしいかもしれません。0<=th && PI <= th なら意味が通ります。

>>635
ここの住人はラジアンは大丈夫だと思います。
ちなみに「弧度法」=「ラジアン」であり、0°〜 360°等であらわすのは「度数法」といいます。

>>621
どちらも同じ意味です。
たぶんどちらかがポカミスしていると思います。今後の思考整理のため、この機会に突き詰めて納得しておくことをお勧めします。
624 :デフォルトの名無しさん2011/07/10(日) 15:41:11.89
後者の場合に、最初のifでX操作した結果次のifの条件を満たしたりしてない?
627 :デフォルトの名無しさん2011/07/10(日) 15:45:04.25
>>624
else ifってのは先行のifを満たしたらその操作はしないってことでは?
else ifを使わずに

if二連続だと
if(){}

if(){}

となってれば
後者のifが前者の〜ryだと思い諦めがつくんですが。
628 :デフォルトの名無しさん2011/07/10(日) 16:09:41.30
>>627
コード晒してみな
630 :デフォルトの名無しさん2011/07/10(日) 16:31:17.71
double normalize(double th)
{


if(th<=-PI)
{
while(-PI<th&&th<=0||0<=th&&th<=PI)
{
th=th+PID;
}
return th;
}
else if(th>PI)
{
while(-PI<th&&th<=0||0<=th&&th<=PI)
{
th=th-PID;
}
return th;
}
else return th;

}


です。
632 :デフォルトの名無しさん2011/07/10(日) 16:43:48.40
>>630
は何かおかしいですか?
639 :デフォルトの名無しさん2011/07/10(日) 17:32:27.28
>>630
こうじゃね?
< if (th <= -PI) {
< while ((-PI < th && th <= 0) || (0 <= th && th <= PI)) {
< th = th + PID;
< }
< return th;
< } else if (th > PI) {
< while (-PI < th && th <= 0 || 0 <= th && th <= PI) {
< th = th - PID;
< }
< return th;
< } else
< return th;
---
> while (th <= -PI)
> th += PID;
> while (th > PI)
> th -= PID;
> return th;
633 :デフォルトの名無しさん2011/07/10(日) 16:46:36.36
ちなみにこの関数は
角度を-π<x<=πの間に直す関数です。角度=x

この間にあれば直す必要ないので、受け取った引数をそのまま返したいのです。


PID=2π
PI=π
です。
634 :デフォルトの名無しさん2011/07/10(日) 16:48:35.97
2 * pi は tau だな
635 :デフォルトの名無しさん2011/07/10(日) 16:53:26.05
>>634
なんかおかしいでしょうか?
改良してください・・・


ちなみにラジアンです。

ですが分かりにくいので弧土法だと

430°=70°

230°= -130°

1000°= -80°

1200°=120°
という感じです。
実際のプログラムはこれのラジアンです。

3.15だと、PIより大きいですから、3.15-6.28=-3.13ですね。
638 :デフォルトの名無しさん2011/07/10(日) 17:31:39.51
>>635
こうだろ

double normalize(double th)
{
if(th<-PI)
{
while(th<-PI)
{
th=th+PID;
}
return th;
}
else if(th>PI)
{
while(th>PI)
{
th=th-PID;
}
return th;
}
else return th;

}
642 :6212011/07/10(日) 18:57:40.70
あw

そうだそうだww

while()の中が抜けないときの条件になってないww
逆だww
643 :デフォルトの名無しさん2011/07/10(日) 19:13:59.75
rand()で特定の範囲の値を出したい場合どうしたらいいですか?

a≦x≦b c≦y≦dの範囲に出したい場合どうしたら??

x=b*rand()/RAND_MAX;
y=d*rand()/RAND_MAX;

ですか?
644 :6432011/07/10(日) 19:17:53.37
もちろんa≦x≦b c≦y≦dの範囲に満遍なくランダム値を出したいです・・
どうすればいいでしょう?
646 :デフォルトの名無しさん2011/07/10(日) 19:30:30.95
649 :デフォルトの名無しさん2011/07/10(日) 20:12:59.78
> x=b*rand()/RAND_MAX;
それだと0≦x≦bになってしまうぞい。

x, a, bが整数、かつb-aがRAND_MAXよりも十分小さい場合限定で、
x = rand() % (b - a) + a;
というのはよく使ったなぁ。

あとは、オーソドックスに
x = (b - a) * rand() / RAND_MAX + a;

VC++のRAND_MAXは32767しかないので、精度が欲しい場合は、rand() | (rand() << 15) などとしたほうがいいかも…。

あと所詮は「疑似」乱数に過ぎないので、テストをお忘れなく。
ちゃんと検証しないと、こういうことになるので…
ttp://slashdot.jp/it/article.pl?sid=06/12/06/0155253
650 :デフォルトの名無しさん2011/07/10(日) 20:24:08.85
>>649
ありがとうございました!!
651 :デフォルトの名無しさん2011/07/10(日) 20:25:19.52
>> x=b*rand()/RAND_MAX;
>それだと0≦x≦bになってしまうぞい。

652 :デフォルトの名無しさん2011/07/10(日) 20:37:51.09
>>651
それでも条件で範囲に収まらないとはじいてるので大丈夫です。
654 :デフォルトの名無しさん2011/07/11(月) 00:23:27.82
Cって何からとったの?
658 :デフォルトの名無しさん2011/07/11(月) 04:58:37.51
>>654
Bの次
655 :デフォルトの名無しさん2011/07/11(月) 00:34:10.10
かるしうむ
656 :デフォルトの名無しさん2011/07/11(月) 01:18:49.12
>>655
ども
659 :デフォルトの名無しさん2011/07/11(月) 21:36:25.27
それじゃ不十分だな。
ACPLという言語があって、
BCPLという言語があって、
その頭文字をとったBという言語があって、
次に2番目の文字とってCになった。
662 :デフォルトの名無しさん2011/07/11(月) 21:55:09.04
Window system の“X”も“W”の次だから“X”なんだよな。
そういう文化だったから、ってことなんだろう。
664 :デフォルトの名無しさん2011/07/11(月) 21:56:13.06
Zの次どないすんねん
665 :デフォルトの名無しさん2011/07/11(月) 21:58:34.64
>>664
AAだよ
666 :デフォルトの名無しさん2011/07/11(月) 22:00:54.03
>>664
CCA
667 :デフォルトの名無しさん2011/07/11(月) 22:18:49.67
英検1級、2級、みたいにC言語1級、2級みたいのってあるんですか?
670 :デフォルトの名無しさん2011/07/11(月) 22:25:31.52
C言語で扱える最も単純なグラフィックシーケンスを教えてください。
テトリスとか作ってみたくなりました。
671 :デフォルトの名無しさん2011/07/11(月) 22:30:00.95
>>670
環境依存なので実行環境を決めないと無理
673 :デフォルトの名無しさん2011/07/11(月) 22:42:10.72
>>671
実行環境はWindows7です。
675 :デフォルトの名無しさん2011/07/11(月) 23:27:35.83
>>670
グラフィクスよりも問題はキーボード
676 :デフォルトの名無しさん2011/07/11(月) 23:31:37.80
昔職場の昼休憩にUNIX(FreeBSD)でテトリス対戦してる人がいた(ネットワーク対戦)。
ずーっとキーボードカタカタ言わせてた。
677 :デフォルトの名無しさん2011/07/11(月) 23:34:52.76
俺の場合最初はncursesでブロック崩し作って遊んでた
これが一般的かどうかは知らない
680 :デフォルトの名無しさん2011/07/12(火) 01:18:49.57
!=0とはなんぞ?
681 :デフォルトの名無しさん2011/07/12(火) 01:21:54.25
>>680
評価に値せず
682 :デフォルトの名無しさん2011/07/12(火) 11:22:04.22
callocやmalloc(sizeof(n) * m)のような形で
取得した領域は
free関数で先頭アドレス指定するだけで全領域解放されますか?
それとも要素数分free関数を呼ぶ必要がありますか?
685 :デフォルトの名無しさん2011/07/12(火) 13:29:46.09
>>682
mallocした全ての分についてfreeする必要がある
688 :デフォルトの名無しさん2011/07/12(火) 15:55:12.79
確保した領域サイズに関わらず
一度の確保に対して
一度の開放という認識であってますか?
690 :デフォルトの名無しさん2011/07/12(火) 16:47:47.04
malloc()の使い方調べるのに4時間以上かかるなら、なにか適当なテキストを
読んだほうがいいと思う。
699 :デフォルトの名無しさん2011/07/13(水) 00:22:01.30
画像データをメモリに格納する方法で、もっとも高速に読み書きができる方法は何か?で悩んでます。

例えば1ピクセルが32bitの、320*240の画像データを、1次元配列に格納する場合は、
int a[320*240];
として、x=60, y = 30 のピクセルに書き込むには a[(320 * 30) + 60] とするのが常套手段ですが、これだと乗算が一回現れてしまいます。

乗算は遅いので、乗算は避けたいです。そこで
int a[240][320];
とした場合、a[30][60] でアクセスできますが、この場合、内部的には乗算が使われるのですか?
それとも、a[0]〜a[239]までの定数テーブルが定義されてて、乗算無しでアクセスされるのでしょうか?
これは仕様として内部動作の実装方法は規定されてるのでしょうか?


いずれにしてもint x[240] の配列を int* y[320]に登録する形にして、
x=60, y = 30 のピクセルに書き込むには、*((y[30])+60)とすれば、乗算を節約できて速くなるような気がするのですが、
これは a[(320*30)+60]や、a[30][60]でよりも高速になりますか?
それとも、CPUのパイプラインレベル等、何らかのオーバーヘッドが発生して逆に遅くなりますか?

試したいので誰か速度検証用に実験コード書いて下さい。
700 :デフォルトの名無しさん2011/07/13(水) 00:25:12.79
x86だとshiftやscaled index addressingに最適化されるだろjk
コンパイラによっても違うしそれだけでは何とも言えない

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006