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

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

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
4 :デフォルトの名無しさん2011/04/17(日) 20:31:32.74
>>1乙
2 :デフォルトの名無しさん2011/04/17(日) 20:22:22.31
前スレ>>997
無理にstruct tmとidとpassに分解してソートするから遅いのかな
単純にstrcmpでやったら速いみたいです
3 :デフォルトの名無しさん2011/04/17(日) 20:23:56.50
>>2
日時、14桁の数値と見なせばそのままintに収まるんじゃない?
5 :デフォルトの名無しさん2011/04/17(日) 20:49:16.02
同じパソコンにおいて、CPUやメモリなどのパソコンの機器の部分を変えずに
書くプログラムだけを改良することによって格別に早いソートを作る事は可能
なのでしょうか?正しライブラリやソフトウェアは使っていいことにします。
12 :デフォルトの名無しさん2011/04/17(日) 21:36:52.09
>>5
無理
quick sort以上の速度を得ることはまず不可能
L2L3キャッシュの大きなCPUを使うと劇的にソート速度が向上する事があるが
それとこれとは話が別
6 :デフォルトの名無しさん2011/04/17(日) 21:00:12.75
前スレのソートの質問者だけどここまで発展するとは思いませんでした
8 :デフォルトの名無しさん2011/04/17(日) 21:24:38.02
>>6
ここの住人はこういうパズル的な要素を求めているんですよ

http://codepad.org/9mCtwD1V

馬鹿正直にstruct tmとmktime()を使ってtime_tでソートしましたが十分な速度です
11 :デフォルトの名無しさん2011/04/17(日) 21:35:35.06
>>8 pass2.txtの日付が全部1970-01-01<>08:59:59になるぞ
13 :デフォルトの名無しさん2011/04/17(日) 21:38:29.58
>>11
あれ?pass.txtの生成に次のプログラムを使っていますがどこかフォーマットが違いますか?

http://codepad.org/UhH1unQ9
15 :デフォルトの名無しさん2011/04/17(日) 21:49:26.26
>>13
まずそれgenrandがおかしいから生成できない
50c50
< return about + (int)(rand() / 32768. * width);
---
> return about + (int)(rand() % width);
genrandを直して生成したやつ食わせても同じ結果だな
16 :デフォルトの名無しさん2011/04/17(日) 21:53:58.66
>>15
おかしいなあうちの環境では動きますねえ(BCC6.3.1)
特に機種依存の場所もないし何が原因なんだろう?
日本語のコメントをしてるからかな?
17 :デフォルトの名無しさん2011/04/17(日) 22:03:10.98
これで頼むわ。


#include <stdio.h>
#define FILENAME "pass.txt"
#define MAXFILESIZE (1<<29)
#define BUFSIZE (1<<20)

unsigned int rand_xor() { static unsigned int t, x=123456789UL,y=362436069UL,z=521288629UL,w=88675123UL;t=x^(x<<11); x=y; y=z; z=w; return w^=(w>>19)^t^(t>>8); }

void strgen( char *str, int &sz ) {
unsigned int x,n;
for(n=0; n<32 + rand_xor()%128 ; n+=6) {
x=rand_xor();
str[sz+n+0]='0'+x%64; x>>=6; str[sz+n+1]='0'+x%64; x>>=6;
str[sz+n+2]='0'+x%64; x>>=6; str[sz+n+3]='0'+x%64; x>>=6;
str[sz+n+4]='0'+x%64; x>>=6; str[sz+n+5]='0'+x%64; }
sz+=n; str[sz-1]='\n'; }

int main() {
FILE *fp = fopen(FILENAME, "wb");
int sum=0;
char *buf = new char [BUFSIZE+1]; int sz=0;
do{
if( sz+1024 >= BUFSIZE ) { fwrite( &buf[0], 1, sz, fp); sum+=sz; sz=0; }
strgen( buf, sz ); }while(sum < MAXFILESIZE);
fwrite( &buf[0], 1, sz, fp);
fclose(fp); }
18 :デフォルトの名無しさん2011/04/17(日) 22:09:14.60
>>17
エラーが出てコンパイル出来ません

エラー E2293 pass4.c 8: ) が必要
19 :デフォルトの名無しさん2011/04/17(日) 22:09:52.91
>>16
うち(gcc version 4.3.4 20090804 (release) 1 (GCC))だとmktimeが-1を返してた
t.tm_isdst = -1;(サマータイムなし)を指定しておかないと動かないようだ
20 :デフォルトの名無しさん2011/04/17(日) 22:10:59.69
>>18
C++の機能使っているのでCPPの拡張子で。
21 :デフォルトの名無しさん2011/04/17(日) 22:14:59.91
>>19
了解です
それが原因だと思います
うちのgcc4.3.2(MinGW)ではサマータイムを指定しなくても動くので
MinGWとLinuxで違うのかもしれませんね

>>20
了解です
26 :デフォルトの名無しさん2011/04/17(日) 22:38:12.05
ちょっとビール買いに行っていました

>>17
コンパイルして実行してみたらえらくグチャグチャな内容のランダムなテキストが
生成されましたが、これは何に使うのですか?
30 :デフォルトの名無しさん2011/04/17(日) 22:50:14.88
>>26
ランダムな文字列で速いソートを作ろうという意図。
35 :デフォルトの名無しさん2011/04/17(日) 23:11:31.29
>>30
ああ了解です
じゃあプログラムを完璧に作り直す必要がありますね

Cと普通のstrdup()で確保した文字列のソートと、C++でvectorに突っ込んだ
stringをsortアルゴリズムでソートして比較したりいろいろ楽しめそうです

C++の場合もstringのポインタをunique_ptrに入れて突っ込んでソートした方が
速いでしょうね
36 :デフォルトの名無しさん2011/04/17(日) 23:22:20.38
>>35
なによりもまず500MBの入力の扱いを考えるのが最初だと思うんだが
41 :デフォルトの名無しさん2011/04/18(月) 07:07:40.17
>>16
http://hibari.2ch.net/test/read.cgi/tech/1301773320/967 だけど、
return about + (int)(rand() / (double)RAND_MAX * width);
こういうことがしたかったんじゃないの?
42 :デフォルトの名無しさん2011/04/18(月) 07:15:10.84
ああ、もちろん、>>15で必要十分です
46 :デフォルトの名無しさん2011/04/18(月) 10:47:45.43
>>41
ええそうです。だからわざと32768.と実数で割っているのです。
47 :デフォルトの名無しさん2011/04/18(月) 12:39:32.21
>>46
肝要なのは、なぜ32768なのかってところなんだが。
randの結果が1000000だった時どうなるかね。
48 :デフォルトの名無しさん2011/04/18(月) 12:43:27.64
>>47
済みません、間違いに気付き(double)RAND_MAXと直しました。
49 :デフォルトの名無しさん2011/04/18(月) 12:49:42.73
>>48
気づいた上で、>>15よりも優れている点は最下位ビットを使用することについての懸念から、ですかね。
51 :デフォルトの名無しさん2011/04/18(月) 12:54:28.60
>>17
これをいかに速くソートするか。読み込みから書き込み終了まで。

58 :デフォルトの名無しさん2011/04/18(月) 14:23:45.39
rand()を使うときは上位ビットをとるとか工夫しないで
rand()%nでいいんじゃないの?
最近の(とういうかだいぶ前から)処理系は下位ビットだから
極端に周期が短いとかないでしょ。
>>41 も本当は
return about + (int)(rand() / ((double)RAND_MAX+1) * width);
だろうし、変に工夫してバグってる例をよく見る。
62 :デフォルトの名無しさん2011/04/18(月) 14:30:10.27
>>59
なんでって、>>15の下と同じ挙動でいいんでしょ?
63 :デフォルトの名無しさん2011/04/18(月) 14:30:35.33
そもそも一様じゃない時点で>>15に劣る
64 :デフォルトの名無しさん2011/04/18(月) 14:32:53.23
>>62
day = genrand(1, 31);
hour = genrand(0, 23);
こう使われてるから関数の定義があいまいなんじゃないかな
79 :デフォルトの名無しさん2011/04/18(月) 16:09:11.45
>>51
ソート時間しか測定していませんが

http://codepad.org/tChlNi74

全部を測定するのは簡単に改造できると思います

C++で書くならvector+string+sortですがこれより確実に遅くなるでしょうね・・・・
一応やってみます
89 :デフォルトの名無しさん2011/04/18(月) 17:16:27.11
>>51
C++で書いてみたが入出力、stringが強烈に遅い(と言っても2倍程度)
sortは速いと思うんだけど

http://codepad.org/1VjGnrMM
97 :デフォルトの名無しさん2011/04/18(月) 23:29:26.63
>>51
C++でboost::shared_ptrで包んだcharの配列のポインタをソート
あまり速くならんわ
生のポインタでないとだめか

http://codepad.org/2w4vp7aF

つーかC++はいい加減にスレ違いだな
でもC++スレで続きをやるような内容でもないし
7 :デフォルトの名無しさん2011/04/17(日) 21:01:47.87
全部読んで文字列ソートで十分な速さだね
ttp://codepad.org/HXDyRNHA

$ ./makepass (前スレ965のgenrandを直したやつ)
$ time ./a pass.txt > sorted.txt

real 0m1.478s
user 0m1.279s
sys 0m0.125s

この順で実行すると、計測時はキャッシュ効いた状態?効いてない状態?
9 :デフォルトの名無しさん2011/04/17(日) 21:27:32.47
1ギガのテキストのソートことやる意味がある。
115 :デフォルトの名無しさん2011/04/19(火) 14:50:27.99
#define B4__(n) (((n)&7) + ((((n)>>3)&7)<<1)+ ((((n)>>6)&7)<<2)+ ((((n)>>9)&7)<<3))

#define Bit4(n) B4__(0##n)
#define Bit8_4(h,l) ((B4__(0##h) << 4) | B4__(0##l))
#define Bit16_4(hh,hl,lh,ll) ((Bit8_4(hh,hl) << 8) | Bit8_4(lh,ll))

OpenGLでラインパターン(点線とか)指定のときに
glLineStipple(1, Bit16_4(1111,1100,1100,1111));
こうできるので少しだけ直感的 (16進⇔2進 8進⇔2進 が即脳内でできるなら不要だろうけど)
14 :デフォルトの名無しさん2011/04/17(日) 21:41:33.35
使ってるハードウェア(CPUとかHDDとか)のキャッシュの仕様を熟知して
アセンブラチューニングみたいなことすれば
改善程度はできるんじゃない?格別にってのはどうか知らんけど
22 :デフォルトの名無しさん2011/04/17(日) 22:20:25.89
メモリについて教えてください。

例えば2Dスクロールゲームとかで
画面に映るステージの範囲って限られてますよね。
ドカンがあって、敵がいてみたいな。

では、画面に映ってないこれから進んでいく領域の情報はメモリに
保存されてるんですか?
23 :222011/04/17(日) 22:23:35.94
DirectXとC言語でゲーム作っています。

31 :デフォルトの名無しさん2011/04/17(日) 22:53:46.33
>>22
画面に映ってなくても少し先までの画面はすぐ表示できる状態でメモリに入れてる
少なくとも自分の知ってるNintendoDSのVRAMはそんなふうだった

>>23
環境というよりも、どういう実装をするかによるだけなんじゃないかな
24 :デフォルトの名無しさん2011/04/17(日) 22:29:07.10
映っている映ってないに関係なくステージ全体のマップをメモリに持っていて、
その中から映ってる分だけを画面に出します
25 :デフォルトの名無しさん2011/04/17(日) 22:34:32.12
>>24
それはひどい、そんなひどい作り方したらメモリがいくらあっても足りねーよ、ボケ。
27 :222011/04/17(日) 22:42:51.49
>>25
メモリに保存されてる情報ってゲームのある瞬間において、
どのくらいの範囲までなんでしょう。
それ以外はストリームを介したバッファ領域に保存されてるんですか?
それともHDD?
28 :デフォルトの名無しさん2011/04/17(日) 22:48:12.58
>>27
あのさ、プラットフォームが何かにもよるよね。
論理的に考えれば少なくともメモリに置いとくのは
キャラクタのいる画面とその周囲の画面分でいい事ぐらいわかるだろふつう。
(4画面一気に飛び越えたりとかしないかぎり。)
あとはロードにどんだけ時間がかかるかでどれだけ先読みするか決めりゃいいだけ。

ていうかスレ違いだから空気読んで。
29 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/17(日) 22:48:19.18
ステージ毎で問題あるの?
32 :デフォルトの名無しさん2011/04/17(日) 22:55:46.70
>>29
50000x2000 とか?
100Mピクセルだから
フルカラーとして 300MB か 400MB
メインメモリに乗せるなら大丈夫だね
33 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/17(日) 23:00:05.58
画面に描画する色情報ってことなの?
マップチップのIDとかのことだと思ったんだけど
34 :デフォルトの名無しさん2011/04/17(日) 23:10:43.17
ってことは、メモリの量は瞬間瞬間でリセットされるから、瞬間における
主人公の動作を快適にするのにメモリを使いまくっていいってことですか?
38 :デフォルトの名無しさん2011/04/17(日) 23:28:39.46
つかコード書いたファイルが1mbくらいあったんだがでかすぎワロタww
ソースコードだけで1mbってでかすぎないか?
39 : 忍法帖【Lv=13,xxxPT】 2011/04/18(月) 00:38:37.08
やれやれ、賑わっていると思ったら馬鹿自慢かよ。スレタイ位見てから馬鹿やれよな
43 : 忍法帖【Lv=14,xxxPT】 2011/04/18(月) 07:51:26.75
私が一番馬鹿でいいからこのスレでやるなってばさ。
それと、どうせやるなら測定条件をはっきりさせなきゃ意味ないじゃん囧
45 :デフォルトの名無しさん2011/04/18(月) 09:21:13.74
測定条件があいまいなのがいいんじゃないか
最初から古いPCとか、そこそこのマシンとかいう表現されてる時点でわかるだろ
50 :デフォルトの名無しさん2011/04/18(月) 12:51:05.52
で?ランダムなデータのリストを作りたいのか、それともリストをソートするプログラムを作りたいのかはっきりしろやw
52 :デフォルトの名無しさん2011/04/18(月) 13:47:57.91
巨大ファイルのソート方法。

行の先頭文字ごとに複数のファイルへ分類する。

それぞれのファイルをソートして連結すれば終わり。

各ファイルのサイズが均一になるように、サンプルを取って分割区間を決める。
53 :デフォルトの名無しさん2011/04/18(月) 14:07:17.87
>>52
それだと
2011-1-3〜
2011-1-6〜
2011-1-1〜
2011-1-2〜
2011-1-7〜
2011-1-5〜

