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

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

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

1 :デフォルトの名無しさん:2010/06/12(土) 19:36:52
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 65
http://pc12.2ch.net/test/read.cgi/tech/1274976173/
★過去スレ
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++室 Ver.73【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1274395127/

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

2 :デフォルトの名無しさん:2010/06/12(土) 19:57:41
1  #include <stdio.h>
2  static int foo(
3    int (*say)(char const*),
4    char const*message
5  ) {
6    return say(message);
7  }
8  static int bar(
9    int say(char const*),
10    char const*message) {
11    return say(message);
12  }
13  
14  static int baz(char const*message) {
15    return puts(message);
16  }
17  int main(void) {
18    foo(baz, "hello");
19    bar(baz, "world");
20    return 0;
21  }
9行目のsayは、C言語の規格としてはなんと呼ばれていますか
規格のセクションを引用して答えてください

一応、環境とか
cc -Wall -std=c89 -pedantic-errors -c foo.c
cc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)

3 :デフォルトの名無しさん:2010/06/12(土) 20:08:49
int (*say)(char const*)
じゃないの?

第一引数は関数のポインタです  って使い方っぽいのだが

4 :デフォルトの名無しさん:2010/06/13(日) 02:24:39
関数ポインタの必要性が分かりません。
ポインタ使わずに関数そのものをコールすれば済むことじゃないですか???

5 :デフォルトの名無しさん:2010/06/13(日) 02:30:11
配列に入れたときに力を発揮する。

switch(state)
{
  case TITLE:
    titile();
    break;
  case MENU:
    menu();
    break;
  case PLAY:
    play();
    break;
  (延々つづく)
}
================================
state = TITLE;

func[state];

6 :デフォルトの名無しさん:2010/06/13(日) 02:31:55
func[state]();の間違い

7 :デフォルトの名無しさん:2010/06/13(日) 02:34:44
>>5
たとえば
titile()とmenu()の関数の型が
int titile(void)
double menu(int)
とかになっていても

state = TITLE;
func[state];
これで実行させることができるの?
さすがに関数の型を合わさないといけないような気がしますが

8 :デフォルトの名無しさん:2010/06/13(日) 02:41:43
合わさないとダメだね

9 :デフォルトの名無しさん:2010/06/13(日) 02:44:39
そういうことやりたがるやつはむしろ素人だね。
使う利点なんて無いよ。


10 :デフォルトの名無しさん:2010/06/13(日) 02:48:28
昔は有効な書き方だったんだよ
今はコンパイラが勝手にテーブルにしたり、そこまで速度を気にしなくてもよくなったり

11 :デフォルトの名無しさん:2010/06/13(日) 02:51:55
じゃあ延々と条件分岐書いて無駄に残業してろ

12 :デフォルトの名無しさん:2010/06/13(日) 02:55:04
最初は5のようなコード組んでたが、あとで仕様変更が起こって
一部の関数の型を変えないといけなくなった。そうなったときに
こうなったとき修正がめっちゃやばそうなが気がします

13 :デフォルトの名無しさん:2010/06/13(日) 02:55:15
今でも究極のパフォーマンスを狙う用途では
速度を極力落とさずに分岐する手段として使うけどね。

14 :デフォルトの名無しさん:2010/06/13(日) 03:01:54
無いな。

15 :デフォルトの名無しさん:2010/06/13(日) 03:06:36
コールバック関数を使う利点はないと?

16 :デフォルトの名無しさん:2010/06/13(日) 03:27:04
とりあえず qsort 使ってみようぜ

17 :デフォルトの名無しさん:2010/06/13(日) 07:41:16
どうしてもstatic変数を排除出来ない式に成ったとき関数ポインタ使って回避する。

18 :デフォルトの名無しさん:2010/06/13(日) 08:48:28
>>13
今のCPUのようにパイプライン段数が深くなったCPUでは、関数ポインタの
呼び出しの時に一度パイプラインをフラッシュして投機実行も破棄してしま
うのでパフォーマンスは落ちる

C++の仮想関数も同じ仕組みを使っているから、パフォーマンスを最大限に
追求する場面では仮想関数はあまり使わない

http://gigo.retrogames.com/t_lab/chapter2.html

でも上記のようなURLを見るとあまり関係ないようである
実際Cのqsort()とC++のsort()ではsort()の方が速いが、それは関数ポインタ
による物ではなく、主にデータのコピー方法によるものである

qsort()はバイト単位でコピーするが、sort()はtemplateを使っているので
それぞれのデータ型に最も適した方法でコピーするから速いのである

19 :デフォルトの名無しさん:2010/06/13(日) 08:50:21
結局関数ポインタが遅いのは一度目の呼び出しでL2キャッシュに
乗る前がものすごく遅いだけで、一度L2キャッシュにテーブルが乗って
しまえば、以降の呼び出しは同じラインによって上書きされない限り
それほど気になるコストは掛からないと言える

20 :デフォルトの名無しさん:2010/06/13(日) 09:23:26
>>12
構造体を使わないからだよ

21 :デフォルトの名無しさん:2010/06/13(日) 10:51:21
>>9
つqsort()

22 :デフォルトの名無しさん:2010/06/13(日) 10:56:21
>>16

23 :デフォルトの名無しさん:2010/06/13(日) 11:03:22
不完全型へのポインタの一種でしかないんだが
見た目のグロさに過剰反応してしまう奴が後を絶たない

24 :デフォルトの名無しさん:2010/06/13(日) 13:02:15
早くC++まで勉強して競馬ゲー作りたいわ

25 :デフォルトの名無しさん:2010/06/13(日) 13:09:09
お前じゃ無理だろw

26 :デフォルトの名無しさん:2010/06/13(日) 13:21:39
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=9382

龍神録の9章を参考にコンフィグを作っています。
が、2P(player_flag==1)コンフィグ用の configpad.◯◯[1] に値が代入されません。
少々分かりづらくて恐縮ですが、対応策をお願いします。
また1P(player_flag==0)は問題なく動きます。

27 :デフォルトの名無しさん:2010/06/13(日) 13:28:56
>>25
それ言うためだけに書き込むのか・・・・・

28 :デフォルトの名無しさん:2010/06/13(日) 14:04:19
うん

29 :デフォルトの名無しさん:2010/06/13(日) 14:05:37
>>27
それ言うためだけに書き込むのか・・・・・

30 :デフォルトの名無しさん:2010/06/13(日) 14:28:56
>>29
それ言うためだけに書き込むのか・・・・・

31 :デフォルトの名無しさん:2010/06/13(日) 14:30:31
>>25みたいなカスのせいでスレが荒れるとか。煽りたいだけの中学生とか放っとけよ

32 :デフォルトの名無しさん:2010/06/13(日) 14:35:01
ってか本当いつもいつも一言多いヤツが何か居座ってるよなこのスレ。
マジで一言多いから自重してほしい

33 :デフォルトの名無しさん:2010/06/13(日) 14:38:49
それは違うな
煽るだけで何もできない奴と
余計な一言付ける奴とがいる

34 :デフォルトの名無しさん:2010/06/13(日) 14:40:09
ああ、確かに。
アドバイスはちゃんとしてるのに余計なこと付け加えるヤツと、>>25みたいなのが居るよな

