C言語なら俺に聞け( ..
[2ch|▼Menu]
237:デフォルトの名無しさん
08/04/07 23:51:26
>>235
結局は
b[i]=i;
になるんじゃないの?

238:デフォルトの名無しさん
08/04/07 23:52:35
>>235

「転送する」の意味がわからん。
b[0]〜b[4]には元々値が入ってるんでしょ?
並びを
b[3]=3
b[4]=4
b[0]=0
b[2]=2
b[1]=1
としたって、配列の中身は
b[0]=0
b[1]=1
b[2]=2
b[3]=3
b[4]=4
と変わらないよ?


239:230
08/04/08 00:01:45
ん〜なんと説明していいか…如何せん素人なもんで
aの0にある数字3をbの同じ3番目に当てはめる?
にはどうするかってことです。
同じくaの1にある数字4をbの4に当てはめるってことです

あの聞いといてなんですけど意味不だったらスルーしてください

240:デフォルトの名無しさん
08/04/08 00:09:33
素人とかの問題じゃないんだけどな
1回自分で全部代入してみてbの中身全部表示してみると分かると思うけど
b[0] = 0 b[1] = 1 b[2] = 2... となるだけ

241:デフォルトの名無しさん
08/04/08 00:10:35
>>239
暗号化がしたいのかな?

242:デフォルトの名無しさん
08/04/08 00:15:32
>>239
結局>>231>>237でいいような気がするが。

あと>>235が「配列bの添字の順番を換えたい」と言っているように思えるので、
一応、それは無理だと言っておく。
そもそも添字というのは「i番目」というような順番を示すものなので、
変更は不可能だ。

わかってるってんだったら、失礼。

243:デフォルトの名無しさん
08/04/08 00:33:18
b[0] = A, b[1] = B, b[2] = C
とあったものを、
a[0] = 1, b[1] = A
a[1] = 2, b[2] = B
a[2] = 0, b[0] = C
== b[0] = C, b[1] = A, b[2] = B
にしたいってことかしらん?
aの中身をbの添字にした時、正しい文字が現れるようにしたい、みたいな。


244:デフォルトの名無しさん
08/04/08 09:38:29
>>230
代入は上書きコピーのこと。転送とまちがえてはいけない。

245:デフォルトの名無しさん
08/04/08 12:33:58
>>230
何が目的なのかも書き込んだほうがいいんじゃない?
あんたのコード例から目的が推察できないのでみんな
首ひねってるんだと思うよ。

246:デフォルトの名無しさん
08/04/08 16:51:01
#include <stdio.h>

int main(void)
{
int n1, n2;
int per;

puts("二つの整数を入力してください。");

printf("整数 A:"); scanf("%d",&n1);
printf("整数 B:"); scanf("%d",&n2);

per = n1 / n2 * 100;

printf("Aの値はBの%d%%です。\n",per);

return (0);
}


実行結果を
2つの整数を入力してください。
整数A:50
整数B:100
Aの値はBの50%です。

と、したいのですが↑のプログラムじゃ動いてくれません;;
「Aの値はB の0%です。」
となってしまいます;;

何故でしょうか?

247:デフォルトの名無しさん
08/04/08 16:52:09
intは整数型だよ

248:デフォルトの名無しさん
08/04/08 17:05:41
50/100 = 0
0*100 = 0

249:デフォルトの名無しさん
08/04/08 18:38:07
>>246
整数型の計算は、コンピュータでは1より小さい結果になると
答えがゼロになるんだよ。なぜかといわれても、そういうもの
だと思ってくれ。

回避する方法は色々あるが、とりあえず

per = n1 * 100 / n2;

にしたらいい。理由は自分で考えてね。

250:デフォルトの名無しさん
08/04/08 19:45:39
ファイルを読み込み解析したいのですが、

char *buf = FileRead(file_path);

Kaiseki(buf);
free(buf);
または
Kaiseki(file_path);
にするか悩んでいます。
FileRead関数内で動的にメモリを確保して
確保した領域をKaiseki関数に渡し解析するか、
Kaiseki関数内にファイルへのパスを渡して
読み込み、解析をKaiseki関数内で行うか、
どちらが良いと思われますか?

251:デフォルトの名無しさん
08/04/08 20:13:45
inspect関数かinvestigation関数でやるのがいいと思うよ
マジレスすると場合によるからどっちともいえない

252:デフォルトの名無しさん
08/04/08 20:21:43
>>251
どのような場合があるのですか?

253:デフォルトの名無しさん
08/04/08 20:42:23
5P3
順列の総数を求めるプログラムを教えてください
考えすぎて頭が痛くナリマスタ
よろしくオナガイシマス

254:デフォルトの名無しさん
08/04/08 21:09:06
>>250

255:デフォルトの名無しさん
08/04/08 21:12:34
>>253
オーバーフローとか一切考えなければ
5!を3!で割るだけじゃんww
なにが分からないの?w

256:デフォルトの名無しさん
08/04/08 22:20:03
>>253
ほらよ。
#include <stdio.h>
#include <math.h>

double npm(int n, int m) {return tgamma(n + 1) / tgamma(n - m + 1);}

int main(int argc, char ** argv)
{
printf("%g\n", npm(5, 3));
return 0;
}

257:246
08/04/08 22:30:13
>>247-249
ありがとうございます。

258:デフォルトの名無しさん
08/04/08 22:31:58
>>252
>>252
>>252
>>252
>>252
>>252

259:デフォルトの名無しさん
08/04/08 22:32:53
T lPr(T l,T r){T r=1;for( T i=r+1; i<l; i++){ r *= i; } return r;}

260:デフォルトの名無しさん
08/04/08 22:34:25
>>259
おいw

261:デフォルトの名無しさん
08/04/08 22:48:02
バグがあるな。

262:デフォルトの名無しさん
08/04/08 23:08:45
>>256
そのままコンパイルすると
error C3861: 'tgamma': 識別子が見つかりませんでした
なのですが?

263:デフォルトの名無しさん
08/04/08 23:50:07
まともなCコンパイラを使ってください。

264:デフォルトの名無しさん
08/04/09 19:31:35
5! / 3! って結局 5 * 4 だろ?
一旦階乗求めるよりh(ry

265:デフォルトの名無しさん
08/04/09 21:23:09
hの続きは何だよ

266:デフォルトの名無しさん
08/04/09 21:26:20
// オーバーフローしにくいように書いてみた
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b){
int c;
while((c=a%b)) a=b, b=c;
return b;
}
int mPn(int m, int n){
int t, u=1, l=1;
if(m<1 || n<1 || m<n) return 0;
if(m-n<n) n=m-n;
for(;n>0;n--,m--){
l*=n;
t=gcd(u, l);
l/=t;u/=t;
t=gcd(m, l);
l/=t;u*=m/t;
// printf("m=%d n=%d [%d / %d]\n", m, n, u, l);
}
return u/l;
}
int main(int argc, char *argv[]){
int m, n;
if(argc!=3) return 1;
m=atoi(argv[1]);
n=atoi(argv[2]);
printf("%dP%d=%d\n", m, n, mPn(m, n));
return 0;
}

267:デフォルトの名無しさん
08/04/09 21:42:27
定番のhello worldがなぜか実行されない。。。

#include <studio.h>

int main(void)
{
printf("hello, world\n");

return 0;
}

エラーE2209 sample.c 2: インクルードファイル 'studio.h'をオープンできない
警告 W8065 sample.c 6: プロトタイプ宣言のない関数 'printf'の呼び出し(関数 main)
*** 1 errors in Compile ***

と、何度試行を繰り返してもなります;
このエラーをどう訂正していいのかわからない超初心者です。
設定などもチャート通り何度もやり直しましたが、上手くいきません。
よろしくお願いします。

268:デフォルトの名無しさん
08/04/09 21:47:43
studio......

269:デフォルトの名無しさん
08/04/09 21:48:54
standard I/Oな

270:デフォルトの名無しさん
08/04/09 21:48:55
エラーで気付や

271:デフォルトの名無しさん
08/04/09 21:49:17
あるあるww

272:デフォルトの名無しさん
08/04/09 22:03:37
DWORD gdw1;
DWORD gdw2;

gdw1 = timeGetTime();
//処理
gdw2 = (timeGetTime()-gdw1);
printf("%d",gdw1);
としても毎回計測するごとに処理時間が増えているのですが、
何故なのでしょうか?

273:デフォルトの名無しさん
08/04/09 22:07:55
質問の意味がよく分からんが
purintfにgdw2を渡すべきなんじゃない?

274:デフォルトの名無しさん
08/04/09 22:08:49
gdw2を表示したいんじゃないの?

275:デフォルトの名無しさん
08/04/09 22:20:14
Cのみだったのでこちらで質問させていただきます。
現在、下記のような感じでプログラムを作ってるのですが、
URLリンク(kansai2channeler.hp.infoseek.co.jp)
2つ問題があり、
@入力していくと次の配列まで入力されてしまう。
A2つ目のエラー仕様をどこでどう記述していいのか。
初歩的なことで、無駄な文が多いかもしれませんがよろしくお願いします。
また、こうすればもっと判りやすくできるなどあったら教えて欲しいです;

276:デフォルトの名無しさん
08/04/09 22:54:48
>>275
「次の配列」が何を指しているのか判りませんが、一文字ずつ入力してチェックするのは標準入力では無理があるかと。
普通に1行入力してから、解析する方がたぶんましです。

277:デフォルトの名無しさん
08/04/09 22:55:24
>>275 A
....
break;
}
}
if((cnt <= 0) && ((c == '-') || (c == '\n'))) {
printf("エラーメッセージ");
exit(1);
}

