2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

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



3 :デフォルトの名無しさん:2011/06/27(月) 00:30:21.91
◆QZaw55cn4c

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)
が正しく表示されるくらいの精度はあるということでしょうか?

5 :デフォルトの名無しさん:2011/06/27(月) 10:42:06.17
いいえ、「正しく」の定義次第ですが。
そもそも、cでは規格では精度について詳細に言及していないので、16桁が保証されている訳ではありません。

6 :デフォルトの名無しさん:2011/06/27(月) 10:47:36.24
その辺の規定は“IEEE 754”で検索すればいいよ。


7 :デフォルトの名無しさん:2011/06/27(月) 11:47:34.32
つ[ http://ideone.com/WPtTT ]
16桁で丸めれば正しく見えるな。

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
なにを言っているんだ・・・

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;
}

13 :デフォルトの名無しさん:2011/06/27(月) 21:18:38.01
a/b==5 →

14 :デフォルトの名無しさん:2011/06/27(月) 21:18:42.61
>>12
釣れますか?

15 :デフォルトの名無しさん:2011/06/27(月) 21:23:01.66
>>13

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

>>14
すいません、多分初歩とかそんなレベルじゃないですよね
学校の授業について行けず独学で頑張っていますが
数学というか算数が元々苦手なもので…もしスレ違いだったらすみません

16 :デフォルトの名無しさん:2011/06/27(月) 21:25:04.15
a % 5 == 0

17 :デフォルトの名無しさん:2011/06/27(月) 21:30:38.30
float でも 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と等しくなるという考え方でよいのでしょうか?

21 :デフォルトの名無しさん:2011/06/27(月) 21:42:11.86
算数できない人には向いてないと思うけど、そのうち地獄見ることになりそうな

22 :デフォルトの名無しさん:2011/06/27(月) 21:43:08.15
>>20
初等整数の受験用参考書買え

23 :デフォルトの名無しさん:2011/06/27(月) 21:49:54.92
>>20だけ読むとゼロという概念で梃子摺ってるようにすら見えるw

24 :デフォルトの名無しさん:2011/06/27(月) 22:40:28.29
問題:
8 * 16 の格子に、色が配置されてます。色は赤・青・黄・緑・オレンジの5色です。
+ー+ー+ー+ー・・・
|赤|緑|赤|黄|・・・
|赤|赤|黄|青|・・・
|橙|赤|黄|青|・・・

縦横で同じ色の場合はリンクしてると考えて、4つ以上リンクした状態の領域を検索したいです。
検索結果は同じく8*16の格子に TRUE と

25 :24:2011/06/27(月) 22:43:20.04
FALSEで書き出した配列的なデータとして得たいです。

8*16の色の配列アドレスを渡して、8*16のtrue/falseの配列を得る関数を作りたいのですが、どうやればいいですか?
C言語で可能ですか?

26 :デフォルトの名無しさん:2011/06/28(火) 00:17:50.93
またその問題か

27 :デフォルトの名無しさん:2011/06/28(火) 00:21:19.09
そりゃ可能だろう
作ってみればいい

落ちゲーでも作るのか

28 :デフォルトの名無しさん:2011/06/28(火) 00:58:55.33
昔つくったLIFEを思い出すゎww

29 :24:2011/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() したことになっていない。

32 :デフォルトの名無しさん:2011/06/28(火) 02:29:47.74
こういう問題は再帰でやる

33 :デフォルトの名無しさん:2011/06/28(火) 09:26:16.61
はいはい未定義

34 :デフォルトの名無しさん:2011/06/28(火) 09:39:16.48
馬鹿かよ
_は変数名だから定義されてる

35 :デフォルトの名無しさん:2011/06/28(火) 09:42:27.09
未初期化、だな。

36 :デフォルトの名無しさん:2011/06/28(火) 09:53:47.50
>>30
C FAQで呼んだ話であって規格のどこに書いてあるのかは知らないんだが
未初期化変数の利用は一応未定義動作らしいな、普通は動くけど

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プログラム内で反映できる?
たとえばターミナルの大きさを変えたらそれに応じて表示する一行の文字数が変わるみたいなことをしたいんだけど

40 :デフォルトの名無しさん:2011/06/28(火) 13:30:17.59
termcap

41 :デフォルトの名無しさん:2011/06/28(火) 15:33:59.57
>>20
0〜4まで等間隔で打たれてる時計の文字盤のようなものを創造してみるんだ
 50 だと10回転して 0 の位置を指してる
 13 だと2回転して 3 の位置を指してる

# 高度計って一般的じゃないからなぁ…
# % の左側が負の値の時は… とりあえず思考停止だw

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
適当なこと言うなよハゲ

45 :デフォルトの名無しさん:2011/06/28(火) 16:00:32.94
VCのヘルプには
x % y で x, y 何れかが負の場合には処理系依存 って書いてあったが
C89 でもそうなのかどうかは知らない

46 :デフォルトの名無しさん:2011/06/28(火) 16:02:04.81
割り切れるかどうかの判定には問題ない

47 :デフォルトの名無しさん:2011/06/28(火) 16:02:11.26
>>44
50の倍数か判定するのに問題ある例を挙げよ

48 :デフォルトの名無しさん:2011/06/28(火) 16:08:10.72
プロトタイプ宣言ってどういうときにするもんなの?
いきなり定義書いていったらだめなの?

49 :デフォルトの名無しさん:2011/06/28(火) 16:12:42.21
1ソースで完結するならご自由に
複数ソースであちこちのソースから呼び出されるならヘッダーにプロトタイプ宣言書く

50 :デフォルトの名無しさん:2011/06/28(火) 16:20:59.70
>>46
勝手に割り切れる時の判定の話にされても困る

51 :デフォルトの名無しさん:2011/06/28(火) 16:21:50.15
>>49
そうなんですか
まだファイル分割するようなレベルまで来ていないので
いまいちピンッときませんが
ありがとうございました

52 :デフォルトの名無しさん:2011/06/28(火) 16:23:06.42
>>50
実際そうなんだから
はやく謝れよクズ

53 :デフォルトの名無しさん:2011/06/28(火) 16:32:33.22
Cでは負の剰余は処理系依存なだけだから尻から目が出ることはない

54 :デフォルトの名無しさん:2011/06/28(火) 16:38:42.31
>>53
C99だと仕様で決められた
除算は0方向に丸める
Javaもそう

55 :デフォルトの名無しさん:2011/06/28(火) 16:51:57.71
>>48
たとえばこんなときプロトタイプが欲しくなる
dir(p)
char *p;
{
file((char *)0);
}

file(p)
char *p;
{
dir((char *)0);
}
別になくても詰みはせんが

56 :デフォルトの名無しさん:2011/06/28(火) 16:58:40.41
>>54
yが非0前提で

x/y は整数での割り算のルールに則ったまま
(x/y) * y + (x % y) が 常に x と等しい ってこと? < C99 の仕様

57 :デフォルトの名無しさん:2011/06/28(火) 17:01:06.44
>>55
ああ 式の構文解析なんかは そういうパターンになるね

58 :デフォルトの名無しさん:2011/06/28(火) 17:06:25.93
>11-12
倍数の意味わかってるのかな…


59 :デフォルトの名無しさん:2011/06/28(火) 17:07:12.67
釣りだよ

60 :デフォルトの名無しさん:2011/06/28(火) 18:54:06.14
なんでこのスレ、ID出ないんだろ

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個あった場合全部吟味されますか?


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
なにこれキモイ

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

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
スクリプトでかくなよ・・・
全然わからん。

73 :デフォルトの名無しさん:2011/06/29(水) 19:05:02.42
スクリプトw

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 :74:2011/06/29(水) 19:17:59.24
すいません。最近やりはじめたんで浮遊なんちゃら(少数?)わかりません。

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

logだめ言われたのは上司です…

78 :デフォルトの名無しさん:2011/06/29(水) 19:20:15.52
テーブル引き&ニュートン法2回とかが定番?

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;
}

81 :デフォルトの名無しさん:2011/06/29(水) 19:57:04.25
自然対数だったか
ミスってるな

82 :デフォルトの名無しさん:2011/06/29(水) 20:09:47.67
CとC++って両方覚えるべきですか?

83 :デフォルトの名無しさん:2011/06/29(水) 20:13:26.56
脱初心者の為の本教えてください

84 :デフォルトの名無しさん:2011/06/29(水) 20:42:17.09
>>83
web検索

85 :デフォルトの名無しさん:2011/06/29(水) 20:42:30.00
>72
wwwww

86 :デフォルトの名無しさん:2011/06/29(水) 21:30:52.48
Linux環境で開発する場合、C,Javaは必須ですか?

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;
}

88 :デフォルトの名無しさん:2011/06/29(水) 22:30:06.07
ハッシュってのが良く分からないんですが・・

例えばAPPLEみたいなのを12という整数に直すってことですか?

89 :デフォルトの名無しさん:2011/06/30(木) 00:28:42.56
C言語のスレなのに、コマンドラインで書くスクリプト用のC言語をこのスレで
書いてレスしてる人なんなの?

>>71さんとか。

エディタでつくるほうのC言語で答えてくれ・・・

90 :デフォルトの名無しさん:2011/06/30(木) 00:32:48.49
何で>>71がスクリプトって事になってるの?

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

作りたい物を一番簡単に作れる言語から手を付けるのがお勧め

91 :デフォルトの名無しさん:2011/06/30(木) 00:33:46.72
>>89
あれはアセンブラだよ

ところで、「コマンドラインで書くスクリプト用のC言語」ってなんなの?

92 :デフォルトの名無しさん:2011/06/30(木) 00:35:57.14
>>82
まずは、C を覚えて宿題スレで沢山コードをかいていると、自然に C++ に移行したくなると思います。それからでも遅くはないでしょう。

93 :デフォルトの名無しさん:2011/06/30(木) 00:37:56.59
>>88
そのとおり。
広意には、任意のオブジェクトに対して、それに対応する数値を計算する関数をハッシュ関数といいます。

94 :デフォルトの名無しさん:2011/06/30(木) 00:39:26.95
>>89
i386 のアセンブラでしょう。
C をやる人間は必然的にマシン語レベルまで意識するようになるというものです。

95 :デフォルトの名無しさん:2011/06/30(木) 00:41:15.61
デバッグするにも最適化するにも解析するにもアセンブラの知識があった方が
何かと捗るからね

96 :デフォルトの名無しさん:2011/06/30(木) 00:42:29.95
>89 はコンパイル言語、コンパイラ、アセンブリ言語、アセンブラ、マシン語の用語について調べてみろ。

97 :デフォルトの名無しさん:2011/06/30(木) 00:44:02.88
>>91
だから勘違いですよ・・・

98 :デフォルトの名無しさん:2011/06/30(木) 00:46:53.06
>>82
Cだけで良いよ
Cを覚えたら、何か一つLLを習得すると良いと思います
RubyとかPythonとか、日常のスクリプティングに使える言語を知っておくと便利です
あとはJavaScriptかな

C++はどうしても必要になった時以外は無視してオケ

99 :デフォルトの名無しさん:2011/06/30(木) 00:51:19.08
>82
素直にC言語から始めるのを勧める。


100 :デフォルトの名無しさん:2011/06/30(木) 01:03:00.25
>97
次質問するときは礼儀とかマナーとか覚えてから質問してね。

101 :デフォルトの名無しさん:2011/06/30(木) 01:38:37.10
>>83
自分で問題意識を持って技術を磨けるのが脱初心者の状態だと思いますぜ

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
ありがとう



107 :デフォルトの名無しさん:2011/06/30(木) 14:03:39.57
なにこの自演

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
>>108
http://codepad.org/oBZbNCEg

110 :デフォルトの名無しさん:2011/06/30(木) 17:33:29.42
malloc関数を1万回呼び出すプログラムと,i=1を1万回繰り返す
プログラムだとどっちが遅いですか?

111 :デフォルトの名無しさん:2011/06/30(木) 17:36:40.86
実測しろ

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
ハッシュ値が一緒になる場合はでもどうしたらいいんだろ・・・

114 :デフォルトの名無しさん:2011/06/30(木) 18:15:19.25
トリプルハッシュ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

115 :デフォルトの名無しさん:2011/06/30(木) 18:16:39.37
10万個の数字のクイックソート1秒で終わったwww

116 :デフォルトの名無しさん:2011/06/30(木) 21:33:47.38
1秒もかかったのか

117 :デフォルトの名無しさん:2011/06/30(木) 22:24:53.33
同感
なんだそりゃ

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もいちいち呼んでるとかかね

121 :デフォルトの名無しさん:2011/07/01(金) 00:53:41.35
奇跡が起こってるからじゃね?

122 :デフォルトの名無しさん:2011/07/01(金) 00:54:52.29
あぁ一回の実行ってプログラム一回の実行か
俺がアホだったなすまん

どのみち原因分からんが

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



単にforループ内でrand()だけだと100個とも違う値なんですが・・・

124 :デフォルトの名無しさん:2011/07/01(金) 00:55:50.01
rand()を1回呼び出すプログラムを100回動かしても全部同じ値!
→srandを呼びましょう。その引数は実行のたびに変わる値、例えば現在時刻などにしましょう。

125 :デフォルトの名無しさん:2011/07/01(金) 00:57:29.44
もう一回探すときに同じ値でsrandしちゃってるんでしょ
1度srandしたら基本的にそれ以降はsrandしなくてよい

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
実際にだめだったコードを問題が発生する最小までけずって出してこいハゲ
そんなんで分かるかボケ

129 :デフォルトの名無しさん:2011/07/01(金) 01:00:21.28
>>125
srandではなくてrandです。
randしか使いません。

130 :デフォルトの名無しさん:2011/07/01(金) 01:02:46.96
>>126
そんな糞情報はいらねーんだよ死ね

131 :デフォルトの名無しさん:2011/07/01(金) 01:08:59.01
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
偽者やめてください・・・

139 :デフォルトの名無しさん:2011/07/01(金) 01:34:37.06
こんな時間まで勉強しているやつが頭悪い可能性は低い

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
本当に頭のいい奴はとっくにやりたいことを終えて寝てるだろ
バカだから終わらなくて頭も働かなくて効率悪くなって悪循環してるんだろ

俺・・・早く寝ろ

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であってもね
スコープだから

147 :デフォルトの名無しさん:2011/07/01(金) 01:51:18.31
だからrandが動かないって言うソースを出せよ
行数が多すぎるって言うならhttp://codepad.orgとかに貼ってでも出せよ
説明が下手だと解決できんぞ

148 : ◆tWL/wYPcVw :2011/07/01(金) 01:52:07.57
>>146
それは違います。
while(){}の{}の部分です。
while(){}の()のことを言っているのではありません。

149 :デフォルトの名無しさん:2011/07/01(金) 01:54:15.86
動くソースは皆知ってから貼らなくてもいいよ
変数宣言がエラーって言うソースを貼れば間違いを指摘できるよ

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のサイトのソースコードを貼る

■どうでもいいから雑談をしていたい場合
ソースコードを貼るなんてとんでもない!

153 :デフォルトの名無しさん:2011/07/01(金) 02:02:07.46
ソース公開をじらされてヤキモキしてるオレらって何なの?遊ばれてるの?

154 :デフォルトの名無しさん:2011/07/01(金) 02:55:09.09
おまえら=金魚

155 :デフォルトの名無しさん:2011/07/01(金) 02:58:27.56
スタック領域とヒープ領域、どちらがメモリの上位に存在するかは環境依存なんですかね?

156 :デフォルトの名無しさん:2011/07/01(金) 03:50:25.15
ふたつのスレッドA,Bがそれぞれ、
ひとつの変数(int s)に代入しまくってるときに
みっつめのスレッドCが s を読みだして
AやBが代入してもいない変数を読み出すことってある?

仕様的に余裕でありえることは理解してるんだけど
どんなCPUだったら起こり得るのかってのが知りたい

157 :デフォルトの名無しさん:2011/07/01(金) 03:51:54.40
>>155
どっちかというとコンパイラ依存

158 :デフォルトの名無しさん:2011/07/01(金) 08:05:32.64
>>156
ローカル変数なら当然そうなるんじゃねww


159 :デフォルトの名無しさん:2011/07/01(金) 08:11:05.53
>>156
代入しても居ない変数ってなんだよ
代入しても居ない値って言いたかったのか?

160 :デフォルトの名無しさん:2011/07/01(金) 09:49:23.07
fscanfでファイルを読み込むとき2行目から読み込む方法がわかりません。
ファイル

height
170.5
165.8

とあり、2行目と3行目の和をとり平均をとりたいです。

161 :デフォルトの名無しさん:2011/07/01(金) 09:55:59.85
一行目も読んでやれよ

162 :デフォルトの名無しさん:2011/07/01(金) 09:57:20.24
1行目を読むとnanになってしまいますん

163 :デフォルトの名無しさん:2011/07/01(金) 10:00:13.83
ウゼエなこいつ

164 :デフォルトの名無しさん:2011/07/01(金) 10:01:40.94
windows apiのlinux版は何を使えば良いでしょうか?

165 :デフォルトの名無しさん:2011/07/01(金) 10:01:56.13
きのうからc言語始めたんで全然わからないんでお願いします

166 :デフォルトの名無しさん:2011/07/01(金) 10:07:37.30
>>164
wine

167 :デフォルトの名無しさん:2011/07/01(金) 10:20:00.96
C言語でGUIを作るとしたら何のライブラリ?を使うのがお勧めですか?
できたらマルチプラットフォームがいいですが、windows用にしてもいいです
やはりMFCとかになるんでしょうか?

168 :デフォルトの名無しさん:2011/07/01(金) 10:21:15.57
Qt

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で確認というのもまあありだろう