で2011-1-2〜の箇所で半分に分かれた時
2011-1-1〜
2011-1-3〜
2011-1-6〜
2011-1-2〜
2011-1-5〜
2011-1-7〜
ってなっちゃうよ?

54 :デフォルトの名無しさん2011/04/18(月) 14:14:49.03
>>53
違うぞ。例えばファイル内容がこうだとしよう。

b****
c****
a****
b****
a****
c****
c****

そしたらファイルをよみつつ、ファイルa.dat、b.dat、c.datへ次のように書き出す。
a.dat
a****
a****

b.dat
b****
b****

c.dat
c****
c****
c****
55 :デフォルトの名無しさん2011/04/18(月) 14:17:42.90
.datだってよw馬鹿かこいつ。。.txtで充分だろうに。カッコばっかだな。
書き出すってこと自体アホそのものだからどうでもいいが。
57 :522011/04/18(月) 14:22:36.40
>>55
テキストのまま書き出すのはアホ。改行の区切り位置は、初めの読み込みで分かっている。
区切りを覚えておきつつ、データを圧縮して書き出せば、ロード時間が減らせるむ。
59 :デフォルトの名無しさん2011/04/18(月) 14:27:33.70
>>58
なんで1足すの?

>>55
汎用機は一時ファイルの山ぞ。
60 :デフォルトの名無しさん2011/04/18(月) 14:27:50.08
>>57
おまえアホだろ、バイナリデータだろうが.txtで書きだしゃいいんだよ。バカジャネーノ
68 :デフォルトの名無しさん2011/04/18(月) 15:02:54.37
>>55
まさかとは思うが拡張子とファイル編成が無関係なことくらい知ってるよな?
72 :デフォルトの名無しさん2011/04/18(月) 15:37:51.53
>>68
>>61=>>55
56 :522011/04/18(月) 14:19:43.82
書き込みバッファを用意すれば読み書きがシーケンシャルでプレのソートが行える。
工夫はどの区間で分類するか決める点。
メモリ上でソートするには、せいぜい30メガ程度に抑えた方がいい。各ファイルがその程度になるように分類。
大きすぎても、小さすぎても効率が落ちる。
61 :デフォルトの名無しさん2011/04/18(月) 14:29:59.80
拡張子がファイル形式を決めてると思ってるアホがいるな
65 :522011/04/18(月) 14:34:05.62

http://fallabs.com/mikio/tech/promenade.cgi?id=89
特筆すべきは二点で、一点目はLZOは半分以下に圧縮しているにもかかわらず
ほとんど時間的オーバーヘッドがかかっていないこと。
二点目はLZMAの圧縮処理は多大な時間的オーバーヘッドがかかっているが、
10分の1にまで圧縮できるということ。ZLIBはそれらの中間的な特性を示す。

http://alpha.mixi.co.jp/blog/?p=191
圧縮をするとしないとではデータベースのサイズが全然違うということはおわかりいただけると思います。
ZLIBだと43.7%、BZIP2だと39.1%、LZMAだと37.5%に圧縮できているわけです。
Deflateだと更新処理は195%の時間がかかりますが、検索処理は138%で済んでいます。
BZIPやLZMAはそれよりも空間効率重視だということがわかります。
LZMAはBZIP2より圧縮率が高く、探索もBZIP2よりも高速であることが確かめられました。
逆にLZOは空間効率はそれほど向上しませんが、更新処理は121%、検索処理は114%の時間で済むことが確かめられました。
66 :デフォルトの名無しさん2011/04/18(月) 14:35:00.52
>>65
脂汗が出てるゾ
67 :522011/04/18(月) 14:40:03.56
一端ファイルへ分類しようとするのは、元のサイズが100ギガ以上とか巨大なケース。
これだとコピーするだけで時間食う。IO速度のため、1/3〜1/2にでもなったらそれだけ速い。
69 :デフォルトの名無しさん2011/04/18(月) 15:12:33.32
ソートの話題で恐縮ですがサマータイムについてご教授お願いします
東証では7/1〜9月末までサマータイム導入を決めたそうですが
時刻の差が1時間である場合とします。
プログラムで現在時刻を表示させたいのですが、7/1のAM2時になったら時刻に1時間プラスして、
10/1のAM3時になったら1時間引くだけでよいのでしょうか?
71 :デフォルトの名無しさん2011/04/18(月) 15:36:18.31
>>69
東証のあれは別に時計は変えないんじゃないの?
73 :デフォルトの名無しさん2011/04/18(月) 15:39:52.01
>>69
OSがサマータイム対応でその設定がされていれば難しいこと考えずlocaltimeでいいはず
74 :デフォルトの名無しさん2011/04/18(月) 15:42:02.83
日本で急遽サマータイム導入したときMSは急遽パッチく作るのか?
75 :デフォルトの名無しさん2011/04/18(月) 15:46:18.07
>>74
つ、バーカ、無知はすっこんでろよ。

『時計を設定する』
http://windows.microsoft.com/ja-JP/windows7/Set-the-clock
76 :デフォルトの名無しさん2011/04/18(月) 15:51:12.70
>>75
そんなの見せられてもねw
日本はタイムゾーン未導入なんだよ?OSでどうやって自動的にタイムゾーンに変更すんの?
あ、手動で時刻を変更しろって低レベルな事を言いたいわけじゃないよな?
77 :デフォルトの名無しさん2011/04/18(月) 15:54:50.27
>>76
日本でサマタイ未導入なら設定する必要もないだろボケ
82 :デフォルトの名無しさん2011/04/18(月) 16:28:16.79
>>77
はあ?急遽導入されたケースを話してるんだろ
バカは黙ってろ
83 :デフォルトの名無しさん2011/04/18(月) 16:34:48.50
>>82
はぁ?急遽?「明日からサマータイムにします」ってことはねーからw
それに東証のはあんなのは真の意味でのサマータイムじゃねーよ。
いわゆるズレ勤ってだけ。
84 :デフォルトの名無しさん2011/04/18(月) 16:40:10.37
>>82
盗電じゃないんだから……
85 :デフォルトの名無しさん2011/04/18(月) 16:44:54.53
>>76
> 日本はタイムゾーン未導入なんだよ?
まじっすか
88 :デフォルトの名無しさん2011/04/18(月) 17:15:19.27
なにせ日本はタイムゾーン未導入らしいからな〜w>>76
91 :デフォルトの名無しさん2011/04/18(月) 21:17:45.69
ニヤニヤ
で?日本はいつになったらタイムゾーン導入なんだ?>>76
93 :デフォルトの名無しさん2011/04/18(月) 22:41:14.94
>>75
そのリンク先を見てどうやってサマータイムに対応するのか教えて欲しい
煽りとして受け取らないでちゃんとした答えを書いてもらい
「サマータイムになったら自分で時刻をずらす」ってなら期待はずれだけど
95 :デフォルトの名無しさん2011/04/18(月) 22:57:58.75
>>93
おまえのPCはタイムゾーンすら未対応なんだから関係ない話だろーが
78 :デフォルトの名無しさん2011/04/18(月) 15:57:53.12
C++のSTLにあるようなDirectoryなどのコンテナで、
Cで標準的に使用できるものはございますでしょうか?

もしかして標準関数でよういされているのでしょうか・・・。
80 :デフォルトの名無しさん2011/04/18(月) 16:10:15.13
>>78
Directoryがよくわかりませんがコンテナなら

http://sourceforge.jp/projects/cstl/

にあるCSTLが使えると思います
81 :デフォルトの名無しさん2011/04/18(月) 16:13:41.63
>>80
たすかりました。
ありがとうございます。
86 :デフォルトの名無しさん2011/04/18(月) 16:45:52.34
> 自動的にタイムゾーンに変更
どういうことっすか
87 :デフォルトの名無しさん2011/04/18(月) 16:58:23.29
>>86
お前、人の話を聞かないタイプってよく言われてきたでしょ
94 :デフォルトの名無しさん2011/04/18(月) 22:54:24.01
サマータイムの設定ファイルみたいなのを配信してるんだよ、updateの時
96 :デフォルトの名無しさん2011/04/18(月) 23:22:16.79
>>95
何でタイムゾーンの話を俺に振るのか良く分からないけどちゃんとした回答を待ってるよ
>>94
ありがとう
98 :デフォルトの名無しさん2011/04/18(月) 23:48:57.94
関数をRAMに展開して実行したいけど、関数ポインタで実装出来るかな?
99 :デフォルトの名無しさん2011/04/18(月) 23:50:09.33
>>98
意味が良くわからん
普通にプログラムを読み込むとスワップが起きない限りメモリ上にあると思うが
100 :デフォルトの名無しさん2011/04/18(月) 23:50:41.26
>>98
RAMに展開してって、オンメモリでっていう意味か?
102 :デフォルトの名無しさん2011/04/18(月) 23:59:40.32
もしかして、コードイメージを配列で持たせて、それを実行したい、とか?
104 :デフォルトの名無しさん2011/04/19(火) 00:07:24.56
DEP:Data Execute Preventionを回避するにはLinuxならmmap、WindowsならVirtualAllocに適切なプロテクトフラグを付けてRAM確保かな
で、具体的には何をどんな理由でやりたいの?
108 :デフォルトの名無しさん2011/04/19(火) 12:53:55.65
2進数数値リテラル(0b11010011)やprintfのフォーマットに2進数変換指定子(%b)がないのは何故ですか?
110 :デフォルトの名無しさん2011/04/19(火) 13:08:11.37
K&R の時代からすっげえ欲しかったしライブラリでの実装例も腐るほどある
近年ビット数が増えて 0x1234 5678 9abc def0 のような区切り表記も欲しくなってきた
111 :デフォルトの名無しさん2011/04/19(火) 13:49:29.62
一部のGCC改変版で方言としてあったのはおぼえてる。
アセンブラからやってきたものとしてはありがたいものなんだけどな。
112 :デフォルトの名無しさん2011/04/19(火) 14:09:59.06
慣れれば0xだけで事足りるしな
0〜Fまで覚えれば済むわけだし
113 :デフォルトの名無しさん2011/04/19(火) 14:36:50.82
#define b0000 0



#define b1111 F




とか秀丸マクロとかでつくっといてインクルードするとか?
ちょっと重たすぎるかね。
114 :デフォルトの名無しさん2011/04/19(火) 14:38:31.84
いやまあ 255 や 033 なんか普通に使うけど、そういう問題ではなくて
117 :デフォルトの名無しさん2011/04/19(火) 16:22:37.86
>0##n

ああ、やべえ。
この書き方の意味がわからねえ・・・
118 :デフォルトの名無しさん2011/04/19(火) 16:31:25.74
>>117
マクロ引数に渡されたシンボルの連結
#define A(n) 0##n
A(123) は 0123 に展開される
A(aabb) は 0aabb に展開される
119 :デフォルトの名無しさん2011/04/19(火) 16:32:33.37
>>117
##はトークンを連結する
120 :デフォルトの名無しさん2011/04/19(火) 16:58:45.69
>>118-119
ありがとうございます。
またひとつ勉強になりました。
121 :デフォルトの名無しさん2011/04/19(火) 18:01:41.95
大丈夫だ、define以外何書いてるか分からない俺みたいなのもいる
何コレホントにC言語?
148 :デフォルトの名無しさん2011/04/20(水) 01:29:24.99
main{
char buf[4096];
kansuu(buf);
}
kansuu(char buf[]){
memset(buf, '\0', sizeof(buf));
}

sizeof(buf)の値は、4でした。
変更
memset(buf, '\0', sizeof(buf));
→memset(buf, '\0', 4096);
これで期待通りでした。

配列全体をゼロクリアしたい。

適当な書き方を教えてください。
149 :デフォルトの名無しさん2011/04/20(水) 01:31:45.48
>>148
サイズを一緒に与えないとダメ
150 :デフォルトの名無しさん2011/04/20(水) 01:42:20.11
>>148
char buf[4096] = {0}; とすればヨロシ。

http://stackoverflow.com/questions/2589749/initialize-array-to-0-in-c
151 :デフォルトの名無しさん2011/04/20(水) 01:50:42.15
返信ありがとうございます。
>>149
引数にサイズも渡す方法はできました。
スマートにしたいなぁと。

サブルーチン内で確保すべきかな


>>150
定数は避けたいです。
152 :1482011/04/20(水) 01:52:53.93
>>150
失礼しました。
勘違いしてました。

サブルーチン内で、ゼロクリアしたいです。
153 :デフォルトの名無しさん2011/04/20(水) 01:55:19.65
>>152
コンパイラによっては配列サイズを知ることもできるらしいが
そうだとしても渡されるものが配列の先頭である保証がないから
やっぱりサイズも渡すのが無難
159 :デフォルトの名無しさん2011/04/20(水) 07:09:25.04
>>148
MSC の cgets() みたいにすれば。

main{
char buf[4096];
*(int*)buf = sizeof buf;
kansuu(buf);
}
kansuu(char buf[]){
memset(buf, '\0', *(int*)buf);
}
162 :デフォルトの名無しさん2011/04/20(水) 07:12:59.34
>>159
環境に依っては実行時に転けるので要注意。
164 :デフォルトの名無しさん2011/04/20(水) 07:23:34.78
>>162
どんな環境だよw
165 :デフォルトの名無しさん2011/04/20(水) 07:35:30.32
>>164
char配列をint境界に割り当てないコンパイラと、境界を跨いだintアクセスのできないCPUの組み合わせ。
154 :デフォルトの名無しさん2011/04/20(水) 02:00:12.07
memset() を使いたいなら、こんな感じかなあ。。。

#include <string.h>
#define BUFSIZE 4096

int main() {
    char buf[BUFSIZE];
    func(buf);
}

void func(char buf[]) {
    memset(buf, 0, BUFSIZE);
}
155 :デフォルトの名無しさん2011/04/20(水) 02:21:06.37
>>154

あ、
これが王道っぽい
156 :デフォルトの名無しさん2011/04/20(水) 03:25:11.29
そもそもサブルーチンの中で初期化しなければならない状態ってのがどうなんだろう?
実は初期化しなくともどうにかならないかい
157 :デフォルトの名無しさん2011/04/20(水) 03:29:36.91
typedef char HOGE[64];

HOGE hoge;//char hoge[64];

こういうtypedefの使い方ってすごく気持ち悪いんですけど一般的なんですか?
158 :デフォルトの名無しさん2011/04/20(水) 07:07:50.66
>151