if(x == 1){
.....


278:デフォルトの名無しさん
08/04/09 23:10:17
>>275
>また、こうすればもっと判りやすくできるなどあったら教えて欲しいです;
うまく関数化しよう。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int absolute(int n1, int n2) { return n1>n2 ? n1-n2 : n2-n1; }
void check(const char* s)
{
    int i;
    for(i=0; s[i]; i++) {
        if( !isdigit(s[i]) && s[i]!='-' ) { puts("不正な文字"); exit(EXIT_FAILURE); }
    }
    if(!s[0] || strcmp(s, "-")==0) { puts("数値ではない"); exit(EXIT_FAILURE); }
}
int input(void)
{
    char str[100];
    scanf("%99s", str); check(str); str[ str[0]=='-' ? 9 : 8 ] = 0; return atoi(str);
}
int main(void)
{
    int a, b;
    printf("数値a="); a=input();
    printf("数値b="); b=input();
    printf("%dと%dの差の絶対値は%d\n", a, b, absolute(a,b));
    return 0;
}

279:デフォルトの名無しさん
08/04/09 23:41:13
int input(int *p){
char str[100], *pstr=str;
int value, index=0, sign=1;

if(scanf("%99s", pstr)!=1){
puts("入力エラー");
return 0;
}
if(sscanf(pstr, "%d%n", &value, &index)>=1 && pstr[index]=='\0'){
if(*pstr=='-') sign=-1,pstr++;
sscanf(pstr, "%8d", &value);
if(p) *p=sign*value;
return 1;
}
printf("不正な文字 %s\n", &pstr[index]);
return 0;
}

280:275
08/04/09 23:49:48
>>276
a[0],a[1]でa[0]の入力をすると、a[0]の上限をこえたとき(cnt以上)に、
そのままa[1]の中身まで入力されてしまうってことですね;

>>277
break;のとこもexit(1);にし、int exit(int);を入れてみたところ、
そこはかとなくAの部分はできました。ありがとうございますー。

281:281
08/04/10 14:58:40
わからないので教えていただけないでしょうか
URLリンク(kansai2channeler.hp.infoseek.co.jp)
よろしくお願いします。

282:デフォルトの名無しさん
08/04/10 15:01:38
史上稀に見る課題の丸投げ具合ですね

283:デフォルトの名無しさん
08/04/10 15:13:06
自分でわかろうと努力をするつもりはないわけか
課題の言葉の意味もわかってなさそうだ

284:デフォルトの名無しさん
08/04/10 16:17:51
>>283
社会に出れば、問題を解決する方法論を持っていればそれが能力と
みなされる。
たとえその方法論が丸無げであってもな。

285:デフォルトの名無しさん
08/04/10 16:29:12
その友達に聞け

286:デフォルトの名無しさん
08/04/10 16:30:45
AもBもやったことない俺に、Cなんて聞くんじゃねぇ〜ぞゴルァ!
C言語ならおk

287:デフォルトの名無しさん
08/04/10 18:57:28
Cとかまだやってんのwだっさw

288:デフォルトの名無しさん
08/04/10 19:36:17
スタックが32バイトしか取れないからしょうがないのだ。

289:デフォルトの名無しさん
08/04/10 23:47:00
>>288
それはアセンブラでもきびしいだろw

290:デフォルトの名無しさん
08/04/10 23:54:53
簡単なリモコン作る程度なら多いくらいだ

291:デフォルトの名無しさん
08/04/11 11:43:11
ファイル名を入力して、そのファイルの小文字を大文字に置換した結果を
別のファイルに出力するプログラムです

ソース
URLリンク(arhp.hp.infoseek.co.jp)

出力されたモノ
URLリンク(arhp.hp.infoseek.co.jp)

見ての通り日本語が化けてしまいます
どうすれば正しく表示されるでしょうか?
もっと簡単に出来るやり方があればそれも教えて欲しいです

ちなみに
if(ch == komoji[a]) {
fputc(omoji[a],outfp);
のkomojiとomojiを入れ替えて大文字→小文字のモノを作ろうとしましたが
さらに日本語がおかしくなりました

まだ入門書を半分も読んでいない初心者が思いつきでやったので
色々突っ込みどころはあるかと思いますがよろしくお願いします

292:デフォルトの名無しさん
08/04/11 12:45:21
漢字は2バイト以上で表現しているのだゾ。
漢字コードでググルのだ。


293:デフォルトの名無しさん
08/04/11 13:07:06
>>291
当方で確認した環境は WindowsXP, 使用した処理系は cygwin(gcc 3.4.4) です。
以下のプログラムで問題が発生するかどうか、確認してみてください。
問題が発生しなければ、これが解決方法です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

古いし、問題もあるようですが、参考にした書籍をあげておきます。
応用C言語, 三田 典玄, アスキー 1988, ISBN4-7561-0056-2
第3章

294:デフォルトの名無しさん
08/04/11 13:13:56
>>291
突っ込みどころ満載だな。
・komoji, omojiは配列にする必要がない。const char * komoji = "abcde...z"でいい。
・bについては、要素数を固定値で持つな。ましてそれを変数に代入するな。
・forの条件もおかしい。このまま直すならa < bではなくa <= bだが、そもそもここはkomoji[a] != '\0'にすべきだ。
・strcpy(), strcat()を並べて使うくらいならsprintf()でも使え。この場合、sprintf(newfilename, "h_%s", filename)でいい。
・fgetc()の戻り値をcharで受けてはいけない。fgetc()の仕様を確認すればわかるが、intで受けるべきだ。
・cも要らない。小文字と判断したときにfputc()するのではなく、その場はchを書き換えておくだけでいい。
・>292も書いているが、Windowsで普通に扱う文字コードでは漢字コードの一部が英小文字に一致してしまう。
 真面目に対処すると意外に面倒だから、他の問題を全てクリアしてから改めて挑戦しろ。

295:デフォルトの名無しさん
08/04/11 13:17:08
>>293
その本はゴミだ。いや、作者がゴミそのものだ。

>>291
>293を見て気付いた点をもう一つ追加。
・小文字と判断したら、forからは脱出しておけ。
・gets()は使うな。fgets(filename, sizeof(filename), stdin)にしておけばいい。

296:293
08/04/11 13:29:55
>>295
まあまあ、せっかくソースをさらして質問している(質問作法としては最上です。)のだから、
まずい点をことさらに列挙するのはどうでしょうか。

それはそうと、
fgets() の第一引数はファイル名ではなくて、バッファなんですけど。

> その本はゴミだ。いや、作者がゴミそのものだ。
netnews の時代からいろいろいわれていたようですけど、
具体的にどこが悪いんでしょうか。おしえていただけるとうれしいです。


297:デフォルトの名無しさん
08/04/11 13:36:34
まあ環境依存だよな
漢字というか多バイトコードが何なのかによって変わっちゃうから

298:291
08/04/11 13:36:57
いえいえ、具体的に間違いをあげて頂きとても助かりました!
今からお二人のアドバイスを参考にやってみます!

299:デフォルトの名無しさん
08/04/11 13:37:55
入門で作るプログラムとしてはASCII以外を考慮するのはハードル高すぎると思うよ

300:295
08/04/11 13:39:07
>>296
もうかなり前だから何を以ってゴミと判断したかは忘れたが、
当時本人にも直接メールして本の不備を詳細に指摘したことがある。
言い訳だけが返ってきた。

それはそうと。
>fgets() の第一引数はファイル名ではなくて、バッファなんですけど。
もとのソースを見たか?
> gets(filename);
これ以上必要もない恥の上塗りはやめておけ。

>まずい点をことさらに列挙するのはどうでしょうか。
真摯に聞く態度を示す質問者だからこそ、列挙した。
つーか、「まずい」と認識しつつ指摘しない方が不親切だろ。

301:291
08/04/11 13:41:58
環境依存ですかー
やっぱり初心者がやるにはちょっと面倒なモノだったようですね
皆さんの言ってることがある程度理解出来たら自己満足したいと思いますw

302:293
08/04/11 13:43:00
>>296
あっ失礼、filename というのは、提示されたプログラムの変数をさしていたんですね。
もうしわけない。

303:293
08/04/11 13:47:03
>>300
そうですね。gets() はまずいですね。
提示されたプログラムでは、128 文字以上入力されるとおかしくなってしまいます。

> 真摯に聞く態度を示す質問者だからこそ、列挙した。
> つーか、「まずい」と認識しつつ指摘しない方が不親切だろ。
たしかに。


304:デフォルトの名無しさん
08/04/11 13:49:09
EUCだと3バイトとかあったっけ?

305:295
08/04/11 14:03:04
>>304
入門の域を超えるから自分で調べてくれ。

と、それでは不親切なので、Asciiと共存できる文字コードを簡単に。
# つーか詳しくないので間違っていたら失敬。

・シフトJIS、SJIS、CP932、MS漢字など
Windowを中心に広く使われる。基本的に漢字などは2バイトで表現できるが、
2バイト目のコードがAscii文字の領域に重なるために何かと厄介。
特に、大文字小文字変換やディレクトリの区切り(\)のためにバグが出た商品も多々ある。

・(狭義の)EUC、EUC-JP
一部のUnixなどで使われる。狭義のEUCでは基本的に漢字は2バイトだが、
(所謂)半角カナも2バイトになってしまう罠。広義のEUCはEUC-KRなどの日本以外のものも含む。

・UTF-8、(狭義の)Unicode
最近のLinuxやMac(これも実はUnix系)などで一句使われる。基本的に漢字などは3バイトになる。
厳密に解釈しだすと切りがないので省略。UTF-8以外のUnicodeとは表現方法が随分異なる。

・ISO-2022-JP、(狭義の)JIS
メールなど、7ビット通信環境でも使えることを前提とした環境で使われる。
漢字などはasciiと同じような範囲を使うので単純にチェックすることは不可能。
asciiとの境界にEsc符号列を用いることで状態を切り替えるので、手間さえ掛ければ勿論チェック可能。
但し、改行前後でAsciiに戻さないといけないなど制約が多いので、内部コードとして使うことはお勧めできない。

306:293
08/04/11 14:08:01
>>305
補足。
>>293 ではシフトJIS(MS漢字コード)の古い時代のものを仮定しています。
>>293 で作成・検証に使用したコンパイラは、まさにシフトJIS には対応していない
ので、提示されたプログラムにある日本語メッセージは、なくなく削除しました。

307:デフォルトの名無しさん
08/04/11 14:18:05
>>306
cygwinなら、gccのオプションに--input-charset=cp932 --exec-charset=cp932を書くといいかも。
応用で、EUCで書かれたソースをcygwin用にコンパイルすることもできますぜ。

308:デフォルトの名無しさん
08/04/11 16:45:27
>>307
感謝です。gnu の libiconv/iconv_open() の指定方法でいけばいいんですね。
またひとつ賢くなりました。

309:デフォルトの名無しさん
08/04/11 20:16:02
>>287
Aどころか女と付き合ったこともないお前が言うと笑えるw

310:デフォルトの名無しさん
08/04/11 20:34:22
ワシのCは108手までまであるぞ

311:デフォルトの名無しさん
08/04/11 21:18:17
本当に初歩的な事ですみません…
C#ってなに?

312:デフォルトの名無しさん
08/04/11 21:20:08
プログラム言語

313:デフォルトの名無しさん
08/04/11 22:40:22
そのプログラムの中のたとえばどのようなものか教えていただけたらありがたい。

314:デフォルトの名無しさん
08/04/11 22:40:40
日本語でおk

315:デフォルトの名無しさん
08/04/11 22:45:33
自然言語に日本語、英語、フランス語と色々あるように、
プログラムを記述するのに使う言語も色々ある。
その1つがC#。もちろんCも1つの言語だ。

316:デフォルトの名無しさん
08/04/12 00:00:10
Cよりはjavaに近い言語ってよく言われてるね
まぁC#とか触ったこともないけどなw

317:デフォルトの名無しさん
08/04/12 00:28:35
JAVAっぽいC++

318:デフォルトの名無しさん
08/04/12 01:04:35
マイクロソフトのマイクロソフトによるマイクロソフトのために作られた言語


319:デフォルトの名無しさん
08/04/12 12:44:08
J++の焼き直し言語がC#

320:デフォルトの名無しさん
08/04/12 12:52:04
どの言語だろうと、基本的な部分は共通しているし
実装されている、出来ることを知ることの方が重要。
あとは、用意されているライブラリをきちっと使えれば、どの言語だろうと関係ねぇ
限定した言語でしか通用しないような奴は、どこへ行っても使い物にならない。
とりあえず、コンピュータの仕組みを知ることが出来たんで、大学に通っておいて正解だったぜ。

321:デフォルトの名無しさん
08/04/12 14:10:50
と、突然どうした。。。

322:デフォルトの名無しさん
08/04/12 14:15:56
簡単な文字出力のプログラムを作ったとして、
それをチャット上などで動作させることはできないのですか?
コマンドプロンプトの中でしか出力できないのですが

323:デフォルトの名無しさん
08/04/12 14:17:00
>>322
そう。

324:デフォルトの名無しさん
08/04/12 14:34:24
>>322
チャット上に文字出力するプログラム作ればいいじゃん

325:デフォルトの名無しさん
08/04/12 14:36:31
>>324
出力先をコマンドプロンプトじゃなくて、チャット上にするやり方が分からない
本にもそういうの載ってないんだが
すべてが独学だから聞く人もいないし・・

326:デフォルトの名無しさん
08/04/12 14:38:40
>>322
そのチャットソフトが外部プログラムを呼び出すようにできていれば、可能かもしれない。
# まぁ無理だ。

327:デフォルトの名無しさん
08/04/12 14:40:46
>>326
そうなんですか?teacupチャットだけど
ホットコーヒーのやつでは出来てたような。。。
とりあえず外部プログラムを呼び出すようにできてるかも分からないので、もちと勉強してきます!
ありがとうございました!

328:デフォルトの名無しさん
08/04/12 21:26:46
名古屋近辺の専門学校でC言語学びたいと思うんだけど、どこがあるか紹介して。
または2チャンネルのスレッドでそういうスレがあったらきぼん。

329:デフォルトの名無しさん
08/04/12 21:27:35
>>328
大学へGO!
やっぱり基礎が大事だから

330:デフォルトの名無しさん
08/04/13 07:30:38
C言語で操っている、操作させている、制御しているコンピュータの基本的な仕組み
そして極め付けが、君が日ごろ見ている文字、絵、動画、音声、それらはすべて
ある法則に則って記録された数値データ、その数値データを人間で言う動物細胞
物質の原子レベルまで追求して話をすると、0と1の組み合わせ、すなわちバイナリーデータとは
0と1、あるかないか、磁石で言う+と-、電気信号でそれらを管理、制御しているのさ。
ほら、いつもニヤニヤしながら見ているエロ画像、それがだんだん・・・ただの色の集まり、
その色は0と1の組み合わせで構成されているデータに見えてきただろ?
PCに色や文字、音声が人間が解釈できる形で表現できる機能が実装されているから
その0と1の無機質なデータがエロ画像に見えるのさ。グロだろうと。

331:デフォルトの名無しさん
08/04/13 09:52:55
人間なんて所詮炭素と水なのさ

という話と同等のどうでもいい話

332:デフォルトの名無しさん
08/04/13 10:06:34
その通り、しかし、それを理解してそれに対して適切に制御、操作できれば
可能な範囲内で様々なことが出来るようになる。だから基本に戻れと。
ただ・・・人間も、いくら美人だろうとイケメソだろうが、所詮最後は朽ち果てて
この世から存在すらなくなってしまうのさ。ほら、躊躇してねーで、とっとと
好きなプログラムを作れ。そしてエロ画像で好きなだけはぁはぁしてろ、な?

333:デフォルトの名無しさん
08/04/13 10:08:37
>>332
生きた証をどう残すかだな。子孫か、グレートコードか。

334:デフォルトの名無しさん
08/04/13 10:10:29
なんで択一なんだよ
両方ゲットせいよ

335:デフォルトの名無しさん
08/04/13 10:11:39
もちろん両方残せるのが一番良い。

336:デフォルトの名無しさん
08/04/13 10:13:58
おまえら何の話してるんだよ

337:デフォルトの名無しさん
08/04/13 10:20:13
自分も可能な範囲で子供を作れるのさ、作られるものは
遺伝子レベルでのことになるが。

338:デフォルトの名無しさん
08/04/13 14:32:55
returnとか戻り値とかどういうときにどう使うんですか?
詳しくかつ解りやすく教えてください

339:デフォルトの名無しさん
08/04/13 14:43:45
自作した関数は式の中で使えるんだよ。

340:デフォルトの名無しさん
08/04/13 15:17:19
int main()

341:デフォルトの名無しさん
08/04/13 15:21:39
int sankaku(int teihen, int tkasa)
{
return teihen * takasa / 2;
}

int main()
{
printf("%d", sankaku(10, 50));
return 0;
}

342:デフォルトの名無しさん
08/04/14 18:18:42
ソースURLリンク(kansai2channeler.hp.infoseek.co.jp)
ヘッダファイル(Macの方はこれがないと実行できません)URLリンク(kansai2channeler.hp.infoseek.co.jp)

内容は1〜9の数字を表示して、中に入っていない数字(3が表示されていないなら3)を入力する簡単なゲームです
このままだと最高記録と、最後に終了した時刻を書き込むだけなのですが
いままでの記録のベスト10と、それぞれに対応した終了時刻を扱えるに変更したいです

最初にfread,fwrite関数で記録の要素数を計ってプログラムを組んだのですが
正常に読み取り、書き取りができませんでした
その時のコードを載せればいいのですが、そのままだといくつか変更しないとエラーが出るので正常に動くソースをさらしました
できるだけ簡単に記録のベスト10と、それぞれに対応した終了時刻を扱える方法を教えてください

343:デフォルトの名無しさん
08/04/14 21:33:40
どんどん流れてくるデータ列を、指定された割合で「バランスよく」
間引く方法で悩んでいます。

割合を%で指定された場合に、データ処理時に以下のようにしたのですが
int a = (clock() % 100) + 1;
if(a > DROPRATE) { ; }

これだと50%を指定したときに(0がFALSEで1がTRUEだとして)
000000111111000000111111
という感じに並んでしまい、
010101010101....
とはなってくれません。

出来るだけきれいに固まりが出来ないように間引くのには、通常どんな方法を
とればよいのでしょうか?

344:デフォルトの名無しさん
08/04/14 21:33:41
>>342
先ず、get_data()を改修してみよう。
fscanf()の使い方はそのままで、そこで得たbest, yearなどを格納できるように構造体配列を用意するのを忘れずに。
それができたら、テキストエディタで現在のkiroku.txtを編集してダミーデータを作ってそれを喰わせてみよう。
ここまでできれば、後はput_data()を改修して、記録の取り扱いのロジックを書けばいい。

要は、1件扱うのも10件扱うのも同じこと。
fscanf()とfprintf()で作っているのなら別途fread(), fwrite()が必要になるなんてことはない。

345:デフォルトの名無しさん
08/04/14 21:41:57
>>343
なんで clock なんか使ってるの?
rand 使えば?

346:デフォルトの名無しさん
08/04/14 21:44:43
いえ、randomで書いて、やっぱり固まり部分が出きるので
きれいにならぶ規則性がほしいな、と思っているのですが・・・
三角関数とか使うのは嫌だし・・・

347:デフォルトの名無しさん
08/04/14 21:45:11
>>343
clock() に DROPRATE を掛ければ委員ジャマイカ?

348:デフォルトの名無しさん
08/04/14 21:48:25
>>346
バケツ変数みたいなものを用意して、毎回通過時にDROPRATEずつバケツに足していくとか。
勿論、バケツが一杯になったら空にすればいい。
Ex.

static unsigned bucket = 0;
bucket += DROPRATE;
if (bucket >= 100) {
bucket = 0;
flag = true;
} else {
flag = false;
}

349:デフォルトの名無しさん
08/04/14 21:51:05
データ列の速度が1じゃないとだめか。
こうか?
a = (a+DROPRATE) % 100;
if(a > DROPRATE) { ; }

350:デフォルトの名無しさん
08/04/14 21:57:40
リサンプルにおけるエイリアシング現象じゃないの。

351:デフォルトの名無しさん
08/04/14 22:05:02
>>346
なるほど。規則的にしたいのか。
a 中に b 個 1 が規則的に出てきて欲しいのであれば、

void ab(int a, int b) {
for (int i = 0; i < a * b; i += b) {
printf("%d", (i % a < b));
}
printf("\n");
}

とかどうよ。

352:デフォルトの名無しさん
08/04/14 22:06:05
コメントありがとうございます。
>>347
 すみません。良くわかりません。
>>349
 なるほど、これだと確かに固まりが分散しそうですね。やってみます。

353:デフォルトの名無しさん
08/04/14 22:07:45
>>343
規則的でよければブレゼンハムのアルゴリズムが使えるよ
乱数要素を混ぜるならバッファ付のディザリングみたいの使えばおk

354:デフォルトの名無しさん
08/04/14 22:08:24
>>351
 ありがとうございます。やってみます。

355:353
08/04/14 23:02:19
>>343
いまさらだけど…
>>351 と同じインターフェイスで

void ab_(int a, int b){ // ブレゼンハム
int i, x;

for(i=0,x=a/2;i<a;i++,x+=b+1){
printf("%d", (x>=a));
if(x>=a) x-=a;
}
printf("\n");
}

double uniform_rand(void){return (double)rand()/(RAND_MAX+1);}
void ab__(int a, int b){ // 乱数ディザリング
int i, d;

for(i=0;i<a;i++){
d=0;
if(uniform_rand()*(a-i)<b) d=1,b--;
printf("%d", d);
}
printf("\n");
}

356:デフォルトの名無しさん
08/04/14 23:52:21
>>355
 ありがとうございます。参考になります。

皆さんへ
 結局、>>351さんのループ部分をばらした関数を作って使いました。
 どうもありがとうございました。

357:デフォルトの名無しさん
08/04/15 00:24:57
>>353
347=349だけど参考になった。
ブレゼンハムのアルゴリズムっていうのか。

358:353
08/04/15 14:25:42
>>357
参考にするなら訂正しておくよ orz
void ab_(int a, int b){ // ブレゼンハム
int i, x;

for(i=0,x=(a+b)/2;i<a;i++,x+=b){
printf("%d", (x>=a));
if(x>=a) x-=a;
}
printf("\n");
}

359:デフォルトの名無しさん
08/04/15 23:37:51
getchar()を使用し、絶対値を返すプログラムを作れ、ということで
ここでいろいろ参考にして、一応作ってみました。
結果は問題ないと出るのですが、イマイチ無駄な処理が多いかなと自信なくて、
修正できるとこがあれば、自分が判りそうな範囲で修正して教えてくださいー;
URLリンク(kansai2channeler.hp.infoseek.co.jp)

360:デフォルトの名無しさん
08/04/15 23:38:59
宿題スレ池

361:278
08/04/16 00:14:15
>>359
だから関数化しようって。
無駄な処理を言うなら、フラグを駆使してまでmainだけで頑張ることが無駄。
278のをgetchar使うように修正しといたから。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

362:359
08/04/16 00:21:36
>>361
すみません、わざわざありがとうございます;

363:デフォルトの名無しさん
08/04/16 00:55:50
質問お願いします。
#include <stdio.h>

int main(void)
{
  int x[80],y[80];
  int a=-400,b=-400,lp,c=0;
 
  for(lp=0;lp<40;lp++){
     x[c]=a;y[c++]=b;
     x[c]=a;y[c++]=-b;
     a+=20;
     }  
  for(lp=0;lp<80;lp++){
     printf("x[%d]=%d y[%d]=%d\n",lp,x[lp],lp,y[lp]);
     }
  system("PAUSE");
  return 0;
}
上のプログラムで、ループを使って配列変数に値を代入する部分で、
最初のループでyに値を代入する時、y[c++]にbの値を代入するようになってますが、この時cに+1されているはずなのになぜy[0]の部分にbが代入されるのでしょうか?
一応、線を引くための座標を代入させるのが目的なので、y[0]に代入されて正解なのですが、どうしても気になったので質問させていただきました。分かりづらい説明かもしれませんがどうかお願いします。

364:デフォルトの名無しさん
08/04/16 00:59:37
>質問お願いします。
日本語でおk

c++ は cの値を取り出して使った後で、 cの値が+1 となる
つまり上記のy[c++]=bは c=0であれば y[0]にbを代入した後に、c=1 となる
おk?

365:デフォルトの名無しさん
08/04/16 01:00:47
>>363
x[c]=a;
y[c++]=b;

これの前中後それぞれに、cの値を表示するprintf文入れりゃわかるよ。

366:デフォルトの名無しさん
08/04/16 01:08:38
y[c++] = b だと y[c]←b の後に cを1加算  つまり y[0] == b
y[++c] = b だと cを1加算した後に y[c]←b つまり y[1] == b

367:デフォルトの名無しさん
08/04/16 01:08:52
>>365
前後じゃわからんだろう

368:363
08/04/16 01:21:50
>>364-366
++の位置で1を加算するタイミングが変わるのですね。
理解することが出来ました。ありがとうございます。

369:デフォルトの名無しさん
08/04/16 02:47:52
>>359
すでに指摘されていますが、absolute() とするのならば、input() なども作るのはどうでしょう。
桁数切り取りの場合わけに苦労しているようですが、「数字部分で8桁」と考えればいいかと想います。エラー1, エラー2 の検出も簡単に記述できると思います。min, cnt, err が絡み合わないように整理したほうがいいでしょう。
9桁目以降で数字以外の文字が入力された場合は、題意としてはエラーにしたほうがいいかも?(これは仕様の読みの問題ですが。)

些細なことですが、
getchar() ( -> fgetc() ) の返り値は int です。
main の返り値は int がお約束です。

提示されたソースの手法に従うのなら、こんなのはいかが?
(確認環境 WindowsXP, 処理系 cygwin(gcc 3.4.4))
URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>361
きれい‥‥。でも質問者は <string.h> 全般がわからなくてスルーしちゃったのかも。

370:デフォルトの名無しさん
08/04/16 03:17:34
エラーを数値でやるより列挙子使おうぜと言おうと思ったがまだ習ってないか。

371:369
08/04/16 03:40:15
#define のかわりに列挙子を使う人もいますね。最近知りました。

372:デフォルトの名無しさん
08/04/16 14:10:53
質問です。
変数のみの行を記述してもコンパイルエラーにならないようですが、
・文法上、なぜOK?
・どんな動きをする(最適化等で消されて何もしない?)

void main(void)
{
 int a;

 a;       <- この行
}


373:デフォルトの名無しさん
08/04/16 14:13:08

BorlandC++ 5.5
Renesas C Compiler 9 for SH
でコンパイルOKでした。

374:デフォルトの名無しさん
08/04/16 14:17:33
・あらゆる式は;を付ければ式文として文になるから
・何もしない

375:デフォルトの名無しさん
08/04/16 14:26:21
例えばf(i);のように書いてあるとして、
あとから先頭の方に#define f(arg) (arg)と書けば
関数呼び出しが無かったことにできます
プリプロセスの都合上必要なだけです

376:デフォルトの名無しさん
08/04/16 14:26:25
Cでは関数を呼ぶのも代入も式の内なので、式文が許されないとプログラム書けない。

377:デフォルトの名無しさん
08/04/16 14:41:50
>>376
エラーにならない理由を聞かれて規則でそう決まってるじゃ答えになりません
エラーがでない理由はエラーにしない方がよいと言語の設計者が考えたからであって
文法規則はその結果でしかないです

378:デフォルトの名無しさん
08/04/16 15:09:08
訊かれてるのは「文法上、なぜOK?」であって、言語設計者がどう考えたかではないし

379:デフォルトの名無しさん
08/04/16 15:28:47
関係ないけどmainの戻り値はintにしとけ

380:デフォルトの名無しさん
08/04/16 15:41:28
ちっちっち、てんで説明になってないぜ、坊や達?一度、顔を洗って出直しな。
ついでに鏡を見てごらん。そう、何かこう、プギャー!な面が映し出されているだろ?
それが何だか分かるかい?そう、自分の顔さ。見事な面だろ?
人前に出た君を、周りはその顔の人だと見ているのさ。

それはさておき、a;がなぜおkかって?単項でも数式と言えるからさ。
こんなの、数学でも初歩的だよ?w

381:デフォルトの名無しさん
08/04/16 17:12:49
>>374-380
コンパイラ(構文解析か?)が仕様としたものが分かりました。ありがとうございます。

>>375 確かに。目にしていたはず。
>>380 "単項でも数式と言える"なるほど。 最後のwが興ざめですが。

382:デフォルトの名無しさん
08/04/16 19:45:59
なぁ〜〜にぃ〜〜!やっちまったな!
男は黙ってぇ〜 炭坑に入れ

383:デフォルトの名無しさん
08/04/16 21:04:19
しばらく平和だったのに頭おかしいのが戻ってきちまったな

384:デフォルトの名無しさん
08/04/16 21:16:38
平和ばっかりじゃつまらないだろ?たまにはリーチ、一発、タンヤオ、イーペーコー
七対子、対々和、三暗刻くらいは狙おうぜ?そして僕イケメン。

385:デフォルトの名無しさん
08/04/16 21:19:49
>>384
国士無双、四暗刻のダブル役満なみにねーよwww

386:デフォルトの名無しさん
08/04/16 21:20:20
国士のwktk感は異常

387:デフォルトの名無しさん
08/04/16 22:09:44
C言語の入門書を本屋で立ち読みしたのですが、
コンパイラとして無料で手に入るものもいくつかあがってました。
市販の処理系というのは、いずれ必要になるものなのでしょうか?
それとも、無料のもので長くやっていけるもの?

388:デフォルトの名無しさん
08/04/16 22:22:22
無理に市販のも使わなくてもいいよ。 無料で十分。
慣れて詳しくなってからでも、有料を選ぶのは遅くないだろうしな。

389:359
08/04/16 23:54:58
>>369
ありがとうございます、参考にさせていただきます。
あと、結果についてなのですが、case1のときのエラー判定が少し違ってて、
1aならエラー1、aaならエラー2、aならエラー2のように
ちょっと間違ってたようですー。

390:デフォルトの名無しさん
08/04/17 00:54:31
borlamd C++ compiler 5.5って、windows Vista でも動きますか?

391:デフォルトの名無しさん
08/04/17 03:09:46
>>390
GUIを持っているわけではなく、特殊なライブラリーもないから動くでしょう。
俺はもっぱらVisualC++2008 ExpressEditionを使っている。

392:デフォルトの名無しさん
08/04/17 07:16:23
まず自分の質問が++なのかさえ分からないものですが宜しくお願いします。
あるアプリで競艇のデータを作っています。掛け金を掛け方に応じ変えています。
■2連複=2000■3連単=3000
また投資額は(掛け方*レース数)です。
アプリ上で掛け方を入れたら自動的に投資額がでるようなのですが、式が分かりません。
自分で色々試し
■IF(方式=2連複,((レース数*2000,((レース数*3000)みたいなのを作りましたが、これだとダメでした。
宜しくお願いします。

393:デフォルトの名無しさん
08/04/17 08:11:47
>まず自分の質問が++なのかさえ分からないものですが宜しくお願いします。
「++」が何のことか判りませんが、Cの質問ではないようですので
お使いのアプリ名でスレタイ検索してみてはいかがでしょうか。

394:デフォルトの名無しさん
08/04/17 08:36:04
>>393
やはりそうですか。
ありがとうございました。

395:デフォルトの名無しさん
08/04/17 08:42:22
>>389
それはすみません。今時間がないので、本日遅くに修正いたします。

396:デフォルトの名無しさん
08/04/17 15:18:29
Borland C++Compiler をダウンロードしようとしてもうまくいきません。
登録を済ませてからダウンロードボタンを押しても
「Internet Exploler ではこのページは表示できません」
と出ます。どうしてでしょう・・・

397:デフォルトの名無しさん
08/04/17 16:00:03
Borland C++ Compiler オ ワ タ
スレリンク(tech板)

実はオワテないです、ちゃんとダウソしてくり

398:デフォルトの名無しさん
08/04/17 16:06:25
>>396
URLリンク(www.codegear.com)

↑のC++ BuilderもしくはTurbo C++を落とすべし。

399:デフォルトの名無しさん
08/04/17 16:31:06
hello, world.

出たーーーーーーーーーーーーーーー
これまでに要した時間3時間。
先が思いやられる


400:デフォルトの名無しさん
08/04/17 18:17:05
質問です。いま入門書をみてテキストのプログラムを打ちこんでいるのですが、
以下の内容だとコンパイルできません。エラーはif構文に ) がないと表示さ
れてしまいます。


int a = 10
int b =20

~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
printf("aが20 またはbが30 またはaが10でない");
if (a== 20 || b== 30 || a!== 10)
{
printf("条件に当てはまりました。\n");
}
else
{
printf("条件に当てはまりません。\n");
}
}




401:デフォルトの名無しさん
08/04/17 18:17:09
ここはあなたの日記帳ではありません

402:デフォルトの名無しさん
08/04/17 18:17:44
>>400
!==

403:デフォルトの名無しさん
08/04/17 18:24:11
それで、ひとつひとつ調べたところ

if(a == 20 || b == 30)

だとコンパイルされます。他の値も調べてみたんですが、
ifに続く条件が3つになるとコンパイルできないことがわかりました。
2つまでだとコンパイルできます。

Borland C++Compilerの無料のCコンパイラを使用しているんですが
これに問題があるのでしょうか?


404:デフォルトの名無しさん
08/04/17 18:25:42
>>400

ありがとうございます。
一度やってみます。

405:デフォルトの名無しさん
08/04/17 18:25:48
それで、じゃねーよw


406:デフォルトの名無しさん
08/04/17 18:26:33
すいません
>>402さんでした
ご指摘ありがとうございます



407:デフォルトの名無しさん
08/04/17 18:42:17
やっぱり
if (a== 20 || b== 30 || a!== 10)をif (a== 20 || b== 30 || a!= 10)
と打ちなおしても if構文に ) がない、関数main
とエラーが出てしまいます。

うーん、やっぱり駄目なのかな


408:デフォルトの名無しさん
08/04/17 18:44:26
そういう慌てん坊さんは、格好悪くて括弧がつかないって中学校の数学の教師が言ってた

409:デフォルトの名無しさん
08/04/17 19:13:26
0で割る(除算する)と「問題が発生したため...」となって強制終了されるのですが、
0で割るのをやめる以外で、エラーを回避する方法はありますか?

410:デフォルトの名無しさん
08/04/17 19:36:58
>>409
0で割るのをやめる。

純粋に疑問なんだが、0で割ってエラーにならないとしたらどういう結果
になるのが自然だと思うんだろう。



411:デフォルトの名無しさん
08/04/17 19:47:40
なぜ0で割れないのか不思議だったが考えてみれば簡単で当然だった
16を4で割るということは16を4つのグループに分けるということ
どんな数字も0個のグループに分けることはできないんだから

412:デフォルトの名無しさん
08/04/17 19:52:18
0で割ったら0にしてほしいと思っています。
そのほうが便利だと感じます。

413:デフォルトの名無しさん
08/04/17 19:53:26
浮動小数点数でおk

414:デフォルトの名無しさん
08/04/17 20:06:51
>>400
int a
int b
の宣言文にセミコロン。

415:デフォルトの名無しさん
08/04/17 20:14:27
0をかけるってことは0の逆数で割るってことで、0/0で割ること。
0/0で割るのは0/0をかけるのと同じだから、0で割るのは0をかけるのと同じで0になっていい。
コンピューターだとビット演算の仕様でそういうことにはできないのかな。

416:デフォルトの名無しさん
08/04/17 20:15:07
>>407
黙ってソース全体をコピペするなりどこかに上げるなりしろ

417:デフォルトの名無しさん
08/04/17 20:15:54
>415
目をさませ
あるいは寝ろ

418:デフォルトの名無しさん
08/04/17 20:23:35
逆数

0 でないある数 a に対して、a × b = 1 となるような数 b を a の逆数 (ぎゃくすう) といい、

419:デフォルトの名無しさん
08/04/17 20:24:14
なるほど、1=2という結論ですね。

420:デフォルトの名無しさん
08/04/17 21:08:37
>>419
それは違う。それが成り立ってしまうと、数学的帰納法で全ての数が等価になってしまう。

421:デフォルトの名無しさん
08/04/17 21:15:48
なにか問題が?

422:デフォルトの名無しさん
08/04/17 21:24:01
>>414
セミコロンをつけましたがやはりダメでした

423:デフォルトの名無しさん
08/04/17 21:26:22
>>400>>402,414以外の間違いは見当たらないんだが。

424:デフォルトの名無しさん
08/04/17 21:44:04
エラーメッセージ貼れよ

425:デフォルトの名無しさん
08/04/17 22:04:46
#include<stdio.h>
#include<math.h>

int main(void)
{
double i,n,S;

for(i=10;i<=1000000000;i*=10){
S=0.0;
for(n=1;n<=i;n++){
S+=asin(n/i) /sqrt(1.0-(n/i)*(n/i)) /i;
}
printf("分割点%10d: %lf\n",i,S);
}
return 0;
}
domain errorが発生するんだけどどうして?

426:デフォルトの名無しさん
08/04/17 22:20:36
%dにdouble突っ込みゃそりゃどうなるか分からん罠。

427:デフォルトの名無しさん
08/04/17 22:28:17
>>425
sqrt(1.0-(n/i)*(n/i))が怪しい
1.0-(n/i)*(n/i)の計算結果が-0.0になることがあるんじゃないの?
sqrt(fabs(1.0-(n/i)*(n/i)))にしてみるとか


428:デフォルトの名無しさん
08/04/17 22:31:15
>/sqrt(1.0-(n/i)*(n/i))
これがまずい。
nがiのとき0で割ることになる

>>426
そこもおかしいが、domain errorとは関係ない

429:デフォルトの名無しさん
08/04/17 22:35:29
#include<stdio.h>
#include<math.h>

int main(void)
{
double i,n,S;

for(i=10;i<=1000000000;i*=10){
S=0.0;
for(n=1;n<=i;n++){
S+=asin(n/i) /sqrt(fabs(1.0-n/i*n/i)) /i;
}
printf("分割点%10d: %lf\n",i,S);
}
return 0;
}
やっぱりできない


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

5373日前に更新/199 KB
担当:undef