173 : 忍法帖【Lv=14,xxxPT】 :2011/07/01(金) 10:54:09.88
>>160
・fgets()で一行目を読み捨てる。但し、バッファが必要。
・fgetc()で一行目を読み捨てるループを作る。
・fscanf()で一行目を読み捨てる。
fscanf(fp, "%*[^\n]%*c");


174 :デフォルトの名無しさん:2011/07/01(金) 11:00:35.78
main関数の引数の数の文字列を取得し取得した文字列をソートするプログラムを作ってみたが
まともに動かなかった。どこに問題があるのか分りません
http://codepad.org/HbcbK5nA

175 :デフォルトの名無しさん:2011/07/01(金) 11:04:14.56
>>174
型の理解ができていないところが問題

176 :デフォルトの名無しさん:2011/07/01(金) 11:07:34.46
>>155
yes

OS によって違うし、同じ OS でも CPU 毎に違う
それと、「メモリの上位」というより「上位アドレス」と言う方が多いと思う

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

>>172
やはりそういうコードをルート数分書かないとだめなんですね
ありがとうございました。

178 :デフォルトの名無しさん:2011/07/01(金) 11:09:52.87
>>159
そう言いたかった。

179 :デフォルトの名無しさん:2011/07/01(金) 11:10:11.91
>>168
C++じゃん

180 :デフォルトの名無しさん:2011/07/01(金) 11:22:15.44
>>177
なぜデバッガを使わないんだ?複数の入力を検査したいなら、なおさら

181 :デフォルトの名無しさん:2011/07/01(金) 11:28:52.69
種本のminixソース見て、俺には向いてないとおもた


182 :デフォルトの名無しさん:2011/07/01(金) 11:32:39.85
>>180
デバッガでテストが書くんですか?
やり方が想像できないのでちょっと具体的な例をお願いします。

183 :デフォルトの名無しさん:2011/07/01(金) 11:41:46.10
デーモンでよくあるような無限ループの関数って
どうやってテストするんだろ

184 :デフォルトの名無しさん:2011/07/01(金) 11:44:02.91
>>173 助かります。fscanfで読み飛ばすやつをもう少し詳しく教えてもらえませんか?

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
ブラックボックス・テストをしたいのか、ホワイトボックス・テストをしたいのか

188 :174:2011/07/01(金) 12:00:29.84
>>175
型を修正したらちゃんと文字列を読み込んでくれるようになりました


189 :デフォルトの名無しさん:2011/07/01(金) 12:00:54.23
なんっすかそれ

190 :デフォルトの名無しさん:2011/07/01(金) 12:17:19.41
>>184
改行文字を含まない文字列を読み飛ばし、一文字(すなわち改行文字)を読み飛ばす。

191 :デフォルトの名無しさん:2011/07/01(金) 12:25:29.42
>>156
例えば、Aが65536、Bが1を代入していてCが65537を読む出すのは、バスの狭いCPUなら起きるんじゃね。

192 :デフォルトの名無しさん:2011/07/01(金) 12:42:27.01
>>187
基本的にはブラックボックステストをしたいです

ブラックボックステストとして項目を作成して
中身はほぼルートカバーするのが理想だけど
それはまああとのお楽しみとしてとっときます。

193 :デフォルトの名無しさん:2011/07/01(金) 12:45:29.15
>>191
なるほど

194 :デフォルトの名無しさん:2011/07/01(金) 13:34:47.96
main関数3つ書きたいです

195 :デフォルトの名無しさん:2011/07/01(金) 13:51:10.26
その3つのmain関数にどのように動いてほしいのか?
おそらくその希望の動作は別の方法で実現するものだろう

196 :デフォルトの名無しさん:2011/07/01(金) 13:53:31.87
>>195
1つ目のmain関数が終了したら
次のmain関数

197 :デフォルトの名無しさん:2011/07/01(金) 13:54:23.68
こんな奴に相手をするからじゃれてくるんだ

198 :デフォルトの名無しさん:2011/07/01(金) 13:55:17.49
void main(){
 main1();
 main2();
 main3();
}
これじゃだめなの?

199 :デフォルトの名無しさん:2011/07/01(金) 13:56:29.67
>>198
だめ

200 :デフォルトの名無しさん:2011/07/01(金) 13:56:52.33
void main();もしくはint main();
なら好きなだけ書けるよ!


201 :デフォルトの名無しさん:2011/07/01(金) 13:58:37.51
3つまでだったら書けるね。4つは無理だけど。

202 :デフォルトの名無しさん:2011/07/01(金) 14:00:56.70
と思ったけど、結構たくさん書けるな。

203 :デフォルトの名無しさん:2011/07/01(金) 14:01:08.47
>>199なんだただのキチガイか

204 :デフォルトの名無しさん:2011/07/01(金) 14:03:40.02
>>203
main関数1つしかないじゃん

205 :デフォルトの名無しさん:2011/07/01(金) 14:10:58.66
だから相手にするなと

206 :デフォルトの名無しさん:2011/07/01(金) 14:14:29.15
>>204
どうダメなのか理由を述べよ
>>196の要件は十分満たしているはず
「そんなことはどうでもいいよmainが3つ書きたい」ならば>>203

207 :デフォルトの名無しさん:2011/07/01(金) 14:15:50.42
void main()って、今のC言語でもできるのでしょうか?

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


209 :デフォルトの名無しさん:2011/07/01(金) 14:18:17.99
gcc限定だけど、これどんどん増やせるから
好きなだけ main() をつくってくだしあ

210 :デフォルトの名無しさん:2011/07/01(金) 14:22:17.43
ありがとうございます

211 :デフォルトの名無しさん:2011/07/01(金) 14:22:35.52
>>203
自分に出来ない要求をする者をキチガイ呼ばわりするのは
あまり良くないと思うんです。

212 :デフォルトの名無しさん:2011/07/01(金) 14:26:38.45
>>211
>>206

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; }
の間違いだ


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;
}

215 :デフォルトの名無しさん:2011/07/01(金) 14:29:03.30
>>212
>>194によれば main関数を3つ書きたいと書いてある
main1関数はmain関数ではないから仕様は満たされてないよね

216 :デフォルトの名無しさん:2011/07/01(金) 14:30:38.94
>>212
もうあきらめろよ

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

いやまて・・・よく見るとmain関数を4つ書いてるぞ・・・ゴゴゴゴゴ

218 :デフォルトの名無しさん:2011/07/01(金) 14:32:07.72
俺はあきらめない!

219 :デフォルトの名無しさん:2011/07/01(金) 14:34:23.89
>>195の解答で十分じゃないの?
まあ確かにこういうアイデアの出し合いは面白いから好きだけどね

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)) ってのが
アプリケーションエントリーポイントから呼ばれる関数の追加?

222 :デフォルトの名無しさん:2011/07/01(金) 14:38:17.29
>>219
十分だと思うのはお前のレベルが低いからだ

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))
ちゃんと動くものなのか?

225 :デフォルトの名無しさん:2011/07/01(金) 14:44:41.45
2chのバカ煽り怖いです
リアルも怖いのに俺どこにいればいいんでしょうか

226 :221:2011/07/01(金) 14:45:23.30
>>223
ありがとー
windows でいう DllMain() みたいなやつなのね。
 __attribute__ ((constructor)) が ロード時用
 __attribute__ ((destructor)) が アンロード時用 と。 (プロセスなのかスレッドなのか OSの事情次第だろうけど…

227 :デフォルトの名無しさん:2011/07/01(金) 14:54:17.30
>>167
GLUT

228 :デフォルトの名無しさん:2011/07/01(金) 14:55:23.23
>>224
念のため3.3.5と4.3.2と4.4.5で確認したけど、動いた

229 :デフォルトの名無しさん:2011/07/01(金) 15:00:55.55
中身見ずにヘッダーファイルインクルードするの怖くね?

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;
}


232 :デフォルトの名無しさん:2011/07/01(金) 16:43:55.44
for (i=1; i<=b; i++) { a *= a; }
こうやったんじゃないか?

(int ? double) c = 1;
for (i=1; i<=b; i++) { c *= a; }

233 :230:2011/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

235 :デフォルトの名無しさん:2011/07/01(金) 18:27:27.32
>>229
くわしく

236 :デフォルトの名無しさん:2011/07/01(金) 20:51:09.89
くやしく

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));

238 :デフォルトの名無しさん:2011/07/01(金) 22:02:07.06
sizeof(char) → sizeof(char *)

もちろん、その先も個別に malloc する必要がある

239 :デフォルトの名無しさん:2011/07/01(金) 23:55:59.60
>237
+++ヘッダ
extern char *subopt[];
これだと、どっかでchar *subopt[N];みたいな定義を期待しているからchar **subopt;にすべき
(ここに、Nは正数)

240 :デフォルトの名無しさん:2011/07/02(土) 00:32:47.55
>>190とりあえずうまく行きました。ありがとう。

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()などに
変更してエラーチェックを厳密にするとしたらそういう問題はない。



243 :デフォルトの名無しさん:2011/07/02(土) 01:41:36.22
> エラーが発生したときに消費されないという独特の仕様で、
> 使いこなせるようになってもほかの入力関数に応用がきかない。

ダウト
事故状況が保存されていてば修復処理はどうにでも書きようがある

244 :デフォルトの名無しさん:2011/07/02(土) 01:41:47.45
たぶん、
>>242
>ストリームの消費の仕様の違いから
のせいだと思いますが、fscanf() と fgets() とを混在できないのがつらいところ。
fgets() -> sscanf() でいいや、と思ってしまいます。

245 :デフォルトの名無しさん:2011/07/02(土) 01:45:14.99
scanf と fgets を混ぜる時点で生じる問題が
そんなに面倒なら、もっと腕のいい PG やとえばいい

「互換性が保てる」という条件は喜ぶ奴や喜ぶよ
どんな連中が PG 廃業しはじめてて、そこにどんなベンチャーがあるか知ってるから

246 :デフォルトの名無しさん:2011/07/02(土) 01:47:11.07
>>243
scanf()のバッドノウハウ的なテクニックを覚えても、ほかの入力関数で
使えないだろって話。

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()の使いこなしにプライドとかもってるから、馬鹿にされて
暴れるんだろうな。

250 :デフォルトの名無しさん:2011/07/02(土) 02:12:03.18
俺は scanf のサブセット的な使い方を言っているに過ぎないんだが
この程度が「信者」に見えるほどの下郎がいるってことか

251 :デフォルトの名無しさん:2011/07/02(土) 02:13:55.45
scanf系全否定ではなくてscanfとfscanfの否定ってことね。
それならわかる。
sscanfは無いともう生活に困るレベルで使ってるわ。

252 :デフォルトの名無しさん:2011/07/02(土) 02:15:14.45
使えるもんは使う

253 :デフォルトの名無しさん:2011/07/02(土) 04:11:09.14
人間が入力するのか、そうじゃないのかによって異なると思うよ。

254 :デフォルトの名無しさん:2011/07/02(土) 05:04:44.23
>>253
どうだろ。そのへんはあまり意識しないな。

ていうか、「入力は寛容に、出力は厳格に」の原則にのっとって
人間だろうと機械だろうとどちらが入力しても問題ないように
作るのが一番だと思うんだが。

255 :デフォルトの名無しさん:2011/07/02(土) 06:16:32.97
>>249
fgtes()とscanf()をまぜて使えるPGが優秀だって時点でダメ。


256 :デフォルトの名無しさん:2011/07/02(土) 10:12:32.59
もう全部、printfとscanfでいいんじゃない?

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)
この意味教えて


264 :デフォルトの名無しさん:2011/07/02(土) 18:26:37.96
単なる誤記だな。

265 :デフォルトの名無しさん:2011/07/02(土) 18:26:46.68
>>263
a かつ b

266 :デフォルトの名無しさん:2011/07/02(土) 18:50:32.58
初期化もないのに?

267 :デフォルトの名無しさん:2011/07/02(土) 19:22:15.44
多次元配列つくりたいのですが

moji[100][100]


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




これができません・・・
何故でしょう?

268 :デフォルトの名無しさん:2011/07/02(土) 19:24:38.09
そういうルールだから

269 :デフォルトの名無しさん:2011/07/02(土) 19:24:56.02
>>267
char *moji[100];
にするといいよ

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はアホ

272 :デフォルトの名無しさん:2011/07/02(土) 19:29:14.96
moji[0]="MORITA"
ってのは"MORITA"という文字列が格納されている先頭アドレスをmoji[0]に突っ込もうとしてるけど
moji[0]はchar型だから型が合わないでコンパイルエラーということ
ポインタと配列の違いについて学習されると良かろう

273 :デフォルトの名無しさん:2011/07/02(土) 19:29:45.07
直接的な解決方法はstrcpyの使用だろうな


274 :デフォルトの名無しさん:2011/07/02(土) 19:30:42.99
>>271
お前がな

275 :デフォルトの名無しさん:2011/07/02(土) 19:35:15.86
moji[][0]=
moji[][1]=
moji[][2]=

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

じゃないんですか?


278 :デフォルトの名無しさん:2011/07/02(土) 19:38:00.88
>>275もアホ

279 :デフォルトの名無しさん:2011/07/02(土) 19:40:25.59
ここまでレベル低いとは思わなかった

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は関係ないので無しということで。



282 :デフォルトの名無しさん:2011/07/02(土) 19:43:07.32
>>267
1次元配列で動くものを書いてみませう

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

284 :デフォルトの名無しさん:2011/07/02(土) 19:45:36.00
>101*101
いきなりアウトすぎる
最初からやり直してこいこの馬鹿は

285 :デフォルトの名無しさん:2011/07/02(土) 19:45:42.26
5次元からはじめるべき

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]までだろ?

288 :デフォルトの名無しさん:2011/07/02(土) 19:50:25.99
リテラル文字列の返す値はアドレスだからな。
ポインターにしか入れたら駄目だよ。


289 :デフォルトの名無しさん:2011/07/02(土) 19:51:54.52
>>287
うん、だから設定時は数、実際に単位にわけると添え字は設定数-1とか
そういう細かいことはどうでもいいです・・

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



これがしたいだけ、ただそれだけ。

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
="〜〜文字列〜〜"
では文字は代入できないわけですか?

='文字'
だと代入できるんですが・・

292 :デフォルトの名無しさん:2011/07/02(土) 19:56:45.50
さっさとせいかいおしえろよくずども

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

ちょっと別の方法考えますわ。


294 :デフォルトの名無しさん:2011/07/02(土) 20:03:35.09
Cの=演算子は配列を代入することができません
例えば
int a[5], b[5];
a = b;
のようなことはできません
同様に
char c[5];
c = "ABC";
のようなこともできません
文字列文字列と言っていますが、Cでは文字の配列ですので

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

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

文字数とは別な話、行数を1つ余計に数えるのは何のためだと教わった?
師匠によっては破門を宣告されるほどのことだぞ

296 :デフォルトの名無しさん:2011/07/02(土) 20:11:53.00
>>294
なるほど・・・・
となると多次元配列で文字列使うときはstrcpyか。


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じゃないの?

298 : 忍法帖【Lv=21,xxxPT】 :2011/07/02(土) 20:33:22.87
>>293
>C言語は文字型がないのか。

charもあるし文字型リテラルもあるけど?

299 :デフォルトの名無しさん:2011/07/02(土) 20:38:22.39
文字型リテラルなんてねえよ、あれは int だしリテラルとして実装される保証がないからポインタで指せない

300 :デフォルトの名無しさん:2011/07/02(土) 20:39:09.07
リテラルって何ですか?

301 :デフォルトの名無しさん:2011/07/02(土) 20:45:27.97
>>297
初期化の場合はできて式中ではそれができないってやっぱり不便でしょうか?
何故できないのでしょう?何都合が悪いのでしょうか?

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 *のキャストもいらんかった。
エラーレベルの設定が低かったからかな?

303 :デフォルトの名無しさん:2011/07/02(土) 20:49:04.12
>302
#typedef ×
typedef   ○

304 :デフォルトの名無しさん:2011/07/02(土) 20:53:38.18
main関数4つ書きたいです

305 :デフォルトの名無しさん:2011/07/02(土) 20:54:19.65
>>302
とっつぁんよ、いつからキャストがいるようになったんだい?
プリプロセッサ指令はともかくコロンとか、そんな時代なかったぞ

static の件も健忘か、コレステロールは怖いねえ

306 :デフォルトの名無しさん:2011/07/02(土) 21:00:03.54
多少のも違いぐらいスルーしよろ。キモイよこの基地外。

307 :デフォルトの名無しさん:2011/07/02(土) 21:00:58.42
>>304
おやすいご用で
main() {}
main() {}
main() {}
main() {}
コンパイルや実行がしたいとは言わなかったよな

308 :デフォルトの名無しさん:2011/07/02(土) 21:03:39.05
>>306
キモくて結構、おまえにモテようとは思ってないさ
メカをキモがるバカ女みてえのは願い下げだ

309 :デフォルトの名無しさん:2011/07/02(土) 21:10:03.09
>>307
なんつうかさ、このスレにいる必要ないよね、おまえ

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とか
変数名っぽく記述するのって約束なのかな?)


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





311 :デフォルトの名無しさん:2011/07/02(土) 21:20:11.77
>294
上のはGCC拡張でできた気がするが、まぁいいや

312 :デフォルトの名無しさん:2011/07/02(土) 21:21:25.03
>>302
に対してありがとうすぎる・・・・・
勉強に励むわ・・

313 :デフォルトの名無しさん:2011/07/02(土) 21:23:49.22
配列は構造体型もいけるのか・・
まじで目から鱗だ。