35 :デフォルトの名無しさん:2010/06/13(日) 14:41:04
>>26
そのソースでない所にある、configpad.◯◯[1]に代入してる所でミスってるんじゃないかな
if(player_flag==0){return pad_2.key[Handle}
else if(player_flag==1){return pad_2.key[Handle}
どっちもpad_2.key返してるけど、ここも気になる

36 :デフォルトの名無しさん:2010/06/13(日) 14:45:15
>>27-34
お前らまとめてどっか行けよ

37 :デフォルトの名無しさん:2010/06/13(日) 14:46:42
>>36
ワロタw

38 :デフォルトの名無しさん:2010/06/13(日) 14:47:22
ワロタのは>>36>>25だと思ったから。違ったらごめんね

39 :デフォルトの名無しさん:2010/06/13(日) 14:52:09
間に26がいなかったら25からにしたかったのにw

40 :デフォルトの名無しさん:2010/06/13(日) 14:53:07
>>25を入れないとかワロタ

41 :デフォルトの名無しさん:2010/06/13(日) 14:54:25
>>36が指してるレスと>>36は同じじゃんw

42 :デフォルトの名無しさん:2010/06/13(日) 14:55:11
>>24-25,27-34,36-41
お前らいい加減にしろよ

43 :デフォルトの名無しさん:2010/06/13(日) 14:56:08
>>35
1pが動くときは

if(player_flag==0){return pad.key[Handle}
else if(player_flag==1){return pad_2.key[Handle}

こうなってます。確認のため一時的にpad_2にしましたすいません。


>そのソースでない所にある、configpad.◯◯[1]に代入してる所でミスってるんじゃないかな

その通りでした。
5時間くらいずっと悩んでましたがおかげさまでうまくいきました。
以下を書き足したらすんなりと・・・。

configpad.down[1]=0;
configpad.left[1]=1;
configpad.right[1]=2;
configpad.up[1]=3;
configpad.bom[1]=4;
configpad.shot[1]=5;
configpad.slow[1]=11;
configpad.start[1]=13;
configpad.change[1]=6;

ありがとうございました。

44 :デフォルトの名無しさん:2010/06/13(日) 14:56:30
>>24-25,27-34,36-41,42
お前ら(ry

馬鹿すぎw

45 :デフォルトの名無しさん:2010/06/13(日) 15:03:18
でかいのがでた

46 :デフォルトの名無しさん:2010/06/13(日) 15:12:36
>>1-45
お前らどっかいけよ

47 :デフォルトの名無しさん:2010/06/13(日) 15:14:08
>>47
お前どっかいけよ

48 :デフォルトの名無しさん:2010/06/13(日) 15:16:36
俺がどっか行くぜ!

49 :デフォルトの名無しさん:2010/06/13(日) 15:26:17
いやいや俺が

50 :デフォルトの名無しさん:2010/06/13(日) 15:28:40
どうぞどうぞ

51 :デフォルトの名無しさん:2010/06/13(日) 16:23:17
ダチョウ切りしてすんません、ニコニコのこれなんだが
http://www.nicovideo.jp/watch/nm6415611

自分でやったんだけど何故か除算が表示されないんです。↓
#include<stdio.h>
double tasizan(double x, double y);
double hikizan(double x, double y);
double kakezan(double x, double y);
double warizan(double x, double y);
int main(void){double a,b;scanf("%lf&lf",&a,&b);
printf("加算:%f\n",tasizan(a,b));printf("減算:%f\n",hikizan(a,b));
printf("乗算:%f\n",kakezan(a,b));printf("除算:%f\n",warizan(a,b));return 0;}
double tasizan(double x,double y){
double answer;
answer=x+y;
return answer;}
double hikizan(double x,double y){
double answer;
answer=x-y;
return answer;}
double kakezan(double x,double y){
double answer;
answer=x*y;
return answer;}
double warizan(double x,double y){
double answer;
if(y==0){
printf("ゼロ除算エラー\n");
answer=0.0;}else{answer=x/y;}return answer;}
何処が間違ってるか教えて下さい!!

52 :51:2010/06/13(日) 16:24:41
うpした人のと全く同じにしたツモリなんだが・・・
見辛くてすいませんがどうかヨロシクお願いします!

53 :デフォルトの名無しさん:2010/06/13(日) 16:25:25
死ね

54 :デフォルトの名無しさん:2010/06/13(日) 16:26:08
とりあえず
#include<math.h>
つけてみろカス


55 :デフォルトの名無しさん:2010/06/13(日) 16:28:34
warota

56 :51:2010/06/13(日) 16:37:30
かー
ハズレの時に来ちゃったか

ありがとうございましたー

57 :デフォルトの名無しさん:2010/06/13(日) 16:40:54
scanf()の引数を良く見るんだ
warizan()のif(y==0)も怪しい

58 :デフォルトの名無しさん:2010/06/13(日) 16:44:31
はちゅねみくなのー

59 :デフォルトの名無しさん:2010/06/13(日) 18:36:58
for(x = 0;x < 10;x++)
scanf("%c",a[x]);

みたいに使えないんだけど

60 :デフォルトの名無しさん:2010/06/13(日) 18:46:21
なんだその態度は

61 :デフォルトの名無しさん:2010/06/13(日) 18:48:28
しらねーよ

62 :デフォルトの名無しさん:2010/06/13(日) 19:34:00
>>51
6行目のscanfの %記号
    scanf("%lf&lf",&a,&b);

        ↓

    scanf("%lf%lf",&a,&b);



63 :デフォルトの名無しさん:2010/06/13(日) 20:11:26
もう初心者に scanf 教えるのやめろよ。
全部 gets でやらせろ。

64 :デフォルトの名無しさん:2010/06/13(日) 20:16:13
そんな事したら質問数うなぎ登りだぞ

65 :デフォルトの名無しさん:2010/06/13(日) 20:22:39
scanf に文句ぬかす奴がハードわかんねえとか、もうアボカド

66 :デフォルトの名無しさん:2010/06/13(日) 21:13:57
gets言ってる時点でネタだからな

67 :デフォルトの名無しさん:2010/06/13(日) 21:15:48
|= で足してる(?)値って、引く事ってできますか?



68 :デフォルトの名無しさん:2010/06/13(日) 21:19:28
>>67
|= ~たしてる値

69 :デフォルトの名無しさん:2010/06/13(日) 21:20:53
ああ間違えた、すまん
&= ~たしてる値

70 :デフォルトの名無しさん:2010/06/13(日) 21:21:43
できるはず
a |= b;
a &= ~b;


71 :デフォルトの名無しさん:2010/06/13(日) 21:30:16
scanfもgetsも引数がポインタだからダメ。
何も知らない初心者にいきなりポインタ教えるのは酷というもの。


72 :デフォルトの名無しさん:2010/06/13(日) 21:31:40
でも、いつのまにか当たり前のように理解してるもんだよ

73 :デフォルトの名無しさん:2010/06/13(日) 22:25:54
>>71
gets()がダメな理由が、引数がポインタだからってことだったら、fgets()とかなにもかもダメだろ。

74 :デフォルトの名無しさん:2010/06/13(日) 22:33:27
getchar()で一文字ずつ読めってことか

75 :デフォルトの名無しさん:2010/06/13(日) 22:37:41
LOWモードでな。

76 :デフォルトの名無しさん:2010/06/13(日) 22:56:39
RAW だろ。

77 :デフォルトの名無しさん:2010/06/13(日) 23:08:36
getcharってchar型のデータを取り出すのに、戻り値がintになってるよ。
getintとすべきでは?

78 :デフォルトの名無しさん:2010/06/13(日) 23:11:42
>>77
1. 戻り値としてEOFの可能性がある。
2. 昔はchar型を戻り値とすることができなかった。

79 :デフォルトの名無しさん:2010/06/13(日) 23:16:20
glibみたいくlistやhashのあるライブラリってないですか?

80 :デフォルトの名無しさん:2010/06/13(日) 23:17:37
78
いわれてみれば戻り値がcharの標準関数ってみたことないな。

81 :デフォルトの名無しさん:2010/06/13(日) 23:23:00
なぜか void はあるんだが

82 :デフォルトの名無しさん:2010/06/14(月) 00:42:01
へえ

83 :51:2010/06/14(月) 04:15:55
>>57さん>>62さん
わ 本当だ!
わざわざすんませんです(;^^)

イージーミス減らせる様頑張ります!
ありがとうございました!

84 :デフォルトの名無しさん:2010/06/14(月) 05:10:55
>>79
cstl
使ったことはないけどな!

85 :デフォルトの名無しさん:2010/06/14(月) 06:13:12
>>70
a=1;
b=1;
a|=b; // a == 1;
a&=~b; // a == 0;
足したのを引いたつもりがずいぶん引かれてしまったように見える。

質問があいまいだからこれでもよかったのかもしれないし、違った(足す前の状態に戻したかった)のかもしれない。

86 :デフォルトの名無しさん:2010/06/14(月) 07:20:15
ビットフラグを何だと思ってるんだろう
前のに戻したいなら前のを覚えとけ

87 :デフォルトの名無しさん:2010/06/14(月) 07:40:38
>>85
足した時点で足されてないのが原因では

88 :デフォルトの名無しさん:2010/06/14(月) 08:35:31
floatの絶対値をビット演算で求めたいんだけど

float a = -1.5;
long* t = (long*)&a;
t &= 0x7FFFFFFF; // これで a=1.5 になる

これは問題ある?
互換性とか

89 :88:2010/06/14(月) 08:37:18
ごめん
誤)t &= 0x7FFFFFFF;
正)*t &= 0x7FFFFFFF;


90 :デフォルトの名無しさん:2010/06/14(月) 09:44:57
>>88
IEEE754ならそれでいいけど、他の浮動小数点フォーマットの場合も
多々あるので互換性はない

91 :デフォルトの名無しさん:2010/06/14(月) 10:56:49
>>88
x86みたいに実数演算プロセッサが別にある場合、一旦メインメモリに転送しないといけなくなるので無駄に遅くなる恐れがある。
そうでなくても、fabs()自体が高速に実行できるように実装されているはずだから特にメリットはない。

92 :デフォルトの名無しさん:2010/06/14(月) 10:59:17
glibの標準関数のソースみたときはフラグ用ビットいじる仕様だったな

93 :デフォルトの名無しさん:2010/06/14(月) 13:14:16
>>86
フラグ倒すだけならXOR使うでしょ普通。

>>87
え?

94 :デフォルトの名無しさん:2010/06/14(月) 16:44:29
>>93
え?

95 :デフォルトの名無しさん:2010/06/14(月) 17:05:06
>>93
> >>86
> フラグ倒すだけならXOR使うでしょ普通。
え?

> >>87
> え?
うん

96 :デフォルトの名無しさん:2010/06/14(月) 17:39:08
どうしてもポインタの意味がわからん。
これ使わなかったらどうなるの?関数を多用する時にとりあえず
*つけとけばいいんですか?

97 :デフォルトの名無しさん:2010/06/14(月) 17:47:08
とりあえず語尾に「にゃ」を付けておけばいいよ

98 :デフォルトの名無しさん:2010/06/14(月) 18:15:01
どうしてもポインタの意味がわからないにゃ。
これ使わなかったらどうなるにゃ?関数を多用する時にとりあえず
*つけとけばいいのかにゃ?

99 :デフォルトの名無しさん:2010/06/14(月) 18:20:59
きもい

100 :デフォルトの名無しさん:2010/06/14(月) 18:26:41
  /l、   
  (゚、 。`フ _ 
  _」、 "∨  
 └じl_r' ,)  

101 :デフォルトの名無しさん:2010/06/14(月) 18:30:15
>>96
例えば、printf("Hello!\n");と書いたとき、あんたは既にポインタを使っている。

102 :デフォルトの名無しさん:2010/06/14(月) 18:32:04
>>101
意味がわからん

103 :デフォルトの名無しさん:2010/06/14(月) 18:34:38
>>95
与えたビットを 強制的に立てるのが or
与えたビット以外を 強制的に落すのが and
与えたビットを 反転するのは xor

足すとか引くとかの意の取り扱いが難しい

# 論理数学的には 加算法 って xor が一番近いんだっけか?

104 :デフォルトの名無しさん:2010/06/14(月) 18:38:13
>>103
1ビットの足し算はxorだよ。繰り上がりはandね。

105 :デフォルトの名無しさん:2010/06/14(月) 18:40:33
>>102
文字列リテラルはそれ自体がchar *と言う型のポインタ値として扱われる。
つまり、printf("Hello\n");と書いただけで、printf()関数にcharへのポインタを渡すと言うプログラムになっているわけだ。

106 :デフォルトの名無しさん:2010/06/14(月) 18:42:15
自分で関数作った方が速い。配列の参照渡しを

107 :デフォルトの名無しさん:2010/06/14(月) 18:46:40
関数内で、わたされた引数を書き換えたうえで、呼び出し側に書き換え結果を反映したい場合
配列を渡す場合
FILE みたいに、ものすごくカプセル化したい場合

108 :デフォルトの名無しさん:2010/06/14(月) 18:49:08
配列は渡せない。渡せるのはポインタだけ。

109 :デフォルトの名無しさん:2010/06/14(月) 18:51:08
だからそう言ってるだろw

110 :デフォルトの名無しさん:2010/06/14(月) 18:52:55
>>105
文字列リテラルの型は配列だ
そして配列からポインタへの暗黙の変換が規定されているだけだ

111 :デフォルトの名無しさん:2010/06/14(月) 18:55:48
>>110
大丈夫、誰もそれを否定していない。

112 :デフォルトの名無しさん:2010/06/14(月) 19:02:49
>>110
文字列リテラルは文字列リテラルであって配列じゃないだろう

113 :デフォルトの名無しさん:2010/06/14(月) 19:03:16
>>112
アホ

114 :デフォルトの名無しさん:2010/06/14(月) 19:07:03
>>113
配列は内容が同じであっても必ず別々に確保されるぞ

115 :デフォルトの名無しさん:2010/06/14(月) 19:22:03
こまけえこたあいいんだよ

116 :デフォルトの名無しさん:2010/06/14(月) 19:35:22
>>114
規格も読まないアホなんだなお前って

117 :デフォルトの名無しさん:2010/06/14(月) 19:42:22
>>116
人をアホ呼ばわりするだけで根拠を示せないの?どっちが…

初期化するときにもリテラルは使えるが配列は使えないよね

118 :デフォルトの名無しさん:2010/06/14(月) 19:49:48
もういいから。見てられないよ。

119 :デフォルトの名無しさん:2010/06/14(月) 19:50:36
別々に確保されるという規格はないぞw
"ABC" と "ABC" のような全く同じ文字列どころか、
"DEF" と "ABCDEF" のように最後だけ同じ文字列を
1つにまとめるとかいう最適化だって許されてるくらいだのに

120 :デフォルトの名無しさん:2010/06/14(月) 19:56:25
規格では、文字列リテラルは書き換えてはならない配列であると規定されている
ここで「書き換えてはならない」という持って回った言い方にしたのは、
書き換えてはならないにも関わらず、
昔との互換性のためにchar*への変換が許されているから
こういう特殊な扱いがあるという意味では確かに普通の配列とは異なるが、
型としては確かに配列型だ

121 :デフォルトの名無しさん:2010/06/14(月) 20:08:40
>>120
特別な配列だということで納得しました

122 :デフォルトの名無しさん:2010/06/14(月) 20:57:03
>>104
それはねーよ

123 :デフォルトの名無しさん:2010/06/14(月) 21:04:40
>>122

124 :デフォルトの名無しさん:2010/06/14(月) 21:20:23
>>123


125 :デフォルトの名無しさん:2010/06/14(月) 21:21:30
恥ずかしい>>122>>124のいるスレはここですか

126 :デフォルトの名無しさん:2010/06/14(月) 21:22:37
半加算器とか懐かしいなw

127 :デフォルトの名無しさん:2010/06/14(月) 21:23:17
いまはそういうとこすっ飛ばして直接言語から始めるからな

128 :デフォルトの名無しさん:2010/06/14(月) 21:25:31
bitの足し算とか意味不明なことを供述してるけど
整数の足し算が xor と and で出来るって言いたいんだろう
まあ幼稚園児でも知ってることだけど

129 :デフォルトの名無しさん:2010/06/14(月) 21:27:19
ビットって単に2進数の桁のことだぜ
1桁の足し算は、と言ってるだけだ

130 :デフォルトの名無しさん:2010/06/14(月) 21:27:42
>>128

131 :デフォルトの名無しさん:2010/06/14(月) 21:30:17
おおもとの >>67 からずれすぎ

132 :デフォルトの名無しさん:2010/06/14(月) 21:37:44
それが俺のジャスティス

133 :デフォルトの名無しさん:2010/06/14(月) 21:53:56
>>120
「char *への変換が許されてる」っていうけど、そうじゃなく
配列のまま使うなんてことあるの?

 "hello"[2]

こういう感じ?


134 :デフォルトの名無しさん:2010/06/14(月) 22:10:47
sizeof "hogehogehoge" == 13

135 :デフォルトの名無しさん:2010/06/14(月) 22:21:22
>>133
そういうかんじ。

136 :デフォルトの名無しさん:2010/06/14(月) 22:23:55
char* array = "hello";
printf("%c\n", array[1]);

137 :デフォルトの名無しさん:2010/06/14(月) 22:28:19
>>136
ポインタだね。

138 :デフォルトの名無しさん:2010/06/14(月) 22:59:08
>>135
おいおい
ポインタでもできることだろう・・・

139 :デフォルトの名無しさん:2010/06/14(月) 23:06:59
>>120
一行目、なんか気になる。
そんな規定あったっけ?
入門スレだから?

140 :デフォルトの名無しさん:2010/06/14(月) 23:18:18
大昔は書き換え可だったけど(char*に変換できるのはその名残)、今は不可
書き換え不可だと、同じ文字列をまとめたりする最適化ができるからね

141 :デフォルトの名無しさん:2010/06/14(月) 23:30:58
できるね

142 :デフォルトの名無しさん:2010/06/14(月) 23:34:50
>>140
そうだっけか?こりゃ失礼。
未定義なだけかと思ってた。
もっかい読み直してくるわ。

143 :デフォルトの名無しさん:2010/06/15(火) 00:02:01
ああ、書き換えた時の動作は未定義だと思う

144 :デフォルトの名無しさん:2010/06/15(火) 01:48:53
1つのソース内で同じ文字列リテラルが何度も出て来るケースって希だと思う
それだけのために最適化とか考える物なのかな

145 :デフォルトの名無しさん:2010/06/15(火) 02:15:53
"\n" とか "%d" みたいな短い文字列は、大量にあってもおかしくないんじゃない
もしくは、マクロ中に含めてたりしたらいつのまにか爆散してるかもしれない

146 :デフォルトの名無しさん:2010/06/15(火) 02:22:38
その程度だとメリットよりデメリットのが多くなりそうな気もする

147 :デフォルトの名無しさん:2010/06/15(火) 02:41:37
ふー

148 :デフォルトの名無しさん:2010/06/15(火) 02:53:43
文字列に限らずに
リテラルは1か所に集められるだろ。

int a=100, b=100, c;
c = a + b + 100 + 100;
if(printf("%d",100)==100);

これだけあっても 100 は1つだけで良い。

149 :デフォルトの名無しさん:2010/06/15(火) 02:58:32
>c = a + b + 100 + 100;
ここは200になるだろw

150 :デフォルトの名無しさん:2010/06/15(火) 03:00:48
整数値ならソースに埋め込んだ方が処理速度はずっと速くないか?
add ax, [label1]
よりも
add ax, 0064H
のがどう考えても効率がいい。使用メモリも少ない。

151 :デフォルトの名無しさん:2010/06/15(火) 06:32:45
C言語にはBSS領域というものがあってだな・・・
初期化データはここに入れられる

152 :デフォルトの名無しさん:2010/06/15(火) 06:34:02
data領域が初期値を持つ静的データ、BSS領域は0だった

153 :デフォルトの名無しさん:2010/06/15(火) 07:02:43
そりゃ C の仕様と関係ないだろ。

154 :デフォルトの名無しさん:2010/06/15(火) 08:07:15
いや、Cの歴史的経緯と深い関係がある

155 :デフォルトの名無しさん:2010/06/15(火) 08:41:35
F

156 :デフォルトの名無しさん:2010/06/15(火) 09:06:22
c = a + b * 100 + 100
ならよかったのに

157 :デフォルトの名無しさん:2010/06/15(火) 14:20:18
はあ…

158 :デフォルトの名無しさん:2010/06/15(火) 17:33:55
.netsdk2.0にwindows.hが入って無かったです
首吊ってきていいですか?

159 :デフォルトの名無しさん:2010/06/15(火) 20:16:17
#include <stdio.h>
#define N 20
int main (void)
{
int j;
int f[N + 1];

f[0] = 1;
f[1] = 1;
f[j] = f[j - 2] + f[j - 1];

for (j = 0; j <= N; j++)
printf("f%d:%d\n",j,f[j]);

return (0);
}


上のプログラムを書きました。
f0:1
f1:1
f2:2
f3:3
f4:5
f5:8
以科略
という結果が欲しいです。
どこが間違えていてどこをどのように直せばいいのか教えてもらえませんか?
よろしくお願いします。

160 :デフォルトの名無しさん:2010/06/15(火) 20:20:35
>>159
j に適切な値を代入して繰り返すべき
f[j] = f[j - 2] + f[j - 1];


161 :デフォルトの名無しさん:2010/06/15(火) 20:30:00
#include <stdio.h>
#define N 20
int main (void)
{
int j;
int f[N + 3];

f[0] = 1;
f[1] = 1;

for (j = 0; j <= N; j++){
f[j + 2] = f[j + 1] + f[j];
printf("f%d:%d\n",j,f[j]);
}

return (0);
}

無理矢理

162 :159:2010/06/15(火) 21:10:30
ありがとうございます。

>>160
そのようにしたいのですが、どうすればいいのかわからないのです
自分の書いたものではどこが間違っているのですか?

>>161
f[j + 2] = f[j + 1] + f[j]をfor文のループに入れてしまうんですね
自分のように上に書いておくとどうおかしいのかよかったら教えてください
自宅のパソコンにgnome端末が無いのでいまはできないのですが、明日>>161さんのを見せてもらいますね

163 :デフォルトの名無しさん:2010/06/15(火) 21:19:56
>>162
元のだと、f[2]以降は定義されてないから、それを表示させようとしてもうまくいかない。
別にprintfのループに入れる必要はないが、繰り返し文が増えるが先に↓を書くとか

for (j = 2; j <= N; j++)
f[j] = f[j - 2] + f[j - 1];

↓環境がないなら例えばここを使おう
http://codepad.org/

164 :デフォルトの名無しさん:2010/06/15(火) 21:21:13
ループに入れないのに、なんでf[j]って書いたのか理解できない

165 :デフォルトの名無しさん:2010/06/15(火) 21:56:00
つーか j を初期化しろよ

166 :159:2010/06/15(火) 22:07:23
>>163
なるほど!解決しました
これは便利ですね、丁寧な説明ありがとうございました

>>164
まだ配列だとか繰り返しだとかよくわからないのです



167 :デフォルトの名無しさん:2010/06/16(水) 10:12:48
>>165
うっせーな

168 :デフォルトの名無しさん:2010/06/16(水) 10:16:57
動作上問題がないのに必ず一言ケチを付けるアホがいるよな

169 :デフォルトの名無しさん:2010/06/16(水) 10:29:49
初歩的な質問です

(1) int hoge1[10] = {0,1,2,3,4,5,6,7,8,9};
(2) static int hoge2[10] = {0,1,2,3,4,5,6,7,8,9};
(3) static const int hoge3[10] = {0,1,2,3,4,5,6,7,8,9};

プログラムを実行すると(1)と(2)はRAMメモリ上のどこかに確保されますよね
(3)もRAMメモリ上のどこかに確保されるんでしょうか?

170 :デフォルトの名無しさん:2010/06/16(水) 10:46:08
>>169
環境が具体的に示してないので何とも言えないが、組み込み用の
Cコンパイラでは(3)の場合オプションを付ける事でROM上に置くような
環境も存在する

171 :デフォルトの名無しさん:2010/06/16(水) 10:56:11
>>169
その他、通常(1)はスタックに確保されてその宣言に到達するたびに初期化される。
(2)は静的領域に確保されて起動時に一度だけ初期化される。
(3)は(2)とは別の静的領域に確保されて初期化される。また、更新できない。

それはさて、初期値を全て列挙するなら要素数は省略した方が意図が判りやすいかと。

172 :デフォルトの名無しさん:2010/06/16(水) 10:59:10
ありがとうございます。
組み込みコンピューターの開発でsinとcosの計算結果を予め360*2個分
static constで定義しておいて利用するのが目的です
実行時にRAMに再び確保されるのはなんかメモリの無駄だなーと思いまして
質問させて頂きました

173 :デフォルトの名無しさん:2010/06/16(水) 11:00:16
>sinとcosの計算結果を予め360*2個分
なんと無駄なことを。

174 :デフォルトの名無しさん:2010/06/16(水) 11:19:21
>>172
要求するスピードや、RAM、ROM容量にもよるけど、最低45°分あれば可能。

175 :デフォルトの名無しさん:2010/06/16(水) 11:43:35
助言ありがとうございます
45度分用意すればいいのは知っているのですが、今回は速度最優先なので
fn_sin(angle)という関数より sin[angle] で処理することにしました
余談ですが、始め0.1度づつ3600個*2のデーター用意したら
「そこまで精度はいらん」と怒られちゃいました(汗

176 :デフォルトの名無しさん:2010/06/16(水) 12:05:52
速度最優先ならsinのテーブルじゃなくて、sinを使った式の結果をテーブルにした方がよくないか?
メモリはたくさん使っていいみたいだし。

177 :デフォルトの名無しさん:2010/06/16(水) 12:19:46
>>172
>組み込みコンピューターの開発で
その開発環境の説明書見たほうが良いよー
何処に配置するかの説明が必ずあるハズ

(or 上司に聞く 明示的にROMに配置させるには どう記述するれば良い? って

178 :デフォルトの名無しさん:2010/06/16(水) 21:09:17
11

179 :デフォルトの名無しさん:2010/06/16(水) 21:13:10
巨人ファンです

180 :デフォルトの名無しさん:2010/06/16(水) 21:26:52
楽天

181 :デフォルトの名無しさん:2010/06/16(水) 22:30:17
>>175
速度最優先なら内臓RAMに展開を考慮
内臓Flashへのアクセスがノーウェイトで出来るなら良いが
CPU動作クロックが高い場合はウェイトが入っている可能性が高い

182 :デフォルトの名無しさん:2010/06/16(水) 23:10:51
× 内臓
○ 内蔵

183 :デフォルトの名無しさん:2010/06/17(木) 00:00:48
そもそもターゲットCPUが浮動小数点演算苦手な可能性があるから
整数を固定小数点数として扱って計算したほうがいいかも知れない

184 :デフォルトの名無しさん:2010/06/17(木) 01:02:29
>>183
FPUがないCPUで速度最優先なのに浮動小数点演算するって低脳だろ
必然と固定小数点数にして整数演算することになる

185 :デフォルトの名無しさん:2010/06/17(木) 01:50:39
ここの人たちで、だれが一番高速なsin関数を書けるか競争してみたら?
ターゲットCPUはもっとも一般的なcore2で

186 :デフォルトの名無しさん:2010/06/17(木) 01:54:07
精度や使用メモリなどの制限をつけないと意味なくね?

187 :デフォルトの名無しさん:2010/06/17(木) 01:54:28
>>185
sin(theta)

188 :デフォルトの名無しさん:2010/06/17(木) 02:03:11
CPUにCore2使うような環境ならメモリは十分あるだろうからテーブル引くのが一番速い

189 :デフォルトの名無しさん:2010/06/17(木) 04:44:01
てか内部的にテーブル持ってたりしないの?

190 :デフォルトの名無しさん:2010/06/17(木) 04:51:03
ないな

191 :デフォルトの名無しさん:2010/06/17(木) 05:07:29
そなんだ。
毎回計算してるとかライブラリさんも大変なんだなぁ

192 :デフォルトの名無しさん:2010/06/17(木) 05:54:48
FSIN命令はFPU内部にテーブル持ってる
精度に問題がない限り、ライブラリはその結果を必要に応じて丸めてるだけ

193 :デフォルトの名無しさん:2010/06/17(木) 06:49:33
main() { char *s="main() { char *s=%c%s%c; printf(s,34,s,34); }"; printf(s,34,s,34); }
がどうしてクワインになるの?

printfの中身にトリックがあると思うんだけど、
元ネタのWikipediaの説明読んでも理解不能でした。
ttp://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AF%E3%82%A4%E3%83%B3_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29

194 :デフォルトの名無しさん:2010/06/17(木) 07:11:11
printf()が何を表示してるか、順を追って考えてみれば?

195 :デフォルトの名無しさん:2010/06/17(木) 07:13:24
printf の format をそのまま引数にも使ってるあたりがミソかと

196 :デフォルトの名無しさん:2010/06/17(木) 07:31:29
なるほど、最初のsの%c%s%cは展開されるけど・・・ってことか。納得。

197 :デフォルトの名無しさん:2010/06/17(木) 16:24:33
「#pragma ○○○」って、
プリプロセサーはどのように認識するの?
コメントとして?

198 :デフォルトの名無しさん:2010/06/17(木) 17:20:36
>>197
その言語によるだろ
プリプロセッサーが機能する物もあるしそうでない物もある

199 :デフォルトの名無しさん:2010/06/17(木) 17:38:29
言語はCに決まってんだろw
スレタイ読めよw

200 :デフォルトの名無しさん:2010/06/17(木) 17:43:41
コンパイラによる

201 :デフォルトの名無しさん:2010/06/17(木) 17:46:44
>>199
そのC言語に色々な種類があるということなんだよ

そもそもコンパイラ固有の指定を行う手段だと規定されているんだから

202 :デフォルトの名無しさん:2010/06/17(木) 17:53:41
コンパイラ固有の指定を行う為にはプリプロセッサはpragmaをスルーするしかないだろう

203 :デフォルトの名無しさん:2010/06/17(木) 18:00:23
>>202
プリプロセッサーを含めたコンパイラということ

204 :デフォルトの名無しさん:2010/06/17(木) 18:03:23
プリプロセッサとコンパイラが一体化してるのもあるし

205 :デフォルトの名無しさん:2010/06/17(木) 18:03:51
>>201
それはC言語の種類じゃなくて、処理系の種類だよ。

C言語の種類といったら、K&RとかANSIとかC89とかC99のような言語仕様の違いを言うんだよ。

206 :デフォルトの名無しさん:2010/06/18(金) 05:23:43
ループしてブルースクリーン起こさせるソースください

207 :デフォルトの名無しさん:2010/06/18(金) 09:55:06
>>205
君が言ってるのは、自分で書いてる通り「言語仕様」の種類だろ

もちろんそれを指すこともあるが、開発メーカーやそのバージョンによる違い、
処理系の違い、その他諸々を含めて色んな種類があるということ。

208 :デフォルトの名無しさん:2010/06/18(金) 10:20:03
>207 素人はすっこんでろ

209 :デフォルトの名無しさん:2010/06/18(金) 10:35:01
50

210 :デフォルトの名無しさん:2010/06/18(金) 13:00:34
>>207
つまりVC8とVC9は別の言語であると。

211 :デフォルトの名無しさん:2010/06/18(金) 13:16:43
正解

212 :デフォルトの名無しさん:2010/06/18(金) 13:22:16
>>210
#pragma の仕様なんてバージョンごとに変わる
素人でも常識だわ

213 :デフォルトの名無しさん:2010/06/18(金) 13:30:46
>>210
対応度違うからね、厳密には違うとみていい
別の言語とはどういうことだ
東京市の山手言葉と下町言葉は別言語なのか
大阪民国弁と帝都弁はは別言語なのか

214 :デフォルトの名無しさん:2010/06/18(金) 13:34:52
>>212
#pragmaの仕様は特に変わってないとおもったけど、なんかかわったの?c99とか?

215 :デフォルトの名無しさん:2010/06/18(金) 13:55:37
>>214
だから言語の種類によって変わる
どういう仕様かはそのコンパイラの仕様書やマニュアル見ないとわからん

コンパイル時に機能するとは限らず、
プリプロセスで機能するものから、リンクの動作を制御するのまで様々

そもそも #pragma 自体を認識せずエラーとなるコンパイラだって存在する(した)

216 :デフォルトの名無しさん:2010/06/18(金) 15:12:59
昔のgccは#pragmaを極端に嫌って、pragmaが検出されるとコンパイル中に
Rogueというゲームを立ち上げて強制的にプレイさせるようになっていた

#pragmaが完全に処理系依存だという事を逆手に取ったジョークだ

217 :デフォルトの名無しさん:2010/06/18(金) 16:23:54
>>215
「#pragma」自体が言語仕様では定められておらず、ベンダの個別実装であるということか。

218 :デフォルトの名無しさん:2010/06/18(金) 16:33:29
>>217
#pragma自体は言語仕様にあるよ

#pragmaを認識しないコンパイラってのは、関数でint型しか返せないコンパイラみたいなもんだよ

219 :デフォルトの名無しさん:2010/06/18(金) 16:52:24
>>218
>関数でint型しか返せないコンパイラみたいなもんだよ
さすがにそれはないな、#pragma が使えるようになったのはもっと最近だよ

220 :デフォルトの名無しさん:2010/06/18(金) 17:28:03
つか、だからプリプロセッスで扱うわけでもないのに、
"#" で表記してるんだろ。
対応してない処理系でも最初に消えるようにな。


221 :デフォルトの名無しさん:2010/06/18(金) 17:30:00
プロセッス プロセッサ
プロセス プロセサ

まあ個人的にはプロセサーだな。


222 :↓ブックマーク推奨:2010/06/18(金) 17:43:26


NHKの極左売国捏造路線何とかなりませんか?19
http://yutori.2ch.net/test/read.cgi/nhk/1273991231/
次スレ
NHKの極左売国捏造路線何とかなりませんか?20
http://yutori.2ch.net/test/read.cgi/nhk/1276388465/







223 :デフォルトの名無しさん:2010/06/18(金) 18:02:09
コンパイラの違いを言語の違いと表現する阿呆がいるからこんなことになるんだよ

224 :デフォルトの名無しさん:2010/06/18(金) 18:11:43
ああ君のことね

225 :デフォルトの名無しさん:2010/06/18(金) 18:51:40
これ見てよ↓
http://livedoor.blogimg.jp/tekepo/imgs/3/4/3414dfca.jpg
ばらまこうぜ!


226 :デフォルトの名無しさん:2010/06/18(金) 19:05:19
>>224
参政権ほしいですか?
やめてください

227 :デフォルトの名無しさん:2010/06/18(金) 21:24:36
undeclared first use in this function
このエラーはどういう意味ですか?

228 :デフォルトの名無しさん:2010/06/18(金) 21:41:51
書いてある通りだろw

229 :デフォルトの名無しさん:2010/06/18(金) 21:42:18
つ[英和辞書]

230 :デフォルトの名無しさん:2010/06/18(金) 21:43:49
知らないなら黙っててください

231 :デフォルトの名無しさん:2010/06/18(金) 21:46:54
>>227
宣言されてません

232 :デフォルトの名無しさん:2010/06/18(金) 21:47:40
おい馬鹿教えるなよ

233 :デフォルトの名無しさん:2010/06/18(金) 21:50:04
>>231
どういう事ですか?

234 :デフォルトの名無しさん:2010/06/18(金) 22:01:57
>>233
関数・変数などの全ての識別子は、そのソースファイルにおいて最初に*使われる*までに
宣言されている必要がある。

例えば、以下のソースをコンパイルすると、そのメッセージがでる。
---ここから---
void foo() { x = 5; }
int x;
int main(void) { return 0; }
---ここまで---

1: error: ‘x’ undeclared (first use in this function)

これは1行めで変数xが*使われて*いるにも関わらず、この時点ではxの宣言がなされていないことを
意味する。
2行めのxの宣言を1行めより先に書けばエラーにならない。

---ここから---
int x;
void foo() { x = 5; }
int main(void) { return 0; }
---ここまで---

この場合は、xは同じファイルで定義されているが、別のファイルで定義されている場合も
宣言は必要。そのときは、以下のように書く。

extern int x;






235 :デフォルトの名無しさん:2010/06/18(金) 22:04:00
意味がわからない
他の人説明してくれませんか?

236 :デフォルトの名無しさん:2010/06/18(金) 22:04:24
使う前に宣言してください。

237 :デフォルトの名無しさん:2010/06/18(金) 22:10:50
>>235
ソースコードとerror: ‘hoge’ undeclared (first use in this function)のhogeを晒せや

238 :デフォルトの名無しさん:2010/06/18(金) 22:17:04
>>237
ソースコードさらしたら別にエラー内容なんていらんだろ

239 :デフォルトの名無しさん:2010/06/18(金) 22:23:58
>>238
よく分からんマクロとかかも知れんだろ

240 :デフォルトの名無しさん:2010/06/18(金) 22:27:23
ふつうソースコードなんて晒せないだろ
家にソースを持って帰ったり会社で2chにアクセスできたりするクソ会社じゃあるまいし

241 :デフォルトの名無しさん:2010/06/18(金) 22:28:26
>>240
え?意味が分からない

242 :デフォルトの名無しさん:2010/06/18(金) 22:37:10
>>235が業務用のプログラムをいじってるなら怖いな

243 :デフォルトの名無しさん:2010/06/18(金) 22:37:47
エラーの内容から判断してこいつは学生だってわかるだろ
変数の宣言忘れてエラーの意味もわからないプロがいたら怖いわ

244 :デフォルトの名無しさん:2010/06/18(金) 22:45:11
>>240
どう考えても仕事絡みの質問じゃないだろ

245 :デフォルトの名無しさん:2010/06/18(金) 22:48:34
学生とは限らんだろ

246 :デフォルトの名無しさん:2010/06/18(金) 23:01:29
そうだな趣味かもしれないしな

247 :デフォルトの名無しさん:2010/06/18(金) 23:22:16
友愛数のペアを出力するプログラムを作ってみました

自分の思いつく限りの事はしたのですが、これ以上に速くなりますか?
ご指摘お願いします。

http://codepad.org/u2IDYxvs

248 :デフォルトの名無しさん:2010/06/18(金) 23:32:41
n/mが複数回出てくるけどこういうのはコンパイラが取り計らってくれるのだろうか。

249 :デフォルトの名無しさん:2010/06/18(金) 23:33:54
こんなスレで質問するって職業プログラマじゃないだろ
普通、職業プログラマなら職場のよくわかっている奴に聞くだろ

250 :デフォルトの名無しさん:2010/06/18(金) 23:35:49
意外に聞かないわ

251 :デフォルトの名無しさん:2010/06/18(金) 23:36:48
職場によくわかってない奴がいっぱいいるから?

252 :デフォルトの名無しさん:2010/06/18(金) 23:37:27
>>248
どういう意味ですか?

253 :デフォルトの名無しさん:2010/06/18(金) 23:39:48
>>247
なんでここまで遅くできるのかわからんw

普通に約数の和を関数化して戻り値と引数を比較すればいいのに

254 :デフォルトの名無しさん:2010/06/18(金) 23:40:28
職業プログラマじゃないと質問してはいけないんですか?

255 :デフォルトの名無しさん:2010/06/18(金) 23:40:36
n/mの結果を一度変数に入れてその変数を使い回したらって、ことじゃ

256 :デフォルトの名無しさん:2010/06/18(金) 23:45:24
なるほど!
こういう事ですね


http://codepad.org/RI5MDSCC


それ以外にはありますか?

257 :デフォルトの名無しさん:2010/06/18(金) 23:49:39
#include <stdio.h>

int divsum(int n)
{
int sum = 1, i;

for(i = 2; i * i < n; i++) if(n % i == 0) sum += i + n / i;

return i * i == n ? sum + i : sum;
}

int main(void)
{
int i, j, c = 0;

for(i = 220; i < 1000000; i++) {
if((j = divsum(i)) <= i) continue;
if(i == divsum(j)) {
printf("%d %d\n", i, j);
c++;
} }

printf("%d\n", c);

return 0;
}

258 :デフォルトの名無しさん:2010/06/18(金) 23:57:47
友愛数を配列に保存して比較するのは意味がなくて無駄

259 :デフォルトの名無しさん:2010/06/19(土) 00:06:09
作り変えちゃったか。仕方のないことかもな。

260 :デフォルトの名無しさん:2010/06/19(土) 00:08:05
>>257
凄いですね・・・。
以前に作った事がありますか?

>>258
自分の作ったプログラムだと、
それが無いと同じペアを2回表示する事になるので・・・。

261 :デフォルトの名無しさん:2010/06/19(土) 00:10:57
>>260
多分自分でそこまで作るのにあれこれ苦労したと思うんだけど、その苦労が経験となり、身につく。
おつかれさま。

262 :デフォルトの名無しさん:2010/06/19(土) 00:20:15
>>260
if(n < s) があるから、同じの2回表示されないと思うけど。

263 :デフォルトの名無しさん:2010/06/19(土) 00:23:58
>>262
ありがとうございます

264 :デフォルトの名無しさん:2010/06/19(土) 00:32:58
>>260 もう少し高速化
#include<stdio.h>

long calc_yuai(long value){
long i, j, yuai=1, tmp, sum, value_org;

value_org=value;
for(i=2;value/i>=i;i++){
sum=1;
tmp=1;
for(j=0;value%i==0;j++){
value/=i;
tmp*=i;
sum+=tmp;
}
yuai*=sum;
}
if(value>1) yuai*=(value+1);
return yuai-value_org;
}

int main(void){
long i, yuai;

for(i=2;i<1000000;i++){
yuai=calc_yuai(i);
if(i<yuai && calc_yuai(yuai)==i){
printf("%ld %ld\n", i, yuai);
}
}
return 0;
}

265 :デフォルトの名無しさん:2010/06/19(土) 00:41:58
一応プロだけど同僚よりGoogleとMSDNに聞いた方が速くて確実だわ

266 :デフォルトの名無しさん:2010/06/19(土) 00:44:58
ふーん

267 :デフォルトの名無しさん:2010/06/19(土) 01:05:41
>>264
速いな
今度からこれ使うことにしよう

268 :デフォルトの名無しさん:2010/06/19(土) 07:07:03
自演乙

269 :デフォルトの名無しさん:2010/06/19(土) 07:35:38
横からだけど、アルゴリズムの出典があったらおながいします。
ぐぐったけど互除法の変形とも違うし何やってるんだ、これ?

270 :デフォルトの名無しさん:2010/06/19(土) 07:41:15
(1 + a + a^2 + ... + a^m) * (1 + b + b^2 + ... + b^n)
= 1 + a + ... + a^m + a * b + a^2 *b + ... + a^m * b + .... + a^m * b + ... a^m + b^n

271 :デフォルトの名無しさん:2010/06/19(土) 07:42:35
= 1 + a + ... + a^m + b + a * b + a^2 *b + ... + a^m * b + .... + b^n + a * b^n + ... a^m + b^n
だった

272 :デフォルトの名無しさん:2010/06/19(土) 07:43:38
また違った。
最後はa^m * b^nだ。

273 :デフォルトの名無しさん:2010/06/19(土) 08:57:21
>>269
アルゴリズム名は知らないけど、例えば220の約数は1,2,4,5,10,11,20,22,44,55,110。
1を無視して、両端から数字をひとつづつ取って掛け合わせると、以下のように220になる。
2*100=220
4*55=220
5*44=220
10*22=220
11*20=220

約数の和sumを得るためには、a=2,3,4,5,6,...で割ってみるが、
割りきれたらsum=sum+a+220/a
a<=220/aの間、aをカウントアップして割りきれるか試す。
それ以上続けても、既に見つけた約数しかないので、無駄になるから計算しない。

274 :デフォルトの名無しさん:2010/06/19(土) 08:59:05
>>273
X:2*100=220
○:2*110=220

275 :269:2010/06/19(土) 10:36:30
>>273
理解しました!

>>270
言いたいことはたぶん理解しました!

276 :デフォルトの名無しさん:2010/06/19(土) 10:47:13
アホだw

277 :デフォルトの名無しさん:2010/06/19(土) 10:51:18
>>264のアルゴリズムを聞いてたんじゃないの?
>>273の説明は全然関係ないと思うんだが。

278 :デフォルトの名無しさん:2010/06/19(土) 11:26:10
>>277
だから、>>264のアルゴリズムのfor(j=0以降は
>>270がヒントになってると思いますよ?

279 :デフォルトの名無しさん:2010/06/19(土) 11:28:53
だから、>>273関係ないじゃんwってことなんだけど

280 :デフォルトの名無しさん:2010/06/19(土) 11:33:28
俺がアホだwと煽られるのは結構だけど、
>>273が叩かれる筋合いはないのでは?
>>273の説明のおかげで>>264のiのforループも理解し易くなると思うんだが。

281 :デフォルトの名無しさん:2010/06/19(土) 11:42:27
素因数分解したときに
1210=2^1*5^1*11^2
であるとき
全ての約数の和は
(2^0+2^1)*(5^0+5^1)*(11^0+11^1+11^2)=2394
ここから元の数を引けば
2394-1210=1184
となる

282 :デフォルトの名無しさん:2010/06/19(土) 11:57:50
>>280
じゃあ遠慮なく・・・アホ!

283 :デフォルトの名無しさん:2010/06/19(土) 12:06:30
関係ない説明すれば、煽られても仕方ないだろ

284 :デフォルトの名無しさん:2010/06/19(土) 12:10:10
数学的な解方をそのままプログラムに置き換えると効率が悪いから、
コンピューターの性質を踏まえた上でもう一工夫するんだよ

285 :デフォルトの名無しさん:2010/06/19(土) 12:18:58
今の女子って、正直、生理的に汚いよね。

286 :デフォルトの名無しさん:2010/06/19(土) 12:54:11
はい

287 :デフォルトの名無しさん:2010/06/19(土) 13:39:32
度々世話になります

#define RAKKA_SPEED 8.0
#define BLOCK_TATE 32.00

(略)
double rakka_calc=BLOCK_TATE/RAKKA_SPEED;

(略)
board[i][j][2][player_flag]+=double(rakka_calc*rakka_flag[player_flag]+shot_calc*shot_flag[player_flag]);


で計算が上手くいかないというか、
rakka_calkの値の小数点以下が計算されてないみたいで、
どうすれば小数点以下を反映できますか?

board[][][][]をdouble宣言ってのはなしの方向で。

288 :デフォルトの名無しさん:2010/06/19(土) 14:01:46
なしの方向なら答えもなし

289 :デフォルトの名無しさん:2010/06/19(土) 14:04:50
>>287ですが解決しました、ありがとうございました

290 :デフォルトの名無しさん:2010/06/19(土) 14:45:17
いまどき、C言語のコンソールアプリの求人ってあるの?

291 :デフォルトの名無しさん:2010/06/19(土) 15:07:38
ない

292 :デフォルトの名無しさん:2010/06/19(土) 17:05:28
質問です。
穴掘り法で迷路を作成しようとしたのですが、参考にしたソースと同じ様に動かすつもりで
書いたのに、なぜか、掘られていない穴が残ってしまいます。
ソースを載せますので、自分のソースのどこに問題があるのか教えてください。
参考にしたもの
ttp://codepad.org/9iaa2YAs
自分で書いたヤツ
ttp://codepad.org/DYLuK5Ca

よろしくお願いします。

293 :292:2010/06/19(土) 17:08:18
すいません。掘られていないのは穴ではなくて、壁でした//

294 :デフォルトの名無しさん:2010/06/19(土) 17:19:02
そこで穴があったら入りたいとか言っとけよ

295 :デフォルトの名無しさん:2010/06/19(土) 17:19:26
アッー!

296 :デフォルトの名無しさん:2010/06/19(土) 18:44:21
穴があったら入れたい

297 :デフォルトの名無しさん:2010/06/19(土) 21:57:15
穴があったら塞ぎたい

298 :デフォルトの名無しさん:2010/06/19(土) 23:56:17
>>264
前後もコードもちゃんとみてないんで、
何するコードか分からんのだけど、
jをインクリメントしてんの、何で?

299 :デフォルトの名無しさん:2010/06/20(日) 00:01:48
>>298
途中で書き直した名残
j はいらない

300 :デフォルトの名無しさん:2010/06/20(日) 00:32:45
jを使って等比級数の公式利用して
for(j = 1; value % i == 0; j++, value /= i);
yuai *= (pow(i, j) - 1) / (i - 1);
とか書くと笑えるくらい遅くなるなw

301 :デフォルトの名無しさん:2010/06/20(日) 00:53:01
for(i = 2; i * i <= n; i++) {
for(j = 1; n % i == 0; j = j * i + 1) n /= i;
yuai *= j;
}
これなら計算回数変わらずに変数節約できる

302 :デフォルトの名無しさん:2010/06/20(日) 01:45:17
プロプライエタリなライブラリを一部で呼び出してるソースコードを、GPLとして公開することは合法ですか?
具体的にはフォトショップSDKで書いたプラグインです。

303 :302:2010/06/20(日) 01:48:44
BSDとして公開することは合法ですか?

304 :デフォルトの名無しさん:2010/06/20(日) 02:16:54
GPLは無理だったような
BSDは別にいいんじゃないかな

305 :デフォルトの名無しさん:2010/06/20(日) 02:37:28
GPL違反ではあるけど、法的にはグレーじゃないっけ?
まぁあえて危ない橋渡る人が居ないだろうけど。

306 :デフォルトの名無しさん:2010/06/20(日) 06:10:19
>>292
http://codepad.org/v5IiMN8I
/* これ */

307 :292:2010/06/20(日) 10:56:53
>>306
ですね。
デバッグするっていうのはなかなか難しいです。
ありがとうございました。

308 :デフォルトの名無しさん:2010/06/20(日) 11:59:40
>>307
たいしたこと教えてないからお礼はいらないよ

309 :デフォルトの名無しさん:2010/06/20(日) 14:40:40
>>308
お礼?ふざけんな
2chでちょっと投稿したからと言って何かもらえるという考えは甘い

310 :デフォルトの名無しさん:2010/06/20(日) 14:44:44
回答者でもないのに毎回お礼に反応する頭のおかしい人が常駐してるからなw

311 :デフォルトの名無しさん:2010/06/20(日) 14:48:24
>>307
いえいえ

312 :デフォルトの名無しさん:2010/06/20(日) 18:01:02
VC++ 2008です

いったんプログラムを止めて
エンターキーを1回押して再開させたいのですが

fprintf(stdout,"Push Enter\n");
getchar();

と書いたらエンターキーを2回押さないと再開しません
仕方ないのでしょうか?


313 :デフォルトの名無しさん:2010/06/20(日) 19:51:08
>>311
どうもどうも

314 :デフォルトの名無しさん:2010/06/20(日) 20:37:23
getch()の結果が\nか判定

315 :312:2010/06/20(日) 23:50:26
while(getch()!=10);

でいいのでしょうか?
これにするとエンターを何回押しても進みません。

エンター1回で進むようにする方法はないのでしょうか?


316 :デフォルトの名無しさん:2010/06/21(月) 01:03:01
#include <stdio.h>
#include <conio.h>

int main(void)
{
  puts("before");
  while(getch() != '\r'){
  }
  puts("after");
  return 0;
}

317 :デフォルトの名無しさん:2010/06/21(月) 01:16:40
>>312
俺の環境だと、その書き方でenter一回押したら再開されるんだが。

318 :312:2010/06/21(月) 01:32:11
できました。
2回押さなければ進まなかった原因は
他の関数で入力待ちしている部分があったためでした。
ありがとうございました。

319 :デフォルトの名無しさん:2010/06/21(月) 01:33:09
>>318
いいよ別に

320 :デフォルトの名無しさん:2010/06/21(月) 21:59:08
int a = ( int )( 3 * 1.0f );

aは3であることが保証されるのでしょうか??
浮動小数点数は誤差とか怖いので気になりました・・・

321 :デフォルトの名無しさん:2010/06/21(月) 22:07:10
>>320
保険をかけるなら四捨五入すべし

322 :デフォルトの名無しさん:2010/06/21(月) 23:11:17
普通の浮動小数点数なら整数は(表現可能精度内でなら)誤差なしに表現できるので、
一旦循環小数や精度オーバーを経由して
整数に戻ってくるような演算でない限り、誤差は発生しない
(Cの規格で保証されているわけではないが)

323 :デフォルトの名無しさん:2010/06/21(月) 23:16:30
0.5足しとけばいいじゃん

324 :デフォルトの名無しさん:2010/06/21(月) 23:42:00
>>320
誤差が出るのは小数点イカでゲソ

325 :デフォルトの名無しさん:2010/06/21(月) 23:45:07
>>320
http://ja.wikipedia.org/wiki/%E5%BA%8A%E9%96%A2%E6%95%B0%E3%81%A8%E5%A4%A9%E4%BA%95%E9%96%A2%E6%95%B0#C.E8.A8.80.E8.AA.9E.E3.81.AE.E6.BC.94.E7.AE.97.E5.AD.90_.28int.29

326 :320:2010/06/21(月) 23:46:34
みなさん、ありがとうございます。
>>320のケースは大丈夫なようですが、大事をとって0.5f足してからの丸め(四捨五入)をする方針でいくように
したいと思います。

327 :デフォルトの名無しさん:2010/06/21(月) 23:47:20
>>326
round 使ったほうがいいかも

328 :デフォルトの名無しさん:2010/06/22(火) 00:16:01
>>326
0.5f足して四捨五入しちゃだめー

329 :デフォルトの名無しさん:2010/06/22(火) 00:34:01
>>328
ああああわわわてててるななな

330 : ◆Jo8oQAGh3M :2010/06/22(火) 01:34:54
3次元の実数ベクトルを、要素がfloat型で要素数3の配列を用いて表すものとする。
二つの3次元ベクトルに対して、それらの和を求める関数を定義する。
和を計算する関数はaddvec関数定義の頭部は
void addvec(const float x[3], const float y[3], float z[3])とする。
プログラムの動作は、二つの3次元ベクトルaとbの各成分を順次に入力して、それらの和を求めて出力する。

というものをつくりたいです、そこで
#include <stdio.h>

void addvec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] + y[i];
}
これに続くmain関数を作りたいのですがどうすればいいのかわからないので教えてください。


int main (void)
{
float x1,y1,z1,x2,y2,z2;

puts("各成分を入力してください.");
printf("ベクトルa:"); scanf("(%d,%d,%d)", &x1, &y1, &z1);
printf("ベクトルb:"); scanf("(%d,%d,%d)", &x2, &y2, &z2);

printf("和%d \n", addvec(わからない));
return (0);
}
上のように作ろうとしたのですが、どうも的外れな気がして…

331 :デフォルトの名無しさん:2010/06/22(火) 02:12:27
#include<stdio.h>

void addvec(const float a[3], const float b[3], float c[3])
{
int i;
for(i = 0; i < 3; i++) c[i] = a[i] + b[i];
}

int main (void)
{
float a[3], b[3], c[3];//x,y,z成分

puts("各成分を入力してください.");
printf("ベクトルa:"); scanf("%f %f %f", &a[0], &a[1], &a[2]);
printf("ベクトルb:"); scanf("%f %f %f", &b[0], &b[1], &b[2]);
addvec(a, b, c);
printf("a+b:%f, %f, %f\n",c[0], c[1], c[2]);
return (0);
}

332 :デフォルトの名無しさん:2010/06/22(火) 02:18:01
あ、コメントは配列の要素がx,y,z成分てこと

333 : ◆Jo8oQAGh3M :2010/06/22(火) 02:27:16
>>332
ありがとうございます、凄く助かりました!


334 :デフォルトの名無しさん:2010/06/22(火) 04:49:11
今更だけど
>>301 にするだけでも >>264 の 1.8 倍速
これだと >>264 の 2.5〜3 倍速になる
除算は遅いから書き直せるものは書き直したほうがいいね
long calc_yuai(long value){
long i, j, yuai, value_org;

if(value<=1) return 0;

value_org=value;

for(i=0;(value&1)==0;i++) value>>=1;
yuai=(2<<i)-1;

for(i=3;i*i<=value;i+=2){
for(j=1;value%i==0;j=j*i+1){
value/=i;
}
if(j>1) yuai*=j;
}
if(value>1) yuai*=(value+1);
return yuai-value_org;
}

335 :デフォルトの名無しさん:2010/06/22(火) 06:40:02
>>334
なるほど。書き方によってスピードがずいぶん違うね。
ところで、スピードアップしたいときには試行錯誤で、
早そうな書き方をいくつか試してるんだが、定石パターンってあるんだろうか?
処理系によっても、この演算は遅いor早い、とかあると思うんだが。

336 :デフォルトの名無しさん:2010/06/22(火) 06:47:01
実数より整数のが速い
掛け算は遅いから可能ならビットシフトに置き換える
割り算はもっと遅いからできるだけ使わないように工夫する
条件分岐は足を引っ張る
ループの中で使う変数が増えると、ある時点でスピードががたっと落ちる
コードサイズが大きくなると不利

基本はCPUやパソコンの構造をよく理解すること
小手先の工夫をするよりアルゴリズムをよく練ること

337 :デフォルトの名無しさん:2010/06/22(火) 06:49:19
スピードだけをとことん追求するとスパゲッティになる

338 :デフォルトの名無しさん:2010/06/22(火) 07:18:10
そうかなあ

339 :デフォルトの名無しさん:2010/06/22(火) 08:58:19
巧妙にビット演算とか使いまくって、作った自分があとから見ても何やってんのかわからなくなることは珍しくない
ちゃんとコメントは書いとこうね

340 :デフォルトの名無しさん:2010/06/22(火) 09:02:26
前時代的な最適化だな

今どき乗除算も遅くないから
無理にシフト使って命令数増やすより1命令で済ませる方がいい

341 :デフォルトの名無しさん:2010/06/22(火) 09:40:42
こういうくだらん高速化より、コードの保守性を上げる方が遥かに大切。
コードを汚くして.0001秒速くするなど、正に愚の骨頂。

そして演算時間が問題となり本当に高速化が必要なところでは、
こんな小学生的な発想のレベルの最適化など殆ど役に立たん。

342 :デフォルトの名無しさん:2010/06/22(火) 09:48:38
はいはい、すごいすごい

343 :デフォルトの名無しさん:2010/06/22(火) 10:59:45
組み込みやゲームだったら、0.001秒早くするほうが普通だけど

344 :デフォルトの名無しさん:2010/06/22(火) 11:41:06
この程度の高速化なら、逆にコードがすっきりして見やすくなると思うんだが。

345 :デフォルトの名無しさん:2010/06/22(火) 13:25:18
>>341
コードの保守性が高いかどうかはユーザに関係ないよ
なぜこの処理は遅いのですか?と質問されたら、保守性を下げない為です、と回答するの?
それともこれより速く出来ませんと回答するの?

346 :デフォルトの名無しさん:2010/06/22(火) 13:29:35
具体的なことには何一つ答えられないアホが、
抽象論で他人を叩いて優越感に浸りたいだけ

まともに相手する必要なないと思う

347 :デフォルトの名無しさん:2010/06/22(火) 13:57:39
>>340
データシート見てこい
SALは0.33クロック、IMULは0.5クロックに対してIDIVはmax36クロック
つまり100倍遅い

348 :デフォルトの名無しさん:2010/06/22(火) 14:41:20
>>345
一万ぽ譲って関係ないとして、ユーザに関係ないなら無視して良いの?

349 :デフォルトの名無しさん:2010/06/22(火) 14:50:21
>>348
速度が問題なのであればそれを改善するのは当然。
それによって保守性が下がると思うのであれば、同等のコード、または
普段よりも注意深く詳しいコメントを記述する
ってなんでこんな学生相手に話すような展開になってんだ?普通だろこれ。

350 :デフォルトの名無しさん:2010/06/22(火) 14:52:06
>>347
ふおお。0.5がでてきたときもびっくりしたけど、いまや3命令が同時に行えるようになっているのか

351 :デフォルトの名無しさん:2010/06/22(火) 14:56:10
>>349
でも遅い遅いとユーザから不満が出てる一般的なアプリケーションはビット演算なんて使ってないんだろうね

352 :デフォルトの名無しさん:2010/06/22(火) 15:05:15
ん?
>>334 のコードの保守性が低いと言ってるんだよ。醜いということ。
で、こういうコードを書いた理由がこっちの方が速いだろ。

それに対して、その部分が速いといっても全体から見れば極々一部のコードなんだし、
そこが何倍になろうとも全体が速くなるわけではない。と言ったまで。

高速化というのは、その必要性が生じたときに、
ボトルネックとなっている部分を調べて、
その部分を対象に行うものだよ。

そもそも 334 は単に自分のスキルを自慢したいだけだんだろ?
当然ながらこういうコードは、以下略

353 :デフォルトの名無しさん:2010/06/22(火) 15:20:38
ちなみにマシン言レベルで比較する程の高速化が必要な状況なら
その部分はアセンブリで書くのが普通。

C言語で書いておいて、シフト演算使ったから速いとか、
そのプログラマーのマスタベーションでしかありえない。

どうして究極の速度が要求されるような状況でC言語で開発してんだ?
そこまでの要求がないからだろ。

354 :デフォルトの名無しさん:2010/06/22(火) 15:21:47
コンパイラさんのほうが優秀だから

355 :デフォルトの名無しさん:2010/06/22(火) 15:22:22
>>334の高速化なんて2で先に割り切っておいて、
ループ変数を+=2にして高速化してるだけじゃんw

この程度で保守性低いとか、スキル自慢とか、やばすぎだろw

356 :デフォルトの名無しさん:2010/06/22(火) 15:27:15
やべー、おまえやべー

357 :デフォルトの名無しさん:2010/06/22(火) 15:42:55
>>334
>これだと >>264 の 2.5〜3 倍速になる
>除算は遅いから書き直せるものは書き直したほうがいいね

流石にこれはないなw

358 :デフォルトの名無しさん:2010/06/22(火) 16:19:38
>>334程度が理解できないアホは>>257でも使ってりゃいいんだよw

359 :デフォルトの名無しさん:2010/06/22(火) 16:24:33
>>358
かわいそうに、いやマジで

360 :デフォルトの名無しさん:2010/06/22(火) 16:46:58
>>352
ちょっと>>334の代わりになる保守性の高いコードとやらを書いてみてよ

361 :デフォルトの名無しさん:2010/06/22(火) 16:59:32
そもそも>>352は根底からおかしいからな。
どこがボトルネックだと考えているのか教えてほしいわ。

362 :デフォルトの名無しさん:2010/06/22(火) 18:13:59
>>360
高速化を考えるんだったら、そのマシンや環境がどうかで大きく変わるし、
それ以前に最大桁が幾らかでも手法は色々考えられる。
例えばその辺のWindowsPCとかなら、そこそこメモリも使えるから、

#include <stdio.h>
#define N 1000000

int main(void)
{
static long table[N];
long i, j;

for (i = 1; i < N; i++)
for (j = i+i; j < N; j += i)
table[j] += i;

for (i = 0; i < N; i++) {
j = table[i];
if (j <= N && i < j && table[j] == i)
printf("%ld %ld\n", i, j);
}

return 0;
}

363 :デフォルトの名無しさん:2010/06/22(火) 18:20:07
>>362
はやいな、おい

364 :デフォルトの名無しさん:2010/06/22(火) 18:24:47
>>362
>>264 の10倍速

365 :デフォルトの名無しさん:2010/06/22(火) 18:56:50
>>361
え、一般論だと思うけど。それがコードチューニングってやつだよ
どこがボトルネックか教えろって、なに言ってるの?

366 :デフォルトの名無しさん:2010/06/22(火) 19:00:10
>>365
ボトルネックの部分をチューニングしてるわけだけど、そこをチューニングするなといっているように見える

367 :デフォルトの名無しさん:2010/06/22(火) 19:01:20
>>362
なんで動いてるのかが分からない!かっけー

368 :デフォルトの名無しさん:2010/06/22(火) 19:03:56
と思ったけど理解できた!
逆転の発想スゴス

369 :デフォルトの名無しさん:2010/06/22(火) 19:40:57
>>366
ボトルネックというのは、プログラムの実行時間の大半を占める部分だよ

370 :デフォルトの名無しさん:2010/06/22(火) 19:52:51
>>362はかなりのやり手。

371 :デフォルトの名無しさん:2010/06/22(火) 19:57:09
>>369
そんで、今回の友愛数を求めるプログラムのボトルネックはどこなの?

372 :デフォルトの名無しさん:2010/06/22(火) 20:05:53
誰が友愛数を求めるプログラムの実行速度を要求してるの?
速くしたいのなら、いくらでもすればいいんじゃないでしょうか
保守なんていらないよ、そんなパーツには

373 :デフォルトの名無しさん:2010/06/22(火) 20:11:41
>>371
Nの大きさに対する演算回数の多さじゃないの?
演算回数を減らす工夫が効果的ってことでしょ。

N*N だったものを 2*N にするとかはよくある話じゃないの。

374 :デフォルトの名無しさん:2010/06/22(火) 20:17:00
だから、コンパイラが充分賢いなら小手先の最適化は慎んだ方がいいね。
>336の挙げた項目を整理すると、
・実数より整数の方が速いが、型変換は遅いから要注意。
・CPUによってはビットシフトは必ずしも速くない。
・条件分岐はできるだけループの外に。
・「ループの中で使う変数」だと意味不明だが、一次変数を利用してループ内の演算量を減らすのは有効。
・どうせ今時のコンパイラはstatic関数のインライン展開くらいしてくれるから、関数は機能ごとに分割すべき。
となるかな。

375 :デフォルトの名無しさん:2010/06/22(火) 20:18:42
>>372
実行速度の要求もないのに、
自分の趣味で速くしたくてシフト演算使って高速化するの?
それで保守のことなど知ったことはないと開き直るの?

うちの会社なら即クビだ。

376 :デフォルトの名無しさん:2010/06/22(火) 20:25:38
>>375
そういうことだ

377 :320:2010/06/22(火) 20:44:43
>>327
ありがとございます。
残念ながら、VC++はC99に対応していないので、roundが使えないです・・・

>>328
あ、たしかに一律0.5f足すだと、負の四捨五入がおかしくなりますね・・・

調べてみたところ、次のようなやり方で絶対値的四捨五入ができると分かりました。

float a = -4.6f;
float b = ( a > 0 ) ? floor( a + 0.5f ) : ceil( a - 0.5f );

最終的に求めたいのはint型なので、以下のようなカタチでも良いと思うのですが、どうでしょう??

int b = ( int )( ( a > 0 ) ? ( a + 0.5f ) : ( a - 0.5f ) )

378 :デフォルトの名無しさん:2010/06/22(火) 20:51:41
>>372
> 誰が
>>247

379 :デフォルトの名無しさん:2010/06/22(火) 20:53:38
>>377
足して切り捨てしてるならおk。足して四捨五入ってところを心配したのだろうと思う。

380 :デフォルトの名無しさん:2010/06/22(火) 20:56:36
割る数が2のべき乗の定数だと勝手に割り算をシフトに置き換えてくれるコンパイラもあるよ。
最近はその程度の最適化はやってくれる。

ただ、特定の乗除算とビットシフトが等価だって知らない人とは一緒に仕事したくない。
そんなの2進数の基本的な性質じゃん。
その程度のことで保守性が下がるとか、何寝言言ってんのって感じ。

381 :デフォルトの名無しさん:2010/06/22(火) 20:58:16
>>375
ええと、あなたの会社のコーディング規約ではシフト演算が禁止、ただし要求速度を満たせない
場合を除くとなっているのですか?
どこからが複雑だから禁止になり、どこまでが許容される記述なのか、そのガイドラインを
社内で作成し、周知徹底されていますか?
また、速度に関する要件がない場合、速度はどれだけ遅くとも問題ないのですか?

382 :デフォルトの名無しさん:2010/06/22(火) 21:06:49
職業プログラマが保守性とかって、お笑い

383 :デフォルトの名無しさん:2010/06/22(火) 21:29:16
マ板に行けよ土方は

384 :320:2010/06/22(火) 21:29:26
>>379
あ、そういうことでしたか。
了解です。

385 :デフォルトの名無しさん:2010/06/22(火) 23:43:30
こんなところでまで会社に縛られてるなんて大変だね

386 :デフォルトの名無しさん:2010/06/23(水) 00:23:48
scanfの引数に&をつける理由を大学の教授に尋ねたのですが、
「今は気にしなくていい。scanf使うときは&をつけるように」
といい加減な回答が返ってきました。
お金払ってるんだからちゃんと説明しろよ

387 :デフォルトの名無しさん:2010/06/23(水) 00:25:40
その段階でポインタの説明始めたら一向に進まなくなるぞ

388 :デフォルトの名無しさん:2010/06/23(水) 00:28:05
大学生だろ?
自分で調べられる程度の範囲は自分で調べろよ
小中学生じゃないんだから

389 :デフォルトの名無しさん:2010/06/23(水) 00:40:32
>>388
俺が言いたいのは教授の教え方がいい加減だっていってるんだ。
他にもソースファイルの先頭に書くinclude文についてもそう。
教授は「プログラムを動かすためのおまじないだと思ってください」
とか抜かしやがる。

390 :デフォルトの名無しさん:2010/06/23(水) 00:42:38
大抵の参考書もそう言ってるぞ。
物事には学ぶための順序ってもんがある。

391 :デフォルトの名無しさん:2010/06/23(水) 00:44:00
>>389
何も分かってない人に教える場合はそれが普通

392 :デフォルトの名無しさん:2010/06/23(水) 00:45:25
>>389
それが定番になってるけど、俺もどうかと思う。ガキに教えるんじゃないんだから

393 :デフォルトの名無しさん:2010/06/23(水) 00:45:51
>>391
残念ながら最初に聞いたときぽかーんだったよ。
そもそも「おまじない」って何だよって?w
さすがに調べて分かったが。俺とおんなじこと考えてた人きっといるはず

394 :デフォルトの名無しさん:2010/06/23(水) 00:49:33
includeやポインタくらいはちゃんと意味を教えたほうが良いのでは・・・
前者は至極分かり易いと思うぞ。

395 :デフォルトの名無しさん:2010/06/23(水) 00:53:14
会社に入ってからも「おまじない」という単語はよく使うけどな。
「テスト済みの処理構造をブラックボックスとして使う」という意味で。
あとで暇な時にそのおなじないの内容を理解しておくことは必須

396 :デフォルトの名無しさん:2010/06/23(水) 00:54:59
話が違いますが

397 :デフォルトの名無しさん:2010/06/23(水) 00:56:16
なるほどね。
大まかには「お決まりの処理」という理解で、さらには「なぜその処理が必要か」という理解に踏み込んでいくという、
二段階の理解ステップとなるわけだ。
経験上、こういうのはけっこうあるね。
何となしにやっていたことの意味が徐々に明らかになっていくのは、成長を実感できてうれしいものだ。
>>386も是非この楽しさを知ってほしい。

398 :デフォルトの名無しさん:2010/06/23(水) 00:57:51
調べる能力も大切って事を教授が教えてくれたんですね。

399 :デフォルトの名無しさん:2010/06/23(水) 00:59:49
>何となしにやっていたことの意味が徐々に明らかになっていくのは
できれば本当の意味にすぐに気づきたい。時間はそんなに待ってくれないぞ

400 :デフォルトの名無しさん:2010/06/23(水) 01:01:42
includeをおまじないと言っても、stdio.h以外を使う時点で
この関数を使うときはこれをインクルードと言っちゃうんだから
初めからprintfや標準入出力関数を使うためにこうすると言えばいいだろ、馬鹿らしい

401 :デフォルトの名無しさん:2010/06/23(水) 01:01:45
>>399
printfの使い方とか、要所を抑えておけばあとは適当な理解でいいようなことは結構あるよ

402 :デフォルトの名無しさん:2010/06/23(水) 01:01:49
>>393は言葉尻とらえてケチつけてるだけでなんの意味もない話だったな

403 :デフォルトの名無しさん:2010/06/23(水) 01:04:48
慣行となってる教え方に問題があるって話だろ。意味を見い出せない馬鹿

404 :デフォルトの名無しさん:2010/06/23(水) 01:08:40
Aを理解するには、Bを教えなければならない
Bを(ry
人に教えるならどこかで堺をつけないといけない

調べてわかるレベルならなおさら教えない
おしえてクンをその道に育てるのは自殺行為

405 :デフォルトの名無しさん:2010/06/23(水) 01:11:04
全部調べて分かるだろ

406 :デフォルトの名無しさん:2010/06/23(水) 01:11:40
調べて分かることならちゃんと説明できるだろう。
それを遠回しな表現で学生を撹乱させて時間稼ごうだってそうはいかない
お金払ってるんだから教授はちゃんと仕事しろってんだ

407 :デフォルトの名無しさん:2010/06/23(水) 01:11:41
while(!関数名)ってあったんですけどこれってどういう意味なんでしょうか?
もし関数が0を返したらwhile(!0)になると思うんですがこれは真なんでしょうか?
よろしくお願いします。

408 :デフォルトの名無しさん:2010/06/23(水) 01:13:00
人に聞く=調べる
金払ってんだ、質問した事に答えろよ。

409 :デフォルトの名無しさん:2010/06/23(水) 01:13:43
えっ?

410 :デフォルトの名無しさん:2010/06/23(水) 01:16:29
初心者にものを教える時に最初から1〜10まで全て説明する馬鹿はいないだろ。順序を考えろ。
>>393>>400>>403みたいな馬鹿学生が山ほど潜んでるんだから教える方も大変だよ

411 :デフォルトの名無しさん:2010/06/23(水) 01:18:17
誰が最初から1〜10まですべて説明しろと言ったんだ?
順序を考えればおまじないなんて馬鹿なことを言わずに済むだろ

412 :デフォルトの名無しさん:2010/06/23(水) 01:19:51
だよな。
「おまじない」とかふざけすぎ。
まず最初は printf を使わずに教えるべき。
C は、入出力は言語機能自体には含まれていない、と教えるべき。
苦C とかいうサイトはそういう始め方だったから好感が持てた。


413 :デフォルトの名無しさん:2010/06/23(水) 01:22:05
>>411
#include で別のファイルを読み込みます

中を見てみましょう

???

これじゃ先に進みそうにないから
おまじないっていうんだよ

414 :デフォルトの名無しさん:2010/06/23(水) 01:24:28
>>413
「おまじない」が「おまじない」じゃなくなる時点でもヘッダファイルの中身なんて見てないだろ
関数の概念だけ教えれば済む話。高校以上なら簡単なに受け入れられる

415 :デフォルトの名無しさん:2010/06/23(水) 01:24:34
それが正しい順序?
初心者にはまず目に見える結果が出る部分を教えないと。
自分の覚えたことの結果が出ないと正しいのか間違ってるのかの判断も付かない。
だからprintfを最初に教えるのは理にかなっている。

printfを使うためにはインクルードがどうたらこうたらやり始めるのか?アホクセー

416 :デフォルトの名無しさん:2010/06/23(水) 01:26:52
せめて printf は後にしろよ。
puts とか putchar が先だろ。


417 :デフォルトの名無しさん:2010/06/23(水) 01:27:03
疑問があるから質問したんだろ。
授業とは違うんだよ、生徒の質問に答えろって話。

418 :デフォルトの名無しさん:2010/06/23(水) 01:28:03
教えるのは後回しでもいいけど、「おまじない」って言葉を使うのはダメだと思う。

419 :デフォルトの名無しさん:2010/06/23(水) 01:28:47
Java の System.Console.○○○ は最初から使えるのは何で?

420 :デフォルトの名無しさん:2010/06/23(水) 01:29:44
単なる言葉の言い回しの是非をグダグダいうのも実に馬鹿らしいな

421 :デフォルトの名無しさん:2010/06/23(水) 01:30:10
>>418
どんな言葉なら気が済むんだ

422 :デフォルトの名無しさん:2010/06/23(水) 01:31:48
>>421
「これからC言語のプログラムを書きます」の合図でいいんじゃないです?

423 :デフォルトの名無しさん:2010/06/23(水) 01:32:03
プリントフ

>>419 それC#。JavaはSystem.out.println()な。Java.langパッケージは宣言なしで使えるから。

424 :デフォルトの名無しさん:2010/06/23(水) 01:32:33
>>422
おまじないよりタチ悪いな

425 :デフォルトの名無しさん:2010/06/23(水) 01:33:21
>>422
おまじないと同レベルに糞。

426 :デフォルトの名無しさん:2010/06/23(水) 01:33:58
>>425
ハァ?同レベル?

427 :デフォルトの名無しさん:2010/06/23(水) 01:35:20
>>426
そう。どっちもまるで必須みたいで的外れ。printfを使いたいがために書いてるんだからそう言えばいいだけ

428 :デフォルトの名無しさん:2010/06/23(水) 01:36:32
じゃあなんて言うんだよ!
お前も同レベルの事言うんだろ?言ってみろや

429 :デフォルトの名無しさん:2010/06/23(水) 01:38:26
ここはCの教え方についてのスレになってるので>>407は取り消しますw

430 :デフォルトの名無しさん:2010/06/23(水) 01:39:10
質問スレは別にあるし

431 :デフォルトの名無しさん:2010/06/23(水) 01:39:36
>>427
それおまじないとどう違うの?
printfを使うためのおまじないじゃん

432 :デフォルトの名無しさん:2010/06/23(水) 01:40:46
>>431
「おまじない」と「printfを使うためのおまじない」とには大きな差があるんだが

433 :デフォルトの名無しさん:2010/06/23(水) 01:42:37
Q 「おまじない」ってなんですか?
A 「printfを使うためのおまじない」だよ

すげえ、大きな差だ
レベルたけえwwwwww

434 :デフォルトの名無しさん:2010/06/23(水) 01:43:12
両方とも何も説明してないから同じだな

435 :デフォルトの名無しさん:2010/06/23(水) 01:44:23
馬鹿学生は意味が知りたかったんだよな?
それを「printfを使うためのおまじない」と答えて大きな差だと言う。

436 :デフォルトの名無しさん:2010/06/23(水) 01:44:42
もっと言えばスタンダードアイオー、標準入出力関数だよ。そう言えば良い
おまじないと言うより百倍良いだろう

437 :デフォルトの名無しさん:2010/06/23(水) 01:45:39
馬鹿学生は意味が知りたかったんだよな?
それを「スタンダードアイオー、標準入出力関数だよ。」と答えて大きな差だと言う。

438 :デフォルトの名無しさん:2010/06/23(水) 01:45:46
>>432
printf を使うためってのを理解させるには関数について教えなきゃいかんだろ
最初は #include も main も printf も return もおまじない

439 :デフォルトの名無しさん:2010/06/23(水) 01:46:43
最初からprintfのポインタの説明から入って分かる訳ないじゃん。文字列リテラルとかの説明をいきなり教えるの?

440 :デフォルトの名無しさん:2010/06/23(水) 01:46:45
>>436
それなんも教えてないよ。関数って何?ってなるだけだろ。

441 :デフォルトの名無しさん:2010/06/23(水) 01:47:11
>>432で大きな差があると言ったら、それが答えみたいにとられてうざいんだが
>>438
俺は初めから関数について教えればいいと言ってるだろ

442 :デフォルトの名無しさん:2010/06/23(水) 01:48:45
おまじない、に対しての答えが、関数を教える?

443 :デフォルトの名無しさん:2010/06/23(水) 01:49:17
いきなり関数の説明から入るのかよ。ハードル高い授業だぜ。

444 :デフォルトの名無しさん:2010/06/23(水) 01:49:59
int main()とかvoid main(void)とか書かれて混乱する入門者も多い
引数も戻り値も分かってないから当然だわな。関数を教えて、mainが特殊な関数だと教えればいいだろう

445 :デフォルトの名無しさん:2010/06/23(水) 01:50:36
それって「おまじない」とどう違う?

446 :デフォルトの名無しさん:2010/06/23(水) 01:50:56
意味が分かる

447 :デフォルトの名無しさん:2010/06/23(水) 01:51:23
>>414
みるだろ。
printfってどうなってんの^^と気軽にのぞいて凹むステップは必要。

448 :デフォルトの名無しさん:2010/06/23(水) 01:51:27
なんの意味だ

449 :デフォルトの名無しさん:2010/06/23(水) 01:51:42
意味論の意味だよ

450 :デフォルトの名無しさん:2010/06/23(水) 01:52:42
>>407
0は偽なので、その反対は真です。

451 :デフォルトの名無しさん:2010/06/23(水) 01:52:50
結局おまじないじゃねえか

452 :デフォルトの名無しさん:2010/06/23(水) 01:52:58
>>447
それには同意。用意されてるソートとかな

453 :デフォルトの名無しさん:2010/06/23(水) 01:54:04
>>451
それはお前がやってるプログラミングが今もおまじないだからだろ

454 :デフォルトの名無しさん:2010/06/23(水) 01:54:35
おっと罵倒きました!

455 :デフォルトの名無しさん:2010/06/23(水) 01:54:38
>>453
話をすりかえるな
馬鹿学生の話をしてんだよ?

456 :デフォルトの名無しさん:2010/06/23(水) 01:56:03
そもそもHello world.をprintfで出力することがおかしいとは考えないのか?
printfを用いるとしても、printf("%s\n", "Hello world.");と記述させるべきなのではないか?

457 :デフォルトの名無しさん:2010/06/23(水) 01:56:10
そりゃ馬鹿文系学生のための一般教養のプログラミング入門ならおまじないでいいよ

458 :デフォルトの名無しさん:2010/06/23(水) 01:57:21
おまじないで済ますなって話してんだよボケが!!!

459 :デフォルトの名無しさん:2010/06/23(水) 01:57:36
おまじないが気にくわない→なぜそれが必要なのかの説明がないから気にくわない
ここまでいっておきながら、
なぜprintfでなければならないのかの説明がない
というところに進めないところに馬鹿の壁を見た。

460 :デフォルトの名無しさん:2010/06/23(水) 01:58:18
>>459
なぜHello Worldでなければならないのかと同義だろ

461 :デフォルトの名無しさん:2010/06/23(水) 01:58:46
おまえはどこに進んでんだwwww

462 :デフォルトの名無しさん:2010/06/23(水) 02:00:17
おまじないって実生活ではただの気休めで効果があるのかないのかもわからないだろ。

プログラムにはそんな曖昧な要素が入り込む余地はないから、
おまじないって言葉を使うのはふさわしくない。

463 :デフォルトの名無しさん:2010/06/23(水) 02:00:52
で、なんという言葉ならいいんだ?

464 :デフォルトの名無しさん:2010/06/23(水) 02:01:03
願いを込めて、インクルード

465 :デフォルトの名無しさん:2010/06/23(水) 02:02:07
質問に答えてください

466 :デフォルトの名無しさん:2010/06/23(水) 02:02:50
説明すれば良いと言ってるのに、おまじないに代わる言葉を探してる時点でカス

467 :デフォルトの名無しさん:2010/06/23(水) 02:03:03
>>460
文字列をコンソールに出力しましょう。文字列は別に何でも良いですが、Hello world.と出力しましょう。
これで十分理由に値する。
しかし、なぜprintfを用いるのかについては理由が明らかになっていない。
まるでリテラルを出力するためにはprintfでなければならないと思い込んでいるかのようだ。

scanfにはなぜアドレスを渡さなければならないのか。これについての疑問が解けた直後、
なぜ可変個の引数が渡せるのかという疑問を持つべきである。

>>461
もちろん、明日に向かって進んでいる。その延長には明後日がある。

468 :デフォルトの名無しさん:2010/06/23(水) 02:04:07
>>462
実生活でも説明するのが面倒なときはおまじないって言うだろ
とくに子供に対して、前提となる知識や経験が不足している場合はとくに

プログラミングでも同様だよ
きちんと説明するには手間がかかりすぎるからおまじないって言われた、
つまり言われた側はまだまだレベルが低いってこと

469 :デフォルトの名無しさん:2010/06/23(水) 02:04:28
>>466
説明?どれの事だね?

470 :デフォルトの名無しさん:2010/06/23(水) 02:05:02
>>467
なんでもいいが、Hello worldと出力しましょう。なんでもいいが、printfを使いましょう

471 :デフォルトの名無しさん:2010/06/23(水) 02:06:11
結局、満場一致で
おまじないでいい
という認識でいいのか?
教授は正しかったんだよな?

472 :デフォルトの名無しさん:2010/06/23(水) 02:06:37
おまじない(笑)どんな低レベルな大学なんだよ、哀れ

473 :デフォルトの名無しさん:2010/06/23(水) 02:07:03
>>470
ばかだなぁ。

高校出た時点で知識レベルをそろえる必要なんてなくなるんだから
おまじないで済ませてよい学生と、済ませてはならない学生が出てくるのは確か。
しかし、教授にその説明を求めるのもまた間違いだろうな。
金さえ払えばなんでもできるなんて甘えは捨てないと。

474 :デフォルトの名無しさん:2010/06/23(水) 02:07:15
しかし、誰もおまじない以上の説明を書かないという。

475 :デフォルトの名無しさん:2010/06/23(水) 02:07:53
>>473
は?俺教授に質問した学生なの?

476 :デフォルトの名無しさん:2010/06/23(水) 02:08:18
同レベル

477 :デフォルトの名無しさん:2010/06/23(水) 02:08:25
え、もしかしておまじないどまりの人?

478 :デフォルトの名無しさん:2010/06/23(水) 02:09:05
>>475
ごめんね。後段はあなたへのレスじゃなかったんです。ツイート()なんです

479 :デフォルトの名無しさん:2010/06/23(水) 02:09:15
>>474
じゃあお前は今もおまじないと思ってるわけ?ちゃんと分かってるなら、そう説明すればいいだろ

480 :デフォルトの名無しさん:2010/06/23(水) 02:10:03
俺、教授じゃねえよ?

481 :デフォルトの名無しさん:2010/06/23(水) 02:10:26
>>479
なんかずれてんぞ。
この場で説明してあげるべきだと考えてるなら説明すればいいだろ、じゃないのか?

482 :デフォルトの名無しさん:2010/06/23(水) 02:10:58
>>474
プリプロセッサから解説しないといけないし
おまじないでいいと思うけどな。最初は不要な知識だし

483 :デフォルトの名無しさん:2010/06/23(水) 02:11:35
結局物事には順序がある。
初心者にいきなり関数の説明とかポインタの説明したってわかる訳がない。
順序立てて学習して行くことでいままでおまじないだった事が理解できるようになる。scanfに何で&を付けるのかもわかるようになる。それで良いじゃないか

484 :デフォルトの名無しさん:2010/06/23(水) 02:11:36
興味があって大学来てんだから、最初のプログラミングの講義受ける時点で半分以上はもうおまじないなんかじゃないんだよ
そこでおまじないとか言って二極化を促進させる教授パネェよ

485 :デフォルトの名無しさん:2010/06/23(水) 02:12:05
ある変数(10桁)の
1の位:
10の位:
100の位:
1000の位:
  ・
  ・
  ・
ってな感じで出力する簡単な計算式教えてください

486 :デフォルトの名無しさん:2010/06/23(水) 02:12:41
今の時代、大学なんて義務教育なんだよ

487 :デフォルトの名無しさん:2010/06/23(水) 02:14:05
>>462
おまじないには自己暗示効果があるから、信じて実行すれば効果があるよ。
少しでも疑ったら魔法は消える。

488 :デフォルトの名無しさん:2010/06/23(水) 02:14:46
おかげでレベルが下がった

ちゃんと試験でバカは落とせよ

489 :デフォルトの名無しさん:2010/06/23(水) 02:14:56
あれもこれもインクルードして、いっぱいおまじないすればいいね

490 :デフォルトの名無しさん:2010/06/23(水) 02:15:54
「プロセッサ」とか言ってるやつって何なの?
プロセスを「プロセッス」とか言うわけ?
「キッス」とか旧世代の言葉を使う人?w

491 :デフォルトの名無しさん:2010/06/23(水) 02:15:59
>>484
マジレスすると大学のプログラミング講義でおまじないレベルからやるのって興味ない人向けの授業だよ
興味のある人は入門なんか飛ばして次の講義を受けるべき

492 :デフォルトの名無しさん:2010/06/23(水) 02:16:54
>>489
あれもこれもインクルードするぐらいになったらもうおまじないじゃなくなってるだろ

493 :デフォルトの名無しさん:2010/06/23(水) 02:17:00
おまじないはある種のパターナリズムなんだよ。
『お前には分からんかもしれんけど俺が正しいから従え』というのを言い換えただけ。

494 :デフォルトの名無しさん:2010/06/23(水) 02:17:26
>>491
マジレスすると入門向けの講義受ければ休みまくっても余裕でいい成績が取れる

495 :デフォルトの名無しさん:2010/06/23(水) 02:17:46
>>488
さがんないよ。授業余裕なら単位取れる最低限の行動だけして残った時間を有意義に過ごせばいい。
それが大学だろ。

496 :デフォルトの名無しさん:2010/06/23(水) 02:18:13
プログラマになりたいのだったら小中学生のころにC言語くらいできるようになってんだろ
お前らもそうだったよな?

497 :デフォルトの名無しさん:2010/06/23(水) 02:18:43
まさかFラン大学じゃないだろうな
質の高い教育はそれなりの場所へ行かなきゃ受けられないんだよ
授業料さえ払えばなんでも教えてもらえると思うのが大間違い
これが格差というもの

498 :デフォルトの名無しさん:2010/06/23(水) 02:18:48
おまいら明日どうすんの?

499 :デフォルトの名無しさん:2010/06/23(水) 02:19:23
小学生で既にLisperだった

500 :デフォルトの名無しさん:2010/06/23(水) 02:19:52
>>490
http://www.intel.co.jp/jp/products/processor_number/
インテルにあやまれ

>>494
きちんとサボればおまじないが気になることなんて無い

501 :デフォルトの名無しさん:2010/06/23(水) 02:21:14
>>496
中学の頃はPC-8001にカセットテープの時代だったのでCコンパイラが動く環境がありませんでした

502 :デフォルトの名無しさん:2010/06/23(水) 02:21:42
>>500
サボりまくっても2chにこんだけおまじないの人がいるんだから気になるよ

503 :デフォルトの名無しさん:2010/06/23(水) 02:22:01
くたばれジジイ

504 :デフォルトの名無しさん:2010/06/23(水) 02:24:57
てか、そもそもその授業の単位を取得した時点で#include<stdio.h>がなんであるかの
具体的な説明をする予定がないんじゃないの?

505 :デフォルトの名無しさん:2010/06/23(水) 02:26:38
>>485
while(n) {
printf("%d\n", n % 10);
n /= 10;
}

506 :デフォルトの名無しさん:2010/06/23(水) 02:31:11
なんかマルチしまくってんのがいるなw

507 :デフォルトの名無しさん:2010/06/23(水) 02:38:27
>>505
ありがとうございます

508 :デフォルトの名無しさん:2010/06/23(水) 03:19:18
数学が(好き|得意)な奴には、「おまじない」が嫌いな奴が多い。
数学には「おまじない」など存在しない。
数学においては、新出の語句や定理は、必ずそれ以前に学習した定義・定理から導き出せる。
>>386の言い分もわからんでもない。
むしろ、「おまじない」になんの疑問も抱かない奴よりは見込みある。


教授にはぐらかされても放置せず、自分で調べようとしているならば、だが。

509 :デフォルトの名無しさん:2010/06/23(水) 03:22:44
導き出せはしないだろ。
決めごとなんだから。

510 :デフォルトの名無しさん:2010/06/23(水) 03:47:21
>>508
その定義・定理を自分で調べようともせず教授に教えろと言ってんだよ
どこに見込みがあるってんだ

511 :デフォルトの名無しさん:2010/06/23(水) 04:06:01
>>510
ちゃんと最後の行読みなよ。

512 :デフォルトの名無しさん:2010/06/23(水) 04:24:47
>>511
ちゃんと今までの話を読んだか?
最後の行はまるで的外れ。

513 :デフォルトの名無しさん:2010/06/23(水) 04:30:08
詭弁の特徴のガイドライン

1:事実に対して仮定を持ち出す
2:ごくまれな反例をとりあげる
3:自分に有利な将来像を予想する
4:主観で決め付ける
5:資料を示さず自論が支持されていると思わせる
6:一見関係ありそうで関係ない話を始める
7:陰謀であると力説する
8:知能障害を起こす
9:自分の見解を述べずに人格批判をする
10:ありえない解決策を図る
11:レッテル貼りをする
12:決着した話を経緯を無視して蒸し返す
13:勝利宣言をする
14:細かい部分のミスを指摘し相手を無知と認識させる
15:新しい概念が全て正しいのだとミスリードする

514 :デフォルトの名無しさん:2010/06/23(水) 04:30:22
>>512
もうすこし読解力をあげましょう。
または、もうすこし落ち着きましょう。
または、良い睡眠をとりましょう。

515 :デフォルトの名無しさん:2010/06/23(水) 04:34:28
>>514
まさに詭弁だな。
おまえのことだよ、わかってるか?

516 :デフォルトの名無しさん:2010/06/23(水) 04:50:47
>>506
本人乙

517 :デフォルトの名無しさん:2010/06/23(水) 07:38:15
金払って受講してるんだから教授は辞書と同じ、質問しないと損だ。
授業でおまじないと言うのはいいが教えを乞いにきた学生に詳しく教えないのはおかしい。
ある講義で質問しに行ったら聞いてないことまで長々と話す教授もいた。
その教授はハズレ。

518 :デフォルトの名無しさん:2010/06/23(水) 08:12:29
質問の良し悪しもあるが、せっかく質問したのに拍子抜けな答えしか返ってこない教授はつまらんからな
教授からすれば、馬鹿な質問はするなってことなんだろうけど。学生からすれば馬鹿な回答なんだよ

519 :デフォルトの名無しさん:2010/06/23(水) 08:17:14
講義中にチラっと聞いただけなんじゃねーの?

520 :デフォルトの名無しさん:2010/06/23(水) 12:38:31
質問者のレベルに合わせたんだよ

521 :デフォルトの名無しさん:2010/06/23(水) 13:08:45
uzai

522 :デフォルトの名無しさん:2010/06/23(水) 13:26:23
うざい

523 :デフォルトの名無しさん:2010/06/23(水) 15:43:47
メイン文で宣言した変数に分割した別のファイルでその変数に代入して
メイン文でも反映されてるようにしたいんだけどいまいちポインタの使い方がわからない・・・
だれか教えてくれ

524 :デフォルトの名無しさん:2010/06/23(水) 15:52:58
参照渡し
http://codepad.org/VJwuQQT9

525 :デフォルトの名無しさん:2010/06/23(水) 19:56:22
おまじないより魔法のほうがしっくりくるよな。


526 :デフォルトの名無しさん:2010/06/23(水) 20:08:49
マジックコード

527 :デフォルトの名無しさん:2010/06/23(水) 21:51:58
>>524

そりゃ参照渡しじゃねーよ

528 :デフォルトの名無しさん:2010/06/23(水) 22:03:15
枕詞だろ。

529 :デフォルトの名無しさん:2010/06/23(水) 22:15:02
>>524
Cには参照渡しはねーんだよ
全部値渡し
それは「アドレス」を値で渡しているだけ

530 :デフォルトの名無しさん:2010/06/23(水) 22:17:53
あるよバーカ

531 :デフォルトの名無しさん:2010/06/23(水) 22:19:33
質問者の意図が参照渡しに該当してたからな
まあ言いたいことは分かるが、言い方がなんかダサいよ。なんで喧嘩腰というか、キレてんの?

532 :デフォルトの名無しさん:2010/06/23(水) 22:21:26
>>531>>527>>529宛て。ポインタ渡しというなら分かるけど、断固として値渡しと主張する意味は分からん

533 :デフォルトの名無しさん:2010/06/23(水) 22:26:14
>>529の言わんとするところは分かるが、怒らなくてもよくね。
ポインタの値渡しってのもなんか回りくどいしさ。

534 :デフォルトの名無しさん:2010/06/23(水) 22:28:54
void main(void)
{
int *GetX(void)
{
return &x;
}


int *pGetX;
pGetX = GetX();
pGetX += 10;

535 :デフォルトの名無しさん:2010/06/23(水) 22:32:32
>>534
ミス

536 :デフォルトの名無しさん:2010/06/23(水) 22:44:08
ドンマイ

537 :デフォルトの名無しさん:2010/06/23(水) 22:47:09
>>534
こいつなにしようとしたの?

538 :デフォルトの名無しさん:2010/06/23(水) 22:47:47
>>532
キレてるようには見えないなぁ。
馬鹿にしてるようには見えるけど。

539 :デフォルトの名無しさん:2010/06/23(水) 22:50:23
馬鹿にしてるようには見えない

540 :デフォルトの名無しさん:2010/06/23(水) 23:02:55


541 :デフォルトの名無しさん:2010/06/23(水) 23:48:19
人工無能に詳しい人いる?
居たら何で勉強したのか教えてくれ
それとオススメの本とかあったらそれも

542 :デフォルトの名無しさん:2010/06/23(水) 23:56:28
人工無能は勉強しすぎると味わいが無くなる気がする

543 :デフォルトの名無しさん:2010/06/24(木) 00:09:05
まあいいおてんき

544 :デフォルトの名無しさん:2010/06/24(木) 01:55:07
ふーん

545 :デフォルトの名無しさん:2010/06/24(木) 03:40:41
名無しさんはどんな仕事してるの?

546 :デフォルトの名無しさん:2010/06/24(木) 03:43:23
農家

547 :デフォルトの名無しさん:2010/06/24(木) 03:45:34
わぁ!カッコよさそうな仕事ですね^^

548 :デフォルトの名無しさん:2010/06/24(木) 03:49:32
別に

549 :デフォルトの名無しさん:2010/06/24(木) 04:54:16


550 :名無し:2010/06/24(木) 07:56:44
ポインタとメモリアドレスの違いなんだけどさ

同じ表現と考えていいのか?

105 :デフォルトの名無しさん:2010/06/14(月) 18:40:33
>>102
文字列リテラルはそれ自体がchar *と言う型のポインタ値として扱われる。
つまり、printf("Hello\n");と書いただけで、printf()関数にcharへのポインタを渡すと言うプログラムになっているわけだ。

これあるじゃん?

char *だからさ "aiueo"だとしたら まずaiueoをメモリ上に確保して a,i,u,e,o,\0みたいな16進数だけど そして確保したら その先頭のアドレスaの場所のアドレスを返すんだろ?

aの場所が100番地だったら100をchar *へ渡すみたいな?

っで気になるのが ポインタを返す と アドレスを返すって同じ意味でとらえていいのか?

これは先頭のアドレスを返してるよな? char *に先頭のアドレスを渡している


ポインタを返す と アドレスを返す これって同じ意味なのか?

ポインタ変数を返すなら違うが ポインタとは で検索したら e-wordではアドレスを保持する変数とあるが

それならポインタ変数=ポインタだよな?どうなんだ?

ポインタを返す を アドレスを返す  検索しても ポインタを返す関数 アドレスを返す関数とあるが

だれか教えてくれー

551 :デフォルトの名無しさん:2010/06/24(木) 08:17:10
文字列リテラルは配列な。

552 :デフォルトの名無しさん:2010/06/24(木) 09:27:31
>>550
メモリアドレス→メモリ上の住所を示す「定数」
ポインタ→任意のメモリアドレスを示すことができる「変数」

553 :デフォルトの名無しさん:2010/06/24(木) 09:38:33
char *a;

sizeof a と sizeof "aiueo" は違う

554 :デフォルトの名無しさん:2010/06/24(木) 09:48:36
俺の感覚
アドレス = 型情報は含まない。
       "単なる住所"
ポインタ = アドレスと共に型情報も含む
       加減算や指し先の参照等で、与えられた型に応じて評価してくれる
       "どういう住人が住んでいるかを示している住所"

555 :名無し:2010/06/24(木) 10:21:07
よくわからないが
"aiueo"はchar p[10]="aiueo";

ポインタを返すとは 先頭アドレスのpを返すこと?
配列の場合は&をつけなくていいんだよな先頭は
char *a;
a=p;
アドレスを返す場合は&p[0]などでいいんだよな?

文字リテラルは配列になるので &をつけなくても先頭のアドレスをポインタというのか?


556 :名無し:2010/06/24(木) 10:37:49
char *p="abc";
があるとすると
>>この "abc" という式を評価すると、先頭の文字 'a' が格納されたメモリ領域を示すポインタが返ってきます!
と書いてあるのだが、100番地から始まったとして
a    b   c    \0
100番地,101番地,102番地,103番地
この領域をひっくるめてポインタというであっているのか

100番地とかはアドレスであり ポインタを返すという表現は
100~103番地全体を返すということ?

557 :名無し:2010/06/24(木) 10:39:31
100~103全体がポインタで
100や101それぞれはアドレスでおk?

558 :デフォルトの名無しさん:2010/06/24(木) 10:44:59
ポインタはアドレスを抽象化したもの。

559 :デフォルトの名無しさん:2010/06/24(木) 11:00:06
名前:ピッコロ
アドレス:ナメック星一番地
ポインタ:住所はナメック星一番地、俺はピッコロだぁああああ

560 :デフォルトの名無しさん:2010/06/24(木) 11:05:07
まぁビットから

561 :デフォルトの名無しさん:2010/06/24(木) 12:26:09
>>556
通りすがりの元プログラマーです
ポインタは「アドレス用の変数」と思っておけばOKです
例えばアドレスが16ビットの環境なら

char *a;
int *b;
long *c;
printf("%d %d %d",sizeof(a),sizeof(b),sizeof(c));

↑16ビットなので全て2になる…はず(今、手元にCの環境が無いので確認できないw)

ポインタの型は
*c、← cにはアドレスが入ってるので、その位置にLong型があると解釈される
b++ ← int型ポインタなので、アドレスに(16ビット環境なら)+2される
などの時に必要になります

562 :デフォルトの名無しさん:2010/06/24(木) 12:28:01
そんな決まりあったっけ?

563 :デフォルトの名無しさん:2010/06/24(木) 12:29:35
ありますよ
調べてみてください

564 :デフォルトの名無しさん:2010/06/24(木) 12:40:19
いまどき16ビット環境で語っちゃう人って……

565 :デフォルトの名無しさん:2010/06/24(木) 12:43:34
まぁ揚げ足取りになるけど
ポインタ全部が同じ大きさであるような言い方は良くない

566 :デフォルトの名無しさん:2010/06/24(木) 12:48:07
というか、ポインタのサイズを得々と語ってるけど
たからどうしたとしか思えない

567 :デフォルトの名無しさん:2010/06/24(木) 13:27:39
ですね

568 :デフォルトの名無しさん:2010/06/24(木) 16:04:53
そもそも返さねぇよ。ファンクシャンじゃねぇんだから。

569 :デフォルトの名無しさん:2010/06/24(木) 17:13:14
>>554にある型情報の型ってどんな情報?
で型はどのように決められるの?

570 :質問:2010/06/24(木) 17:13:52
国語、社会、理科の3科目の合計と平均を求める問題で、
http://www.geocities.jp/kenji_y0328/crenshu/renshu/r011.gif
こちらのHPにある解答を実行してみたら、
goukei=2144332132 average is=2442545234
のような表示結果が出てきてうまくいきませんでした。

どこが違うのかどなたか教えていただけますか?
よろしくお願いします

571 :デフォルトの名無しさん:2010/06/24(木) 17:15:21
>>570
ここはエスパーを召還するスレか?
うまくいかなかったソースを貼れよ

572 :デフォルトの名無しさん:2010/06/24(木) 17:17:41
ポインタ=アドレス値 と考えていいよ
>>557
>100~103全体がポインタ
仮にC言語に文字列型があれば、その例では、全体は(文字列型)

573 :デフォルトの名無しさん:2010/06/24(木) 17:33:48
仮の話はいりません。C言語に文字列型はありません。

574 :554:2010/06/24(木) 17:36:17
>>569 俺の感覚の話なので、イメージで

宣言時に * の前に型指定してるじゃん(ex int * 等) それを指して型情報を持っている と捉えてる。
void * 中の void も 型無し という型指示されている という意識ね

 int a[3]
 int *p = a;
 int *q = a + 2;
 void *hoge = a;

q-p は合法で sizeof(int) に関係無く 2 を返すし hoge - p は非合法。

アドレスは、ただの整数値 という意識

575 :デフォルトの名無しさん:2010/06/24(木) 17:45:16
> sizeof(int) に関係無く 2 を返すし
ヴォケ

576 :デフォルトの名無しさん:2010/06/24(木) 17:48:16
>>575
ポインタ - ポインタ の値だぞ? アドレスの距離を返さずに、要素差返すんだけど?

577 :デフォルトの名無しさん:2010/06/24(木) 17:56:09
煽る前に確認しろってことだな

578 :デフォルトの名無しさん:2010/06/24(木) 18:21:56
>>576
ポインタの差を出すことは合法だろ
専用の型まであんのに

579 :デフォルトの名無しさん:2010/06/24(木) 18:25:37
>>570
#include <stdio.h>

main()
{
  int kokugo,shakai,rika;
  int goukei,heikin;

  printf("国語の点数=");
  scanf("%d",&kokugo);
  printf("社会の点数=");
  scanf("%d",&shakai);
  printf("理科の点数=");
  scanf("%d",&rika);

  goukei = kokugo + shakai + rika;
  heikin = goukei / 3;

  printf("合計=%d  平均=%d \n",goukei,heikin);
  return 0;
}

580 :デフォルトの名無しさん:2010/06/24(木) 18:27:59
いやintじゃねぇだろって言いたかったんだ
レスも安価も間違っちゃってるが

581 :デフォルトの名無しさん:2010/06/24(木) 19:04:55
>>570
>>579
正常に動作している。
cygwin 1.7/gcc 4.3.4/Windows XP SP3

582 :デフォルトの名無しさん:2010/06/24(木) 19:07:19
cygwin()笑い

583 :名無し:2010/06/24(木) 19:13:26
ポインタのことだが
char *p="ABC";

ポインタを返すという表現をのせてるサイトがあったが

abcを確保して
先頭のアドレスを返すって意味と同じだったらしい
ポインタを返すって書くんじゃなくて abcが保存されてる場所の先頭アドレスを返すっていみ

すっきりしたよ

584 :デフォルトの名無しさん:2010/06/24(木) 20:09:13
const char* p = "ABC"; なのに
char *p="ABC";
でOKなの?

585 :デフォルトの名無しさん:2010/06/24(木) 20:14:04
規格で保証されている
内容書き換えちゃだめだけど

586 :デフォルトの名無しさん:2010/06/24(木) 20:22:53
>>584
C言語/C++03以前では非constポインタへの暗黙変換が許される

587 :デフォルトの名無しさん:2010/06/24(木) 20:40:46
つかC言語では文字列リテラルを評価した時の型はchar*と違ったか?
確認して書いたわけじゃないんで記憶違いならすまん。

588 :デフォルトの名無しさん:2010/06/24(木) 20:43:43
>>587
sizeof は char* とは異なる

589 :デフォルトの名無しさん:2010/06/24(木) 20:45:39
>>586
C++03でも許されてるはずだけど
「以前」ってのは含むのか含まないのか

590 :デフォルトの名無しさん:2010/06/24(木) 20:46:53
>>587
文字列リテラルは array of const char で、当然 const char* に暗黙変換可能
ただし、例外的に char* に暗黙変換可能

591 :デフォルトの名無しさん:2010/06/24(木) 21:57:16
>>589
一般ピーポーじゃあるまいし含むのが普通だろう

592 :デフォルトの名無しさん:2010/06/24(木) 21:58:54
void f(char const x); // f(char)でも呼べるのに

template<typename T>class A;
void f(A<char const>x); // void f(A<char>); で呼べないのは不便だとおもう。

593 :名無し:2010/06/24(木) 22:06:51
一般ピーナッツだろ

ねえ、int a;
&a=0xbffff978;とか代入できないんだが何故?

アドレスを直接いれるってのは無理なの?

594 :デフォルトの名無しさん:2010/06/24(木) 22:10:13
キャストしる
0は特別扱い

595 :デフォルトの名無しさん:2010/06/24(木) 22:11:03
1+2=5;
と同じ

596 :594:2010/06/24(木) 22:13:34
いや、ちげえ
なんだそれ

597 :デフォルトの名無しさん:2010/06/24(木) 22:24:06
>>593
int a;
*(&a)=0xbffff978;


598 :デフォルトの名無しさん:2010/06/24(木) 22:27:03
>>593
int *a = (int*)0xbffff978;
*a = 0;

メモリマップドI/Oならvolatileつけた方が良い

599 :デフォルトの名無しさん:2010/06/24(木) 22:27:11
いやそれ只のa =

600 :デフォルトの名無しさん:2010/06/24(木) 22:28:41
>>599>>597

601 :デフォルトの名無しさん:2010/06/24(木) 22:30:37
そのアドレスがすでに使われてたりしないの

602 :デフォルトの名無しさん:2010/06/24(木) 22:31:10
なんでアドレスとポインタの区別がつかないんだ?
アドレスは定数だっつーのに代入しようとすんなよ

603 :名無し:2010/06/24(木) 22:31:53
>>597,598

もやっと解消してくれてありがとう^w^b
アドレスを直でいれられたとは初めてしったお

604 :デフォルトの名無しさん:2010/06/24(木) 22:44:28
>>601
むしろシステム他に使われてるからこそ、そこを指したいだろ

605 :デフォルトの名無しさん:2010/06/24(木) 22:49:46
ああ、任意の場所を確保しようとしてるわけじゃないのか
配列と混同した

606 :デフォルトの名無しさん:2010/06/25(金) 00:43:54
本棚には入門者の本で埋め尽くされています。
いい加減入門レベルから卒業したいんですがどういうプログラムがかけるようになれば
中級、上級者になれるのですか。
私は、他の人が作成したプログラムにけちをつけるくらいの力は持っています

607 :デフォルトの名無しさん:2010/06/25(金) 00:46:45
自分が作りたいプログラムがすぐに作れるようになったら

608 :デフォルトの名無しさん:2010/06/25(金) 01:09:39
>>606
入門編としてマスターマインドを作ってみる

609 :デフォルトの名無しさん:2010/06/25(金) 01:12:23
コンパイラをゼロから書けるようになったら「入門」だろ。

610 :デフォルトの名無しさん:2010/06/25(金) 01:13:29
>>609
どこに入門するんだよ
ハードルたけぇよ

611 :デフォルトの名無しさん:2010/06/25(金) 01:15:34
まーた口だけプログラマーかよ
gccレベルのもん書いてから偉そうなこと言えっつーの

612 :デフォルトの名無しさん:2010/06/25(金) 01:16:20
>>611
偉そうなだけの人キタw

613 :デフォルトの名無しさん:2010/06/25(金) 01:28:26
OSとコンパイラなら、どっちが先かえ?

614 :デフォルトの名無しさん:2010/06/25(金) 01:32:02
比較するようなもんじゃない

615 :デフォルトの名無しさん:2010/06/25(金) 02:02:05
規格に書いてある内容が一通り理解出来るまでが入門。
ある一つの処理系について何処が処理系依存がどう動くか、
その処理系の独自拡張や使えるライブラリ群に精通するぐらいが中級。
世にある代表的な多くの処理系について中級レベルに
分かるようになると上級。

実際に複雑なプログラムを作るには、Cの技術力より
設計やテストの技術、そして作りたい物の分野に対する
知識の方が重要です。

つまり>>606はスレ違い。
強いて言えば、コンパイラ作れて中級の入口じゃね?
構文解析手法やら機械語やらCそのものとは
あまり関係ない知識もたらふく要るけど。

616 :デフォルトの名無しさん:2010/06/25(金) 02:16:03
>>612
あーん?

617 :デフォルトの名無しさん:2010/06/25(金) 09:41:33
>>616
あなたの書いた「gccレベルのもん」を拝見させていただこうか

618 :デフォルトの名無しさん:2010/06/25(金) 10:27:34
gccレベルという意味がわからん。

何と比べて、どの部分がどう高いんだ???

CでなくC++という意味か?
Unix系のOSが扱えるということ?

619 :デフォルトの名無しさん:2010/06/25(金) 10:37:23
gccそのものを書けるぐらいのレベルって話だろw

620 :デフォルトの名無しさん:2010/06/25(金) 13:00:01
gccって、あれ一人で作ってんのか?

621 :デフォルトの名無しさん:2010/06/25(金) 15:41:51
gccを書いて偉そうな事を言ってる人もいるが
あれはあれで聞く気になれないよなw

622 :デフォルトの名無しさん:2010/06/25(金) 16:06:35
>>621
そんな偉そうなことを言えるほどお前は有能なのか
身の程を知れよ

623 :デフォルトの名無しさん:2010/06/25(金) 16:14:54
有能な>>622がgccをつくってくれるそうですよ

624 :デフォルトの名無しさん:2010/06/25(金) 17:10:12
> コンパイラをゼロから書ける

と言われて gcc くらいしか発想にない頭の不自由な方イタすぎ

625 :デフォルトの名無しさん:2010/06/25(金) 17:14:30
16進表記のテキストをバイナリ保存しなおすだけでもコンパイラと呼んでいい?

626 :デフォルトの名無しさん:2010/06/25(金) 17:21:54
>>624
大学1年だろ、プログラミングを始めてまだ半年も経っていないから…

627 :デフォルトの名無しさん:2010/06/25(金) 17:25:27
コンパイラのデザインと実装の講義・実験があったのは2回生のときだったなぁ。
今でもgccレベルのものなんて容易には作れないが。

628 :デフォルトの名無しさん:2010/06/25(金) 19:38:49
人の作成したプログラムが読めるようになれば中級レベルだな。
そして人の作成したプログラムの欠陥部分が見つけられるようになれば上級。

629 :デフォルトの名無しさん:2010/06/25(金) 19:44:22
自分で書いたプログラムの欠陥も見つけられないのは何級ですか?

630 :デフォルトの名無しさん:2010/06/25(金) 19:48:19
>>629
中級だな。少なくとも何を書こうとしてるか本人が一番よくわかってるはず。

631 :デフォルトの名無しさん:2010/06/25(金) 21:13:03
俺の書いたものには欠陥が存在しないから、欠陥を見つけるのは不可能。


632 :デフォルトの名無しさん:2010/06/25(金) 21:20:31
木を隠すには森か

633 :デフォルトの名無しさん:2010/06/25(金) 22:06:23
>>631
簡単でいいからプログラム見せなさい。
関数の復帰値チェックしてなかったらアウトだよ

634 :デフォルトの名無しさん:2010/06/25(金) 22:17:53
int main(){
return 0;
}


635 :デフォルトの名無しさん:2010/06/26(土) 00:34:11
exit(0); の方がいいだろ。

636 :デフォルトの名無しさん:2010/06/26(土) 00:48:08
処理系に欠陥があるかもしれない

637 :デフォルトの名無しさん:2010/06/26(土) 02:19:48
>>631
何か作って公開し、バグを見つけたらお金あげる^^
というクヌース先生の2番煎じをやるといいよ

638 :デフォルトの名無しさん:2010/06/26(土) 05:05:00
ASCII ってさ、なんで引用符を片方ずつしか用意しなかったんだろうな。
せめて「 ”」と「“ 」は分けてほしかった。
" だけではねえ。


639 :デフォルトの名無しさん:2010/06/26(土) 05:06:15
>>638
判別しにくいから勘弁してくれw

640 :デフォルトの名無しさん:2010/06/26(土) 05:32:31
>>639
判別しにくい? どういうこと?
括弧とか片方だけだと不便だろ?
クォーテーションだって開始と終了があったほうが便利じゃん。


641 :デフォルトの名無しさん:2010/06/26(土) 10:21:07
struct A{
int a;
int b;
int* c;
};
typedef struct A A;

void func(const A* reference){
reference->c[3] = 7;
}

int main(void)
{
A tmp;
int array[10] = {0};

tmp.c = array;
func(&tmp);
return 0;
}

以上のように、func内でreference->cが指す値を書き換えられるのは
理解しているのですが、cが指す値もread-onlyにする方法はないでしょうか。
cはintへの配列にはわけあって出来ません。

642 :デフォルトの名無しさん:2010/06/26(土) 11:55:52
初級なのでint* const c;な別名構造体にキャストするとかくらいしか思いつきません

643 :デフォルトの名無しさん:2010/06/26(土) 12:24:14
const int* c; にすりゃいいじゃん

>>642
それ、c 自体が const になるだけで
c が指す先は const にならない

644 :デフォルトの名無しさん:2010/06/26(土) 12:30:05
constの発音は「こんすと」でいいの?

645 :デフォルトの名無しさん:2010/06/26(土) 12:33:12
>>643
別名構造体はconst A*の代わりに、const B*のように使用します

646 :デフォルトの名無しさん:2010/06/26(土) 12:36:15
if elseってelseの処理の方が早いんですか?

オシロでデューティ比を50%にしようとif elseを使ったのですが50%にはならず・・・

原因はそこにあるのかなぁと

647 :デフォルトの名無しさん:2010/06/26(土) 12:46:22
生成されたコードを元にプロセッサの分岐予測/パイプライン/キャッシュ、メモリなどの
デバイスに繋がるバスを考慮して妥当な時間差かどうか自分で判断するしかないんじゃ…

648 :デフォルトの名無しさん:2010/06/26(土) 12:52:46
簡単に言うと、ifで0を出力、elseで1を出力で

このif elseをwhileで無限ループさせているだけです

この場合ifとelseの出力時間は等しくなると思うのですが

結果としてはどちらかの出力時間が長かったのです

649 :デフォルトの名無しさん:2010/06/26(土) 12:55:25
>>644
「こんすたんちのーぶる」

650 :デフォルトの名無しさん:2010/06/26(土) 12:55:42
条件は(i%2==0)で、単なる奇数か偶数かの分岐です

if else処理後にi++も入れてます

651 :デフォルトの名無しさん:2010/06/26(土) 12:59:32
>>649
のーぶるw

652 :デフォルトの名無しさん:2010/06/26(土) 13:03:43
>>648
分岐予測でずれんじゃないかな
分からんけど
まず、どうコンパイルされたのかアセンブラを見せてくれ

653 :デフォルトの名無しさん:2010/06/26(土) 13:09:21
main()
{
int x,i;
while(1)
{
if(i%2==0)
{
call(0x0110,(void*)0);
}
else
{
call(0x0100,(void*)0);
}
i++;
}
}



654 :デフォルトの名無しさん:2010/06/26(土) 13:18:05
iの初期値0が抜けました

655 :641:2010/06/26(土) 13:18:25
>>643
この場合は const int* c; にすればよいですね。

でも実際に扱っているソースでは、
func1(const A*);
func2(A*);
というように複数あり、func2では値を変えたいのです。

656 :デフォルトの名無しさん:2010/06/26(土) 13:23:02
そういう理由ならAをどうにかするんじゃなくて
cを const int * hoge;に代入して取り回せばいいだろ

657 :647:2010/06/26(土) 13:25:07
>>653
生成されたコード→コンパイル/リンクした結果のアセンブラコード
プロセッサ→CPUのこと

普通計測された時間があって、その理由を推測するならソフト的には処理を
分割してより細かく計測していって原因追求するんだけど、もうそのレンジに
ないのでアセンブラコードとCPUやその他のペリフェラルの特性を元に
自分で推測するしかないよ。

658 :デフォルトの名無しさん:2010/06/26(土) 13:27:01
>>657
ご回答ありがとうございました。

659 :641:2010/06/26(土) 14:10:12
>>656
それでは構造体メンバをすべて別々に引数にして渡す必要がありますね。
でも仕方なさそうですね。

660 :641:2010/06/26(土) 14:39:55
struct A{
int a;
int b;
int* c;
};
と、
struct B{
int a;
int b;
const int* c;
};
を宣言しておいて、
func1(const B*);
func2(A*)

引数で渡すときに、(const B*)A* とキャストすれば大丈夫なことが分かりました。
こんなことしてるソースコードは見たことないのが不安ですが……

661 :デフォルトの名無しさん:2010/06/26(土) 15:50:15
すいませんこれって何て読めばいいんですか?→ stdio.h 
ストゥディオ?エスティディオ?


662 :デフォルトの名無しさん:2010/06/26(土) 15:51:13
「すたっどあいおー」に1票

663 :デフォルトの名無しさん:2010/06/26(土) 15:57:23
スタンダードIO ドット エッチ

664 :デフォルトの名無しさん:2010/06/26(土) 15:57:53
すたんだーどあいおーへっだ

665 :デフォルトの名無しさん:2010/06/26(土) 16:33:22
スタンダードの略なんですね。ありがとうございます。

666 :デフォルトの名無しさん:2010/06/26(土) 16:35:41
>>665
スタンダード インプット アウトプット だよ

667 :デフォルトの名無しさん:2010/06/26(土) 16:37:14
スタヂオとか、猛烈に馬鹿な読み方してる奴いるよな。生きてて恥ずかしくないのかね

668 :デフォルトの名無しさん:2010/06/26(土) 16:40:09
ストゥーディオゥだよな

669 :デフォルトの名無しさん:2010/06/26(土) 16:49:09
エスティーディーアイオードットエッチに決まってるじゃないか

670 :デフォルトの名無しさん:2010/06/26(土) 17:06:07
セックスアンドザエッチ

671 :デフォルトの名無しさん:2010/06/26(土) 21:21:00
時間的に等間隔でxが増減する(例えば0,1,2,3,2,1,0,1,2,3、のように5fps毎に変化する)ような
関数なり記述方法はありませんか?

よろしくお願いします。
可能ならば1fps毎に1ずつ増えるカウント cntを使用して

672 :デフォルトの名無しさん:2010/06/26(土) 21:24:15
int Cnt(){ return cnt; }

673 :デフォルトの名無しさん:2010/06/26(土) 21:24:39
>>671
x=3-abs((cnt%5)-3)

674 :デフォルトの名無しさん:2010/06/26(土) 21:26:40
>>673
%6 にしてちょ

675 :デフォルトの名無しさん:2010/06/26(土) 21:29:25
>>671
int foo[]={0,1,2,3,2,1};
return foo[cnt%(sizeof(foo)/sizeof(foo[0]))];


676 :デフォルトの名無しさん:2010/06/26(土) 21:29:48
>>673
なるほど絶対値でやればできますね、即レスありがとうございました。

677 :デフォルトの名無しさん:2010/06/27(日) 10:12:30
いえいえ

678 :デフォルトの名無しさん:2010/06/27(日) 10:29:14
ポインタをローカル変数のように扱う方法を記述する

要は実体を確保すればいい

int main(void)
{
int *p;

p = &p; //ポインタ自身が持つアドレスを渡す。これでpは通常のローカル変数のように扱える。
}

679 :デフォルトの名無しさん:2010/06/27(日) 10:38:06
で?

680 :デフォルトの名無しさん:2010/06/27(日) 10:41:10
>>678
ポインタをローカル変数として扱う方法を教えてあげるよ
int main(void)
{
int *p;
}

681 :678:2010/06/27(日) 10:43:40
#include <stdio.h>
int main(void)
{
int *p;
p = &p; //ポインタ自身が持つアドレスを渡す。これでpは通常のローカル変数のように扱える。
*p = 3;
printf("%d\n",*p);
return 0;
}

コンパイルかけた結果、警告メッセージだけですんだ。どうやら問題ないらしい
mm.c: In function `main':
mm.c:7: warning: assignment from incompatible pointer type

$ ./a.exe
15805 [main] a 3244 _cygtls::handle_exceptions: Error while dumping state
(probably corrupted stack)Segmentation fault (core dumped)

682 :678:2010/06/27(日) 10:47:02
ちゃんとアドレス渡してるのになぜ失敗するのか分かりません。

683 :デフォルトの名無しさん:2010/06/27(日) 11:02:34
>>682
*p = 3; が未定義動作だからじゃないか?
副作用居完了点をまたがずに参照と代入を行ってるから

684 :デフォルトの名無しさん:2010/06/27(日) 11:14:51
>>682
>>683
いや二回目でどこ参照してるか考えろよアホどもwwww

685 :デフォルトの名無しさん:2010/06/27(日) 11:17:29
#include <stdio.h>
int main(void)
{
int *p;
p = &p; //ポインタ自身が持つアドレスを渡す。これでpは通常のローカル変数のように扱える。
*p = 3;
printf("%d\n", (int)p);
return 0;
}

こうすれば理解できるか?

686 :デフォルトの名無しさん:2010/06/27(日) 11:18:53
p に p のアドレスが入ってるから
*p = 3; は p = (int*)3; と同じ動作になる
p には既に p のアドレスが入ってないどころか
単なる 3 という数値しか入ってないので
*p が変な所を指して死ぬ

687 :デフォルトの名無しさん:2010/06/27(日) 13:48:45
あーん、アドレス0x00000003が変なところとでも?

688 :デフォルトの名無しさん:2010/06/27(日) 14:11:06
組み込みなら意味があるかもしれないけど
メモリ保護のあるOSならゼロアドレスを含むページは
読み書き禁止にするのが普通だ

689 :デフォルトの名無しさん:2010/06/27(日) 14:20:41
// pの場所をメモリ番地 0x123 と仮定して考えてみよう
int* p;    // メモリ番地 0x123 の値は不定
p = &p    // メモリ番地 0x123 の値は 0x123

*p      // "メモリ番地 0x123 に書いてあるメモリ番地 0x123" の内容を読んだり書いたりする命令
*p = 3    // この場合は、メモリ番地 0x123 に書いてあるメモリ番地 0x123 の場所に、数字の 3 を記録する

// この時点で、 メモリ番地 0x123 に書いてある数字は 0x123 ではなく 3 になっている。

//次に、*p として参照すると
*p      // これはメモリ番地0x123 に書いてあるメモリ番地 3 を参照する命令となる。
       // もちろんメモリ番地 3 には、まだ何もデータを書き込んでない。(それどころか、そこが使えるかどうかも不明)

だから何らかのメモリエラーが予想されますし、案の定、エラーでで止まりませんか?

690 :デフォルトの名無しさん:2010/06/27(日) 14:31:56
>>689
わかりやすい解説どうもありがとうございました

691 :デフォルトの名無しさん:2010/06/27(日) 18:10:07
>>690
いえいえ

692 :デフォルトの名無しさん:2010/06/27(日) 18:11:27
>>690
気にすんなよ

693 :デフォルトの名無しさん:2010/06/27(日) 18:17:09
>>690
なあに、困ったときはお互い様よ

694 :デフォルトの名無しさん:2010/06/27(日) 18:21:12
>>690


695 :デフォルトの名無しさん:2010/06/27(日) 19:08:33
おまいら、イイやつだな。

696 :デフォルトの名無しさん:2010/06/28(月) 00:06:22
>>690
答え甲斐のある質問どうもありがとうございました

697 :デフォルトの名無しさん:2010/06/28(月) 09:04:55
知識0からCを始めて2ヶ月
早くもCUIの連続で挫折しそうです
昨日Pythonの入門書を注文してしまいました
自分は駄目な人間なのでしょうか

698 :デフォルトの名無しさん:2010/06/28(月) 09:13:52
>>697
だめなのかはともかく
どのみちPythonでも最初はCUIですよ
というより、基礎構文の使い方やら基本的なことを習得する過程はどの言語でもそう変わりません
Cのほうがエラーがやたら不親切だったり、ポインタとかあったり大変でしょうけど

とはいえPythonなら標準でもGUIライブラリが付いていたり、容易に追加ライブラリを扱えたりと
かなりお手軽ですが

699 :デフォルトの名無しさん:2010/06/28(月) 23:54:25
#include <stdio.h>
int main(void)
{
char no [] ={"0011"};
printf("%s\n",no);

char name [] ="Yamada";
printf("%s\n",name);

return 0;
}






700 :デフォルトの名無しさん:2010/06/29(火) 00:01:39
で?

701 :デフォルトの名無しさん:2010/06/29(火) 00:11:54
でっていう

702 :デフォルトの名無しさん:2010/06/29(火) 02:23:53
生まれて初めて自分の力だけでプログラム組めた・・・けどなんか最後に変なバグが発生します。
Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
(どこか回りっぱなしになってる?) どこがまちがっているんでしょうか?
#include<stdio.h>
#include<iostream>
#include<conio.h>/*while(kbhit()){}で一時停止させる為*/

int main() /*整数値のみを使った電卓*/
{
int a,b,d; char c;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("%dが代入されました",a);
printf("aは+\n" "bは-\n" "cは*\n" "dは/です\n");
scanf("%s",&c);/*%dは10進法整数、%sは文字列*/
printf("次の数字を入力してください\n");
scanf("%d",&b);



703 :デフォルトの名無しさん:2010/06/29(火) 02:24:34
/*続き*/
switch(c){
case 'a':
printf("%d+%d=%d\n",a,b,a+b);
break;
case 'b':
printf("%d-%d=%d\n",a,b,a-b);
break;
case 'c':
printf("%d*%d=%d\n",a,b,a*b);
break;
case 'd':
printf("%d/%d=%f\n",a,b,(double)a/b);/*キャスト*/
break;
default:
printf("エラーです\n");
break; }
while(!kbhit()){}/*http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1242481837*/
return 0; }

704 :デフォルトの名無しさん:2010/06/29(火) 02:29:39
>scanf("%s",&c);/*%dは10進法整数、%sは文字列*/
%cじゃないとまずいんじゃないですかね

705 :デフォルトの名無しさん:2010/06/29(火) 02:47:55
最初は%cで書いたのですが、なぜか処理が
printf("次の数字を入力してください\n");
まで飛んでしまうバグが発生したので調べて
%sに修正しました。
Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
というエラーが発生するのはswitch以降みたいです

706 :デフォルトの名無しさん:2010/06/29(火) 02:49:33
そこを%cにするだけじゃまずいんじゃないですかね

707 :デフォルトの名無しさん:2010/06/29(火) 02:50:54
スタックの変数c近辺壊れちゃってるんだけど!とのことで。
%sにしたいならそれを格納する先はchar配列、それなりのメモリを確保したポインタにしましょう。

708 :デフォルトの名無しさん:2010/06/29(火) 02:52:10
scanf(" %c", &c);

709 :デフォルトの名無しさん:2010/06/29(火) 02:52:33
ttp://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4-2
こういうことあるからscanfよりもgets使ってほしいんだけど

710 :デフォルトの名無しさん:2010/06/29(火) 02:59:25
なぜcが壊れたのかが理解できないです。。。
とりまポインタというところまで勉強を進めれば理解できるってことですか?


今やっと制御文まで本を読み進めたところです。

711 :デフォルトの名無しさん:2010/06/29(火) 03:00:31
1リットルしか入らない容器に2リットル入れようとしたから壊れたんだよ

712 :デフォルトの名無しさん:2010/06/29(火) 03:17:15
>>710
char型は文字ひとつだけ入る
一文字に見える文字列は、その文字と、終端文字(見えない)の二文字から成り立つ
cにはその文字が入り、cの隣、変数じゃないところに終端文字をねじ込んでしまった。

それと、cは壊れてないよ。cの周辺がおかしいよ、と書いてるでしょ

713 :デフォルトの名無しさん:2010/06/29(火) 03:20:28
scanf('%c',&c);にしてみました。(最初はこれでswitchまで行かない謎の処理をしたのに今は動く不思議)
やっぱり同じエラーが出ます。
これでcharに対応させて、文字もa,b,c,dのいづれか一つの文字しか入れてないはず・・・

でもエラー増えてる;ω;
3 IntelliSense: 型 "int" の引数は型 "const char *" のパラメーターと互換性がありません c:\users\shintarou\documents\visual studio 2010\projects\calc\calc\calc.cpp 20
エラー 2 error C2664: 'scanf' : 1 番目の引数を 'int' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) c:\users\shintarou\documents\visual studio 2010\projects\calc\calc\calc.cpp 20


いつint c;なんて入れたんだよ・・・俺はcharだって言ってるじゃないか・・・

714 :デフォルトの名無しさん:2010/06/29(火) 03:21:48
>>712
読み飛ばしてました。
ちょっと修正しまあす

715 :デフォルトの名無しさん:2010/06/29(火) 03:31:24
scanf("%c", &c); だと改行文字を読んじゃう。
scanf(" %c", &c); で改行文字を読み飛ばす。

716 :デフォルトの名無しさん:2010/06/29(火) 03:43:56
なんとか完成しました嗚呼嗚呼あああああああああああああああああ
すっごくうれしいです!!
やっぱオリジナルが完成すると嬉しいっすね。
バグは自分のミスだってわかってるけど、イライラしてしょうがなかったです


717 :デフォルトの名無しさん:2010/06/29(火) 03:44:55
/*完成版*/

#include<stdio.h>
#include<iostream>
#include<conio.h>/*while(kbhit()){}で一時停止させる為*/

/*整数値のみを使った電卓*/

int main()
{
int a=0,b=0;
char c;

printf("数字を入力してください\n");
scanf("%d",&a);
printf("%dが代入されました",a);

printf("どうするか入力してください\n""aは+\n"
"bは-\n"
"cは*\n"
"dは/です\n");
scanf(" %c",&c);/*%dは10進法整数、%sは文字列%cは文字一つ(勝手に二つになる場合アリ)*/
/*scanf("%c",&c)だと、改行文字("dは/です\n")を読み込んでしまう
 scanf(" %c",&c);で空白をいれるとOk     */

printf("次の数字を入力してください\n");
scanf("%d",&b);

718 :デフォルトの名無しさん:2010/06/29(火) 03:46:53
switch(c){
case 'a':
printf("%d+%d=%d\n",a,b,a+b);
break;
case 'b':
printf("%d-%d=%d\n",a,b,a-b);
break;
case 'c':
printf("%d*%d=%d\n",a,b,a*b);
break;
case 'd':
printf("%d/%d=%f\n",a,b,(double)a/b);/*キャスト*/
break;
default:
printf("エラーです\n");
break;
}
while(!kbhit()){}/*勝手に終了させない処理*/
return 0;

}

719 :デフォルトの名無しさん:2010/06/29(火) 03:48:59
皆様、お世話になりました。
今猫でも分かるC(二版)で勉強中です。

次質問する時は、そのポインタって所を読み終えてからにします

720 :デフォルトの名無しさん:2010/06/29(火) 04:01:23
今読み終えたのですがポインタって何でしょうか?

721 :デフォルトの名無しさん:2010/06/29(火) 04:02:22
変数

722 :デフォルトの名無しさん:2010/06/29(火) 04:55:49
指し示す者と書いてポインタ

そばに立つと書いてスタンド

723 :デフォルトの名無しさん:2010/06/29(火) 04:56:19
>>713
int c;が入ってるなんて言ってない。
落ち着いて読むんだシンタロウ。1番目の引数だ。

724 :デフォルトの名無しさん:2010/06/29(火) 07:42:40
>>723
お前が落ち着け

725 :デフォルトの名無しさん:2010/06/29(火) 07:59:17
シンタロウw

726 :デフォルトの名無しさん:2010/06/29(火) 09:28:52
>>719
少しは自分で考えろよ

727 :デフォルトの名無しさん:2010/06/29(火) 10:15:40

C言語ってオヤジの言語だよね。なんでいまさらCなんかやろうとするのか意味不明。
せめてC++だろう。それでも不十分だけど。


728 :デフォルトの名無しさん:2010/06/29(火) 10:18:12
逆にC++のポジションがわからん
Cは組み込み、Javaはエンプラ、中小相手だとVBだと思うんだが
C++ってゲームぐらいしか使い道ないんじゃないか?

729 :デフォルトの名無しさん:2010/06/29(火) 10:18:16
何使ってもできない人にはできない
ほどほどにできる人は道具次第
できる人は何使ってもできる

730 :デフォルトの名無しさん:2010/06/29(火) 10:56:34
>>728
>Cは組み込み、Javaはエンプラ、中小相手だとVBだと思うんだが

世間知らずにも程があるぞwwwww

731 :デフォルトの名無しさん:2010/06/29(火) 11:06:54

逆にjavaとかObjective-Cとかとっつきにくいと言われてる言語の話をなぜしないかね。
できる人はなに使ってもできるんでしょ。いまさら利用環境の少なくなってきたCでもないでしょ。
携帯だってCでプログラムしてる人はもうほとんどいないでしょ。


732 :デフォルトの名無しさん:2010/06/29(火) 11:35:06
ここはCスレです
関係ない言語の話はその言語のスレでしてください

733 :デフォルトの名無しさん:2010/06/29(火) 11:47:41

古臭いものにこだわる人間って、そうやって人の話に耳を傾けないんだよな。


734 :デフォルトの名無しさん:2010/06/29(火) 12:25:32
>>733
ここは古臭いものにこだわる人間の隔離スレですよ

735 :デフォルトの名無しさん:2010/06/29(火) 12:26:54
C++厨がスレタイも空気も読めないのはいつものこと

736 :デフォルトの名無しさん:2010/06/29(火) 18:03:16
>>727
アセンブラやってなさそうな人だな

737 :デフォルトの名無しさん:2010/06/29(火) 18:33:15
VBAでプログラマ気取りのゆとりだよ

738 :デフォルトの名無しさん:2010/06/29(火) 18:47:35
ビジネス系の主流はVBだろ、VBAではないが

739 :デフォルトの名無しさん:2010/06/29(火) 18:58:36
C言語から色んな言語勉強したら良いだろ。

740 :デフォルトの名無しさん:2010/06/29(火) 18:58:48
VBはVB6と共に死にました。
.Netに移行するよりはJavaに移行した企業の方が多かったみたいだね。
それでCの存在価値が失われるわけじゃないけど。

741 :デフォルトの名無しさん:2010/06/29(火) 22:31:46
PCの性能上がって便利なのは多くなりそうだけどCは面白いからありだね。

742 :デフォルトの名無しさん:2010/06/30(水) 10:05:10
C愛好家のおじいさん達って・・・

743 :デフォルトの名無しさん:2010/06/30(水) 11:14:23
C言語の発展過程で取り入れてきた機構は、他言語で半世紀前に実装済みのものが多いが、まだ取り入れ切れてないものもある。
少なくとも、残りを取り入れ終わる頃までは、Cは使われ続けるだろうな。
http://www.nurs.or.jp/~sug/soft/super/lisp.htm#sec6

744 :デフォルトの名無しさん:2010/06/30(水) 12:48:17
取り合う範囲に厳格なポリシーを持つのが C のよいところ

745 :デフォルトの名無しさん:2010/06/30(水) 13:30:08
C言語美化月間ですか?

746 :デフォルトの名無しさん:2010/06/30(水) 13:54:11
Cに代わりはないからな

747 :デフォルトの名無しさん:2010/06/30(水) 14:16:36
C言語は、あらゆるプログラム言語の基礎となる言語だ。
C言語が使いこなせられるようになれば、仕事でjavaとかC++を使わざるをえなくなっても
考え方はCと似ているからすんなりうけいれられるんちゃう?

748 :デフォルトの名無しさん:2010/06/30(水) 15:00:52
JavaがあるからCは要らなくなる、って言ってる新人見たときは点目だった。

あと、”言語”って呼び名から来る誤解もあるんじゃないか?
C言語を駆使してOSとか他言語(Java,Ruby,Pythonとか)を構成できるけど、
人間の言語だと、例えば日本語を使って英語を創り上げる、なんて出来ない。

Programming Languageの、Languageの意味は本来、”表記”だったんだが、
いつのまにか”言語”で定着しちゃったしな。

749 :デフォルトの名無しさん:2010/06/30(水) 15:04:07
>Programming Languageの、Languageの意味は本来、”表記”だったんだが、


750 :デフォルトの名無しさん:2010/06/30(水) 15:04:20
>>748
誤解してるのは君だけだと思う

751 :デフォルトの名無しさん:2010/06/30(水) 15:14:02
>>748
エスペラント語とかクリンゴン語は人間の言葉が作り出したように思うが

752 :デフォルトの名無しさん:2010/06/30(水) 15:21:14
OSが提供するAPIやシステムコールのインターフェースが Cスタイルが多いから Cが生き残ってるだけかと

そのレベルの機能を直接利用せずに 言語の範囲内でやりたいことを記述できるなら
別言語へいってもさしさわりはないだろうね。

753 :デフォルトの名無しさん:2010/06/30(水) 16:01:55
大学の卒業研究で自動車の自律分散制御についてやることになりました。

現在のところスーパービギナーレベルのC言語知識しかありませんが
どうにか車両の群れのシミュレーションをしたいのですが。

何からどう手をつけてよいのかわかりません。

どなたかBoidアルゴリズム等のプログラミング経験ある方いたら
助言をいただけませんか?

754 :デフォルトの名無しさん:2010/06/30(水) 16:17:48
わざわざプログラム作らなくてもいいんでないの、と思うけどな。

755 :デフォルトの名無しさん:2010/06/30(水) 17:01:38
>>753
そのアルゴリズムを構築するのがお前の研究じゃないの?

756 :デフォルトの名無しさん:2010/06/30(水) 17:25:12
>>753
既にモデルができてるかどうかによって難易度が変わるね

自動車が得ることのできる情報を列挙する
方角
速度
前方の信号
前車までの距離 等

自動車が起こす事のできるアクションを列挙する
加減速
右左折 等

それぞれの自動車に与える目的地の設定とか
さらに目的地までのルート予測とか大変そうだw
碁盤の目じゃないとムリぽ

757 :デフォルトの名無しさん:2010/06/30(水) 20:12:40
>>752
インターフェースって自分で言ってて C スタイルが多いって何?
システムコールが C 関数のように見えた時代は後にも先にも特殊だったんだが

758 :デフォルトの名無しさん:2010/06/30(水) 20:44:50
>>757
> システムコールが C 関数のように見えた時代は後にも先にも特殊だったんだが
kwsk

759 :デフォルトの名無しさん:2010/06/30(水) 20:51:08
>>753
専門的に研究してる方なのですし、どうせ全部想定済みなんでしょうけど…
各車は当然個別に目的地をもってるわけで、状況に応じてルートを変化させる個体もあるわけで…それの計算が結構重くて大変かもしれませんよ。
単純にルート変更と言っても、(最適とまではいかなくても)まぁまぁ妥当なルートを選び出す作業を各車が行うわけで、カーナビ有り・無し、習慣優先・勘優先、いろいろな個体があります。
それだけでも専門家ですら泡吹くような厄介なプログラムになると思います…
これらが相互に影響しあうわけで、数千台レベルで動かしたら、ちょっとしたレイトレーシング並の重さになるかもしれません。

ましてや、自動車の中身は魚じゃなくて人間ですから、コンビニとかにも平気で寄りますし、事故も起こしますし、気も変わります。カオスです。…意味もなく峠をぐるぐる走りつづける個体とかw

…完成したモノを想像すると、すごく楽しそうですが、
おそらく、自動車の性能や交通ルール回りはもちろん、社会学やら心理学やら、様々な分野の要素を考慮しないと意味のあるシミュレーション結果にはならないと思いますし、
また計算量も、たとえば各車は近くの他車の状況に応じてルートを変えたり変えなかったり、また、無意味に峠をぐるぐるする個体があらわれたり、かなりカオスでおもしろそうですが
計算量も膨大になりそうな予感です。

専門家じゃないのでわかりませんが、個々の個体はそれぞれ似てるようで、実際はそれぞれ微妙に異なった振る舞いをする、これら集合をあつかう問題にこそ、オブジェクト指向が向いてるような気がします。
CよりもC++で書いた方が頓挫する可能性が低く安全かもしれません。(当初は想定外だった要素を、あとから必要になってあるグループに追加するケースが出てくるでしょうし。その場合、おそらくC++の方がマシです)


760 :デフォルトの名無しさん:2010/06/30(水) 22:57:47
>>759
アルゴリズム屋さんだね。
プログラミング言語をツールとして扱えると幅が広がるよ。
C++でオブジェクト指向設計して組めればかなり強い。

博士持っててアルゴリズム考えるのは立派だけど、それを実際に動かす力が乏しい人間を知ってる。
一方、実装力はあるが、アルゴリズムを考えるのは苦手な人もいる。
両方できると楽しいぞ。

761 :デフォルトの名無しさん:2010/06/30(水) 22:58:46
>>760
なぜそこにレスしたのかが

762 :デフォルトの名無しさん:2010/06/30(水) 23:09:44
テンプレートはともかく、オブジェクト指向に C++ が必要って C の能力なさすぎだろ
禿でさえ virtual の創設をためらったんだぞ

763 :デフォルトの名無しさん:2010/06/30(水) 23:19:10
禿が自信を持っている箇所って結局どこなんだろ、と、たまに思う

764 :デフォルトの名無しさん:2010/06/30(水) 23:35:09
卒研なら一直線の道と信号でのシミュレーションでよさそうだ
交差点では適当に入ってくる車と出て行く車を確率密度に沿った乱数で決定

信号のタイミング
信号の青黄赤の点灯時間や矢印信号
車線の数
進行方向毎の自動車の出現確率
右折時のパラメータ
運転者のクセ(車間距離、アクセルブレーキタイミング)

これだけ弄るものがあったら好きなだけグラフが作れる
ってか卒論でこれだけできたらすごいと思うよ

765 :デフォルトの名無しさん:2010/06/30(水) 23:43:40
卒論って高校の時憧れてたほどレベルが高くない…

766 :デフォルトの名無しさん:2010/06/30(水) 23:45:07
それは大学による

767 :デフォルトの名無しさん:2010/06/30(水) 23:50:44
>>766
ではなく、生徒のレベル。

768 :デフォルトの名無しさん:2010/07/01(木) 02:00:37
生徒?

769 :デフォルトの名無しさん:2010/07/01(木) 02:29:06
与えられた数値が
+だったら−にして
−だったら+にして返す関数を作りたいのですが


fanc(int i)
{
int a;
a=-(-1*i)/i
a=a*i;


return a;
}

この方法以外にありますか?

770 :デフォルトの名無しさん:2010/07/01(木) 02:39:20
func (int i) { return -i;}

771 :デフォルトの名無しさん:2010/07/01(木) 02:39:27
int fanc(int i)
{
 return -i;
}

ってはなしではなく?

772 :デフォルトの名無しさん:2010/07/01(木) 02:43:13
なんていうか。
せっかくなので違う例を書いてみると
int fanc(int i) {
 return -1 * i;
}

773 :デフォルトの名無しさん:2010/07/01(木) 02:48:44
int fanc(int i) {
return ~((unsigned int)i-1);
}


774 :デフォルトの名無しさん:2010/07/01(木) 09:30:46
>773は何をしたいのだろう。
それにしても、fanc()って辺りが余りに情けない。

775 :デフォルトの名無しさん:2010/07/01(木) 09:35:55
>>774
>>769

fack 凸(^A^

776 :デフォルトの名無しさん:2010/07/01(木) 09:39:52
fackyu!!

777 :774:2010/07/01(木) 09:57:09
>>775
あぁ、二行目は>769宛てね。
ついでに>769にはなんであんな「方法」になったのか聞いてみたい。


778 :デフォルトの名無しさん:2010/07/01(木) 10:42:10
>>769
int f(int i){return 0-i;}

779 :デフォルトの名無しさん:2010/07/01(木) 10:45:00
いい加減まじめに
int f(int i){return -i;}
って言ってやれよwwwwww

780 :デフォルトの名無しさん:2010/07/01(木) 10:49:01
お前ら根本的に勘違いしてるぞ、

>>769 の関数の戻り値は引数と同じなんだよ。

どうして符号を反転して返す関数を作ってるの?
ソース読めないの?馬鹿のなの?

必要とされるのは符号を一旦変えてまた元に戻す関数なんだよ。

781 :デフォルトの名無しさん:2010/07/01(木) 11:01:40
>>780
ごめんなんで>>769見てその結論がでるのかわからない

782 :デフォルトの名無しさん:2010/07/01(木) 11:03:00
>>781
>769のfanc()の実装を見たんじゃね?

783 :デフォルトの名無しさん:2010/07/01(木) 11:05:34
>>781
>この方法以外にありますか?
とあるので、同じ動作をする別の方法という意味だろうね。

784 :デフォルトの名無しさん:2010/07/01(木) 11:06:52
>>769
そもそも前半の説明と
後半のソースに整合性がないんだよな

つまり・・・・・どういうことだってばよ・・・・・

785 :デフォルトの名無しさん:2010/07/01(木) 11:07:41
>>780
すべては >>770 が悪いwwww
他の人は釣られただけw

786 :デフォルトの名無しさん:2010/07/01(木) 11:09:36
>>784
だったら、答える前にそれを突っ込むのが筋

787 :デフォルトの名無しさん:2010/07/01(木) 12:53:51
何という筋ですか?

788 :デフォルトの名無しさん:2010/07/01(木) 13:05:31
>>780
いったん変えて元に戻す?馬鹿ですか?a=1;a=a*i;のどこを見ればそう解釈できるの?

789 :デフォルトの名無しさん:2010/07/01(木) 13:31:34
>>788
はい。ばかです。

790 :デフォルトの名無しさん:2010/07/01(木) 13:35:28
ばかばっか

791 :デフォルトの名無しさん:2010/07/01(木) 14:41:27
ぱっぱかぱっぱか

792 :デフォルトの名無しさん:2010/07/01(木) 16:40:10
亀になりましたが>>753です。

いや、本当に行きづまっていたので、とても参考になりました。
専門家でないのに専門家のようなレベルのアドバイスもらえて涙目です。

とりあえずマルチエージェントシステム的な考えを基に、直線や碁盤の目のような
比較的単純なモデルを想定して進めてみようかと思います。

できるだけ自分で考えてやってみたい気持ち一心もあって、
「こいつ何勘違いしてんだ」的な部分多くあったかと思いますが。。。
とにかくありがとうございました

793 :デフォルトの名無しさん:2010/07/01(木) 22:50:13
"【LLTVレポート】劇的ビフォーアフター、匠の技(中編)
“本物のマクロ”でCのコード行数を半分に!
2009/09/07" http://www.atmarkit.co.jp/news/200909/07/lltv02.html

794 :デフォルトの名無しさん:2010/07/02(金) 06:11:24
>>793
別の言語使えばいいじゃんっていう皮肉?

795 :デフォルトの名無しさん:2010/07/02(金) 07:44:18
みんな lisp をつかえってことでは?

796 :デフォルトの名無しさん:2010/07/02(金) 08:07:43
全部手作りで合理化を考えてないところは、これから苦しくなるな。
趣味なら好きにすればいいが。

797 :デフォルトの名無しさん:2010/07/02(金) 08:12:24
C言語はなんで整数のサイズとかビット長、chraの符号みたいな基礎的な部分すら統一しないんですか?
移植させる気まったくないですよねこいつ

798 :デフォルトの名無しさん:2010/07/02(金) 08:28:24
えっ
むしろ固定してたら移植できないだろ。

799 :デフォルトの名無しさん:2010/07/02(金) 08:37:55
>>797
ハードの制約とか、意味論的に統一困難なもの以外で、不統一って例えば?

800 :デフォルトの名無しさん:2010/07/02(金) 12:24:41
配列[定数]がEOFの場合、とはプログラムで表すとどうなりますか。
初歩的ですみません。どうしてもうまくいかないので。

801 :デフォルトの名無しさん:2010/07/02(金) 12:30:52
配列は EOF (end of file) にならない

802 :デフォルトの名無しさん:2010/07/02(金) 12:39:31
>>800
if (配列[定数] == EOF) …

803 :デフォルトの名無しさん:2010/07/02(金) 12:48:08
>>801
やはりscanfでないとダメですか。
>>802
ありがとうございます。しかし上手くいかないようです。

804 :デフォルトの名無しさん:2010/07/02(金) 13:15:00
わけわかめ

805 :デフォルトの名無しさん:2010/07/02(金) 13:22:33
>>803
長くないなら、プログラムをここにコピペしてみたらどうかな
何らかの理由で、配列[定数]の中身が-1(EOF)じゃないだろうから

806 :デフォルトの名無しさん:2010/07/02(金) 21:22:32
>>305

http://www1.axfc.net/uploader/File/so/46695
pass:prog
遅くなりました。

807 :806:2010/07/02(金) 21:23:39
>>805です。
すみません。

808 :デフォルトの名無しさん:2010/07/03(土) 00:14:26
test

809 :デフォルトの名無しさん:2010/07/03(土) 00:26:24
csvファイルを読込んでソートとかしている間に
プログレスバーを表示させたいんだが、以下のやり方では
プログレスバーが表示された状態で処理が止まってしまう。

ファイルの処理をしながらダイアログを更新するにはスレッド処理はダメ?

main {
  // プログレスバー表示スレッド作成
  A = (HANDLE)_beginthreadex(NULL,0,ProgressBarThread,hFrame,0,0);

  // csvファイル読込みスレッド作成
  B = (HANDLE)_beginthreadex(NULL,0,FileOpenThread,hFrame,0,0);
}

ProgressBarThread {
  // プログレスバー表示イベントの作成
  CreateEvent();
  // プログレスバーダイアログ作成
  DialogBoxParam();  ←ここで止まってしまう。。。
}

FileOpenThread {
  // ファイル読込み、ソートの間にプログレスバーダイアログをUpdateWindowする

  UpdateWindow(hProgress);

}

810 :デフォルトの名無しさん:2010/07/03(土) 00:52:23
>>809
モーダルじゃなくてモードレスダイアログ作れ

811 :デフォルトの名無しさん:2010/07/03(土) 01:30:37
>>800最初の質問については
>配列[定数]がEOFの場合
>scanf("%f",&kaz[n])!=EOF
1.プログラム中でkaz[n] = EOF;とするか、もしくはコマンドプロンプトで-1を代入するしか方法はない
2.コマンドプロンプトで、Ctrl+Z 若しくは EOFタイプ後、Enterキーを押下するとscanfの返り値
 として-1(EOF)が返されるが、この場合kaz[n]に値が代入されるわけではない

よって>>802は1.の場合で有効

812 :デフォルトの名無しさん:2010/07/03(土) 01:40:54
>>806
プログラムの最後の動作が、どのようになればよいか教えてもらえれば
そのように変更しますよ。

300個すべてとあるが、float kaz[301]; なのでkaz[0]〜kaz[300]は、計301個ある
また、299+EOFとは具体的にどういった操作ですか?
例)こんな感じで教えてください
1.n=299の時に、コマンドプロンプト上で数字を入力しEnterキー押下
2.n=300の時に、コマンドプロンプト上でEOFを入力しEnterキー押下

813 :806 ◆UTq41fopXE :2010/07/03(土) 08:54:14
>>812
そうです。確認しました。申し訳ございません。
今作っている本プログラムとは数値等を変えているので。

301個すべて数値→OK(n=301)
n(n<300)+EOF→nに入力回数が反映
300+EOF→n=301となります。

ですから、2に該当するかと。
私としては、いかなる場合(300+EOF)でも、nが「入力回数」になってもらえれば良いのですが。
よろしくお願いします。

>>811
最初にEOFに相当する何かを定めないといけないのですね。
参考にさせていただきます。

814 :デフォルトの名無しさん:2010/07/03(土) 09:56:40
>>813
if(n==300){s+=kaz[300];n++;}←これを消して、whileの中身を↓に変える
while(n<301 && scanf("%f",&kaz[n])!=EOF )

815 :デフォルトの名無しさん:2010/07/03(土) 13:09:52
俺はなんて不幸な時代に生まれたんだろう。
クズみたいな教育機関しか日本にはない。
海外に行けばいいとか、全く見当違いだね。
人間は環境の中で育つものだ。
クズみたいな教育機関しかない日本では周りにクズしかいないんだよ。
クズの中で育った俺もクズなのさ。
したがって大学に上がろうという段階では既にクズが決定しているから海外なんて行けるはずも無いわけさ。

816 :デフォルトの名無しさん:2010/07/03(土) 15:39:52
#include <stdio.h>
int main(void)
{
int n;
char *a[]={"クズ","ホモ","ゆとり","@ピザ","イケメン"};
printf("1〜5までで好きな数字を入れてください。:");
scanf("%d",&n);
if (n<1 || n>5){printf("最初からやり直してください。\n");return 0;}

printf("俺はなんて不幸な時代に生まれたんだろう。\n"
"%sみたいな教育機関しか日本にはない。\n"
"海外に行けばいいとか、全く見当違いだね。\n"
"人間は環境の中で育つものだ。\n"
"%sみたいな教育機関しかない日本では周りに%sしかいないんだよ。\n"
"%sの中で育った俺も%sなのさ。\n"
"したがって大学に上がろうという段階では既に%sが決定しているから海外なんて行けるはずも無いわけさ。"
"\n",a[n-1],a[n-1],a[n-1],a[n-1],a[n-1],a[n-1]);
return 0;
}

817 :デフォルトの名無しさん:2010/07/03(土) 18:55:26
不幸な時代、クズな教育機関、
周りにクズしか居ないというのには同意だが、
残念ながら俺はクズではない。
なぜなら、俺だからだ。


818 :デフォルトの名無しさん:2010/07/03(土) 18:56:51
早寝早起き

819 :806 ◆UTq41fopXE :2010/07/03(土) 23:09:26
>>814
解決しました。
本当にありがとうございました。

820 :デフォルトの名無しさん:2010/07/03(土) 23:10:59
>>816
解決しました

821 :デフォルトの名無しさん:2010/07/03(土) 23:51:57
>>820
お礼は?(-_-;)

822 :デフォルトの名無しさん:2010/07/03(土) 23:57:51
>>821
まあまあ

823 :デフォルトの名無しさん:2010/07/04(日) 00:42:25
>>816
どう見ても精子です。
本当にありがとうございました。

824 :デフォルトの名無しさん:2010/07/04(日) 11:52:31
そいえば、誰かが掛け算より割り算が遅いって言ってたけど、


n / 2とするより、
n * 0.5とする方が速いんですかね?

825 :デフォルトの名無しさん:2010/07/04(日) 11:54:38
>>824
そうだよ

826 :デフォルトの名無しさん:2010/07/04(日) 12:02:40
ありがとうございました

827 :デフォルトの名無しさん:2010/07/04(日) 12:03:20
n/2するぐらいならn>>1すればいいじゃん

828 :デフォルトの名無しさん:2010/07/04(日) 12:06:27
>>824
元々が浮動小数点数なら *0.5 の方が早いけど
整数だと実測してみたほうがいい

829 :デフォルトの名無しさん:2010/07/04(日) 12:10:19
〉)827
ふと疑問に思ったんです。

830 :デフォルトの名無しさん:2010/07/04(日) 14:51:31
>>824
nが浮動小数だとすると、速さ変わらないと思う

それに割り算が遅い、というのは昔の(16ビットとかの)CPUの話

831 :デフォルトの名無しさん:2010/07/04(日) 15:06:40
お前の頭はそこで止まっているだけだろ

832 :デフォルトの名無しさん:2010/07/04(日) 15:17:12
1バイトが8ビットなのは変わってないんだから
当時の16ビットCPUも今の64ビットCPUも、実質は8ビットCPUだろ。
たまには1バイト12ビットくらいのCPU作れよ。
オクタル4桁でキリが良いから表記しやすいし。
ファイルパーミションも1バイトに納まるから便利だしな。


833 :デフォルトの名無しさん:2010/07/04(日) 15:34:53
>>832
アセンブラでプログラミングした経験ある?
ネイティブアプリをバイナリエディタでハックしたことある?

834 :デフォルトの名無しさん:2010/07/04(日) 15:38:34
>>833
あるよ。

835 :デフォルトの名無しさん:2010/07/04(日) 15:38:43
プッ

836 :デフォルトの名無しさん:2010/07/04(日) 15:42:43
>>835は世界一のカス

837 :デフォルトの名無しさん:2010/07/04(日) 15:45:34
>>834
8bitCPUと64bitCPUは全く同じように扱えましたか?

838 :デフォルトの名無しさん:2010/07/04(日) 16:00:29
同じなわけないじゃんw
Z80 と 6502 でも全然違うしw

839 :デフォルトの名無しさん:2010/07/04(日) 16:23:12
6809 を忘れないでください (; ;)

840 :デフォルトの名無しさん:2010/07/04(日) 16:38:28
16ビット以降のインテルCPUなら今の64ビットCPUでもまったく同じに扱えるよな。

841 :デフォルトの名無しさん:2010/07/04(日) 16:40:29
ARMって実質的には1バイト32ビットだよな。
アドレスの振り方もそのように変えちゃったらいいのにな。


842 :デフォルトの名無しさん:2010/07/04(日) 16:44:37
C言語スレです

843 :デフォルトの名無しさん:2010/07/04(日) 18:49:16
とりあえず832がバカであることは伝わった。

844 :デフォルトの名無しさん:2010/07/04(日) 20:03:25
なんだその遠吠えw

845 :デフォルトの名無しさん:2010/07/04(日) 20:47:55
間違いを指摘されたのがそんなに悔しかったのかよw
悪かったよ。謝るから、もうこの話題は終わりにしようぜw

846 :デフォルトの名無しさん:2010/07/04(日) 23:04:42
ざまあwwwwwwwwww

847 :デフォルトの名無しさん:2010/07/05(月) 21:02:17
>>830
CPUの仕様見てみろ
割り算はレイテンシもスループットも桁が違う

848 :デフォルトの名無しさん:2010/07/06(火) 01:32:49
掛け算は解く過程で並列化できるけど、割り算は解く過程で並列化が難しい気がする(素直な方法の場合)
掛け算は回路を工夫すれば2、3クロックで解くことも可能そうな気がするけど、
割り算は、どうがんばっても2進桁数+2、3クロック程度は掛かりそうな気がする。

パイプラインで流せば、結果的に1割り算1クロックとみなしても妥当…って言い方は可能でしょうけど、
単体で、1個だけを、割り算したときと、掛け算したときとでくらべたら、どうかんがえても掛け算並みのクロックで割り算するのは、
そんなアルゴリズム、ちょっとありえないと思う。もしあるなら教えてください。煽りではなく純粋に知りたいです興味あります。


849 :デフォルトの名無しさん:2010/07/06(火) 02:01:48
除算以外は加算で表現できるからな

850 :デフォルトの名無しさん:2010/07/06(火) 02:07:33
それがなにか?

851 :デフォルトの名無しさん:2010/07/06(火) 03:19:08
最近のCPUはすごいんだから気にするなよ、というのは初心者の素朴な疑問を潰す常套句

852 :デフォルトの名無しさん:2010/07/06(火) 03:20:17
だったらCなんか使わず新しい言語使うんですけどね

853 :デフォルトの名無しさん:2010/07/06(火) 03:38:39
ですね

854 :デフォルトの名無しさん:2010/07/06(火) 07:35:18
Pen4とかじゃ整数除算は内部的には浮動小数で処理してから丸め補正してたような

855 :デフォルトの名無しさん:2010/07/06(火) 08:09:37
ここまで実測なし

856 :デフォルトの名無しさん:2010/07/06(火) 11:10:08
だからね・・・C言語スレですってば・・・

857 :デフォルトの名無しさん:2010/07/06(火) 14:31:56
質問どぞ!

858 :デフォルトの名無しさん:2010/07/06(火) 19:46:18
お金持ちになる方法を教えてください

859 :デフォルトの名無しさん:2010/07/06(火) 20:12:54
まずお金を用意します。

860 :デフォルトの名無しさん:2010/07/06(火) 20:16:00
>>859
出来ました!ありがとうございます!

861 :デフォルトの名無しさん:2010/07/06(火) 20:27:07
フイタw

862 :デフォルトの名無しさん:2010/07/06(火) 21:37:43
もっとよくふけよ

863 :デフォルトの名無しさん:2010/07/06(火) 21:42:49
>>855
プログラム問題サイトとかで速度を競う際に、
割り算は確実に速度に響くぜ

864 :デフォルトの名無しさん:2010/07/07(水) 10:03:57
配列インデックスを格納するための変数にdoubleを使うなんてありなんでしか?

865 :デフォルトの名無しさん:2010/07/07(水) 13:06:28
>>864
ふつうは無い。実行時パフォーマンスも悪くなりそうだし。


866 :デフォルトの名無しさん:2010/07/07(水) 22:46:06
sqrtなしで平方根の計算できないかな?

867 :デフォルトの名無しさん:2010/07/07(水) 22:47:35
できますん

868 :デフォルトの名無しさん:2010/07/07(水) 22:56:20
1/2 乗するとか。

869 :デフォルトの名無しさん:2010/07/07(水) 23:00:35
>>866
sqrtはどうやって計算してるんだ?

870 :デフォルトの名無しさん:2010/07/07(水) 23:11:46
逆に考えるんだ。世界の全てを2乗してしまえばもはやsqrtを求める必要はなくなる。

871 :デフォルトの名無しさん:2010/07/07(水) 23:20:40
ちょっとやってみた
#include<stdio.h>
#include<math.h>
int main(void){
double x,y;
x=sqrt(5);
y=5^(1/2);
printf("x=%f,y=%f\n",x,y);
getchar();
return 0;
}

結果
x=2.236068,y=5,000000

ならなかったけど、やり方間違えてるかな

872 :デフォルトの名無しさん:2010/07/07(水) 23:22:26
>>871
xor じゃん

873 :デフォルトの名無しさん:2010/07/07(水) 23:24:39
ワロタ

874 :デフォルトの名無しさん:2010/07/07(水) 23:25:16
簡単なのだと二分法とかニュートン法とかあるだろ

875 :デフォルトの名無しさん:2010/07/07(水) 23:27:01
^^;

876 :デフォルトの名無しさん:2010/07/07(水) 23:27:20
え?
排他的理論和?

877 :デフォルトの名無しさん:2010/07/07(水) 23:33:08
え?え?

878 :デフォルトの名無しさん:2010/07/07(水) 23:33:36
聞いたのにご覧のあり様だよ

879 :デフォルトの名無しさん:2010/07/07(水) 23:37:07
いいえ、排他的論理和です。

880 :デフォルトの名無しさん:2010/07/07(水) 23:37:53
だよね

881 :デフォルトの名無しさん:2010/07/07(水) 23:39:19
乗算もできない奴がいたとは・・・

882 :デフォルトの名無しさん:2010/07/07(水) 23:40:47
( ^ω^)おっおっおっ

883 :デフォルトの名無しさん:2010/07/07(水) 23:41:02
>>871
インクルードしてるmath.hの中身を確認して来いよ

884 :デフォルトの名無しさん:2010/07/07(水) 23:42:42
ネタはいいよ…

885 :デフォルトの名無しさん:2010/07/07(水) 23:45:34
(゚∀゚)アヒャ

886 :デフォルトの名無しさん:2010/07/07(水) 23:45:35
>>866はsqrtなしってことはmath.hを使いたくないってことだよな
無理じゃね?

887 :デフォルトの名無しさん:2010/07/07(水) 23:48:49
情報系の大学卒業後、IT業界に就職するも、転職して異業種やってる者です。

今、プログラミング言語の世界では、仕事において、何が主流ですか?

C言語は人気ありますか?

888 :デフォルトの名無しさん:2010/07/07(水) 23:53:12
「(´・ω・`)言語」が人気有りますよ

889 :デフォルトの名無しさん:2010/07/07(水) 23:56:02
好きなの使えよ。

890 :デフォルトの名無しさん:2010/07/07(水) 23:57:11
ニュートン法
引数に負数とか0付近の数値を渡しちゃダメ
数値誤差の範囲が狭いから大きすぎる値もダメ
#include<stdio.h>

double mysqrt(double y)
{
double d, d_abs, x=1.0;

while(1)
{
d=y-x*x;
d_abs=(d>0)?d:-d;
if(d_abs<=1.0e-10) break;
x+=d/(2*x);
}
return x;
}

int main(void)
{
printf("%f\n", mysqrt(5));

return 0;
}

891 :デフォルトの名無しさん:2010/07/07(水) 23:57:43
>>888-889
なるほど。貴重な情報ありがとうございます。

892 :デフォルトの名無しさん:2010/07/07(水) 23:59:36
>>887
VBA人口が一番多いかも

893 :デフォルトの名無しさん:2010/07/08(木) 00:03:32
変数iによって動かすvoid関数を変える方法を教えてください。
理想としては配列のように関数をまとめたいです。

894 :デフォルトの名無しさん:2010/07/08(木) 00:05:36
関数ポインタの配列作ったら?

895 :デフォルトの名無しさん:2010/07/08(木) 00:08:01
>>893
#include<stdio.h>

void hoge(void){
printf("hoge\n");
}

void huga(void){
printf("huga\n");
}

void moga(void){
printf("moga\n");
}

int main(void){
void (*foo[])(void)={hoge, huga, moga};
int i;

for(i=0;i<3;i++) foo[i]();

return 0;
}

896 :デフォルトの名無しさん:2010/07/08(木) 00:21:48
関数ポインタの宣言わかりにくすぎ

897 :デフォルトの名無しさん:2010/07/08(木) 00:23:15
(´・ω・`)オッサンもう寝ろよ

898 :デフォルトの名無しさん:2010/07/08(木) 00:24:50
素早いレスありがとうございます。
なるほど、関数にもポインタがあるんですね。
C++も並行して勉強中なのでそちらでも聞いてみます。
ありがとうございました。

899 :デフォルトの名無しさん:2010/07/08(木) 00:37:37
>>890
ありがとうございます

900 :デフォルトの名無しさん:2010/07/08(木) 00:56:40
いえいえ

901 :デフォルトの名無しさん:2010/07/08(木) 01:03:22
どういたしまして。

902 :デフォルトの名無しさん:2010/07/08(木) 01:11:43
おれまだ全然初心者なんだが>>890なのってパッと思いつくもんなの?

903 :デフォルトの名無しさん:2010/07/08(木) 01:13:18
王道アルゴリズムだろ ぐぐればすぐ出るんじゃないか

904 :デフォルトの名無しさん:2010/07/08(木) 01:14:50
>>887
大卒にもこんなんがいるのか?本当に?

905 :デフォルトの名無しさん:2010/07/08(木) 01:16:42
(´・ω・`)オッサンもう寝ろよ

906 :デフォルトの名無しさん:2010/07/08(木) 01:26:01
>>902
アルゴリズムの本一冊読んだら大体出てくるんじゃね

907 :デフォルトの名無しさん:2010/07/08(木) 01:34:35
全然初心者とは?

908 :デフォルトの名無しさん:2010/07/08(木) 01:43:35
>>902
単に知っているか知っていないか、
自分の道具箱に入っているかどうかの問題
ニュートン法は有名な手法だから、知っている人も多い

独力でこの手のアルゴリズムをひねり出すのは、
無理ではないと思うが、骨が折れる
興味があるなら数値計算の本をかじっておけばいい

909 :デフォルトの名無しさん:2010/07/08(木) 02:11:50
>>887
主流:javascript, php, java, Cなど

910 :デフォルトの名無しさん:2010/07/08(木) 02:28:36
0xFFFF は、signed int にすると−何になるのでしょうか?
ちなみにsinged int が2byteだとしてでお願いします。

911 :デフォルトの名無しさん:2010/07/08(木) 02:34:31
-の-FFFF

912 :910:2010/07/08(木) 02:37:02
10進数に直すと値は何になるのでしょうか?

913 :デフォルトの名無しさん:2010/07/08(木) 02:40:35
お前のパソコンには電卓ついてないのか?

914 :デフォルトの名無しさん:2010/07/08(木) 02:41:13
お前のwindowsには電卓は付いてないのか

915 :デフォルトの名無しさん:2010/07/08(木) 02:43:30
お前の頭には電卓は付いてないのか。

916 :デフォルトの名無しさん:2010/07/08(木) 03:32:27
printf("0x%hx=%hd", 0xffff, 0xffff);

917 :デフォルトの名無しさん:2010/07/08(木) 04:03:39
>>910
1 バイトのビット数も指定しないと確定しないだろ。
あと、負の数の表現方法もだな。
1 の補数なのか 2 の補数なのか。


918 :デフォルトの名無しさん:2010/07/08(木) 04:10:39
自演

919 :デフォルトの名無しさん:2010/07/08(木) 10:50:00
>>887
投資と考えるなら、マスターにかかる年数と、その後の数年間は自分で活用できるものかどうかを予測したほうがいい。

920 :デフォルトの名無しさん:2010/07/08(木) 11:10:54
>>910
-1

921 :デフォルトの名無しさん:2010/07/08(木) 11:17:44
>>920
kwsk

922 :デフォルトの名無しさん:2010/07/08(木) 11:20:47
2の補数表現

923 :デフォルトの名無しさん:2010/07/08(木) 12:38:59
1の補数なら?

924 :デフォルトの名無しさん:2010/07/08(木) 12:52:53
>>923 -0

925 :デフォルトの名無しさん:2010/07/08(木) 14:15:58
>>870
無理
無限小数は無限にあるので、それら全ての集合もまた無限にある

926 :デフォルトの名無しさん:2010/07/08(木) 14:20:30
ヒント
内部形式で扱える桁数は有限

もうちょっとメモリが安くなったら平方根や三角関数あたりは全データをテーブル化するようになるだろうな

927 :デフォルトの名無しさん:2010/07/08(木) 15:29:57
>>926
全データってw
どのくらいになるか試算してみた?

928 :デフォルトの名無しさん:2010/07/08(木) 15:31:19
PHPやっとけ

929 :デフォルトの名無しさん:2010/07/08(木) 15:36:52
>>927
8byte の double なら 4G 通りしか無いから、
32GB のメモリがあれば良いことになる。

930 :デフォルトの名無しさん:2010/07/08(木) 15:43:51
>>929
もう一度計算しなおしてくれ

931 :デフォルトの名無しさん:2010/07/08(木) 15:48:29
うーん IA32のマニュアルだと、内部でも IEEE754をまんま取り扱っているっぽいが…
ttp://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol1_Online_i.pdf

単純に 必要bit数 * 値を詰むだけの領域 だけメモリがあれば足りる?のか?
所々 QNAN 等の不定値を指すビットパターンもありうるわけだけど。 少なくなる方向だしなぁ

932 :デフォルトの名無しさん:2010/07/08(木) 15:58:58
2^32 = 4G だろ

933 :デフォルトの名無しさん:2010/07/08(木) 16:20:32
テーブル作るのに時間かかりそうだな
計算するにしてもファイルから読むにしても

934 :デフォルトの名無しさん:2010/07/08(木) 16:24:42
ROM にしとけばいい。

935 :デフォルトの名無しさん:2010/07/08(木) 16:25:36
>932 どこから4bytesのfloatの話になったの?

936 :デフォルトの名無しさん:2010/07/08(木) 16:28:47
>>935
>>929 が違うじゃねーかってこと

937 :デフォルトの名無しさん:2010/07/08(木) 16:36:35
>>934
ROMっていうかCPUの中の話だろ。

938 :デフォルトの名無しさん:2010/07/08(木) 16:42:10
>>910
-1

939 :デフォルトの名無しさん:2010/07/08(木) 17:13:29
>>938
kwsk

940 :デフォルトの名無しさん:2010/07/08(木) 17:16:24
2の補数表現

941 :デフォルトの名無しさん:2010/07/08(木) 17:38:18
1の補数なら?

942 :デフォルトの名無しさん:2010/07/08(木) 17:39:30
>>941 -0

943 :デフォルトの名無しさん:2010/07/08(木) 17:45:09
>>936
>>932 も違うだろカスが。

944 :デフォルトの名無しさん:2010/07/08(木) 17:48:40
HSPやっとけ

945 :デフォルトの名無しさん:2010/07/08(木) 19:07:05
C++のIDEのおすすめ教えてください

946 :デフォルトの名無しさん:2010/07/08(木) 19:08:53
>>945
検索サイトで検索すれば教えてくれますよ

947 :デフォルトの名無しさん:2010/07/08(木) 19:51:57
>>945
フリーならeclipse、有料ならvisual studio

948 :デフォルトの名無しさん:2010/07/08(木) 20:04:43
>>946>>947
貴重な情報ありがとうございました
NetBeansに決めました

949 :デフォルトの名無しさん:2010/07/08(木) 20:55:51
で?

950 :デフォルトの名無しさん:2010/07/08(木) 20:59:16
>>949
つまんねーよカスが死ね

951 :TreeBoa:2010/07/08(木) 21:35:25
>>945
IDEならXcode

>>950
てめえがしね^^b

952 :デフォルトの名無しさん:2010/07/08(木) 21:54:40
アポー信者w

953 :デフォルトの名無しさん:2010/07/08(木) 23:26:24
Xcodeとか正気か?

954 :デフォルトの名無しさん:2010/07/08(木) 23:32:12
いいえ

955 :デフォルトの名無しさん:2010/07/08(木) 23:42:09
それは腐ったりんごです

956 :デフォルトの名無しさん:2010/07/08(木) 23:44:35
JPなんかで送るからだ

957 :デフォルトの名無しさん:2010/07/09(金) 00:21:43
あなたの実家に腐ったイカを送りましたよ!

958 :デフォルトの名無しさん:2010/07/09(金) 02:45:50
ありがとうですよ

959 :デフォルトの名無しさん:2010/07/09(金) 06:51:57
>>945
Turbo C++ 1.01


960 :デフォルトの名無しさん:2010/07/09(金) 09:19:44
>>959
ターボ、ボーランド以外でお願いします。

961 :デフォルトの名無しさん:2010/07/09(金) 09:57:20
バカなんとか

962 :デフォルトの名無しさん:2010/07/09(金) 12:40:07
>>960
emacs

963 :デフォルトの名無しさん:2010/07/09(金) 15:45:31
じれったいのでもう結構です。

964 :デフォルトの名無しさん:2010/07/09(金) 22:29:11
(整数入力→13)
1,2,3!?4,5,6!?7,8,9!?10,11,12,13!?
オモロー!
こんなプログラムはどうやって作ればいいんですか?古くてごめんなさい。

965 :964:2010/07/09(金) 22:29:53
修正、12も12!?でした

966 :デフォルトの名無しさん:2010/07/09(金) 22:35:41
宿題は宿題スレへ

967 :デフォルトの名無しさん:2010/07/09(金) 23:43:15
規制くらってるので携帯から。言葉足らずでしたらすいません。

ポインタ変数int *paと配列int a[5]ってのを宣言した時、
pa = a;
printf("%d",*pa);
と記述したら、%dにa[0]の値が出るのは分かりました。

でもポインタ変数int *pbと多次元配列b[3][4]の場合、
pb = b;
って記述しようとするとエラーになります。
何故でしょうか?

最終的にpb+1で4バイトずつアドレスをずらして多次元配列がどういった順序で記録されているか知るプログラムを作りたいです。

968 :デフォルトの名無しさん:2010/07/09(金) 23:52:38
&a[0][0]

969 :デフォルトの名無しさん:2010/07/10(土) 00:10:00
なんで俺はそんな単純な事に気づかなかったの?
馬鹿なの?死ぬの?


と、30秒くらい自問自答しましたが、
新しい技術を使おうとしたからしょうがないと結論づけました。

感謝です。
まだ何かがおかしいけど
もうしばらく自力でやってみます。

970 :デフォルトの名無しさん:2010/07/10(土) 00:46:55
&a[0][0]でできるのはわかるんだけど、pb=b;でエラーになるのはなんで?

971 :デフォルトの名無しさん:2010/07/10(土) 00:57:10
エラーになるからだよ

972 :デフォルトの名無しさん:2010/07/10(土) 01:09:55
>>970
int **pb

973 :デフォルトの名無しさん:2010/07/10(土) 01:28:33
int main(void)
{
  int* pa;
  int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
  pa = *a;

  printf("a:%p, *a:%p, pa:%p, *pa:%d\n", a, *a, pa, *pa);
  return 0;
}

$ ./a.exe
a:0x22cd00, *a:0x22cd00, pa:0x22cd00, *pa:1

なんか分かんなくなってきたぞ

974 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:01:51
んぼぼ

975 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:11:00
最近初めて400行ぐらいのプログラムを書いたんだが、
できるだけ一つの関数の長さを短くしようとしたら関数の数がけっこう増えてしまった上に
複雑な感じ(main関数のための関数のための関数のための関数など)になってしまったんだが。
今後のために聴きたいんだが、一つの関数のプログラムの理想の長さってどれくらい?
ちなみに今回書いたのは400行のプログラムに対して15の関数を使ってるんだが・・・



976 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:20:42
>>975
基本的にスクロール無しで一画面で表示しきれる程度が最大行数の目安らしいよ
あくまで目安だから分かりにくくしてまで無理してわける必要は無い

977 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:39:20
>>976
ありがとです
今回のは大体スクロールなしでおさまってるから安心した。
一応今回は関数は必要な部分だけ分けたつもりだから、まぁ大丈夫でしょう・・


978 :TreeBoa:2010/07/10(土) 08:55:15
君たちC言語なんてやってないで
Objective-Cでもやれば?^^b

C言語wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
(笑)

979 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 08:59:48
PCのアプリケーションしか作って無いやつには分かるまい。

980 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:25:10
そこで全てを手に入れたD言語ですよ

981 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:34:48
>>978
基本を知らないプログラマーなんて存在そのものが恥ずかしいだけだぜ?
いいなれば、何かを組み立てるのに木材を自分で適当な形に加工できる職人と
加工された木材をただネジなどで組み立てるだけの違いはある。
まぁ標準ライブラリも充実して、扱いも楽なプログラミングでもして満足してなさいってこった。
自分で適当に数式も組み立てられないようじゃ、ねぇ。
数学を学ぶ事も重要さ。

982 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:44:22
Objective-Cってマッキントッシュ以外に開発環境あるの?
あったらやりたいんだが

983 :TreeBoa:2010/07/10(土) 09:48:51
Mac技術者の戦闘力=Windows技術者10人分

^^b

984 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 10:45:56
C#>>Java>>>>>>>>>>>>>>>Objective-C

くらいなもんだよ

985 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 11:10:25
Mac技術者の戦闘力=リンゴ10個分

^^b

986 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 11:12:14
>>985
ハーローキティかよw

987 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 14:29:06
>>866
開平って知ってるか?

988 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:25:39
>>975
基本的に関数は
・ほとんど同じことを2度以上書かない(再利用目的)
・データと処理が完全に分離できる場合(保守性アップ目的)
を念頭に置いとけば自然と1画面に収まるくらいになるよ

989 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:28:51
関数の行数を減らすことのみを目的として新たな関数を作る

990 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:38:11
改行を消すんですね分かります

991 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:49:02
一画面に収まる程度って、パソコン通信の一画面が20行くらいの時代から
言ってる人がいるけど、本当にそんな基準でやってたのかね。

「適当に50行くらい」とか言っとけばいいのに、スクロールしないで見られる
からバグが少なくなるとか理由付けするとうさんくなる。

992 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:59:13
コードコンプリートにサブルーチンの行数とエラー(バグ)の関係を
調査した結果がいくつか掲載されてるけど、行数がすくないほど
バグが少ないってのは否定されてるね。

ただ200行をこえるとやばいって書いてある。
よくネットなんかで言われる行数よりだいぶ大きい。

993 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 16:06:36
長いとか短いとかそういうこと考えても仕方なくないかね

994 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 16:06:50
200行だと確認しにくいからだろ

995 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 16:44:50
次は?

996 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 16:51:12
終了の方向で。

997 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 16:56:51
とうとうか。胸が熱くなるな

998 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 19:58:22
次スレたてます

999 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 19:59:14 ?S★(526363)
次スレ立てました
C言語なら俺に聞け(入門編)Part 67
http://pc12.2ch.net/test/read.cgi/tech/1278759538/

1000 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 21:10:54
return C言語なら俺に聞け(入門編)Part 67;


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

197 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)