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

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

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

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

codepadが重い場合は
http://ideone.com/
3デフォルトの名無しさん:2011/10/26(水) 19:34:51.18
mallocとかnewとかで確保したメモリってさ、ゴミ入ってるじゃん。
あれって他のプログラムが使ったカスだったりすんのかな?
もし他のプログラムが"host=xxxxx,user=name,password=****" ってなログインクエリを
作って終了してたとして、自分のプログラムで1GBぐらいヒープを確保してuserとかpasswordとか
転がってるか探したら見つかったりすんのかな?今まで見たことは無いけどWindowsとかなら理屈上ありうる?

もしそんな事が有りうるんなら、確保したメモリにパスワードとか書き込んでたなら、
メモリ解放前にシコシコ上書き削除が必要だよね。
4デフォルトの名無しさん:2011/10/26(水) 19:38:09.28
>>3
そういうのがあった時代はとうに過ぎた
5デフォルトの名無しさん:2011/10/26(水) 19:39:59.86
http://codepad.org/HymsqyPV

台数近似なんて知らないんでテキトーに組んでみたけど
前スレ>>992と結果が違うよ。どーなってんの?・3・オレ
6デフォルトの名無しさん:2011/10/26(水) 19:43:52.29
>>4
今入ってるあのゴミは何?
Windowsが毎回ゴミを詰め込んで初期化してるの?
7デフォルトの名無しさん:2011/10/26(水) 19:46:18.13
exit(1)って何で役に立つんですか?
プログラムが強制終了する関数なのは知ってますが
ifで条件分岐したらこのexit(1)使わなくてもいいんでは?
8デフォルトの名無しさん:2011/10/26(水) 19:54:04.10
>>7
main以外の関数でプログラムを終了できる。
9デフォルトの名無しさん:2011/10/26(水) 19:58:25.78
>>7
メインはatexitなんかで終了処理させるために使うな。
あとはIOバッファのフラッシュをやらせたい時とか。
10デフォルトの名無しさん:2011/10/26(水) 19:59:53.63
>>8
それは知っている
11デフォルトの名無しさん:2011/10/26(水) 20:18:43.82
なら何を聞いてるのかわからん
必ずmainまで戻るならexit使わなくていいよ
12デフォルトの名無しさん:2011/10/26(水) 20:27:44.65
main関数の中でなら、returnにするか、exitにするかは、どっちでもいい気がする。
13デフォルトの名無しさん:2011/10/26(水) 20:31:10.49
Cの宿題のほうでも聞いたのですが、そちらは丸投げ専門のようなので、こちらで質問させてください。

int main(void){
char str[256],*p=str;
int i, l;

printf("in = ");
scanf("%s", str);
i=l = strlen(str);
while(i--) {
*(p+l)=*p;
*(p+l+1)='\0';
printf("%s\n",++p);
}
return 0;
}
というプログラムを組んでいただいたのですが、どうなっているのかさっぱりわかりません。
具体的にはstrlenがどんな働きをするのかと、
a=b = strlen(str);
while(a--) {
*(p+b)=*p;
*(p+b+1)='\0';
printf("%s\n",++p);
この部分が一体全体どうなっているかわかりません。教えてください。
pには文字が入っているはずなのに、どうして*(p+b+1)='\0'のように数字を足すことができるのでしょうか。
また、a=b=strlen(str)とaも文字が入っているはずなのに、a--と数字のように扱えるのはなぜですか?

初歩的な質問で申し訳ありませんが、お願いします。
14デフォルトの名無しさん:2011/10/26(水) 20:31:26.74
>>11
exitを使わないと困る時ってある?
15デフォルトの名無しさん:2011/10/26(水) 20:34:29.78
mainから呼び出した関数の中で即時終了させたい時ぐらいかな。
16デフォルトの名無しさん:2011/10/26(水) 20:36:24.12
>>15
それは例えばどんな時?
17デフォルトの名無しさん:2011/10/26(水) 20:50:21.24
>>13
pには文字(char)が入ってるんじゃなくて、文字が入ってるメモリ領域のアドレスが入ってる。
これはポインタと言われてるんだが、Cの入門書でも読めばかなりのページを割いて説明してると思うよ。
ここで質問するよりまず入門書を読むことをお勧めする。
あなたはまだ質問以前の段階だと思う。
18デフォルトの名無しさん:2011/10/26(水) 21:00:05.79
>>13
strlenの戻り値は文字列の長さなんで、strの内容が"abc¥n"だったら、
a=b=strlen(str);
でaとbに整数値の3が入る。

char *p=str のpには、str領域の先頭アドレスが入る。(文字ではない)
勘違いし易いのは、
・宣言時のchar *p は「文字列のポインターのp」
・実行時の*p、例えば....=*p;
の場合は「アドレスpにあるデータ内容(文字など)」を意味してる、という事。

char *p より、char* pの方が直感的だとは思うが、
char* p;
char s[10];
を1行にまとめる際に、
char* p,s[10];
としてしまっては、
*がs[10]にも掛るのかの区別がつかないから、
char *p,s[10];
という表記になっている。
19デフォルトの名無しさん:2011/10/26(水) 21:01:23.08
>>13
strlenは、文字列の長さを取得する関数。"abcde"なら、5。

while(a--) {
*(p+b)=*p; strの最後にstrの先頭文字'a'をセット(strはabcdea)
*(p+b+1)='\0'; str最後+1に'\0'をセット(strはabcdea\0)
printf("%s\n",++p); strの2文字目から表示("bcdea")
}
whileでstrの文字数(つまり5回)繰り返しながら、表示開始位置をずらしていく。

こんな感じ?
20デフォルトの名無しさん:2011/10/26(水) 21:09:59.20
>>14
極めてメモリ容量が限られていて、無駄なランタイムライブラリを減らしたい時。
Cの規格通りコンパイルするとmainからプログラムが始まる。
でも、実際のプログラム開始点は、mainじゃなくスタートアップコード。
ランタイムライブラリを切り離してプログラムをコンパイルすると、
このスタートアップコードから書くことになる。
このスタートアップコードがどんな作りかは、規格外なのでコンパイラやOSによるけど、
Windowsなんかは、void __cdecl WinMainCRTStartup( void )って関数を用意する事になる。
この関数は戻り値はvoidなんで当然値を返せない。
こういう時、exitが入ってる最小限のライブラリだけリンクし、exitを使って戻り値を返す事ができる。
21デフォルトの名無しさん:2011/10/26(水) 21:39:34.68
>16
・mainに戻る前に実行したくない後処理がある場合
・while(1){...} とか無限ループになってる場合。
22デフォルトの名無しさん:2011/10/26(水) 22:30:37.30
>>13
strが0x00008000〜0x000080FFに配置されているとすると、
p = str (= &str[0]) = 0x00008000
strに"xxxxx\0"が先頭から入っていれば、b = strlen(str) = 5
p+b+1 = 0x00008006で、*(p+b+1)は0x00008006の中身 (= str[6])
23 忍法帖【Lv=40,xxxPT】 :2011/10/26(水) 22:33:24.13
>>16
処理時間の長い演算処理のプログラムか何かで、デバッグの為に途中で終了させたい時にも使うな。時としてデバッガよりも手っ取り早いからね。
24デフォルトの名無しさん:2011/10/26(水) 22:48:57.16
>16
・ファイルが無いとか開けないとか致命的なエラーがあってこれ以上処理を継続しても意味が無いとき
・そもそもmain()から他のライブラリのmainloop()なりを呼んでmain()に返ることがなくイベントドリブンで動かすようなとき
25デフォルトの名無しさん:2011/10/26(水) 23:05:48.88
>>6
毎回消してる
26デフォルトの名無しさん:2011/10/26(水) 23:06:06.15
MS-DOS上で例えば


|―|―|―|
|A|B|C|
|―|―|―|

という感じに表示(A,B,Cは空白)させたとして、A,B,Cのどこかにキーボードから入力させることってできますか?後、その入力したものを判別(数値や値の特定)させることはできますか?
27 忍法帖【Lv=40,xxxPT】 :2011/10/26(水) 23:09:24.34
>>26
適切なライブラリを利用すれば充分可能です。
28デフォルトの名無しさん:2011/10/26(水) 23:12:18.79
>>27
いや、ライブラリを使わずにしたいんだが…
29デフォルトの名無しさん:2011/10/26(水) 23:21:29.56
画面の状態を縦横の配列で保存しといて、入力がある度に表示をクリアして書き換えてやりゃ良いんじゃないの?
30デフォルトの名無しさん:2011/10/26(水) 23:41:33.85
ansi,sys使う
31デフォルトの名無しさん:2011/10/26(水) 23:47:15.21
なんでVRAMに情報が格納されているのに
またわざわざRAMに情報を格納しなくちゃいけないんですかぁぁぁぁぁぁ
32デフォルトの名無しさん:2011/10/26(水) 23:52:12.76
>>26
これはWindowsのAPIの領域だな。
特にコンソール系はドキュメント化されてないのが多いから必然的に海外のページを漁る必要がある。

前に自前のcursesライブラリ作った時に参考にしたが、これなんかは勉強になるよ
http://www.catch22.net/sites/default/source/files/setconsoleinfo.c
33デフォルトの名無しさん:2011/10/27(木) 00:00:27.17
ソースコードを配布する際に、ビルドに必要なライブラリーの存在などを調べて、各自の環境毎にMakefileを自動生成するスクリプトを付けるのがunixでは半ば常識ですが、
autoconfに関して、ライブラリー、ライブラリーパス、ヘッダーファイルの存在、ヘッダーファイルのパスを確認するスクリプトは、
みなさんどのように書いてますか?

codepadでconfigure.inの簡単な実例をお願いします。
34デフォルトの名無しさん:2011/10/27(木) 00:01:30.27
ここはプログラミング何でも相談室になったのか?
35デフォルトの名無しさん:2011/10/27(木) 00:24:56.19
>>31
何十年前の発想よw
36デフォルトの名無しさん:2011/10/27(木) 00:28:47.95
つーかMSDOSの表示を弄るのを外部ライブラリを使わずにやれるわけないじゃん。
37デフォルトの名無しさん:2011/10/27(木) 00:29:54.06
>>25
UNIXの話だけど、forkの時にメモリの内容を子プロセスにコピーする、っていうじゃ
ないですか。とするとmallocして確保する領域は、親のプロセスのメモリ内容のコピーに
なってたりしないのかな?

メモリ内容のクリアが発生するとしたら、誰がいつどこでどのように... おっとスレチ気味?
38デフォルトの名無しさん:2011/10/27(木) 00:29:59.57
scanfで入力した10桁ぐらいの数字を一桁づつ配列に入れるやり方教えて下さい
39デフォルトの名無しさん:2011/10/27(木) 00:40:17.85
>>38
そういうのは文字列として読み込んでから処理したほうが楽だぞ
40デフォルトの名無しさん:2011/10/27(木) 00:41:04.61
>>38
最初からscanf()で配列に入れないのはなんで?
41デフォルトの名無しさん:2011/10/27(木) 00:54:00.84
>33
ちょっと前に書いた奴、libtools使うようにしてある
http://codepad.org/0FB7OdGG

configure && makeの世界へようこそ、ここら辺を参考にしてね
http://www.02.246.ne.jp/~torutk/cxx/automake/automake.html
http://www.bookshelf.jp/texi/libtool/libtool-ja.html
http://www.geocities.jp/fut_nis/
42デフォルトの名無しさん:2011/10/27(木) 01:05:02.51
>>38
こんな感じかな。
みんなが言うようにそのまま文字列で処理した方が良いと思うけど・・・

#include <stdio.h>

int main(int argc, char *argv[])
{
  int i;
  char buf[256];
  char *s = &buf[sizeof buf];
  int neg=0, radix=10;

  scanf("%d", &i);

  *--s = '\0';
  if (i<0){
    neg = 1;
    i = -i;
  }else
    neg = 0;
  do{
    *--s = (i % radix) + '0';
    i /= radix;
  }while (i>0);

  if (neg) *--s = '-';

  printf("%s\n", s);
  return 0;
}
43デフォルトの名無しさん:2011/10/27(木) 02:04:52.65
なるほど!
ありがとうございます!
44デフォルトの名無しさん:2011/10/27(木) 02:36:22.41
>>42
sprintf…
45デフォルトの名無しさん:2011/10/27(木) 02:54:22.19
42 は sprintf を唱えようとした!
しかし 42 は呪われている!
MP が足りない!
46デフォルトの名無しさん:2011/10/27(木) 03:42:47.33
charの配列であれば
char sz[]="abcd";
sz[2]='_';
の様に書きえることが出来るのですが、
charのポインタの場合、どの様すれば書き換えることが出来るのでしょうか?
char* psz="abcd";
psz[2]='_';/*エラー*/
47デフォルトの名無しさん:2011/10/27(木) 03:49:50.86
書き換えちゃらめ。
前者はcharの配列が用意されて、その中にabcdっていう4つの文字(文字列)が入ってる。
後者はabcdという文字列リテラルへのポインタ。
文字列リテラルは文字列と違って定数なので変更できない。
48デフォルトの名無しさん:2011/10/27(木) 04:09:02.10
>>44,45
sprintf使ったらscanfで読むのと同じになるじゃん。
最初からscanfを使わない事から、多分何か理由があって使わないのかなと考えただけ。
49デフォルトの名無しさん:2011/10/27(木) 05:07:38.97
え゛っ
char sz[]="abcd";と
char *sz="abcd";って
どっちも'a'の格納されているアドレスが
szという変数に入るから、あとは読み書き
自由なんじゃないの?
50デフォルトの名無しさん:2011/10/27(木) 05:19:19.69
いや、違う。
>>47であってる
51 ◆QZaw55cn4c :2011/10/27(木) 05:24:49.71
>>49
昔は、環境によっては
char *p = "abcd";
に対して
p[2] = 'x';
などとするのは可能な場合もありました。

しかし >>47 のとおり、文字リテラルを書き換えることができない場合もあります。
できないことがあるのだったら、

char a[] = "abcd";
a[2] = 'x';
と書くのが無難です。

だれか規格引用よろ。
52デフォルトの名無しさん:2011/10/27(木) 05:27:38.20
> 可能な場合もありました。
> できない場合もあります。

情報量0だな。
53デフォルトの名無しさん:2011/10/27(木) 05:38:53.72
motto興味深いネタ振ってくれよ
54デフォルトの名無しさん:2011/10/27(木) 05:40:01.50
あ、ここ俺に聞けスレだったゴメン
55デフォルトの名無しさん:2011/10/27(木) 06:15:53.74
JISのサイトはAdobe Readerを最新版にすると閲覧できんからなぁ
かといって最新版にしないとセキュリティホールがあるし…

まったく改善しようという気配が見られない所がさすがJIS。
56デフォルトの名無しさん:2011/10/27(木) 06:37:20.88
(const char []){"abcd"} == "abcd"
ってんだから格納してあるリテラルを書換えたら整合性なくなっちまうのは当然
57デフォルトの名無しさん:2011/10/27(木) 07:24:37.81
>>46
文字列リテラルの型はconst char[]なので書き換えてはダメ。

>>49>>51
DOSの頃はメモリ保護をしていないので書き換えることができた。
しかし文字列リテラルはread onlyで有ることを期待されて、最適化しても良いので、
同コード内の別の"abc"が同じ領域を割り当てられることが有り、その場合誤動作
してしまう。


58デフォルトの名無しさん:2011/10/27(木) 07:31:43.87
>>37
fork()したら同じページがCoWとかでマップされてんだろうけど、
exec()したあとはついてこないでしょ。
タイミングはOSとかランタイムの実装によるんじゃないの?
59デフォルトの名無しさん:2011/10/27(木) 11:00:26.24
>>55
それは流石に、Adobe Readerの問題だろ。
60デフォルトの名無しさん:2011/10/27(木) 14:34:14.89
5が出るまで数字を入力して5が出たら5以外の数字の最大と最小値を出すプログラムを教えてください
61デフォルトの名無しさん:2011/10/27(木) 14:36:39.60
ファイルの読み込みで、
fgetsや、getcなどを使うと、読み込めるまで待ちますが、
読み込み待ちを行わない方法はないのでしょうか?

何がしたいかと言うと、デバイスファイルの接続先の機器が固まることがあり、
一定間隔でファイルを読めない場合は、固まってるので、機器の初期化実行後、再度読み込みを開始したいのです。
62デフォルトの名無しさん:2011/10/27(木) 14:38:24.74
スレッド
63デフォルトの名無しさん:2011/10/27(木) 14:45:30.13
>>60
最初に5を入力したら、どうなるのが良い?
64デフォルトの名無しさん:2011/10/27(木) 14:48:06.11
>>61
つ[select()]
65デフォルトの名無しさん:2011/10/27(木) 14:49:43.75
>>55
買えって言ってる行間が読めないか?

/* あのぼったくり価格を肯定したくはないが */
66デフォルトの名無しさん:2011/10/27(木) 15:56:30.82
>>63
最大最小は無いと出れば問題無いです
67デフォルトの名無しさん:2011/10/27(木) 16:00:35.75
>60
5以外の数字の範囲は?
マイナス値が入力される可能性は?
68デフォルトの名無しさん:2011/10/27(木) 16:14:51.55
最大値記憶用変数にINT_MIN、
最小値記憶用変数にINT_MAXで初期化(型により臨機応変に)。

数値入力→入力が5ならループ抜ける→最大値、最小値と比較して保存orスルー→入力に戻る

ループ抜けたあと、最大値、最小値に変化が無い or 最小値>最大値 なら
"最大最小は無い"と出力
69デフォルトの名無しさん:2011/10/27(木) 16:16:20.44
1] 授業単元: 画像処理
[2] 問題文(含コード&リンク): bmp、jpg形式の画像の輝度値を表示させるプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc opencv
 [3.3] 言語: C
[4] 期限: 2011年10月29日まで
[5] 以下のURLの画像のような、元々の白黒画像を白と黒の輝度値を表示した画像に変換したいのですが、どうしていいか
  全く分からなくて、困っています
  http://mcm-www.jwu.ac.jp/~physm/buturi07/robo/genri02.html
  画像だけ載せることができればいい課題なので、最悪このような事を行えるソフトウェアがあればいいのですが
  ネットでたくさん検索を行ったのですが、私の浅知恵のせいか、よく分かりませんでした
  ヒントだけでもいいので、よろしくお願い致します
70デフォルトの名無しさん:2011/10/27(木) 16:30:25.47
71デフォルトの名無しさん:2011/10/27(木) 16:47:21.93
>>69
その画像を、pgmのテキスト形式で保存してテキストエディタで開く。
pgmのテキスト形式で保存できるツールは例えばIrfanViewやImageMagickがある。
ついでに言えば、スレ違い。
72デフォルトの名無しさん:2011/10/27(木) 17:04:01.85
5人の学生の成績(100点満点)の値をキーボードから読み込み,それらの平均点と分散(標準偏差の二乗)を求めるプログラムを作れ。


授業の課題です。。。
全然分からないんで解説付きでお願いします。
73デフォルトの名無しさん:2011/10/27(木) 17:05:20.21
>>72
宿題スレへどうぞ。
7446:2011/10/27(木) 17:48:03.44
皆様回答ありがとうございます。

char* sz="0000000000"とあるのを"0000111111"に変更したいと思い、
質問させていただいたのですが、解決方法はchar sz[]="0000000000"しかない、
と言うことで合っていますでしょうか?
75デフォルトの名無しさん:2011/10/27(木) 17:56:58.18
>>74
sz="0000111111";
もできるさ
76デフォルトの名無しさん:2011/10/27(木) 18:16:12.28
2パターンだけなら75のようにポインタの値変える方が楽じゃね?
77デフォルトの名無しさん:2011/10/27(木) 18:41:06.32
unsigned long int b =0;
b ^= 63;

これで。
78デフォルトの名無しさん:2011/10/27(木) 18:41:57.69
byte b;
79デフォルトの名無しさん:2011/10/27(木) 19:08:09.53
forを使って
増加比率5.2

人数52人のクラスのN年後を予想することってどうすればいいでしょうか?
80デフォルトの名無しさん:2011/10/27(木) 19:12:44.38
>>79
52*pow(5.2, N)
81デフォルトの名無しさん:2011/10/27(木) 19:21:55.13
p <- 52
for i in N
  p <- p * 5.2
82デフォルトの名無しさん:2011/10/27(木) 19:27:13.82
一年の増加率が1、6%の62人のクラスのN年後の人数を出すプログラムの作り方を教えてください
83デフォルトの名無しさん:2011/10/27(木) 19:28:13.69
>>82
62*pow(1.016, N)
84デフォルトの名無しさん:2011/10/27(木) 19:32:37.11
visualC 使ってるんですけど、デバックなしで実行すると指定されたパスが見つからないって
出るときがありできないんですけど、解決法はありますか?
85デフォルトの名無しさん:2011/10/27(木) 19:43:28.45
>>84
指定したパスをここに書くと、解決しそうな予感
86デフォルトの名無しさん:2011/10/27(木) 20:34:05.92
>>83ですけど
今度は人口のプログラムで何年後に人口比率が1,6%の時に
人口が80億になるかを図るプログラムを作っているのですが
何となくこういう感じで作ってみたのですが
うまくいきません
どうしたらいいでしょうか?

#include<stdio.h>
#include<math.h>
int main(void)
{
int n,a;
for(a=0;a<n;a++)
a=560000000*pow(1.016,n);
if(a>=10000000000)
printf("%d",i);
return 0;
}
87デフォルトの名無しさん:2011/10/27(木) 20:37:11.87
>>86
対数を使えばおk
88デフォルトの名無しさん:2011/10/27(木) 20:37:39.99
>>86
intであらわすことができるのは大抵42億まで。
long long int使え。
89デフォルトの名無しさん:2011/10/27(木) 20:38:46.20
>>86

int a = 10000000000;
printf("%d\n",a);
90デフォルトの名無しさん:2011/10/27(木) 20:38:49.30
>>86
int だとオーバーフローする
91デフォルトの名無しさん:2011/10/27(木) 20:39:10.05
違った、±21億だ。
doubleでもいいぞ。
9269:2011/10/27(木) 20:47:35.78
>>70
>>71
スレ違い失礼しました、どこで聞くべきでしたかね?
ありがとうございます、アスキーコード形式で保存したところ
無事に輝度値の数値化に成功しました
ただ、どこがどの輝度値を表しているか分からないので
そこは自力でなんとかしてみたいと思います
93 忍法帖【Lv=17,xxxPT】 :2011/10/27(木) 21:02:03.36
授業で何かプログラム組めって言われたんだけどアイデアが浮かばない…
94デフォルトの名無しさん:2011/10/27(木) 21:06:08.71
#include<stdio.h>
#include<math.h>
int main(void)
{
long long int a;
for(a=0;a<n;a++)
a=560000000*pow(1.016,n);
if(a>=10000000000)
printf("%d",n);
return 0;
}

こうしてみたのですが
どうしたらいいでしょう?
95デフォルトの名無しさん:2011/10/27(木) 21:10:45.52
そんなコンパイルも通らんもんどうしろと。
96デフォルトの名無しさん:2011/10/27(木) 21:16:26.16
#include<stdio.h>
#include<math.h>
int main(void)
{
long long int a;
int a;
for(a=0;a<n;a++)
a=560000000*pow(1.016,n);
if(a>=10000000000)
printf("%d",n);
return 0;
}


人口のプログラムで何年後に人口比率が1,6%の時に
人口が80億になるかを図るプログラムを作っているのですが
何となくこういう感じで作ってみたのですが
うまくいきません
どうしたらいいでしょうか?
全然上手くいかないです
97デフォルトの名無しさん:2011/10/27(木) 21:19:48.79
#include<stdio.h>
#include<math.h>
int main(void)
{
long long int a;
int n;
for(n=0;;n++) {
a=560000000*pow(1.016,n);
if(a>=10000000000ll) {
printf("%d, %lld\n", n ,a);
break;
}
}
return 0;
}
98デフォルトの名無しさん:2011/10/27(木) 21:30:16.33
ループまわすならpow()使う必要はない。
int main(void)
{
  double a = 560000000;
  int n;
  for (n = 1; ; n++) {
    a *= 1.016;
    if (a >= 10000000000.0) {
      printf("%d, %f\n", n ,a);
      break;
    }
  }
  return 0;
}
99デフォルトの名無しさん:2011/10/27(木) 21:31:55.13
>>96
1.6%ずつで、56億→80億に何年かかるか、なら
#include<stdio.h>
int main(void)
{
int c=0;
double a=56;
while (a<=80) {
a*=1.016;
c++;
}
printf("%d",c);
return 0;
}

実行結果:23
100デフォルトの名無しさん:2011/10/27(木) 21:37:23.29
人口を整数で数える人と、浮動小数点で数える野郎は、別人種
101デフォルトの名無しさん:2011/10/27(木) 21:39:01.05
>>100
本質的でない所に拘ってると、伸びないよ。
102デフォルトの名無しさん:2011/10/27(木) 21:44:23.02
自作プログラムのGUIを作りたいのですが、手始めにメッセージ表示から始めたいと思ってます。
・関数として書いてあるforループ内の動作上のメッセージをウィンドウ中に表示させる
というのをやろうと思ってます。

ボーランドのC++スターターで試してみると簡単に作れるのですが、PCはVC++経験のみの私には
操作が分かりずらいのと、GUIライブラリ(?)充実版は高価でにっちもさっちもでした。
VC++で再挑戦したいので、この程度をカバーしているお勧めの本(英語でも可)やサイトを
ご存知でしたら教えてください!
103デフォルトの名無しさん:2011/10/27(木) 21:53:00.37
いまさらネイティブAPI呼ぶとかマゾだな
Gtk+やQtがおすすめ
104デフォルトの名無しさん:2011/10/27(木) 22:15:49.62
>>96
int n=ceil(log(1.0e+10/5.6e+8)/log(1.016));
105デフォルトの名無しさん:2011/10/27(木) 22:16:12.91
分かりずらいの時点でガキ確定だな
106デフォルトの名無しさん:2011/10/27(木) 23:46:56.67
日本語って大事だよね
107デフォルトの名無しさん:2011/10/28(金) 00:10:42.33
正式なドキュメントなら、うるさく言ってもいいけど、ネットの匿名掲示板でそんな事言ってもな・・
108デフォルトの名無しさん:2011/10/28(金) 00:13:54.71
>>102
>GUIライブラリ(?)充実版は高価で
VCの方が高価だと思うんだが…
109デフォルトの名無しさん:2011/10/28(金) 12:01:10.61
文字列リテラルの書き換えに関しての規格を引用します。
一応、また俺流の訳を載せておきます。

最初の文は、おそらく、

char *p = "abc";
char *q = "abc";

のような場合、必ずしも p != q であるとは言えないということだと思います。


6.4.5 String literals

6 It is unspecified whether these arrays are distinct provided their elements have the
appropriate values. If the program attempts to modify such an array, the behavior is
undefined.