本当にありがとう>>302

314 :デフォルトの名無しさん:2011/07/02(土) 21:28:10.93
よく見ると>302は正しくない
ST_NAME meibo[100] = {{"MORITA"}, {"MORITA"}, ...以下略
のように、外側は配列のブレース、内側は構造体のブレースが必要
まぁ、もっと言うと{{{"MORITA"}}, ...のようにchar []のブレースも必要だけど文字列での初期化時にはなくてもいい(冗長だから)
まぁ、構造体のブレースも要素が一つだから気を利かせてくれているんだろうけど

315 :デフォルトの名無しさん:2011/07/02(土) 21:28:15.28
直接代入がそんなに有り難いならブビでもやってろ

316 :デフォルトの名無しさん:2011/07/02(土) 21:46:27.90
>>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でなに命令してんだ

320 :デフォルトの名無しさん:2011/07/02(土) 22:39:04.90
なんかここも質問しづらくなったな

321 :デフォルトの名無しさん:2011/07/02(土) 22:42:34.59
>>302>>314 も間違ってるってだけ

322 : 忍法帖【Lv=6,xxxP】 :2011/07/02(土) 22:52:41.62
nnn

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


324 :デフォルトの名無しさん:2011/07/02(土) 22:56:41.76
> ,"\0"

…絶望の壁…

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'){
と等価だけどこっちのほうがいい?

328 :デフォルトの名無しさん:2011/07/02(土) 23:00:40.10
C99の人か

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


>>321

>>323はまちがってねーだろうが

330 :デフォルトの名無しさん:2011/07/02(土) 23:35:22.54
処理系に依存するのをめんどくさいと言う奴がめんどくさい
分かってて書いててそれを伝えてるならいいがそうでないなら書くな

あ、過去レスが合ってるかとかは見てないから知らん

331 :デフォルトの名無しさん:2011/07/02(土) 23:35:56.43
処理系に依存したくなければ >>323 てか? …絶望の壁…

332 :デフォルトの名無しさん:2011/07/03(日) 00:00:45.12
>>330
処理系依存は原理的なことじゃねーだろ。

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

概念→応用だろ。




333 :デフォルトの名無しさん:2011/07/03(日) 00:05:56.42
>>323
\0入れなくても要素数に大して初期化値数が足らない場合は0埋されるよ。

俺から質問。
"\0"ってした場合、 0が2つ入るってことだよね?

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
最大公約数つっただろ。
そういうな、分かってて、あえて自分の知恵をヒケラカスノやめろ。
参考書にのってる文法的なことがこのスレの場合原理的なことくらい
わかんだろ。

336 :デフォルトの名無しさん:2011/07/03(日) 00:13:06.20
初心者に優しいスレにしねーと質問者減るだろう。

337 :デフォルトの名無しさん:2011/07/03(日) 00:13:24.63
概念があってたとして、それを実現した処理系依存のコードで説明されても
違う処理系の人はうまく動かなくて混乱するだけだな

処理系依存だって書いてくれれば、意図(概念)を汲み取ろうとできるかも知れんけど

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系で動くコードにしときゃだいたい問題ないんだよ

341 :デフォルトの名無しさん:2011/07/03(日) 00:26:02.92
あれ?なんか変なの湧いてる・・

342 :デフォルトの名無しさん:2011/07/03(日) 00:29:38.57
変なのしか沸かないだろここは

343 :デフォルトの名無しさん:2011/07/03(日) 00:29:42.79
>>340
ふーん、それで TANAKA SUZUKI SATO が出せればいいのか
C は最大公約数でも原理でもねえな

344 :デフォルトの名無しさん:2011/07/03(日) 00:32:03.67
>>343


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
管理領域があるから差はもっと大きくなるよ

355 :デフォルトの名無しさん:2011/07/03(日) 03:38:03.09
なるへそサンクス
管理領域でぐぐってくる

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
ポインタのポインタや
構造体のポインタをやるといい

362 :デフォルトの名無しさん:2011/07/03(日) 21:28:02.63
もうちょっと具体的に行ってくれないと困るな
隅から隅まで説明することもできないし

363 :デフォルトの名無しさん:2011/07/03(日) 21:32:35.03
char str[10];
str==&str[0]

364 :デフォルトの名無しさん:2011/07/03(日) 21:34:21.91
>>360
配列
□□□□□□□

ポインタ

365 :デフォルトの名無しさん:2011/07/03(日) 21:38:42.07
×ポインタ
○ポインター

366 :デフォルトの名無しさん:2011/07/03(日) 22:25:44.65
その手の話はよそでやってくれ。

367 :デフォルトの名無しさん:2011/07/03(日) 22:30:41.82
int mi[10];
int *pi=mi;
pi+1 == &mi[1]


long ml[10];
long *pl=ml;
pl+1 == &ml[1]



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キーおして $ 打ちまくってる感触はどう?
土方が何をほざいて

370 :デフォルトの名無しさん:2011/07/04(月) 15:01:34.28
NGに設定っと。

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 :371:2011/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のフル活用って、実際はあまり期待できないのかもしれない。
この辺はインラインアセンブラなどで手書きするのが確実なのかもしれない。

373 :デフォルトの名無しさん:2011/07/05(火) 01:53:57.58
インラインテディベア

374 :デフォルトの名無しさん:2011/07/05(火) 01:56:33.97
>>372
SSEの128bitレジスターを使った転送
だとどのくらい早くなるの?

375 :デフォルトの名無しさん:2011/07/05(火) 04:47:29.30
alloca()使い居ます?

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));
}

379 :デフォルトの名無しさん:2011/07/05(火) 17:47:44.51
そういうのはintelコンパイラの独壇場ってイメージだな


380 :デフォルトの名無しさん:2011/07/05(火) 18:56:58.32
最適化されないコードの話かいな?

381 :デフォルトの名無しさん:2011/07/06(水) 07:51:18.88
clock()って連続で呼び出したら必ず違う値を返す?


382 :デフォルトの名無しさん:2011/07/06(水) 08:06:21.50
No

383 :デフォルトの名無しさん:2011/07/06(水) 12:51:44.26
ポインタってどうゆう場面で使うんですか?
使い道が想像つかない...

384 :デフォルトの名無しさん:2011/07/06(水) 12:54:52.90
ボタンをクリックするとき

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 ?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 ?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);
}

389 :デフォルトの名無しさん:2011/07/06(水) 13:32:00.08
>383
大量のデータを関数に渡すor複数のデータを関数から受け取るとき。
最大データ量が不明のとき。

390 :デフォルトの名無しさん:2011/07/06(水) 13:41:46.20
>383
ファイル読み込むとき、
「このファイルのデータをここ(ポインター指定)に最大nバイト読み込んでください」
って指定をする。

gfetc、fscanfとか例外もあるけど。

391 : 忍法帖【Lv=19,xxxPT】 :2011/07/06(水) 13:48:40.40
>>388
突っ込みどころが多過ぎるが、取り敢えず1レスに収まらないソースはcodepadかideoneに貼れ。
それからコンパイラの警告レベルを引き上げて、警告をきちんと読め。

392 :デフォルトの名無しさん:2011/07/06(水) 13:49:51.60
>>390
fscanf()は例外じゃないな。

393 :デフォルトの名無しさん:2011/07/06(水) 14:44:41.28
そうだね。

394 :デフォルトの名無しさん:2011/07/06(水) 19:23:24.59
例えば10進数で15は2進数で1111ですが
この1111を1000+100+10+1に分解して
出てきた2のn乗をそれぞれ記録したいんですが
1111を分解するいい方法はありませんか?


395 :デフォルトの名無しさん:2011/07/06(水) 19:31:37.13
ビット演算

396 :デフォルトの名無しさん:2011/07/06(水) 19:32:02.24
>>394
右シフト >> と 1との&


397 :394:2011/07/06(水) 19:33:58.53
具体例書いてくれたらうれしいです

398 :デフォルトの名無しさん:2011/07/06(水) 19:40:07.20
unsigned int a=15;
unsigned int b0=a&1;
unsigned int b1=a&2;
unsigned int b2=a&4;
unsigned int b3=a&8;
unsigned int b4=a&16;



399 :デフォルトの名無しさん:2011/07/06(水) 19:40:51.52
int b[10];
int i=0;
int n=15;
while(n) {
b[i]=n%2;
n/=2;
i++;
}

400 :デフォルトの名無しさん:2011/07/06(水) 19:44:47.48
ありがとうございます。やってみます

401 :デフォルトの名無しさん:2011/07/06(水) 19:46:49.33
typedef struct {
int b0,b1,b2,b3;
} ST_BIT;

ST_BIT mBit[16] = {
1,0,0,0,
0,2,0,0,
1,2,0,0,
0,0,4,0,
1,0,4,0,
0,2,4,0,
1,2,4,0,
1,0,0,8,
0,2,0,8,
1,2,0,8,
0,0,4,8,
1,0,4,8,
0,2,4,8,
1,2,4,8}

int a=15;

printf("%d %d %d %d\n",mBit[a].b0,mBit[a].b1,mBit[a].b2,mBit[a].b3);


402 :デフォルトの名無しさん:2011/07/06(水) 21:01:10.55
Cって呼び出せる場所を制限した関数ってつくれなかったっけ?

403 :デフォルトの名無しさん:2011/07/06(水) 21:09:52.81
スコープの話か?

404 :デフォルトの名無しさん:2011/07/06(水) 21:10:33.37
ああ子どもが砂場で遊ぶとき使うやつね

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にチェック入れる
あとで削除する

409 :デフォルトの名無しさん:2011/07/06(水) 21:33:10.14
そもそも書いたコードをネットにうpしなければいいんじゃない?


410 :デフォルトの名無しさん:2011/07/06(水) 21:36:31.24
>>408
privateの横の?あるけど英語分からんかった。
日本語に翻訳してもちょっと理解しにくいんで
翻訳してくれ。

絶対に誰にもばれたくない。

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

414 :デフォルトの名無しさん:2011/07/06(水) 21:42:34.65
>>410
前半は省略して

privateにチェック入れるとRecent Pastesってところにリンクを張らない
検索エンジンにも引っかからない
URLを知っている人しか見られない

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だとは思わない。

420 :デフォルトの名無しさん:2011/07/06(水) 22:36:53.33
今時LSI-Cは有り得ない。intが2バイトなんて学習用途として最悪だ。

421 :デフォルトの名無しさん:2011/07/06(水) 22:37:58.34
ショートファイルネームしか扱えなかったんじゃなかったっけ
今じゃ辛いな

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++として
コンパイルしがちなので注意。

426 :デフォルトの名無しさん:2011/07/06(水) 22:45:29.37
VC++って何の略?

ビジュアルスタジオのことじゃないよね?

427 :デフォルトの名無しさん:2011/07/06(水) 22:48:35.14
>>424

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

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

>>426
VC++ = Visual C++

428 :デフォルトの名無しさん:2011/07/06(水) 22:48:37.25
c言語で参照範囲にかかわる修飾詞は
externのほかになにかありますか?


429 :デフォルトの名無しさん:2011/07/06(水) 22:50:25.20
static

430 :デフォルトの名無しさん:2011/07/06(水) 22:54:37.89
>>428

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

auto, register, static, typedef

実際はstaticとexternだけ気にすれば良い。

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ってのが一番上にくるんだが・・・

434 :デフォルトの名無しさん:2011/07/06(水) 23:02:21.88
それとネットワークインストールって何ですか?


435 :デフォルトの名無しさん:2011/07/06(水) 23:06:48.16
ネットワーク経由じゃないインストールって逆にあるのかw?

436 :デフォルトの名無しさん:2011/07/06(水) 23:08:27.78
>>433

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

ネットワークインストールっていうのは、ネットワークを介して
インストールすること。VC++のインストーラは、インストールイメージの
ダウンロードやその実行をしてくれる。レジュームなどの面倒も
見てくれる。

437 :デフォルトの名無しさん:2011/07/06(水) 23:12:54.21
>>435
前は(VS2005とか2007あたりだったとおもうが)インストールイメージを
まるごとダウンロードできた。

インストールイメージは600MB位だったので、
いっぺんに10台とかインストールするときには
ダウンロードしたイメージをCD-Rに焼いてから、実行すると
効率的だった。


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の流れで大文字にしてしまった。

441 :デフォルトの名無しさん:2011/07/06(水) 23:21:23.54
そもそもvi自体がない

442 :デフォルトの名無しさん:2011/07/06(水) 23:23:30.27
>>437
全然言ってる意味わからんくてワロタww

環境を導入するときってzipファイルとかじゃないんですか?

443 :デフォルトの名無しさん:2011/07/06(水) 23:23:53.80
>>438
cat で

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/

447 :デフォルトの名無しさん:2011/07/06(水) 23:54:07.18
最近仕事はマンネリ気味・・・
どこかに面白いソースとか転がってないかな?

448 :デフォルトの名無しさん:2011/07/06(水) 23:56:51.45
>>446
すみませんでした。

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

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

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

>>442
>全然言ってる意味わからんくてワロタww
わからんのは、あなたが無知だから。
無知すぎて説明のしようがない。

450 :デフォルトの名無しさん:2011/07/06(水) 23:58:49.94
>>447
基本的に面白いソースってどういうものをいうの?
プログラムって基本的に計算だよね、面白さはどこに見出すの?

451 :デフォルトの名無しさん:2011/07/07(木) 00:06:24.58
>>449
>catって編集できないぞ。まぁ釣りだろうけど。

Bill Joy cat で検索

452 :デフォルトの名無しさん:2011/07/07(木) 00:08:56.53
>>447
>どこかに面白いソースとか転がってないかな?

http://bellard.org/otcc/

これはどう?

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

http://web.cecs.pdx.edu/~kirkenda/joy84.html

454 :デフォルトの名無しさん:2011/07/07(木) 00:10:59.20
>>452
英語読めってのか?って突っ込まれたいだけだろお前。

455 :デフォルトの名無しさん:2011/07/07(木) 00:11:49.54
IOCCCとか人によっては面白かったりするんじゃない

456 :デフォルトの名無しさん:2011/07/07(木) 00:13:00.29
>>454
英語は読まなくていいよ
そこにある otccn.c と otccelfn.c が面白そうなので紹介しただけ

457 :449:2011/07/07(木) 00:14:44.07
>>451

>>449書いたあとで、ワンライナー位なら行けるか、と思っていたらviですか。
まぁそれは都市伝説にしても、ラインエディタでコーディングとか、
とても想像できない。

458 :デフォルトの名無しさん:2011/07/07(木) 00:15:15.81
>>420
学習用途でバイトの違いって重要か?
変な所にこだわるな。。。


459 :デフォルトの名無しさん:2011/07/07(木) 00:16:22.76
そういや以前マクロを駆使してPascalっぽいコーディングをしていたソースを見たことあるな

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/

462 :デフォルトの名無しさん:2011/07/07(木) 00:19:33.56
>>449
vi,emacs以前というと。。。edだな
まんまediterの略


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

465 :デフォルトの名無しさん:2011/07/07(木) 00:24:35.43
>>420
学習用途でバイトの違いって重要か?
しかも独学じゃなく、学校のお授業だぞ?

独学ならwinじゃvcかcygwin+gcc薦めるとこだが
(bccが個人的に一番好きだったが、亡くなったしね)


466 :デフォルトの名無しさん:2011/07/07(木) 01:48:35.76
>>464
こういうマクロの組み方には
有名な元ネタがあるんじゃなかったっけ?
何かで読んだ気がする

467 :デフォルトの名無しさん:2011/07/07(木) 04:54:05.00 ?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 と同様に)

ってバカ避けを増やしていかないといけないってことか
バカを取り除くほうが有用な気もするが

473 :デフォルトの名無しさん:2011/07/07(木) 11:52:50.20
それもあってのC99のヘッダ追加だろう

474 :デフォルトの名無しさん:2011/07/07(木) 18:53:34.16
今のご時勢... 入門ならほとんどググッて解決せん? インターネットに繋がらなければ知らんが
CのOOPページを紹介してくれ 最近ホットな話題なんで


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


477 :デフォルトの名無しさん:2011/07/07(木) 19:05:48.22
>>474
ホット。。。か?
あんな苦し紛れな事するぐらいなら、C++をベターCとして使った方が良いだろ

漢の浪漫としても2流


478 :デフォルトの名無しさん:2011/07/07(木) 19:07:21.47
CでOOPとかどう考えても苦行だろ

479 :デフォルトの名無しさん:2011/07/07(木) 19:08:10.76
>>476
LSI-CはDOSでも動きますが?


480 :デフォルトの名無しさん:2011/07/07(木) 19:11:18.93
アホだな 苦行の世界だから 未知の価値があるのに C++他なんて出来て当たり前 エンベッティドの世界はOOPはまだまだだよ!
てか C++でROMとヒープに納めきられる?


481 :デフォルトの名無しさん:2011/07/07(木) 19:12:23.25
>>476
LSI-C は 32bit Windows 上で動きますが?

482 :デフォルトの名無しさん:2011/07/07(木) 19:13:12.69
CでOOPならGObjectだ
で、マクロ書くのメンドクサくなってValaへ移行するんだ

483 :デフォルトの名無しさん:2011/07/07(木) 19:21:50.88
>>481
内容見てから口あけろ

484 :デフォルトの名無しさん:2011/07/07(木) 19:27:31.07
>>480
むしろ、そんな小さいプログラムにOOPが必要有るのかと。。。


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の入門編もある このスレの範疇であれば良いが...


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

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

そもそも「今どき int が 16 ビットの処理系なんて無い」という主張を聞いたこと無いんだけど…。

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