Cでは関数の引数として配列を渡すことはできない。
常にポインタとして渡すことになる。
(>148でsizeof(buf)が4になるのはそのため)
スマートも何も、引数として渡すしか方法はない。

0クリアしたいというのなら、どのみち関数内でも
配列のサイズが必要になると思われる。
160 :デフォルトの名無しさん2011/04/20(水) 07:10:21.09
>157
配列とか、ポインタが隠蔽されるのは個人的には嫌い。
しかし、型が入れ子になっている場合、宣言が読みやすくなるという人もいるだろう。

char (*p)[64];
より
HOGE *p;
が読みやすい、など
163 :デフォルトの名無しさん2011/04/20(水) 07:15:01.74
>>160
読みやすいつーか
その二つは違うだろ
161 :デフォルトの名無しさん2011/04/20(水) 07:11:24.62
>154のようにBUFSIZで縛るのは愚策だな
172 :デフォルトの名無しさん2011/04/20(水) 09:32:57.84
>>161
どうしてそう思ったのかな?
173 :デフォルトの名無しさん2011/04/20(水) 09:40:39.08
>>161
BUFSIZなんて使ってないが
174 :デフォルトの名無しさん2011/04/20(水) 10:04:06.53
>>173
Eが落ちた。

>>172
使い回しできない。使い回ししないなら、関数内でクリアするより呼び出し側でクリアする方が自然(≒依存度が下がる)。
181 :デフォルトの名無しさん2011/04/20(水) 10:53:34.93
>>174
君が言ってるのは、お題が気に食わないってことかな?
ここでは関数内で初期化する事が要件なんだけど。

それと、数行のコードの再利用性で愚作とまで言い切るのは相当凄腕のエスパーだよね。
この程度のコード片なら、使い回し等考えずに一番簡潔な方法で書いた方が良いと思うわ。
183 :デフォルトの名無しさん2011/04/20(水) 11:01:39.76
>>181
×愚作
○愚策
普段から策もなく行き当たりばったりに作っているから間違えるんだよ。

そもそも、memset()するだけの関数なんて存在意義がない。
何らかの処理をする関数の一部と考えれば使い捨てと断じるのは迂闊。
246 :デフォルトの名無しさん2011/04/20(水) 21:31:52.82
>>183
>何らかの処理をする関数の一部と考えれば使い捨てと断じるのは迂闊。

使い回すと考えるのも早計だと思うけど。
あの質問からそこまでネチネチ考えるのはむしろナンセンスじゃない?

茶茶入れする為の茶茶入れをしても誰からも感謝されないと思うんだが・・・
175 :デフォルトの名無しさん2011/04/20(水) 10:10:29.92
私はmemsetの話を関数の依存性の話にすり替えることで優位に立とうとします。
176 :デフォルトの名無しさん2011/04/20(水) 10:11:22.63
優位もへったくれも、そんなもの気にするから小物なんだよ。
178 :デフォルトの名無しさん2011/04/20(水) 10:18:26.03
MinGW は C99 使えるよ
180 :デフォルトの名無しさん2011/04/20(水) 10:31:39.03
>>178-179
?
182 :デフォルトの名無しさん2011/04/20(水) 10:59:40.10
関数に配列の大きさを渡さないで、関数内部に固定の数値を持つことが気に食わないんだろ
186 :デフォルトの名無しさん2011/04/20(水) 11:47:10.76
そろそろマクロに頼る頭カチカチコーディングから卒業するべき
配列のサイズを知る方法は確立されてるんだからそれを使え
187 :デフォルトの名無しさん2011/04/20(水) 12:13:32.99
>>186
コード書いてみてください
194 :デフォルトの名無しさん2011/04/20(水) 14:12:24.19
見事に話題をそらした>>186であった
188 :デフォルトの名無しさん2011/04/20(水) 13:29:18.23
memsetはインライン展開される場合もあるのに、関数化などお笑い
189 :デフォルトの名無しさん2011/04/20(水) 13:45:34.00
今まで書いたコードを間違って上書きしてしまいました。
CTRL+Oでファイルを開くつもりが、人的操作ミスでファイルを保存するダイアログを開いてしまい、
現在の内容を選択したファイルに保存してしまいました。
このような事を二度と繰り返したくないのです(3回ミスをしました)
どのようにバックアップを取ればよいでしょうか?
196 :デフォルトの名無しさん2011/04/20(水) 14:15:33.16
>>189
エディタの開くダイアログや名前を付けて保存ダイアログを使わない
エクスプローラから直接開いて上書き保存だけする
202 :デフォルトの名無しさん2011/04/20(水) 14:49:10.76
>>189
ショート・カットキーは押し間違えやすい
ミスタイプってあるよな?あれと同じ事が起きる
俺もCtrl+CとCtrl+Vをたまに押し間違える

対策はボタンを使うか、面倒だけどもメニューから
開くを選択する事だ
191 :デフォルトの名無しさん2011/04/20(水) 13:51:15.96
Emeditorや秀丸とかのエディタは、過去の履歴を自動でバックアップする設定付いてるぞ。
別のエディタでも設定ある可能性。
自分は、少しでも変更あったらすべての連番を自動バックアップしてる。
195 :デフォルトの名無しさん2011/04/20(水) 14:15:07.53
>>189
そういうミスをする根本原因を解決しないと、どんなツールを使っても同じミスをするぞ。
マウスの操作が苦手ならキーボードショートカットを使うとか、
判っていながら間違ったダイアログを開いてしまうのなら……その場合はどうしたらいいか知らんが。

>>191
自動バックアップって、>189のような上書きにも対応しているのか?
少なくとも一世代は先祖還りしそうな気がするのだが。

その点では、>189のミスに対応するには保存した版をバックアップする機能が必要になるね。
リビジョン管理ツールと連動できるエディタならできるだろうけれど。
198 :デフォルトの名無しさん2011/04/20(水) 14:22:00.70
>>195
対応するエディタを使っていれば、上書き保存される前に、未変換のテキストをバックアップフォルダへ連番でバックアップできる。
192 :デフォルトの名無しさん2011/04/20(水) 13:57:34.03
最近は、編集中のバックアップとるとか気にしたことないな。
199 :デフォルトの名無しさん2011/04/20(水) 14:30:16.70
秀丸エディタ使ってます
GITをWindowsに入れてみたいのですが使い方とか良く分かりません

201 :デフォルトの名無しさん2011/04/20(水) 14:45:32.36
>>199
おまえ、不正なPASSで秀丸使ってるだろ。
ちゃんと金払えよな。
203 :デフォルトの名無しさん2011/04/20(水) 14:50:03.09
すいませんミスです入れてた後です
入れた後なんですがどうやってバックアップを取ればよいのか
Gitって難しいですね
SVNなら簡単なんでしょうか?
秀丸エディタはお金を払って利用はしておりませんが作者様から免除のライセンスを頂いてますので正式ユーザーです
一応フリーソフト開発者です
204 :デフォルトの名無しさん2011/04/20(水) 14:54:22.05
>>203
で、Gitの使い方ならGitスレへ。
206 : 忍法帖【Lv=15,xxxPT】 2011/04/20(水) 14:55:39.44
>>203
秀丸のバックアップ単体で十分。
207 :デフォルトの名無しさん2011/04/20(水) 14:59:39.65
>>204
Gitのスレも除いてみます。ありがとうごじあます

>>205
お互い頑張りましょう。

>>206
えええええええええ
205 :デフォルトの名無しさん2011/04/20(水) 14:54:54.58
バージョン管理ツールは使い方わからん。
これって関数の仕様が決まってからでないと使えないのか?
動作しファイル組み合わせは自動で記録できるのか。
208 :デフォルトの名無しさん2011/04/20(水) 15:01:06.78
すいませんミスです

×Gitのスレも除いてみます。ありがとうごじあます
○Gitのスレも覗いてみます。ありがとうございます

興奮して早くレス打たないといけないと思って誤字になりました。
209 : 忍法帖【Lv=15,xxxPT】 2011/04/20(水) 15:03:46.68
秀丸のファイルタイプ別の、保存とかいう所に世代バックアップあるぞ。
常に秀丸を使うんだったら、この機能ONにしとけば全部残る。
210 :デフォルトの名無しさん2011/04/20(水) 15:22:06.70
秀丸のバックアップを試してみたんですが
保存した内容と同じでないのでツライです
2回保存しないと同じ内容でバックアップになんないのでキビシイです
211 : 忍法帖【Lv=15,xxxPT】 2011/04/20(水) 15:25:06.94
>>210
世代にしろ。変更前、保存前のデータが残るんだ。
変更前と変更後を常に残していけば良いんだよ。
229 :デフォルトの名無しさん2011/04/20(水) 16:36:23.18
>>211
それだと
保存したときに、変更前の内容がバックアップに残り、
最新の内容がバックアップに残りません
最新の内容を間違えて上書きしちゃったときのためにバックアップを取りたいのでキツイです
232 :デフォルトの名無しさん2011/04/20(水) 16:39:19.36
>>229
最新の内容を上書きする前に自動でバックアップするから、
間違って上書きしないわけだが。エディタを固定して使っていたら。
233 :デフォルトの名無しさん2011/04/20(水) 16:42:35.38
>>232
うああああああああああああああバックアップされてました
ためしに無題ファイルで上書きしたらバックアップされてました
すいませんでした
212 : 忍法帖【Lv=15,xxxPT】 2011/04/20(水) 15:27:37.99
動作しては。Aを更新して上書き保存する場合。
Aをバックアップフォルダへ移動した後に、変更後の内容をAのあった場所へファイル作成して保存するの。
213 :デフォルトの名無しさん2011/04/20(水) 15:32:31.84
作業過程(途中) と 区切れ目(どりあえず動作可能な一式がそろった とか) とを 区別してるな

前者はバックアップとってない or フォルダ(ディレクトリ)ごと 別にコピー(おおがかりに変更かけるときとか)
後者は バージョン管理ツールでコミット
214 :デフォルトの名無しさん2011/04/20(水) 15:36:07.11
>フォルダ(ディレクトリ)ごと 別にコピー(おおがかりに変更かけるときとか)
これこそ(分散型)リビジョン管理ツールの出番だ。
216 :デフォルトの名無しさん2011/04/20(水) 15:45:00.63
>>214
主目的が コピペ元 なんで、基本的には管理ツールでことたりてるね
基本 1本幹で 枝からの平行成長は使わない方向かな…

枝分け 複数並行リビジョン運用 根に修正はいって マージどおすべぇ問題に目を背けてる使い方
218 :デフォルトの名無しさん2011/04/20(水) 15:47:16.83
>>216
どおすべぇって、マージすればよくね?
215 :デフォルトの名無しさん2011/04/20(水) 15:39:21.54
何、C言語やってんのにここの連中はバージョン管理も出来ないの?
219 :デフォルトの名無しさん2011/04/20(水) 15:50:24.80
>>215
入門書では教えないからね(このこと自体クソだが)
217 :デフォルトの名無しさん2011/04/20(水) 15:46:33.79
自分専用と割り切るならどの段階でもコミットしていいんでないかな。
タグだけ打っとけばどうにかなるだろ
221 :デフォルトの名無しさん2011/04/20(水) 15:57:42.62
便利なマージツール、マージンガーZってのをみつけたよ。
まじでググってみるといいよ。
222 :デフォルトの名無しさん2011/04/20(水) 15:58:00.05
書けるのに読めない人がバージョン管理なんて出来るわけ無いでしょ
223 :デフォルトの名無しさん2011/04/20(水) 16:00:24.52
自分はwindowsエクスプローラーで手動でドラッグアンドドロップして、
コピー 〜 ○○というのを作る。
失敗したら手動で戻す。
SVNとかテキストでそのまま残らないず管理ツール本体が壊れたら嫌だ。
224 :デフォルトの名無しさん2011/04/20(水) 16:19:14.20
>>223
SVNなら週一でスナップショットをローカルに保存しときゃいいだろ。
まあGIT使えばそんな心配もねえけどな。
225 :デフォルトの名無しさん2011/04/20(水) 16:23:20.81
言語の入門とバージョン/リビジョン管理入門はセットになってると良いが…
なかなかそうはいかんよな
226 :デフォルトの名無しさん2011/04/20(水) 16:32:20.44
バージョン管理は使わん。
自動でやってくれないし、無駄なファイルを生成するし。
自動でバックアップフォルダへ連番つきで保存してくれれば十分。
普通のテキストエディタでこの機能は付いている。
230 :デフォルトの名無しさん2011/04/20(水) 16:36:32.65
>>226
連番だけでひたすら保存して、特定の状態に戻したくなったらどうするの?

私は連番管理や日付け管理ではその辺りがどうにもならないからリビジョン管理ツールを使っているのだけれど。
分岐の管理もできるしマージは強力だし、今では只のバックアップに留まらずいろいろ有効活用しているけどね。
227 :デフォルトの名無しさん2011/04/20(水) 16:33:44.16
そりゃそうよ。本を書いているのは現場経験のない人間なんだから。
だから、未だにprintf()とscanf()のフォーマット指定は互換だなんて書いてある本が出回るわけで。
228 :デフォルトの名無しさん2011/04/20(水) 16:35:52.95
重複しない名前でバックアップしてくれるだけで、
あとは問題起こったとき更新日時から手動で復元できる。
バージョン管理ツール何が良いのか。
234 :デフォルトの名無しさん2011/04/20(水) 16:45:11.14
あ、やっぱだめです
ファイルを削除したときはバックアップされませんでした
238 :デフォルトの名無しさん2011/04/20(水) 17:11:01.04
シフト+DELETEなどはまれに起こる異常事態と考えてあきらめて、一つ前の履歴から復元しろ。
これからはシフト+DELETEを使わなければ良い。