(文字列リテラルにより初期化される)これらの配列が、適切な値の要素を持っているならば、
これらの配列が各々異なるものであるかは特定されない。
プログラムがこのような配列の変更を試みると、動作は未定義である。
110デフォルトの名無しさん:2011/10/28(金) 12:52:37.31
同じ内容の配列が個別に提供されるかどうかは決まっていません。
そのような配列を修正しようとした場合のふるまいは未定義です。
111デフォルトの名無しさん:2011/10/28(金) 12:59:50.48
てーことは、p[2]++; によって p[2] == 'd' になることは保証されるわけか
p != q であっても関係ないわけで
112デフォルトの名無しさん:2011/10/28(金) 13:03:19.16
>>111
そもそも書き換えられないからダメ。環境によっては領域外アクセスで終了する。
仮に書き換えられる環境だとしたら、
p[2] == 'd'であると同時にq[2] == 'd'となるかもしれないということ。
113デフォルトの名無しさん:2011/10/28(金) 13:04:00.00
でもリテラルはリードオンリーのページに配置される事が多いんじゃないの?
114デフォルトの名無しさん:2011/10/28(金) 13:05:33.51
>>103
Qtって無料で使えるの?
115デフォルトの名無しさん:2011/10/28(金) 13:25:12.17
>>113
昔ゃそんなメモリ管理なんてなかったんだよ。つーか、今でも組み込みだとないこともある。
それはそうと、>109は同じ文字列のみに限定しないと思う。
例えばchar * p = "abc"; char * q = "bc";とするとq == p + 1になった。
116デフォルトの名無しさん:2011/10/28(金) 13:28:22.83
>>115
組み込みならなおさら、ROMに置いたりするだろ。
117デフォルトの名無しさん:2011/10/28(金) 13:34:03.10
if(>>112==110) 分かっててぼけたんだな、そりゃすまん
else >>109-110 よ、未定義になる理由はそこじゃない。>>113 が当たらずも遠からず
118デフォルトの名無しさん:2011/10/28(金) 13:42:32.34
110==113なわけだが。

110は超訳してみただけだよ。
英語に関しては超絶アホだから間違ってるだろうけどね。
119デフォルトの名無しさん:2011/10/28(金) 14:21:15.28
昔VC6だったかgccだったかわすれたが
char *a = "abc";
a[1] = 'd';
printf("abc");
でadcと出たことがあったなぁ。
120デフォルトの名無しさん:2011/10/28(金) 15:00:31.11
ttp://codepad.org/h9te8C0w

char *p="abc";
printf("%s\n",p);
p[1]='-';
printf("%s\n",p);

-----出力-------
abc
abc
----------------
ROM上に配置?
121デフォルトの名無しさん:2011/10/28(金) 15:14:54.22
振る舞いは不定なんだから不定。それ以上でもなければそれ以下でもない。実に単純。
やっていいかどうかじゃなく不定。「プログラマは何でも知っている」がCの原則。
不定な結果が欲しいからプログラマはそうするのであってコンパイラはそれに従うのみ。
122デフォルトの名無しさん:2011/10/28(金) 16:13:54.54
int i;
123デフォルトの名無しさん:2011/10/28(金) 19:09:15.71
>>120
"abc"は .rodata に配置される。
124デフォルトの名無しさん:2011/10/28(金) 19:10:59.02
で、上で言ってるのは "abc" という文字列が2箇所にあったとき
それが同じ文字列か違う文字列かは内緒、という話。
125デフォルトの名無しさん:2011/10/28(金) 19:13:24.41
>>120
*p を p[] に変えてみれば、挙動の違いと意味をよく理解できるはずだ。
126デフォルトの名無しさん:2011/10/28(金) 20:05:06.75
>120
C machineで実行したら
abc
a-c

と出力されて、TestM()を2回実行すると

abc
a-c
a-c
a-c

と出力された。
環境依存だな。
127デフォルトの名無しさん:2011/10/28(金) 20:13:59.80
未定義だから実装の都合で好きにして良くて、
ポータブルなコードを書くためには特定の実装の動きを仮定したらダメよって事。
128デフォルトの名無しさん:2011/10/28(金) 20:21:58.04
Unix勉強してるんだけど、Unixで離れた端末をリモートで操作できるって
いってるけどこれ異常に凄くないですか?

端末が起動してなくても操作できるんですか?

129デフォルトの名無しさん:2011/10/28(金) 20:34:52.15
常にスタッフがスタンバってるからな
130デフォルトの名無しさん:2011/10/28(金) 20:47:15.11
>>129
ネットワークってUNIXの場合無線は無理ですか?

131デフォルトの名無しさん:2011/10/28(金) 20:58:37.31
おk
132デフォルトの名無しさん:2011/10/28(金) 21:06:31.67
電波はどうやって飛ばしているの?
133デフォルトの名無しさん:2011/10/28(金) 21:09:29.56
最大値の求め方について教えてください。
配列の最大値を求めたくて
下のプログラムを作ったのですが,うまく動作しません。

for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) {
if( qxr < qxxr[maa] ) {
qxr = qxxr[maa];
qxxxr = maa;
}
}

printf("最大のq*rは%dのとき%f\n",qxxxr,qxr);

最大のq*rは0のとき0
と表示されるのですが間違っているところがわかれば教えてください。
配列は下のような感じです.

qxxr[0]=40.800000
qxxr[1]=41.600000
qxxr[2]=0.000000
qxxr[3]=0.000000
qxxr[4]=40.000000
qxxr[5]=0.000000
qxxr[6]=0.000000
qxxr[7]=40.000000
qxxr[8]=0.000000
qxxr[9]=0.000000
134デフォルトの名無しさん:2011/10/28(金) 21:15:36.14
>>128
その辺のパソコンもリモートで操作できるよ。
起動してなくてもという点についてはネタなのかどうかわからんが、マジックパケット投げてから操作すればいい
135デフォルトの名無しさん:2011/10/28(金) 21:18:21.88
>>134
思うんですが、個人同士のパソコンで、遠くにいる相手のパソコンを動かす
時にそのパソコンが起動しているのって不自然じゃないですか?
思うに、Unixとかの場合は何百台のパソコンが一つの特定の場所(オフィス)
とかに存在していて、その場所に存在する管理者の制御の元で起動しており、
遠く離れた人がそのパソコンにアクセスできるような状況が自然だと思うの
ですがどうでしょうか?
136デフォルトの名無しさん:2011/10/28(金) 21:22:02.19
>>135
unixはもともと高性能サーバーを中心に据えて、複数の低価格端末で共有利用する仕組みだよ。
137デフォルトの名無しさん:2011/10/28(金) 21:22:30.79
>>135
前段 操作したいパソコンは起動していないのが自然ってこと?なら前述のとおり。
後段 起動してるなら操作できるよ。

どこが疑問なのかがわからん。
138デフォルトの名無しさん:2011/10/28(金) 21:23:53.97
>>136
逆。
そういうのがイヤだからUNIXが誕生した。
139デフォルトの名無しさん:2011/10/28(金) 21:26:30.85
>>137
操作したいパソコンが起動していなくても、管理者が遠地のクライアントの
アクセスに対し端末を開放するのは自然だと思います。

でも、個人同士で、例えば机の引き出しに眠っているUnix搭載PCが起動せずに
リモートで操作される何てあり得ないじゃありませんか?

起動していても操作される何てあり得ませんが。
140デフォルトの名無しさん:2011/10/28(金) 21:28:50.45
>>139
よくわからないが、君が勉強している本には起動していない端末を操作することができる、と書いてあるのかい?
それに、管理者が開放するってのは、管理者が電源をわざわざ入れているってことかい?
141デフォルトの名無しさん:2011/10/28(金) 21:29:08.32
>>138
え?
142デフォルトの名無しさん:2011/10/28(金) 21:34:46.01
>>140
良く分からない・・
でも、遠隔操作されているパソコンってどんな状態なんですか?
画面付いてゴースト人間が操作してるみたいな感じになってますか?
143デフォルトの名無しさん:2011/10/28(金) 21:34:52.80
とりあえず、スレ違いだからどっか逝け。
144デフォルトの名無しさん:2011/10/28(金) 21:37:35.71
WindowsってNT 95〜7までありますけど、C言語に対応していないシリーズって
ありますか?
145デフォルトの名無しさん:2011/10/28(金) 21:39:51.97
日本語って難しいなぁ。
146デフォルトの名無しさん:2011/10/28(金) 21:40:26.52
>>142
そっからかよ。
広義の話をすれば2chに書き込んでる時点で2chのサーバを遠隔操作してるわけだが。
147デフォルトの名無しさん:2011/10/28(金) 21:48:33.96
>>146
でも2chの場合は、巨大サーバだから情報を発信できるし、プロバイダも
あるから個人からもアクセスできると思うんです。

Unixってしかも20年くらい前ですよね?Unixは通信が便利というけど
技術的にそんな高いんかと。

後Unixのネットワーク系はインターネットなんですか?
VPNとか聞いた事ありますが。
148デフォルトの名無しさん:2011/10/28(金) 21:53:32.13
>>147
C言語スレに来るような人なら普通は知っているものだけど、
インターネットはUNIXから生まれた。

今もネットワーク機器はUNIXで動いている。

WindowsやLinuxでも同様のことが出来るけど、UNIXの足元にも及ばない。
特にWindowsはダメだな。



って言うか俺がインターネットの設計者だったりする。
当時3歳だったが、その国の日常語なら5分で理解する天才なのでね。
149デフォルトの名無しさん:2011/10/28(金) 21:55:50.46
日常語
めし、風呂、寝る
150デフォルトの名無しさん:2011/10/28(金) 21:58:33.60
ネットワーク機器は独自OSかLinuxが多そうだけど。
151デフォルトの名無しさん:2011/10/28(金) 22:01:21.46
>>147
君のパソコンも世界に情報を発信できるし、世界の個人ユーザからアクセスされることもできるよ。
多分だけど、適当に仕入れてきた情報をまだ理解できてないんだと思う。
で、なんでこのスレでそれ聞いたん?
152デフォルトの名無しさん:2011/10/28(金) 22:08:35.81
>>148
マジか!?
インターネットの父ってこの前死んだんじゃなかったっけ?
天国から?
153デフォルトの名無しさん:2011/10/28(金) 22:11:50.40
>>150
ルーターやプリンタはnetBSDが多いって聞いたな
テレビやBDデッキはlinuxが多いみたいだけど
154デフォルトの名無しさん:2011/10/28(金) 22:12:42.61
>>150
IP v6 が初めて実装されたのがBSD UNIXですよ。
ttp://www.ipv6style.jp/jp/special/kame/20051121/index.shtml


こんなの使わないでしょ。

ttp://www.yamdas.org/column/technique/ipv6_1.html
そこに最近 USAGI Project による検証試験が行なわれ、「Linux の IPv6 プロトコルスタックの実装は、他の OS のものと比べて、著しく品質が劣ったもの」という分析結果が出た。
155デフォルトの名無しさん:2011/10/28(金) 22:12:45.06
>>151
アクセスするにはそういう契約が必要では?
Unixの場合は、Unix同士、契約している端末同士のネットワークでしょ?

もし自由にアクセスできるなら、パソコン侵入し放題じゃないw

ファイル共有ソフトのキンタマウイルスとかそういう以前の問題じゃないw
156デフォルトの名無しさん:2011/10/28(金) 22:13:09.96
>>152
彼は13歳になる前に死んだんだよ。。。
157デフォルトの名無しさん:2011/10/28(金) 22:16:43.96
>>152
DMRのことかな。インターネットの父ともいえるけれど。
ちなみに村井さんはご健在だった。もしかしてと思ってちょっとあせった。

>>155
そういう契約ってなんぞ。
現に俺は今自宅じゃないところから、自宅のPCで起動しているJaneを使って書き込んでいるよ。
158デフォルトの名無しさん:2011/10/28(金) 22:18:15.07
>>157
じゃぁ何で君は俺のPCに侵入できない?
159デフォルトの名無しさん:2011/10/28(金) 22:19:08.66
>>158
リモートデスクトップでぐぐってきてくれ。
160デフォルトの名無しさん:2011/10/28(金) 22:19:35.70
/dev/heaven
161デフォルトの名無しさん:2011/10/28(金) 22:20:03.57
>>154
安いルータとかはLinuxが多いらしいじゃん。
Ciscoなんかは独自OSだよね。
162デフォルトの名無しさん:2011/10/28(金) 22:20:17.50
>>157
そりゃ自分のPCには遠くから自分で操作できるのも何か可能っぽい感じはするよw
163デフォルトの名無しさん:2011/10/28(金) 22:23:50.20
>>157
なんで村井が出てくんだよw
164デフォルトの名無しさん:2011/10/28(金) 22:24:06.82
>>150,153
ネットワーク機器、特にルータならCisco(IOS)が主流だよ。

やっぱりここは答える方も初心者なのか?
よく分からないなら書き込まなけりゃ良いのに…
165デフォルトの名無しさん:2011/10/28(金) 22:24:13.15
>>157
アクセス権限ってあるでしょ。
166デフォルトの名無しさん:2011/10/28(金) 22:29:55.21
>>162
ああ、UNIXシステムはどこの馬の骨とも知れない人が適当なマシンを操作できると思ってたの?
167デフォルトの名無しさん:2011/10/28(金) 22:31:03.65
クラックすればできるだろ。
つーか、UNIX/インターネットの世界ではそれは常識(だった)
168デフォルトの名無しさん:2011/10/28(金) 22:31:53.76
>>164
家庭用の範囲である程度かじった程度なんじゃないのかな。
IOSってiPhoneの!?ってなりかねんよw
169デフォルトの名無しさん:2011/10/28(金) 22:32:21.71
>>166
いや無理だと思うけど、君らが可能っぽい体で反応したからさ・・
170デフォルトの名無しさん:2011/10/28(金) 22:32:27.76
サブネットすらなかった時代の話か?
171デフォルトの名無しさん:2011/10/28(金) 22:33:05.03
なりかねないから独自OSって書いたんだよ・・・
172デフォルトの名無しさん:2011/10/28(金) 22:34:25.70
>>167
クラック、クラックっていうけど具体的手法いえる奴ほとんどいないな。


不正アクセスっていう言葉は良く聞くけど、それはログインできるサーバ
にIDとパスを不正に取得して入るとかそういう意味のアクセスがほとんどだよね。

173デフォルトの名無しさん:2011/10/28(金) 22:37:11.76
>>169
質問をまとめようぜ。んで、くだ質に行っちゃいなよ。
174デフォルトの名無しさん:2011/10/28(金) 22:39:30.58
アルゴリズムとデータ構造っていう台の本めっちゃ多いんだけど
どれも同じような内容しか書いてなくないですか?
ソートならクイックだのマージだの・・シェルだのシェーカーだの
知ってるし・・って感じです。

もっと多く知りたいんですが・・
175デフォルトの名無しさん:2011/10/28(金) 22:40:40.56
もくじというものがあってだな
176デフォルトの名無しさん:2011/10/28(金) 22:42:39.37
>>174
同じような内容だからタイトルも似通ってるんじゃね?w
177デフォルトの名無しさん:2011/10/28(金) 22:45:37.35
ttp://ja.wikipedia.org/wiki/QNX
> QNXのシステムは非常に小さく、フロッピーディスク1枚に納まってしまう。そして非常に高速であり機能的にも完備されている。

> 1990年代中盤、Quantum社は市場がPOSIXモデルに素早く移行しつつあるのを見て、カーネルの互換性を高めるための書き換えを決定した。
> そしてリリースされたのが QNX 4 である。
> 同時に QNX 用のX Window Systemも用意された。QNX 4 ではUNIX用ソフトウェアの移植が容易となり、

> Cisco の IOS-XR (IOSの新バージョン)は QNXベースである。


UNIXの定義
現実には、UNIXは以下に示す4種類の条件をひとつでも満たすOSを指す言葉として使われている。

1.UNIXの商標を管理する団体The Open Groupより、同団体が定義したSingle UNIX Specificationを満たすことの認証を受けたOS。
2.ベル研究所で開発されたオリジナルのUNIX及び、オリジナルのUNIXの派生OSとしてベルの認可を得た過去のOS。
3.オリジナルのUNIXを起源にもつOS。
4.POSIXなどのUNIXに関連する規格をみたす、UNIX互換なOS。

4で判断するとLinuxもIOSもUNIX


かなとおもったけど違うか。
178デフォルトの名無しさん:2011/10/28(金) 22:47:37.56
>>174
そんなお前にはこれが最適。
The Art of Computer Programming
179デフォルトの名無しさん:2011/10/28(金) 23:09:58.58
>>178
さんきゅー
日本語版もあったw

ゲーム作りたいんですよねー
ゲーム作るのもアルゴリズム考える力必要ですか?
180デフォルトの名無しさん:2011/10/28(金) 23:41:31.52
181デフォルトの名無しさん:2011/10/28(金) 23:46:56.57
>>179
トイプログラムのうちはアルゴリズムを余り知らなくても組める。
やって面白いゲーム作ろうとすると、色々盛り込みたくなる。
問題は、処理時間がかかるようになつたり、コード量が増えて修正の手間が増え、バグ発見が難しくなること。
適切なアルゴリズム→処理高速化、再利用出来るコード→見通しのいいコードが理想だが、「適切なアルゴリズム」を選ぶためには、まずは当然アルゴリズムを知っておく必要がある。
この辺は鶏と卵の関係だから、高度なゲーム作りにトライしつつ、アルゴリズムの本とかを漁る事にぬると思う。
182 ◆QZaw55cn4c :2011/10/28(金) 23:55:23.38
>>179
まず着手するのが手っ取り早いです。必要な知識は作っていくうちにおいおいわかってくると思います。

>ゲーム作りたいんですよねー
うらやましいですね。「まず創めること」がなにより一番難しいんですよね。
183デフォルトの名無しさん:2011/10/28(金) 23:56:57.59
本当にゲームを作りたいと思ってる奴は作りたいとか言う前に既に手を動かしてるよ
184デフォルトの名無しさん:2011/10/28(金) 23:59:54.08
誰でもできることがなんでうらやましいんだ?
185デフォルトの名無しさん:2011/10/29(土) 00:00:38.32
アルゴリズムとかデータ構造って分野によって独特なのがあるから、
一般的なのを沢山読むよりはやりたい方向に突っ走る方が良い気がする。
186デフォルトの名無しさん:2011/10/29(土) 00:01:38.55
もちろん違う方面の手法がヒントになったりする事も多々ある。
187デフォルトの名無しさん:2011/10/29(土) 00:04:43.79
ブログラマーは人口なの1%も居ないんだから、誰でも出来る事じゃないな。
188デフォルトの名無しさん:2011/10/29(土) 00:07:05.75
は?
>ゲーム作りたいんですよねー
に対してだろ。
余命幾許もないってことなんかな。
189デフォルトの名無しさん:2011/10/29(土) 00:08:03.05
乱数に頼らない成果物を作るならアルゴリズム大事だよね
早打ちスーパー囲碁みたいな思わぬところに乱数使うのは別として
190デフォルトの名無しさん:2011/10/29(土) 00:09:08.19
なんのこっちゃ。
191デフォルトの名無しさん:2011/10/29(土) 00:09:14.87
>>184
年とるといろいろ億劫になるんだよ
192デフォルトの名無しさん:2011/10/29(土) 00:19:18.62
>>189
確率的アルゴリズムはそれだけで一大分野だよ
193デフォルトの名無しさん:2011/10/29(土) 00:51:52.84
>138
分散処理と混同してないか?
194デフォルトの名無しさん:2011/10/29(土) 00:54:01.35
>>193
Multicsも知らんのか?
195デフォルトの名無しさん:2011/10/29(土) 00:57:51.86
>>138
VAX11とかの頃はまだVT100とかのダム端末いっぱいぶら下げてみんなで使ってたんだよ。
196デフォルトの名無しさん:2011/10/29(土) 00:59:29.95
質問者はタンパク質計算やSETIのような一つのコンピューターが多数のコンピューターを操作することを想定したのかな?

とりあえず「UNIXカーネルの魔法」読んどけ。

197デフォルトの名無しさん:2011/10/29(土) 01:04:25.16
当時Multicsに関わっていた人々の一部がUNIXシステムの開発に移行した。
表面上、UNIXはコマンドの命名法まで含めた多くの領域で Multics の影響を示している。
しかし設計思想は全く異なっており、可能な限りシステムを小さく保とうとしていた。
つまり、Multics で最も問題と思われた部分で違いを見せたのである。

"Unix"という名称(元々は「Unics」)は「Multics」からの連想である。
Multics の M が「multiplexed」(多重化)であるのと逆に、UNIX の U は「uniplexed」(単一化)だと噂された。
より現実的で直接的な手法を選び、Multicsを否定した設計者の思想がにじみ出ていると言えよう。
198デフォルトの名無しさん:2011/10/29(土) 01:11:46.72
ワークステーションが流行った後も、サーバ+沢山のディスクレスorデータレスWSっていう組み合わせはけっこう一般的だった。
199デフォルトの名無しさん:2011/10/29(土) 01:12:09.54
ttp://www.wizforest.com/OldGood/OS/#multics

MULTICS
...
高価なコンピューターを、1台で何台分にも使うことの出来るこのシステムは非常に注目されます。
...

UNIX
...
AT&T はMULTICS の開発が失敗に終わりそうだと見るとすぐに撤退を決めました。しかし、AT&Tから参加していた Ken は、
MULTICS に未練を感じていました。

なぜなら、彼は MULTICS で作成した「宇宙旅行ゲーム(Space Travel)」を非常に気に入っていたのです。
MULTICSプロジェクトから撤退してしまった今では、あの面白いゲームが遊ぶことが出来ません。
...
彼は、ゲームのために MULTICS のようなシステムを PDP-7 で作ることにしました。
しかし、MULTICS ほどのものは必要ありません。どうせ趣味なのですから。

そこで、彼は MULTICS のなかから気に入った機能だけを選び出して、小さな一人用システムを作り上げ、UNIX と名付けます。
UNI とは、「ひとつの」という意味で、MULTI の対義語でした。つまり、このシステムは MULTICS のパロディ版なのです。
...
その反面、複数人数で使うためのセキュリティ機構などは無視された作りとなっていました。
もともとゲームが遊べれば十分でしたから、セキュリティなんて不要なのです。

しかし、この UNIX システムは、彼一人で使うにはもったいないシステムでした。
彼は快く仲間の研究者にシステムを開放します。
彼らのグループはこのシステムに手を加え続け、十分実用になるシステムに育て上げます。
そして、セキュリティは甘いながらも、結局複数人数が同時に使えるシステムへと発展を遂げるのです。


200デフォルトの名無しさん:2011/10/29(土) 01:25:02.93
何スレかと思った
201デフォルトの名無しさん:2011/10/29(土) 01:28:52.65
linux板にしようか、こちらの板にしようか迷ったんですが、
こちらで聞きます。

jpegファイルをCで読み込んで、mjpegのAVIファイルの作成をしたいいです。
色々みてると、AVIフォーマットはそれほど難しくなさそうですが、
わかりやすいHPを見つけられません。

jpegtoaviというオープンソースPGを落としてコンパイルしてみたのですが、
なんかうまく動かないです。引数の問題?
うまく動かせた人いらっしゃいますか?

また、1から実装するとして、わかりやすいHPないでしょうか?
202デフォルトの名無しさん:2011/10/29(土) 01:42:25.82
JPEGは複雑だからライブラリに頼るしかないだろうね
203デフォルトの名無しさん:2011/10/29(土) 01:49:23.76
>>200
こういう話題になると調子に乗ってクソ長い書き込みをするおっさんどもは困るねw
それも大概はググったら簡単に出てくる内容でつまんねーし。
204デフォルトの名無しさん:2011/10/29(土) 01:57:44.51
どうも的を射ないレスをしてるからなぁ。
おっさんじゃなくて実際に触ったことないお子様なんじゃないの?
205デフォルトの名無しさん:2011/10/29(土) 02:01:35.13
実際にコード付きの質問されても、本当に初歩的なことしか答えられないからな。
宿題程度の質問と、こういうCと直接関係ない話題なら馬鹿みたいにレス付くのにね。
206デフォルトの名無しさん:2011/10/29(土) 02:05:54.17
実務経験がないけれど、勉強したことが懐かしくて居つくのかな。
まあ俺もたいしたレスはしてないが。
207デフォルトの名無しさん:2011/10/29(土) 02:06:57.48
プログラマーって実際どんなことしてるんですか?
208デフォルトの名無しさん:2011/10/29(土) 02:14:01.64
>>201
そういうのはこっちで聞いた方が良いんじゃね?
Cの範疇越えてるし。

画像処理 その13
http://hibari.2ch.net/test/read.cgi/tech/1301896601/
209デフォルトの名無しさん:2011/10/29(土) 02:21:15.53
>>208
そんなスレが。。。
ありがとうございます。移動します。

では。
210デフォルトの名無しさん:2011/10/29(土) 02:23:45.89
openCVに画像を連結して動画にする能力があるぞ
211デフォルトの名無しさん:2011/10/29(土) 09:26:43.24
>>Gtk+やQtがおすすめ
作成にあたって、Qtを試したことがあるけど、自分には分かりづらくて資料が相対的に少なく挫折しました。

主観で
Qt:無料、資料が少ない、分かりづらい、高環境、高デザイン
BC++:外販ライブラリ高め、資料一応ある、分かり安い、低環境、低デザイン
VC++:MSDN(?)問題外に高いし必要ない、資料豊富、普通の分かりやすさ、高環境、普通デザイン
だった。

Gtk+ってQtと関連してたと思うけど、まだ触ってないので、これから試してみます。
212デフォルトの名無しさん:2011/10/29(土) 10:25:37.11
>>211
レス番アンカー位しとけよ
こんなとこでスレ違いの質問してる糞みたいな初心者の意味不明のIDE評価なんて要らん。
213デフォルトの名無しさん:2011/10/29(土) 11:48:50.11
>>211
Qtは知らないけど、
>MSDN(?)問題外に高いし必要ない
MSDNオンラインで何か不満でも?

個人的にはVCLがわかりやすくて好きだった。
MFCは触りたくないが、今ならC#で.NETを操作する方が良いのでは?

全般的にどういうものを作りたくて評価しているか不明。
VC++でどういう点が不満になる?
それで使いたい外販ライブラリって何?

どっちにしてもWindowsプログラミング板に行くべきかな。
214デフォルトの名無しさん:2011/10/29(土) 12:05:44.57
初心者の人って大抵説明が足りないよね。

"何が分からないのか分からない"レベルは論外としても
自分が使っているツールや参考にしてるページなんかの説明もせずにいきなり質問する人が多い。
こちらに読心力を要求するような難度の高い質問もあるしw
215デフォルトの名無しさん:2011/10/29(土) 12:16:24.40
ちゃんと説明できる能力があれば、自分でなんとか出来ちゃうからな
216デフォルトの名無しさん:2011/10/29(土) 12:22:34.21
ちゃんとしてるレベルの質問って逆にこのスレ住人が答えられる範囲を超えてて、全くレスが付かなかったりするからなぁ
217デフォルトの名無しさん:2011/10/29(土) 12:31:15.73
レベルっていうよりはメンドクサイんだろw
218デフォルトの名無しさん:2011/10/29(土) 12:52:33.90
>>213
そのMSDNの話じゃないでしょう
219デフォルトの名無しさん:2011/10/29(土) 13:06:10.42
>>218

えーっ、個人でMSDNサービス購入するって話?
VC++という製品の話と全く繋がらないのだけれど。

今から製品レベルの開発をするのなら、BCBの選択はありえないし、
外販ライブラリ(input manとかスプレッドシートなどかな?)
といい、どういうレベルで話をしているのかさっぱり見えないが。
220デフォルトの名無しさん:2011/10/29(土) 13:40:29.82
>>218
でしょうね
221デフォルトの名無しさん:2011/10/29(土) 13:48:54.74
>>214
それがいやなら回答者の立場で質問(聞け)スレへ来るなよ、迷惑な偽善だ
M$ のインシデント対応でさえ客にイミフはつきものと理解しているのに
回答義務のない者がそこまでガタガタ言って何になる
222デフォルトの名無しさん:2011/10/29(土) 14:07:32.47
>>221
プログラムをお勉強中の人間の質問と、お客様質問室へ寄せられる質問と同列に語るなよ。
223デフォルトの名無しさん:2011/10/29(土) 14:10:32.70
質問のしかたが気に入らない、出された情報が不完全、そう思うなら、答えなければいい。
224デフォルトの名無しさん:2011/10/29(土) 14:15:23.69
だから答えてないんだろ
225デフォルトの名無しさん:2011/10/29(土) 14:17:23.30
>>219
質問者がまともにアンカーつけてないので迷走してるけど多分
>>102
>>103
>>211
の流れだと思うんで、やりたいことは自作アプリ用のGUI作成みたい。
所謂コントロール部品のことをGUIライブラリとか言ってるからややこしくナットル。