オブジェクト指向が生きるのはメモリがMB単位になってからだ


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
むしろ昔から言われてるがな。。。
オブジェクト指向は万能薬じゃないんだし
マンセーし過ぎ


493 :デフォルトの名無しさん:2011/07/07(木) 20:48:00.98
HelloWorld書いてみたらわかる

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使用以外にジャンプする手段ありますか?

496 :デフォルトの名無しさん:2011/07/07(木) 22:08:47.35
多動だろ

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] 期限: 本日中

500 :デフォルトの名無しさん:2011/07/07(木) 22:12:52.20
スレ間違ってるぞ

501 :デフォルトの名無しさん:2011/07/07(木) 22:16:58.11
はい、申し訳ありません。。気を付けます。

502 :495:2011/07/07(木) 22:18:59.26
参考になりました。
どうもありがとうございます。

503 :デフォルトの名無しさん:2011/07/07(木) 23:34:41.54
po=malloc(size);
switch (...){
case true: 〜; if (error) btrak; 〜break;
case false: 〜}
〜;
free(po);

504 :デフォルトの名無しさん:2011/07/07(木) 23:49:10.07
typedef struct s{
  char ch[2];
} S;
S s[100];
ってやるのと

char ch[100][2];
ってやるのではどっちのほうがメモリ節約できますか?

505 :デフォルトの名無しさん:2011/07/07(木) 23:50:24.29
前者
理由はウェブで!

506 :デフォルトの名無しさん:2011/07/08(金) 00:49:10.75
ぐぐってみたがよく分からん
管理領域が関係してるのか

507 :デフォルトの名無しさん:2011/07/08(金) 01:16:38.48
後者だろ。

508 :デフォルトの名無しさん:2011/07/08(金) 01:26:28.93
変わんねーよ

添え字のアクセスはコンパイル時に決定されるから領域使わない

509 :デフォルトの名無しさん:2011/07/08(金) 01:28:22.86
環境によっては alignment の影響を受けるかもね

510 :デフォルトの名無しさん:2011/07/08(金) 01:28:24.26
前者だと
sizeof(S) == 4
となる可能性無い?


511 :デフォルトの名無しさん:2011/07/08(金) 01:33:49.65
比較演算を等号の意味で使う馬鹿が後を絶たないのは何でだ?


512 :デフォルトの名無しさん:2011/07/08(金) 01:46:39.41
掲示板で他人を馬鹿呼ばわりする人間が後を絶たない事の方が不思議だわ


513 :デフォルトの名無しさん:2011/07/08(金) 01:52:41.42
理解できるなら使用してもかまわんだろ。

514 :デフォルトの名無しさん:2011/07/08(金) 01:56:26.93
普通の等号だと assignment になっちゃうしな

515 :デフォルトの名無しさん:2011/07/08(金) 05:02:09.03
そもそも、等号というのは比較演算をした結果を返値とする演算子なので。

516 :デフォルトの名無しさん:2011/07/08(金) 19:02:10.20
>>511は行間が読めないだけだよ
通常はこの文章を

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

と読み解く。

517 :デフォルトの名無しさん:2011/07/08(金) 19:06:30.10
C言語のソースでもないのに==を比較演算と捉えるバカが後を絶たないのはなんで?


518 :デフォルトの名無しさん:2011/07/08(金) 19:09:42.74
じゃあ普通に等号書けよ

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

こう書けばいいだろ。

519 :デフォルトの名無しさん:2011/07/08(金) 19:11:56.77
文脈を読めない可哀想な子


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
コードを書く阿呆と
コードを書かない阿呆は
どっちが偉いんだろう?

528 :デフォルトの名無しさん:2011/07/08(金) 20:44:38.14
書かなきゃ損損

529 :デフォルトの名無しさん:2011/07/08(金) 20:48:14.10
どんなだろうと阿呆は偉くない

530 :デフォルトの名無しさん:2011/07/08(金) 20:51:04.22
偉い人は自分が阿呆だと知っている

531 :デフォルトの名無しさん:2011/07/08(金) 21:24:05.27
コードを書かされるアホが最低ランクということは確かだ

532 :デフォルトの名無しさん:2011/07/08(金) 22:15:50.02
能力なくてガチで逃げ回ってるアホにはかなわんだろ
上には上がいる

533 :デフォルトの名無しさん:2011/07/08(金) 22:49:50.15
画像データの1次元配列の、データ格納形式を
元データ : int32 = 0x00FFAA11;     // FFは赤、AAは緑、11は青
先データ : char[3] = {R, G, B};
へとコピーしたいです。

たとえば
long src[10] = {
    0x00FFAA11,  0x00FFAA11,  0x00FFAA11,  0x00FFAA11,  0x00FFAA11,
    0x00FFAA11,  0x00FFAA11,  0x00FFAA11,  0x00FFAA11,  0x00FFAA11
};

char dst[3 * 10];
として、現状は
void convert(char* dst, long* src, int pixel_len)
{
    int i;
    for(i=0; i < pixel_len; i++) {
        dst++ = (src>>16) & 0xFF;
        dst++ = (src>>8 ) & 0xFF;
        dst++ = (src>>0 ) & 0xFF;

        src++;
    }
}
としてるのですが、これをSSEで置き換えようとしたら、1ピクセルのデータ長さが24bitと32bitで異なることが原因で、
効率的にxmmレジスター上で展開するというパズルが解けなくてこまってます。
convert()を、128bit単位の変数操作を効率的に駆使して行う方法が思いつきません。だれか良い方法を編み出してください。

534 :デフォルトの名無しさん:2011/07/08(金) 23:18:53.23
memcpy(&ch[m], &src[n], 3)
で済むようにデータを並び替えろ。
SSEはしらんが。

535 :デフォルトの名無しさん:2011/07/09(土) 03:24:41.93
超基礎でも良いですか?

536 :デフォルトの名無しさん:2011/07/09(土) 05:00:00.56
良いです

537 :デフォルトの名無しさん:2011/07/09(土) 05:16:35.69
ポインタに関してなんですが、授業、教本
に書いてある解説は読むと言っていることは理解出来ます。
ですが、ポインタのメリットが良く分からないのでイマイチ使い所が分かりません。
郵便番号に例えられても、ああそれで?となってしまうので、ポインタのメリットとポインタを使う意義を教えて貰えませんでしょうか?

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
ありがとうございます。完結で分かりやすい説明でした。メモリの節約、スピードアップに効力を発揮するわけですね。

541 :デフォルトの名無しさん:2011/07/09(土) 09:42:16.78
>>537
ずっと複雑な構成のプログラムになると、ポインタでなければ表現できないものも存在します。
「アルゴリズムとデータ構造」
でググッてみてください。

ポインタの存在そのものが計算機科学にかかせないのです。

542 :デフォルトの名無しさん:2011/07/09(土) 09:48:20.09
横から済みません。ポインタが存在しない言語では実装できないロジックってあるんですか?

543 :デフォルトの名無しさん:2011/07/09(土) 10:07:31.70
質問があります.
UnixのプログラムをWindowsに移植しています.
initstate(2, rngState, 256)
って関数はマイクロソフトのCのライブラリには無いようで
調べてみると乱数と関係する関数の用です.
これを移植するにはどんな関数や代替的な処理をすればよいでしょうか?



544 :デフォルトの名無しさん:2011/07/09(土) 10:22:37.16
>>542
ポインタと陽にいっていないだけで、ポインタと同じだったり(Java)、あるいは、ポインタのかわりに参照があったり(Pascal)、
ポインタがなくとも、自分で領域管理をして配列の添え字をもってポインタとしたり、手はいろいろあります。

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

要は、乱数をどう利用しているかの調査が必要。

546 :デフォルトの名無しさん:2011/07/09(土) 10:49:24.52
>>542
言語仕様上はポインターが無くても、チューリング完全であれば、実装は理論的には可能です。(Brainf*ckなど)
ただしアプリケーションの目的によっては、実行パフォーマンスなどが、実用的でない場合も多々あります。
逆に言えば、アプリケーションの分野ごとに最優先事項が異なるため、多数のプログラミング言語が考案された、とも言えます。

547 :デフォルトの名無しさん:2011/07/09(土) 10:58:04.13
>>516
このバカは、比較演算子が正負を返すとでも思っているのだろうか?

548 :デフォルトの名無しさん:2011/07/09(土) 10:58:40.81
8bit時代のBASICは配列サイズが固定だったから不便だったな。
clearで初期化できるけど全変数消えちゃうし。
まぁ、アロケート出来ないなら出来ないなりの処理を考えるけど。

549 :デフォルトの名無しさん:2011/07/09(土) 10:59:26.16
>547
まだ居たの?粘着キモイよ。

550 :デフォルトの名無しさん:2011/07/09(土) 11:09:50.83
自作関数を作ったんだけど引数は呼び出し側でもらったほうがいいの?
それとも関数の中でもらったほうがいいの?

551 :デフォルトの名無しさん:2011/07/09(土) 11:10:49.55
意味不明

552 :デフォルトの名無しさん:2011/07/09(土) 11:12:13.13
>>549
バカ発見。ねえねえ、比較演算子って正負を返すと本気で思ってたの?

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
値は返すだろ

556 :デフォルトの名無しさん:2011/07/09(土) 11:16:55.75
呼び出す前に引数の内容をprintfして関数内でscanfを呼び出して
テキスト入力させるのが一般的だよ

557 :デフォルトの名無しさん:2011/07/09(土) 11:19:57.60
>>556
ありがとうございます

558 :デフォルトの名無しさん:2011/07/09(土) 11:20:41.58
>>555
http://www.wakhok.ac.jp/~kanayama/C/98/node18.html

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は関係演算子での話ね

563 :デフォルトの名無しさん:2011/07/09(土) 11:26:55.87
コンピュータで連続的な量ってどうやって扱うんですか?

564 :デフォルトの名無しさん:2011/07/09(土) 11:28:14.63
>>562
Cでは関係演算子は全部1か0だが

565 :デフォルトの名無しさん:2011/07/09(土) 11:30:23.40
数として連続量を扱いたいというのなら原理的に不可能


566 :デフォルトの名無しさん:2011/07/09(土) 11:30:25.10
>>564
アンカー間違えてない?
559=562=俺

567 :デフォルトの名無しさん:2011/07/09(土) 11:34:49.91
>552
バカはお前だ。
549は比較演算子の話しなんかしてねぇよ。お前がキモイってこと以外書いてないだろ。

林先生「まさかとは思いますが、549が「比較演算子って正負を返す」と主張したというのは、
あなたの想像上の出来事にすぎないのではないでしょうか。」

568 :デフォルトの名無しさん:2011/07/09(土) 11:35:16.82
>>563
"連続的な量"の事例をプリーズ。

569 :デフォルトの名無しさん:2011/07/09(土) 11:38:48.64
>>567
>>516はバカであり>>549>>516本人以外にありえない。つまり>>549はバカ。

570 :デフォルトの名無しさん:2011/07/09(土) 11:39:23.59
>>568
連続的な量=アナログ量

571 :デフォルトの名無しさん:2011/07/09(土) 11:40:27.61
正となる → 正負を返す

どうやら0を認識出来ないようだ

572 :デフォルトの名無しさん:2011/07/09(土) 11:41:18.94
>>571
インド人すげー

573 :549:2011/07/09(土) 11:43:08.11
>569
赤の他人だよ。妄想乙。

574 :デフォルトの名無しさん:2011/07/09(土) 11:55:25.35
そのアナログ量が周期的なものか、そうでないのかによって扱い方がかわる。


575 :デフォルトの名無しさん:2011/07/09(土) 12:00:46.38
周期性があればFFTが使えるかも。

576 :デフォルトの名無しさん:2011/07/09(土) 12:11:40.93
(゚σ ゚)ホジホジ

577 :デフォルトの名無しさん:2011/07/09(土) 12:14:44.75
== たったこの2byteで盛り上がれる素敵なスレ

578 :デフォルトの名無しさん:2011/07/09(土) 12:22:43.22
>563
PCMデータについて色々調べてみたら?

579 :デフォルトの名無しさん:2011/07/09(土) 13:23:59.91
最小の単位を設定するだけだろ。
アナログもクソもない。

580 :デフォルトの名無しさん:2011/07/09(土) 13:50:37.52
A/D変換の問題

581 :デフォルトの名無しさん:2011/07/09(土) 14:38:41.38
量子れべるでかんがえたら、しょせんこのよは、みんなでじたる。

582 :デフォルトの名無しさん:2011/07/09(土) 15:40:28.06
>>579
な に い っ て ん の ?

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では出来ません、が正しい答えだけど、どうなれば「削除」したことになると思っている?

586 :デフォルトの名無しさん:2011/07/09(土) 20:24:30.45
とりあえず消したい配列の要素を格納しといて後から詰める方法でやろうと思ってるんだけど消したい要素が2つあると難しい

587 :デフォルトの名無しさん:2011/07/09(土) 20:43:26.60
HDDを思いっきり叩いてみる

588 :デフォルトの名無しさん:2011/07/09(土) 20:45:24.83
「1つの要素を削除する」という処理を2回やれば済むだろ

589 :デフォルトの名無しさん:2011/07/09(土) 21:47:04.70
for(i = j = 0; i < N; i++) {
if(a[i] = b || a[i] == c) continue;
a[j++] = a[i];
}

590 :デフォルトの名無しさん:2011/07/09(土) 21:47:25.21
a[i] == b

591 :デフォルトの名無しさん:2011/07/09(土) 22:10:15.61
まず問題が正しく理解できてないな。
質問が曖昧すぎる。

592 :デフォルトの名無しさん:2011/07/09(土) 23:55:46.44
>>588
例えば
a[10]で2と5の要素を詰めようとすると2の要素を詰めることで5の要素でなくなるということじゃまいか

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が見つかりません。新しく作成しますか?」

ってでてくる。
ちゃんとはじめにメモ帳に保存したのにできんのはなぜなんだあああああああああああああああああ

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];
}

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で帰ってきます。何がおかしいんでしょうか…

600 :デフォルトの名無しさん:2011/07/10(日) 01:49:03.65
すみません、関数bですが、

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

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



601 :デフォルトの名無しさん:2011/07/10(日) 01:53:40.68
Aが真になってないだけじゃないの?

602 :デフォルトの名無しさん:2011/07/10(日) 02:09:58.36
しかし「ある動作」はなされているので、真になっているはずなのですが…

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される


604 :600:2011/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;
}


609 :デフォルトの名無しさん:2011/07/10(日) 05:56:39.60
>>593>>595
出来ました!
どうもありがとう

610 :608:2011/07/10(日) 07:48:26.50
間違えた
if(*cell & mask) {
だった

611 :デフォルトの名無しさん:2011/07/10(日) 11:55:25.05
>>608
ありがとうございます!テキストのデータは与えられていて、読み込みには成功してると思うのですが…
http://codepad.org/HUSe1tPQ
全プログラムはこうなってます。再三申し訳ないですがご鞭撻の程お願いします。(ブロックによる制約が煩雑なのはすみません)

612 :608:2011/07/10(日) 12:44:45.75
あ?

613 :デフォルトの名無しさん:2011/07/10(日) 12:49:11.56
芸術的字下げってやつか

614 :608:2011/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 :608:2011/07/10(日) 13:42:18.12
>>615
そこまで変えちゃうと質問者が理解出来なくなるんじゃね?

617 :デフォルトの名無しさん:2011/07/10(日) 14:31:21.68
もうちっとシンプルに書けないもんかね

618 :デフォルトの名無しさん:2011/07/10(日) 14:49:14.89
>>617が画期的なほどにシンプルなソースを公開してくれるそうですよ!

619 :デフォルトの名無しさん:2011/07/10(日) 15:34:33.86
scanfとgetsてどう使い分ければいいの?

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
コード晒してみな

623 :デフォルトの名無しさん:2011/07/10(日) 15:41:07.59
結果は同じ

624 :デフォルトの名無しさん:2011/07/10(日) 15:41:11.89
後者の場合に、最初のifでX操作した結果次のifの条件を満たしたりしてない?

625 :デフォルトの名無しさん:2011/07/10(日) 15:41:50.15
>>621
{
if(){Xの操作 }
else if(){Xの操作 }
else{ }
return X
}

626 :デフォルトの名無しさん:2011/07/10(日) 15:42:42.07
else 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
コード晒してみな

629 :デフォルトの名無しさん:2011/07/10(日) 16:15:42.68
二つのifをどちらも満たさない場合が違う。

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;

}


です。

631 :デフォルトの名無しさん:2011/07/10(日) 16:40:36.21
if内のreturn th;を削っただけで、最後のelseをはずしてないとか?

632 :デフォルトの名無しさん:2011/07/10(日) 16:43:48.40
>>630
は何かおかしいですか?

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ですね。


636 :デフォルトの名無しさん:2011/07/10(日) 17:03:48.24
話ぶった切ると、>>621の解決法は「正しく動く方を使え」。
どうせ使わない変更後のコードの話なんかしてたら、時間が幾らあっても(ry

637 :デフォルトの名無しさん:2011/07/10(日) 17:30:42.56
話をつなげると、そもそもwhileでやる事なのかコレ?

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;

}

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;

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
どちらも同じ意味です。
たぶんどちらかがポカミスしていると思います。今後の思考整理のため、この機会に突き詰めて納得しておくことをお勧めします。

641 :デフォルトの名無しさん:2011/07/10(日) 18:29:15.07
double normalize(double th) {
th = fmod(fmod(th, PID) + PID, PID);
return th <= PI ? th : th - PID;
}

642 :621:2011/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 :643:2011/07/10(日) 19:17:53.37
もちろんa≦x≦b c≦y≦dの範囲に満遍なくランダム値を出したいです・・
どうすればいいでしょう?

