C言語なら俺に聞け( ..
[2ch|▼Menu]
116:デフォルトの名無しさん
09/11/01 23:08:45
>>106
こういうこと?
違ったらごめん
URLリンク(0x72.net)

117:デフォルトの名無しさん
09/11/01 23:09:16
>103

もしかしてこうゆうことがしたい?

struct {
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB;
unsgined char buf[500];
} wholeParam;

こうやって関数の仮引数としてwholeParamを渡す。

118:デフォルトの名無しさん
09/11/01 23:26:13
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB;
unsgined char buf[500];
short int f(int x)
{
return x>=0 && x<6 ? ((short *)&BB)[x]:((short *)(buf+300))[x];
}

buf[300]〜[500] だと突き抜けるから、
多分 [299]〜[499]のつもりなんだろうけど、
一応、書いてある通りに。

119:デフォルトの名無しさん
09/11/01 23:30:09
加算の仕方が判らんよ。
数字としてなのか値としてなのか。
関数通せば整数一つから擬似的に不連続を繋げられるけど、
その後どうしたいのか不明確すぎる。

120:デフォルトの名無しさん
09/11/01 23:33:42
>>118
sizeof(struct BB)が12byteである保証は無いんで、運が悪ければハマるかもね。

121:デフォルトの名無しさん
09/11/01 23:34:54
それ以前に shor 型とやらが何バイトかなんて知らないんで。

122:100
09/11/01 23:41:06
>>108
>>116
ありがとうございます!
そういうことです!
自分のレス見返したら問題文書いてなくて
すいませんでした。

もう一度勉強してきます



123:デフォルトの名無しさん
09/11/01 23:41:39
#define shor short
#define unsigend unsigned
#define unsgined ;unsigned
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB
unsgined char buf[500];
unsigned short int f(int x)
{
return x>=0 && x<5 ? ((short *)BB.AAA)[x]:x==6?(BB.aa:(short *)(buf+300))[x];
}


124:デフォルトの名無しさん
09/11/02 07:44:03
_beginthreadexってBCCだと使えないの?

125:デフォルトの名無しさん
09/11/02 08:34:00
>>124
BCCでも使えるよ

126:デフォルトの名無しさん
09/11/02 10:04:53
どうやって

127:デフォルトの名無しさん
09/11/02 11:22:04
_ではじまるのはMS独自。

128:デフォルトの名無しさん
09/11/02 11:27:20
>>127
Wintelの場合、ライブラリファイルフォーマットは事実上共通
だろ?だからリンカで繋げられれば動く筈だが...ダメなのか?

129:デフォルトの名無しさん
09/11/02 12:20:53
つーか、そもそも_beginthreadex()がWinAPIのそれかどうか疑いもしない辺りが間抜け。

130:デフォルトの名無しさん
09/11/02 13:28:09
_ で始まってたり、すべて小文字だったりする関数名からして
明らかに API ではなく CRT なわけだが、それが何の関係が?

131:質問!
09/11/02 13:30:23
CRTって何ですか?

132:デフォルトの名無しさん
09/11/02 13:41:12
CathodRayTube:陰極管

133:デフォルトの名無しさん
09/11/02 13:54:31
Cランタイム(ライブラリ)
C実行時ライブラリ

134:デフォルトの名無しさん
09/11/02 14:03:14
>>128
条件付でYES。 VCのランタイムのソース見ればわかる。

_beginthread(ex) は、
VCで提供している標準関数をスレッドセーフにするために、 TLSを作ったり
浮動小数点関連や 構造化例外(API)→C++例外配送機構 の初期化を行った後
CreateThread を呼び出してる。 (callback 関数も内部のものを利用)
thread が死んだ時、上記の後始末もやってる。

つまり、標準関数周辺のランタイムも VC のを使うなら動くわけだが…

なお、BCC は同じ名前で似たような機能の _beginthread(ex) を自前で用意しているんじゃなかったかな

135:デフォルトの名無しさん
09/11/02 15:29:56
プログラム実習の授業に ついていけないんですが、素人にお勧めの入門書はないですか? 大学一年です

136:デフォルトの名無しさん
09/11/02 15:34:41
新版 明解C言語 入門編

137:デフォルトの名無しさん
09/11/02 15:55:20
関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになるって聞いたんだけど
本当なの?

138:デフォルトの名無しさん
09/11/02 16:06:36
>>137
うそだよ

・・・って一気に切り捨てるのもなんだから問おう。
> 関数内で定義した変数
ってなんだ?



139:デフォルトの名無しさん
09/11/02 16:14:27
ローカル自動変数のことだろ。
スタック上に確保される実装が多いから、
ネスト深くしすぎるとスタック溢れするからってことだろ。
まあ、普通に使う分には気にしなくていいよ。
ただし、ローカル自動変数にあまり巨大な領域を使うなってことは言える。

void func(){
int a[1000][1000][1000]; // こういうのは止めろってこと。
return;
}


140:デフォルトの名無しさん
09/11/02 16:17:23
>>139
ヒープでもありえねーよw

141:138
09/11/02 16:17:39
あー、そういいたいわけか。
まあ入門編スレだしな。

>>137
しかしローカル自動変数を削除っていったい何をどうしたいんだ?
そういう間違ったことを教えてきたクソに
聞くべきじゃないか?

142:デフォルトの名無しさん
09/11/02 16:19:10
便乗質問で申し訳ございませんが、
int a[1000][1000][1000]
が欲しい場合どうすればいいんでしょうか?
newでヒープに確保しようにも無茶ですよね。



143:デフォルトの名無しさん
09/11/02 16:20:54
>>142
mmap 使うべし

144:デフォルトの名無しさん
09/11/02 16:27:27
>>143
UNIX系OS独自のものですか?
クロスプラットフォームに使える
mmapみたいなものはありませんでしょうか?

C++ライブラリでもいいんで。

145:デフォルトの名無しさん
09/11/02 16:36:32
>>135
K&R とコンパイラのマニュアル、& スペシャルボーナスで Google
これでダメなら、せっかく頑張っても先はないから、他の科目で優をとるために力を回すべき

ちなみに C++ の禿本は K&R の3倍くらい難しい

146:デフォルトの名無しさん
09/11/02 16:46:51
>>144
ヒープに取れない→2次記憶としてファイルを使う→ファイル操作に縛りがでるかも?
で、汎用性の高いものは作りにくいんでないかな?

147:デフォルトの名無しさん
09/11/02 16:55:03
>>142
CでなくなってしまうがC++でプロキシクラスでoperator[]を
オーバーロードすればディスク上に巨大な配列が取れる

ただし激遅なのはもちろん

148:デフォルトの名無しさん
09/11/02 16:56:28
>>142
32bit 空間に 1GB なら基本的に無理はない
そういうオーダーでいくつも取る気なら 64bit を選択しれ

149:デフォルトの名無しさん
09/11/02 16:56:53
>>146
なるほど、確かに。

>>147
あー擬似的にクラスで実現するってことですか。


150:デフォルトの名無しさん
09/11/02 16:56:56
たった4GiB弱くらい、ヒープに確保しちゃえばいいじゃん。

151:デフォルトの名無しさん
09/11/02 16:58:25
>>148
型が int なんで… 微妙にアウト? (べき指数のベースが 1000 vs 1024 で違うけど)

152:デフォルトの名無しさん
09/11/02 16:58:52
>>149
Windows と Linux で関数名が違うから
自分でラッパー書けばいいよ

153:デフォルトの名無しさん
09/11/02 17:06:24
>>142
あとその巨大な配列の全部に要素を入れるのではなく
ガラガラな使い方をするのなら、疎行列(sparse matrix)という技法がある

154:142
09/11/02 17:09:20
みなさんありがとうございます。
なんか私の知識をずっと超えたレベルになって来たようで、
勉強不足を痛感する限りです。


155:デフォルトの名無しさん
09/11/02 17:13:36
>>141
ローカルスコープでも使わせたいのかしらん

void func () {
int foo; /* 関数全域で使う変数 */
{ int a; /* a を使うコード */ }
}

C++ なら コンストラクタ/デストラクタの都合があるので意味ありそうだけど(それでも PODはあやしいが…)
C でローカルスコープ脱出後に戻されるという保証はないよね?

156:デフォルトの名無しさん
09/11/02 17:21:52
>>155
というか
int a[1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000];
でもC/C++の仕様上は問題はないんだよね。
単に現実を見ろよって話なだけで。

157:デフォルトの名無しさん
09/11/02 17:25:49
int *************************i; とかでもいいよ

コンパイルされたコードを見ると笑えてくるけど

158:デフォルトの名無しさん
09/11/02 17:27:36
>>155
賢いコンパイラなら、以下のiとjは同じ領域を使いまわすかもしレナ。
void func(int para)
{
{
int i = para;
}
{
int j = para;
}
}

159:デフォルトの名無しさん
09/11/02 17:32:32
>>158
言えてる。
とくにそれが配列だったりしたらそうするかもしれないね。


160:デフォルトの名無しさん
09/11/02 17:39:12
>>158-159
領域の使いまわしが発生しているとすると、削除には該当しないんだよねー
(スコープ脱出後もメモリ上は存在している という意で)

なおさら
「関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになる」
の意図が見えないな

161:デフォルトの名無しさん
09/11/02 18:00:11
そんな意味不明なフレーズには、本人に聞けとしか言えんだろう

162:デフォルトの名無しさん
09/11/02 18:01:39
前にもそんなこと言って人の言うこと聞かなかった奴がいたな。

163:デフォルトの名無しさん
09/11/02 20:51:28
陰極管だと Cathod Tube だよなぁ
CRT なら陰極線管と翻訳すべきだった

164:デフォルトの名無しさん
09/11/02 21:03:19
エロい話かと思った

165:デフォルトの名無しさん
09/11/03 07:10:51
関数内でmallocした領域はfreeしないとメモリリークする
ってことでは


166:デフォルトの名無しさん
09/11/03 11:29:36
>>165
スタックオーバーフローにはならんのでは

167:デフォルトの名無しさん
09/11/03 12:29:47
ランレングス符号化のプログラムです
このプログラムだと最初の文字が評価されなくて困っています。
アドバイスをお願いします。
#include <stdio.h>
int runlength(int length, char *str_org, char* str_enc){

int i,j = 0;
char *RLE = str_enc;

while(length--){
if(str_org[i] == str_org[i + 1]){
i++;
j++;
}
else{
*str_enc++ = str_org[i];
*str_enc++ = '1' + j;
i++;
j = 0;
}
if(str_org[i] == 0)
break;
}
str_enc = 0;
return(*RLE);
}

168:続きです。
09/11/03 12:30:32
int main(void){
char buf_r[1024] = {0};
char buf_w[1024] = {0};
int length;

printf("文字列の入力\n");
scanf("%s",buf_r);
runlength(1024,buf_r,buf_w);
printf("[ランレングス符号化]\n%s\n",buf_w);
return(0);
}


169:デフォルトの名無しさん
09/11/03 12:37:24
ワロタ

170:デフォルトの名無しさん
09/11/03 12:37:57
int i = 0,j = 0;
とか?

171:デフォルトの名無しさん
09/11/03 12:44:55
C言語でポインタというのがありますが、
ゲームではどういうところで使われてるんですか?
具体例を教えてください。

172:デフォルトの名無しさん
09/11/03 12:45:45
メッセージの出力とか。

173:デフォルトの名無しさん
09/11/03 12:47:46
ファイルの読み書き

174:デフォルトの名無しさん
09/11/03 12:49:09
スタートアップ直後 DirectXの初期化で とか

175:デフォルトの名無しさん
09/11/03 13:07:36
>>167
>>116 を参考にしてみて

同じ学校なのかな?

176:デフォルトの名無しさん
09/11/03 13:37:00
最近は義務教育でC言語まで教えてるのか

177:デフォルトの名無しさん
09/11/03 13:47:39
>>167
暇だからやってみた。参考になれば
URLリンク(0x72.net)

178:デフォルトの名無しさん
09/11/03 16:06:44
最近のコンパイラってブロックの先頭じゃなくても変数の宣言できるの?

179:デフォルトの名無しさん
09/11/03 16:10:33
C99なら可

180:デフォルトの名無しさん
09/11/03 17:16:24
(int *)
↑*って何

181:デフォルトの名無しさん
09/11/03 17:17:05
asterisk だよ。

182:デフォルトの名無しさん
09/11/03 17:22:06
ポインタ型

183:デフォルトの名無しさん
09/11/03 17:36:07
(insert -> *)

184:デフォルトの名無しさん
09/11/03 17:48:51
ポインタ型ってなんだよ

185:デフォルトの名無しさん
09/11/03 17:58:05
(int *) = * を付けたら int 型

186:デフォルトの名無しさん
09/11/03 19:37:46
* = ア○ル

187:デフォルトの名無しさん
09/11/03 20:19:45
× アナル
○ アヌス

「アナル」は形容詞形。
「アナル○○○」と後ろに続く場合の活用形。
単体で名詞として使うなら「アヌス」とするべき。


188:デフォルトの名無しさん
09/11/03 20:24:04
あーネイティブの発音知らないわけねw
英語弱者って電子土方やってても辛そう

189:デフォルトの名無しさん
09/11/03 20:28:35
日本語表記においてはネイティヴの発音にいちいちあわせる必要はないだろw

190:デフォルトの名無しさん
09/11/03 21:12:34
>電子土方やってても辛そう

最近の2chって>>188みたいに無意味に突っ掛かってくるヤシが多いよな。
氏ねばいいのに。

191:デフォルトの名無しさん
09/11/03 21:14:50
どうでもいいことで盛り上がるなよ
みんなタヒねばいいのに
くそが

192:デフォルトの名無しさん
09/11/03 21:15:23
劣等感ゆえの攻撃性だから、哀れみをもってスルーするのがいいよ。

193:デフォルトの名無しさん
09/11/03 21:16:11
スレリンク(classical板)

194:デフォルトの名無しさん
09/11/03 21:17:35
>>191
仕様書ある夫さんですか?

195:仕様書ある夫さん
09/11/03 21:23:19
仕様書ある尾です

196:デフォルトの名無しさん
09/11/04 14:32:31
int Func(void* buf)
{
SOCKET SOCK = (SOCKET)buf;

voidポインタで渡された値をソケット型にキャストしたいんだけど
これだとうまくいかない

197:デフォルトの名無しさん
09/11/04 14:38:19
ヘッダファイル読め
SOCKETって構造体か何かじゃねーの?

198:デフォルトの名無しさん
09/11/04 14:38:41
SOCKET sock = ...... ;
Func( (void*) sock );
呼ぶ側はもちろんこうだよな?

199:デフォルトの名無しさん
09/11/04 14:39:29
SOCKETが何なのかわからんが、voidポインタの引数はキャスト不要じゃない?

200:デフォルトの名無しさん
09/11/04 14:46:16
ポインタ以外の何かなら必要じゃないか?w

201:デフォルトの名無しさん
09/11/04 14:51:26
初期化に定数以外って使えるの?

202:デフォルトの名無しさん
09/11/04 15:14:08
今の普通のCなら使える。

203:デフォルトの名無しさん
09/11/04 15:52:19
>>201
C FAQでも読んどけ

204:デフォルトの名無しさん
09/11/04 15:55:48
>>203
C FAQのどれ?項番教えて

205:デフォルトの名無しさん
09/11/04 16:12:13
int f(int a){return a+1;}
int main(){
int i = f(1); /* できるの? */

return 0;
}

206:デフォルトの名無しさん
09/11/04 16:16:25
>>201
少なくともGNU CとC++では使える。

207:デフォルトの名無しさん
09/11/04 16:17:41
BCC55でも使える

208:デフォルトの名無しさん
09/11/04 16:20:19
初期値だったら定数じゃないと無理だろうけど、
自動変数の初期化なんてのは所詮は普通に代入してるだけだからな。


209:デフォルトの名無しさん
09/11/04 18:43:10
初期化と代入は本来違うものであってしかるべきなんですが、まあ時代もかわりましたね。

210:デフォルトの名無しさん
09/11/04 18:56:02
>>205
できない、と思っているなら
なぜそう思うのかを開陳すべき

211:デフォルトの名無しさん
09/11/04 19:27:24
 ヽ('A`)ノ カイチン!
  (  )
  ノω|


 __[警]
  (  ) ('A`)
  (  )Vノ )
   | |  | |

212:デフォルトの名無しさん
09/11/04 19:54:14
while((*p++ = *q++) != 0 )
;
このコードの意味を説明してもらえませんか?
自己解釈
1 qの値をpに代入する
2 その値が0でなければwhileループ内を実行する
3 p及びqのアドレスを1インクリメントする
こういう意味ですか?


213:デフォルトの名無しさん
09/11/04 20:05:34
1. *qの値を*pに代入する
2. p及びqのアドレスを1インクリメントする
3. 1の値が0でなければwhileループ内を実行する

インクリメントは*qの値が0であってもそうでなくても行われる
whileループ内の文が実行されるのはインクリメントが行われた後

214:デフォルトの名無しさん
09/11/04 20:14:06
>>213
thx

215:デフォルトの名無しさん
09/11/04 20:51:17
>>212
そういうトリッキーなコードを書いてウケたのは1980年代
なんでw
30年前は兎も角現在そういうコードを書いてもプロセッサ
までその努力が全く届かないので

do{ *p=*q; p++,q++ }while(*q!='¥0');
とかの演算子の優先順位を記憶していない人でも読めるコード
で書くのが吉

216:デフォルトの名無しさん
09/11/04 20:53:53
>>215
うっせはげ
うっせはげ
うっせはげ

217:デフォルトの名無しさん
09/11/04 20:54:01
上のコードは等価じゃなかったw
for(;;){ *q=*p;p++,q++; if(*p=='¥0')break; }

218:デフォルトの名無しさん
09/11/04 20:56:03
なにそのトリッキーなコード。

219:デフォルトの名無しさん
09/11/04 21:02:01
よーし、>>218がもっと簡単なの書くぞ〜

220:デフォルトの名無しさん
09/11/04 21:02:42
>>215
あの程度をトリッキーという技量で論じた結果がそれ
演算子の優先順位くらい理解していないから間違えた

a = 1 + 2 * 3; の優先順位くらい頼むから理解してくれ
というのと五十歩百歩の域を出ない

221:デフォルトの名無しさん
09/11/04 21:05:12
>>217も間違っているしな

222:デフォルトの名無しさん
09/11/04 21:15:33
strcpy(p,q);

223:デフォルトの名無しさん
09/11/04 21:21:01
>>212
while(*p++ = *q++);
これで必要かつ充分

224:デフォルトの名無しさん
09/11/04 21:24:29
あれがトリッキーに見えるって他言語からCに入った人?

225:デフォルトの名無しさん
09/11/04 21:26:45
うちの職場じゃ見かけないねえ

226:デフォルトの名無しさん
09/11/04 21:29:33
>>221
ワロタ
本当だw

227:デフォルトの名無しさん
09/11/04 21:35:02
間違ってるとかワロタとかいいからちゃんと指摘してくれ
いえ、お願いします

228:デフォルトの名無しさん
09/11/04 21:36:33
>>227
自分で書いたんだろう
動作テストしてみな
ちゃんと動くかどうか

229:デフォルトの名無しさん
09/11/04 21:53:35
do{*p=*q;++p;++q;}while(*(p-1));
分解するとこんな感じか
普通に>>212のままの方がいいな

230:デフォルトの名無しさん
09/11/04 22:35:12
>>223
冥途の土産に持っていけ

231:デフォルトの名無しさん
09/11/04 22:53:13
要するにただの stos だろ

232:デフォルトの名無しさん
09/11/04 23:24:49
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .

記念

233:デフォルトの名無しさん
09/11/05 01:03:15
>>232
わかる

234:デフォルトの名無しさん
09/11/05 02:52:31
8Queensか

235:デフォルトの名無しさん
09/11/05 04:33:07
pとqがchar *型なのであればstrcpyが一番。
そうでなく、int *などなら>>223で充分。イディオムとして成立している書き方が読めないのは単に経験不足。
それでもトリッキーだというのなら、
while(*p++ = *q++) {
  ; /* 空 */
}
とでもしておけばいい。

236:デフォルトの名無しさん
09/11/05 05:07:39
ポインタを使えばアドレスを操作できるみたいだけどC言語ってアセンブリみたいに直接アドレスを指定して変えれる?

アドレス12345678の値をFBにせよ
みたいな。

こういうこと難しい?

237:デフォルトの名無しさん
09/11/05 05:42:28
>>236
簡単にできる。

238:デフォルトの名無しさん
09/11/05 10:18:25
*(char *)12345678 = 0xFB;
でいいのだろうか

239:デフォルトの名無しさん
09/11/05 10:24:45
>>236
* (char *) 0x12345678 = 0xfb;

240:デフォルトの名無しさん
09/11/05 10:26:05
あぁ

241:デフォルトの名無しさん
09/11/05 10:45:49
16進とは書いてないだろ。

242:デフォルトの名無しさん
09/11/05 10:50:58
アドレスって書いてあれば16進だと思うの普通じゃね?

243:デフォルトの名無しさん
09/11/05 11:09:29
プレフィックスもサフィックスもなく、[0-9] だけで構成された数字を見たら
16進ではない、と思うのが自然な飢餓する。

244:デフォルトの名無しさん
09/11/05 12:11:12
>>227
>>217の糞コードじゃ0がコピーされないだろ


245:デフォルトの名無しさん
09/11/05 14:08:28
for(;;) { *q=*p; if(*p=='¥0') break; p++,q++; }

246:デフォルトの名無しさん
09/11/05 14:17:46
アドレスを10進数で表記するような文献は見たことない

247:デフォルトの名無しさん
09/11/05 15:14:38
>>245
それだと最終的なp, qの値が違う
for(;;) {
*q=*p;
if(*p=='\0') {
p++;
q++;
break;
}
p++,q++;
}

248:デフォルトの名無しさん
09/11/05 15:55:24
>>246
つ情報処理技術者試験


249:デフォルトの名無しさん
09/11/05 16:18:28
URLリンク(www.dotup.org)

この課題の『Aについて』でいきなり詰まってしまいました。
少しずつ理解しながらやりたいので、だれか協力お願いします。
なんどかこのスレで質問することになると思います。

250:デフォルトの名無しさん
09/11/05 16:27:24
整数乱数ってなんですか? とか、そういう感じの具体的な質問をお願いします
協力お願いしますでは何を答えていいのかわかりませんので

251:249
09/11/05 16:33:13
自己解決しました。

252:デフォルトの名無しさん
09/11/05 16:42:03
自己発電しました

253:249
09/11/05 16:56:59
>>249です

整数乱数とはなんですか?
Aについてですが、今までは
int kansuu(int x)
{
return x*x;
}
のように数式を作るような使い方しかして来ませんでした
問題文にあるように関数の中で、min,maxを定義できるんですか?

254:デフォルトの名無しさん
09/11/05 17:03:30
#include <stdlib.h>

int randomNumber (int min, int max) {
return rand() % (max - min + 1) + min;
}

255:デフォルトの名無しさん
09/11/05 17:17:48
>>254
剰余を使うな。

256:デフォルトの名無しさん
09/11/05 17:18:54
int randomNumber(int min, int max)
{
return (int)(rand() / (RAND_MAX + 1.0) * (max - min + 1)) + min;
}

257:デフォルトの名無しさん
09/11/05 17:20:40
>>255
今更気にする必要なし。

258:デフォルトの名無しさん
09/11/05 18:00:43
2の累乗以外の乱数を出す場合は、
振り直し法を使わないと均等にはならないよ。

例えば RAND_MAX が 7 として、
それで 1〜6 の乱数を求めたら
1/8 の確率のものと 2/8 の確率のものが混ざってしまうだろ。
これは RAND_MAX を大きくしても解決しない問題だろ。

259:デフォルトの名無しさん
09/11/05 18:09:31
>>257
それはない。rand() の線形合同法では mod を使うのはご法度。

260:デフォルトの名無しさん
09/11/05 18:16:04
別にいいよ

261:デフォルトの名無しさん
09/11/05 18:51:49
>>256
実数を使っても無駄だよ。
int randomNumber(int min, int max)
{
return rand() / (RAND_MAX / (max-min+1)) + min;
}

整数でも変わらん。
どうしても均等にしたければ振り直し法を使うしかない。

262:デフォルトの名無しさん
09/11/05 18:54:31
整数オーバーフローは起きないの?

263:デフォルトの名無しさん
09/11/05 19:02:14
>>261
奥山晴彦氏の乱数の改良でも使えばいいだろ

URLリンク(www.vector.co.jp)

264:デフォルトの名無しさん
09/11/05 19:09:44
9桁以下の正の整数か否かを判別したいのですが

if(m>0 && n>0 && m<=999999999 && n<=999999999)

これでいいんでしょうか?
もっとスマートになりそうな気が…

265:デフォルトの名無しさん
09/11/05 19:15:07
m の判定と n の判定がごちゃ混ぜになっているのが「スマートではない」な

266:264
09/11/05 19:20:53
>>265
えっとつまり

if(m>0 && m<=999999999 && n>0 && n<=999999999)

ってことですか?
個人的に「999999999なんて入力しないんじゃなかろうか」と思ったのですが…

267:デフォルトの名無しさん
09/11/05 19:24:43
m と n のどっちが外れているかの判別ができないけどいいの?

268:デフォルトの名無しさん
09/11/05 19:34:10
>>266
とりあえずはね
ただし >>267 が言っているような問題がまだ残っているし
入力は屈指のこわーい所で、範囲チェックだけで済むかどうかも怪しいぞ

269:264
09/11/05 19:45:26
>>267-268
急いでソース全部打ってきました


/* 9桁以下の2つの正の整数m,nを入力して、m/nの小数部分 */
/* を四捨五入して得られる整数値を出力するプログラム */

#include <stdio.h>
int main(void)
{
int m,n,quotient;

printf("\n9桁以下の正の整数を2つ入力して下さい\n");

scanf("%d%d",&m,&n);

if(m>0 && n>0 && m<=999999999 && n<=999999999){
quotient = (m+n/2)/n;
printf("\n%d/%dの小数部分を四捨五入して得られる整数値は、%dです。\n\n",m,n,quotient);
}else{
printf("\n入力する値は9桁以下の正の整数にして下さい。\n"
"プログラムを終了します。\n\n");
}
return 0;
}


コメント内のプログラムを作成するのが課題なのですが、ループ処理はまだ習っていないので終了という形にしてみました。
mとn分けたほうがいいでしょうか?

270:デフォルトの名無しさん
09/11/05 19:51:44
ループがまだってことは、関数もまだか
今んとこそこまでかな

271:264
09/11/05 19:59:39
>>270
そうですか
ありがとうございました
とりあえずif文の中を整理して提出してみます

272:デフォルトの名無しさん
09/11/05 20:49:54
>>269
11桁とかの数入力されときどうなるんだっけ?

273:デフォルトの名無しさん
09/11/05 21:18:59
scanf関数を用いて入力された3桁の整数に対して、
10の位および1の位を四捨五入することによって得られる2つの整数を表示するプログラムを作成せよ。
例)『425』を入力した場合、『400, 430』が画面に表示される。

宿題でこんなのが出たのですがどうしても出来ません!!
どなたか教えてください!!

274:デフォルトの名無しさん
09/11/05 21:19:58
ちなみにこんな感じでやってみたけどダメでした

#include<stdio.h>
#include<math.h>

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

scanf("%d",&x);
a=(x/100)+0.5;
a=((int)a)*100;

b=(x/10)+0.5;
b=((int)b)*10;


printf("10の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",a);
printf("1の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",b);

return 0;
}

275:デフォルトの名無しさん
09/11/05 21:25:03
>>274
惜しい!

276:デフォルトの名無しさん
09/11/05 21:34:03
自販機のLEDあるじゃないですか
あれみたいに、
右から順にボタンLEDが点灯していき左端で停止
停止したら右からまたLEDが順に点灯していきスタック
スタックしたら右からまたLEDが・・・

ってのをやりたいのですが、「一行で」やるにはどうすればいいのですか。

ifを使うとビットシフトでできるのですが
「一行でやれよバカ」だそうです。

277:デフォルトの名無しさん
09/11/05 21:38:33
>>276
質問の内容が意味不明だが
改行しなきゃいいんじゃないかな?

278:デフォルトの名無しさん
09/11/05 21:39:59
1行って言われてもね……

279:デフォルトの名無しさん
09/11/05 21:42:06
>>276
日!本!語!で!お!k!


280:デフォルトの名無しさん
09/11/05 21:45:36
#define (コントローラのLEDアドレス)  Fuckintosh
char       LED = 0x01;

Fuckintosh = LED << 1;

で、左端のLEDまで点灯させます。 2進数で10000000です

じゃあ左端を点けたまま再度右から点灯させていくなら 10000001 -> 10000010とシフトしていけばいいのか、と
別に変数を用意し、+ したのですが
なぜかこれだと 二個同時に点いたります。

ifで分けてやると思い通りの点灯パターンを行うのですが
「(ifとか使わず)一行でやれよバカ」だそうです。

281:デフォルトの名無しさん
09/11/05 21:47:09
二個同時と言うのは左端を含めずに二個です

シフトしていくLEDと隣り合ったLEDが点いて消えたり点いたり、
一緒にシフトして行ったり
shます

282:デフォルトの名無しさん
09/11/05 21:53:05
1行とか言ってるソイツがアホなだけだろ。

283:デフォルトの名無しさん
09/11/05 21:54:30
ほんと日本語へたくそだな
if使ったコード晒せよ


284:デフォルトの名無しさん
09/11/05 22:02:38
>>280
でけたwww
int i,j,hoge;for(i=0,LED=0;i<8;i++){hoge=LED;for(j=0;j<8-i;j++)(LED=hoge|(1<<j)),*p=LED;}

その説明では状況が分からん

285:デフォルトの名無しさん
09/11/05 22:03:19
00000000
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
10000001
10000010
10000100
10001000
10010000
10100000
11000000
11000001
11000010
11000100
11001000
11010000
11100000
こんな感じ?

286:デフォルトの名無しさん
09/11/05 22:06:50
そうです

LEDが16コあって、そのうちの8つがLEDコントローラA
残りの8つがBに繋がっちょります
が、8つ点ける時点でつまずきました

287:デフォルトの名無しさん
09/11/05 22:08:38
10000000
よしここから右端から点けよう

10000001 点いた
10000011 あれ?
10000110 あれ?
10000111 おや?
10001101 なんじゃ

なんてことになってます。


288:デフォルトの名無しさん
09/11/05 22:11:50
>>287
コードを晒すんだ!
そのほうが日本語より直接的で分かりやすいと思う

289:デフォルトの名無しさん
09/11/05 22:15:53
なので、
Fuckintosh = 10000000 + (FuckOSX << 1) とかしたらどうかな、と思ったのですが

上のようにワケのわからんパターンで点灯し
ならORで、とやってもだめでした


>>288
仕事場に置いてきてまってるもんで

自販機を思い浮かべてもらえれば。
あの多段ボタンLEDそのままなので。

そのLEDは2進数00000000に対応しており、点けたい部位のビットを1にすれば光ります
10000000なら左端、00001000なら右から4番目、というふうに

290:デフォルトの名無しさん
09/11/05 22:17:53
>>285 をテーブルに入れて垂れ流せばいいよ。

291:デフォルトの名無しさん
09/11/05 22:18:19
>>289
この時期まで研修とは…
大企業だな
裏山鹿

>>284 でおk

292:デフォルトの名無しさん
09/11/05 22:18:26
あー違った

Fuckintosh = 10000000 + (FuckOSX << 1)の 10000000 の部分は決め打ちではありません。
変数です。
if(FuckMac >= 10000000)
 Fuckintosh = (FuckMac + (FuckOSX << 1));

という感じですかね

293:デフォルトの名無しさん
09/11/05 22:21:35
2進数10000000は、16進数で0x80,

左端と右端を点けるには10000001、つまり0x81
やはり左端の値を保持して、新たにシフトさせていく変数を用意し
左端の値と足していけば順次シフトできるんじゃなかろうか、
と思ったのです。

294:デフォルトの名無しさん
09/11/05 22:39:35
つーか、ビット操作なら unsigned でやれよ。


295:デフォルトの名無しさん
09/11/05 22:58:53
排他的論理の計算ってどんなときに使うんですか?

101100110
110011101

011111011
になるのはいいんですが、この計算はたとえばどんな時に使用されるの?

296:デフォルトの名無しさん
09/11/05 22:59:47
stdioはstandard input outputの略
ではprintfやsacanfとかって.....
語源とか気になる関数とか多いです

297:デフォルトの名無しさん
09/11/05 23:03:17
>>295
フラグの入れ替えとかハッシュ計算とか


298:264
09/11/05 23:07:50
>>272
11桁ですか?
おそらく弾かれて、プログラム終了となるんじゃないかと思うのですが…

299:デフォルトの名無しさん
09/11/05 23:09:48
>>295
特定のビットだけ反転させたいときだな。
あまり使う機会はない。

>>296
print や scan に format の f 付けただけ。


300:デフォルトの名無しさん
09/11/05 23:14:03
>>299

おお、こんなに早くお返事が!!!
サンクスです
検索かけても語源とかなかなか出てこなくって
「UNIXの古い資料調べれば全部分かる」
みたいな話はどこかに書いてありましたが
それもちょっとよく分からん話だったんで

301:デフォルトの名無しさん
09/11/05 23:27:38
1ビットずつフラグに使ってたら、反転させたいときもあるんだろうな

302:デフォルトの名無しさん
09/11/05 23:43:26
>>296
print formatted output

その他気になるのは↓で探すよろし
URLリンク(www.opengroup.org)

303:デフォルトの名無しさん
09/11/06 00:09:44
ボタンとかのオブジェクト配置するには?
画面の出し方は死ぬほどサンプルあるけれど

304:デフォルトの名無しさん
09/11/06 00:34:17
いきなりなんだよwww
windowclass にボタン指定しろよw

305:デフォルトの名無しさん
09/11/06 00:39:22
スレ違い

306:デフォルトの名無しさん
09/11/06 00:45:15
>>295
RAID5の計算とか
CRCとか
画像処理とか

A = 101100110
B = 110011101
A xor B = C
C = 011111011

C xor A = ...
C xor B = ...

307:デフォルトの名無しさん
09/11/06 02:55:03
>>302
リンク先までありがとうございます
正直、英語は読めないので何をどう見たらよいやら分かりませんが調べてみます
やはりプログラマーは英語必須なんでしょうなあ

308:デフォルトの名無しさん
09/11/06 02:59:12
英語読めなくてもプログラマやってる奴は結構いるよ
カスばっかだけど

309:デフォルトの名無しさん
09/11/06 03:03:42
プログラミングコンテストの問題が英語だから理解出来ないとかね
プログラミング以前の段階で淘汰されてて面白い

310:デフォルトの名無しさん
09/11/06 03:08:20
職業としてやるんじゃなかったら英語なんてたいして必要ない。
英検三級ありゃやっていける。

311:デフォルトの名無しさん
09/11/06 03:39:30
int main()
{
unsigned char LED = 0x01;
int i,j,n;
for (i = n = 0; i <= 36; n=++i)
{
LED = 0;
for (j = 8; j > 0; n-=j*(n>=j),j--)
{
LED |= (n>=j)<<(j-1);
}

for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}

どうしてこうなった

312:デフォルトの名無しさん
09/11/06 04:21:24
unsigned char func(int n)
{
unsigned char LED = 0;
int i, stack = 0;
for (i = 8; n > i; n-=i--, stack++);
LED = ~0 << (8-stack) | !!n << (n-1);

return LED;
}

int main()
{
int i,j;
unsigned char LED;

for (i = 0; i <= 36; ++i)
{
LED = func(i);

for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}

return 0;
}

がんばってこれか

313:デフォルトの名無しさん
09/11/06 06:00:48
stackをループじゃなくて2次式を解くことでできそうな気がするけど、またあとで。

314:デフォルトの名無しさん
09/11/06 15:15:26
Cは無限ループifしなくても何かが起こったときに
関数に飛ぶことはできないの

315:デフォルトの名無しさん
09/11/06 15:16:46
日本語でおk

316:デフォルトの名無しさん
09/11/06 15:17:11
>>314
日本語でOK。

317:デフォルトの名無しさん
09/11/06 15:20:07
>>314
signal()

318:デフォルトの名無しさん
09/11/06 15:45:21
教えてやるから日本語で質問しろ。

319:デフォルトの名無しさん
09/11/06 16:01:10
馬鹿は回答するな

320:デフォルトの名無しさん
09/11/06 16:02:26
>>314
atexit()

321:デフォルトの名無しさん
09/11/06 16:12:23
>>314
標準Cには、そういう仕掛けはない。
Win32 API なり、Pthreads なりを使うわけだが
OS が特定できんことには。

322:デフォルトの名無しさん
09/11/06 17:15:23
signalは標準だろボケ
無知は黙ってろよカス

323:デフォルトの名無しさん
09/11/06 17:31:42
>>322
では一つ、signal()の標準的な使い方を教えてくだされ。

324:デフォルトの名無しさん
09/11/06 17:37:51
問題文を出力するなどのため、
引数の内容が長文化した場合、(継続文字?)について教えてください。

例えば、プリントエフ関数で、長文を表示させる場合、

printf("1行目から2行目\n3行目から4行目\n");

といったように書いていったのですが、
当然ながらだんだん見えなくなってくるので、

printf("・・・・3行目から4行目\n"
"5行目から6行目\n6行目から7行目\n・・・・");

と、表示していくことになりますが、
他によい方法はないのでしょうか。
こういう場合、どういう方法が一般的なのでしょうか。
プリントエフで一個ずつ表示するものなのでしょうか。



325:デフォルトの名無しさん
09/11/06 17:41:12
SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM は標準のようだ
質問の「何か」っていうのが具体的に何かわからないと何ともいえないが

326:デフォルトの名無しさん
09/11/06 17:43:30
>>324
俺なら1行ごとに分ける
printf(
  "1行目\n"
  "2行目\n"
  "3行目\n"
  ・・・・
  "最終行\n");
それか、問題文を別ファイルから読み込む

327:デフォルトの名無しさん
09/11/06 17:52:34
>>326
なるほど1行ずつですか。

>>それか、問題文を別ファイルから読み込む
買ってきた本でもファイルの入出力を最後のほうで取り上げています。
なんとかそこまで早くたどり着きたいものです。

最終的にはプロンプトでサウンドノベルみたく動く文字出力を実現したいです。
あの、1文字、1文字、動いていく感じがたまらなくいいので。
たぶん繰り返し処理とか使うんだろうなあとは思っているのですが。

328:デフォルトの名無しさん
09/11/06 18:08:36
優れたプログラマ=論理演算多用 if少ない

if((A >> B) |= C) != ( ((D >> E) << F) &= (G | H)){
  VAR = I >> (J |= (K + L));
}

329:デフォルトの名無しさん
09/11/06 18:10:13
>>328
馬鹿?

330:デフォルトの名無しさん
09/11/06 18:11:20
劣ったプログラマ=if多い

if()
 if()
  if()
   if()
    if()
else if()
 if()
  if()
 else if()


ifを判定するだけで最低1クロック無駄にする

331:デフォルトの名無しさん
09/11/06 18:18:10
Cでどう短く書くかより、実際の効率で考えるべき

332:デフォルトの名無しさん
09/11/06 18:39:47
ものすごいアホがいる。

333:デフォルトの名無しさん
09/11/06 18:43:02
>>328
まだ減らせるぞw
((A >> B) |= C) != ( ((D >> E) << F) &= (G | H))&&(VAR = I >> (J |= (K + L)));



334:デフォルトの名無しさん
09/11/06 19:22:57
>>324
ふつーは
printf("一行目\n");
printf("二行目\n");
printf("三行目\n");
printf("四行目\n");

335:デフォルトの名無しさん
09/11/06 19:46:24
printf("四行目\n",printf("三行目\n",printf("二行目\n",printf("一行目\n"))));


336:デフォルトの名無しさん
09/11/06 20:05:35
>334,>335は関数呼び出しコストを度外視しているところが間抜け。
一回で済むことを4回もやるな。

337:デフォルトの名無しさん
09/11/06 20:15:43
それ以前に、ただの文字列出力にprintf使う奴はプログラマーに向いていない。

338:デフォルトの名無しさん
09/11/06 20:18:32
まあ普通は DrawText() 使うよな。

339:デフォルトの名無しさん
09/11/06 20:20:03
関数くらい人に教わる前に自分で習得しろって?
そりゃ俺も C 始める前にアセンブラで PRINT マクロ作ってたさ、そのアセンブラも自作でね
けど今どうなんだろう? C の printf には BASIC の PRINT コマンドほどの教育力あるんかね
俺個人としては、かえって饒舌すぎるところがあるように思えるんだが

340:デフォルトの名無しさん
09/11/06 20:24:32
まぁ、まともなコンパイラならprintf()の代わりにputs()を使うくらいのことはするからな。

341:デフォルトの名無しさん
09/11/06 20:50:57
それだと結果が変わってしまうな。

342:デフォルトの名無しさん
09/11/06 20:53:29
いまどきのコンパイラなら334も324も最適化で同じになるだろ。

343:デフォルトの名無しさん
09/11/06 21:11:57
結局どう表示したいのか一目でわかるのが>>326の良いところ

344:デフォルトの名無しさん
09/11/06 21:49:55
結局トレードオフなんあぢょ。

345:デフォルトの名無しさん
09/11/06 22:06:53
あるアドレスに名前を付ける時ってどうするの?


346:デフォルトの名無しさん
09/11/06 22:14:14
>>345
マクロとか変数名とか名前-アドレスマップとか

347:デフォルトの名無しさん
09/11/06 22:15:57
ポインタ

348:デフォルトの名無しさん
09/11/06 22:19:10
>>347
初心者は黙ってろ。

349:デフォルトの名無しさん
09/11/06 22:28:10
× DIV = (300 / 2);
○ DIV = (300 >> 1)

350:デフォルトの名無しさん
09/11/06 22:39:15
一番やりがち、真っ当なのはdefine

#define 90000000 adressV125



351:デフォルトの名無しさん
09/11/06 22:41:20
>>348
ぬるぽ

352:デフォルトの名無しさん
09/11/06 22:42:13
>>350
釣り針でかすぎw

353:デフォルトの名無しさん
09/11/06 22:47:28
コンパイラが対応していれば、#plasmaでもいい。
でもプラズマは本当に「そのプラットフォーム専用」でないと用意されていない。

354:デフォルトの名無しさん
09/11/06 22:53:32
本命は l だと思う。

355:デフォルトの名無しさん
09/11/06 22:59:59
#import

356:デフォルトの名無しさん
09/11/07 00:46:37
DXライブラリを使用して今までは正常にコンパイルできていたのですが、PCのフォルダなどを整理してから、

Fatal: ファイル VORBISFILE_STATIC.LIB が開けません

とメイク結果に表示されコンパイルできなくなってしまいました。
エディンタの再設定もしてあり、必要なファイルはあると思うんですが...
だれかアドバイスいただけないでしょうか。

357:デフォルトの名無しさん
09/11/07 00:55:41
ここはそんな質問する場じゃない

358:デフォルトの名無しさん
09/11/07 01:04:48
DBに接続するためのパスワード文字列をソースに埋め込もうと
考えたんですが、stringsコマンドでバレてしまいますよね。
通常は暗号化したパスワードを文字列として持たせるのがベターなんでしょうか?


359:デフォルトの名無しさん
09/11/07 01:39:49
>>357
すみません初心者用の本でライブラリを使いなさいと書いてあったんです...
本の通りにやり直してもできないんです

360:デフォルトの名無しさん
09/11/07 01:41:28
ここはそんな質問する場じゃない!

361:デフォルトの名無しさん
09/11/07 02:39:25
気合い入れてもう一回ググッてきます。がんばってきます

362:デフォルトの名無しさん
09/11/07 10:18:05
フォルダの整理って何したんだよ?

363:デフォルトの名無しさん
09/11/07 11:09:18
makeしたら負けだと思う。

364:デフォルトの名無しさん
09/11/07 11:46:42
>>363
自分で書いて面白いと思ってんの?

365:デフォルトの名無しさん
09/11/07 11:50:14
おつにゃん

366:デフォルトの名無しさん
09/11/07 13:17:46
printf("\
1行目\n\
2行目\n\
3行目\n\
・・・・
最終行\n\
");


367:デフォルトの名無しさん
09/11/07 13:20:21
それインデンツできないから×

368:デフォルトの名無しさん
09/11/07 14:31:46
printf(
"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n"
);

369:デフォルトの名無しさん
09/11/07 15:06:46
char *s="
#include "hoge.txt"
";
printf(s);

370:デフォルトの名無しさん
09/11/07 17:34:37
if(fgets(str, sizeof(str), stdin) == NULL)
が成り立つことってあるのでしょうか。

371:デフォルトの名無しさん
09/11/07 17:45:41
ファイル終端。


372:370
09/11/07 17:50:17
キーボードからの入力でファイル終端ってどういう場合なんでしょうか

373:デフォルトの名無しさん
09/11/07 17:54:11
>>372
Ctrl-Z とか Ctrl-D とか ファイルリダイレクト とか

374:デフォルトの名無しさん
09/11/07 17:54:12
>>372
Windows なら ctrl + z
*nix なら ctrl + d だっけか?

375:370
09/11/07 18:02:17
ありがとうございます

376:デフォルトの名無しさん
09/11/07 18:47:31
define BUF 1024
char buffA[BUF], buffB[BUF];
char** str;
int needss, i, j, x, y;
質問です。上記の変数を利用しプログラムを記述しました。
まったく問題なく実行でき、さらに処理を追加しようと新たに
char buffC[BUF]という配列を宣言すると、エラーを吐くようになりました。
どうも、char型の変数を増やすとbuffBに文字列が格納された瞬間にエラーがでます。
変数名を変えても改善しませんでした。
プログラム自体には問題なく、当然コンパイラーは警告すらでません。
何が問題なのかまったく分からず困惑しています。
変数名が悪いのか、配列の要素数が全体で見れば多すぎるのかと思いましたが、そんなことはないはずですよね・・。

環境はUbuntu9.04 コンパイラGCC エディタEmacsです。
エラーの考えられる原因はなんでしょうか。



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5400日前に更新/137 KB
担当:undef