ただ、ポトリペタのRAD開発をやりたそうでもあるので、そこら辺を明確にしろと言いたい。
ついでにスレ違いとも…
226デフォルトの名無しさん:2011/10/29(土) 14:24:50.43
>>225
>>102をよく読んでみると、API使ってウィンドウ表示させたいんじゃなくて、
単にテキストボックスみたいなのに文字列を表示させようとしてるだけみたいだな。
227デフォルトの名無しさん:2011/10/29(土) 14:38:57.05
>>222
用語が通じてない悪寒
228デフォルトの名無しさん:2011/10/29(土) 14:48:46.82
>>227
いまだにM$だなんて書いてる奴だもんな
無視しとくのが一番と思う
229デフォルトの名無しさん:2011/10/29(土) 14:58:41.37
キャリッジリターンで行頭に戻れるとのことで、

printf("Apple\r");
usleep(2000000);
printf("Orange\r");
usleep(2000000);
printf("Grape\n");

としてみたのですが、最後の結果が「grapee」となってしまいます。
「Grape」のみ、正しく表示させるにはどのようにすればよいのでしょうか。
230デフォルトの名無しさん:2011/10/29(土) 15:00:56.71
>>229
printf("Grape \n");
231デフォルトの名無しさん:2011/10/29(土) 15:06:40.00
printf("Grape \n");>>229
232デフォルトの名無しさん:2011/10/29(土) 15:25:36.55
printf("Grape\x1b[K");
233デフォルトの名無しさん:2011/10/29(土) 15:33:43.94
>>232
エスケープシーケンスってNT系のコマンドプロンプトじゃ使えないんじゃないの?
あれってなんで使えなくなったのかなぁ・・未だに理解不能。
234デフォルトの名無しさん:2011/10/29(土) 15:47:50.07
>>233

ansi.sys
235229:2011/10/29(土) 16:04:00.14
つまり、前回表示分以上の文字で上書きすればよいということですね。
ありがとうございました。
236デフォルトの名無しさん:2011/10/29(土) 16:18:07.87
system("clear")して書き直せばいいだろうが
237デフォルトの名無しさん:2011/10/29(土) 17:26:02.48
>>232-234,236
(質問者が環境を提示していないのに)特定の環境に依存した回答するなよ。
238デフォルトの名無しさん:2011/10/29(土) 17:47:16.81
>>233
使えるぞ
何せ「エスケープシーケンス」だからな
239デフォルトの名無しさん:2011/10/29(土) 18:02:02.35
俺の環境だとバッファがフラッシュされなくて最後の Grapee しか見えんけど
240デフォルトの名無しさん:2011/10/29(土) 18:02:14.71
アヒィン変換とはなんに使いますか?
241デフォルトの名無しさん:2011/10/29(土) 18:15:49.90
いろいろ
242デフォルトの名無しさん:2011/10/29(土) 18:31:00.91
それがききたいです
243デフォルトの名無しさん:2011/10/29(土) 18:34:54.21
主に、図形を移動させたり回転させたり拡大縮小したり歪めたり。そんな事。
244デフォルトの名無しさん:2011/10/29(土) 19:16:58.59
>>240
ゲームの3DCG処理や人工衛星の姿勢制御とかに使える
245デフォルトの名無しさん:2011/10/29(土) 20:36:46.35
次のような線形変換、ただそれだけ。

y=ax+b
ここにaは行列、x,y,bはベクトル

246デフォルトの名無しさん:2011/10/29(土) 20:40:46.27
#include <stdio.h>と<time.h>と<stdlib.h>
#define ALLCARDS 52
int card[ALLCARDS];
void shuffle(){
 srand((unsigned)time(NULL));
 for(i=0; i<52; i++){
  do{ rand()を使って0~51の乱数を生成してカードを指定 }while( フラグが立ったカードだったらやり直し )
  使ったらカードにフラグを立ててマークしておく
 }
}
int main(){
 int i; for(i=0; i<100; i++){
  //関数shuffleを呼び出してシャッフルされたカードデッキを作成
  //手札のカードを5枚抽出して出力
} return 0;
}

文字数の関係で大幅に省略しましたが、こんな感じでトランプカードをシャッフルして山札を生成し、
その中から手札5枚を抽出して表示するという行程を100回繰り返すプログラムを作りました。
ですが1回あたりのループにかかる秒数が1秒を大きく下回るので、srand((unsigned)time(NULL));で生成されるシードが
毎回同じになってしまい、結果、生成される手札のカードも毎回同じになってしまいます。。。

どうすればいいのでしょうか?どなたか分かりましたら助けて下さい・・・
247デフォルトの名無しさん:2011/10/29(土) 20:42:35.75
>>246
srand は一回だけ呼ぶようにすればおk
248デフォルトの名無しさん:2011/10/29(土) 20:51:35.44
>>247
おおおおおお、なるほど・・・!!
0で初期化したグローバル変数を適当に作ってshuffle関数の呼び出しの度にカウントが1増えるようにし、
値が0の時だけsrand(ry)を実行するようにしたらうまくいきました!!

素早いヘルプほんとうに助かりました・・ありがとうございます!!
249デフォルトの名無しさん:2011/10/29(土) 21:09:02.85
>>248
いやmain関数で一回だけ呼べばいいじゃん
250デフォルトの名無しさん:2011/10/29(土) 22:04:55.52
集合で、条件を満たす部分集合の数を数える計算をC言語でやりたいと思ってます。

例えば3個の要素からなる集合{a,b,c}でa,b,cは0〜24の任意の数をとるとします。
また一方で{0+i,3+i}(i<=24,i++)のものをredと定義します。
そして、{a,b,c}の中で部分集合{a,b}{b,c}{c,a}がすべてredであるような{a,b,c}の数はいくつであるか計算する方法を教えてください。
251デフォルトの名無しさん:2011/10/29(土) 22:26:35.31
すれ違いなので他のスレで聞いてください
252デフォルトの名無しさん:2011/10/29(土) 22:28:31.52
すいません。了解しました。
253デフォルトの名無しさん:2011/10/29(土) 22:37:24.78
>>250
宿題スレで聞いてみたら?
254デフォルトの名無しさん:2011/10/29(土) 22:46:36.32
宿題スレに投げるべきなのかわかんないんですけどコッチで質問してみます
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getstr() {
char buf[100] = "test";
return buf;
}
int main() {
int j=0;
char *s;
while(j++<5){
s = getstr();
printf("%s\n", s);
}
return 0;
}
5回、"test\n"が出力されるのを期待してるんですけど第一回目の
出力が私の環境(Linux+gcc)だと0x04になります。原因は何なのでしょうか?
255デフォルトの名無しさん:2011/10/29(土) 22:51:11.02
>>254
ローカル変数のアドレスを返してるからじゃろ
256デフォルトの名無しさん:2011/10/29(土) 22:57:17.50
残りの4回がtestって表示されちゃうほうが問題
257デフォルトの名無しさん:2011/10/29(土) 23:21:04.31
>>255
ローカル変数だと何故マズいんでしょうか?
また改善策としては何があるのでしょうか?
グローバル変数にしちゃうとchar *getstr()と意義が無くなりそうだし…
258デフォルトの名無しさん:2011/10/29(土) 23:22:45.44
static付ければいいが、ローカルだからスコープ抜けると破棄される
259デフォルトの名無しさん:2011/10/29(土) 23:24:11.09
スコープの問題でしたか。全く思いつきもしませんでした
>>255,256,258
ありがとうございます!
260デフォルトの名無しさん:2011/10/29(土) 23:31:26.72
スコープというよりエクステントの問題
261デフォルトの名無しさん:2011/10/30(日) 00:15:02.93
>>245
節子、それ線形変換やない。
262デフォルトの名無しさん:2011/10/30(日) 00:17:39.57
>>245
行列やベクトルに限らないよ
263デフォルトの名無しさん:2011/10/30(日) 00:22:49.10
テンソルにすれば問題ない
264デフォルトの名無しさん:2011/10/30(日) 00:27:50.93
テンソルって、一言でいうとどんなもの?
265デフォルトの名無しさん:2011/10/30(日) 00:30:33.88
テンキーみたいなもの
266デフォルトの名無しさん:2011/10/30(日) 00:31:22.95
行列の一般化
267デフォルトの名無しさん:2011/10/30(日) 00:38:25.01
>>266
違う。
268デフォルトの名無しさん:2011/10/30(日) 00:52:52.40
影響
269デフォルトの名無しさん:2011/10/30(日) 01:11:15.15
>>254
>5回、"test¥n"が出力されるのを期待してるんですけど第一回目の
>出力が私の環境(Linux+gcc)だと0x04になります。原因は何なのでしょうか?

この疑問に「直接」答えると、
printf() が一番最初に呼ばれるときに初期化の処理でスタック領域を使って、
getstr() 内の buf が割り当てられた領域を壊すから。
二度目以降はそれが発生しないから buf の内容が壊されない。

ちなみに自分の環境では -O3 を付けると「うまく」動きましたw それはなぜかというと...
270デフォルトの名無しさん:2011/10/30(日) 10:22:09.25
最適化optionですよね。自分の環境では今度は改行が5つしか表示されなかったのですが
「うまく」ってこういう意味…?
271デフォルトの名無しさん:2011/10/30(日) 11:22:46.02
ポインタなんですが
int *pでなくとも
int* pでいけると聞きました。
下のほうがしっくり来るので
常に下で書こうと思うのですが何か問題はあるでしょうか?
272デフォルトの名無しさん:2011/10/30(日) 11:36:02.20
>>271

int* a, b;

と書いたときに勘違いしなきゃいいけどな
273デフォルトの名無しさん:2011/10/30(日) 11:42:09.07
>>270
環境超依存な話をしているので違う環境で違う動作になっても不思議ではない。
C言語としての正しさも超越してるしねw

ちなみに自分の環境では-O3にするとwhileループのアンローリングとgetstr()の
インライン展開が行われて、 文字列の領域がつぶされずに済んでいる模様。

なので、もしここら辺を制御するコンパイラーオプション(インライン展開の方が本質的)
があったら使ってみるといいかもw
274デフォルトの名無しさん:2011/10/30(日) 11:46:48.08
>>269
Macだと

$ gcc -Wall -ansi main.c
main.c: In function 'getstr':
main.c:7: warning: function returns address of local variable
$ ./a.out





$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

こんな感じに*sに何もない。こんなのは処理系依存で、これに何かを期待しても無意味では?
275デフォルトの名無しさん:2011/10/30(日) 11:50:19.52
あるサブルーチンを実行中に
返り値の格納先が指定されているかどうか判断する方法ってありますか?
276デフォルトの名無しさん:2011/10/30(日) 12:04:12.35
ポインタの参照/逆参照はpascal風になってた方が分り易かったよね。
277デフォルトの名無しさん:2011/10/30(日) 12:07:20.04
int i
278デフォルトの名無しさん:2011/10/30(日) 12:08:20.33
windowsでdllを作る場合、cとc++どちらが楽ですか?
279デフォルトの名無しさん:2011/10/30(日) 12:15:36.17
インタフェース部分だけCで書く
他は何で書いても良い
280デフォルトの名無しさん:2011/10/30(日) 12:19:57.30
>>278
言語自体はもう習得済みならその言語で作れ。
CとC++どちらが楽かと聞かれればC
281デフォルトの名無しさん:2011/10/30(日) 12:52:25.04
>>274
>これに何かを期待しても無意味では?

馬の耳に念仏を唱えても無意味ということですね、わかります。
282デフォルトの名無しさん:2011/10/30(日) 13:21:50.15
■32bitCPU
■アドレス空間も32bit
■Byte単位でのメモリアクセスが可能
以上の条件で、アドレス0x800000番地と0x800001番地の各ビットを全て1にするプログラムを記述せよ。

課題でもらった問題なのですが、解けずに困っています。
そもそもC言語って、こちら側でアドレスを指定していじることが出来るんでしょうか?
ご助力願います。
283デフォルトの名無しさん:2011/10/30(日) 13:32:48.26
unsigned char *p = (unsigned char *)0x800000;
p[0] = p[1] = 0xff;
284デフォルトの名無しさん:2011/10/30(日) 13:32:50.51
#define X (*(volatile unsigned char *)0x800000)
#define Y (*(volatile unsigned char *)0x800001)

int main(void) {
X = 0xFF ;
Y = 0xFF ;
return 0 ;
}
285デフォルトの名無しさん:2011/10/30(日) 13:46:40.27
bus error
286デフォルトの名無しさん:2011/10/30(日) 13:55:17.06
VC++を利用してDLLを作る解説サイトってありませんか?
当方Hello Worldを返すところからのレベルです
287デフォルトの名無しさん:2011/10/30(日) 13:57:37.56
288デフォルトの名無しさん:2011/10/30(日) 14:01:49.69
>>283、284
レスありがとうございます。実行してみたところ、
2行目、値を代入する部分でエラーが起こりました。
でも、ポインタ型でキャストすればアドレスの代入はできるんですね。
289デフォルトの名無しさん:2011/10/30(日) 14:04:28.91
>>288
普通の環境ではエラーになるのが正しい。
組み込み用途とか、OSのカーネルなんかでデバイスがメモリにマッピングされてるような状況では
アドレスを直接指定したアクセスが必要。
290デフォルトの名無しさん:2011/10/30(日) 14:08:40.98
カーネルつうかデバイスドライバか
291デフォルトの名無しさん:2011/10/30(日) 14:14:34.47
>>289
そうだとしたら、実行してエラーが出てもコンパイルさえ通ればOKなのかもしれませんね。
292デフォルトの名無しさん:2011/10/30(日) 14:16:07.90
書き換えていいかどうか分からない番地を書き換えるのは、恐いです。
293デフォルトの名無しさん:2011/10/30(日) 15:04:22.09
>>275
全般的に何言っているか不明。

「返り値の格納先が指定されている」ってどういう状態の事を言ってる?

戻り値の方がvoidでは無い関数なら、関数コールしたときに戻り値用の領域を
実行系が確保してくれる。だから戻り値の型がvoidかそうでないかを見れば良い。