645 :デフォルトの名無しさん:2011/07/10(日) 19:28:32.49
0〜(b-a)になるようにして、後でaを足せば?

646 :デフォルトの名無しさん:2011/07/10(日) 19:30:30.95
>>644
http://homepage3.nifty.com/mmgames/c_guide/21-02.html

647 :デフォルトの名無しさん:2011/07/10(日) 19:30:47.28
double r = double(rand()) / RAND_MAX ;
double x = r * (b - a) + a;
double y = r * (d - c) + c;

648 :デフォルトの名無しさん:2011/07/10(日) 19:58:32.67

do
{
  x = rand() / RAND_MAX;
  y = rand() / RAND_MAX
}while(x<a || b<x || y<c || d <y);

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
それでも条件で範囲に収まらないとはじいてるので大丈夫です。


653 :デフォルトの名無しさん:2011/07/10(日) 23:33:06.67
>>614
ありがとうございました!やはりmain関数のほうで良くない動作してたみたいですね・・・

654 :デフォルトの名無しさん:2011/07/11(月) 00:23:27.82
Cって何からとったの?

655 :デフォルトの名無しさん:2011/07/11(月) 00:34:10.10
かるしうむ

656 :デフォルトの名無しさん:2011/07/11(月) 01:18:49.12
>>655
ども

657 :デフォルトの名無しさん:2011/07/11(月) 02:19:38.11
おいww

658 :デフォルトの名無しさん:2011/07/11(月) 04:58:37.51
>>654
Bの次

659 :デフォルトの名無しさん:2011/07/11(月) 21:36:25.27
それじゃ不十分だな。
ACPLという言語があって、
BCPLという言語があって、
その頭文字をとったBという言語があって、
次に2番目の文字とってCになった。

660 :デフォルトの名無しさん:2011/07/11(月) 21:38:04.77
というのは錯覚

661 :デフォルトの名無しさん:2011/07/11(月) 21:52:23.00
ちょっとまて、CCPL はどうした?

662 :デフォルトの名無しさん:2011/07/11(月) 21:55:09.04
Window system の“X”も“W”の次だから“X”なんだよな。
そういう文化だったから、ってことなんだろう。


663 :デフォルトの名無しさん:2011/07/11(月) 21:55:54.46
CってALGOLの子供かと思ってた

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級みたいのってあるんですか?

668 :デフォルトの名無しさん:2011/07/11(月) 22:20:37.50
あるけどまったくひょうかされない

669 :デフォルトの名無しさん:2011/07/11(月) 22:25:12.54
あらま。

670 :デフォルトの名無しさん:2011/07/11(月) 22:25:31.52
C言語で扱える最も単純なグラフィックシーケンスを教えてください。
テトリスとか作ってみたくなりました。

671 :デフォルトの名無しさん:2011/07/11(月) 22:30:00.95
>>670
環境依存なので実行環境を決めないと無理

672 :デフォルトの名無しさん:2011/07/11(月) 22:31:54.43
環境依存かは作り方次第

673 :デフォルトの名無しさん:2011/07/11(月) 22:42:10.72
>>671
実行環境はWindows7です。


674 :デフォルトの名無しさん:2011/07/11(月) 23:00:22.02
Windows7 は知らないけど
SetConsole〜 が使えるかも

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でブロック崩し作って遊んでた
これが一般的かどうかは知らない

678 :デフォルトの名無しさん:2011/07/11(月) 23:35:14.77
テトリスは集中力が持つ限り延々と続いてしまう

679 :デフォルトの名無しさん:2011/07/12(火) 00:33:46.96
続いてしまうかは作り方次第

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関数を呼ぶ必要がありますか?

683 :デフォルトの名無しさん:2011/07/12(火) 11:25:06.63
え?

684 :デフォルトの名無しさん:2011/07/12(火) 11:46:33.76
callocやmallocを呼んだ回数分でおk

685 :デフォルトの名無しさん:2011/07/12(火) 13:29:46.09
>>682
mallocした全ての分についてfreeする必要がある

686 :デフォルトの名無しさん:2011/07/12(火) 15:01:09.90
それじゃ答えになってない

687 :デフォルトの名無しさん:2011/07/12(火) 15:38:47.80
callocやmallocの戻り値は
一度だけfreeの引数に渡して呼び出して良い

688 :デフォルトの名無しさん:2011/07/12(火) 15:55:12.79
確保した領域サイズに関わらず
一度の確保に対して
一度の開放という認識であってますか?

689 :デフォルトの名無しさん:2011/07/12(火) 16:13:22.33
うん

690 :デフォルトの名無しさん:2011/07/12(火) 16:47:47.04
malloc()の使い方調べるのに4時間以上かかるなら、なにか適当なテキストを
読んだほうがいいと思う。

691 :デフォルトの名無しさん:2011/07/12(火) 17:03:59.71
自分で考えることをやめた人の質問は...

692 :デフォルトの名無しさん:2011/07/12(火) 18:16:22.15
プログラム「allocさん、メモリ貸してください」
alloc「はい、使い終わったらfree課に返しておいてください」