239 :デフォルトの名無しさん2011/04/20(水) 17:12:38.97
一分ごとに自動保存、自動バックアップしていれば
異常事態が起こっても
最大で一分間の作業が無駄になるだけじゃん。
一分くらい気にするな。
240 :デフォルトの名無しさん2011/04/20(水) 17:15:08.42
つか一度書いたソースくらいさっさと書き直せよ。
さっきより良いコードが必ず書ける。
244 :デフォルトの名無しさん2011/04/20(水) 20:18:18.35
教えてください
キーボードのAを押している間はディスプレイに任意の文字を出力させて、離したらその文字を消す
というプログラムをつくりたいです
ご教授お願いします
245 :デフォルトの名無しさん2011/04/20(水) 20:26:24.35
>>244
非標準関数だけどgetch()を使う
250 :デフォルトの名無しさん2011/04/20(水) 23:09:23.01
>>245
なんとかできそうです
ありがとうございました( ´ ▽ ` )
248 :デフォルトの名無しさん2011/04/20(水) 23:01:43.39
普通は変更した部分なんて全部覚えてるから手動で戻せるだろ。
おまえら記憶力に障害でもあるのか?
脳の検査してきたほうがいいんじゃね?
249 :デフォルトの名無しさん2011/04/20(水) 23:03:34.47
>>248
バージョン管理ツール必要ないな
254 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/20(水) 23:23:37.11
いつの間にか不具合が紛れ込んでたみたいなときにどの修正がまずかったか切り分けができるのがいいね
266 :デフォルトの名無しさん2011/04/21(木) 00:11:37.74
http://www.vector.co.jp/soft/dl/other/h8/se310593.html
このLCDライブラリのソースlcd.cの中の

static LCD  *lcd;
という宣言の意味がよくわからないです

あと、
lcd = (LCD *)&PB.DR.BYTE;
PB.DRのポート8ビットが構造体の各メンバに定義されてると思うんだけど
void LCDInitの中だけで定義されていて大丈夫なの?
267 :デフォルトの名無しさん2011/04/21(木) 00:12:49.23
>>266
不完全型でググれ
281 :デフォルトの名無しさん2011/04/21(木) 00:53:09.71
>>267
サンクス
282 :デフォルトの名無しさん2011/04/21(木) 00:55:16.76
>>267
サンクス
283 :デフォルトの名無しさん2011/04/21(木) 01:20:01.34
>>267
サンクス
284 :デフォルトの名無しさん2011/04/21(木) 06:18:55.81
>>267
サンクス
285 :デフォルトの名無しさん2011/04/21(木) 12:40:54.28
C言語でOSってかけますか??
286 :デフォルトの名無しさん2011/04/21(木) 12:54:13.40
>>285
書けますが、基幹部分とI/O及びアトミック操作はアセンブラで書かざるを得ない
場合がほとんどです
289 :デフォルトの名無しさん2011/04/21(木) 13:57:30.91
単位はByte。

Cソースコード分量 / (Cソースコード分量+アセンブラコード分量)
291 :デフォルトの名無しさん2011/04/21(木) 14:03:22.57
LinuxはモノリシックだからC言語が最適だな
あれをアセンブラで書けと言われたら気が狂う
293 :デフォルトの名無しさん2011/04/21(木) 14:20:28.07
C++のテンプレート部分だけはCにも欲しいな。
まあべつにCでポリモできねえわけじゃねえし。
294 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/21(木) 20:53:56.53
テーブルのサイズが大きすぎてメモリを使い果たすことはありますが
ソースコード量が多すぎてテキスト領域がバッファオーバーフローすることはないんですか
295 :デフォルトの名無しさん2011/04/21(木) 21:09:48.75
それはもしあったとしても実行ファイルをリンクする時点で判明するんじゃない
296 :デフォルトの名無しさん2011/04/21(木) 21:16:08.25
やっぱりCだけ覚えとけばC++は必要ないの!?
297 :デフォルトの名無しさん2011/04/21(木) 21:45:14.93
>>296
どちらでも
ただバグ取りはCよりC++の方が格段に楽
298 :デフォルトの名無しさん2011/04/21(木) 21:49:03.39
なんで!?何でC++のほうが楽なの?Cと比べてC++だと何がいいの?
299 :デフォルトの名無しさん2011/04/21(木) 21:54:14.89
クイックソートの欠点って何でしょうか?
クイックソートが一番早いならソートは全部クイックでやればいいのでは?
301 :デフォルトの名無しさん2011/04/21(木) 21:56:12.69
>>299
同値のデータがあったときに、並び方が変わることかな?
302 :デフォルトの名無しさん2011/04/21(木) 21:56:33.50
>>299
データすべてがメモリに乗っていないと遅くなる。
HDDを補助に使えるソートのほうが速くなる可能性。
シーケンシャルアクセスで済ませれば、HDD使ってもそれほど遅くならん。極端には。
303 :デフォルトの名無しさん2011/04/21(木) 22:08:23.27
>>301
計算量的には最速なのでは?
>>302
工学的にはそうなんですか。
300 :デフォルトの名無しさん2011/04/21(木) 21:54:24.65
C++のほうがプログラムが容易になる。クラス、テンプレート、STLなど。
304 :デフォルトの名無しさん2011/04/21(木) 22:21:12.99


メモリ使用パターンとインデックスソートソート

対象の配列が主記憶を使い切るような大きさであった場合、より低速な補助記憶装置が使われるので、
アルゴリズムのメモリ使用パターンが重要となる。

そのような状況では、主記憶上ですべてソートできることを前提としたアルゴリズムは効率が極端に悪化する可能性がある。

このような状況では、比較演算回数はあまり重要ではなくなり、ディスクとのメモリ領域のスワップ回数が重要となる。

したがって、なるべくスワップ回数を増やさないようにするために、配列全体を走査する回数や比較の局所性が比較回数よりも重要となる。

例えば、再帰型のクイックソートは主記憶上では性能が良いが、ソート対象の配列が主記憶に収まらない場合は

スワップが頻繁に発生して、性能が極端に低下する。

したがって、そのような場合は比較回数が多くても他のアルゴリズムを使った方がよい。

ソート - Wikipedia
305 :デフォルトの名無しさん2011/04/21(木) 22:25:19.60
理論的にはもっと速いやつあるぞ。


主なソーティングアルゴリズムと性能

クイックソート 平均計算時間  O(nlog n)  最悪計算時間 O(n2)

分布数えソート 平均計算時間  O(n)  最悪計算時間 O(n)

http://www.motorwarp.com/koizumi/sort.html
306 :デフォルトの名無しさん2011/04/21(木) 22:28:16.58


分布数えソート(最高速のソート)
最高速のソートとは大きく出たなと思われるでしょうが、
分布数えソートはクイックソートですら足元に及ばないほど高速です。
おそらく、広く知られたソートアルゴリズムの中ではこれが最高速のソートでしょう。
その計算量のオーダは O(N)という驚異的なものです。
しかも分布数えソートは安定なソートなのです。
http://www.moon.sannet.ne.jp/okahisa/sort/node25.html


バケットソートは、ソートのアルゴリズムの一つ。
バケツソート、分布数えソート、計数ソート、ビンソートなどともいう。
計算時間はO(n)と高速だが、要素の定義域分の外部記憶が必要。安定ソートが可能。
バケットソート - Wikipedia
307 :デフォルトの名無しさん2011/04/21(木) 22:33:32.84
>>304
スワップって何ですか?
プログラムを書いただけではメモリ使用パターン何て分かりません・・
マージやヒープソートはどうなんですか?
>>306
クイックソートより早いソートは不可能って前レスであったけどどうなんでしょう?


310 :デフォルトの名無しさん2011/04/21(木) 22:42:07.45
>>307
スワップは、巨大メモリ(仮想メモリ)を使用して、ランダムリード、ライトがあれば起こりやすい。
メモリ上だけ処理できないってことだ。
クイックソートだと、初めに二分割するときに、メモリ上で大規模な入れ替え、大移動が起こる。
311 :デフォルトの名無しさん2011/04/21(木) 22:46:13.62
>>307
分布数えソート(パケットソート)は、ソートする値が、たとえば 0〜100 の間、という風に狭い範囲に限定しているときに力を発揮します。
もっと一般の場合、たとえば 0〜4294967296 の範囲といった場合には、主記憶をそれだけ必要とするゆえに、現実的でなくなります。
312 :デフォルトの名無しさん2011/04/21(木) 22:49:31.92
>>310
マージも分割するんやないのですか?
326 :デフォルトの名無しさん2011/04/22(金) 00:32:20.12
>>306
大きくも小さくも最速かどうかは証明か反証のどちらかが見つかっているということだ
驚異的とかハァハァするとかそういう主観は誰もおまえに尋ねてはいない

おまえに対する要求はただ1つ、嘘をつくな
327 :デフォルトの名無しさん2011/04/22(金) 00:36:01.94
>>326
データ数Nで計算量がO(N)より縮まることはない。
質量保存則、運動量保存則と共通する原理に近い。
336 :デフォルトの名無しさん2011/04/22(金) 13:14:09.75
>>327
それはソートにおける原理と限定しておかないと。
308 :デフォルトの名無しさん2011/04/21(木) 22:34:14.97
テキストファイルを編集して別の新しいテキストファイルに出力するコードを作り、エラーもなくコンパイル出来たのですが、
ファイルのどこを探してもそのテキストファイルがありません・・・

漠然としすぎだとは思いますが、どこに問題があるのか分かる方いらっしゃいますか?
309 :デフォルトの名無しさん2011/04/21(木) 22:41:54.73
そのコードをコンパイルしてできた実行ファイルはどこにある?
313 :デフォルトの名無しさん2011/04/21(木) 23:15:43.81
そんなことよりも何よりも、クイックソートは整列済みのデータのソートが呆れるほど苦手だな。
322 :デフォルトの名無しさん2011/04/22(金) 00:13:47.88
>>313
えっ、なんでなんすか?
整列済みなら、手間が省けて余計に早くなるんじゃないん?
違うんですか?
314 :デフォルトの名無しさん2011/04/21(木) 23:44:33.16
分布数えソートってなんだろうって思ったらバケットソートの別称なのね
315 :デフォルトの名無しさん2011/04/21(木) 23:52:09.73
またクイックソート信者か
クイックソートは悪くないけど、盲信してる奴は最悪計算時間を知らない奴が多い
あと非安定だから用途によってはマージソートとか使った方が良い
332 : ◆QZaw55cn4c 2011/04/22(金) 08:06:24.40
>>315
非安定は、たとえばデータに通し番号を打って比較交換のときに考慮すればいいので、大きな問題ではない。
なお私はシェルソート信者。
333 :デフォルトの名無しさん2011/04/22(金) 08:20:04.97
>>332
消えろクズ
316 :デフォルトの名無しさん2011/04/21(木) 23:54:41.29
最悪計算時間よりも、平均計算量が大事。多くの場合は平均時間になるため。
クイックは大域的なメモリアクセスが起こるのも良くない。
317 :デフォルトの名無しさん2011/04/21(木) 23:59:41.84
巨大なソートは、分布数え + クイックでいいのでは?
たとえばソート対象はaa* 〜 zz*として。
aa - ca、 cb - fd 、fe - ma、・・・ とファイルへ分類して書き出しておき
各ファイルはメモリ上でソート可能とする。
それらをソートして連結。
前にも同じような事書いたが。


320 :デフォルトの名無しさん2011/04/22(金) 00:05:06.80
>>317
マージソートのほうがよさげ
321 :デフォルトの名無しさん2011/04/22(金) 00:07:10.15
>>317
普通マージソート使う
318 :デフォルトの名無しさん2011/04/21(木) 23:59:45.04
ちょっとまって!
ってことはCよりC++を勉強したほうがいいってことなの!?
Cがおすすめってここで教えてもらったのに超損した!
319 :デフォルトの名無しさん2011/04/22(金) 00:01:28.72
>>318
Cでオケ。C++やるならもっと他の選択肢も検討した方がいい。
324 :デフォルトの名無しさん2011/04/22(金) 00:23:23.04
C言語よりコードが読みやすい言語はないだろ。緻密だから分かりやすい。
328 :デフォルトの名無しさん2011/04/22(金) 00:41:56.47
C言語には文字列型がないと聞きました。

文字列型がある言語では、例えば"TREE"や"mountain"などの文字列は
全て同じバイト数なんでしょうか?
330 :デフォルトの名無しさん2011/04/22(金) 00:54:52.11
>>328
同じバイト数でそれら扱う言語があるかも知れませんが、スレ違いですね
329 :デフォルトの名無しさん2011/04/22(金) 00:42:01.99
計算量的最速って意味ね。実測ではクイックソート他のほうが速いことはあり得る。
331 :3252011/04/22(金) 01:09:26.27
fC0eNFSnjkhYtDZに水遁されたw
まじ糞過ぎるwwwwww
334 : ◆QZaw55cn4c 2011/04/22(金) 12:42:21.68
>>331
http://hibari.2ch.net/test/read.cgi/tech/1295273862/411
で懸念してるとおりですね。
335 :デフォルトの名無しさん2011/04/22(金) 12:50:55.40
>>334
失せろカス
339 :デフォルトの名無しさん2011/04/22(金) 20:55:44.27
CでGUI作ろうと思ったら環境依存じゃないと駄目なの?
そんなモジュールとか用意されてない?
例えばLinuxだとどうしたら・・・
340 :デフォルトの名無しさん2011/04/22(金) 20:58:20.02
>>339
tcl/tk呼び出すとか
341 :デフォルトの名無しさん2011/04/22(金) 21:16:18.16
仕事でやってる人に質問です
Cが出来てJavaが出来ない人っていますか?
その逆もいますか?
342 :デフォルトの名無しさん2011/04/22(金) 21:18:27.94
>>341
Cができれば、Javaは出来るんじゃないか?
逆は無理かも知れない。
343 :デフォルトの名無しさん2011/04/22(金) 21:19:54.61
>>341
両方いるね。
書けても、形だけとかそんな感じのも多い。
345 :デフォルトの名無しさん2011/04/22(金) 21:50:22.68
>>341
俺俺 C⇔C++ はOK
Java は無理

当たり前に使ってる標準関数とかの相当品をリファレンス頼りにいちいち探さないとっていう理解度なので
道具として即使えてる C/C++ で済ましてる
354 :デフォルトの名無しさん2011/04/22(金) 22:54:04.27
>>341
漠然と聞きたければマ板へ行け
ム板で聞きたければ具体的な問題を用意しろ
344 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/22(金) 21:32:34.23
CをやってC++,JavaをやってCに戻ったらCのコードがオブジェクト指向臭くなってよくなったわ
346 :デフォルトの名無しさん2011/04/22(金) 22:21:17.08
C言語で少数点20以下〜20桁までの計算(結果もこの範疇)したいのですがどうしたらいいですか?

10000000000000000000.00000000000000000000です。

例えば6323234×32342とか


0.2323×0.232453とか。
348 :デフォルトの名無しさん2011/04/22(金) 22:25:20.07
>>346
google 任意精度演算
355 :デフォルトの名無しさん2011/04/22(金) 23:24:55.76
>>346
その精度で計算できるハードウエアを持ってくる
347 :デフォルトの名無しさん2011/04/22(金) 22:21:50.08
>341

両方いる。

Cがちゃんと分かっている人には、ちょっと説明すれば、Javaは
かけるようになる。あとはAPIを覚えるだけ。

Javaがちゃんと分かっている人も、説明すればCでかけるだろうけど、
Cは標準関数があまりにも質素すぎて、我慢出来ないと思う。

まぁ設計が判る人というかOOPやデザパタが判る人なら、
C⇔Javaは可能でしょ。
349 :デフォルトの名無しさん2011/04/22(金) 22:38:38.97
Cでコード書けてもちょっと説明されただけじゃJavaでまともなコードかけない。
350 :デフォルトの名無しさん2011/04/22(金) 22:41:54.96
プログラマーになるためにはC言語を最低限どの程度覚えたらいいでしょうか?
351 :デフォルトの名無しさん2011/04/22(金) 22:45:23.71
ならされた奴 いつのまにかなってた奴 は心当たりはあるけど
なりたいって言ってなった奴 ってあんまり印象ないな
352 :デフォルトの名無しさん2011/04/22(金) 22:48:18.74
最低限って、
書き方覚えてもダメってことがこのスレ見たらわかるでしょ
353 :デフォルトの名無しさん2011/04/22(金) 22:53:15.66
最低でも人様に使っていただく事ができるソフトをいくつか提示できる程度
356 :デフォルトの名無しさん2011/04/23(土) 00:45:02.95
ゲーム制作メンバーを募集しています。

http://yuzuru.2ch.net/test/read.cgi/ff/1298538064/l50
http://www31.atwiki.jp/fftsukurou/

・最近のFFが嫌い
・昔のFFが好き

どちらかに当てはまれば誰でも結構です。
昔ながらのFFをみんなで作りましょう。
358 :デフォルトの名無しさん2011/04/23(土) 06:37:13.33
リトルエンディアンとビッグエンディアンについて質問。

<前提>

例えば 0xAABBCCDD の場合、これを配列 unsigned char a[4] だと
リトル:
    a[0] = DD
    a[1] = CC
    a[2] = BB
    a[3] = AA

ビッグ:
    a[0] = AA
    a[1] = BB
    a[2] = CC
    a[3] = DD
となります。

これを
printf("%x %x %x %x", a[0], a[1], a[2], a[3]) とすると、
リトル:
    DD CC BB AA
ビッグ:
    AA BB CC DD
となります。
359 :3582011/04/23(土) 06:38:09.24
a[0] と a[3] の、メモリー中での位置を比較した場合、

上位番地 0xFFFF
    a[3]
    a[2]
    a[1]
    a[0]
下位番地 0x0000
となります。
だから &a[1] + 1 == &a[2] です。 配列の番号と、メモリの番地が比例関係なのは、リトルエンディアンでも、ビックエンディアンでも同様です。
(もしもリトルとビックで、配列の番号順が逆になってしまったら、 反比例の場合 &a[1] + 1 == &a[0] という現象も起こりうるはずですが、実際には起きてません。)

0xAA を2進数に直すと 10101010 です。これは
上位ビット(上位番地)
    1
    0
    1
    0
    1
    0
    1
    0
下位ビット(下位番地)
です。
これも配列同様に、ビックでもリトルでも、変化しません。

<質問>
つまり、ビックエンディアンで順序が逆転するのは、あくまで1バイト単位のブロックの並べ替え単位にすぎない。
ビット単位での逆転は起きない。ビット単位で見れば、上位ビットの高位桁、下位ビットに下位桁が記録されるというフォーマットに違いはない。

という理解で良いですか?
361 :3582011/04/23(土) 07:13:25.38
ビックとリトル、どちらが自然か?という観点で考えた場合、リトルの方が自然だと思います。
なぜなら、『数値の位』と『メモリー番地』が対応するからです。

リトルエンディアンの場合
    1 の位が、メモリー番地 0x0001 だとします。
    2 の位は、メモリー番地 0x0002 です。
    4 の位は、メモリー番地 0x0003 です。
    8 の位は、メモリー番地 0x0004 です。
つまり、位が増加すれば、メモリー番地も増加します。

ビックエンディアンの場合
    1 の位が、メモリー番地 0x0018 だとします。
    2 の位は、メモリー番地 0x0019 です。
    4 の位は、メモリー番地 0x001A です。
    8 の位は、メモリー番地 0x001B です。
    (1の位 〜 128の位までに関しては、位の増加 = 番地の増加です)
    しかし、 256 の位は、メモリー番地 0x0020 ではなく、 0x0010 になります。
つまり、位の増加と、メモリーの番地の増加が、必ずしも比例しないということです。

だからビックエンディアンは不自然だと思います。
もしもビックエンディアンの目的である「下位桁よりも、上位桁を先に読んでいける」を自然に実現したいのであれば、
バイト単位の入れ替えではなく、ビット単位での入れ替えをして記録すべきだと思います。(そこまで徹底してほしいです)

つまり、
Xエンディアンの場合
    1 の位が、メモリー番地 0x001F だとします。
    2 の位は、メモリー番地 0x001Eです。
    4 の位は、メモリー番地 0x001D です。
    8 の位は、メモリー番地 0x001C です。
という具合に、メモリー番地と位が、完全に反比例します。(ビット単位で)
362 :3582011/04/23(土) 07:18:25.78
補足:
361のメモリー番地は、バイト単位ではなく、ビット単位としてです。
つまり 0x0000 〜 0x0020 で4バイトという意味です。
363 :デフォルトの名無しさん2011/04/23(土) 07:18:49.52
ビット単位の順序は無意味
ビットにはアドレスが付いておらず、ビット単位でメモリから読むことは出来ない
バイト単位で読めば例えバイト内でビットが逆順で記録されてても読むときには通常の順序に戻る
364 :デフォルトの名無しさん2011/04/23(土) 07:23:21.03
>359

質問にたいしては、その理解で良い、かな。
エンディアンを「バイトオーダー」ともいいますが、要するに、バイト単位でのデータ配置
方法を指しています。バイトの中身のビットフォーマットについては触れていません。

というか、Cの中ではビットの具体的な配置方法を知る方法は無いから、実際の
ビットフォーマットが逆転していてもわからないと思いますよ。
365 :3582011/04/23(土) 07:38:38.05
この仕様書の
http://k.osask.jp/nosup/knzk000a.zip
#0004 : エンディアン等
の章で、ビッグエンディアンを採用するらしきことが書かれてるのですが、
気になったのは、最後の行の「これがワード列やビット列になってももちろん同様の方針
を採る。」です。

『ビット列でも同様』ということは、つまり
ビット単位で『上位アドレス=下位桁、下位アドレス=上位桁』をやろうとしてる? ということなのでしょうか?
だとしたら、これはビッグエンディアンと呼べるのでしょうか? 
別物ではないでしょうか? 
むしろ、さっきの例のXエンディアンに相当しませんか?(ビット単位での、全体的な、上位下位の逆転)

どうにもこの章の言わんとしてることが、いまいち理解できなくてこまってます。

ただ、思想としては、「符号ビットをまっさきに読みたい」という考えなのだろうから、
データの記録や送信や運用の方法として、「まず上位桁のバイトから転送していく」という考えなのだろうか?
368 :デフォルトの名無しさん2011/04/23(土) 07:59:23.95
>>365
先ず第一に、スレ違い。
第二に、仕様書の問題なら当事者に聞け。
まぁ、趣旨としては「データをビット単位で扱う場合もワード単位で扱う場合も先頭データが先頭バイトに格納される」だと思うが。
データの並びと格納されるバイトの中身をごっちゃにしちゃいかんよ。
366 :3582011/04/23(土) 07:40:22.54
誤:「まず上位桁のバイトから転送していく」
正:「まず上位桁のビットから転送していく」
367 :デフォルトの名無しさん2011/04/23(土) 07:54:16.49
そもそも1バイトが何ビットであるかは決まっていない。
369 :3642011/04/23(土) 08:29:50.56
>365

>ただ、思想としては、「符号ビットをまっさきに読みたい」という考えなのだろうから、
>データの記録や送信や運用の方法として、「まず上位桁のバイトから転送していく」という考えなのだろうか?
メモの内容はそうですね。というか符号ビットが大事だから、先に置くというポリシーらしい。

くり返しなりますが、
Cでは「物理的なビットオーダー」を気にする場面は無いはずです。
0x0aが
MSb 0b1010 LSb でも LSb 0b0101 MSbでも
Cで扱う場合は、それを区別できないですよね。

少なくとも同一のハード上で、それを気にすることはないです。
異なるハード間の話になれば、それはプロトコルの問題になります。


370 :デフォルトの名無しさん2011/04/23(土) 09:04:22.46
>>369
>0x0aが
>MSb 0b1010 LSb でも LSb 0b0101 MSbでも
それ一緒や
373 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/23(土) 10:12:59.23
ビッグエンディアンってみんなを不幸にするシステムなんじゃないの
374 :デフォルトの名無しさん2011/04/23(土) 10:31:48.54
a[0] と a[3] の、メモリー中での位置を比較した場合、

上位番地 0x0000
    a[0]
    a[1]
    a[2]
    a[3]
下位番地 0xFFFF
となります。
>>って、直してあげればいいんじゃない。...
375 :デフォルトの名無しさん2011/04/23(土) 11:11:06.92
>370

だから一緒だって。

物理的な並びと、それを同解釈するかは別問題でしょ。

横書きを左から右に読むのか
一期一会
右から左に読むのかは
会一期一
決め事でしか無いわけだから。
376 :3692011/04/23(土) 11:30:30.38
369=375です。

なんだか舌足らずですみません。

物理的なビットオーダーがどうなっていようが、意味的なビット状態が
同じならば気にならない、ということです。

そもそもCではビットオーダーがわかりません。
Cでプログラムしている上では気にしたことも無いです。

いま気づいたけど、
>362
>361のメモリー番地は、バイト単位ではなく、ビット単位としてです。
ビットにはアドレスは無い。ここから勘違いが始まっている?

377 :3742011/04/23(土) 11:51:26.62
エンディアンにビット順序は関係ない。エンディアンはバイト順序。
512 :デフォルトの名無しさん2011/04/26(火) 05:14:49.03
>>377
ビット順が逆だからバイト順も逆になるんだが。
513 :デフォルトの名無しさん2011/04/26(火) 07:08:34.02
>>512
わざわざ古いネタ引っ張り出して馬鹿晒さなくていいから。
378 :デフォルトの名無しさん2011/04/23(土) 16:00:12.26
10日でおぼえるC言語入門教室という参考書を一通りしたのですが、
これだけではプログラマーになるには難しいですか?
380 :デフォルトの名無しさん2011/04/23(土) 16:10:32.39
>>378
プログラマーとはプログラムを作る人だ
つまり何らかのプログラムを作れば、あなたはプログラマーだ
参考書を読んだだけとか参考書のソースを写しただけとかじゃ自分でプログラムを作ったとは言いにくいが
何か作ってみ
382 :デフォルトの名無しさん2011/04/23(土) 16:49:06.64
>>380
無意味なレスしなくていいから
383 :デフォルトの名無しさん2011/04/23(土) 16:54:07.01
まずプログラミング言語とは道具であるという理解が大切。
10日でおぼえる〜を読んで自分のしたいことを実際に作れるか。
それで知識が足らないと思うんならもっと勉強する。
これでアナタも立派なプログラマー
387 :デフォルトの名無しさん2011/04/23(土) 17:13:57.30
web系やるならCはコンソールで何か作れる程度に抑えて、JavaやPHPを極めたほうが仕事としては良いですか?
388 :デフォルトの名無しさん2011/04/23(土) 17:16:56.56
>>387
そうですね。
C は必要になったら思い出せる程度で良いと思います。
それと SQL と JavaScript も習得すると良いと思います。
393 :デフォルトの名無しさん2011/04/23(土) 17:51:18.88
もうC++の栄光の時代は終わった
すでに使えるならともかく、今から覚える言語としては・・・
396 :デフォルトの名無しさん2011/04/23(土) 18:24:23.26
サーバサイドで生き残り、スマートフォンで生き残り
とにかくしぶとい印象があるから
397 :デフォルトの名無しさん2011/04/23(土) 18:24:28.96
Androidアプリ作りたいんですけどJavaって今からならやらないほうがいいですかね?
398 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/23(土) 18:53:04.84
組み込みにおけるCのようにモバイルの主流はJavaじゃないの
399 :デフォルトの名無しさん2011/04/23(土) 20:58:58.39
>397
Androidアプリをやりたいなら、Javaをやらざるを得ない。

>398
レイヤーによる。
アプリ層はJavaが多いが、下回りはCが多いのではないか。
401 :デフォルトの名無しさん2011/04/23(土) 21:47:03.13
質問ですがWindowsのシステムはC言語で作られているんですか?
それともコンパイラによってC言語が使えるようになってるだけですか?
412 :デフォルトの名無しさん2011/04/24(日) 00:50:27.67
>>401
C++
403 :デフォルトの名無しさん2011/04/23(土) 21:58:44.81
一番低レベルな何言語、どんなOSにも共通する言語って何なんですか?
また言語を開発するときその低級言語を理解してないと言語の開発はできないのでしょうか?
404 :デフォルトの名無しさん2011/04/23(土) 22:07:49.90
>>403
1行目:そんなものは存在しない
2行目:そんなことはない
405 :デフォルトの名無しさん2011/04/23(土) 22:10:08.98
windowsの機能を使うには、winapiやダイレクトXでいいだろ。
それより低級なアクセスはせず言語作れるだろ。
408 :デフォルトの名無しさん2011/04/23(土) 23:01:38.17
フリーの逆コンパイラは一応あるけど
雰囲気が掴めるかな〜程度だったな
409 :デフォルトの名無しさん2011/04/23(土) 23:25:49.71
winAPIって難しいよね〜
普通に構造体やら配列のポインタやら使いこなせないと分からん。。。
410 :デフォルトの名無しさん2011/04/23(土) 23:39:08.04
>>409
全部を理解しようと思わずに、やりたいことがあればその度調べながらって割り切ってやればそんなに難しくない
ってかまともにやってられないわ
414 :デフォルトの名無しさん2011/04/24(日) 12:56:17.64
あかん、俺、どうもプログラムだけは性に向いてないみたいだわ。

10年やっても、どうにもならんかった。
416 :デフォルトの名無しさん2011/04/24(日) 14:19:46.50
ループ処理内で1つの条件を満たした時の値を変数に代入したいのですが
1回目見つかったとして、2回目が見つかったとき、変数の値に1回目、2回目の値と保存させたいのですが
どうすればいいでしょうか?
423 :デフォルトの名無しさん2011/04/24(日) 15:01:37.75
>>421は>>416-417とは別人だw
424 :デフォルトの名無しさん2011/04/24(日) 15:12:46.50
>>416
>ループ処理内で1つの条件を満たした時の値を変数に代入したいのですが
>1回目見つかったとして、2回目が見つかったとき、変数の値に1回目、2回目の値と保存させたいのですが

質問者の意図を判断しかねるんだが。
条件によるデータの検索なのか、
値を使った計算値が条件を満たすか、とか。
前者なら、同一ループ内で複数見つかる事もあるだろうし。

代入したい値というのが、満たしたときのループの条件なのか、
それとも条件を満たす、見つけたデータなのかもはっきりしない。
425 :デフォルトの名無しさん2011/04/24(日) 15:50:08.00
>>424
条件によるデータの検索です

代入したい値は見つけたデータです
417 :デフォルトの名無しさん2011/04/24(日) 14:23:21.58
変数Xに代入するとして
X += X の式で継続的に値が入っていきますか??
420 :デフォルトの名無しさん2011/04/24(日) 14:28:13.77
>>417
何で自分でやってみないの?
418 :デフォルトの名無しさん2011/04/24(日) 14:23:29.98
値を入れる配列と、いくつ入れたかを保存する変数を用意する
419 :デフォルトの名無しさん2011/04/24(日) 14:26:48.74
+=演算子をオーバーロードすればおk
421 :デフォルトの名無しさん2011/04/24(日) 14:32:59.38
>>419
C言語でのオーバーロードのやり方を教えてください
426 :デフォルトの名無しさん2011/04/24(日) 15:56:12.91
data[N], data_cnt = 0;

for( ; ; ) {
if(データ発見) data[data_cnt++] = 見つけたデータ;
}
427 :デフォルトの名無しさん2011/04/24(日) 16:04:58.75
>>426
ありがとうございます
配列を使用するみたいですね
配列を勉強してきます
430 :デフォルトの名無しさん2011/04/24(日) 16:37:18.70
スレチになるとは思うけど、ふと思ったんで書いてみる。

fseek関数ってファイルの先頭と末尾の両方を指定できるんだから、
現在のメモリ番地を返却できるようにしてくれれば
簡単にファイルサイズ分かる気がするのは気のせいだろうか。
431 :デフォルトの名無しさん2011/04/24(日) 16:41:43.75
>>430
そうだな ftell みたいなのがあればなぁ・・・あれっ
432 :デフォルトの名無しさん2011/04/24(日) 19:54:29.21
fseek(SEEK_END)してftell()するイディオムは、対象がストリームやテキストモードの場合に破綻するので要注意。
433 :デフォルトの名無しさん2011/04/24(日) 20:12:47.30
素直にstat使えばいいのに。駄目なの?
435 :デフォルトの名無しさん2011/04/24(日) 20:32:07.70
>>433
stat()はC標準関数じゃないよ
437 :デフォルトの名無しさん2011/04/24(日) 22:31:24.49
ファイルシステムが環境によって異なるからなんだろうが、
ファイルサイズくらいは標準的な取得方法があってもいいよね?
439 :デフォルトの名無しさん2011/04/24(日) 22:52:32.68
その調子であらゆるプラットフォームについて書いていってください
441 : ◆QZaw55cn4c 2011/04/24(日) 23:11:40.11
関係ないかもしれないけれども、
win32api で既存のファイルにある内容をアペンドしようとして、
SetFilePointer(, , ,FILE_END) -> WriteFile() すると、ゴミが混入してしまいました。
SetFilePointer(f, 0, NULL, FILE_END) でも SetFilePointer(f, 1, NULL, FILE_END) でもうまくいかない。もしかして -1? まさか‥‥‥。

苦肉の策として
s1 = GetFileSize(f, &s2);
SetFilePointer(f, s1, (PLONG)&s2, FILE_BEGIN);
WriteFile(f, p, strlen(p), &n, 0);
にしてしまったんですが、正解はなんでしょうか?
443 :デフォルトの名無しさん2011/04/25(月) 12:05:44.75
yonmoji.exeって名前のプログラムをコマンドプロンプトで実行すると4行の文字列を出力します

あああああ
いいいいい
ううううううう
えええええ

これを3行目のみ背景色を変更する方法はございますでしょうか?
445 :デフォルトの名無しさん2011/04/25(月) 12:40:36.36
446 :デフォルトの名無しさん2011/04/25(月) 12:46:55.58
>>443
C標準ではそんな機能はありません。Windowsなんかを使っているなら>445でもいいとして、
そうでないなら環境を明記の上、環境依存もOKのスレでどうぞ。
447 :デフォルトの名無しさん2011/04/25(月) 12:47:13.57
>>445
うはw難しいですねw挫折しました
448 :デフォルトの名無しさん2011/04/25(月) 12:56:33.30
>>447
難しかったらここへ行って聞いて見ろ
サンプルコードを書いてくれるかもしれん

Win32API質問箱 Build92
http://hibari.2ch.net/test/read.cgi/tech/1293326606/

>>446
C標準では色を変える機能はないよな
GUIもバリバリの環境依存だし
449 :デフォルトの名無しさん2011/04/25(月) 20:06:11.11
visual c++ 2010使ってWin32コンソールアプリケーションで空のプロジェクトで
C言語の勉強してるんだけど、
ファイル入出力(fopen,fclose等)がうまくいかない
コンパイルとその後の実行はできるんだけどファイルが生成されない
どうしてか分かる人いますか 
↓ソース
451 :デフォルトの名無しさん2011/04/25(月) 20:10:34.28
カレントディレクトリとexeのあるディレクトリの違いに注意。
454 :4492011/04/25(月) 20:16:56.37
あら?すまそ
実行自体失敗してました
どっかおかしいだけだ・・スルーでおねがいします
455 :4492011/04/25(月) 20:23:14.97
すまそ、パス指定っていうかディレクトリ1階層まちがってた
だけだった
457 :デフォルトの名無しさん2011/04/25(月) 21:48:18.67
VC++2010Expressなんですけどプロジェクト作って下のコード書いてF5押しても実行できません
#include <stdio.h>

int main(void)
{
printf("test");
return 0;
}
459 :デフォルトの名無しさん2011/04/25(月) 21:56:54.66
>>457
Shift+F5で実行してみろ
458 :デフォルトの名無しさん2011/04/25(月) 21:55:46.65
実行できないんじゃなく、あっという間に終了してるの
気づいてないだけじゃないの?
460 :デフォルトの名無しさん2011/04/25(月) 22:08:16.15
なんか下のほうのスペースに文章が出てきて実行できないんです
Shift+F5押してみましたが反応しないのでF5押してみました
こういうふうにでてました
cuimenu.cpp
cuimenu.cpp(1): warning C4627: '#include <stdio.h>': プリコンパイル済みヘッダーの使用を検索中にスキップされました
ディレクティブを 'StdAfx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します
cuimenu.cpp(8): fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "StdAfx.h"' をソースに追加しましたか?
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
461 :デフォルトの名無しさん2011/04/25(月) 22:12:09.33
>>460
cuimenu.cppの頭に
#include "StdAfx.h"
を追加してください
463 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/25(月) 22:23:46.71
空のプロジェクトにせずにwindowsアプリケーションかなんかでプロジェクト作っただろ
だから素人はLinux+viでgccしろと言ってるんだ
464 :デフォルトの名無しさん2011/04/25(月) 22:29:14.46
テキストエディタでC言語の勉強してきてStdAfx.hは出てこなかったのですがVC++の場合は特別に書くまりなのでしょうか?
465 :デフォルトの名無しさん2011/04/25(月) 22:34:12.72
aの値が100だったらループから抜けたいのですが
ifに書き換えずに、swtichを使う場合どうやって抜け出せばよいでしょうか?

int a = 100;
while(1){
switch(a){
case 100:
break;
}
}
467 :デフォルトの名無しさん2011/04/25(月) 22:36:00.20
>>465
gotoで。
471 :デフォルトの名無しさん2011/04/25(月) 22:46:18.12
>>465
#include <stdbool.h>

int main() {
  bool f = false;
  int a = 100;

  while(1) {
    switch(a) {
      case 100:
        f = true;
        break;
    }
    if(f) break;
  }
}
466 :デフォルトの名無しさん2011/04/25(月) 22:35:13.43
プロジェクトの設定で、プリコンパイル済みヘッダーをOFFにすればスッキリするよ。
468 :デフォルトの名無しさん2011/04/25(月) 22:41:14.07
int a = 100;
こうだな

while(flag){
switch(a){
case 100:
flag=0;
break;
}
}
478 :デフォルトの名無しさん2011/04/25(月) 22:55:53.00
gotoとか禁じ手。
>>469は汚い。
よって>>468優勝、終わり
481 :デフォルトの名無しさん2011/04/25(月) 23:01:16.18
>>478
フラグよかgotoのほうがいい。
469 :デフォルトの名無しさん2011/04/25(月) 22:43:22.16
while (1) {
switch (a) {
case 100:
break;
default:
continue;
}
break;
}
473 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/25(月) 22:49:27.57
じゃあ>>469の勝ちということで
476 :デフォルトの名無しさん2011/04/25(月) 22:52:40.21
flag を使う事に突っ込む人の解答は見た事が無いのであった
477 :デフォルトの名無しさん2011/04/25(月) 22:52:41.05
その条件ならラベルは変数でも関数でもないからgotoでもいいはず
480 :デフォルトの名無しさん2011/04/25(月) 22:57:23.23
caseが1個だけならそれらでも問題ないけどswitchで1個前提のコードはきもいよ
482 :デフォルトの名無しさん2011/04/25(月) 23:02:08.37
getchで矢印の上キーを取得したとき、判定は72と0x48のどっちがいいでしょうか?
483 :デフォルトの名無しさん2011/04/25(月) 23:05:08.90
>>482
どっちでもいいよ。
あとマジックナンバー使わないようにな。
485 :デフォルトの名無しさん2011/04/25(月) 23:09:18.62
プログラムの途中にとつぜん出てくる 72 とかの意味わかんない数字のこと
487 :デフォルトの名無しさん2011/04/25(月) 23:44:55.82
int sln(char *str){
   int sln=0; for(;str[++sln];);
}

これは何をするプログラムでしょうか?
コンパイラ: bcc32
488 :デフォルトの名無しさん2011/04/25(月) 23:46:20.23
>>487
strlen
489 :デフォルトの名無しさん2011/04/25(月) 23:47:43.74
>>488
正解。 2byte文字にしか対応してないが
入力されたChar配列(文字列)の文字数をカウントして返す。
490 :デフォルトの名無しさん2011/04/25(月) 23:49:44.54
では>>487がbcc32使用で正しく動作する理由を簡潔に説明してください
492 : 忍法帖【Lv=19,xxxPT】 2011/04/25(月) 23:50:58.88
>>487
コンパイルエラー
491 :デフォルトの名無しさん2011/04/25(月) 23:50:11.79
returnしてないけど問題ないの?
496 :4872011/04/25(月) 23:56:10.67
>>491
大丈夫だ、問題ない。

正解は
int slnはインラインじゃない自動変数であるから特に設定がない限りはEAXレジスタが使われる
よって、値が正常に返される
らしい
494 :4882011/04/25(月) 23:51:58.98
strlen じゃなかった
str[0]=='\0' の時の動作が違った

うーん bcc だと最適化に関わらず
sln には EAX が使われるのは確定なのかも分からん
495 :デフォルトの名無しさん2011/04/25(月) 23:52:24.35
returnを省略した場合は第一局所変数の値が返るから問題ない
501 :デフォルトの名無しさん2011/04/26(火) 00:00:35.34
>>495-496
thx
規格書の該当部分が見つからないので
暇見て自分で試してみる
510 :デフォルトの名無しさん2011/04/26(火) 02:10:23.40
>>495
処理系によっては、たまたま期待通り動くだけでしょ
Cリファレンスマニュアルいわく

>プログラムの制御が return 文に出会わずに関数本体の終わりに到達したときの効果は、
>式のない return 文が実行されるのと同じである。
>関数の返却値の型が void でないと、その振る舞いは未定義である。
497 :デフォルトの名無しさん2011/04/25(月) 23:58:07.09
warningを無視すんなって
500 :デフォルトの名無しさん2011/04/26(火) 00:00:15.26
>>497
もはやShortCoderの世界だから仕方ないさ
498 :デフォルトの名無しさん2011/04/25(月) 23:58:11.15
自分の環境では一応に正常にコンパイルされた。

bcc32とC言語を始めよう
502 :デフォルトの名無しさん2011/04/26(火) 00:01:18.93
馬鹿なコンパイラは兎も角、最適化でループごと消えてなくなる悪寒。
504 :デフォルトの名無しさん2011/04/26(火) 00:03:18.06
で、bccでこのコードがエラー出ずにコンパイルできるのは
コンパイラ(bcc)のバグなのか・・?
505 :デフォルトの名無しさん2011/04/26(火) 00:04:31.76
まともに読める(読もうとする)奴がほとんどいないね。
508 :デフォルトの名無しさん2011/04/26(火) 00:40:10.79
>>505
トリビアが必要なコードって目にする機会がなくなってくからね
511 :デフォルトの名無しさん2011/04/26(火) 04:44:25.48
bcc32って環境の説明になってないだろ。
bcc55って書くならともかく。
514 :デフォルトの名無しさん2011/04/26(火) 07:32:41.16
そういや Borland C/C++ Compiler 5.5 の日本語版ってもう正規の入手は不可だっけ?
515 :デフォルトの名無しさん2011/04/26(火) 12:09:05.48
Windowsです
コマンドプロンプトに横いっぱいに文字列を並べたいのですが
何バイト分文字列を表示できるか調べる方法ってありませんか?
517 :デフォルトの名無しさん2011/04/26(火) 12:29:16.80
>>515
WinAPIスレ辺りへどうぞ。
519 :デフォルトの名無しさん2011/04/26(火) 13:20:17.63
画像ビューアを勉強で作りたいと思います
jpg画像を表示させたいのですが難しいでしょうか?
また、C#やJavaのほうが簡単でしょうか?
520 :デフォルトの名無しさん2011/04/26(火) 13:28:33.42
>>519
へぇ、「難しい」って言ったらやめんの?そんな考えならJAVAだろうがC#だろうがはなっから無理じゃね?
522 :デフォルトの名無しさん2011/04/26(火) 13:33:34.16
>>519
JAVAのほうが簡単です。
ということで、もうこのスレには用は無いでしょうから二度と来ないで下さい、以上。
527 :デフォルトの名無しさん2011/04/26(火) 13:48:19.23
>>520-527こんなにゴミレスで埋められるほうが迷惑
523 :デフォルトの名無しさん2011/04/26(火) 13:35:23.47
そうですか、理論的にCで作るのは面倒くさいというものを知っててのアドバイスだと思いますがjavaでやってみたいと思います
ただこのスレには来るなと指図される覚えはありません
525 :5192011/04/26(火) 13:40:37.04
わかりましたもう二度とみなさんのお邪魔をしないようにします。
生意気な口を利いて本当にごめんなさいでした。
526 :デフォルトの名無しさん2011/04/26(火) 13:45:15.68
Cの入門解説スレでJavaだの他の言語がどうたらと聴いてくる奴なんなの?
528 :デフォルトの名無しさん2011/04/26(火) 13:49:19.01
お前も同類だろカス
529 :デフォルトの名無しさん2011/04/26(火) 14:13:58.90
>>528
大丈夫、>527は自覚があるようだw
530 :デフォルトの名無しさん2011/04/26(火) 14:19:38.77
誘導されたんでこっちでききます

double pai = 3.14159;
int mon = 2;
float flt = 1.2f;

printf("%5.2hf\n", flt);



これを出力させると1.20になるようなんですがなぜですか?
%5.2hfの意味がイマイチ分かりません。
hとfはいいんですが、5.2ってのがなんのこっちゃです
533 :デフォルトの名無しさん2011/04/26(火) 14:29:12.13
>>530
どうでもいいけどそのhには何の意味もない。寧ろ害悪。普通に%5.2fと書くべき。
ついでに言えば、%gにももっと注目をw
534 :デフォルトの名無しさん2011/04/26(火) 14:47:27.12
>>532
1.20だから4文字ですよね
あと残り1文字はどうなっとりますか?

>>533
なぜですか?
535 :デフォルトの名無しさん2011/04/26(火) 14:55:45.25
>>534
もう仕様を読んでくださいよw
540 :デフォルトの名無しさん2011/04/26(火) 15:44:26.37
>>534
早くしてよ!
532 :デフォルトの名無しさん2011/04/26(火) 14:24:22.87
小数点以下を2文字で 全部で5文字になるように出力
536 :デフォルトの名無しさん2011/04/26(火) 15:00:05.03
では仕様が書かれたurlを教えてください
自分で読みます
537 :4882011/04/26(火) 15:00:47.40
>>536
manpage printf
538 :デフォルトの名無しさん2011/04/26(火) 15:32:04.00
>>535
おねがいしますよ

ちなみに>>536はニセモノです
539 :デフォルトの名無しさん2011/04/26(火) 15:35:08.01
5カラム分のスペースを取り、小数点以下2桁。
先頭の余った桁は空白文字を埋める。
541 :デフォルトの名無しさん2011/04/26(火) 16:48:27.54
正規表現を使いたいのですがC言語で使えますか?
544 :デフォルトの名無しさん2011/04/26(火) 18:38:44.47
>>541
シェルスクリプトと勘違いしてない?
543 :デフォルトの名無しさん2011/04/26(火) 18:34:27.90
標準では無いので、
鬼車とかのライブラリを用意する必要がある
545 :デフォルトの名無しさん2011/04/26(火) 19:38:15.26
正規表現ライブラリはCで書かれてるものもあるから、ある意味使えるといえなくも無い
546 :デフォルトの名無しさん2011/04/26(火) 19:50:25.46
メモ帳のカーソル前にある文字列を取得する方法はございますか?
例えばauioって書いてあったらプログラムでauioを取得したいのですが
547 :デフォルトの名無しさん2011/04/26(火) 19:54:20.57
>>546
環境依存質問OKかAPIスレで。
548 :デフォルトの名無しさん2011/04/26(火) 20:45:17.22
>>546
秀丸ならそういうマクロも簡単にかけるよ。
556 :デフォルトの名無しさん2011/04/26(火) 21:44:26.60
>>548
メモ帳を挙げましたが、テキストエディタにとらわれず取得したいと思います
549 :デフォルトの名無しさん2011/04/26(火) 21:16:56.60
getch() の後に何かを付け足せば入力待機のループになる
というのを何処かのサイトで見たのですが忘れました
知ってる方いたら教えてください
551 :デフォルトの名無しさん2011/04/26(火) 21:33:17.37
マクロって何ですか?良く出てくる言葉なんですが意味が分かりません。
ミクロの逆って事は分かるのですが、C言語においてどういいう意味ですか?
561 :デフォルトの名無しさん2011/04/26(火) 22:01:41.91
なぁみんな
>>519 = >>551
だとは思わないか?
567 :デフォルトの名無しさん2011/04/26(火) 22:40:54.42
>>561
昼間荒らしてたのがお前だと思ってるよ
552 :デフォルトの名無しさん2011/04/26(火) 21:35:15.05
◆QZaw55cn4cを叩いてる人たちは嫉妬してるんだな
完全に論破されてたもんなぁ
まぁみんなも◆QZaw55cn4cを援護頼むよ
554 :デフォルトの名無しさん2011/04/26(火) 21:40:20.28
>>552
あいつらは実力で勝てないからな
555 :デフォルトの名無しさん2011/04/26(火) 21:43:01.72
>>552>>554
コテ外してこんな所で吠えるなよ◆QZaw55cn4c
論破されてたのはお前の方だろ
モリタポ儲けという屁理屈も通用しなくなったし
負け犬◆QZaw55cn4c
557 :デフォルトの名無しさん2011/04/26(火) 21:47:49.39
>>552
俺も援護する
金儲けではなくモリタポ儲けであることが運営に認められたからな
559 :デフォルトの名無しさん2011/04/26(火) 21:55:29.10
>>557==◆QZaw55cn4c

>金儲けではなくモリタポ儲けであることが運営に認められたからな

いつ認められたのですか?
562 :デフォルトの名無しさん2011/04/26(火) 22:05:31.82
>>559
少しは自分で考えな
563 :デフォルトの名無しさん2011/04/26(火) 22:07:10.40
>>562
答えられないからって逃げるな◆QZaw55cn4c
553 :デフォルトの名無しさん2011/04/26(火) 21:36:19.51
>マクロ (コンピュータ用語) - コンピュータ用語の一種で、プログラム中の文字列を定義された規則に従って置換すること。
558 :デフォルトの名無しさん2011/04/26(火) 21:51:09.23
>>553
例を教えてください。
マクロって重要なんですか?
560 :デフォルトの名無しさん2011/04/26(火) 21:58:15.99
>マクロって重要なんですか?
使わなくても書けるけど
知ってると何かと便利...
565 :デフォルトの名無しさん2011/04/26(火) 22:13:22.87
◆QZaw55cn4c の俺俺スレがある限りアンチの負けだろ
566 :デフォルトの名無しさん2011/04/26(火) 22:27:08.16
>>565
スレ主は叩かれまくってるけどな
マゾかいな
568 :デフォルトの名無しさん2011/04/26(火) 22:44:40.50
>>566
あれだけ馬鹿にされたり叩かれまくりでも活動するんだから
根性はあるんじゃないか
いまどき珍しいよな
569 :デフォルトの名無しさん2011/04/26(火) 22:48:13.36
>>568
心を病んでる方にそういう人多いです。
571 :デフォルトの名無しさん2011/04/26(火) 23:11:52.36
>>568
あれは完全に頭が逝っとる
精神科に掛かるべきレベルだよ
572 :デフォルトの名無しさん2011/04/26(火) 23:15:17.15
PGには頭が逝っているに多いからな
573 :デフォルトの名無しさん2011/04/26(火) 23:17:48.68
>>572
違うよ
論理学をもっと勉強しようね

頭が逝ってるPGは多いが
PGが必ずしも頭が逝っているとは限らない
逆は必ずしも真ならず

◆QZaw55cn4cはPGでないにも関わらず頭が逝ってるけどな
576 :デフォルトの名無しさん2011/04/26(火) 23:26:57.68
キチガイと天才は紙一重って言うしな
でも、PGには頭が逝っているだけのが多いよな
577 :デフォルトの名無しさん2011/04/26(火) 23:36:50.93
>>576
それ逆
対人関係の多い仕事に就けないから、文句を言わないコンピュータ相手に
PGするようになった人種がかなり紛れ込んでいる
578 :デフォルトの名無しさん2011/04/26(火) 23:45:59.46
PG?
コーダーだろ
上から降りてきた仕様書を黙々とコードに落とす作業してるのは
594 :デフォルトの名無しさん2011/04/27(水) 11:16:21.64
>>578
設計とプログラミングは不可分ですよ。
どちらかしかしてない人は結局良いものはつくれないでしょう。
579 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/26(火) 23:48:24.90
そんなよくできた仕様書見たことない
582 :デフォルトの名無しさん2011/04/27(水) 00:09:25.54
>>579
昔はそういう時代があったそうだよ。
その代わり、仕様書が上がるまで相当期間を費やされて、コーダーはほんとに必死でコードに落とすだけ。
50代くらいのコボラーはそういった世代じゃないかな。仕様書にクソうるさい人とかいないかい。
580 :デフォルトの名無しさん2011/04/26(火) 23:56:14.93
対人関係苦手な奴に限って問題解決能力だけはずば抜けてる奴いるよなw
まぁ俺なんだけどw人と喋らなくても頭で色々考えてるから人の気持ちが
分からなくても人と共有してるものを介すとコミュニケーションが取れた
りする。

でも対人関係も得意で問題解決能力も凄い人もたくさんいる^^
584 :デフォルトの名無しさん2011/04/27(水) 00:36:06.36
>>580
そういうのをアスペルガー症候群って言うんだよ^^
職場では嫌われ者だよ
581 :デフォルトの名無しさん2011/04/27(水) 00:04:50.13
クライアントと熟練工の分業に変なメンタリティを持ち込んで
現場が見えてないエライ人vs周りが見えてない作業員という
協調すべきが敵対する変なねじれ構造を形成する
我が国の悪しき生産特性がここにもあるってだけだ
583 :デフォルトの名無しさん2011/04/27(水) 00:13:32.67
良く分からん。

コードに落とすってどういうこと?

エンジニア プログラマー コーダーといることはわかるが
役割分担を教えてくれ。
585 :デフォルトの名無しさん2011/04/27(水) 00:56:40.03
>>583
つ広辞苑
591 :デフォルトの名無しさん2011/04/27(水) 03:12:08.68
>>583
設計書がプログラムとほぼ1対1のレベルで書かれていたらしいよ。
たとえばこんな感じ。

変数Aに3を入れる。
関数Aを呼ぶ、引数は変数Aと、定義値のHOGE
戻り値が-1なら
 エラーログ出力関数を呼ぶ。引数は"〜〜に失敗しました。"
 -1を返却する
関数Bを呼ぶ、引数は…

コーディングから実行できるまでにかかる時間や資源が今では考えられないぐらいかかる時代があったようだよ。
593 :デフォルトの名無しさん2011/04/27(水) 10:58:15.59
>>591
http://dvamp.blog62.fc2.com/blog-entry-22.html
今でもそういう設計書書いてるところあるみたい。
598 :デフォルトの名無しさん2011/04/27(水) 13:06:24.06
>>593のリンク先の「設計書」は、別のコードに記述されていた「コメント」を
羅列したって感じw
602 :デフォルトの名無しさん2011/04/27(水) 20:25:48.54
>>593
うちもこんな設計書もらって実装したり
こんな設計書書いたりしてるけど
まったく意味ないよな
こんなのレビューするくらいならさっさと実装してコードレビューしたほうが
問題点もすぐわかってましなのに
586 :デフォルトの名無しさん2011/04/27(水) 01:14:47.26
要件を仕様に落とし
仕様を設計に落とし
設計を実装に落とし
そういえば何で落とすっていうんだ?ウォーターフォールとかV字のイメージ?
587 :デフォルトの名無しさん2011/04/27(水) 01:18:26.77
>>586
杮落し
落成式
一件落着
588 :デフォルトの名無しさん2011/04/27(水) 01:50:09.66
>>586
トップダウンアプローチだからでないの
589 :デフォルトの名無しさん2011/04/27(水) 02:08:10.57
職種のランクを意識してんでしょ
ランクの高い方から低い方に落ちていく
600 :デフォルトの名無しさん2011/04/27(水) 13:56:53.46
板間違えたのかと思った。UNIX板にもそっくりなキチガイが降臨してた。w
春先は増えるねえ。
http://hibari.2ch.net/test/read.cgi/unix/1290209379/631
604 :デフォルトの名無しさん2011/04/27(水) 20:51:00.12
コードから起こすんじゃなくて、先にこのレベルの設計書を作っているとしたら、
設計書を作る方が奴隷であることは明らか。
その奴隷は奴隷の割りに知恵が働き、一回コードを書いて設計書を起こしているかもしれないが、
使われないコードを書いている行為はやはり奴隷である。
605 :デフォルトの名無しさん2011/04/27(水) 21:56:41.13
ただ働きの話かと思ってらっしゃる方がおひとりいらっしゃいますね
607 :デフォルトの名無しさん2011/04/28(木) 02:05:29.50
IBMのエンジニアってプログラミングしない(出来ない)人が多い
社内でプログラミング教育しないのはIBMの流儀らしいね
608 :デフォルトの名無しさん2011/04/28(木) 03:09:28.35
すみません、コンパイラ LSI C-86 Ver 3.30cについて
コンパイルがうまくいかないのでお聞きしたいです。

DLしてから、Cドライブに直接 Lsic86 というフォルダ名で置き
その中のBINフォルダ内にあるLCCファイルの書き換えも
済みました(XA→XC LA→LC IA→IC と書き換え)

さらにシステムから、環境変数→Pathの設定から
;C:\Lsic86\bin; と書き加えて変更適用。DOS画面でpathコマンドにより
書き込まれてる事を確認。

以上を行ったうえで再起動してから
メモ帳で簡単なprint文を作成し、拡張子を.cにして保存。
Lsic86フォルダにmySrcフォルダを作成し、そこに切り貼り。
DOS画面でcdコマンドによりmySrcフォルダをカレントにしておく。

いよいよコンパイル(test.cとする)というところですが、lcc test.c としても
実行されません。エラー文も出ず、何も表示されないというかバグるというか。
exeファイルは一応作成されてますが、testで実行しても何も表示されません。
書籍のCDROMに入ってるサンプルプログラムでも無理でした。

手順に特におかしいところは無いと思うのですが、もし何か見落とし
あるいは設定などに問題があればご指摘いただけると幸いです。
OSはXPです。
612 :デフォルトの名無しさん2011/04/28(木) 04:48:33.15
PGと言えば、プリングルズの今後が心配だな。
品質落ちないと良いんだが。

>>608
悪いことは言わないから
Turbo C 2.01 にしておきなさい。
統合開発環境付きで初心者にもオススメだよ。
609 :デフォルトの名無しさん2011/04/28(木) 03:11:49.20
ちなみにtestで作ったコードは

#include<stdio.h>

void main(){
printf("hello C \n");
}


です。
611 : 忍法帖【Lv=21,xxxPT】 2011/04/28(木) 04:16:06.61
>>609
>610じゃないけど、設定を元に戻してそのままLSI-C86は忘れるのが吉。
どうしてもLSI-C86を動かしたいと言うのなら原因究明に付き合ってもいいけどはっきりいって、虚しいだけ。
その手間掛けるくらいなら、素直に今時の無料コンパイラを入手した方がいい。
623 :デフォルトの名無しさん2011/04/28(木) 16:09:16.45
>>619

ふんふん、>>609はゴミプログラム、書いた>>609もゴミ人間という認定ですね。
613 :デフォルトの名無しさん2011/04/28(木) 06:10:48.72
アセンブラのhltの制御不能版はありますか?(無限ループを除く)
614 :デフォルトの名無しさん2011/04/28(木) 06:40:24.58
test.exeをつくっててwindowsのtest.exeを呼んで何も起きないと言っているオチ?
616 :デフォルトの名無しさん2011/04/28(木) 07:34:17.36
ぜんぜん関係ないけどWindowsの場合、mainはintで正常終了時return 0;するって決まりなかったっけ?
619 :デフォルトの名無しさん2011/04/28(木) 15:45:36.15
>>616
windowsに限らずCの基本
これを守らないCプログラムはすべてゴミ
624 :デフォルトの名無しさん2011/04/28(木) 16:15:38.83
>>616
WindowsはGUIでは戻り値が何であろうと無視される
CUIの時には意味がある
625 :デフォルトの名無しさん2011/04/28(木) 16:18:09.89
>>624
嘘いうな
626 :デフォルトの名無しさん2011/04/28(木) 16:18:58.44
>>624
無視されねえよw
633 :デフォルトの名無しさん2011/04/28(木) 17:52:28.60
>>625>>626
WinMain()だぞ
634 :デフォルトの名無しさん2011/04/28(木) 17:53:08.63
>>633言い訳が苦しいぞ
637 :デフォルトの名無しさん2011/04/28(木) 18:06:55.15
>>634
ほお
じゃあGUIをmain()で書いてみろよ
641 :デフォルトの名無しさん2011/04/28(木) 18:21:47.29
>>637
#include <windows.h>
int main(){
MessageBox(NULL,TEXT("Hello"),TEXT(""),MB_OK);
return 0;
}

cl main.cpp /link /SUBSYSTEM:Windows /ENTRY:"main" user32.lib
645 :デフォルトの名無しさん2011/04/28(木) 18:29:06.09
>>637
え? え?? おまえできないの???
647 :デフォルトの名無しさん2011/04/28(木) 18:33:44.66
>>641
/ENTRYでentryポイントって指定できるんだ
しらなんだ
649 :デフォルトの名無しさん2011/04/28(木) 18:37:44.05
>>641
つか引数のカンマの後にどうしてスペースを入れないかね。。
int main(void)としないのも気に入らない。

MessageBox(NULL, TEXT("Hello"), TEXT(""), MB_OK);
650 :デフォルトの名無しさん2011/04/28(木) 18:38:07.58
>>648
>>647==>>638
で俺>>637じゃない
658 :デフォルトの名無しさん2011/04/28(木) 19:55:55.62
>>624 に言わせると、CUI 。
660 :デフォルトの名無しさん2011/04/28(木) 20:29:09.29
624 名前:デフォルトの名無しさん [sage]: 2011/04/28(木) 16:15:38.83
>>616
WindowsはGUIでは戻り値が何であろうと無視される
CUIの時には意味がある
665 :デフォルトの名無しさん2011/04/28(木) 20:41:51.98
>>664
いやもしかしたら案外>>624は◆QZaw55cn4cかもな
何となくそんな気がする
620 :デフォルトの名無しさん2011/04/28(木) 15:50:59.15
というかvoid型は最初は無かっただけ。
最初からあったならmainはvoid型になっただろうね。
Javaみたいに。
627 :デフォルトの名無しさん2011/04/28(木) 16:20:18.94
main()←こういう風に書く奴も俺的にはちょっと気に入らん。
main(void)って書けよ、と言いたい。4文字程度キー入力ケチったところで意味が無い。
628 :デフォルトの名無しさん2011/04/28(木) 16:45:39.05
>>627
その二つは意味が違うだろ
629 :デフォルトの名無しさん2011/04/28(木) 16:49:25.44
>>628
宣言時は違うが、定義時には事実上同じ。
630 :デフォルトの名無しさん2011/04/28(木) 16:57:50.64
>>628
int main()とint main(void)の違い:
前者はC言語では関数呼び出しで引数のチェックをしない。
C++言語では引数が無いことを示す。

後者はC/C++言語とも引数が無いことを示す。
636 :デフォルトの名無しさん2011/04/28(木) 18:05:57.54
>>627
元来は main() だったんだよ
main(void) にしたところで main(0) みたいな呼び出しを禁止できるだけだ
たった4文字といえど手間感=文字数/意味ではやっぱり気に入らない

ただしスタートアップを main(void) 前提で作られてしまうと
main() は想定外になるのでしぶしぶその前提に従うことになる

あくまで本音とは違う
631 :デフォルトの名無しさん2011/04/28(木) 17:42:59.10
◆QZaw55cn4cのコード分かりやすいな
実際こんなコード書けるプログラマは高脳なんだよなぁ
635 :デフォルトの名無しさん2011/04/28(木) 18:00:00.71
void main()って書くと脆弱なアプリケーションが一丁上がりってこと?
638 :デフォルトの名無しさん2011/04/28(木) 18:14:28.87
GUIをmain()でってLinuxやOpenGLじゃあるような気がするが
どうなんだろ
651 :デフォルトの名無しさん2011/04/28(木) 18:40:05.35
>>638
win32 で普通にできるよアホ
639 :デフォルトの名無しさん2011/04/28(木) 18:17:06.93
Windowsって書いてあるんだけど
まあ俺が言いたかったのはOpenGLではなくて普通のWin32のGDI何かで
書いたら戻り値を使う事はないって事を言いたかっただけ
お前らなんでそんなにかみつきたいんだ?
人のあら探しをする事にしか楽しみを見つけられないのか?
642 :デフォルトの名無しさん2011/04/28(木) 18:24:47.99
>>641
>>639
リロード位してから書き込めよ
644 :デフォルトの名無しさん2011/04/28(木) 18:28:37.33
>>639
スレタイ読める?
643 :デフォルトの名無しさん2011/04/28(木) 18:25:54.27
女々しい奴だ
646 :デフォルトの名無しさん2011/04/28(木) 18:33:25.42
>>643
俺が女々しいんじゃなくてお前らがあら探しばかりする性格が悪い奴
ばかりって事だ
648 :デフォルトの名無しさん2011/04/28(木) 18:34:22.13
自己批判か
ご苦労
654 :デフォルトの名無しさん2011/04/28(木) 18:51:48.41
#include <windows.h>
int main(){
MessageBox(NULL, TEXT("Hello"), TEXT(""), MB_OK);
return 0;
}

cl /Tc"main.cpp" /link /SUBSYSTEM:Windows /ENTRY:"main" user32.lib
656 :デフォルトの名無しさん2011/04/28(木) 19:44:03.32
>>654
これってGUIっていうの?
657 :デフォルトの名無しさん2011/04/28(木) 19:53:19.82
>>656
立派なGUIだよ。
659 :デフォルトの名無しさん2011/04/28(木) 20:27:32.51
人のあら探しをするのが男らしいと思っている馬鹿ども
お前の方が余程女々しい
663 :デフォルトの名無しさん2011/04/28(木) 20:34:03.25
本人も間違っていたことん気づいたからあら捜しなんて言葉使ったんでしょ
そっとしといてやれよ
664 :デフォルトの名無しさん2011/04/28(木) 20:36:44.59
言い返せなくなると「女々しい」の一点張り
◆QZaw55cn4cと同じくらい糞
666 :デフォルトの名無しさん2011/04/28(木) 21:09:51.83
まだC言語の講義を1回しか受けてない初心者です
宿題を家でやろうとしたのですが説明が全部学校の動作環境で説明されており分かりません
とりあえずCygwinと言うコンパイラを導入して説明どおりに「gcc ファイル名.c」と入力しコンパイラしようとしたのですが
「gcc: ファイル名.c: No such file or directory
gcc: no input files             」と出てきました
これはどういうことなのでしょうか?
ファイルやディレクトリ移動してから入力すれば宜しいのでしょうか?
667 :デフォルトの名無しさん2011/04/28(木) 21:13:47.05
>>666
そのディレクトリにファイルが無い
作れ
668 :6662011/04/28(木) 21:21:31.05
開いた直後はどこのディレクトリのことを指しているのでしょうか?
またディレクトリ移動系のコマンドとかはないのでしょうか?
670 :デフォルトの名無しさん2011/04/28(木) 21:25:32.84
>>668
cygwin のプロンプトで pwd と打てば現在いる(cygwin内の)ディレクトリ名が出ます
たぶん home の中のユーザ名のディレクトリです
移動は cd コマンドで出来ますが、cygwin ディレクトリの外に出るのは少々面倒です
669 :デフォルトの名無しさん2011/04/28(木) 21:25:26.72
pwd
pushd
671 :6662011/04/28(木) 21:29:48.06
>>669-670
ありがとうです
とりあえずgccコマンドは使えたので頑張ってみます
672 :デフォルトの名無しさん2011/04/28(木) 21:32:25.70
> 移動は cd コマンドで出来ますが、cygwin ディレクトリの外に出るのは少々面倒です

cd /cygdrive/c
うーん、面倒だなw
677 :デフォルトの名無しさん2011/04/28(木) 22:22:54.63
>>672
バッチファイルにしちゃえよ
673 :デフォルトの名無しさん2011/04/28(木) 21:51:56.34
いや、実は何が面倒って、俺が説明するのが面倒なんです・・・ ごめんなさい
mount コマンドでマウントポイントの一覧が見れますけど、C: が /cygdrive/c にマウントされてるんですよ・・・と言うだけで理解してもらえればいいんですが
674 :デフォルトの名無しさん2011/04/28(木) 21:59:49.32
といわずとも、/cygdrive配下に各ドライブごとのディレクトリがあるからそっちを見てね、でいいんじゃないの?
675 :デフォルトの名無しさん2011/04/28(木) 22:09:28.96
動いた後のexeファイルのdatファイルを作らなければならないのですがどのように作るのでしょうか?
適当なサイトでCygwinのコマンド一覧を見たのですがらしきものがありませんでした
これはコマンドプロンプトのほうで作るのでしょうか?
678 :デフォルトの名無しさん2011/04/28(木) 22:24:44.89
>>675
一度ゆっくり深呼吸してから口に出してスレタイ読め。
679 :デフォルトの名無しさん2011/04/28(木) 23:07:35.36
>>675
Cygwin使っている人いますか? 5
http://hibari.2ch.net/test/read.cgi/win/1175419995/
680 :デフォルトの名無しさん2011/04/28(木) 23:15:04.82
>>678-679
すいません
コンパイルで検索かけてて見つからなかったのでありがたいです
682 :デフォルトの名無しさん2011/04/29(金) 01:23:25.00
Cygwin とかありえんわ。
学習なら LCC-Win32 辺りにしときなさい。
商用利用しなければ無償だから。
686 :デフォルトの名無しさん2011/04/29(金) 01:39:09.51
Windowsの流儀ならmainじゃなくて
int _tmain(int argc, _TCHAR **argv)
だろ。
687 :デフォルトの名無しさん2011/04/29(金) 08:07:39.76
>>686
ちなみにそういうWindowsの流儀てどこ見りゃ分かるの?
688 :デフォルトの名無しさん2011/04/29(金) 08:29:44.02
そりゃMicroSoft公式サイトだろ。MSDNとか。
689 :デフォルトの名無しさん2011/04/29(金) 08:34:37.19
>>688
msdnって言語仕様とかはリファレンスがあるけど
「Windowsアプリケーションたるものこうあるべき」みたいな設計思想を綴った文書って見つからなくない?
694 :デフォルトの名無しさん2011/04/29(金) 12:35:14.37
>>689
Games for Windowsガイドラインとかあるけど、
こういうのじゃダメ?
690 : [―{}@{}@{}-] デフォルトの名無しさん2011/04/29(金) 10:24:10.87
static constな定数ってRAMを消費するんですか
constな定数はROMを消費するんですよね定数は全部constだけにしといた方がいいんすか
691 :デフォルトの名無しさん2011/04/29(金) 10:27:48.52
>>690
RAMに置かれるかROMに置かれるかは環境しだいだけど、
constがROMに置かれる環境ならstatic constもROMに置かれるんじゃないか?
692 :デフォルトの名無しさん2011/04/29(金) 12:27:23.15
どうやるとコンパイラはROMを配置したアドレスが分かるのかな?
693 :デフォルトの名無しさん2011/04/29(金) 12:31:43.19
RAM上で処理させる方法ってありますか?
695 :デフォルトの名無しさん2011/04/29(金) 12:38:08.29
>>693
環境依存だろ。
PCなら全部RAMだし、PS以降の最近のゲーム機もみんなRAMだよな。
698 :デフォルトの名無しさん2011/04/29(金) 13:51:49.60
>>695
お前このスレで環境依存ばっかり書いてる奴だろ
700 :デフォルトの名無しさん2011/04/29(金) 15:34:07.83
>>698
環境依存て言いたくて仕方ないお年頃なんだろw
696 :デフォルトの名無しさん2011/04/29(金) 12:45:34.43
■質問です。
DialogProc関数で
「IDC_LIST1のアイテムをダブルクリックしたとき」
のウィンドメッセージを教えてください。

ダブルクリック -> ダブルクリックされたIDC_LIST1のテキストをMessageBox関数で表示
という風にしたいと思っています。

http://yokohama.cool.ne.jp/chokuto/urawaza/message/
ここを探したのですが見つかりませんでした。

どういう風に書けばよいのでしょうか
697 :デフォルトの名無しさん2011/04/29(金) 12:57:32.08
>>696
名前からしてリストボックス? だとしたら LBN_DBLCLK
使い方はぐぐってください
699 :デフォルトの名無しさん2011/04/29(金) 14:24:26.73
環境依存でもいいけど環境依存なら環境を指定しろよ。
ファミコンやスーファミなら答えられるから。

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