そういうことを言っているのか?
294デフォルトの名無しさん:2011/10/30(日) 15:16:42.16
>>292
それ問題文の欠陥だな
1 を書き込むと 0 になるポートとか実際あるし (負論理とかでなく)
295デフォルトの名無しさん:2011/10/30(日) 16:21:21.23
WCHAR text[1000];WCHAR *tp;
while (fgetws(data, 1000, fp) != NULL)
{          /* スペース.を区切りに文字列を抽出 */
          tp = wcstok( data, L"()" );
          wcscat(text,tp);
          while ( tp != NULL ) {
                       tp = wcstok( NULL,L"()" );
                       wcscat(quetext,tp);
                       }

とすると
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
と出ます。どうすればいいでしょうか?
296デフォルトの名無しさん:2011/10/30(日) 16:27:15.41
できました!ありがとうございました!
297デフォルトの名無しさん:2011/10/30(日) 18:52:40.45
charを何回か使った後に何も入ってないような状態にするにはstrcpy( charhairetu , "\0")で良いのでしょうか?
zeromemoryとかメモリ系の関数がいくつもあるようなのですがどれが良いでしょうか?
298デフォルトの名無しさん:2011/10/30(日) 18:56:11.78
memsetでいいよ
299デフォルトの名無しさん:2011/10/30(日) 18:56:57.33
ありした
300デフォルトの名無しさん:2011/10/30(日) 21:12:18.02
>>299
strcpy()でいいよ。
単にstr[0] = 0; でもいいけど。
301デフォルトの名無しさん:2011/10/30(日) 22:41:35.36
>>289
>普通の環境ではエラーになるのが正しい。

単純に 0x800000 あたりが書き込めるような環境だったらとりあえずエラーにならないと
思うけど、そういう環境は「普通」じゃないということですか?
302デフォルトの名無しさん:2011/10/30(日) 22:46:54.24
>>301
いじめないでやれよw
303デフォルトの名無しさん:2011/10/30(日) 23:01:05.30
文字列から文字を抜き取りたいんですけど
sscanf( moji , "a-z 0-9A-Z,;" )みたいに
wscanfで(moji,L"あ-ん ;、。亜-和")みたいにするにはどうすれば良いですか?
304デフォルトの名無しさん:2011/10/30(日) 23:04:12.56
ライブラリ使う
305デフォルトの名無しさん:2011/10/30(日) 23:15:49.58
すいませんちょっとボケてました
”あいう かきく 赤医”みたいな文字列を一つとして抜き出したいのですが
どうすれば良いでしょうか?間にスペースと文字が何個あるかわからないけど最初と最後は日本語で終わります
306デフォルトの名無しさん:2011/10/30(日) 23:25:26.07
何言ってんだお前。
そのままで文字列1つじゃないか。
307デフォルトの名無しさん:2011/10/30(日) 23:31:27.29
なに言ってるのかわかんね

L"あいう かきく 赤医"
ってのがあって結果が
const wchar_t* hoge[3];
hoge[0] = L"あいう";
hoge[1] = L"かきく";
hoge[2] = L"赤医";
みたいになりゃいいの?
308デフォルトの名無しさん:2011/10/30(日) 23:33:22.05
>>301
勢い余って書いちゃったけどメンドクサイから訂正しなかった。

実際は、
・そのアドレスが書けないような場所ならその場でエラーになる。
・書けるけど何かに使われてるところを爆撃したのなら、後から予期しないエラーの原因になる。
・書けて、特に使ってないような場所を爆撃したのなら、特に何も起こらない。

そんな感じでよろしいでしょうか?
309デフォルトの名無しさん:2011/10/30(日) 23:50:14.54
構造体で

struct all{
int a;
char *b[128];
}

みたいな感じに書くことってできる?
310デフォルトの名無しさん:2011/10/30(日) 23:52:57.19
できますが何か?
311デフォルトの名無しさん:2011/10/30(日) 23:57:18.15
>309
できないと思った根拠が知りたい
312デフォルトの名無しさん:2011/10/31(月) 00:03:19.23
>>310
じゃあこれを例えばscanfとかで引用するときはどう書けばいい?

>>311
いや、こんな感じのプログラム組んでてちょっと詰んだからどうすればいいのかと思って
313デフォルトの名無しさん:2011/10/31(月) 00:07:05.22
普通に書けばいいだけ。
314デフォルトの名無しさん:2011/10/31(月) 00:11:44.23
>>308
未定義・・・ですらない
アプリで好きにやってちょ、の一言
315デフォルトの名無しさん:2011/10/31(月) 00:15:31.69
#include<stdio.h>

struct data{
int num;
char name[128];
char *sub[128];
};
int main(int argc, char *argv[])
{
struct data all[50];

       scanf("%s", ○○);   //sub[128]で文字列受け取り
       printf("%s", △△);   //scanfで受け取ったものを標準出力

       return 0;
}

みたいなプログラムだったら○○の中には何を入れたらいい?
316デフォルトの名無しさん:2011/10/31(月) 00:17:41.95
>>312
>scanfとかで引用するときは
引用ってなんじゃ?

エスパーすると、とにかくscanfの引数に型を合わせる必要があるので

struct all{
int a;
char *b[128];
} hoge;

scanf("%s", hoge.b);

だな。
317316:2011/10/31(月) 00:23:27.72
書き込んでいるうちにレスが、、。


あれ、よく見ると文字列格納したいメンバの型がちょっと変。

struct data{
int num;
char name[128];
char *sub[128];  // → char sub[128];
};

が正解じゃない?ってか、char sub[128];のつもりで
scanf("%s", hoge.b);って答えていた。

char *sub[128]; だったら
all[0].sub[0] = "hoge";
みたいな感じ。
318デフォルトの名無しさん:2011/10/31(月) 00:24:51.26
>>315
ポインタの配列に文字列を入れたいの?
型を間違ってるんじゃない?
319デフォルトの名無しさん:2011/10/31(月) 00:25:42.59
char hairetu [20]
void tukuttakannsuu(* m_hairetu){m_hairetuなんとかなんとか }
どっかで tukuttakannsuu(*hairetu);

これってちゃんとポインタを渡す効率の良い書き方になってますか?
320デフォルトの名無しさん:2011/10/31(月) 00:27:36.34
No
321デフォルトの名無しさん:2011/10/31(月) 00:29:30.28
>>319
へんな省略すんなよ。何がなんだかだぞ。

void func(char *p) { p[0] とかなんとか}

char a[20];

func(a);

こんな感じならよい。*hairetuを渡そうとしている時点で、相当な勘違いをしていると思う。
322デフォルトの名無しさん:2011/10/31(月) 00:49:41.63
うぅ・・・
323デフォルトの名無しさん:2011/10/31(月) 01:00:08.11
>>317
#include<stdio.h>

struct data{
int num;
char *name[128];
char *sub[128];
};

int main(int argc, char *argv[])
{
struct data all[50];

printf("出席番号を入力してください:");
scanf("%d", &all[0].num);

printf("名前を入力してください:");
scanf("%s", &all[0].name[0]);

       return 0;
}

こういう感じってこと?
324デフォルトの名無しさん:2011/10/31(月) 01:10:29.81
ポインタ配列に文字列は入れられないぞ
ちゃんとポインタを理解しろ

char sub[128];にして
scanf("%s", all[0].name);だ
325デフォルトの名無しさん:2011/10/31(月) 01:11:35.36
まちがえた
char name[128];にして
scanf("%s", all[0].name);だ
326デフォルトの名無しさん:2011/10/31(月) 01:54:55.34
>>325
できたわthx

もう一つ質問なんだが
#include<stdio.h>

struct data{
int num;
char name[128];
};

int main(int argc, char *argv[])
{
struct data all[50];

printf("出席番号を入力してください:");
scanf_s("%d", &all[0].num);

printf("名前を入力してください:");
scanf_s("%s", &all[0].name);

printf("%d番 %s", all[0].num, all[0].name);

fflush(stdin);
getchar();
return 0;
}

ってしたら%sの部分が表示されないんだがこれは何で?
327デフォルトの名無しさん:2011/10/31(月) 01:57:18.76
>>326
&all[0].name→all[0].name

配列名はすでにポインタだから
328デフォルトの名無しさん:2011/10/31(月) 02:00:11.31
>>327
scanf_s("%s", all[0].name);
にしても表示されないんだが
329デフォルトの名無しさん:2011/10/31(月) 02:10:30.11
#include<stdio.h>

struct data{
int num;
char name[128];
};

int main(void)
{
struct data all[50];

printf("出席番号を入力してください:");
scanf_s("%d", &all[0].num);

printf("名前を入力してください:");
scanf("%s", all[0].name);

printf("%d番 %s", all[0].num, all[0].name);

return 0;
}

これでちゃんと動いたが?
330デフォルトの名無しさん:2011/10/31(月) 02:19:08.26
>>329
ほんとだ…

scanf_s("%s", all[0].name); じゃ動かなかったのに
331デフォルトの名無しさん:2011/10/31(月) 02:28:49.11
ググると scanf_s で char[] を処理する場合は配列のサイズを付けろって書いてあるね。
VC++使ってないからよくわからんけどw
332デフォルトの名無しさん:2011/10/31(月) 02:35:02.24
>>327
ちなみに&を付けても同じアドレスを指すから、「一応」動くんじゃないだろうか。
確かに論理的に間違ってはいるけど。
333デフォルトの名無しさん:2011/10/31(月) 02:54:45.76
>>331
まじか面倒くせぇ
わざわざありがとう
334デフォルトの名無しさん:2011/10/31(月) 03:52:51.54
打ち切り誤差ってなんですかー?^^
335デフォルトの名無しさん:2011/10/31(月) 04:21:34.96
336デフォルトの名無しさん:2011/10/31(月) 04:24:59.65
>>333
めんどくさいとかじゃなくて。なぜ_sを使うのかを見ないと。
バッファオーバーランしてもいいならいいけど。

>>332
一応じゃなく、動く。
337デフォルトの名無しさん:2011/10/31(月) 04:29:16.91
#define TRUE 1 /* >>305 */
#include <stdio.h>
int main(void) {
 char c[100][80];
 int zenkaku, field, item, k, lead, i;
 unsigned char u[] = "あいう アイウ a-z0-9A-Z,; かきく  赤医";
 for(field = 0, item = 0, k = 0, i = 0; u[i] != '\0'; i++) {
  lead = u[i];
  if(lead == ' ') {
   if(field && zenkaku) {
    c[item++][k] = '\0';
    k = 0;
   }
   field = 0;
   continue;
  }
  field = TRUE;
  zenkaku = 0;
  if(0x81 <= lead && lead <= 0xFC) {
   if(0xA1 <= lead && lead <= 0xDF) continue; /* 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ */
   zenkaku = TRUE; /* シフトJISコードのいわゆる全角 */
   c[item][k++] = (char)lead;
   if(u[++i] == '\0') return 1; /* 2バイトめが無いエラー */
   c[item][k++] = (char)u[i];
  }
 }
 if(field && zenkaku) c[item++][k] = '\0';
 for(i = 0; i < item; i++) puts(&c[i][0]);
 return 0;
}
338デフォルトの名無しさん:2011/10/31(月) 04:55:48.83
>>336
そんな表現を弱めに書いたところをツッコまなくてもw
まあ、プログラム(の意味というかデータ型とというか)としては間違ってるんだし
「たまたま動く」とか言った方が適切ではないかと。
339デフォルトの名無しさん:2011/10/31(月) 04:58:22.38
文字列を差してるポインタをポインタ演算で一文字ずつ前から削って行ったときに、
文字列が空になったのってどう判定すればいいんでしょうか?
例えば
char *strptr = "ABCDE";
として,strptr,strptr+1,strptr+2・・・とポインタ演算の加算値を増やしながら出力していって
”ABCDE”→”BCDE”→"CDE"→"DE"→"F"→?
最後strptr+5になったところでとめたいのですが・・・
340338:2011/10/31(月) 05:01:20.46
言い忘れました
strlenとかライブラリ関数を使って文字列の長さを測るのはナシの方向で・・・
341デフォルトの名無しさん:2011/10/31(月) 05:01:47.86
338じゃなくて339でした
失礼しました
342デフォルトの名無しさん:2011/10/31(月) 05:04:48.22
>>338
FAQでも読んで寝てろ。
 http://www.kouno.jp/home/c_faq/c6.html#12
343デフォルトの名無しさん:2011/10/31(月) 05:06:52.65
for(i = 0; *(strptr + i) != '\0'; i++) printf("%s\n", strptr + i);
344デフォルトの名無しさん:2011/10/31(月) 05:39:59.58
ポインタについてわからないことがあります。
コンパイラはgcc4.4.5を使用しています。

char str[3][4] = {"abc","def","ghi"};
char (*ptr)[4];
ptr = str;

printf("%s\n",ptr + 1);
printf("%s\n",ptr[1]);

printfで文字列を表示させたいときはprintf("%s\n",文字列の先頭アドレス)
とすればいいんですよね?
printf("%s\n",ptr + 1);がdefと表示されるのはわかるのですが
なぜprintf("%s\n",ptr[1]);でもdefと表示されるのかわかりません。

ptr[1]は*(ptr + 1)と同じだから
printf("%s\n",ptr[1]);のptr[1]は先頭アドレス
の中に入っている内容(def\0)をアドレスとして見てしまうと思うのですが・・

よろしくお願いします。
345デフォルトの名無しさん:2011/10/31(月) 05:48:06.38
疑問に思うべきことが逆
346デフォルトの名無しさん:2011/10/31(月) 06:09:00.36
>>344
ptr[1]の型を再考すること
347デフォルトの名無しさん:2011/10/31(月) 06:49:41.65
>>343
ありがとうございます。
すみませんもう一点、文字列の一文字目を比較したいのですが
strncmpはナシで
str1[0] == str2[0]みたいに配列として添字指定するのもナシで
何か方法ありますでしょうか?
348デフォルトの名無しさん:2011/10/31(月) 06:50:26.58
>>345
>>346
*pをp[]のように変形出来るのって引数でのみでしたっけ?
プログラミングをやるの久しぶりで今手元にポインタ関連の本がないので
もし指摘していることとまったく違うこと言っていたらすみません。
349デフォルトの名無しさん:2011/10/31(月) 07:11:59.06
>>348
ptr[1]はchar[4]型だから問題無し
ptr[1][0]だと'd'をアドレスとしてみるからマズイかな
350デフォルトの名無しさん:2011/10/31(月) 08:08:48.22
>>342
お前みたいな奴は >>342 のようなレスを考えてるかもしれないとか思って
あらかじめ >>338 に「データ型」とか書いてやったのに、本当にそうきたかw トホホ。
351デフォルトの名無しさん:2011/10/31(月) 08:35:24.93
>>349
ptrはcharへのポインタ変数なのにptr[1]はchar[4]型・・?
だめだ、知識が足りないぽいです。
本屋行ってきます。
352デフォルトの名無しさん:2011/10/31(月) 08:38:18.53
>ptrはcharへのポインタ変数なのに
違います
353デフォルトの名無しさん:2011/10/31(月) 09:09:09.13
>>351
例えばchar str[4];とした場合、strの型はchar*型でなく、char[4]型。
もし、これがchar*型なら、char *str;と同じになってしまう。
配列とポインタは違うものだという認識はお持ちだとは思いますが。

実行文の中では、char[4] → char* の変換をCが自動的に頻繁に行うので、
char*型だと錯覚しやすいです。
354デフォルトの名無しさん:2011/10/31(月) 10:16:39.66
倍精度実数を == で比較したいんだけどどうしたらいいかな。
みんなどうやって銀行丸めを実装してるんだろうか
355デフォルトの名無しさん:2011/10/31(月) 10:39:39.42
>>354
まじめに10進演算
356デフォルトの名無しさん:2011/10/31(月) 11:16:14.37
>>240
矢追町成増を思い出した
357デフォルトの名無しさん:2011/10/31(月) 11:57:28.47
>>354
+0.5してfloorと-0.5してceilが食い違ったら偶数の方を採用
でいいんじゃないの?

==でもいいんじゃないかな?
銀行丸めの特別な処理ってその時だから
358デフォルトの名無しさん:2011/10/31(月) 13:31:41.84
char[4]型って言い方、普通なの?
359デフォルトの名無しさん:2011/10/31(月) 13:47:52.49
要素が4つのchar配列型っていうよりは。
360デフォルトの名無しさん:2011/10/31(月) 14:01:33.75
>>350
トホホ?
珍しい。キモさ全開だな。
361デフォルトの名無しさん:2011/10/31(月) 14:23:22.73
すみません。C言語をかじり始めたばかりなのですが
borlandC++compilerが計算してくれません。どこか間違ってるでしょうか。

#include <stdio.h>

int main(void)
{
int souhin1,kazu1,souhin2,kazu2,daikin,money,oturi;
double tax;

syouhin1=198;
kazu1=1;
syouhin2=138;
kazu2=2;
money=1000;
tax=1.05;

daikin=(int)((syouhin1*kazu1+syouhin2*kazu2)*tax);
oturi=money-daikin;

printf("お釣り%d円\n",oturi);

return 0;
}
1本198円の清涼飲料水1本と、1本138円の牛乳2本を購入し、
千円札で払った場合のお釣りを求めよ。
ただし、5%の消費税を追加し、お釣りの額は整数とする。
362デフォルトの名無しさん:2011/10/31(月) 14:29:23.41
souhin
363デフォルトの名無しさん:2011/10/31(月) 14:31:31.29
yがない
364デフォルトの名無しさん:2011/10/31(月) 14:32:44.81
>>362
ありがとうございます!
まったくyが抜けてるなんて気付きませんでした。。。
365デフォルトの名無しさん:2011/10/31(月) 14:39:47.41
>>364
コンパイラに説教されるだろ
366デフォルトの名無しさん:2011/10/31(月) 15:31:04.15
int n=0;
367デフォルトの名無しさん:2011/10/31(月) 15:37:25.83
>>350
成り下がることが理解できているのにデータ型が云々言ってるからだめなんじゃないか?
368デフォルトの名無しさん:2011/10/31(月) 16:00:40.41
>>361
てかローマ字ならoturiじゃなくてotsuriだし、
kazuもkosuとかkosuuとかのわかりやすい表現使った方が誰が見てもわかりやすいしいいよ
369デフォルトの名無しさん:2011/10/31(月) 16:01:45.92
動画編集のapiとかありますか?
370デフォルトの名無しさん:2011/10/31(月) 16:10:02.64
>>368
まだそれは考えなくていいと思うよ
371デフォルトの名無しさん:2011/10/31(月) 17:25:59.04
charポインタとchar配列とstringの関係を猿にもわかりやすく教えてください
372デフォルトの名無しさん:2011/10/31(月) 17:27:27.20
charポインタとchar配列とstringの関係を猿にもわかりやすく教えてください
373デフォルトの名無しさん:2011/10/31(月) 17:43:07.76
化学を専門としていて、最近C言語を勉強し始めた者です。
分子の状態密度という物を計算するために以下のようなプログラムを作りました。
しかし、for文が多くて見ずらく、他の分子への応用が効かないため
もっとシンプルなプログラムに書き換えたいのですが、初心者なもので良いアイデアが浮かびません。
具体的に言うと、下記のプログラムの様に〜量子と分けずに
何量子であっても計算できるようなプログラムを書きたいです。
皆さんの知恵を貸して下さい。
化学のスレッドで質問しようかと思いましたが、こちらの方が
よい解答が得られると考えこちらに質問させて頂きました。
スレ違いでしたらすいません。
ぜひ解答お願いします。


http://ideone.com/VvSFK
374デフォルトの名無しさん:2011/10/31(月) 17:50:08.21
面倒だから細かく見てないけど、再帰関数にすれば?
375デフォルトの名無しさん:2011/10/31(月) 18:24:06.41
>>358
普通
通じないやつは脳みそ蛆わいてる
376デフォルトの名無しさん:2011/10/31(月) 18:43:51.78
>>373
化学が専門なら、haskell覚え直した方が良いんじゃ無いか?
速度が気になるならhaskellコンパイラにcのソース吐かせてcコンパイラでコンパイルすれば良い
377デフォルトの名無しさん:2011/10/31(月) 18:44:25.86
>>373
n進数みたいな感じで処理させれば多重ループを組まなくてもいけそうじゃね?
i10についてやってみるとこんな感じ。
http://ideone.com/8Rzva

繰り上げる時だけ気をつけて回すだけで済むし、でかい配列を使い回せばいいし。
378デフォルトの名無しさん:2011/10/31(月) 18:49:26.38
strcmpが二つの文字列を比較するものであることは理解しているんですが
!strcmpだとどういう考え方になるんですか?
二つの文字列が同じではない場合に0を返すってことであってますか?
379デフォルトの名無しさん:2011/10/31(月) 18:52:15.00
>>373
再帰呼出に書き換えたら所要時間6倍になったw
380デフォルトの名無しさん:2011/10/31(月) 19:01:18.88
C言語の環境だとCygwinとかborlandとかあると思うけど、ゲーム作るなら
JavaのJDKとどっちがいいですか?

JDKの場合グラフィック関係が最初から豊富な感じのイメージなんですが。


ゲーム製作関係のスレって過疎ってるんですよねー・・
2chってクリエイティブな人少ないの?すいませんね・・
381デフォルトの名無しさん:2011/10/31(月) 19:03:10.65
cygwinとかborlandでゲーム開発してるやつ見たこと無い
382デフォルトの名無しさん:2011/10/31(月) 19:04:42.13
>>378
はい
>>379
できるなら末尾再起に。
>>380
Javaでできたゲームってあんまり見たことないような。
383デフォルトの名無しさん:2011/10/31(月) 19:07:39.27
>>382
ありがとうございます
384デフォルトの名無しさん:2011/10/31(月) 19:08:53.48
>>378
違う
!strcmp は常に 0
printf("%d", !strcmp);
385デフォルトの名無しさん:2011/10/31(月) 19:13:05.13
>>381
gcc+OpenGLで作られたゲームならlinux環境に腐る程
vc+DirectXで作られたゲームならwin環境に腐る程
386デフォルトの名無しさん:2011/10/31(月) 19:13:25.60
>>384
if (strcmp(a, b) == 0) { 〜 } と
if (!strcmp(a, b)) { 〜 } は同じ。
387デフォルトの名無しさん:2011/10/31(月) 19:15:28.30
追加。

>>384
わかってるくせにアスペみたいな事書いてもしょうがないだろ。
388デフォルトの名無しさん:2011/10/31(月) 19:18:31.99
>>386
お察しの通りifの条件式での!strcmpの扱いについてつまづいていたのでようやく分かりました
ありがとうございます
ほんとに助かりました‥‥
389デフォルトの名無しさん:2011/10/31(月) 19:26:30.29
>>373
再帰呼出に書き換えたもの
所要時間3倍くらい
http://ideone.com/kUOEw

max min n m の変更があるなら注意
元のソースコード に沿って hantei は 0 クリアしないようにしてある
390デフォルトの名無しさん:2011/10/31(月) 19:30:29.23
豚切りすんません
入力された整数が偶数なら2で割って、奇数なら3倍してから1足す
これが1になるまで繰り返すっていう内容なんですが、
#include<stdio.h>
int main(){
int n,count,s;
count = 1;
s = n/(count*2);
printf("自然数を入力して下さい。:");
scanf("%d",n);
if(n == 1){
printf("1\n");
}else{
for(;s == 1;count++){
if(s % 2 == 0){
printf("%d÷2=%d\n",s,s/2);
continue;
}else{
printf("%d×3+1=%d\n",s,s*3+1);
continue;
}
}
}
return 0;
}
動きません・・どこをどう直したら動きますか?
お礼は弾みます
391デフォルトの名無しさん:2011/10/31(月) 19:40:32.67
>>390
どこから突っ込んで良いのか。。。
取り敢えずnが初期化されてない
forじゃなく、whileを使え

それ以前にもう一回cの入門書やり直せ
392デフォルトの名無しさん:2011/10/31(月) 19:42:35.01
>>391
forで書けという制約付きでして(´;ω;`)
初学ですみません。。
393373:2011/10/31(月) 19:42:51.10
>>374
>>376
>>377
>>379
>>389
皆さん返信ありがとうございました。
特に377さん、389さん、わざわざプログラムを書いて頂きとても勉強になりました。
もっと勉強して自分でも書けるようになりたいと思います!!
また何かあれば質問するかもしれませんがその時はよろしくお願いします。
394デフォルトの名無しさん:2011/10/31(月) 19:47:14.19
>>392
一行一行、自分が何を意図しているのかコメント入れてみてよ
395デフォルトの名無しさん:2011/10/31(月) 19:52:27.98
>>380
まともなwindowsゲームを作成したいならVC++がオススメ
expressならタダだしね

最近のゲーム機は大体対応してるからプロも使ってる人が多い
(流石にexpressじゃないけど)
396デフォルトの名無しさん:2011/10/31(月) 19:55:15.90
>>392
宿題スレじゃねそれ
397デフォルトの名無しさん:2011/10/31(月) 19:56:11.32
>>393
fundumental が常に 0 以上であるという保証があるときに限り

>>389 のソースコードを

if(bxx_index>depth)

if(freq>=max) return;
if(bxx_index>depth)

のように書き換えれば(48行目に挿入)すれば元よりも早くなるよ
398デフォルトの名無しさん:2011/10/31(月) 19:57:41.31
>>394
#include<stdio.h>
int main(){
int n,count,s;
count = 1;
s = n/(count*2);
printf("自然数を入力して下さい。:");
scanf("%d",n);//*nを入力
if(n == 1){
printf("1\n");//*1が入力されたら1表示してオワリ
}else{
for(;s == 1;count++){
あれ?自分でも訳わからんくなってきた・・・
399デフォルトの名無しさん:2011/10/31(月) 19:58:40.76
>>396
そっちあたりやす
すれ汚しすんませんした。。
400デフォルトの名無しさん:2011/10/31(月) 20:01:49.35
言語はjavaのほうがCよりいいんじゃないの?
ゲームって部品集めて作るんじゃん。オブジェクト志向のjavaが適しているよね。
最初から一本筋で作らないでしょ。Cの場合ある程度一本道じゃん。
401デフォルトの名無しさん:2011/10/31(月) 20:04:29.76
>>400
何言ってるのか分かんない
402デフォルトの名無しさん:2011/10/31(月) 20:09:45.99
>>401
C言語って複雑な処理も全部一気に作らないとだめじゃないですか。
Javaの場合、少しずつ、少しずつ作れるでしょ?クラスごとに作るから。
403373:2011/10/31(月) 20:10:08.33
>>397
確かにすごく早くなりました。
ありがとうございます!
404デフォルトの名無しさん:2011/10/31(月) 20:13:02.15
>>402
そりゃ貴方が下手だから。
405デフォルトの名無しさん:2011/10/31(月) 20:22:19.53
Cはオブジェクト指向ではないが、オブジェクト指向プログラミングはできるぞ
406デフォルトの名無しさん:2011/10/31(月) 21:28:01.46
>>402
Javaでクラスごとに書いても、きちんと分割して設計できてないと結局同じ
逆に、ちゃんとした設計ができてれば、Cで書こうがJavaで書こうが「少しずつ作れる」
まあオブジェクト指向にしやすくなってるのはJavaだけどね
407デフォルトの名無しさん:2011/10/31(月) 21:46:18.49
*.hと*.cのペアをクラスであるものとしてプログラミングすればそれでオブジェクト指向プログラミングになる
408デフォルトの名無しさん:2011/10/31(月) 21:50:41.06
>>407
それだけでオブジェクト指向プログラミングになれば、苦労はしないよ。
Javaだとクラス定義が必須になるが、だからといってOOPらしい
プログラムになるかは、また別の話。
例えばJavaやC#で全てをクラスフィールドとかにしていると、それはもうOOPとは言えない。

とりあえずマルチプルインスタンスが扱えるようになってれば、OOPらしいとは
言えるかも。

409デフォルトの名無しさん:2011/10/31(月) 21:53:13.65
>>408
>>402だが見方してくれてありがとう、やっぱゲーム作るのはJavaかC#しかないんだよな・・
410デフォルトの名無しさん:2011/10/31(月) 21:55:33.52
>>409
プロもみんな使ってるC++オススメ
411デフォルトの名無しさん:2011/10/31(月) 21:56:10.42
>>409
君にはRPGツクールがおすすめ
412デフォルトの名無しさん:2011/10/31(月) 22:00:11.54
ファミコン、スーファミはアセンブラだし
ゲームボーイはCやぞ
PSはC++なんかな
JavaやC#では碌なゲームは作れないと相場が決まっている
413デフォルトの名無しさん:2011/10/31(月) 22:05:38.57
言語がオブジェクト指向の枠組みを提供してるほうがOOPしやすいのは当然だが
そうでない言語でも「複雑な処理も全部一気に作らないとだめ」なんてことはない
414デフォルトの名無しさん:2011/10/31(月) 22:06:38.99
>>412 みたいなのは何を使っても一緒だけどな
415デフォルトの名無しさん:2011/10/31(月) 22:07:48.87
>>409
お前さん何か勘違いしているぞ。
私は>>402は的外れだと言っている。
Cでもモジュール単位でプログラムが可能。OOPも不可能ではない。
少なくともOOP的な設計は十分できる。

JavaやC#だからといってOOPに沿ったプログラムが出来るわけじゃない。
常にヘボは恐ろしいプログラムを書く。言語は関係ない。
それがわかっていないお前さんは危ないぞ。

>>412
>JavaやC#では碌なゲームは作れないと相場が決まっている
それは作るゲーム次第。描画の速さやレスポンスが問題にならないなら
JavaやC#でもいいんじゃないの。ノベルゲームとか、ポーカーとかなら。

アクションゲームやシューティングなら低レベルAPIが使えないと、
まともなゲームになりそうにないな。XNAってC#やVBで実用的に使えるんだっけ?
まぁ普通はVC++使うんだろうな。
416デフォルトの名無しさん:2011/10/31(月) 22:12:11.29
Javaで作ったゲームっていうと
携帯アプリぐらいしか思いつかんな
C#は・・・まったく知らん
何かC#で作られた多少なりとも有名なゲームってあるのか?
417415:2011/10/31(月) 22:14:02.16
XNAってdirectXの薄いラッパーだと思っていたら、.NETのAPIだったのね。
それなら、C#が一番のおすすめになるわ。
.NETで実用的な速度が出るくらいハード、ソフト環境が整ってきたってことか。
それなら富豪的アプローチでOK.
いい時代になったもんだ。

※完全にCの話ではなくなっているね。
418デフォルトの名無しさん:2011/10/31(月) 22:23:40.32
jpegライブラリのソースなんかPoor man's object-orientedとかいって、
Cだけで書いてるのにめっちゃオブジェクト指向だぞw
419デフォルトの名無しさん:2011/10/31(月) 23:08:37.46
> 常にヘボは恐ろしいプログラムを書く。言語は関係ない。

まさに
アセンブラで構造化じゃないコード書いてたときに絡んできた元 COBOLer と
恐ろしく希薄な議論(口論)にくたびれ果てたことがある
ダミーセクションなんて序の口で無条件分岐だけで作る再帰や SVC 風のシーケンスとか
読みもしないで自説を一方的に喚くだけで、邪魔以外の何者でもなかった

「何を考えることができるかを決められ凝り固まった人」の相手は特別手当ほしい
420デフォルトの名無しさん:2011/10/31(月) 23:10:48.35
難読なソースコード書くと、自分って何て複雑な思考ができるんだと
思いますが・・プログラマーの性でしょうか?
421デフォルトの名無しさん:2011/10/31(月) 23:16:36.24
ポインタのポインタってなんだよ
ポインタのポインタじゃなくて普通にポインタ使えよって思っちゃうんだけどなんでポインタのポインタなんかあるの?
422デフォルトの名無しさん:2011/10/31(月) 23:19:15.00
ポインタのポインタも普通にポインタですよ
423デフォルトの名無しさん:2011/10/31(月) 23:20:04.51
>>417
directXのラッパーであってると思うが。
.NETのコード部は遅いが、unsafeで書かれた部分はそうでもないってことでしょ。
424 ◆QZaw55cn4c :2011/10/31(月) 23:20:36.70
>>421
int main(int argc, char **argv)
425デフォルトの名無しさん:2011/10/31(月) 23:24:13.09
>>422
*p
*(*p)
これって結局指し示してる場所は同じなんだから*pでよくね?って思っちゃうんだよ!なぜか!
426デフォルトの名無しさん:2011/10/31(月) 23:28:18.94
じゃ *p も p でいいことになるね
427デフォルトの名無しさん:2011/10/31(月) 23:30:03.59
えっ
428デフォルトの名無しさん:2011/10/31(月) 23:31:42.58
どうしても必要になるケースに出会ったたとしたらその時には必要性が理解できているってことだからそれまではいらないと思っておけばいい
429デフォルトの名無しさん:2011/10/31(月) 23:34:15.30
>>426
おk

>>427
じゃあそれまではオナ禁しておきますモヤモヤ
どうもありがとう
430デフォルトの名無しさん:2011/10/31(月) 23:58:31.39
>>428
そう、働かないとならないケースに出会うまでは働かなくてよい
431デフォルトの名無しさん:2011/11/01(火) 00:01:39.72
>>424
よお割れ厨
432デフォルトの名無しさん:2011/11/01(火) 00:12:55.65
>>430
つまり遅延評価だな。
433デフォルトの名無しさん:2011/11/01(火) 00:14:12.02
#include <stdio.h>
#include <stdlib.h> /* long int strtol(const char *s, char **endptr, int radix); */
int main(void)
{
    char *p;
    long la;
    la = strtol("1234567890円", &p, 10);
    printf("la = %ld\n%s at p\n", la, p);
    return 0;
}
434デフォルトの名無しさん:2011/11/01(火) 00:16:24.83
435デフォルトの名無しさん:2011/11/01(火) 00:18:55.14
EVC++3.0っていう古いコンパイラで
(C++でなくC言語でコンパイルしてるからな念のため)

setjmp(ErrorEntry)
とすると変数ErrorEntryに値がセットされなかったが

setjmp(Env)
とすると変数Envに値がセットされた

これってコンパイラのバグかな?お前らのコンパイラではどうなってますか?
436デフォルトの名無しさん:2011/11/01(火) 00:30:48.49
minecraftがjavaでOpenGLでWin/Mac/linux
キャラ等オブジェクトは真四角の小ポリゴン、デフォのテクスチャは粗い、
その分動きは細かく普通のマシンで充分速い、描画farは64bit環境推奨、mod大流行
とかがjavaの功罪か
437デフォルトの名無しさん:2011/11/01(火) 00:34:29.41
おk?
438デフォルトの名無しさん:2011/11/01(火) 00:59:43.40
>>392
んじゃあ
無限ループとして動くforの使い方

for(;;)

これを使って、後は自分で考えろ

439デフォルトの名無しさん:2011/11/01(火) 01:05:19.46
>>421
配列の配列のポインタとかで
440デフォルトの名無しさん:2011/11/01(火) 01:11:06.08
>配列の配列のポインタとかで


1.(配列の配列)のポインタ
2.配列の(配列のポインタ)


そもそも配列の配列とは?多次元配列?

441デフォルトの名無しさん:2011/11/01(火) 01:14:29.10
>>425
*p
*(*p)
の評価結果は違うぞ。
pと*pが指している場所は違うからな。
442デフォルトの名無しさん:2011/11/01(火) 01:18:58.68
>>440
1)char a[3][5];
2)char a[5][3];
3)char *a[5];
4)char (*p)[5];
5)char **p;

1)charの配列[要素数5]の配列[要素数3]
2char)配列[要素数3]の配列[要素数5]
3)charを指すポインタの配列[要素数3]
4)charの配列[要素数5]をさすポインタ
5)charを指すポインタを指すポインタ
443デフォルトの名無しさん:2011/11/01(火) 01:29:19.63
>>440
配列とポインタは密接に関わってるから、どっちも正しい
444デフォルトの名無しさん:2011/11/01(火) 01:42:51.49
まあ配列とポインタを同等にしたのがC言語の一番いい部分だからなあ
一番バグりやすい部分でもあるけど

他の言語でこれをしようとしたら例えばC#ではポインタが使えるが
Marshallクラスがないと不便だし
445デフォルトの名無しさん:2011/11/01(火) 02:26:27.47
>>436
どこが罪なの
446デフォルトの名無しさん:2011/11/01(火) 02:28:10.77
>>440
後者は配列のポインタの配列と表現する
447デフォルトの名無しさん:2011/11/01(火) 08:26:21.14
>421
関数の戻り値が成否判定に使われてポインタを返して欲しいのに出来ないとき。

#define bool int
BOOL xxx(void **Pointer){
...
*Pointer=malloc(...);
...
return TRUE;
}

...
void *Po;
BOOL b=xxx(&Po);
...
448デフォルトの名無しさん:2011/11/01(火) 09:52:09.70
a[x][y]

*(*(a + x) + y)

じゃあこれもポインタのポインタってこと?!
これならわかる!
449デフォルトの名無しさん:2011/11/01(火) 11:28:13.45
int a; /*int型変数*/
int *pa=&a; /*int型ポインタ変数*/
int **ppa=&pa; /*int型ポインタのポインタ変数*/
450デフォルトの名無しさん:2011/11/01(火) 11:30:56.21
*(*(a + x) + y) の記述だけからでは a が
type a[][] なのか
type (*a)[] なのか
type *a[] なのか
type **a なのか区別が付かない
451デフォルトの名無しさん:2011/11/01(火) 11:42:21.61
a[][]っていうのは型としてありえるの?
452デフォルトの名無しさん:2011/11/01(火) 11:43:41.14
ううううう
聞けば聞くほどわからなくなるからとりあえず頭の隅に押しやって発酵させてみるよ
453デフォルトの名無しさん:2011/11/01(火) 11:56:10.75
ポインタ=ポインタ変数
ポインタ値=アドレス値
でいいのかな?
454デフォルトの名無しさん:2011/11/01(火) 11:59:16.55
いいえ、変数でないポインタもあります。
また、実際のアドレス値がポインタの値とは限りません。
455デフォルトの名無しさん:2011/11/01(火) 12:02:31.89
説明のハードルがまた一つ上がったな…。
456デフォルトの名無しさん:2011/11/01(火) 13:08:25.48
まぁあれだ、ポインタとは文字通り「指し示すもの」だ。
で、ポインタの値とは当然「指し示す先」のことだな。
値としてポインタの値を持つ変数がポインタ変数であり、
特に必要がなければNULL以外のポインタの値は意識する必要がない。
まして今の大抵の環境ではアドレスがどこであるか知ったところで大して役に立たないしね。
457デフォルトの名無しさん:2011/11/01(火) 13:57:13.00
環境変数のアドレスとか
クラックするのに役立つよ
458デフォルトの名無しさん:2011/11/01(火) 14:09:04.90
自分をクラック?
459デフォルトの名無しさん:2011/11/01(火) 14:34:08.28
5が出るまで数値を入力した時に
入力された数列を最大値と最小値を入れ替えて左から順に並べた状態にするのはどうしたらいいでしょう?
460デフォルトの名無しさん:2011/11/01(火) 14:43:14.91
秘密だよ
461デフォルトの名無しさん:2011/11/01(火) 15:05:31.58
並び替えろ
462デフォルトの名無しさん:2011/11/01(火) 15:27:38.58
何をするか書いといて「どうしたら」ってくると、さすがにめまいするんだな。勉強になったわ。
463デフォルトの名無しさん:2011/11/01(火) 15:38:53.18
>>459
scanf("%d",&n);
a[n]++;
464デフォルトの名無しさん:2011/11/01(火) 15:42:08.19
ポインタ*pを、指すポインタは**pなの?

465デフォルトの名無しさん:2011/11/01(火) 15:45:19.02
ポインタが指す
int型変数を指す時
int *pって宣言するのはどうして?
どうせ関節参照してるとバイト数も必要になるのかな
466デフォルトの名無しさん:2011/11/01(火) 16:07:21.12
void *p で宣言していちいちintにキャスト書いて使うのかい?
467デフォルトの名無しさん:2011/11/01(火) 16:08:39.42
>>464
型(int *)のポインタを指すポインタなら、型は(int **)だね。

>>465
日本語でOK。

ポインタがint型の変数を指すときint * pと宣言する理由を聞いているのなら、そういう言語規約だから。
ポインタに型情報が必要な理由を聞いているのなら、デリファレンスするときにそれが必要だから。
「関節参照」とは何かは判らんが、ポインタが持っている情報はバイト数ではなくて型であることに注意。
勿論、型情報にはバイト数も含まれるがそれが全てではない。
468デフォルトの名無しさん:2011/11/01(火) 16:18:38.32
>>462
な。
夕食にカレーライスを作ってほしいといわれたのですがどうしたらいいでしょう?
せめてカレーライスの作り方を教えてほしいとかいってほしいよな
469デフォルトの名無しさん:2011/11/01(火) 17:05:13.21
日本語の不自由な人がいるみたいだな
470デフォルトの名無しさん:2011/11/01(火) 17:26:13.93
>>459
レスの内容をそのままコードに置き換えるだけ
471デフォルトの名無しさん:2011/11/01(火) 18:10:47.80
>>467
日本語って、おまえが言葉遣い変だよ

(int *)p はキャスト式で、「念のため」書いた括弧で意味が変わってしまう典型だ
int *p;

これでは「まだ」 int 型のオブジェクトを指していないわけで
そんな理解じゃ >>464-465 みたいな質問をする人の相手はできない

間接は正式な JIS X3010 用語でカタカナ表記してるおまえのほうが質問者よりおかしい

ポインタがアドレス以外の情報をいささかでも持つかのような説明も不適切
472デフォルトの名無しさん:2011/11/01(火) 18:13:16.92
なんかかっこいいぞう
473デフォルトの名無しさん:2011/11/01(火) 18:17:32.71
ポインタはアドレスのほかにそれが指す型の情報も持つんじゃ?
474デフォルトの名無しさん:2011/11/01(火) 18:25:29.65
>>473
それはコンパイラが知ってるだけで、ポインタの値自体とは無関係では。
475デフォルトの名無しさん:2011/11/01(火) 18:57:31.11
俺もそうだったがポインタでつまづく人は仕組みとか概念云々より「どこで使うか」ってのが解らない人が多いと思うんだよ
実際ポインタ使わないといけなくなる時が来たら理解できるようになるから安心しろ
逆にいえばその時が来ないならそれはポインタを使わなくてもできる事ってことだ
効率や速度は別として
476デフォルトの名無しさん:2011/11/01(火) 19:05:05.76
>>475
まあその通りなんだけど、課題で指定されてるのも、よく見かける。
477デフォルトの名無しさん:2011/11/01(火) 19:18:23.71
ジジ臭い話だけど、昔は初期の勉強のネタとして計算機のアーキテクチャみたいな話があって、
そのからみでアセンブラの初歩的なところはみんな通って来てたんだよね。
だから、スタックやらヒープやら、オブジェクトのメモリ上での表現みたいな話もわかるし、
ポインタなんかも自然に理解できた。
単純なコードなら、それがどんな雰囲気にコンパイルされるかも想像できたり。

昨今は抽象的なところから入っちゃうから難しいんだよな。
Cはあんまり抽象的な言語ではないのに。

478デフォルトの名無しさん:2011/11/01(火) 19:19:02.32
>>471
間接と関節の話かとばかり
479デフォルトの名無しさん:2011/11/01(火) 19:21:37.06
(外部ライブラリがそう要求しているので)
● 挿入・削除の時間コストの都合で配列よりリスト構造を選択
● 戻り値以外にいっぱい値を戻したいので、関数の引数経由で呼び出し元に伝える
480デフォルトの名無しさん:2011/11/01(火) 19:36:15.89
reallocを使ったプログラムを作っていたら変な所でセグってしまうので質問させて下さい
http://codepad.org/jV80gYnJ

これの25行目のforループでセグるんですが、iが3回回ったら変な止まります。
理由と解決法を教えていただけませんか
481デフォルトの名無しさん:2011/11/01(火) 19:37:16.87
セグるとは新しい
482デフォルトの名無しさん:2011/11/01(火) 19:41:00.32
>>474
それは何か変だよ。

int *p;で宣言される変数pは、型「int型へのポインタ」を持つ。
なので、自分が指す先がint型であるという情報を持っている、
と言って良いと思う。
それにはコンパイラも実際の値も関係ないんじゃないかな。

で、ある瞬間にpが持っているアドレスにあるオブジェクトが
本当にintか、という情報は持ってない。

まぁ言葉遊びか。
483デフォルトの名無しさん:2011/11/01(火) 19:43:06.08
>>480
ループの中の
test = (int* *)realloc(test,j*sizeof(int*));
いらないんじゃないの?
484デフォルトの名無しさん:2011/11/01(火) 19:44:46.52
>>482
コンパイル時に決まる静的な情報だっていう意味で使った。
485デフォルトの名無しさん:2011/11/01(火) 19:46:30.26
sscanfでthis is penをcharに入れるにはsscanf( moto, "%[a-zA-Z0-9 ]", ireru) とすればできますが
同じようにこれ は ペン ですを取得するにはどうすれば良いですか?
486デフォルトの名無しさん:2011/11/01(火) 19:51:03.84
fgets
487デフォルトの名無しさん:2011/11/01(火) 19:58:18.52
初心者の頃は「ポインタがわかってる奴はなんで分かりやすく教えてくれないんだよ!」
理解すると「こういうことだからだよ!としか言えないよ!簡単なことじゃんか理解してくれ」
どっちも正しいから責められない
単純なことなのに理解させるのが難しいから理解するのも難しい
488デフォルトの名無しさん:2011/11/01(火) 20:09:52.73
>>486できました。ありがとうございました
489デフォルトの名無しさん:2011/11/01(火) 20:11:21.03
リンクドリストを初めて知ったときにポインタの凄さを頭ではなく心で理解したな。ちょっとしたレボリューションだったわ
490 ◆QZaw55cn4c :2011/11/01(火) 20:13:01.39
>>480
19行目の時点で、test[0], test[1], ... test[20] まで malloc() の返り値が入っている。
1回目の 23 行目(j = 1) で、realloc(test, 1 * sizeof(int *)); によりtest[0] のみ realloc() 後でも意味をもつが、test[1], test[2] test[3] ...... の値は胡散霧消したといってよい。
私の環境では偶然 test[1], test[2] の値は保存されていたが、test[3] 以降の値は 23行目の後でぐちゃぐちゃになっていた。
491480:2011/11/01(火) 20:22:55.73
>>483
この場合ではそうでした

>>490
そのような理由だったのですね。ありがとうございます
492デフォルトの名無しさん:2011/11/01(火) 20:36:04.69
>>491
とりあえず、自分がPCになったつもりで1行ずつ実行してみれば、
小規模なプログラムなら大抵のバグはつぶせるよ。
493デフォルトの名無しさん:2011/11/01(火) 20:56:56.83
>>487
循環論法な説明しか聞けなくなったら質問か相手を変える機転がいるんだよ
初心者と先輩の差は常に一定ではなく逆転することがあるし
まったく逆転できないようであれば適性の問題かも知れない
494デフォルトの名無しさん:2011/11/01(火) 21:02:39.10
次スレのスレタイは「C言語のことは僕に聞け」にしようず!
495デフォルトの名無しさん:2011/11/01(火) 21:07:49.06
3Dアクションは全く興味がなく2Dアクションが作りたいです。

例えばマリオがジャンプするような動作をプログラミングで作れたら最高ですが、
結局プログラミングというより画力でしょうか?
496デフォルトの名無しさん:2011/11/01(火) 21:08:55.82
>>490
×胡散霧消
○雲散霧消
497デフォルトの名無しさん:2011/11/01(火) 21:09:44.04
2Dゲームも内部的には3Dで作るのが主流です
498デフォルトの名無しさん:2011/11/01(火) 21:14:42.05
>>493
先輩は初心者に戻れないってことさ
分かっちゃうと「あれ、なんでこんなことで悩んでたんだろ」ってなっちゃう
そこで初心者とすれ違っちゃう
先輩であって先生なわけではないからそれは当たり前なんだけどね
自分がただ理解することと他人に教えるための理解はまた違うんじゃないかな
499デフォルトの名無しさん:2011/11/01(火) 21:21:03.46
メモリマップトファイルについて質問させてください。
メモリマップトファイルを共有メモリ上のみではなく、ディスク上の実際のファイルにも適用したい場合、
文字列でしか使えないのでしょうか?

たとえば、
PBYTE pbyte;
hFile = CreateFile(省略,"C:\test.txt");
CreateFileMapping(hFile,省略);
pbyte = (PBYTE)MapViewOfFile(省略)
は、実際のディスク上のファイル(test.txt)にも、文字列を書き出せるため、成り立つことがわかるのですが、

構造体のようなデータ形を共有メモリで扱いたい場合、
typedef sturct{int i, char c, char }SHARED_DATA;
SHARED_DATA *sData;
hFile = CreateFile(省略,"C:\test.txt");
CreateFileMapping(hFile,省略);
sData = (SHARED_DATA *)MapViewOfFile(省略)
とした場合、実際のディスク上のファイル(text.txt)を利用したメモリマップトファイルは利用可能なのでしょうか?

文字列でないため、ファイルにどのようにデータが書き込まれるのかが理解できないため、どなたか解説してください。
500デフォルトの名無しさん:2011/11/01(火) 21:25:17.88
>>497
確かにそれは分かります。
3D演算技術があれば2Dが映える感じしますよね。

ただ体は2Dがいいです。
501デフォルトの名無しさん:2011/11/01(火) 21:38:01.19
むしろ体こそ・・・
502デフォルトの名無しさん:2011/11/01(火) 21:58:02.47
>>499
できるので気にせずどうぞ。
503デフォルトの名無しさん:2011/11/01(火) 21:59:16.58
3Dを目指すと、3Dそのものの仕様を実現するだけで時間かかりそうだし。

2Dだと基本が簡単な分【味付け】に力を注ぐのに多くを割きたい。


3Dは理的、2Dは工的なイメージが勝手にあるw
504デフォルトの名無しさん:2011/11/01(火) 22:05:06.54
2Dのほうが簡単というのは幻想
理系脳なら2Dゲームでも3Dで扱ったほうが作りやすい
505デフォルトの名無しさん:2011/11/01(火) 22:11:45.32
メモリーの使用量が全然変わってくるよ
506デフォルトの名無しさん:2011/11/01(火) 22:14:46.95
背景やキャラ、オブジェクト、スコア表示 等
画面奥行き方向で管理すべきものが存在するんだから そこに次元割いても悪くないっしょ?

わざわざ自前で奥から順に描画していく?
507デフォルトの名無しさん:2011/11/01(火) 22:19:05.52
ゲ製行けよクズども
508デフォルトの名無しさん:2011/11/01(火) 22:30:32.36
0==wcscmp(&ptr[i],L" ")で、半角のスペースがptr[i]に入ってるiの時でも全く反応しません
どうしてでしょうか?
509デフォルトの名無しさん:2011/11/01(火) 22:32:57.31
>>508
ptr[i]==L' '
510デフォルトの名無しさん:2011/11/01(火) 22:35:34.46
モデリングとモーション技術あるならいいけどね。
511デフォルトの名無しさん:2011/11/01(火) 22:36:51.51
ptr[i+1] が \0 でないからじゃね?
部分一致じゃだめで完全一致でないと 0 戻さない
512デフォルトの名無しさん:2011/11/01(火) 22:45:28.80
>>510
あぁ、面白そう・・
大学の授業じゃそこまでやらんだろうな・・

>>506
それは2Dの話ですか?

2Dなんて、基本的な事は誰でもできると思うので、そこから先の見栄えを
いかに機能を駆使して作るかですよね。


何も考えずに作ったら、ペラペラの切り絵が動いてるお芝居にしか見えないと
思うから。
513デフォルトの名無しさん:2011/11/01(火) 22:46:56.71
ゲ製へ
514デフォルトの名無しさん:2011/11/01(火) 22:52:37.76
>>509
>>511
ありがとうございました!
515デフォルトの名無しさん:2011/11/02(水) 13:21:51.65
>>421
そういえば、ポインタのポインタはメモリのコンパクション(≒メモリの整理整頓)に
使われることがある。

おおざっぱに説明すると、
例えば char **p, char *q, q = malloc(), p = &q; とすると malloc した領域は *p で
参照できる。ここで仮にシステムがメモリの内容の整理整頓をして q の値がそれに
伴い変更を受けても、p の値は変更する必要がなくかつ *p でメモリの内容を参照
できる。みたいな。
516デフォルトの名無しさん:2011/11/02(水) 14:46:18.22
515.c(6) : declarator expected before * has instead `char'.
517デフォルトの名無しさん:2011/11/02(水) 15:15:11.01
>>515
昔のMacOSのメモリマネージャはそれだった。
リロケータブルブロックをマスターポインタが指し、ハンドルがマスターポインタを指す。
システムは必要に応じてリロケータブルブロックを移動してマスターポインタを更新。
そんな感じ。
518デフォルトの名無しさん:2011/11/02(水) 15:42:33.96
PalmOSも(MacOSを真似したから)同じ要領だったね。
今時はアドレスが仮想化されているからこんなややこしい仕掛けは必要なくなったが。
519デフォルトの名無しさん:2011/11/02(水) 16:27:14.95
数字を反対に並び替えるよい方法はありますでしょうか。
51→15
149→941
7412→2147
という感じです
520デフォルトの名無しさん:2011/11/02(水) 16:31:45.70
>>519
#include <stdio.h>

int reverse_num(int num)
{
int ret=0;

for(;num>0;ret=ret*10+num%10,num/=10)
;
return ret;
}

int main(void)
{
printf("%d\n", reverse_num(51));
printf("%d\n", reverse_num(149));
printf("%d\n", reverse_num(7412));

return 0;
}
521デフォルトの名無しさん:2011/11/02(水) 16:39:06.74
GJ!
522デフォルトの名無しさん:2011/11/02(水) 16:55:14.87
void rev(const char *p) { if (*p) rev(p + 1), putchar(*p); }
int main(void) {
  rev("51"); putchar('\n');
  rev("149"); putchar('\n');
  rev("7412"); putchar('\n');
  return 0;
}
523デフォルトの名無しさん:2011/11/02(水) 21:59:58.89
(^ω^)
(   )
 l  l

↑縦20横30くらいのマップ上でこいつをキーボードのAを押せばジャンプして地面まで落下、
Sを押せばマップ上を右へ、Dを押せば左へ行くプログラム教えてください。
524デフォルトの名無しさん:2011/11/02(水) 22:02:49.93
レスの内容をそのままコードに置き換えるだけ
特別な技術は必要ないよ
525デフォルトの名無しさん:2011/11/02(水) 22:22:52.82
そうか?
C言語という枠内で作るならちょっと無理かもね
環境依存であればあるいは
526 ◆QZaw55cn4c :2011/11/02(水) 22:24:17.25
そこで curses の登場です。curses, 呪いですか‥‥‥。
527デフォルトの名無しさん:2011/11/02(水) 22:31:23.34
>>519
なぜ、よりによってCでそれをやろうとするのか。。。。
haskellなどの関数型言語またはスクリプト言語でtoStringしてreverseでええやん
528デフォルトの名無しさん:2011/11/02(水) 22:32:54.01
>>527
つ スレタイ
529デフォルトの名無しさん:2011/11/02(水) 22:53:48.90
c言語でいまナウいフレームワークってなんですか
530デフォルトの名無しさん:2011/11/02(水) 23:16:31.77
sprintfの仕様についての質問です

char str[5];

sprintf(str, "%d", 1000000");

上記の場合、エラーにならずstrに"1000000"が入るようですが
strに対してrealloc等でメモリの再確保が行われているのでしょうか?
531デフォルトの名無しさん:2011/11/02(水) 23:19:29.65
いや、エラーだよ。ダボルクォーテーションが対応してない。
532デフォルトの名無しさん:2011/11/02(水) 23:21:08.26
あ、すみません。正しくは以下です。

sprintf(str, "%d", 1000000);
533デフォルトの名無しさん:2011/11/02(水) 23:22:02.35
>strに対してrealloc等でメモリの再確保が行われているのでしょうか?
してない。
けどchar str[5];なら8バイト確保してるだろうからかろうじてメモリ破壊は起こってない可能性がある。
char str[5];
char cBuf=1;
とかやってるとcBufの値が書き換えられる可能性がある。
534デフォルトの名無しさん:2011/11/02(水) 23:25:11.63
バッファオーバーランでちゅ
535デフォルトの名無しさん:2011/11/02(水) 23:27:14.09
皆さまありがとうございました。
やはり危険なのですね。
536デフォルトの名無しさん:2011/11/03(木) 03:45:55.11
sprintf_sとかあればそれで。
537デフォルトの名無しさん:2011/11/03(木) 05:21:12.97
>>533
いや、その場合 cBuf には影響はないよね、普通。
538デフォルトの名無しさん:2011/11/03(木) 05:24:06.65
char cBuf=1;
char str[5];
539デフォルトの名無しさん:2011/11/03(木) 07:27:19.15
codepad.orgだと>533 でも >538 でもcBufがstrの前に来たけど
C machineだと>533 ではstrの5バイト後にcBufが来た。
540デフォルトの名無しさん:2011/11/03(木) 07:29:46.11
おまえらQZ管理しといてくれよ…巣から出てたぞ。
http://hibari.2ch.net/test/read.cgi/linux/1312512594/

1:上から目線で住人へ因縁付ける。
2:住人から完全論破される。
3:「またひとつ賢くなった」と捨て台詞

マジQZって、なんで、こんなに人を不快にできるの?
いちいちイライラさせるのは、何?素なの?嫌がらせなの?

linux板なのにnotepadとか例に挙げてるし、notepadと言いながらなぜか全員を見下して強気なQZ見てると、
痛すぎというか、見てるこっちが恥ずかしい気持ちになるし、論破されたら「”また”賢くなった」とか、いちいちイラつかせるし…マジ迷惑。精神的ブラクラだわ。

QZを巣から出すなよマジで。つーかモリタポスレで隔離しといてくれよマジで…不快すぎる。
541デフォルトの名無しさん:2011/11/03(木) 08:15:22.16
またQの妄想癖が悪化してきたのか
やれやれ
542 ◆QZaw55cn4c :2011/11/03(木) 09:36:30.66
543 ◆QZaw55cn4c :2011/11/03(木) 10:08:23.91
>>540
>linux板なのにnotepadとか例に挙げてるし、

linux板なのに「未チェックバッファ」というマイクロソフト用語を使っている点を遠まわしに指摘して
あ げ た
だけなのですが。

>マジ迷惑。精神的ブラクラだわ。
効果があったようでなによりです。
目的は達成されました。
544デフォルトの名無しさん:2011/11/03(木) 12:51:55.33
>>543
>linux板なのに「未チェックバッファ」というマイクロソフト用語を使っている点を遠まわしに指摘して
どこがマイクロソフト用語だよ。
あ、回答は要らんよ。鬱陶しいから。
545 ◆QZaw55cn4c :2011/11/03(木) 12:59:56.50
>>544
へえ?
じゃ、'unchecked-buffer' という単語がマイクロソフトのセキュリティパッチ名で言及されている以外の例、および
マイクロソフトのセキュリティパッチ名で使われている場合とそれ以外との場合との比率がを示していただければ、説得力のあるご意見になるかと思います。

>鬱陶しいから。
この単語こそ QZ の餌であることを、まだご理解いただけていないようですね。青いですね。
546デフォルトの名無しさん:2011/11/03(木) 13:29:43.91
だからQは自己愛性人格障害なんだって

■自己愛性人格障害者 被害者スレ■ 26人目
http://toki.2ch.net/test/read.cgi/utu/1316139405/

このスレ読んでみろ
Qにそっくりな暴れ方をしている奴がどんな被害を受けたか克明に書いてある

★自己愛性人格障害の特徴 25人目★
http://toki.2ch.net/test/read.cgi/utu/1318550092/

このスレを読むとQが自己愛性人格障害である事がはっきりと分かる
547デフォルトの名無しさん:2011/11/03(木) 13:32:31.43
バカの癖に態度がでかい奴にムカつくのはわかるけど、相手にするだけ時間の無駄
548デフォルトの名無しさん:2011/11/03(木) 13:35:28.18
>>543
1:最初から全て把握していた。じつは知っていた。
2:あえてnotepadと発言することで、暗に「未チェックバッファーはマイクロソフト用語だ」と指摘してあげていたのだ!教育してやった。

なにこの後出しじゃんけん。完全にこじつけだろ。無理ありすぎ。

QZって細かい嘘ばっかり吐くけど、なんなの?癖なの?
549デフォルトの名無しさん:2011/11/03(木) 13:35:58.93
あぼ〜んがいっぱい。
550デフォルトの名無しさん:2011/11/03(木) 13:39:12.69
>>548
>細かい嘘ばっかり吐くけど、なんなの?癖なの?

それがナルシストの最大特徴
自己矛盾を指摘されるのが大嫌いでそれを回避するためだったらどんな嘘でも平気でつく
しかも本人は嘘をついた事を全く自覚してないというからたちが悪い
551デフォルトの名無しさん:2011/11/03(木) 14:01:50.00
せっかく NG にしてるのに反応でスレ汚すゴキブリ氏ねよ
552デフォルトの名無しさん:2011/11/03(木) 14:23:39.41
と、Q本人がコテを外してファビョっております
553デフォルトの名無しさん:2011/11/03(木) 14:32:16.37
割れ厨だとバレバレだしなあ
いくら無職とは言っても犯罪を犯すなよな
朝鮮人みたいな事をすんな
あ、もしかして在日チョン?
554デフォルトの名無しさん:2011/11/03(木) 14:40:08.79
ゴキブリホイホイスレはここですか?
555デフォルトの名無しさん:2011/11/03(木) 14:45:14.27
ゴキブリ本人に言われてもなあ説得力ゼロなんだが
556デフォルトの名無しさん:2011/11/03(木) 15:32:51.54
俺もあぼーんしてるんでせめてQZって書いてくれ
いくらなんでもQだけをNGにすると影響が大きい
557デフォルトの名無しさん:2011/11/03(木) 16:52:34.24
win32apiでWNDCLASSEX構造体のhbrBackgroundに
CreateSolidBrushで作ったブラシを格納した場合って
DeleteObjectは必要?
558デフォルトの名無しさん:2011/11/03(木) 16:56:37.96
それをここで聞くとは愚かな
559デフォルトの名無しさん:2011/11/03(木) 17:01:32.65
CreateなんとかしたやつはDeleteObjectした方がいいと思うけど、たぶんスレ違いだとも思う。
560デフォルトの名無しさん:2011/11/03(木) 17:01:36.53
環境依存云々じゃなく
スレ住人のレベルがな・・残念
だが!ゆっくりしていってね!!!
561デフォルトの名無しさん:2011/11/03(木) 17:42:45.59
本当に判り易いなぁ……
562デフォルトの名無しさん:2011/11/03(木) 18:39:29.34
CreateWindowした時に背景を塗りつぶすのにそのブラシが使われるんだけど
そのあとはだれも(゚听)イラネなので、Deleteしないと延々、デスクトップヒープを食っている。
アプリケーションメモリじゃなく、デスクトップヒープ(要するにシステムリソース)を食う。
デスクトップヒープはメインメモリよりもずっと小さいので
浪費するとあっという間に新しいアプリケーションを起動できなくなったり
起動はできたけどメニューが表示されないとか
すげぇいい加減なバグを発生する(エラーにならないからすごい)。
563デフォルトの名無しさん:2011/11/03(木) 19:00:23.09
>hbrBackground
>The system automatically deletes class background brushes
>when the class is unregistered by using UnregisterClass.
>An application should not delete these brushes.
だがスレ違い
564デフォルトの名無しさん:2011/11/03(木) 19:12:50.91
Stringの最後から4文字を消したいんですけどどうすれば良いですか?
565デフォルトの名無しさん:2011/11/03(木) 19:17:48.20
String?4文字とは?ちょっと例を書いてくれよ
566デフォルトの名無しさん:2011/11/03(木) 19:18:35.41
s[strlen(s) - 4] = 0;
こういうこと?
567デフォルトの名無しさん:2011/11/03(木) 19:39:49.25
>>557
もちろん。C言語では確保と開放は常にセットだ
GetStockObject(WHITE_BRUSH)みたいな場合もちゃんと開放しないとダメだぞ
568デフォルトの名無しさん:2011/11/03(木) 19:54:20.68
>>567
ストックオブジェクトって解放する必要あった?
569デフォルトの名無しさん:2011/11/03(木) 20:03:11.03
もちろん開放しちゃダメw
みんな冗談で書いてる。>>563以外は全部ウソだからw
570デフォルトの名無しさん:2011/11/03(木) 20:10:44.03
どれが本当なんだよ
とりあえずWM_DESTROYで解放するようにしたんだけど・・・
571デフォルトの名無しさん:2011/11/03(木) 20:12:55.23
Win32API質問箱で聞いた方が良いと思う。
http://hibari.2ch.net/test/read.cgi/tech/1318439361/
572デフォルトの名無しさん:2011/11/03(木) 21:28:12.04
>>548
本人様がわざわざ貼ってる>>542の流れを見れば、これが後だしじゃんけんであることは明らかだよ。
うそをつき始めると取り返しがつかない人生を送る好例。
573片山博文MZ :2011/11/03(木) 21:28:48.70
俺sugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!
574デフォルトの名無しさん:2011/11/03(木) 21:34:48.35
宿題スレに居座ればいいものを、あそこであおられてなんか知識つけなくっちゃ!ってなったのかどうかしらんが、
いろんなスレに沸いててますますうざい。
575 ◆QZaw55cn4c :2011/11/03(木) 21:36:45.22
>>572
餌をやるな
576デフォルトの名無しさん:2011/11/03(木) 21:38:41.38
>>575
素直にもらって喜んどけ
577デフォルトの名無しさん:2011/11/03(木) 21:43:58.94
まあ void 程ではないな
578デフォルトの名無しさん:2011/11/03(木) 22:02:01.84
おやおやQご乱心ww
579デフォルトの名無しさん:2011/11/03(木) 22:09:24.60
学習用C言語開発環境ていう環境でキューの勉強やってるんだが
QUEUESIZEを 1024*1024*20にすると容量が大きすぎるせいか処理できなくなる
1024なたいけたがキューがオーバーフローしてしまった

web上で動かせるcodepadでやってみたがfgets使ってるから入力できない
かといって開発環境いれるのめんどくせー

web上でCの動作確認できるところないか
580デフォルトの名無しさん:2011/11/03(木) 22:17:47.13
ふつうのコンパイラとメモリ確保の方法をふつうにすればできるよ
581デフォルトの名無しさん:2011/11/03(木) 22:19:57.16
>>579
fgetsを代替関数に置き換えて、配列からデータ入力するようにしてみたら?
582デフォルトの名無しさん:2011/11/03(木) 22:22:55.43
>>579
codepadで勉強とかマゾ過ぎる
583デフォルトの名無しさん:2011/11/03(木) 22:28:08.11
>>570
だからダメだってw

プログラミングWindows 5.3.6 ペンの作成・選択・削除
>・作成したGDIオブジェクトは最終的に必ず削除する。
>・有効なデバイスコンテキストに選択されているGDIオブジェクトを削除してはならない。
>・ストックオブジェクトを削除してはならない。

さらに>>563が書かれているMSDNのページ(5割以上が日本語未訳の素晴らしいサイト)
http://msdn.microsoft.com/ja-jp/site/ms633576

答え。システムが自動で削除するので、アプリケーション内でデリートしてはダメ。
584デフォルトの名無しさん:2011/11/03(木) 22:30:35.01
素数を求める式なんですが、素数で篩わける方法は単純だし実装が
簡単なのですぐできました。

そこでカーマイケル数のフェルマー判定で素数を求めたいのですが、実装はどうなりますか?
なかなか難しくてよく分かりません。理論は分かるのですが上手くいきません。
585デフォルトの名無しさん:2011/11/03(木) 22:39:41.76
よし、まずそのカーマイン数のフェラチオ判定とやらの理論を書いてくれ。
プログラムはわかるのですがうまくいきません。
586デフォルトの名無しさん:2011/11/03(木) 22:45:03.96
>>585
すいませんw

フェルマー判定は、単純なmod≡0を示す数式で、カーマイケル数は
not素数であるのにも関わらずフェルマー判定からは陽が出る擬似素数の事です。

587デフォルトの名無しさん:2011/11/03(木) 22:49:57.22
おれも適当な数の性質を決めて自分の名前つけちゃおうかな。
588デフォルトの名無しさん:2011/11/03(木) 22:53:37.62
>>579
codepadは知らんが、ideoneなら入力も指定できるよ。
589デフォルトの名無しさん:2011/11/03(木) 23:03:32.29
>>587
いやwww
素数判定のアルゴリズムだと思うのですが・・Wiki見てくださいよ。

カーマイケルを予約的にストックするならtime関数とかも使わないといけないから
擬似素数==カーマイケル数の条件配置が散乱しやすいんですよね。



エラストテネスの篩は、どこの参考書にも載ってて飽きました・・
この方法以外で素数を求めたいんですよ。

590デフォルトの名無しさん:2011/11/03(木) 23:16:48.94
>>589
なんで俺らがアルゴリズムを調べにゃならんの?
C言語の質問に落とし込んでから出直せ。
591デフォルトの名無しさん:2011/11/03(木) 23:19:53.27
>>589
フェルマーテストで非合成数 & (ストックしといたカーマイケル数でない)もの
を素数としたいって事?
time関数の必然性が判らない。
あと、Wikipediaのつもりなら正確に書いた方がいい。
592デフォルトの名無しさん:2011/11/03(木) 23:26:52.43
フェルマーテストについては、Wikipediaのフェルマーの小定理のページの
フェルマーテストっていう項目に、ほれプログラムしろっていう感じで書いてあるね。
おれはメンドクサイし無能だから遠慮しとくけど、この通りに書けばいいんじゃね?
593デフォルトの名無しさん:2011/11/03(木) 23:29:59.62
非合成数である事を効率的に求めるのが一工夫必要なのは判るが、スレチだな。
宿題スレとかの方がいいんじゃないか?
594デフォルトの名無しさん:2011/11/04(金) 00:01:15.68
インクルードファイルについて教えてください。
ソースファイルをコンパイルするとき、
インクルードファイルが無くても、ワーニングもエラーも出力されないが、
動作させると、異常終了する場合があります。

異常終了するプログラムに、ヘッダファイルをインクルードするだけで、
本文は触ってないのに異常終了がなくなります。

これはなぜですか?
595デフォルトの名無しさん:2011/11/04(金) 00:03:22.93
>>594
プロトタイプ宣言があると型の変換をしてくれたりするから
596デフォルトの名無しさん:2011/11/04(金) 00:09:44.80
>>595
そういう理由なのですか。
理由がわからず、一日無駄に調べてました。

ちなみにプロトタイプ宣言が無ければエラーを出すような、
コンパイル指定はできるのでしょうか?gccですが。
597デフォルトの名無しさん:2011/11/04(金) 00:26:50.92
598デフォルトの名無しさん:2011/11/04(金) 00:29:51.02
>>596
-Wall とかすればたくさん説教してくれる。
599デフォルトの名無しさん:2011/11/04(金) 00:50:56.80
全部勝手に直してくれるオプションとかあればいいのに
600デフォルトの名無しさん:2011/11/04(金) 00:53:00.44
できれば全部勝手にプログラミングして欲しいよな
601デフォルトの名無しさん:2011/11/04(金) 00:53:30.92
昔Pascalコンパイラで、セミコロン忘れてるみたいだから足しといたわって言いつつ仕事続けてくれるのがあった。
602デフォルトの名無しさん:2011/11/04(金) 01:06:56.81
言語処理系のフロントエンドで、
エラー処理は難所の一つ
603デフォルトの名無しさん:2011/11/04(金) 01:24:15.87
書き込んでる途中で勝手に「ここエラーだから直すわ」とかで修正されるのはむかついた
あとで一気に整形しながら書きたかったのに

ってCの話題じゃなかった、ごめんぬ
604デフォルトの名無しさん:2011/11/04(金) 01:24:54.94
んー。だめだ、プログラムは以下であってるような気がするが
まったくうまく動かない。unsigned long int型 u がある場合、
u & 1 == 0 が常に false になってしまったりするぞ^^
u - 1 == u + 1 も常に false だし^^;;;;;;;

bool isPrimeMillerRabin( unsigned long int p, int k ) {
if ( p == 2 ) { return true; } // 2は素数
if ( p < 2 || !( p & 1 ) ) { return false; } // 2よりも小さいまたは(2以外の)偶数なら計算するまでもなし
srand( ( unsigned )time( NULL ) );

// p - 1 = pow( 2, s ) * d, s > 0 において、最初の奇数dを見つける。
unsigned long int d = p - 1;
while ( !( d & 1 ) ) {
d /= 2;
}

for ( int n = 0; n != k; ++n ) {
unsigned long int a = std::rand() % ( p - 2 ) + 1;
unsigned long int t = d;
unsigned long int y = modpow( a, t, p );
while( t != p - 1 && y != 1 && y != p - 1 ) {
y = modpow( y, 2, p );
t *= 2;
}
if ( y != p - 1 && !( t & 1 ) ) {
return false;
}
}
return true;
}
605デフォルトの名無しさん:2011/11/04(金) 01:35:57.48
>>604
何を言っているのかさっぱり判らんが、srand()は乱数系列の初期化だから通常一回だけ行なえばいい。
つーか、乱数系列の種にtime()を使うと、1秒経過するまで常に同じ系列で初期化するのでrand()の値が一定になってしまう。
606585,604:2011/11/04(金) 01:36:05.88
>>586
一応作ってみたけど、正しく動くかは不明瞭^^;
http://codepad.org/5lKN9XlZ
607585,604:2011/11/04(金) 01:37:31.41
>>605
あ、いや、そこじゃなく、unsigned long intは値が大きくなると
なぜか正しく論理演算や真偽値判定ができなくなる( visual c++2010にて)ってこと
まぁ、intの範囲内なら正しく動くからいいかな、とw
608585,604:2011/11/04(金) 01:41:30.83
っていうか、これは>>586が求めているものとは違うんだけどね^^;
ついに、カーマイケル数の意味がわからんかったw
609デフォルトの名無しさん:2011/11/04(金) 01:46:26.43
http://www.cppreference.com/wiki/jp/operator_precedence
ってことで
u & 1 == 0

u & (1 == 0)
こうなってるんだろ
610585,604:2011/11/04(金) 01:48:52.95
>>609
`;:゙;`;・(゚ε゚ )ブッ!! ホントだw すまん。
611デフォルトの名無しさん:2011/11/04(金) 01:48:54.13
>>602
難所であり、クリアしても特典がほとんどない、という無間地獄
C は諦めることから出発して成功した言語

BASIC とは方向性は違えど、この点では兄弟のようなもの
612デフォルトの名無しさん:2011/11/04(金) 01:54:56.36
なんのこっちゃ。
>>602は処理系を作る場合の話だろ。
613デフォルトの名無しさん:2011/11/04(金) 04:48:55.31
>>579
http://bellard.org/jslinux/
これでできるよ
614デフォルトの名無しさん:2011/11/04(金) 09:32:22.51
半角文字列を入力し、各英数字の出現回数を調べる

というC言語のソースを教えてください。
本気で困ってるんでお願いします。
615デフォルトの名無しさん:2011/11/04(金) 10:17:57.47
宿題?

if( str[i] == 'A' )A++;

counter[ str[i] ]++;
みたいなことをグルグル回せばいいんじゃね?
616デフォルトの名無しさん:2011/11/04(金) 10:41:26.88
>>611
Cは機械がやるべきさまざまな事柄を全部人間に押し付けてるからな。
i=i++が未定義とかホント人間様を舐めてるよな
617デフォルトの名無しさん:2011/11/04(金) 11:15:57.07
アセンブラの代替だから仕方ないのでは?
618デフォルトの名無しさん:2011/11/04(金) 12:17:43.83
>>616
>i=i++
これって何したいの?
619デフォルトの名無しさん:2011/11/04(金) 12:38:17.62
>>618
++演算子の副作用完了点がこの文の最後にあるため、果たして i に代入される値が
++する前の物なのか++した後の物なのかそこまで規定されていない

そこでこの書式そのものの動作結果を未定義とした
620デフォルトの名無しさん:2011/11/04(金) 12:41:05.13
本当は結果が不定でもいいんだろうけど、そうしておくと誰かが使ってしまうので
事実上禁止したわけだろうな
621デフォルトの名無しさん:2011/11/04(金) 12:49:27.84
実装の都合で好きにしてOKって事でしょ。
622デフォルトの名無しさん:2011/11/04(金) 12:55:47.74
>>619
これってどうなるの?と聞いていればそれでいいだろうけど。
>>618の何したいの?ってのは、
>>616が当然だと思っている結果がどういうものなのか聞いてるんだと思うよ。
623デフォルトの名無しさん:2011/11/04(金) 13:11:07.80
i = (0, i++);
これってどうなん
624デフォルトの名無しさん:2011/11/04(金) 13:20:57.98
>>623
これはいいだろ

副作用完了点が2つあり一つはカンマ、一つは文末のセミコロンで、カンマ演算子の
方が先に評価されるために i に代入される値は 0 と一意に決まる
625デフォルトの名無しさん:2011/11/04(金) 13:28:42.72
え、なんで0に決まるの?
626デフォルトの名無しさん:2011/11/04(金) 13:29:03.13
>>624
なわけねーだろ
カンマ演算子が返す値は最後に評価された値だぞ
だからこれも未定義
627デフォルトの名無しさん:2011/11/04(金) 13:42:51.24
つまり
i = (i++, i);
これならきまるということ。
628デフォルトの名無しさん:2011/11/04(金) 14:01:40.11
j = (++i, i);
こういうことがやりたいのかと想像
629デフォルトの名無しさん:2011/11/04(金) 14:31:33.80
カンマ演算子の有用さは異常
630デフォルトの名無しさん:2011/11/04(金) 14:56:05.05
0は評価後カンマ演算子により捨てられる。
現在のiの値に1が加算され、iに代入される。
こんな感じで合ってる?
631デフォルトの名無しさん:2011/11/04(金) 14:56:10.14
>>628
j = (i++, i); がしたいんじゃないの?ということなら、j = ++i; で何の問題もない。
ほかに意図があるのなら書いてもらえないか
632デフォルトの名無しさん:2011/11/04(金) 15:16:02.41
未定義についてだろ。
633デフォルトの名無しさん:2011/11/04(金) 15:19:37.02
>>616
機械がやるべきことは指令に忠実に動くことで
指令を間違えたら、むしろそのとおり間違えるべき

勝手に気を利かせる機械はかえって使いづらい
Int main みたいな某社の思想がその典型

>>618
その疑問が正解
イミフを文法上書けてしまうことを防ごうとしていないだけで
いやがる人はいるが、そいつらの言うとおりしてもロクなことになってない
634デフォルトの名無しさん:2011/11/04(金) 15:25:44.84
>>632
どのレスに反応したんだ?>>631
635デフォルトの名無しさん:2011/11/04(金) 15:29:14.11
言語の仕様を「機械」って呼ぶのはなんか抵抗がある自分
636デフォルトの名無しさん:2011/11/04(金) 15:31:05.22
i = (A, B, C);
って書いたとき、AやBで発生する副作用はカンマ演算子によって都度完了されるけど、
最後のCについてはセミコロンによって完了するってことなの?
つまり、
A;
B;
i = C;
と等価?
637デフォルトの名無しさん:2011/11/04(金) 15:37:47.40
>>636
そうだよ
638デフォルトの名無しさん:2011/11/04(金) 15:54:21.37
なるほど。
なので>>623はアウトで>>627はOKなのかぁ。
639デフォルトの名無しさん:2011/11/04(金) 15:58:06.52
>>638
そう。
副作用完了点てやつだ。
もし、興味があれば規格書でも読めばいい。
640デフォルトの名無しさん:2011/11/04(金) 16:04:40.46
p[i++] = q[j++];
p[i] = q[i];
++i;
++j;
速度的にほぼ同じなら分けて書くほうがいいよね
なんで1行で書こうとするん?
641デフォルトの名無しさん:2011/11/04(金) 16:11:02.55
for 文の中とかマクロ定義とか・・・。
642デフォルトの名無しさん:2011/11/04(金) 16:14:34.42
>>639
JISひらけなかったもので確認した次第

>>632は落ちついたんだろうか
643デフォルトの名無しさん:2011/11/04(金) 16:14:57.41
>>640
そんなあなたにアセンブラ
644デフォルトの名無しさん:2011/11/04(金) 16:15:05.40
あと、K&Rだとそこまでは言及してなかった
645デフォルトの名無しさん:2011/11/04(金) 16:19:12.50
JIS
646デフォルトの名無しさん:2011/11/04(金) 16:19:54.11
途中送信しちまった…
JISのページ、Adobe Readerを最新にすると見られないよな。
どうなってんの?
647デフォルトの名無しさん:2011/11/04(金) 17:51:40.39
>>640
昔のCPUはそこまで1命令でできたりする方向に進化したりもしてたんだよ。
オプティマイザもあてにできない時代もあったしね。
まぁ昔話はいいとしても、1行で書いた方が見やすいしくだならないバグも
入りにくいってメリットもある。
648デフォルトの名無しさん:2011/11/04(金) 17:52:33.98
>>642
ググって出てきても信用できない方ですか。
いろいろ大変そうですね。
649デフォルトの名無しさん:2011/11/04(金) 18:06:32.92
>>648
ググって出てきても信用はできないだろ普通
650デフォルトの名無しさん:2011/11/04(金) 18:11:49.80
for()の()は&&とか多様しまくって条件複雑にしても何とかなる感は異常
651デフォルトの名無しさん:2011/11/04(金) 18:20:34.39
>>647
マイクロコード全盛だったもんな
今じゃ全部RISC命令に分解してから実行した方が速くなってる
ハードウェア化するにはその方が回路設計が楽になる
652デフォルトの名無しさん:2011/11/04(金) 18:20:54.87
p[i++] = q[j++];
って鼻から悪魔飛び出したりはしないの?
653デフォルトの名無しさん:2011/11/04(金) 18:21:31.02
しないよ。
654デフォルトの名無しさん:2011/11/04(金) 18:24:32.21
>>652
i の繰り上げのタイミング、j の繰り上げのタイミング がクリティカルになってない

p[i++] = i; だと 右辺 i 参照前に繰り上げ〜右辺 i 参照後に繰り上げ
と完了点までの範囲内に自分自身が居る
655デフォルトの名無しさん:2011/11/04(金) 18:35:32.02
ディディコングがローリングアタックするプログラムってどうなりますか?
すいません前からここにいるドンキーコングオタクです^^;
656デフォルトの名無しさん:2011/11/04(金) 18:35:44.73
単純にいってしまうと、
後置インクリメントは式の中で自分自身を2回使っちゃらめって覚えとけばとりあえず問題ない。
そして、>>640の疑問の通り、最近のコンパイラは賢いから、まさに一行で書く意味はないよねって
C++では普通に。
657デフォルトの名無しさん:2011/11/04(金) 18:40:44.39
定義しちゃえばいいのにね
658デフォルトの名無しさん:2011/11/04(金) 18:41:00.06
自分の趣味のコードなら好きに書けばいいけど、
他人がメンテするソフトはやめて欲しい。

いや、まじで。
659デフォルトの名無しさん:2011/11/04(金) 18:42:46.77
うーん…
だめだ、完了点とかよくわかってないからな

JIS規格読んでこようと思ったら見れなかったでござる。
660デフォルトの名無しさん:2011/11/04(金) 18:49:18.28
テンポラリを作らない分>>640の下のほうが効率がいいのでは?
661デフォルトの名無しさん:2011/11/04(金) 18:50:54.42
「この時点でインクリメントしなさい」 とは定義してなくて
「ここまでにはインクリメントを終わらせなさい」 って定義してるのが完了点
662デフォルトの名無しさん:2011/11/04(金) 18:52:51.98
>>659
買うと8万だかするんだよね。
JIS規格には著作権ないはずなのに著作権を主張してコピーさせないし。
挙句に最新のAdobe Readerだと見れない。

さすがは巨大な天下り団体。仕事しなさ加減は世界最高レベル。
663デフォルトの名無しさん:2011/11/04(金) 18:54:18.94
20万個のアルファベット列(一列10文字以内)を昇順にクイックソートしたら0.8秒でした。
これ早いでしょうか?
664デフォルトの名無しさん:2011/11/04(金) 18:59:23.87
>>663
それはいくらなんでも遅すぎじゃないか?
665デフォルトの名無しさん:2011/11/04(金) 19:06:31.62
>>664
うそェ・・
strcmp使うしかないですよね?
666デフォルトの名無しさん:2011/11/04(金) 19:09:07.19
ただ10年前からした考えられないだろうな・・・
20万個のクイックソートでも一分くらいかかるんじゃないの?10年くらい前だと。
機種詳しい人教えて。
667デフォルトの名無しさん:2011/11/04(金) 19:12:20.18
>>663
qsort と strcmp 使った方が早いんじゃね?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WORD_NUM 200000
#define WORD_LEN_MAX 10

int main(void)
{
static char word[WORD_NUM][WORD_LEN_MAX+2];
long i, j;

for(i=0;i<WORD_NUM;i++){
for(j=0;j<WORD_LEN_MAX;j++){
word[i][j]=(rand()%26)+'A';
}
word[i][j]='\0';
}

qsort(word, WORD_NUM, sizeof(word[0]), strcmp);

for(i=0;i<WORD_NUM;i++) puts(word[i]);

return 0;
}
668デフォルトの名無しさん:2011/11/04(金) 19:15:01.43
√3を1万桁求めるプログラム作ったけど、この場合は7分かかった。
遅いかな?1.73205081・・・・・・
669デフォルトの名無しさん:2011/11/04(金) 19:15:49.89
>>667
20万要素もある配列宣言すると、スタックエラーでるでしょwww
heapから呼び出さないと。
670デフォルトの名無しさん:2011/11/04(金) 19:17:40.45
>>662
見ようとしたら
X3010_01.pdf
15.9 MB (16,748,724 バイト)
MD5:9723FF3B1BD26AF5D5109BF57EC09E44
と普通に保存できたので
いったんローカルに保存してから
適当なビューワーで見ればいんじゃない?
671デフォルトの名無しさん:2011/11/04(金) 19:18:03.47
>>648
ああ、何を言われてもググらないと心配になっちゃう方ですか。
お察しします。
672デフォルトの名無しさん:2011/11/04(金) 19:20:06.93
>>670
よし、そのブラウザと詳しいダウンロード方法を教えるんだ。
いや、教えてください。お願いします。(´・ω・`)
673デフォルトの名無しさん:2011/11/04(金) 19:22:22.57
>>666
ちょうど>>667的なコード作って試してみてたけど、i7-2600K 4.5GHzで
0.05秒くらいだね。
674デフォルトの名無しさん:2011/11/04(金) 19:22:54.80
>>666
十年前だと PentiumIII がすでに出てたころだろ
CPU周波数が 500MHz、周波数効率が 0.3 とすれば
今のCPUの 150MHz 相当になる

メモリに全部のるなら
20倍程度の差しかでないんじゃね?
675デフォルトの名無しさん:2011/11/04(金) 19:23:50.55
>>669
static ついてるっしょ
676デフォルトの名無しさん:2011/11/04(金) 19:25:17.68
>>674
10年前ならpen4じゃね
677デフォルトの名無しさん:2011/11/04(金) 19:31:17.61
>>673>>665宛てね。
もちろん面倒だからstrcmp使って。
678デフォルトの名無しさん:2011/11/04(金) 19:33:59.51
>>670
適当なビューアで見れる?
679デフォルトの名無しさん:2011/11/04(金) 19:39:07.96
>>668
開平方で求めたら早くなるよ
680デフォルトの名無しさん:2011/11/04(金) 19:52:56.99
>>668
bcコマンドでやってみたけど、1.7秒くらいだった。@i7-2600K 4.5GHz
http://blue21.ddo.jp/man/man2html.html?lang=ja&cmd=1+bc
681デフォルトの名無しさん:2011/11/04(金) 19:58:41.71
>>672
勘違いしてたみたい
落とせたつもりになってたけど前に落としたファイル見てたわ
ttp://www1.axfc.net/uploader/Li/so/113224
682デフォルトの名無しさん:2011/11/04(金) 20:00:35.23
√は時間かかるよね
後eは求め方自体がわからんw

円周率は100万桁、たった10分で出力するプログラム作った。
FFT駆使したw、作るのに1か月かかったぜ・・
683デフォルトの名無しさん:2011/11/04(金) 20:01:28.35
>>681
うん。そのファイル、最新版Adobe Readerじゃ読めないからw
684デフォルトの名無しさん:2011/11/04(金) 20:02:16.67
>>682
Superπ104万桁なら8秒だが。@i7-2600K 4.5GHz
685デフォルトの名無しさん:2011/11/04(金) 20:04:47.33
>>684
100万桁10分って、頑張ったほうですかね?
Cプログラム歴4年です。
686デフォルトの名無しさん:2011/11/04(金) 20:08:05.89
円周率求めるのは数学的考察が必要だから、まぁまぁかな。

687デフォルトの名無しさん:2011/11/04(金) 20:12:55.34
>>680
いーなー4.5GHz w

今2ch見てるノーパソ(Mac)で走らせてみたら、1万桁だとなかなか帰ってこない。
1000桁までは割と速いんだけど。これってどういうスケーリングだっけ?
688デフォルトの名無しさん:2011/11/04(金) 20:19:51.47
>>682
>後eは求め方自体がわからんw

もしかして基本的な数学の知識もなくコードを書いているの?
689デフォルトの名無しさん:2011/11/04(金) 20:22:08.80
あるわけないだろ。俺は生粋の文系プログラマで法学部卒だ。
この知識を生かして業務系のアプリ(RDBにデータを入れたり出したり集計したりするだけのプログラム)を
何十万行も書く不定期な仕事を何年か前にリストラされて以来のニートだからな。
690デフォルトの名無しさん:2011/11/04(金) 20:23:24.27
素数って、桁数多くなるほど、素数間隔増えるんじゃないのかな?

間違ってる?
691デフォルトの名無しさん:2011/11/04(金) 20:25:52.45
eは(1+x)^(1/x)かな。
むずいなww
692デフォルトの名無しさん:2011/11/04(金) 20:26:53.16
>>690
x 以下の素数の数は、x/log(x) で近似できる。

らしいから平均間隔は広がる傾向にあるね
693デフォルトの名無しさん:2011/11/04(金) 20:46:11.10
>>670
昔はキャッシュから引っ張ってこれたけど今はロックが掛かってて
ローカルコピーを見ても見れないよ

これと同じでC++11のJIS版も買うしかない
694デフォルトの名無しさん:2011/11/04(金) 20:53:59.42

悪徳商法だとしか思えないよね。
695デフォルトの名無しさん:2011/11/04(金) 20:58:13.31
でもどうせお前らJIS版の日本語貼ったら英語の原文で貼れとかケチ付けるもんな
まあいいけど
696デフォルトの名無しさん:2011/11/04(金) 21:05:24.30
√3 一万桁を開平方で求めたら 2秒くらいだった
697デフォルトの名無しさん:2011/11/04(金) 21:05:43.19
原文を誰かが翻訳して、公開したらいいんじゃないの?
698デフォルトの名無しさん:2011/11/04(金) 21:10:17.01
>>696
円周率は何で√と違って早く求めれるんだろ。
699デフォルトの名無しさん:2011/11/04(金) 21:27:18.53
どっからそんな話が出てきたんだ?
700696:2011/11/04(金) 21:36:22.41
とりあえず√ 1万桁 1秒まで高速化してみた
http://codepad.org/2BZ0PleK
701デフォルトの名無しさん:2011/11/04(金) 21:40:32.26
>>689
高校数学で習うけど、文系はやんないんだっけか
702デフォルトの名無しさん:2011/11/04(金) 21:40:47.66
>>700
高速化しても1秒かー
100万桁だと1分40秒か
うーん、もっと早くならないかな?
703デフォルトの名無しさん:2011/11/04(金) 21:44:23.01
>>702
>>700 のコードはO(n^2)で計算量が増えるから
そんなもんじゃすまないよ
704デフォルトの名無しさん:2011/11/04(金) 21:49:50.85
>>703
フーリエ変換使わないの?
705デフォルトの名無しさん:2011/11/04(金) 21:52:38.23
お前ら√求めることってそんなにあるの?
706デフォルトの名無しさん:2011/11/04(金) 21:55:49.05
>>700
mbi_sqrt()だけ計ったら0.4秒だった。@i7-2600K 4.5GHz
707デフォルトの名無しさん:2011/11/04(金) 21:56:39.76
>>705
πを求めることよりは断然あるな。
708デフォルトの名無しさん:2011/11/04(金) 22:01:00.91
πの方が明らかにミステリーなのに

√3ごときが膨大な時間かかるとかwww
709デフォルトの名無しさん:2011/11/04(金) 22:02:21.98
膨大とか、どっからでてきたんだ?
710デフォルトの名無しさん:2011/11/04(金) 22:05:09.49
>>709
円周率1万桁と、平方根1万桁だと後者の方が相対的に膨大な時間かかるんだよ。
711デフォルトの名無しさん:2011/11/04(金) 22:14:55.47
そんなの使う漸化式の次数によるだけだろ。
712デフォルトの名無しさん:2011/11/04(金) 22:16:28.38
>>693
そうなのかぁ
ひどいねこれは
713デフォルトの名無しさん:2011/11/04(金) 23:21:26.23
int j=0;
714デフォルトの名無しさん:2011/11/05(土) 02:42:47.26
>>691
極限値を数値的に求めるってかw

普通にe^xのテーラー展開でx=1にすればいいでしょ。
もっと収束の速い級数とかあるかもしれんがとりあえず。
715デフォルトの名無しさん:2011/11/05(土) 04:47:07.63
たとえば斜めの棒 / の最初の点をA、最後の点をBとする。
Aの座標は、Xは10、Yは10だとする。
Bの座標は、Aに0.001だけ足した座標だとする。Bの座標は、Xは10.001、Yは10.001。


A座標とB座標の差は、Xの差は0.001、Yの差は0.001
このYの差を、Xの差で割ると、線の傾き(Xが1増える事に、Yがいくつ増えるか?)がわかる。

0.001 / 0.001 = 1
716デフォルトの名無しさん:2011/11/05(土) 04:50:07.93
>>662
> JIS規格には著作権ないはずなのに著作権を主張してコピーさせないし。
「著作権ないはず」っていうのはどういう理屈なの?
717デフォルトの名無しさん:2011/11/05(土) 04:51:08.68
Y座標は、2のX乗。という線 ノ の場合。

Xが3の時のY座標は
Y = 2^3 = 8

Xを0.001だけ増やした時のY座標は
Y = 2^3.001 = 約8.005


この時のY座標の差は 8.005 - 8.000 = 0.005
Xの差が0.001で、Yの差が0.005なので、この時の瞬間的な線の傾きは 0.005 / 0.001 = 5

だいたい、Xが1増えるごとに、Yが5づつ増える傾き。
この2^x乗の時の値8と、その瞬間の傾き5とでは、数字がかなり違う。8と5。
718デフォルトの名無しさん:2011/11/05(土) 04:54:48.74
2じゃなくて e の場合
e^x した時の値と、その瞬間の傾きは同じになる。

たとえば
e^3の値が約20.08
3を0.001だけ増やした場合は20.10
この差は0.02。

この瞬間の傾きは 0.02 / 0.01 で 20となる。
値も20で、その時の傾きも20。不思議な数。それが
719デフォルトの名無しさん:2011/11/05(土) 04:57:00.33
2.7
720デフォルトの名無しさん:2011/11/05(土) 05:52:54.33
>>716
規格と規格書の違いが分かってないんだよ。
721デフォルトの名無しさん:2011/11/05(土) 06:04:26.75
>>683
この方法で一旦画像を取り出して読むことが出来てる。
http://d.hatena.ne.jp/SaitoAtsushi/20101218/1292656982

GhostScript で PostScript 形式に変換すると単に四角を描画する命令になってるみたいなので、
それを適当に編集するというのもひとつの手かもしれない。
722デフォルトの名無しさん:2011/11/05(土) 06:33:18.99
>>718
>この瞬間の傾きは 0.02 / 0.01 で 20となる。

先生、なりませーんw
というかその傾きどうこうって話つまんないからもういいでーす。
723 ◆QZaw55cn4c :2011/11/05(土) 07:14:51.29
>>578
せめて QZ にしてくれ。Q を NGワードにしたくない。
724デフォルトの名無しさん:2011/11/05(土) 07:19:52.98
ついてけない話題だったからってそれか。
725 ◆QZaw55cn4c :2011/11/05(土) 07:33:20.58
>>718
そりゃあたりまえ、f = exp(x) において df/dt = f だ。
ってことをいいたいのか?
それはそうと、2年7ヶ月間商品投資をやって20% 利益がでたが、これって年利に換算するといくらくらいになるのか?
726デフォルトの名無しさん:2011/11/05(土) 07:34:25.90
えっ?
xをtでえっ?
727デフォルトの名無しさん:2011/11/05(土) 07:38:36.42
f(x)をtで微分したら0ジャマイカ
728デフォルトの名無しさん:2011/11/05(土) 11:06:19.89
相変わらずQは低能の癖に見栄っ張りですなあ
間違えた上に聞きもしない自慢話なんかしやがって
729 ◆QZaw55cn4c :2011/11/05(土) 11:13:55.04
>>728
せめてQZにしてくれへんか。NGワードにできひんやろ?
730デフォルトの名無しさん:2011/11/05(土) 11:25:34.65
NGワード云々言う前に自分の言動を直せ
そうすれば誰もNGしない
731デフォルトの名無しさん:2011/11/05(土) 11:26:53.68
誰か俺の股間のスカイツリーをプログラム的に表現してくれ
732デフォルトの名無しさん:2011/11/05(土) 12:02:38.57
>>731
unsigned long long int skytree731() {
    return 1;
}
733デフォルトの名無しさん:2011/11/05(土) 12:27:40.20
副作用完了点とコンマ演算子の規格です。例によって俺訳を付けておきます。

5.1.2.3 Program execution

2 Accessing a volatile object, modifying an object, modifying a file, or calling a function
that does any of those operations are all side effects, which are changes in the state of
the execution environment. Evaluation of an expression may produce side effects. At
certain specified points in the execution sequence called sequence points, all side effects
of previous evaluations shall be complete and no side effects of subsequent evaluations
shall have taken place. (A summary of the sequence points is given in annex C.)

volatileオブジェクトにアクセスすること、オブジェクトを変更すること、ファイルを変更
すること、もしくは、これらの操作のどれかを行う関数を呼ぶことは、全て副作用である。
副作用とは、実行環境の状態が変化することである。式の評価は副作用を伴うかもしれません。

順次実行している中で、副作用完了点(sequence points シーケンスポイント)と呼ばれる
ある特定の場所では、それ以前の評価によって起こる全ての副作用は完了していなければない。
そして、副作用完了点では、それ以降に続く評価によって起こる副作用が生じてはならない。
(付録Cに副作用完了点の要約が提供されている)

6.5.17 Comma operator

2 The left operand of a comma operator is evaluated as a void expression; there is a
sequence point after its evaluation. Then the right operand is evaluated; the result has its
type and value. If an attempt is made to modify the result of a comma operator or to
access it after the next sequence point, the behavior is undefined.

コンマ演算子の左のオペランドはvoid式として評価される。この評価の後に副作用完了点がある。
その後、右のオペランドが評価される。結果は、右のオペランドの型とその値である。

コンマ演算子の結果の変更を試みたり、次の副作用完了点の後にそれにアクセスすることを試みると、
その動作は未定義である。
734デフォルトの名無しさん:2011/11/05(土) 13:58:32.11
>>733ですが、コンマ演算子の結果について少し誤訳しました。

誤:結果は、右のオペランドの型とその値である。
正:結果は、右のオペランドの型とその値を持っている。

以下のように注釈に、「コンマ演算子は左辺値を生じない」とあるので、誤訳のほうでは
結果が左辺値になる可能性もあるので、訂正します。

95) A comma operator does not yield an lvalue.
コンマ演算子は左辺値を生じない
735デフォルトの名無しさん:2011/11/05(土) 14:12:04.53
マンコマンコうるせぇよ
736デフォルトの名無しさん:2011/11/05(土) 16:33:26.94
ifとswitchどっちが早いんですか?
switchはコンパイラがジャンプテーブル作るときもあるって書いてあったけど
そのジャンプテーブルを自分で作れば一番早いですか?
737デフォルトの名無しさん:2011/11/05(土) 17:01:30.13
>>736
環境とかデータによってちがうから一概にいえない。
実測が基本。
738デフォルトの名無しさん:2011/11/05(土) 17:12:50.97
>>716
公的な文書は、税金でつくられているから著作権はない
739デフォルトの名無しさん:2011/11/05(土) 17:22:24.32
規格は、著作権が認められない

「DIN(ドイツ標準協会)の規格を無断借用した出版社をDINが著作権侵害訴訟で訴えたところ、
連邦通常裁判所と連邦憲法裁判所で規格の著作権が認められず、請求が棄却された」

「米国においても、第5巡回区連邦控訴裁判所と連邦最高裁判所で国家規格が法律に準ずるとして著作権が否定された」

日本工業規格 − Wikipedia
740デフォルトの名無しさん:2011/11/05(土) 17:27:26.37
プログラム言語Cは国内の民間団体が原案作成に関わってるから著作権が発生してるよ。
(平成に入ってJIS規格に関する法律が変わったんだよね)

それはともかくとして、うちの環境では見られない(´・ω・`)
マックとかだったら見られるのかな…
741デフォルトの名無しさん:2011/11/05(土) 17:30:50.00
>>738-740
民間の原案作成者(著作権者)が規格の販売売り上げに応じた報酬をちゃんと受け取っていれば
「著作権がある」とする話の辻褄は合いそうなんだけど、そういう事実は無いということ?
742デフォルトの名無しさん:2011/11/05(土) 19:39:24.67
だからpdfのファイル構造を自分で調べて(ry
743デフォルトの名無しさん:2011/11/05(土) 22:05:31.49
>>736
そんなことで悩む以前にまずプロファイルを取れ。
ほとんどの場合、お前が思っている所以外が遅さの原因だから。
744デフォルトの名無しさん:2011/11/05(土) 22:11:28.34
原因だからね。
745デフォルトの名無しさん:2011/11/05(土) 22:12:02.07
(´・ω・`)…
746デフォルトの名無しさん:2011/11/05(土) 22:42:16.00
げ・・・原因じゃないんだから!
747デフォルトの名無しさん:2011/11/05(土) 23:33:44.99
法律を集めた六法全書は著作権ないのか?
勝手にコピーして再販してもいいのか?
748デフォルトの名無しさん:2011/11/05(土) 23:46:46.07
>>725
>>そりゃあたりまえ、f = exp(x) において df/dt = f だ。

あたりまえ?
なんで?
749デフォルトの名無しさん:2011/11/05(土) 23:50:59.73
>>748
これはひどいw 高校出てなくても勉強くらいはしようや
750デフォルトの名無しさん:2011/11/05(土) 23:55:43.71
お前がな。
751デフォルトの名無しさん:2011/11/06(日) 00:00:20.22
>>747
コピーはダメ。
編集というかレイアウトには著作権がある。
スキャナで読み込んで、レイアウト変えて印刷すれば再版できる。
法律の条文自体には著作権は認められないから。
752デフォルトの名無しさん:2011/11/06(日) 00:00:27.09
興味深い意見だな
753デフォルトの名無しさん:2011/11/06(日) 02:45:39.70
typedef struct AnyVec {
struct AnyVec *next;
struct AnyVec *prev;
int type;
void *data;
} AnyVec;
こんなvector<boost::any>相当の構造体を引数として受ける
void myprintf(AnyVec* v) {}
な関数があったとして
そのままprintfに流し込むにはどんな方法がありますか?
できればインラインアセンブラ以外のやり方が知りたいです
754デフォルトの名無しさん:2011/11/06(日) 03:57:23.73
>>753
>こんなvector<boost::any>相当の構造体
755デフォルトの名無しさん:2011/11/06(日) 05:23:41.08
typeとvoid*を渡すと文字列を生成する関数作ってcatなりなんなりすりゃいいんじゃね?

その構造体はリストだからとかそういうツッコミはしないからな
756デフォルトの名無しさん:2011/11/06(日) 05:25:30.57
>>753
どっちみちprintf()が扱えるのは引き数の羅列だからvprintf()に渡すしか。
で、vprintf()ならフォーマット文字列を自分で生成して引き数をmalloc()かなんかした領域に詰め替えてやればなんとかなるかも。
757デフォルトの名無しさん:2011/11/06(日) 06:32:59.44
>>755
やりゃ出来るだろうけど書式指定を全て賄おうとしたら労力半端なくね?
環境ごとに切り分けてインラインアセンブラで書いたほうがマシな気がする
たしかにlinkedlistだね

>>756
その線でやってみる
ありがとう
758デフォルトの名無しさん:2011/11/06(日) 07:54:45.60
実現したい内容とやろうとしている事をはっきりさせたほうががが
759デフォルトの名無しさん:2011/11/06(日) 10:53:27.58
仮に実現できたとしても、呼び出し元の記述は、
もうパット見では理解不能な代物になるのでは・・・。
760デフォルトの名無しさん:2011/11/06(日) 11:00:26.33
基礎をすっ飛ばして応用しようとしてめちゃくちゃになっている良いサンプルだ
まずは最低でも基本情報を通過してからコードを書け
それまでは一切のコーディングを禁止するべきだ
761デフォルトの名無しさん:2011/11/06(日) 11:17:12.96
お前、アホっぽいな。
762デフォルトの名無しさん:2011/11/06(日) 11:18:55.49
正しい文法の日本語を話せるようになるまで、日本語の使用は禁止
763デフォルトの名無しさん:2011/11/06(日) 11:22:16.09
コーディングと日本語禁止されてアホ呼ばわりされる>>753かわいそう
764デフォルトの名無しさん:2011/11/06(日) 11:26:52.13
と、アホがぬかしとる。
765デフォルトの名無しさん:2011/11/06(日) 11:31:30.18
誰か悪魔召喚プログラム作ってくれ
766デフォルトの名無しさん:2011/11/06(日) 11:33:33.57
未定義コードを実行しまくってれば、いつか悪魔が出るかもしれない
767デフォルトの名無しさん:2011/11/06(日) 11:44:41.18
デバイスに悪魔召喚の機能がないといくら未定義でも無理だろ
768デフォルトの名無しさん:2011/11/06(日) 11:50:15.13

デーモンやゾンビがいっぱいいます
769デフォルトの名無しさん:2011/11/06(日) 11:53:39.18
いい加減、つまらんよ。
ちょっとでもおもしろいと思ってるのかね。
770デフォルトの名無しさん:2011/11/06(日) 11:55:08.26
プログラマをゾンビにするプログラムなら、
俺はいくつか見てきたぜ
771デフォルトの名無しさん:2011/11/06(日) 11:57:57.62
まじめな話しコードだけで物質界に影響を与えるのは至難の業かと
映像と音の他にアウトプットにプラスαが必要だと思うよ具体的に何が必要化は知らんけど
772デフォルトの名無しさん:2011/11/06(日) 11:58:32.03
だからもういいって。
773デフォルトの名無しさん:2011/11/06(日) 12:07:37.11
話題ふれよ
774デフォルトの名無しさん:2011/11/06(日) 12:08:34.41
悪魔召喚プログラムってアセンブラ言語で書かれたんだっけ?
775デフォルトの名無しさん:2011/11/06(日) 12:10:47.13
トイレの神様みたいに丁寧にコーディングしてればいつかは女神様があらわれるかもしれない

んで、結婚して数ヶ月すると性格がオバ藩化して、やがて悪魔になる
776デフォルトの名無しさん:2011/11/06(日) 12:14:30.19
現実の召喚儀式をプログラム上に落とし込んだのが悪魔召喚プログラムだから
まずは現実の召喚儀式で悪魔が本当に呼べないとだめだろう
777デフォルトの名無しさん:2011/11/06(日) 12:23:37.98
未定義の話だろ。
知識もないやつが出てくるなよ。
778デフォルトの名無しさん:2011/11/06(日) 12:32:12.83
特定のハードを発火させるコードなら見たこと有る
779デフォルトの名無しさん:2011/11/06(日) 12:34:03.34
たまにコーディング中に悪魔が見えることもあるな
780デフォルトの名無しさん:2011/11/06(日) 12:47:24.98
>>778
それはハードエンジニアがクソなだけ。
781デフォルトの名無しさん:2011/11/06(日) 13:33:22.14
ごめん
782デフォルトの名無しさん:2011/11/06(日) 13:40:18.46
効率よくCPUのトランジスタを動作させるプログラムなら熱暴走くらいは狙えるかもしれん
ノートPCでクアッドコアCPU乗せてるやつとか
783デフォルトの名無しさん:2011/11/06(日) 13:53:12.19
トランジスタ、懐かしすぎる言葉
784デフォルトの名無しさん:2011/11/06(日) 13:55:44.95
トランジスタって書かないと単なるCPU使用率100%とは違うからね
785デフォルトの名無しさん:2011/11/06(日) 13:59:49.32
LSI設計の世界ではトランジスタ普通に使うよ。
専門用語が一般人にはアナクロに感じられるたまによくある例。
786デフォルトの名無しさん:2011/11/06(日) 14:06:07.92
プログラムから見た場合は、
効率よくCPUのトランジスタを動作させると言うより、
効率よくCPUのロジック回路を動作させると言うべきじゃないの?
787デフォルトの名無しさん:2011/11/06(日) 14:09:15.34
ノートなんて特にファンがつまったら普通のプログラムでも簡単におかしくなる。
ちょっとスレ違いな上にくだらなすぎなのでもういい?
788デフォルトの名無しさん:2011/11/06(日) 14:23:15.56
ダイハードで見たんだけどDelキー押したらPC爆発するプログラムが……
789デフォルトの名無しさん:2011/11/06(日) 14:28:09.59
>>788
プログラムジャンクて、
DELキーが爆薬の発火装置に直接繋がってたんじゃね?
PC自体を改造して
790デフォルトの名無しさん:2011/11/06(日) 15:19:38.24
>>789
たぶんあれ発火装置に直接じゃなくてDELキーで発火させるフラグを遠隔でONにしてると思う
まわりくどいけど遠隔で直接ボンだとその場にいない可能性があるからね。
つーかPC組むときにあの爆弾気づくよなぁ、BTOかメーカー品かなのかな?

脱線ついでだけど スーパーコンピューターの演算能力でビルの空調関係に負荷をかけて爆発させるというスーパーハカーが
791757:2011/11/06(日) 17:44:57.73
>>756
先ほど試したところ、すんなり呼び出す事が出来ました
ありがとう
792デフォルトの名無しさん:2011/11/06(日) 21:07:52.39
文字が格納してある配列a[i][j]に半角スペース「 」がはいってるかどうか調べたいんですが

strcmp(&maze[i][j]," ") == 0 でも
maze[i][j] == " "でも

だめなんだ
どんな方法がありますかね?
793デフォルトの名無しさん:2011/11/06(日) 21:10:38.53
アイアムエスパーなんだが。
その変数 maze は char maze[3][5]; のような類か?
だとするなら、
maze[i][j] = ' '; でなければチャックできない。
(半角スペースをシングルクォートで囲っていることに注意)
794デフォルトの名無しさん:2011/11/06(日) 21:11:14.54
おっと、maze[i][j] == ' '; だったよ。ハンドパワーです。
795デフォルトの名無しさん:2011/11/06(日) 21:16:25.92
>>792
つstrchr
796デフォルトの名無しさん:2011/11/06(日) 21:17:35.42
それだと、途中に'\0'があったら乙るんじゃね
797デフォルトの名無しさん:2011/11/06(日) 21:29:43.37
792だが
解決したわ

サンクス
798デフォルトの名無しさん:2011/11/06(日) 22:57:17.34
空リストって何ですか?
799デフォルトの名無しさん:2011/11/06(日) 23:03:41.85
>>798
要素数が0のリストのこと
800デフォルトの名無しさん:2011/11/06(日) 23:25:56.76
linuxのgccで、マウントしたUSBのHDD(500G FAT32)に対して、
fp = fopen(wkFileName , "wb");
if(fp != NULL)
{
fwrite( buff, 1,1024, fp );
fclose(fp);
}

と、書き込むと、fcloseの処理に5分ほどかかります。
一度書き込みを行うと、それ以降は、
再びオープンして書き込んでも一瞬で書き込みは終了します。(PG落とすとまた5分・・・)

これはなぜでしょうか?
801デフォルトの名無しさん:2011/11/06(日) 23:36:54.07
マウントしたHDDはUSBのHDDです。
viでファイル書き込もうとして、固まりますね。。。
読むのは関係なしに即時行えるのですが、書くのはダメみたいです。

スレ違いみたいです。
すんまそん。
802デフォルトの名無しさん:2011/11/06(日) 23:39:22.76
IE8でJIS X3010の規格を読もうとしたら途中で回線が切れてエラーになるんだが
セキュリティきつくし過ぎておかしくなってないか?
803デフォルトの名無しさん:2011/11/06(日) 23:41:02.67
mazeって今週のプログラミング演習の課題に出てきた。
まさかD大生?
804デフォルトの名無しさん:2011/11/07(月) 06:37:55.11
>>802
JISのサイトの話なら、Adobe Readerを8以下に落とせば見られる。
805デフォルトの名無しさん:2011/11/07(月) 08:03:21.72
獨協ぐらいしか思い浮かばなかった
806デフォルトの名無しさん:2011/11/07(月) 08:09:32.28
Windows7用のAdobeReader8が無いな…
807デフォルトの名無しさん:2011/11/07(月) 08:20:46.66
電機大or電通大
808デフォルトの名無しさん:2011/11/07(月) 09:45:25.23
>>804
ありがとう
(; ・`д・´) ナ、ナンダッテー!! (`・д´・ ;)
どこまで腐ってるんだJISは・・・・
無料だから文句言えないか

ところでpdftkというフリーソフトを使うとゴニョゴニョ
809デフォルトの名無しさん:2011/11/07(月) 12:44:22.38
整数の入力を5回行いそれら整数の2乗値を表示するプログラムなんですが微妙に違うようですがわかりません
多分最初のforの中があやしいと思いますがどう間違えてるかわかりません
ttp://pita.st/n/ortv1279
810デフォルトの名無しさん:2011/11/07(月) 12:49:02.26
>>809
二つ目のforの中でi*iやってるけど
そこはseisu[i]*seisu[i]じゃねぇのか?
811デフォルトの名無しさん:2011/11/07(月) 15:26:12.64
Cのメインプログラムから、システムコールで、別プロセスを呼び出した場合、
呼び出し先の、プロセスの作りが悪いため、
メインプログラムがsignul 11で落ちるなんてことありますか?

しかも呼び出したプロセスはそのまま継続されるとかありますか?
812デフォルトの名無しさん:2011/11/07(月) 15:33:15.78
>>811
メインプログラムが悪い確率 99.9%
813デフォルトの名無しさん:2011/11/07(月) 16:51:51.69
メディアンフィルタを作っているのですが
3要素に限定した場合、ソートするよりも速いものがあれば教えてください。
814デフォルトの名無しさん:2011/11/07(月) 17:20:00.04
画像処理とかのスレの方が詳しいと思う
815デフォルトの名無しさん:2011/11/07(月) 17:45:19.05
>>813
これをマクロにしたようなものを使えば早くなるかもしれない

int median(int a, int b, int c)
{
if(a>b)
{
if(c>a) return a;
if(c>b) return c;
return b;
}
else
{
if(c>b) return b;
if(c>a) return c;
return a;
}
}
816デフォルトの名無しさん:2011/11/07(月) 17:57:00.21
Stolzmann 読み方教えて
817デフォルトの名無しさん:2011/11/07(月) 18:08:19.32
ストルツマン
英語圏ならストールマンでいいとおもう
818デフォルトの名無しさん:2011/11/07(月) 18:19:17.08
819デフォルトの名無しさん:2011/11/07(月) 20:56:54.00
if(strlen(a)>=2)
{
Y=0;
v=1;
for(i=0; i<strlen(a);i++)
{
v=v/(a[i]*(i+1));
for(j=0; v<1; j++)
{
v=v*10;
}
}
X=v*7000;
for(i=0; i<strlen(a);i++)
{
Y=Y+a[i]*i;
}

ハッシュ関数ですが、こんな感じでOKですか?
文字列に対するハッシュ。
820デフォルトの名無しさん:2011/11/07(月) 21:09:54.71
用途次第
821デフォルトの名無しさん:2011/11/07(月) 21:14:15.80
>>820
>>819のコードでやってること理解できますか?
822デフォルトの名無しさん:2011/11/07(月) 21:18:34.11
間抜けなことをやってるのは理解できる。
823デフォルトの名無しさん:2011/11/07(月) 21:49:08.79
>>822
例えば?かなり良くないですか?
824デフォルトの名無しさん:2011/11/07(月) 21:58:46.55
関数としての体裁を整えた方がよくない?
825デフォルトの名無しさん:2011/11/07(月) 22:01:04.20
どれが結果なのかわからん。
XとY?
826デフォルトの名無しさん:2011/11/07(月) 22:08:47.23
forの判定部に関数入れんな
827デフォルトの名無しさん:2011/11/07(月) 22:13:55.23
>>823
うん、かなり良くないね。
828デフォルトの名無しさん:2011/11/07(月) 22:20:01.85
全部書きました・・・もっと良い方法ありますかね?

int X;
if(strlen(a)>=2)
{
Y=0;v=1;
for(i=0; i<strlen(a);i++)
{
v=v/(a[i]*(i+1));
for(j=0; v<1; j++)
{v=v*10;}}
X=v*7000;
for(i=0; i<strlen(a);i++)
{Y=Y+a[i]*i;}
j=0;
if(heap[X].x==0){heap[X].x=X; heap[X].y=Y; tangosu++;}
else if(heap[X].x!=0)
{while(!(heap[X+j].x==X&&heap[X+j].y==Y)){
if(heap[X+j].x==X&&heap[X+j].y==Y)break;
if(heap[X+j].x==0){heap[X+j].x=X;heap[X+j].y=Y;tangosu++;break;}
j++;}}}
829デフォルトの名無しさん:2011/11/07(月) 22:29:32.23
vがintなら無限ループ
830デフォルトの名無しさん:2011/11/07(月) 22:36:53.65
>>829
double ですよ。

X,Yはint
831デフォルトの名無しさん:2011/11/07(月) 22:38:02.50
>>829
intだよ
832デフォルトの名無しさん:2011/11/07(月) 22:49:11.11
>>828
最高のハッシュ関数だよ。
833デフォルトの名無しさん:2011/11/08(火) 00:13:37.68
今ポインタを勉強してるんですが、
配列名は代入式の右側にあるときは先頭の要素のアドレスと見なされるが、
左側にいるときはそうではないということで合っているでしょうか?
834デフォルトの名無しさん:2011/11/08(火) 00:24:34.65
みなされるけど、左辺値になれない、だったと思う。
835デフォルトの名無しさん:2011/11/08(火) 00:25:58.40
あってません。
配列は単にポインタに減衰するだけです。
そして配列名は定数なので左辺値になれません。
836デフォルトの名無しさん:2011/11/08(火) 00:55:27.29
げん‐すい 【減衰】 [名](スル)しだいに減っていくこと。

???
837デフォルトの名無しさん:2011/11/08(火) 01:05:45.04
>>833
式中で配列名は、次を例外として「配列の先頭要素を指すポインタ」に変換される。
・sizeofのオペランド
・&のオペランド
char配列に対する初期化子の文字列リテラルも例外

配列名は代入できない左辺値。
→正確に言うと代入可能な左辺値に配列名は含まれない。
838813:2011/11/08(火) 08:28:42.19
>>815 ありがとうございます。
やはり単純な比較になってしまうようですね。
画像処理スレで聞いてきたいと思います。
839813:2011/11/08(火) 08:36:11.86
画像処理 その13の251で質問してきたので
こちらは〆させていただきます。
840813:2011/11/08(火) 11:27:06.52
はい。
841デフォルトの名無しさん:2011/11/08(火) 15:24:41.22
質問させて下さい
ある整数があるときそれを一つ上の一番近い2の乗数にしたいのですがいい方法はありますか?
シフト演算子で一つ増やして上位ビット以外を0にすればいいんでしょうがうまい方法がよくわかりません

例 3→4   33→64  128→128
842デフォルトの名無しさん:2011/11/08(火) 15:47:41.67
>>841
int hoge(int n)
{
int ret;

for(ret=1;ret<n;ret<<=1)
;
return ret;
}
843デフォルトの名無しさん:2011/11/08(火) 16:08:25.75
>>842
ありがとうございます。複雑に考えすぎてました
844デフォルトの名無しさん:2011/11/08(火) 16:59:27.23
845デフォルトの名無しさん:2011/11/09(水) 03:17:03.69
なるほど分かりやすい
846デフォルトの名無しさん:2011/11/09(水) 17:18:17.26
確保された領域を一括に開放できるall free関数みたいなものってとかありますか?
自作したら引数いっぱいでごちゃごちゃします。
847デフォルトの名無しさん:2011/11/09(水) 17:33:09.46
>>846
exit()
848デフォルトの名無しさん:2011/11/09(水) 18:08:46.11
確保したポインタを保持してて、それらをすべて開放するall free関数を作ればいいのでは
849デフォルトの名無しさん:2011/11/09(水) 18:34:06.30
ガベコレでおk
850デフォルトの名無しさん:2011/11/09(水) 18:37:04.84
>>849
ガベージコレクション(笑)
851デフォルトの名無しさん:2011/11/09(水) 18:43:19.98
ガベージコレクションなんていらないよってことなのかな
852デフォルトの名無しさん:2011/11/09(水) 18:48:02.15
ガベコレは甘え
853デフォルトの名無しさん:2011/11/09(水) 19:10:46.06
Cは甘え
854デフォルトの名無しさん:2011/11/09(水) 19:23:41.10
確保された領域を開放すると、何かいいことありますか?
855デフォルトの名無しさん:2011/11/09(水) 19:23:56.86
>>846
そういう必要が生じたのなら、設計を見直すべき。
基本的に、malloc() や free() ってのは、
あっちこっちで気まぐれにホイホイ呼ぶような処理じゃない。
856デフォルトの名無しさん:2011/11/09(水) 19:46:47.32
>>854
いいことがあるというより、しないと悪いこと(メモリが足りなくなる)が起きるので
それを回避するために開放しなければならない。
857デフォルトの名無しさん:2011/11/09(水) 20:41:34.85
C++プログラマがメモリ空間の断片化を、OSやランタイム関数の
せいにして放置するのですけど、どうしたらいいですか?
858デフォルトの名無しさん:2011/11/09(水) 20:47:17.29
プログラマのガベージコレクション
859デフォルトの名無しさん:2011/11/09(水) 20:47:36.53
>>857
その断片化で何か不都合が起きてるの?
860デフォルトの名無しさん:2011/11/09(水) 21:20:40.32
断片化がおきるような確保を行わないようにすればいい
861デフォルトの名無しさん:2011/11/09(水) 21:21:32.04
>>859
857がハゲる
862デフォルトの名無しさん:2011/11/09(水) 21:36:38.32
パフォーマンスに影響が出る程の断片化起こす実用コードを書く様な辛抱強いマは実際のところもう絶滅したんじゃないかな
863デフォルトの名無しさん:2011/11/09(水) 21:54:03.31
>>857は単にそういうことを言ってみたいだけだと見たが
864デフォルトの名無しさん:2011/11/09(水) 22:00:24.23
断片化を1バイトも起きないように絶対根絶しなければならないというのは、
長時間連続運転するサーバーとか、いろんな用途で使われるライブラリとか、
特別な用途に限られるんじゃないの。
865デフォルトの名無しさん:2011/11/09(水) 22:06:53.08
断片化がおきてはいけないのではなく、断片化が進むのが良くないんだよ
866デフォルトの名無しさん:2011/11/09(水) 22:16:19.06
だからさ、
>長時間連続運転するサーバーとか、いろんな用途で使われるライブラリとか
以外の、コマンドラインツールとか、毎日再起動するサーバーとかでは、
想定用途の範囲で問題になるほど断片化が進まなければ、
必ずしも絶対根絶しなきゃいけないってわけじゃないんじゃないの?って話。
867デフォルトの名無しさん:2011/11/09(水) 22:18:01.82
毎朝再起動しないと停止するサーバーなんて、怖くて使えないわ
868デフォルトの名無しさん:2011/11/09(水) 22:19:35.75
どこかの図書館の話ですか?
869デフォルトの名無しさん:2011/11/09(水) 22:20:05.22
WindowsNTのことですか?
わかります。
870デフォルトの名無しさん:2011/11/09(水) 22:22:17.97
スレ違いになってきてるが、
ある程度の規模なら、再起動がどうとかよりも
まず、いつコンデンサが火を噴いてもいいように構成するのが当たり前で、
そのように構成されていれば、再起動なんていつでもできる
871デフォルトの名無しさん:2011/11/09(水) 22:24:11.68
確かにそうだね。
でも、別に再起動しないと停止するわけじゃないけど、
毎日再起動する運用になってるサーバなんていくらでもあるだろ。
872デフォルトの名無しさん:2011/11/09(水) 22:26:07.05
急に人が湧いてびびった。
>>871>>867 宛てね。
873デフォルトの名無しさん:2011/11/09(水) 22:26:11.74
普通サーバーって放置してて誰も気にしない物だと思ってた。
874デフォルトの名無しさん:2011/11/09(水) 22:31:22.00
>想定用途の範囲で問題になるほど断片化が進まなければ、
>必ずしも絶対根絶しなきゃいけないってわけじゃないんじゃないの?

って発想が、メモリ断片化を気にしないプログラマが育つ苗床になってる予感
875デフォルトの名無しさん:2011/11/09(水) 22:46:08.37
そうかな。

メモリ断片化を気にしない人は、
>想定用途の範囲で問題になるほど断片化が進まなければ、
なんてことは考えないよ。
876デフォルトの名無しさん:2011/11/09(水) 23:05:13.17
断片化防止にコストかけるよりメモリ倍積んだ方が楽じゃね?
倍くらいあれば断片化してもどうにかなるだろ
877デフォルトの名無しさん:2011/11/09(水) 23:07:40.06
そういう話じゃないですし…
878デフォルトの名無しさん:2011/11/09(水) 23:13:10.16
まあ、
>>857
の質問意図が、「プログラマに断片化を放置せずに解決するようにさせるにはどうしたらいいですか?」
という意味なら、答えは簡単だ。
PM がタスクの優先順位を変えて、溜まってるユーザからの機能追加とかの要求とかを
全部棚上げして、断片化の解決を最優先でやれ、と指示すればいい。
もう、マ板の話題だな。
879デフォルトの名無しさん:2011/11/09(水) 23:16:03.20
プロジェクト内の人がどんどん断片化していくのですが
どう解決したらよいですか?
880デフォルトの名無しさん:2011/11/09(水) 23:21:23.40
デフラグさんの人形を近くに置いて様子を見る
881デフォルトの名無しさん:2011/11/09(水) 23:22:52.80
要するにalloc系を使わなきゃいいんだろ!
882デフォルトの名無しさん:2011/11/09(水) 23:36:54.67
BUFSIZE 80
char buf[BUFSIZE]
fgets(buf, BUFSIZE, stdin)
で取得した文字列の先頭のアドレスをほかの関数に受け渡す方法がわかりません。
具体例を示していただけると助かります。
ご指南お願いします。
883デフォルトの名無しさん:2011/11/09(水) 23:41:03.46
>>881
そこかしこでallocator使われるのに(コンテナ、文字列、etc…)どうすりゃいいの?/(^o^)\
884デフォルトの名無しさん:2011/11/09(水) 23:44:08.68
スタックなどは固定確保と解釈するとして、動的確保しなけりゃ問題無いんだろ
885デフォルトの名無しさん:2011/11/09(水) 23:48:14.38
std::allocatorは動的確保だよ^^;
vectorもstringも動的確保だよ^^;;;
886デフォルトの名無しさん:2011/11/09(水) 23:50:34.28
>>882
例えば、puts(buf);とでもすればputs()にbufを渡せる。
887デフォルトの名無しさん:2011/11/09(水) 23:51:36.43
渡せるね
888デフォルトの名無しさん:2011/11/09(水) 23:51:52.87
>>885
今のC言語ってそんなものがあるのか
889デフォルトの名無しさん:2011/11/09(水) 23:54:15.12
>>857
問題だと認識していて放置さえしなきゃどうにかできるつもりでいるんなら
お前が解消しろよ。

そもそも解消する術をお前が知らないというのなら放置されてようがされてまいが
結果は同じなんだろ。
890デフォルトの名無しさん:2011/11/09(水) 23:54:59.87
>>846
それと同じのがオーダリングテーブルの実装で必要になったから考えたことあるわ。
あらかじめmallocで巨大なメモリーを確保しといて、そこから自作mallocでアドレスを配布してくだけ。
この自作mallocは非常に単純な作りで、単に配列のシークアドレス(初期状態は先頭アドレス)を返し、シークアドレスを確保分だけすすめるだけ。
個別のfreeは存在しない。
全体のメモリーの開放は、単にシークアドレスを先頭に戻すだけ。

これで次からは再び、自作mallocで、この領域を先頭から再利用できる。
891デフォルトの名無しさん:2011/11/09(水) 23:57:08.42
892デフォルトの名無しさん:2011/11/10(木) 00:42:13.82
高級言語使うな。
全部アセンブラでやれ。
893デフォルトの名無しさん:2011/11/10(木) 01:01:20.05
ボスがアセンブラでやれっていってるだろ
894デフォルトの名無しさん:2011/11/10(木) 01:03:12.59
アセンブラやれば富豪的プログラミングが改善されるかと思ったらそうでもなかった
895デフォルトの名無しさん:2011/11/10(木) 01:04:56.94
結局のところ、アセンブラに落ち着くんだよな。
GoogleだってAndroidやChromeのカーネルの部分はアセンブラで組んでるし
896デフォルトの名無しさん:2011/11/10(木) 01:06:58.99
オブジェクト指向のように、哲学だったものが宗教になると嫌だな
897デフォルトの名無しさん:2011/11/10(木) 02:19:21.15
高級か低級かで言えばCはもちろん低級言語。
これ豆な。
898デフォルトの名無しさん:2011/11/10(木) 02:21:44.15
Chromeのカーネルってなんだ??
899デフォルトの名無しさん:2011/11/10(木) 02:35:16.14
しいていえばWebKitか、ってそういうボケでよろしかったしょうか
900デフォルトの名無しさん:2011/11/10(木) 02:36:18.17
>>894
アセンブラでもピザデブ的プログラミングはできるが? 要はやってる奴の根性でしかない
901デフォルトの名無しさん:2011/11/10(木) 09:01:41.99
>>892
UNIX では、メモリ関係のシステムコールを含め、OSがほとんどCで書かれてるから、
この問題に関する限りそれは意味ないぞ。
(Cコンパイラもライブラリも大部分Cで書かれてるはず)
902デフォルトの名無しさん:2011/11/10(木) 11:54:10.53
>>901
まさかCで書かないとシステムコールを呼べないとか思ってないだろうなw
903デフォルトの名無しさん:2011/11/10(木) 12:23:19.73
>>902
というか、 >>901 の内容からそういう疑問が出てくる
キミの脳の健康が心配だ。
904デフォルトの名無しさん:2011/11/10(木) 12:23:46.65
システムコールがCで実装されてるって話だろうに
905デフォルトの名無しさん:2011/11/10(木) 13:42:28.06
OSがクソってことだろ。
906デフォルトの名無しさん:2011/11/10(木) 13:54:22.05
>>902
一番の問題は、マニュアルを C ベースで書かれてしまうこと
アセンブラ使いにとっては頭の中でコンパイルしながら読まされるのがつらい
907デフォルトの名無しさん:2011/11/10(木) 14:02:08.39
>>906
それがつらいレベルでアセンブラ使いとかw
908デフォルトの名無しさん:2011/11/10(木) 14:18:43.15
INT 21H
909デフォルトの名無しさん:2011/11/10(木) 14:29:12.28
NMI
910デフォルトの名無しさん:2011/11/10(木) 14:57:40.58
c言語は時代遅れだって千早ちゃんが言ってた
911デフォルトの名無しさん:2011/11/10(木) 15:24:33.94
つ肉体言語
912デフォルトの名無しさん:2011/11/10(木) 16:50:12.51
>>907
けっこうトリビアがびしばし出るんだが、知らずに済んでるお幸せな方はいいね
913デフォルトの名無しさん:2011/11/10(木) 17:14:23.84
くだらねぇ。
914デフォルトの名無しさん:2011/11/10(木) 17:19:59.30
http://ideone.com/ZMoyx

こういう事ってできないんですか?
915デフォルトの名無しさん:2011/11/10(木) 17:23:20.85
>>914
できるよ
916デフォルトの名無しさん:2011/11/10(木) 17:29:51.26
>>915
やり方を教えていただけませんか?
917デフォルトの名無しさん:2011/11/10(木) 17:36:08.51
>>916
& とか * とか追加すればいいよ
918デフォルトの名無しさん:2011/11/10(木) 17:45:18.18
void allocate(int n, int **hoge, double **hoged);
allocate(n,&hoge,&hoged);
void allocate(int n, int **hoge, double **hoged)
{
printf("error1\n");
*hoge = malloc(sizeof(int)*n);
*hoged = malloc(sizeof(double)*n);
printf("error2\n");
}
919デフォルトの名無しさん:2011/11/10(木) 17:58:56.17
思うんだがC言語で将棋のソフト開発すればめちゃくちゃ早いんじゃないか?
920デフォルトの名無しさん:2011/11/10(木) 18:00:54.92
100万個のランダム実数Cでソートしたら10秒だったww
将棋の筋読みCでやると高速だろww
921デフォルトの名無しさん:2011/11/10(木) 18:03:46.39
wikiにコンパイル言語としては決して高速ではないって書いてあった
922デフォルトの名無しさん:2011/11/10(木) 18:06:00.59
釣れますか?
923デフォルトの名無しさん:2011/11/10(木) 18:11:13.36
そんなことはないだろう
924デフォルトの名無しさん:2011/11/10(木) 18:34:52.86
>>921
それは、吐いたコードの速度ではなく、コンパイル速度では?
コンパイル速度はpascalの足元にも及ばない
925デフォルトの名無しさん:2011/11/10(木) 18:37:12.57
>>921
Wikipediaな。
926デフォルトの名無しさん:2011/11/10(木) 18:40:17.01
>>925
こいつは何が言いたいの?
927デフォルトの名無しさん:2011/11/10(木) 18:43:04.54
>>921
美wiki。な
928デフォルトの名無しさん:2011/11/10(木) 18:47:29.20
えへっ
929デフォルトの名無しさん:2011/11/10(木) 18:49:47.56
コンパイル速度って、重要?
930デフォルトの名無しさん:2011/11/10(木) 18:50:08.67
http://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E
+-----
| また、コーディング上の“自由度”が非常に高い。
| そのため良くも悪くも“何でも出来てしまう”パワフルさは多くのプログラマの支持を集める一方で、
| セキュリティー脆弱性や潜んだバグによる想定外の動作、
| コンパイラによる最適化の難しさ(そのためCはコンパイラ言語として決して高速ではない)といった欠点の原因ともなっている。

ですって。
931デフォルトの名無しさん:2011/11/10(木) 18:59:25.88
932デフォルトの名無しさん:2011/11/10(木) 19:04:33.16
>>929
Includeとかを注意すれば防げるものが多いけど、C++などで油断するとコンパイルに数分かかることもある。
933デフォルトの名無しさん:2011/11/10(木) 19:08:24.11
>>929
今どきのCPUならそんなに重要じゃないな
C++になると糞遅くなるのでLLに逃げたい気持ちも分からなくはない
934デフォルトの名無しさん:2011/11/10(木) 19:11:15.55
LLで書いて、C、C++ソースを出力するのも有るね。
935デフォルトの名無しさん:2011/11/10(木) 19:17:27.28
char str[] = "Hello!\n";
って宣言して、

printf("Hello!\n");
printf("&s",str);
printf(str);

の三つの出力を確認したら、三つとも
Hello!

って出力されたんだですけど、この三つの結果を、類推される
printf関数の処理の流れに基づいて説明せよ
ってのを教えて下さい。
936デフォルトの名無しさん:2011/11/10(木) 19:18:15.46
>>930
裏を返せば、最適化しやすい書き方もできる訳で・・・
構造体のメンバの順番変えるだけでメモリ節約とか
937デフォルトの名無しさん:2011/11/10(木) 19:18:49.84
>>935
printf は
Hello!
を出力する関数である
938デフォルトの名無しさん:2011/11/10(木) 19:20:07.33
>>934
LLじゃ無くても、Cとアセンブラのソース吐ける言語処理系は多いよ
Haskellも吐けるし、Delphiも確か吐けた
939デフォルトの名無しさん:2011/11/10(木) 19:20:31.50
コンパイル速度重要だろ。

アプリケーションソフト起動するときに、1分くらいかかるとやる気失せるだろ。
940デフォルトの名無しさん:2011/11/10(木) 19:22:46.21
>>935
2番目は”&s”って出力されるだろ
どうせ%sの打ち間違いだろうけど
941デフォルトの名無しさん:2011/11/10(木) 19:25:04.91
>>939
C++コンパイラならともかく、Cコンパイラは気にするほど遅く感じない
Cのコードの拡張子を.cと.cppで比較してみれ
942デフォルトの名無しさん:2011/11/10(木) 19:25:39.95
>>935
>printf("&s",str);

何したいか、教えて
943デフォルトの名無しさん:2011/11/10(木) 19:28:02.45
>>940
%sもまずいだろw 半角%sにしなきゃ

引数の一番目が文字列で渡されてるとかそんなとこじゃね?
944デフォルトの名無しさん:2011/11/10(木) 19:29:08.40
分割コンパイル形式の実行形式だと膨大な時間かかるとかありますかね?
945デフォルトの名無しさん:2011/11/10(木) 19:31:01.42
>>935
すいません、二番目は
printf("%s",str);
です
946デフォルトの名無しさん:2011/11/10(木) 19:34:59.17
>>943
知ってるよw
細けーこた良いんだよwww
947デフォルトの名無しさん:2011/11/10(木) 19:36:11.34
>>944
一回目は結構待たされる。
二回目以降は変更したファイルのみコンパイルされるから、あまり待たないで済む
948デフォルトの名無しさん:2011/11/10(木) 19:38:45.61
注:gccは知らん。make使え。
VCなら、ビルドでmakeとCコンパイラ、隣家の仕事をまとめてやってくれる。
949デフォルトの名無しさん:2011/11/10(木) 19:52:57.43
しかし、今時コンパイルが遅いのを気にするっておまいらどんだけでかいプロジェクト
まわしてるんだよ。
確かに数100万行クラスになると工夫しても最初とか数十分かかることもあってやって
られないとは思うが。
950デフォルトの名無しさん:2011/11/10(木) 20:02:57.79
>>949
VCでMFC使うと普通に最初は5分近く待たされるがな…
ただウィンドウ表示するだけのアプリで・・・
Core i5でだぞ・・・
951デフォルトの名無しさん:2011/11/10(木) 20:07:42.17
各種ライブラリーのビルドからやると素人のアプリでも最適化フルでかけてすごく時間かかるようになるよ
自分のプログラムの部分だけの最適化だとすばやいけど
952デフォルトの名無しさん:2011/11/10(木) 20:10:54.08
すばやいけどね
953デフォルトの名無しさん:2011/11/10(木) 20:47:35.86
UNIX系のdlopen, dlsym等を見て思ったのですが,
dylibが対象ではなく現在の実行プロセスに含まれる関数を,文字列から取得することはできないのでしょうか?
実行時に動的に呼び出す関数を変更したいため必要なのですが……
954デフォルトの名無しさん:2011/11/10(木) 20:54:53.23
>>953
名前で索引付けしたテーブルを持ってればいいじゃん。
955953:2011/11/10(木) 21:21:50.28
>>954
関数のアドレスが未知の状態からの探索なので,それではちょっと…….

とりあえず解決しました.お騒がせして申し訳ない
956デフォルトの名無しさん:2011/11/10(木) 21:31:08.20
>>953
DLLとかsoとかならできるよ
957デフォルトの名無しさん:2011/11/10(木) 21:31:25.54
>>950
まじか。最近VCは使ってないがそんなことはなかったと思うが。
ひょっとしてMFCもソースからコンパイルになってたりするのか?
それならまぁわかる。MFCでかいから。
958 忍法帖【Lv=2,xxxP】 :2011/11/10(木) 21:35:54.91
すいません。
c++でBMIの計算プログラムを作っているのですがcの値がおかしくなってしまいます。
どこが悪いのでしょうか?

#include<stdio.h>

int a;
int b;
int c;
int d;
int e;

int main(void){
while(1){
printf("BMI計算\n");
printf("体重を入力ください。\n");
scanf("%d",&a);
printf("身長を入力ください。\n");
scanf("%d",&b);

c=(a/(b*b))*10000;


printf("あなたのBMIは%.1fです。\n",c);
if(c<18.5)
{

printf("あなたは痩せ気味です。\n");

}else if(c>=18.5 && c<25)
959 忍法帖【Lv=2,xxxP】 :2011/11/10(木) 21:37:17.71
>>958
続き
{

printf("あなたは標準体重です。\n");

}else if(c>=25 && c<30)
{

printf("あなたは若干太り気味です。\n");

}else if(c>=30 && c<40)
{
printf("あなたは太りすぎかもしれません。\n");

}else if(c>=40)
{

printf("ジャンボすぎる体型ですねww\n");

}
printf("もう一度やりたい場合は1を押してください。\n");
scanf_s("%d",&d);
if(d!=1)
{
break;
}
}
printf("お疲れ様でした。\n");
getchar();
getchar();
}
960デフォルトの名無しさん:2011/11/10(木) 21:37:38.87
そりゃintだからな
961デフォルトの名無しさん:2011/11/10(木) 21:38:47.37
>>957
マジ。
自分も最初使ったとき、ウィザードが作ったコードを編集しないで実行で、こんなに待たされると思ってなかったw
962デフォルトの名無しさん:2011/11/10(木) 21:53:21.82
makeのことの初歩的な質問ここでいい?
オブジェクトファイルをTPPっていうディレクトリに出したいんだけど
TPP/%.o : %.c
hogehoge
ってやればいいって書いてあったんですがカレントディレクトリにオブジェクトファイルができます。どうすればいいですか?
963デフォルトの名無しさん:2011/11/10(木) 21:57:13.66
hogehogeって何してる?
964デフォルトの名無しさん:2011/11/10(木) 21:58:13.18
>>962
-o $@
を使う
965デフォルトの名無しさん:2011/11/10(木) 22:04:51.48
>>963
例えば  ${CC} -c $<
みたいな感じです
966デフォルトの名無しさん:2011/11/10(木) 22:07:02.42
>>964
明示的に-o で出力ファイル名指定してないといけないってことですか?
967デフォルトの名無しさん:2011/11/10(木) 22:10:45.78
makeはターゲット知ってるけど、
コンパイラにも教えてあげないと
968962:2011/11/10(木) 22:12:41.73
ありがとうございました
969 忍法帖【Lv=2,xxxP】 :2011/11/10(木) 22:13:38.42
>>959
この件ですが無事に解決しました
970デフォルトの名無しさん:2011/11/10(木) 22:54:03.58
次スレ立てます
971デフォルトの名無しさん:2011/11/10(木) 22:55:19.88
次スレ立てました
C言語なら俺に聞け(入門編)Part 92
http://hibari.2ch.net/test/read.cgi/tech/1320933306/
972デフォルトの名無しさん:2011/11/10(木) 23:39:23.23
>>971

973デフォルトの名無しさん:2011/11/11(金) 00:12:32.37
>>930
gcc の最適化が甘いのはそんな理由じゃないんだけどね
974デフォルトの名無しさん:2011/11/11(金) 00:16:22.90
コンパイル速度をどうでもいいみたいに言ってるやつ頭蛆わいてるな
時代時代の目一杯のスペックでも全然足りないのにさ

今日もサンディの 4.5G にキレたし
975デフォルトの名無しさん:2011/11/11(金) 00:19:17.34
>>930
Cより最適化しやすい言語ってのが何なのか気になるな…
理論的には高速化しにくいx86が金に物言わせて現実には逆転してるのと同じで、金に物言わせたIntel Cコンパイラが最適化で勝ってるとか、そんな落ちが有りそうな気もするが
976デフォルトの名無しさん:2011/11/11(金) 00:19:22.69
昔はコンパイルしてる間にコーヒー入れてもまだ終わってなかったっておっちゃんの先生が言ってた
今でもFPGAのコンパイルは3時間くらいかかるからCのコンパイル時間に文句言うなよ
977デフォルトの名無しさん:2011/11/11(金) 00:36:31.50
>>975
あくまで理屈上だが、コンパイルフェーズについては、Cより例えばJavaのほうが最適化し易い。
と書くと、トランスレート、コンパイル、インタープリトを区別してない者からツッコミ来るな。
ここで注意が必要なのは、「JavaソースからJVM用コードへのコンパイル」と
「CソースからCPUコードへのコンパイル」との比較だという事。
JVM実装の性能とか、C特有のテクニックを駆使したコードの利点とかを含んでいない。
978デフォルトの名無しさん:2011/11/11(金) 00:53:26.61
>>975
特にCではポインタが何を指してるのかの解析が
非常に難しいので、Intel C++とかでも
適切なプラグマやコンパイルオプションを組み合わせないと性能が出ないとか、
そういったケースはある
979デフォルトの名無しさん:2011/11/11(金) 00:54:51.14
>>976
うん、ハード屋の忍耐力には脱帽するわ。
いい加減な性格なのでハード屋は無理。趣味だけにしとくw
>>977
そりゃポインタもなければそうだろうさ。
980デフォルトの名無しさん:2011/11/11(金) 01:12:45.26
ぽちっとリビルドしてホっと一息つくもんだろう
ネットワーク分散コンパイルなんか進行状況がグラフで出て前世紀のデフラグをぼーっと見てる感覚に浸れる
981デフォルトの名無しさん:2011/11/11(金) 01:49:05.60
低級言語ゆえに最適化が難しいって事なんじゃないかな。
最低級のアセンブリ言語を最適化するのって難しそうじゃんw
982デフォルトの名無しさん:2011/11/11(金) 01:55:49.25
ハードへの密着度が大きいところ迄、ブログラマが記述可能。

→コンパイラの守備範囲が広い

→ 多様なケースを満遍なく最適化するのが難しい

だと思う。
983デフォルトの名無しさん:2011/11/11(金) 02:00:46.02
あと、CPU・周辺チップの進化方向と一心同体なので、ハード開発工程に影響されるのもあるか。
実態はCPUの方も、Cに合わせて来た部分もあるけどね。
984デフォルトの名無しさん:2011/11/11(金) 02:30:50.88
よく言われるのはC++のstd::sortとCのqsortではC++の方がうんと速い。
FORTRANのfor文とCのfor文ではFORTRANの方がずっと並列化しやすい。
などなど。Cは最適なコードをプログラマが書けるものと推定する。
985デフォルトの名無しさん:2011/11/11(金) 02:51:45.91
>>983
C Processing Unit と言われかねない。
986 ◆QZaw55cn4c :2011/11/11(金) 03:05:07.21
>>983
>実態はCPUの方も、Cに合わせて来た部分もあるけどね。

そんな事実はないと思うのですが。80x86系では、どの部分が「Cにあわせてきた」のでしょうか?
987デフォルトの名無しさん:2011/11/11(金) 03:06:15.17
μOP化だろ。そんなこともわからんのか。
988 ◆QZaw55cn4c :2011/11/11(金) 03:10:47.39
>>987
μOP は主にCPU 内のパイプラインのためでは?どこが C言語と関係あるんです?
989デフォルトの名無しさん:2011/11/11(金) 03:11:37.61
>>986
おまえさ、コテ外せよ
こんなに長いあいだスレにいてそのレベルだと思うと嫌悪感が先に出て
答える気がしなくなるからさ。

名無しなら、まだ初心者かもしれないと思うからまともなレスがつくと思うぞ。
990デフォルトの名無しさん:2011/11/11(金) 03:14:35.63
>>989
μOP は主にCPU 内のパイプラインのためでは?どこが C言語と関係あるんです?
991 ◆QZaw55cn4c :2011/11/11(金) 03:14:37.12
>>989
ほう、>>986 に反論する能力がなく、>>983 は大間違い、と認めるのですね。
992 ◆QZaw55cn4c :2011/11/11(金) 03:16:15.19
>>989
>実態はCPUの方も、Cに合わせて来た部分もあるけどね。
こんな事実は金輪際ありません。霧
993デフォルトの名無しさん:2011/11/11(金) 03:16:19.78
コテ外せよ
994デフォルトの名無しさん:2011/11/11(金) 03:16:35.20
こいつ、無知なくせに最近やたら上から目線で言うようになったな。
ここあんまり長くないんだけど前から?
いや、知ってる人答えなくてもいいよ。レスが無駄だから。
まぁもうすぐ1000だからどっちでもいいけど。
995デフォルトの名無しさん:2011/11/11(金) 03:17:47.96
いや、別人だし
妄想癖でもあるのか?
996デフォルトの名無しさん:2011/11/11(金) 03:18:55.12
>>983
>実態はCPUの方も、Cに合わせて来た部分もあるけどね。

そんな事実はないと思うのですが。80x86系では、どの部分が「Cにあわせてきた」のでしょうか?
997デフォルトの名無しさん:2011/11/11(金) 03:22:43.80
86系は知らんけどRISCブーム以降のアーキテクチャはけっこうCコンパイラを意識してるよね。
998 ◆QZaw55cn4c :2011/11/11(金) 03:23:07.10
>>994
昔からそういわれていますが、なにか?

>>996
thanks
999デフォルトの名無しさん:2011/11/11(金) 03:24:20.49
>>998
別に?
1000 ◆QZaw55cn4c :2011/11/11(金) 03:24:52.64
>>997
うーん。RISC のやりかたは、CPU 内の様々なからくり(パイプラインとか投機実行とか)のためであって、C言語のため、という気はあまりしないのですが、でも少しは意識しているのかもしれませんね。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。