プログラム「free課さん、使い終わったメモリ返しに来ました」
free課「只今担当者が不在のためまた後ほどお越しください」
...
プログラム「あとで返しに来いといわれ、いま来たのですが」
free課「ちょっと処理機の調子が悪くて…また後日に(ry]
...
プログラム「今日返しに来いと言われたんですが」
free課「どのメモリか照合しますので少々お待ちください。」
...
free課「お待たせいたしました。このメモリはうちの課ではなく(ry」
プログラム「いい加減にせぇや!ゴルァ!!」



などと脳内コントがorz

693 :デフォルトの名無しさん:2011/07/12(火) 19:10:01.00
ポインタにNULLを入れて何回でもfreeしてやる

694 :デフォルトの名無しさん:2011/07/12(火) 19:51:07.95
おい姉ちゃんお前さんのfree関数ヌルヌルんなっとんでぇ


695 :デフォルトの名無しさん:2011/07/12(火) 22:00:21.79
それはナルや

696 :デフォルトの名無しさん:2011/07/12(火) 23:14:18.84
それアナルや

697 :デフォルトの名無しさん:2011/07/12(火) 23:26:33.30
ああ、なるほど

698 :デフォルトの名無しさん:2011/07/12(火) 23:49:05.17
お前らwww

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
コンパイラによっても違うしそれだけでは何とも言えない

701 :デフォルトの名無しさん:2011/07/13(水) 00:27:14.49
>>700
ランダムアクセスを想定してます。

702 :デフォルトの名無しさん:2011/07/13(水) 00:28:32.40
>>699
a[(320*30)+60] と a[30][60] は同じ速度になる可能性が高く
このアドレス演算は1命令で実行されるので早い

*((y[30])+60) にすると最低でも二回アドレス計算するので確実に遅くなる

703 :デフォルトの名無しさん:2011/07/13(水) 00:29:06.04
>>700
コンパイラーはGCC or ヴぃすあlC++を想定してます


704 :デフォルトの名無しさん:2011/07/13(水) 00:29:40.31
そこまで具体的なのになぜ自分で測定しないのか

705 :デフォルトの名無しさん:2011/07/13(水) 00:31:27.37
>>701
いやだからa[240][320]と大きさが固定されてるっしょ?
だからコンパイラはこれをヒントに大幅な最適化が可能なわけです

ポインタ配列はそのデータがL1/L2/L3キャッシュに乗っているかいないかで
大幅に速度が違ってくるので、CPUによっても異なり、なおさら一般的な
事は言えなくなる

706 :デフォルトの名無しさん:2011/07/13(水) 00:31:58.90
>>702
1命令で実行されるとしても、その命令のレイテンシーはどうなのですか?割り算だって1命令ですよ。

707 :デフォルトの名無しさん:2011/07/13(水) 00:32:31.79
>>703
自分の書いたコードがどんな汗吐いてるか見るところからやったら

708 :デフォルトの名無しさん:2011/07/13(水) 00:33:08.85
>>706
あんた誰?

709 :デフォルトの名無しさん:2011/07/13(水) 00:33:56.38
>>705
y[240]のテーブルを予めprifetchしておけば、これだとどうですか?

710 :デフォルトの名無しさん:2011/07/13(水) 00:35:27.10
>>706
頭のいいふりするバカって嫌いなんだよ

711 :デフォルトの名無しさん:2011/07/13(水) 00:41:00.31
>>702
320は定数だけど30と60は変数です。
この場合も1命令で可能なのですか?

712 :デフォルトの名無しさん:2011/07/13(水) 00:42:15.95
>>711
そのための -S オプションだよ

713 :デフォルトの名無しさん:2011/07/13(水) 00:42:24.33
>>704
ここで聞けばとっくに誰かが測定コード書いてるだろうと思ったからです

714 :デフォルトの名無しさん:2011/07/13(水) 00:43:01.86
>>712
エディター開くのめんどくさい・・・

715 :デフォルトの名無しさん:2011/07/13(水) 00:44:25.85
>>713
ここまで基本的な処理の検証だと測定するよりまずアセンブラを読んでみるのが普通だと思う
お前もがんばれ

716 :デフォルトの名無しさん:2011/07/13(水) 00:45:11.25
地味な作業ができん奴はこっち系には向かないよ

717 :デフォルトの名無しさん:2011/07/13(水) 00:45:32.80
大変かもしれませんがどなたかお願いします

718 :デフォルトの名無しさん:2011/07/13(水) 00:46:17.66
有料で引き受けますが

719 :デフォルトの名無しさん:2011/07/13(水) 00:55:50.01
QZなら5000モリタポでやってくれるってよ

720 :デフォルトの名無しさん:2011/07/13(水) 01:06:41.52
C言語スレで申し訳ないがC++で良いならboost::progress_timerが簡単に使えるタイマーでいいぞ
ベンチマークに最適

721 :デフォルトの名無しさん:2011/07/13(水) 01:09:00.22
あれとそれとは全く同じコード吐いたよ


722 :デフォルトの名無しさん:2011/07/13(水) 01:14:20.99
ポインタ配列通したらさすがに違うコード吐くだろ

723 :デフォルトの名無しさん:2011/07/13(水) 01:15:01.50
もういいわ、自分でしらべた
gcc -O0

a[240*y + x]
time seconds seconds calls Ts/call Ts/call name
100.00 4.18 4.18 main

a[y][x]
time seconds seconds calls Ts/call Ts/call name
100.00 4.18 4.18 main

*(Y[y] + x)
time seconds seconds calls Ts/call Ts/call name
100.00 4.18 4.18 main

z=240*y+x;
a[z]
time seconds seconds calls Ts/call Ts/call name
100.00 4.18 4.18 main

なにこの骨折り損感…
だ〜から聞いたんだっつ〜の…

ねるわ…orz

724 :デフォルトの名無しさん:2011/07/13(水) 01:17:43.12
>>723
最初のポインタ配列へのアクセスでキャッシュに残りが乗っちゃったようだね
そうなるとメインメモリへのアクセスが以降発生しなくなるからレイテンシがほとんどない
逆にL2/L3キャッシュが小さいCPUだとまた違う結果が出そうだ

725 :デフォルトの名無しさん:2011/07/13(水) 01:18:41.27
しかしO0って最適化無しだろ?
同じコードを吐いている可能性もあるしなあ
それで満足するのも・・・・

726 :デフォルトの名無しさん:2011/07/13(水) 01:51:32.28
http://codepad.org/4Aj2eVqS

全然差がないワロタ

727 :デフォルトの名無しさん:2011/07/13(水) 02:22:57.54
http://ideone.com/P12mM
ideoneなら(一部の)boostも使えて便利だよ


728 :デフォルトの名無しさん:2011/07/13(水) 02:24:45.66
randの処理に比べたら配列のアクセスと代入ってゴミみたいなもんだったりしないんだろうか

729 :デフォルトの名無しさん:2011/07/13(水) 02:29:14.10
for (int i = 0; i < N; i++) { rand(); rand(); } みたいに最適化されてるかも

730 :デフォルトの名無しさん:2011/07/13(水) 02:32:09.00
http://ideone.com/fTXzu
ためしにこうしてみた
ちょ・・・・・・・・

731 :デフォルトの名無しさん:2011/07/13(水) 02:43:17.95
gccだと最適化掛けてもほとんど速度が変わらないな
ボトルネックは配列アクセスやアドレス生成じゃないだろ
やっぱりrand()?

732 :デフォルトの名無しさん:2011/07/13(水) 02:56:12.03
>>699
二次元配列を使おうが、普通に乗算しようが基本的に同じだと思う。
そこまで速度にこだわるなら、画像幅を2の累乗(320なら512)に切り上げて、ビットシフトだけで演算できるようにしたほうが良い。

コンパイラがどういう命令を吐いているかは、VC++なら/Faオプションで調査できる。
最適化レベルによっては、整数倍を勝手にビットシフトに展開することがある。例えば320倍ならば、(x << 8) | (x << 6)などに。
自分でインラインアセンブラで書いて検証するのも一つの手だが、コンパイラの吐いたコードはそれなりにCPUの特性を考慮してくれているので、まずそれを参考にするのがお勧め。

各ラスタの開始アドレスを覚えておく方法は、乗算一個ごときのためならお勧めしかねる。メモリアクセスにだってコストはあるし、キャッシュの無駄。
ところでx86のmul命令って、今でもまだクソ遅いのかな…。ターゲット機によるかも知れんが。

733 :デフォルトの名無しさん:2011/07/13(水) 03:58:17.81
http://ideone.com/wfYsi

乱数を最初に生成しておいたら0.00sになりやがった

734 :デフォルトの名無しさん:2011/07/13(水) 04:06:36.50
http://ideone.com/oiSIt

おっこれなら結構差が出るじゃん

735 :デフォルトの名無しさん:2011/07/13(水) 08:17:55.60
>>732
誤 : (x << 8) | (x << 6)
正 : (x << 8) + (x << 6)

736 :デフォルトの名無しさん:2011/07/13(水) 09:23:38.03
てか画像関係ってことはフーリエ変換とかの知識いるの?
だとしたらこの初心者スレで聞いても住人の数学レベルじゃ
ついていけないんじゃね?

このスレは高卒もいるだろうし。

737 :デフォルトの名無しさん:2011/07/13(水) 09:29:39.61
高校でてるならフーリエ変換ぐらいわかるだろ

738 :デフォルトの名無しさん:2011/07/13(水) 09:37:57.29
>>734
だからこの手のはアセンブラみねーと意味ねーつってるだろ?
http://ideone.com/AONhS
お前のその差はアクセス方法からくる差じゃない

739 :デフォルトの名無しさん:2011/07/13(水) 09:38:29.54
高卒の人でフーリエ変換わかる奴いる?いたら挙手

740 :デフォルトの名無しさん:2011/07/13(水) 09:39:37.74
http://ideone.com/80Jut
ごめん間違えたこっち
いや結果は変わらないんだけど

741 :デフォルトの名無しさん:2011/07/13(水) 09:40:10.38
>>739
高卒の知識なら説明よめば理解可能だろうって意味だろどう考えても

742 :デフォルトの名無しさん:2011/07/13(水) 09:42:59.12
そりゃそうだ
大学生は普通高校卒業してからなるものだから

743 :デフォルトの名無しさん:2011/07/13(水) 09:48:15.10
厨房だけど
フーリエ変換ってなにするもの?

744 :デフォルトの名無しさん:2011/07/13(水) 09:49:08.88
微分方程式が機械的に解ける

745 :デフォルトの名無しさん:2011/07/13(水) 09:49:33.25
>>741
それは承知だが大学受験しない奴はVCを習ってないんじゃないか?とも思うが。

746 :デフォルトの名無しさん:2011/07/13(水) 09:50:35.94
ラプラス変換じゃないか?

747 :デフォルトの名無しさん:2011/07/13(水) 09:51:32.36
>>745
そういうえばそうだごめんなさい
さすがにそこからだと隔絶大きいな

748 :デフォルトの名無しさん:2011/07/13(水) 09:53:17.73
プログラム上だとどう利用されるの?

749 :デフォルトの名無しさん:2011/07/13(水) 09:54:13.51
理系学部の入試でも出題範囲がUBまでのところあるんだぜwwwwwwwwww

750 :デフォルトの名無しさん:2011/07/13(水) 09:55:22.56
>>748
画像とか音とかアナログ量をコンピュータ上で扱うのに便利かもね

751 :デフォルトの名無しさん:2011/07/13(水) 09:59:50.74
>>743
一般的にいったら、ベクトル空間の基底変換だろ。
特殊なケースとして、関数空間(ある性質をもった関数全体)がベクトル空間となり
そこでの特殊な基底変換がフーリエ変換。
基底変換はフーリエ変換に限らずいくらでもある。

752 :デフォルトの名無しさん:2011/07/13(水) 10:01:37.84
>>747
それに受験しないんだから1A2Bの知識だってかなり薄いんじゃね?


フーリエ変換ってのは画像の色の変化を波でとらえること。
数学においては全ての波は正弦波に分解できる。

753 :デフォルトの名無しさん:2011/07/13(水) 10:02:11.34
良くわからないということだけはわかりました
ありがとうございました

754 :デフォルトの名無しさん:2011/07/13(水) 10:22:55.06
ローレンツ変換もベクトル空間上の可逆変換。


ローレンツ変換は、2 つの慣性系の間の座標を結びつける線形変換で、
電磁気学と古典力学間の矛盾を回避するために、ジョセフ・ラーモア(1897年)とオランダのヘンドリック・ローレンツ(1899年、1904年)により提案された。
アルベルト・アインシュタインが特殊相対性理論(1905年)を構築したときには、慣性系間に許される変換公式として、理論の基礎を形成した。
幾何学的には、ミンコフスキー空間における 2 点間の世界間隔を不変に保つような、原点を中心にした回転変換を表す。
ローレンツ変換のうち、空間と時間が関与する方向への変換をローレンツブースト (Lorentz boost) と呼ぶ。
特殊相対論が導く、我々の直感に反する事柄のほとんどは、このローレンツブーストからの帰結である。
ローレンツ変換 - Wikipedia

755 :デフォルトの名無しさん:2011/07/13(水) 10:34:51.47
ここにも変換が出てくるが、わかりやすくする、かんたんにするためだ。



サポートベクターマシンは、教師あり学習を用いる識別手法の一つである。多くの手法の中で一番認識性能が優れた学習モデルの一つである。
各データ点との距離が最大となる超平面を求めるマージン最大化という基準で線形入力素子のパラメータを学習する。
線形分離不可能な問題への適用
再生核ヒルベルト空間の理論を取り入れたカーネル関数を用いてパターンを特徴空間へ写像し、
特徴空間上で線形分離を行う手法が 1992年に Vladimir Vapnik らによって提案された。
これにより、非線形分類問題にも優れた性能を発揮することがわかり、近年特に注目を集めている。
サポートベクターマシン - Wikipedia

756 :デフォルトの名無しさん:2011/07/13(水) 10:36:27.80
頭大丈夫か?

757 : 忍法帖【Lv=24,xxxPT】 :2011/07/13(水) 11:18:16.25
フーリエ変換なんて、大学受験してない私でも理解できるよ。
要は、頭の使い方次第。

758 :デフォルトの名無しさん:2011/07/13(水) 11:23:16.16
べつに再発見したってわけでもねぇんだ
習得するだけなら頭使わなくても参考書適当にひきゃ十分だろ


759 :デフォルトの名無しさん:2011/07/13(水) 11:59:23.29
なんで定期的に知ったかちゃんが湧くの?このスレ

760 : ◆QZaw55cn4c :2011/07/13(水) 12:32:38.64
>>739
のし

761 : ◆QZaw55cn4c :2011/07/13(水) 12:33:37.71
>>744
ラプラス変換ではなくて?あと線形微分方程式ね。

762 : ◆QZaw55cn4c :2011/07/13(水) 12:35:24.73
>>743
フーリエ級数展開の拡張形という見方もわかりやすい。フーリエ級数展開、なら高校生にも理解できる(証明はべつとして)。

763 : ◆QZaw55cn4c :2011/07/13(水) 12:37:21.07
>>759
ポインタ/キーワードを提供していただく、という意味で、好意的に捉えています。

764 :デフォルトの名無しさん:2011/07/13(水) 12:56:21.85
過去の数学者の成果を自分の手柄みたいに語るんだなw


765 :デフォルトの名無しさん:2011/07/13(水) 13:02:53.90
おっぱいの揺れについての
数式はないの?

766 :デフォルトの名無しさん:2011/07/13(水) 13:03:47.04
普通にあったとおもう



767 :デフォルトの名無しさん:2011/07/13(水) 13:06:10.78
フーリエはどちらかというと物理学者
熱伝導の研究からフーリエ解析に発展した
高校教師の時代もあったし考古学の研究をしてたときもあった

768 :デフォルトの名無しさん:2011/07/13(水) 13:09:08.90
フーリエ変換を含めなぜ写像を考えるのかついてだ。単純化・高速化できる。


実空間の畳み込みのフーリエ変換は、元の関数のそれぞれのフーリエ変換の単純な積になる。
多項式の乗算、即ち、離散系の畳み込みをフーリエ空間で行い、それを実空間に戻して、数値の乗算をしたことにする。
今、4096個の一次元データに4096個データの一次元フィルタを掛けるとすれば、
実空間では、4096*4096 約1678万回の乗算が必要となるが、DFTでは、畳み込みだけでは、0.4万回で済む。
前後に3回のDFTが必要となるが約200倍のスピードとなる。
http://www.nextftp.com/swlabo/m0_pctech/hp_ultraprecision/up_815_1.htm
実空間では総当り フーリエ空間では要素間
http://www.nextftp.com/swlabo/m0_pctech/hp_ultraprecision/up_815_1.files/image001.gif

769 :デフォルトの名無しさん:2011/07/13(水) 13:47:17.25
◆QZaw55cn4cは糞

770 :デフォルトの名無しさん:2011/07/13(水) 14:40:16.23
>>768
もう休んでいいよ


771 :デフォルトの名無しさん:2011/07/13(水) 14:44:29.62
正規直交基底変換の一種のフーリエ変換なんて
2次元グラフなんかを習う時に、直交基底、直交基底関数の概念習うから
中学1年でも解るんじゃないのか

772 :デフォルトの名無しさん:2011/07/13(水) 14:49:22.20
そうだね
何かの面積習うだけで積分の概念思いついちゃう人もいるしな

773 :デフォルトの名無しさん:2011/07/13(水) 14:59:38.32
そうだよな
そういうところで低脳と高脳の違いがでるんだろうな

774 :デフォルトの名無しさん:2011/07/13(水) 15:02:59.00
そして俺は低能だった

775 :デフォルトの名無しさん:2011/07/13(水) 15:17:33.50
低能の俺に微分、積分をシンプルに教えてください

776 :デフォルトの名無しさん:2011/07/13(水) 15:54:11.47
彼女の瞳を見つめる。その瞳には君が映っているだろう?
で、その映された君の瞳の中には彼女が映って...という具合だ。
突き詰めていくと彼女の心がわかる。それが微分。
反対に君の心がわかるのが積分というわけ。


777 :デフォルトの名無しさん:2011/07/13(水) 15:58:01.97
違います

778 :デフォルトの名無しさん:2011/07/13(水) 16:02:49.38
彼女いないんで、鏡に映した自分の瞳じゃだめですか?

779 :デフォルトの名無しさん:2011/07/13(水) 16:07:37.93
二次元の彼女を作れ。
積分すれば三次元になるぞ!

780 :デフォルトの名無しさん:2011/07/13(水) 17:24:25.12
こぼらーの俺にCOBOLのREDEFINESとCの共用体の事について教えてください
例えばワークで

03 DATE-WK PIC 9(08).
03 FILLER REDEFINES DATE-WK.
05 YEAR-WK PIC 9(04)
05 MONTH-WK PIC 9(02).
05 DAY-WK PIC 9(02).

とあって、DATE-WKに20110711が入っていたら
MONTH-WKは07、DAY-WKは11という値が入ります。んでCでは共用体っつーのが
あって、これと似たような事が行えると聞きましたが、本読んでもぴんと
きません^^;

この例で日付の変数に20110711が入っていて、月、日を利用する例を示して
いただけませんか

781 :デフォルトの名無しさん:2011/07/13(水) 17:59:08.57
>>780
#include <string.h>
#include <stdio.h>
union shine {
char s[8];
struct {
char year[4];
char month[2];
char date[2];
} unko;
};
int main( void ) {
union shine p;
memmove(p.s, "20110711", 8);
fwrite(p.unko.year, 1, sizeof p.unko.year, stdout);
putchar('\n');
fwrite(p.unko.month, 1, sizeof p.unko.month, stdout);
putchar('\n');
fwrite(p.unko.date, 1, sizeof p.unko.date, stdout);
putchar('\n');
return 0 ;
}
無理矢理やってこんな感じかね
Cではprintf("%s".....)で使えるような文字列は\0終端のchar配列なのでこんな有様になる

782 :デフォルトの名無しさん:2011/07/13(水) 18:01:42.41
>>781
unko の人か

printf("%.4s\n", p.unko.year);
とかもできるよ

783 :デフォルトの名無しさん:2011/07/13(水) 18:03:29.05
>>782
それをしないためのsizeofでしょ

784 :デフォルトの名無しさん:2011/07/13(水) 18:06:31.07
>>783
どういうこと?
%.*s もあるよ

785 :デフォルトの名無しさん:2011/07/13(水) 18:06:41.83
>>780
Cは数値はバイナリだし、文字列もあんまり便利にならないから
YYYYMMDDから要素を取り出すのに普通は共用体は使わない。
やりたいなら↑の人みたいにできるけど。

786 :デフォルトの名無しさん:2011/07/13(水) 18:08:52.16
>>782
そんなのあったなぁ
%s使えないという表現で言いたかったのは
つねにサイズを意識しなきゃいけないからめんどいからやめたほうがいいと言いたかった
printfを挙げたげたのは不適切でしたすいません

787 :デフォルトの名無しさん:2011/07/13(水) 18:12:33.74
>>784
それなら分かる

788 :780:2011/07/13(水) 18:52:21.74
皆さん、ありがとう

回答見て勉強してみます

789 :デフォルトの名無しさん:2011/07/13(水) 20:41:43.66
入力した文字列を逆順に出力するプログラムで

for (i = 0; str[i]; i++);
while(i--)
printf("%c",str[i]);
printf("\n");

というソースがあるのですがこれは

for (i = 0; str[i]; i++){
while(i--){
printf("%c",str[i]);
printf("\n");
}
}

だと実行出来ないのは何故ですか?

またwhile(i--)の意味がよく分からないのですがこれはどういう意味ですか?
while(i != 0)のような条件を入れるものだと聞いていたのですがこの場合は違いますよね・・・?

790 :デフォルトの名無しさん:2011/07/13(水) 20:44:56.13
>>789

実行は出来るんじゃないの。

それと元のコードと同様の意味になるのは下記。
for (i = 0; str[i]; i++){
while(i--){
printf("%c",str[i]);
}
printf("\n");
}

while(i--)
だが while (x) と while (x != 0)は同等

791 :デフォルトの名無しさん:2011/07/13(水) 20:58:34.52
>>790
ありがとうございます
書きなおしたのですが実行すると
無限ループ?になってしまうのですが何が原因でしょうか?
以下全文です

#include<stdio.h>
int main( void ) {
char str[256] ;
int i ;

scanf("%s", str) ;

for (i = 0; str[i]; i++){
while(i!=0){
printf("%c",str[i]);
}
printf("\n");
}
return 0 ;
}


792 :デフォルトの名無しさん:2011/07/13(水) 21:03:27.99
>>789
元のコードはfor文で文字列の長さを求めてからwhile文を実行している
下のコードは1文字毎にwhileを実行している



793 :デフォルトの名無しさん:2011/07/13(水) 21:13:55.01
> while(i!=0)


794 :デフォルトの名無しさん:2011/07/13(水) 21:18:17.83
>>792-793
ありがとうございます
自分の理解力が足りてないみたいなんでもう少し考えてきます

795 :デフォルトの名無しさん:2011/07/13(水) 21:18:47.55
元コードのforの後ろのセミコロンを見逃してはイカン!ってじっちゃが言ってた

796 :デフォルトの名無しさん:2011/07/13(水) 21:39:53.60
>>790みたいなアホって有害すぎるだろw

797 :699:2011/07/13(水) 22:11:24.50
>>723
おつです。
どうやら速度的にはa[y][x]か*(y_table[y] + x)が速いみたいですね。
>>732のコードも気になるので、
>>723の横幅を320から512に変更したint a[512 * 240] の配列に対して、
a[(y << 9) + x]でアクセスする場合も、追記おねがいします!

フーリエ変換は知らないけど、jpgの圧縮の原理にも関係してるみたいです。jpgデコーダー組んだこと無いので詳しくは知りませんが、
たとえば、簡単の為に(RGBそれぞれではなく)、1次元の画像データの各ピクセルの明度だけの場合で考えてみると、
たとえば a[8] = {0.45, 0.46, 3.47, 0.48, 0.49, 0.50, 0.51, 0.52};っていう8ピクセル分の明度データがあったとして、
float w = 3.14 / 8;
float f(float* A, int k){
    s = 0;
    for(i=0; i<8; i++) {
        s += A[i] * cos( w * (i+(1/2)) * (k+(1/2)) );
    }
    return s
}
によって b[0] = f(a, 0); b[1] = f(a, 1); ... b[7] = f(a, 7);とした結果が
b[8] = {2.4, -0.9, 0.5, -0.4, 0.3, -0.29, 0.27, -0.26}; という値になるのですが、
この f() を通した結果は、大抵の画像で、最初ほど数字が大きくて、後ろに行くほど数字が小さいというデータになるので、
後ろの数字ほど、記録に使うビット数(桁数や精度)を少なくできるので、これを利用してデータ圧縮してるそうです。

このb[]を再び a[0] = f(b, 0); a[1] = f(b, 1); ... a[7] = f(b, 7);とすれば、元の明度データ(と似た値)が得られます。
このb[]に記録する際の、精度の落とし具合が、圧縮率と再現度に反比例して影響してるのだと思います。
jpgエンコーダー組んだこと無いのでよく知りませんが。
誰か簡単なjpgエンコーダー書いてくれるとおもしろいです。よろです。(独自フォーマットのなんちゃってjpgや、機能限定的でもいいので)

798 :699:2011/07/13(水) 22:13:23.69
まちがいた
>>723じゃなくて>>734に対しておつですた

799 :デフォルトの名無しさん:2011/07/14(木) 02:31:43.91
>>797

こんな感じでポインタ配列が一番速いですね

CPUはi7か何かなんでしょうね
ポインタ配列がL3に乗ってしまってるんじゃないでしょうか

800 :デフォルトの名無しさん:2011/07/14(木) 02:32:07.35
あ、ごめん、URL張り忘れた

http://ideone.com/DH4Pm

801 :デフォルトの名無しさん:2011/07/14(木) 06:17:12.78
>>798
>>734は思い切りつっこみ入れられてるようだが鵜呑みにしちゃうのか?

802 :デフォルトの名無しさん:2011/07/14(木) 06:32:21.72
>>800
キャッシュのせいだろうね
http://ideone.com/4e0l2
こうすると他のも速くなるし

803 :デフォルトの名無しさん:2011/07/14(木) 16:02:18.04
c言語勉強してみたいんだけど
C言語できたら何が作れる?
彼女くらいは作れるの?

804 :デフォルトの名無しさん:2011/07/14(木) 16:07:32.77
3号くらいまでいける

805 :デフォルトの名無しさん:2011/07/14(木) 16:38:00.74
C言語を彼女にすれば宜しい

806 :デフォルトの名無しさん:2011/07/14(木) 16:44:30.85
>>803
お前が教えた言葉を覚えてどんどん会話がうまくなるAI作ればいいよ

807 :デフォルトの名無しさん:2011/07/14(木) 16:56:27.76
対人恐怖症の俺が言葉を教えても
成長せんだろうな

808 :デフォルトの名無しさん:2011/07/14(木) 20:18:07.59
俺も人間相手の商売はムリだと思ってプログラマ選んだのに、
なぜか、いつの間にか後輩の世話をさせられ、顧客との折衝させられ、
ドキュメンテーションと生意気な後輩の成果物のチェック作業ばかり・・・
3年以上コーディングしてねぇ・・・なんでこうなるんだorz

809 :デフォルトの名無しさん:2011/07/14(木) 20:40:24.05
やあ先輩明日もいろいろ見てもらいますよ
一度確認してもらったらもうあとは先輩の責任ですからね

810 :デフォルトの名無しさん:2011/07/14(木) 21:07:53.21
そんなこといって、先輩先輩と懐いてくる爆乳ツインテの後輩なら文句ないんだろ。


811 :デフォルトの名無しさん:2011/07/14(木) 22:44:43.23
ポインタを使う関数にて。
プロトタイプ宣言のとき引数は省略してもいいらしいですが*も省略していいんですか?

812 :デフォルトの名無しさん:2011/07/14(木) 22:51:22.29
だめです

813 :デフォルトの名無しさん:2011/07/14(木) 22:53:37.86
プログラム書けるバク乳ツインテ美少女なんて3次元に存在するんでしょうか?

814 :デフォルトの名無しさん:2011/07/14(木) 23:00:28.27
ダメです

815 :デフォルトの名無しさん:2011/07/14(木) 23:01:54.87
今プログラミングしてるんですがわからない事あるので聞いていいですか?

816 :デフォルトの名無しさん:2011/07/14(木) 23:07:24.61
C言語に関することならどうぞ

817 :デフォルトの名無しさん:2011/07/14(木) 23:09:27.21
int a ; /*回答格納用*/
int b ,c ; /*問題生成用*/
int t=1;
int h=2;
int k=3;
int w=4;
int i = t,h,k,w ;
char* enzasi=("+","-","*","/");
char t='+'; /*式の+-/*の役目*/
char h='-'; /*同*/
char k='*'; /*同*/
char w='/'; /*同*/


これをコンパイルすると複数宣言でエラーが出るんですがどうやったら治りますか?

818 :デフォルトの名無しさん:2011/07/14(木) 23:19:22.80
t, h, k, w が 2 つあってどっちかわからんくなるからエラー
別の名前に変える

819 :デフォルトの名無しさん:2011/07/14(木) 23:21:42.61
h, k, wは3つだ

820 :デフォルトの名無しさん:2011/07/14(木) 23:24:18.27
w, k, t, k

821 :デフォルトの名無しさん:2011/07/14(木) 23:26:42.66
b, k, t, r

822 :デフォルトの名無しさん:2011/07/14(木) 23:29:11.22
つーかそもそも1文字の変数なんて使うな。
他人はおろか自分でもその内何がどの値を持ってるか混乱するのがオチだ。
そしてちゃんと意味のある単語をそれぞれに付ければ自然と重複も解消する。

823 :デフォルトの名無しさん:2011/07/15(金) 00:00:58.11
ローカルなら1文字で充分。
Unixの文化ってのはそういうものだよ。
むしろ昨今のやたらと長い識別子の方が有害だわ。

824 :デフォルトの名無しさん:2011/07/15(金) 00:01:57.19
int i = 0;

825 :デフォルトの名無しさん:2011/07/15(金) 00:02:49.77
学生時代に情報処理の大会みたいなものに出た事があるんだけど
そこでのプログラムが一文字変数のオンパレードで「難しくする所違うだろ!」って突っ込みたくなった

826 :デフォルトの名無しさん:2011/07/15(金) 00:13:24.98
for(loopCounter=0;loopCounter<=loopLimit;loopCounter++) {

827 :デフォルトの名無しさん:2011/07/15(金) 00:16:38.48
>>826
この手の自己満足には付き合ってられないよなw

828 :デフォルトの名無しさん:2011/07/15(金) 00:24:32.21
蟹はんの作法によると
「グローバル変数は分かりやすくした方がいいけど、ローカル変数なら短くてもよくね?」
って書いてある

829 :デフォルトの名無しさん:2011/07/15(金) 00:26:56.12
そのとおりだよな。
なんでも長い名前にしたりする前に、
変数を整理したりスコープを適切にしたり、
そっちに注力しる、と。

830 :デフォルトの名無しさん:2011/07/15(金) 00:43:32.15
短くてもいいけど、iとかの慣例以外で1文字はちょっと気が引けるなあ
まあスコープ絞って宣言にコメントつけておけば意味は分かるしいいのか

831 :デフォルトの名無しさん:2011/07/15(金) 00:54:52.81
変数名を長い名前で説明的にすれば、可読性が向上すると言ってる奴は
どいつもこいつも大嘘つき野郎だと思う

832 :デフォルトの名無しさん:2011/07/15(金) 00:55:50.80
>>831
だなw 俺も実はかつて陥ったことがあるからわかるw
工夫した変数名でカバーできる? そーいう問題じゃなかった。

833 :デフォルトの名無しさん:2011/07/15(金) 01:07:55.15
可読性を考えないで周囲に迷惑ばかりかけてるバカは
大抵>>826のように空白すらロクに使えないからな。
可読性を語ること自体おこがましいレベルの傲慢さ。

834 :デフォルトの名無しさん:2011/07/15(金) 08:08:37.37
だったらコメントも付けるなよ
長い変数名にしてコメントなしで分かる方がマシ

835 :デフォルトの名無しさん:2011/07/15(金) 08:39:53.75
ローカルスコープの変数名は短くして、
コメントにはコードを補足する情報
(例えば、使用するアルゴリズムが載ってる論文とか)
を書く俺に死角は無かった

836 :デフォルトの名無しさん:2011/07/15(金) 08:56:17.89
それが普通

837 :デフォルトの名無しさん:2011/07/15(金) 15:42:58.39
>>833
空白入れれば見やすくなるとか そういう次元超えてるだろ

838 :デフォルトの名無しさん:2011/07/15(金) 15:44:04.64
寿命が長い変数にはきっちりした名前をつけるべきだが
1画面以内で役目を終えるような短命な変数には
iとかaとかpとか適当につけてるな

839 :デフォルトの名無しさん:2011/07/15(金) 17:23:30.30
仕事でプログラム書いたことってないんだけど
やっぱ仕事でってなると
変数名やら関数名、コメントの書き方まで
しっかりテンプレみたいなのがあるのか?

840 :デフォルトの名無しさん:2011/07/15(金) 17:27:14.90
先輩の派遣先では数字の直接記述禁止だったと言ってた。
#define 登録しろだってさ。

自分が派遣された先ではデバッガーとして派遣されたからそういうルールは指導されなかった。

841 :デフォルトの名無しさん:2011/07/15(金) 17:29:32.36
>>840
まあ、常識だしな。

842 :デフォルトの名無しさん:2011/07/15(金) 17:56:00.90
テンプレとかいってるところは、どうかと

843 :デフォルトの名無しさん:2011/07/15(金) 18:42:44.65
コーディング規約はあんましローカルなところまで徹底すると損する
オーバーヘッドみたいなもんかな


844 :デフォルトの名無しさん:2011/07/15(金) 18:52:23.96
>>839
Cじゃないけど「Google C++スタイルガイド」でググると
仕事で使うような規約が見られるよ

845 :デフォルトの名無しさん:2011/07/15(金) 19:42:48.08
おまえらC言語のハナシしかしないのな

846 :デフォルトの名無しさん:2011/07/15(金) 19:44:18.02
そんならCOBOLの話でもしようか

847 :デフォルトの名無しさん:2011/07/15(金) 20:20:47.75
そんならPrologの話でもしようか

848 : 忍法帖【Lv=25,xxxPT】 :2011/07/15(金) 20:23:37.19
>>841
腐ってやがる。

849 :デフォルトの名無しさん:2011/07/15(金) 20:31:03.64
>>840
マジックナンバーなんかあるプロジェクトに出くわしたら、早めに逃げるが勝ち

850 :デフォルトの名無しさん:2011/07/15(金) 20:33:49.67
コードの中に数字がいきなり出てきても、意味がわからない

851 :デフォルトの名無しさん:2011/07/15(金) 20:36:25.80
#define ZERO 0
でいろんなとこでいろんな意味の0として使うのはまったく意味無いよな
後で変えようにも変えられない

852 :デフォルトの名無しさん:2011/07/15(金) 20:45:59.69
cygwinダウンロードしたんだけど
errnoってどんな機能なんですか?
ヘッダファイルとして使ってるプログラムあるけど
良く分かりません。

853 :デフォルトの名無しさん:2011/07/15(金) 20:51:58.13
ヘッダファイルってわかってんならヘッダファイル見ろよって突っ込まれるぜ
エラー情報を管理するグローバル変数持ってて
その他の関数が吐いたエラーに応じて値が変わるから
エラー管理が容易になるとかじゃね?

854 :デフォルトの名無しさん:2011/07/15(金) 21:02:22.66
>>853
見たけど

#ifndef #endifとかってなんですか?
入門書のってないです。

855 :デフォルトの名無しさん:2011/07/15(金) 21:05:49.30
ダメな入門書だなあ

856 :デフォルトの名無しさん:2011/07/15(金) 21:20:02.81
>>850
頭悪すぎだろ

857 :デフォルトの名無しさん:2011/07/15(金) 21:27:44.61
#define ZERO 0
int main(){
return ZERO;
}


858 :デフォルトの名無しさん:2011/07/15(金) 21:52:14.14
#define ZERO_NO_TSUKAIMA NEVER_END

859 :デフォルトの名無しさん:2011/07/15(金) 22:10:22.51
>>852

ttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/errno.3.html

860 :デフォルトの名無しさん:2011/07/16(土) 01:25:09.35
struct TT_VECTOR {
float x, y, z, pad;
} __attribute__((aligned(16)));

void tt_inner_cube_vertex(
struct TT_VECTOR* dst,
struct TT_VECTOR* src,
struct TT_VECTOR* min_cube,
struct TT_VECTOR* max_cube
)
{
if(src->x < min_cube->x) {dst->x = min_cube->x;} else {dst->x = src->x;}

if(src->y < min_cube->y) {dst->y = min_cube->y;} else {dst->y = src->y;}

if(src->z < min_cube->z) {dst->z = min_cube->z;} else {dst->z = src->z;}


if(dst->x > max_cube->x) {dst->x = max_cube->x;}

if(dst->y > max_cube->y) {dst->y = max_cube->y;}

if(dst->z > max_cube->z) {dst->z = max_cube->z;}
}

頂点XYZが、キューブのXYZ最小値と最大値の範囲外の場合は、その境界位置までアジャストする関数。
よくあるmin,maxテストのようなもの。それにアジャスト機能を追加したもの。

861 :860:2011/07/16(土) 01:31:59.79
ttp://www1.icnet.ne.jp/nsystem/simd_tobira/index.html
このページを眺めつつ
SSEに置き換える方法を考えてたら、おもしろいことになった。

#define TT_INNER_CUBE_VERTEX(dst, src, min_cube, max_cube) { \
__asm__ volatile( \
"movaps (%1), %%xmm0;" \
"maxps (%2), %%xmm0;" \
"minps (%3), %%xmm0;" \
"movaps %%xmm0, (%0);" \
: \
:"r"((dst)), "r"((src)), "r"((min_cube)), "r"((max_cube)) \
:"memory" \
); \
}

たった4行で同じ処理が書けた
SSEスゲー!!

862 :デフォルトの名無しさん:2011/07/16(土) 01:58:53.77
#define erono errno

863 :デフォルトの名無しさん:2011/07/16(土) 11:53:41.14
>>861
MMX、SSEって、そーゆーことだったのかwww なんか使いたくなったw

864 :デフォルトの名無しさん:2011/07/16(土) 12:48:56.89
C言語でMacOSXのCocoaみたいなグラフィカルな
UI配置とかウインドウとかメニューつけたりするプログラミングできるのってなに?

win32っていうやつみたら これ自分で全部ウインドウつくったりメニューコードかいたり
すごいめんどくさそうなんだけど

xcodeみたいでCocoaみたいでObjective-cみたいな言語はウインドウズにないの?おしえてください

865 :デフォルトの名無しさん:2011/07/16(土) 13:09:23.36
C++Builderで、

for( int i = 0; i < N; i++ )
{
  for( int i = 0; i < M; i++ )
  {
    B[ i ] = A[ i ]
  }
}

って書くと、内側のiが使われるんですが、
これってC++の規格レベルで規定されていることなんでしょうか??

866 :デフォルトの名無しさん:2011/07/16(土) 13:14:46.85
うそこけ、コンパイルエラーじゃ

で、B と A のどちらに外側の i を使って欲しかったんだ?
これを見る限り手がかりは全くないが

867 :デフォルトの名無しさん:2011/07/16(土) 13:21:52.18
>>864
c#とかvbじゃ?


868 :デフォルトの名無しさん:2011/07/16(土) 13:30:12.61
>>864
Java

869 : 忍法帖【Lv=26,xxxPT】 :2011/07/16(土) 13:41:32.95
>>865
お間抜けなボクちゃんには難しいかもしれないが、スレ違いだ。、

870 :865:2011/07/16(土) 13:53:34.20
>>866
人様のコードなのですが、意味的にはA、Bのどちらにも内側のiが使われるのが正しいので、大丈夫なのですが、
ちょっと怖い記述だなぁ、と思いまして・・・
やっぱりコンパイル通るのおかしいですよね・・・

871 :デフォルトの名無しさん:2011/07/16(土) 14:12:42.14
>>870
おかしいのはお前の頭だから消えろ

872 :デフォルトの名無しさん:2011/07/16(土) 14:13:33.29
セミコロンがないことを除けば当たり前のコードだ。
cでもc++でも問題ない。

873 :デフォルトの名無しさん:2011/07/16(土) 14:31:25.26
スコープが内側のを使うに決まってる

874 :デフォルトの名無しさん:2011/07/16(土) 14:32:31.10
http://ideone.com/i5rSB
こんな感じ

875 :デフォルトの名無しさん:2011/07/16(土) 14:38:37.17
>874
> 8:for(i=0; i<=5; i++) {

ソース換わってるやん。


876 :デフォルトの名無しさん:2011/07/16(土) 14:42:47.21
>>875
すまん、良く見てなかった
人様のコードにこんな処理が出てくる事は無いわな

877 :デフォルトの名無しさん:2011/07/16(土) 14:53:30.34
language: C (gcc-4.3.4)
http://ideone.com/oyGai

language: C99 strict (gcc-4.3.4)
http://ideone.com/3tLqM

878 :デフォルトの名無しさん:2011/07/16(土) 14:53:32.05
>>865
同名の変数があった場合、内側を優先するのは決まってる

879 :864:2011/07/16(土) 14:57:43.22

#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
}
};
}
これってC#の言語?
C++?どっち?

MFCっていうのやろうと思いました xcodeみたいだったしVisucalC++の
よくわからない言語が 
MFCってC使うの?それともC++?それともC#?どれ・・・あいまいにしか乗ってない

880 :デフォルトの名無しさん:2011/07/16(土) 15:00:07.40
>>879
xcodeみたいなのは.netだよ
mfcはコードガリガリ


881 :864:2011/07/16(土) 15:03:05.99
>>880
いまVisual C++2010のExpress使ってるんだけど
Xcodeみたいじゃない?
これコードガリガリなの?
なんかちゃんと ボタン配置とかウインドウのサイズをマウスでかえられるけど

.netのまた探すの大変だから

どれやればいい・・・なんか開発ソフトとか使う言語がわかればすぐできる
.netのどれ?.netを使うにはVisualC++2010?

882 :デフォルトの名無しさん:2011/07/16(土) 15:07:58.44
>>881
それが.netだよ。。。
mfcは有料版にしか付いてない


883 :デフォルトの名無しさん:2011/07/16(土) 15:10:01.23
>>864
win32 程度で「面倒臭そう」なら、おまえ GUI には向いてないよ
自由度が高いほどパラメータ指定が増えるのは必然で
定型的なプログラムならわざわざ C で書く必要性がない

MFC は C++ だが C++ として変則的な使い方をしまくっている

884 :864:2011/07/16(土) 15:15:19.71
あ、よくみたら.NETだったおy
ありがとう

.NETでやってみる

うるせーーかす

あほか
win32どうみてもめんどくせーよ
メニューとか全部コードでかくんだろアホくさ

885 :デフォルトの名無しさん:2011/07/16(土) 15:17:01.45
>>884
適当なライブラリ使えばいいだろ

886 :デフォルトの名無しさん:2011/07/16(土) 15:21:17.86
>>884
は? メニューはリソースで作るんだが、アホなの? 死ぬの?

887 : ◆QZaw55cn4c :2011/07/16(土) 15:47:00.83
>>886
それがメニューはコードからも記述できるのです。
http://wisdom.sakura.ne.jp/system/winapi/win32/win80.html

888 :864:2011/07/16(土) 15:47:46.05
PerlのオブジェクトやってたからすんなりC++わかる
すごいうれしい

889 :Perl忍者:2011/07/16(土) 15:48:38.31
>>886
わああ^^


は?メニューは資源で作るんだが、アホなの?死ぬの?

890 :デフォルトの名無しさん:2011/07/16(土) 15:49:08.08
>>887
ひっこんでろ。うんこ。

891 :Perl忍者:2011/07/16(土) 15:49:32.20
>>864

887みたいななやつかわいそう
わかるその気持ち

892 :864:2011/07/16(土) 15:50:17.11
ありがとう・・・Perl忍者さん
おかげで参考にしっ

893 :864:2011/07/16(土) 15:50:32.18
ます

894 :864:2011/07/16(土) 15:55:40.83
メニューはコードからも記述できるんです
ってことは

コード以外でやるほうほうあるの?win32
なんかマウスでウインドウ出したりできないの?
>それがメニューはコードからも記述できるのです。

これおしえて メニューはメニュー配置の部品みたいなのドロップするとかあるの?おしえて
それは.NETでやるの?

895 :デフォルトの名無しさん:2011/07/16(土) 15:57:29.23
あるに決まってるだろ。少しは自分で調べろカス!

896 :デフォルトの名無しさん:2011/07/16(土) 16:01:09.36
>>894
expressにはリソースエディタ付いてないのか?


897 :デフォルトの名無しさん:2011/07/16(土) 16:03:18.31
C++にはついてない。C#は知らんけどついてるなら流用されちゃうからついてないんだろう。

898 :デフォルトの名無しさん:2011/07/16(土) 16:03:23.62
少なくとも express 2005 辺りにはリソースエディタ付いてないよ
今は知らない。

899 :864:2011/07/16(土) 16:06:08.02
ツールボックスならあるよ
それでウインドウとかボタンとかドロップできる
Xcodeみたいに

だけどそれ.NETじゃないの????

win32だとコードかくみたいだけど(SDK)

うわああめんどくさい

かすみたい
C言語

900 :デフォルトの名無しさん:2011/07/16(土) 16:14:37.22
>>890
いやです。いずれモリタポスレに誘導をかけまくりますので、そのときはよろしく。

901 :864:2011/07/16(土) 16:16:11.22
>>900
それやるとどういう効果あるの?(^^

902 :デフォルトの名無しさん:2011/07/16(土) 16:20:29.86
確かに誰も行きたがるわけがないよな

903 :デフォルトの名無しさん:2011/07/16(土) 16:24:20.02
Introduction to Visual C++ 2008 Express Edition
http://msdn.microsoft.com/ja-jp/beginner/bb964629(en-us).aspx

904 :デフォルトの名無しさん:2011/07/16(土) 17:49:23.13
リソースも中身は全部コードだろ。

905 :デフォルトの名無しさん:2011/07/16(土) 17:59:41.15
>>904
リソースコンパイラ通してバイナリになるぞ


906 :デフォルトの名無しさん:2011/07/16(土) 18:21:17.23
ちょっと、あんたがた、リソースをなんだと思ってんのさ?

907 :デフォルトの名無しさん:2011/07/16(土) 18:23:06.71
リソースは理想っす

908 :デフォルトの名無しさん:2011/07/16(土) 19:07:19.77
>>906
使いまわせる資源。かな
英語版と日本語版作る時、出来上がったファイルに.res(バイナリにしたリソースファイル)を再リンクさせればおk


909 :865:2011/07/16(土) 20:03:38.96
>>872-873
>>877-878
分かりました。
ありがとうございましたm(_ _)m

910 :デフォルトの名無しさん:2011/07/16(土) 20:35:14.10
一つ言わせてもらおう。
ここはcスレだ。

911 :デフォルトの名無しさん:2011/07/16(土) 20:41:57.79
チゲーよ
なに独占しようとしてんだカス

912 :デフォルトの名無しさん:2011/07/16(土) 21:12:10.76
「メニューは資源で作る」でいいじゃん
バカ1匹が仕事なくすだけだからw

913 :デフォルトの名無しさん:2011/07/16(土) 21:15:01.45
ここまで突き抜けてるとむしろ素晴らしいな

914 :デフォルトの名無しさん:2011/07/17(日) 01:22:01.09
部屋に蜂が侵入してきました
ちょっと高いところにとまったので、ティッシュでくるんで外に逃がしてやろうと
キャスター付きの椅子に登って捕まえたらバランスを崩し、右腕の肘に近い所を
強打しました
蜂は無事逃がしましたが、痣になってて痛いんですけどどうしたらいいでしょうか?

915 :デフォルトの名無しさん:2011/07/17(日) 01:26:17.23
ワロタw

916 :デフォルトの名無しさん:2011/07/17(日) 01:32:08.36
肘が痔になるってどういう状況だよ

917 : 【東電 68.5 %】 忍法帖【Lv=26,xxxPT】 :2011/07/17(日) 01:33:31.24
あーざーだからー

918 :デフォルトの名無しさん:2011/07/17(日) 01:34:26.77
>>914
それはBのスレで聞くと良いんじゃないかな
ここはCのスレだからね

919 :デフォルトの名無しさん:2011/07/17(日) 02:06:51.02
>>918
Bee(蜂)か

誰がうまい事言えと(ry


920 :デフォルトの名無しさん:2011/07/17(日) 13:09:30.01
18KB(1要素2Byte)ほどのデータ配列を一つずつ読み出すのと、
まとめて読み出すのでは全然速度が違いました。

具体的には、

( HDD → 2Byte → エンディアン変換 → メモリ上配列 ) × 要素数

よりも

HDD → 18KB → メモリ上配列 → ( エンディアン変換 × 要素数 )

が遥かに速かったです。
これはHDDにアクセスする際、最初のオーバーヘッドが大きいためなんでしょうか??

921 :デフォルトの名無しさん:2011/07/17(日) 13:17:07.04
普通にやるとバッファリングが効くからそう変わらないような気がするんだが
何使って読み込んだんだ

922 :デフォルトの名無しさん:2011/07/17(日) 13:21:06.00
そろそろHDDの容量が無限大になるそうです
C標準だけでできる巨大ファイルの扱い方を教えてください

923 :920:2011/07/17(日) 13:21:34.38
>>921
win32apiのReadFile関数を使いました。

924 : 忍法帖【Lv=27,xxxPT】 :2011/07/17(日) 15:12:30.33
>>923
ReadFile()を2バイトずつ使ったのならそりゃ遅くて当然。
APIを使う必然性がないなら標準関数を使うのが無難。

925 :デフォルトの名無しさん:2011/07/17(日) 15:14:52.98
>>922
それをまともに扱えるosと処理系があれば、普通に標準関数で充分。

926 :デフォルトの名無しさん:2011/07/17(日) 17:17:52.10
>>924
Windowsの場合、標準関数(freadの事か?)はReadFileを使って実装されてるんじゃないか?

927 :デフォルトの名無しさん:2011/07/17(日) 17:23:48.46
>>926
そっちはそっちでバッファ持ってるし

928 :デフォルトの名無しさん:2011/07/17(日) 17:33:00.78
>>927
やってみりゃ分かるんだろうが、面倒だからやらないけど、
ReadFileの2byteずつ読みが遅いとして、その速度改善のアプローチとしてfreadに
するってのはどうなの?

929 :デフォルトの名無しさん:2011/07/17(日) 17:35:12.60
え?別に普通じゃないの?
何か問題ある?

930 :デフォルトの名無しさん:2011/07/17(日) 17:37:53.83
ファイルストリームのバッファって使う価値あんのか?
エラーチェックのオーバーヘッドを考えれば、どのみち自前のバッファ用意するハメになると思うんだけど

931 :デフォルトの名無しさん:2011/07/17(日) 17:42:37.42
>>929
freadの方がReadFileよりバッファの使い方がうまいとかで、速くなるのは確定なの?
それとも速度に影響する別のファクターがあって(パラメータの数の違いとか、
APIを呼び出す時のシステムコールが遅いとか)そういう理由?

速くなるわけを教えてくれ

932 :デフォルトの名無しさん:2011/07/17(日) 17:50:19.60
私、幼女だけど
もっと(言葉を)優しくしてほしいな・・・///

933 :デフォルトの名無しさん:2011/07/17(日) 18:16:23.49
freadは最終的にReadFileを呼ぶ
ということと
バッファリングしてる
という2つを考えたら、バッファで間に合う範囲では
ReadFileを呼ばずに済むと言うことにならんか?

そして、>>920でもReadFileの呼び出し回数が違うだろう

934 :デフォルトの名無しさん:2011/07/17(日) 18:18:31.64
>>930
そうだよ
一番効率がいいのは自前のバッファ

935 :デフォルトの名無しさん:2011/07/17(日) 18:42:34.54
>>923
freadにするだけで速くなるそうだ。
試して結果報告よろしく

936 :デフォルトの名無しさん:2011/07/17(日) 18:50:02.92
I/O回数を確実に減らすなら自前で処理

937 :920:2011/07/17(日) 21:07:35.05
みなさん、ありがとうございました。

>>935
環境は会社にあるので、明後日、試して報告します。

938 :デフォルトの名無しさん:2011/07/17(日) 21:23:36.26
巨大ファイルのMD5を出すのに、マルチスレッドを使って本処理と並列してバッファに
読み込むルーチンを作ったことあるな

939 :デフォルトの名無しさん:2011/07/17(日) 21:26:32.95
で?

940 :デフォルトの名無しさん:2011/07/17(日) 21:35:42.77
で?じゃねえよ
そんなんで勝ち誇ったつもりになるな

941 :デフォルトの名無しさん:2011/07/17(日) 21:43:37.67
で?で合ってるだろw

942 :デフォルトの名無しさん:2011/07/17(日) 22:39:49.51
>>938
たいして効果なかったろ?

943 :デフォルトの名無しさん:2011/07/18(月) 01:28:59.79
>>938
いまどきだとOSが先行して読んでくれるから
あんまり効果ないんじゃない?

944 :デフォルトの名無しさん:2011/07/18(月) 02:12:32.69
りんごで大学のC言語やってるんだが、正直限界だ‥‥
なぜ言う事聞いてくれないんだww馬鹿めw

945 :デフォルトの名無しさん:2011/07/18(月) 02:17:03.66
ワタシハマチガッテイマセン
アナタノシジガマチガッテイルノデス

946 :デフォルトの名無しさん:2011/07/18(月) 02:22:13.85
プログラムは思った通りに動かない。書いた通りに動く。

947 :デフォルトの名無しさん:2011/07/18(月) 03:28:21.54
>>944
お前が馬鹿だよw

948 : 忍法帖【Lv=27,xxxPT】 :2011/07/18(月) 08:06:04.17
>>944
先ずは日本語の勉強をどうぞ。

949 :デフォルトの名無しさん:2011/07/18(月) 08:26:36.15
>>944
どんまい。あせらずに何が起こっているかを確実に把握してから、ひとつひとつ潰していくしかないです。
まずは要所に printf() を入れるのが吉。

950 :デフォルトの名無しさん:2011/07/18(月) 08:30:16.48
×どんまい(=気にすんな)
○もあけあふる(=もっと注意しろ)

951 :デフォルトの名無しさん:2011/07/18(月) 12:21:53.83
日本人ってほんと手抜き好きだよな
どんとまいんどが、どんまいになるって
手抜き大好きだから、ぽぽぽーんの原発事故やセシウム味付き肉販売起だろな

952 :デフォルトの名無しさん:2011/07/18(月) 12:32:37.74
>>951
Never mind!

953 :デフォルトの名無しさん:2011/07/18(月) 12:46:56.46
昔ながらの職人気質はどこにいったのやら
コレがない日本人なんて豚以下だわ

954 :デフォルトの名無しさん:2011/07/18(月) 12:51:20.27
ssig33=小池陸

http://twitter.com/ssig33

真性キチガイのRuby使い(rails)

Rubykaigiのトイレで、親指の腐った肉を洗い流すなど血をばらまくなど
衛生害テロをやったキチガイ
奇声をあげるなどキチガイ行為
挙句の果てに、Perl使いのOと大喧嘩して殴りあいになって、警備員に追い出されるざま
Perl使いにパッシング浴びて退場
そのあとツイッターで反省無し
こいつRubykaigi一生立ち入り禁止だってさ


955 :デフォルトの名無しさん:2011/07/18(月) 12:52:25.23
わざわざ英語からパクるのも不思議だが

956 :デフォルトの名無しさん:2011/07/18(月) 12:53:11.23
サラリーマン根性むき出しで何もモノ作りの意欲がなくて会社でネットサーフィンだけして帰る元請社員を全員クビにしろよ
安定だけ求めて何もやりたいことないやつが大事に保護されてるからモノの品質が下がって日本のゲームはつまらなくなったし
家電製品で韓国に負けるんだ。メイドインジャパンの品質が下がったのは全部こいつらの責任
良いものを作りたいなんてこれっぽっちも思ってなくて楽すること他人に面倒を押し付けることしか考えない
大体会社来てソリティアだけして帰る毎日になんのやりがいがあるんだ生きてる意味あるのか
そもそも正社員の人件費負担が重過ぎて利益が出せないなら正社員の待遇を下げるのか倒産するのが正解だろ
それをやらずに偽装請負特定派遣で若者使い捨てで人件費カットして技術の蓄積を放棄して日本の技術レベルを落として
自分達は組合がうるさいからとか言ってバブル期の待遇を維持したままとか人道的におかしいだろ日本の大手は全部倒産すべき

957 :デフォルトの名無しさん:2011/07/18(月) 12:54:23.73
文句あるなら独立しろ


958 :デフォルトの名無しさん:2011/07/18(月) 18:03:20.57
ポインタの使いどころを教えてくれ下さい


959 :デフォルトの名無しさん:2011/07/18(月) 18:07:41.81
まいけるまだ生きてるのかな

960 :デフォルトの名無しさん:2011/07/18(月) 18:25:40.55
× ポインタ
○ ポインター


961 :デフォルトの名無しさん:2011/07/18(月) 18:27:15.73
>958

>538

962 :デフォルトの名無しさん:2011/07/18(月) 19:21:27.05
みなさん、関数ポインタって使っています?
関数名で使えることは勉強で知っているのですが、
一度も使ったことがないです。
どんなところで使うんでしょうか。

963 :デフォルトの名無しさん:2011/07/18(月) 19:25:56.41
VC++やるまで使ったこと無かったな(コールバック関数)。
ttp://e-words.jp/w/E382B3E383BCE383ABE38390E38383E382AFE996A2E695B0.html

大学のC言語の授業でqsort()関数の時にもつかったけど、
あの時は初心者レベルだったのでわけわからんかった。
ttp://www.geocities.jp/ky_webid/c/061.html


964 :デフォルトの名無しさん:2011/07/18(月) 19:26:49.77
>>962
ソートとかスレッドとかシグナルとかコールバックとか状態遷移とか、色んな所で必要になるよ

965 : ◆QZaw55cn4c :2011/07/18(月) 19:28:52.41
>>962
問題 http://hibari.2ch.net/test/read.cgi/tech/1307166756/543 に対して、
http://hibari.2ch.net/test/read.cgi/tech/1307166756/601
http://hibari.2ch.net/test/read.cgi/tech/1307166756/607
などで効果的に使用されています。



966 :デフォルトの名無しさん:2011/07/18(月) 19:53:47.38
>>965
落ちてる

967 :デフォルトの名無しさん:2011/07/18(月) 19:54:21.08
ほんとQはつかえねぇな

968 :デフォルトの名無しさん:2011/07/18(月) 21:39:56.29
>>962
printf("aho");

これだけでも printf へのポインタを使っている
・・・こう言うとポインタ変数がどうのと言い出すアフォが湧くがそういうことじゃない

969 :デフォルトの名無しさん:2011/07/18(月) 22:36:59.66
入れた数字の高さ分「*」でピラミッド作るプログラム教えてお兄ちゃん

970 :デフォルトの名無しさん:2011/07/18(月) 22:52:32.22
>>969
main(){
int i,j,max=atoi(argv[1]);
for(i=0;i<max;i++){for(j=max;j>i;j--)printf(" ");for(j=0;j<i*2+1;j++)printf("*");printf("\n");}
}

971 :デフォルトの名無しさん:2011/07/19(火) 00:43:56.62
#include <stdio.h>
#include <time.h>

void main(void)
{
clock_t c1 = clock();
int i;
for(i = 0; i < 5000; i++){
printf("\r");
printf("Hello,World%d",i);
}
printf("%f秒かかりました。",(double)((clock() - c1) / CLOCKS_PER_SEC));
}

これでHell,Worldを表示させるのにかかった時間を測りたいのですが、毎回0.000秒になってしまうのですがどうしたらいいですか。

972 :デフォルトの名無しさん:2011/07/19(火) 00:45:39.20
フラッシュしてから測れば?

973 :938:2011/07/19(火) 01:02:46.07
>>942-943
処理時間がおよそ 2 分の 1 になったよ
そのままやると HDD のアクセスランプが付いていない時間があったのが、対策後
付きっぱなしになった
まあ Windows XP での結果だから、最新 OS とか SSD ではわからんけど

974 :デフォルトの名無しさん:2011/07/19(火) 01:02:58.45
>>971
整数で割算してからdoubleにキャストしても、小数点以下に0が付くだけだぞ。
そりゃ1秒以上かかってないと0になるよ。

975 :デフォルトの名無しさん:2011/07/19(火) 01:05:22.69
かっこつけるから・・・

976 :デフォルトの名無しさん:2011/07/19(火) 01:10:21.48
1秒以上かかる処理を教えてください。

977 :デフォルトの名無しさん:2011/07/19(火) 01:18:16.18
CLOCKS_PER_SECをdoubleにキャストすればいいじゃん

978 :デフォルトの名無しさん:2011/07/19(火) 01:21:41.46
>>977
なるほど。
今はPSPでカキコしてるんで明日やってみます。

979 :デフォルトの名無しさん:2011/07/19(火) 01:48:25.80
>>968
ポインターを理解できてない典型。

980 :デフォルトの名無しさん:2011/07/19(火) 06:46:12.46
>>979
おはよう、アフォ

981 :デフォルトの名無しさん:2011/07/19(火) 06:59:26.78
次スレ立てます

982 :デフォルトの名無しさん:2011/07/19(火) 07:00:36.86
次スレ立てました
C言語なら俺に聞け(入門編)Part 87
http://hibari.2ch.net/test/read.cgi/tech/1311026419/

983 :デフォルトの名無しさん:2011/07/19(火) 09:40:52.13
>>982
死ね


984 :デフォルトの名無しさん:2011/07/19(火) 10:12:29.91
Cね

985 :デフォルトの名無しさん:2011/07/19(火) 12:44:02.19
うめ

986 :デフォルトの名無しさん:2011/07/19(火) 15:09:13.30
>>980
マジで理解できてなかったのか……

987 :デフォルトの名無しさん:2011/07/19(火) 16:53:26.25
>>986
じゃ、ちょっと相手してやろうか
煽れそうなとこ煽ってみな

988 :デフォルトの名無しさん:2011/07/19(火) 17:04:06.08
ウルトラ警備隊の社用車

989 :デフォルトの名無しさん:2011/07/19(火) 17:05:56.33
> printf("aho");
「使っている」というのは普通「全ての場合で」が省略されていると解される。
ところが、使っていない場合なんか何通りも思いつく。
「使っている場合がある」ならば正しい。

990 :デフォルトの名無しさん:2011/07/19(火) 17:15:30.02
>>989
いや「全ての場合で」だよ?
何言ってんの、おたく

991 :デフォルトの名無しさん:2011/07/19(火) 17:16:08.89
printf("aho"); は
(*printf)("aho"); と同じ意味であり
printfへの関数ポインタを使ってる……なんてことだったりして

992 :デフォルトの名無しさん:2011/07/19(火) 17:18:12.84
>>991
962 で予言したとおりのが湧いてきたw

993 :デフォルトの名無しさん:2011/07/19(火) 17:18:23.55
全ての場合に↓これ含まれてる?
#define printf(s)

994 :デフォルトの名無しさん:2011/07/19(火) 17:20:00.87
>>993
いやー
printf("aho");

;
と展開されるマクロはあんまり見かけないな

995 :デフォルトの名無しさん:2011/07/19(火) 17:22:14.70
>>992
>>962ってそういう意味とは思えんが?お前エスパーじゃね?

996 :デフォルトの名無しさん:2011/07/19(火) 17:22:36.58
なんだ、ずいぶん甘い「全ての場合」だね。
ま、アマチュアさんだったらしょうがないか。ww

997 :デフォルトの名無しさん:2011/07/19(火) 17:23:54.39
>>995
「ポインタを理解できてない」と大きく出たアフォはおまえじゃなかったのか? 違ったら失礼

998 :デフォルトの名無しさん:2011/07/19(火) 17:24:25.92
アマチュアさんwww
底辺開発者くせぇ書き込み止めてもらえますか?www

999 :デフォルトの名無しさん:2011/07/19(火) 17:25:03.50
inline は処理系依存か…

inline 宣言されてても、ポインタとして取り扱う文言が出てきた場合
inline 化は抑止される んだっけ?

1000 :991:2011/07/19(火) 17:25:11.72
違うよ、全然違うよ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

213 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)