C言語なら俺に聞け( ..
[2ch|▼Menu]
593:デフォルトの名無しさん
07/10/30 15:50:05
->
これはどういう意味があるのでしょうか

594:デフォルトの名無しさん
07/10/30 15:54:29
やじるし

595:デフォルトの名無しさん
07/10/30 15:55:08
アロー演算子
構造体のポインタからメンバにアクセスするときはドット演算子ではなくこれを使う

596:デフォルトの名無しさん
07/10/30 15:57:52
struct point {
int x, y;
};
struct point p;
struct point *pp = &p;
があったとき、

(*pp).x = 1;
pp->x = 1;

が同じxに代入をしている。
構造体へのポインタを使う上での簡略化。

597:デフォルトの名無しさん
07/10/30 16:00:59
>>595>>596
ありがとうございました

598:デフォルトの名無しさん
07/10/30 17:29:44
使ってる教科書に載ってないのか?

599:デフォルトの名無しさん
07/10/30 19:46:39
検索エンジンを作ろうとおもう。
まずEUC-JPに統一する。
旧字体は新字体、カタカナはひらがなにする。
ひらがなと、新字体以外は登録しない。
出現可能な文字に0から順に番号をつけて、N-germ (2-germ) で登録していく
あと、ハッシュを使う為に全角2文字分を圧縮して20数ビットを使う

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

旧字体→新字体
URLリンク(www.ritsumei.ac.jp)
URLリンク(yasuda.homeip.net)
URLリンク(www.toyama-cmt.ac.jp)
URLリンク(www.asahi-net.or.jp)
URLリンク(homepage3.nifty.com)
URLリンク(homepage3.nifty.com)

600:デフォルトの名無しさん
07/10/30 19:56:23
連載:検索エンジンを作る|gihyo.jp
URLリンク(gihyo.jp)

Googleの技術は凄いと思ったがMooterっていうサイトがGoogleを上回る検索力らしい
Mooter
URLリンク(www.mooter.co.jp)
辞書不要の形態素解析エンジン「マリモ」とは
URLリンク(www.atmarkit.co.jp)
形態素解析について
URLリンク(www.gengokk.co.jp)
URLリンク(mecab.sourceforge.net)
Google の秘密 - PageRank 徹底解説
URLリンク(www.kusastro.kyoto-u.ac.jp)
PageRankの基本概念
URLリンク(tnt.math.metro-u.ac.jp)

601:デフォルトの名無しさん
07/10/30 19:58:27
>>599
ガンバレ
そしてこのスレに来るな

602:デフォルトの名無しさん
07/10/30 22:36:04
「関数へのポインタ」は何に使うの?必要(あると便利)な状況がよくわからない。

603:デフォルトの名無しさん
07/10/30 22:39:42
qsort関数がもろに関数ポインタ使用してるじゃないか

604:デフォルトの名無しさん
07/10/30 22:39:56
qsort

605:デフォルトの名無しさん
07/10/30 22:41:46
ある関数を呼ぶときに、呼ばれた関数内部で使う関数を外から指定するときに使います。
このばあい、関数へのポインターを引数で渡します。

例)
コールバック関数
リストに要素をつなげるときに大小比較関数


606:デフォルトの名無しさん
07/10/30 22:44:33
qsort関数もそうですね

void qsort(void *base, size_t num, size_t size,
int (*compare)(const void*, const void*))

この、int (*compare)(const void*, const void*)が関数ポインターで
この場合はソートの並びを呼び出し側で制御できるようにしている。


607:デフォルトの名無しさん
07/10/30 22:56:19
うーむ、わかったようでわからない。
複数の機能(=関数の数)を内包する関数で、引数の指定によって機能を使い分ける場合ってことかな?
でもそれって単なる文字列でも振り分け可能な気がするなぁ…やっぱりわからん。

608:デフォルトの名無しさん
07/10/30 22:59:49
たとえばqsortの場合、qsortの作者が想定してない型のソートもできる

単に引数で文字列を渡すだけじゃ、qsortの作者が想定している型やソート方法しか対応できない


609:デフォルトの名無しさん
07/10/30 23:03:25
>>607
ためしに qsort を使ってみろ
数値のソート、文字列のソート、自前構造体のソート・・・
そしたらわかる

610:デフォルトの名無しさん
07/10/30 23:04:51
ソート機能を提供するけど、その時必要となる比較の機能は自分で作ってね ってこと
一人で作業する分にはあまり使う必要無いと思う

611:デフォルトの名無しさん
07/10/30 23:35:24
比較関数はプログラマ側が用意できるので、昇順や降順、どの値を比較対象とするか等を任意に作れる。
そしてどんな比較関数でも同じ手続きで利用するために、関数へのポインタを使っている。

…で合ってる?

612:デフォルトの名無しさん
07/10/30 23:37:46
ポインター自体を完全に把握してないんじゃないかね?
あれ覚えるのやっかいだし

613:デフォルトの名無しさん
07/10/30 23:38:33
ソート関数とかわかりずらい STLつかっとけ

614:デフォルトの名無しさん
07/10/30 23:50:45
ポインタはそんなに分かりづらいとは思わなかったなぁ。
いっぺん練習で、全ての変数をポインタとmallocでコーディングしたらイヤでも理解出来るよ。

615:デフォルトの名無しさん
07/10/31 00:00:58
EUC-JPコードをファイルから読み込んだとき、char やstringでは何コードで記録されるんですか?
指定できますか?

616:デフォルトの名無しさん
07/10/31 00:29:42
OSは何を使ってるとか、コンパイラは何とかそういう情報も書いておこうぜ

617:プリンがー
07/10/31 00:47:58
データa1,a2---,a10及びb1,b2,----b10を読み、積和
S=a1b1+a2b2+-----a10b10を計算せよ。

#include <stdio.h>
int main (void)
{
int i,a[10],b[10];
int S;

for(i=1;i<=10;i++){
scanf("%d",&a[i]);
scanf("%d",&b[i]);

S+=a[i]b[i]
}
printf("積和は%dです。\n",S);
return(0);
}

これであってますか??

618:デフォルトの名無しさん
07/10/31 00:49:34
>>617
・Sの初期化がされていない。
・a[i]*b[i];

619:デフォルトの名無しさん
07/10/31 00:49:35
>>617
>S+=a[i]b[i]
とりあえずコレが間違ってる
*と;が足りない

620:プリンがー
07/10/31 01:07:16
>>618>>619
S=0
S+=a[i]*b[i];
ですね。
ありがとです。


621:デフォルトの名無しさん
07/10/31 01:12:26
>>620
セミコロン(;)忘れるなよ

622:プリンがー
07/10/31 01:31:53
うるせーバーカ

623:デフォルトの名無しさん
07/10/31 02:04:27
かなり初心者です。
unsigned char afo_1,afo_2,afo_3,...afo_n;
とafo_1からafo_nまで宣言したい時はどうしたら良いですか?

624:デフォルトの名無しさん
07/10/31 02:09:22
>>623
配列じゃダメなの?n=10なら
unsigned char afo[10];

配列の各要素へのアクセスは添字を指定する。
afo[0] = 'a';
afo[1] = 'b';

afo[9] = 'j';

625:デフォルトの名無しさん
07/10/31 02:09:30
>>623
全部書くしかない。
配列でいいなら配列使え。

626:623
07/10/31 02:15:12
>>624,>>625
nが決まった値では無いので、今の路線は無理ですねー。。
配列で頑張ってみます。夜遅いのにすみません。素早い対応ありがとうございます。

627:627
07/10/31 04:16:28
明日提出のレポートのプログラムなのですが
どうしても実行後うまくいきません
簡単なプログラムで
入力された文字を”#”で表すというものですが
指摘お願いします

URLリンク(upsurusuru.hp.infoseek.co.jp)
にアップしましたので怪しいむと思いますが
助けてくださいお願いします
07/10/31(Wed),04:10:07
この時刻にアップしました
拡張子を.cに変更してください
だれかおねがいします

628:デフォルトの名無しさん
07/10/31 04:30:05
>>627
うちの環境だとコンパイルできないから確認してないけど、
isalphaとisdigitが逆なんでねーの?

629:Pもかっこわりぃなぁ
07/10/31 10:42:33
>>627
どうでもいいけど、ABCDEFGHIしKLMNOPQRSTUVWXYZになっている。

630:デフォルトの名無しさん
07/10/31 13:33:38
printfとprintf_Pの違いを教えてください

631:デフォルトの名無しさん
07/10/31 13:43:36
printfで数字を表示するときも”123”のように”を使いますか?


632:デフォルトの名無しさん
07/10/31 14:07:34
数値と数字の違いが分からんのか

633:デフォルトの名無しさん
07/10/31 14:20:54
>>631
5点

634:デフォルトの名無しさん
07/10/31 14:58:30
キーが押されたら何かアクションを起こすってするにはどうすればいい?

例)
enterを押すと計算をするみたいに
enterキーが押されたっていう結果をどうやって取り込むか教えてください

635:デフォルトの名無しさん
07/10/31 15:09:11
>>631
いいえ
”ではなく"を使いましょう

636:デフォルトの名無しさん
07/10/31 15:21:24
>>634
getchar()でもしておいたら?

637:デフォルトの名無しさん
07/10/31 15:28:13
>>634
環境による。つかキーボードドライバの仕様による。

638:デフォルトの名無しさん
07/10/31 16:35:44
>>634
コンソールで?
ウィンドウで?

639:デフォルトの名無しさん
07/10/31 16:41:08
ウインドウだってコンソールの一種だろ。


640:デフォルトの名無しさん
07/10/31 17:22:57
>>639
>>639
>>639

641:プリンがー
07/10/31 17:45:50
>>622
俺の猫かぶりすんなや!

642:デフォルトの名無しさん
07/10/31 23:16:08
OSかかないと困るんだなって今日始めてしった
MS-DOSで実行した場合int型って2バイトづつのメモリじゃん?
でもXP上で実行したらint型だと4バイトづつになって超悩んでた結果、
16ビットマシンと32ビットマシンって事って始めて知ったよ・・・

643:デフォルトの名無しさん
07/10/31 23:23:53
System.arraycopy(コピー元,コピー開始位置,転送先,転送開始位置,要素数)
のJAVAの関数を

memcpy(コピー先,コピー元,, n バイト分)
に置き換えたいのですが

要素数をnバイト分であらわすか、
nバイト分を要素数に変えるにはどうすればいいか教えてください

sizeof(nバイト分)ではダメでした

644:デフォルトの名無しさん
07/10/31 23:24:58
>>643
sizeof(要素)*要素数

645:デフォルトの名無しさん
07/10/31 23:27:05
>sizeof(nバイト分)
その発想は無かったわ

646:デフォルトの名無しさん
07/10/31 23:38:59
>>644
できました!!!!!!!!!!!!!!!!!!!11
すいませんが、何をやっているのか教えていただけませんか?

>>645
バカですいません

647:デフォルトの名無しさん
07/10/31 23:50:11
>>646
sizeof(要素)で1つあたりのバイト数が出る
要素数をかけ算すればn バイト分が求まる。
かけ算は小学校三年生だっけ?

648:デフォルトの名無しさん
07/10/31 23:55:23
理解できました。

memcpyではあくまでバイトを扱うのであって
要素数分のバイトを3つ目に入れないとダメなわけですね。。。ありがとうございました

649:デフォルトの名無しさん
07/11/01 01:53:40
ここのスレのひとはgdbの
使い方完全に理解してるのかな?

関数の中の関数とかどうやって見るの?

650:デフォルトの名無しさん
07/11/01 02:03:28
>>640
コンソールって何のことだと思ってんの?

651:デフォルトの名無しさん
07/11/01 07:16:51
unsigned int **pi, i, j;

if ((pi = malloc(sizeof(unsigned int *) * 32)) == NULL)
{
fputs("しっぱい", stdout);
exit(0);
}

for (i = 0; i < 32; i++)
{
if ((pi[i] = malloc(sizeof(unsigned int))) == NULL)
{
fputs("しっぱい", stdout);
exit(0);
}
}

for (i = 0; i < 32; i++)
{
fprintf(stdout, "%8u %8u", pi[i], &pi[i][4]);
fputc('\n', stdout);
}

for (i = 0; i < 32; i++) free(pi[i]);
free(pi);
return 0;

pi[i][4] と pi[i + 1][0] のアドレスが一緒になっちゃうんだけど、なんで?

652:650
07/11/01 07:26:15
>>651
自己解決しました。バカだなオレ…orz

653:デフォルトの名無しさん
07/11/01 07:37:41
>>650
ウィンドウって何のことなの?

654:デフォルトの名無しさん
07/11/01 12:06:05
構造体配列を宣言するとき二次元配列として宣言できますか?

typedef struct bridge{
int a;
int b;
int c;
}DATA;

DATA m[5][5];

こんな感じです。

655:デフォルトの名無しさん
07/11/01 12:09:01
>>654 全然おk

656:デフォルトの名無しさん
07/11/01 12:10:10
>>655
すばやいレスありがとうございます。

657:デフォルトの名無しさん
07/11/01 13:21:06
先ほどの654のものですが宣言で以下のようにしましたがうまくいきません。
typedef struct bridge{
int a;
int b;
int c;
}DATA;

DATA m[5][5] = {
{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},
{-1,0,0},{0,0,0},{0,0,2},{0,0,0},{-1,0,0},
{-1,0,0},{0,1,5},{0,0,0},{0,1,3},{-1,0,0},
{-1,0,0},{0,0,0},{0,1,2},{0,0,0},{-1,0,0},
{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0}
};
構造体を二次元配列で宣言する場合はどのようにすればよいのでしょうか。
アドバイスお願いします。

658:デフォルトの名無しさん
07/11/01 13:32:45
>>657
DATA m[5][5] = {
{{-1, 0, 0}, ...},
...
};

659:デフォルトの名無しさん
07/11/01 13:40:09
>>658
本当に申し訳ありません。
単純なミスでしたorz
ありがとうございます。

660:デフォルトの名無しさん
07/11/01 14:29:42
>>639
CUI || GUI ?

661:デフォルトの名無しさん
07/11/01 14:57:27
int型の数値をchar型の文字列配列に入れたいんですけどできますか?

662:デフォルトの名無しさん
07/11/01 15:05:21
>>661
char ci[100];
int i = 2007;
sprintf(ci, "%d", i);

663:デフォルトの名無しさん
07/11/01 15:09:29
そういう意味だったのか
さすがエスパー

664:デフォルトの名無しさん
07/11/01 15:12:44
>>662
ありがとうございます!

665:デフォルトの名無しさん
07/11/01 16:18:05
>>660
URLリンク(www.excite.co.jp)

666:デフォルトの名無しさん
07/11/01 16:20:06
>>660
こっちのほうが解りやすいかな。
URLリンク(www.excite.co.jp)

667:デフォルトの名無しさん
07/11/01 16:25:24
>>665
え?
>>634
のプログラムの話なんだけどなんなの?

668:デフォルトの名無しさん
07/11/01 20:52:53
ポインタ意味わかんねええええええええええええええええ
*pだとしたら
p = &a ってアドレスのみ格納?
でこの場合
*pはaの中身そのまま、pならaのアドレスそのまま &pならポインタ変数pのアドレス。
これでいいのかい!?
でポインタのポインタとかイミフ!

669:デフォルトの名無しさん
07/11/01 21:04:02
>>668
>*pはaの中身そのまま、pならaのアドレスそのまま &pならポインタ変数pのアドレス。
>これでいいのかい!?
まあ大体はおk

>でポインタのポインタとかイミフ!
単純に上のaがポインタだと考えればいいんだよ

670:デフォルトの名無しさん
07/11/01 21:33:12
>>669
ソノハッソウハナカッタワ
すげー単純にわかった。thx

671:デフォルトの名無しさん
07/11/01 22:42:44
while(count < 20)
{
  aiai = rand();
  if (aiai >= 0 && aiai <= 100)
  {
    count2 = 0;
    while(count2 < 3)
    {
      test[count][count2] = aiai;
      count2++;
      printf("%4d ",test[count][count2]);
    }
  printf("\n");
  count++;
}

配列二次元目をまず3つ埋めた後、
縦に20個の繰り返しで乱数での数字を埋めたいんだけど、
どーもcount2が機能してないみたいで、全部初期化した0が返ってくる。
なんでなんだぜ?
二次元目って変数指定できないの?

672:デフォルトの名無しさん
07/11/01 22:43:48
あ、ごめん上の見やすくするためにスペース入れてたらifの閉じるの消えちゃってる。
それはご愛嬌で><

673:デフォルトの名無しさん
07/11/01 22:47:36
ごめんなさい。
よくよく見直したら
      count2++;
      printf("%4d ",test[count][count2]);
これ処理の順番逆でした・・・。

674:プリンがー
07/11/02 00:35:43
-
x(エックスバーってどうやったら入力できますか?

675:デフォルトの名無しさん
07/11/02 00:36:39
>>674
Wikipedia項目リンク

676:デフォルトの名無しさん
07/11/02 01:12:30
プログラム初心者です。
乱数のrand()を使って勝、負のとこを帰れば丁、半にかえるプログラムですが
これで問題はないでしょうか?

#include <stdlib.h>
main(){
int a;
a= rand() % 2;
if(a==1){
printf("勝");
}else{
printf("負");
}
}

プログラムの意味でifは基本なのでわかりますが

↓ここの部分があまりよく分からないんですが
a= rand() % 2;
if(a==1){
%2は2つの数のどちらかを出すと考えたのですがそれでよろしいでしょうか?
a==1のとき勝が表示されます。
a= rand() % 2で1が表示された場合
elseはa==0ということで負と表示されていると考えていのでしょうか?

応用として甲、乙、丙をランダムに表示させる場合はif(a==2)、else if(a==1)、else
として甲、乙、丙を表示させると考えるとかんがえていいのでしょうか?

分かる方がいればよろしくお願いします。
初心者用の参考書には乱数関係の説明がほとんどないんで…。


677:デフォルトの名無しさん
07/11/02 01:14:18
乱数の説明はなくても%の説明がない参考書はないだろ。

678:デフォルトの名無しさん
07/11/02 01:15:57
#include <stdio.h>
int main(void)
{
while(1)
{
float kyori;
int ryokin;
printf("距離?"); scanf("%f", &kyori);
if(kyori <= 0.0) return;
  for(ryokin = 1300; kyori > 8.0; kyori -= 2.0) ryokin += 200;
if(kyori <= 5.0) ryokin = 870;
if(kyori <= 3.0) ryokin = 550;
if(kyori <= 2.0) ryokin = 380;
printf("料金 : %d\n", ryokin);
}
}

↑のプログラミングリストでfloatの型使わないで表すとどうなるでしょうか?
お願いします

679:デフォルトの名無しさん
07/11/02 01:19:40
宿題スレで聞け

680:デフォルトの名無しさん
07/11/02 01:28:03
>>676
rand()は0以上RAND_MAX以下の整数を返す関数
%2は2で割った余り(剰余)を求める
2で割った余りは0か1だからrand()%2は0か1どちらかをランダムに生成するという意味
甲乙丙なら3種類の乱数(0,1,2)をランダムに生成すればいいからrand()%3とすればいい

681:デフォルトの名無しさん
07/11/02 06:18:49
>676より

>680
ありがとう。
rand()%◆では◆で割った余りをランダムに表示させるという方法で
乱数をだしているんですね。

>677
それは分かるんです。質問の仕方が悪かったようで申し訳ないです。


682:デフォルトの名無しさん
07/11/02 10:10:23
表示

683:デフォルトの名無しさん
07/11/02 10:50:31
char *const p;
char *const *pp = &p;

pp = foo // 可能?
*pp = bar // 可能?

char *const *ppとあるとき、

*constと*はどっちが元のもの?
ポインタのポインタのポインタの…は、
どっち方向に * が伸びていくの?

684:デフォルトの名無しさん
07/11/02 12:18:41
>>683
fooとbarは何の型?

685:デフォルトの名無しさん
07/11/02 12:29:03
char c;
char *const p = &c;
char *const *pp = &p;
char *const **ppp = &pp;
char *const ***pppp = &ppp;

pp = foo; // 可能
*pp = bar; // 不可能
**pp = hoge; // 可能

686:デフォルトの名無しさん
07/11/02 12:41:26
char *const *pp
はconstなchar* のポインタ

char const **pp
はconstなcharのポインタのポインタ

と認識してるけど・・・

char *const p;
char *const *pp = &p; //OK

char const *p;
char *const *pp = &p; //NG


687:デフォルトの名無しさん
07/11/02 14:14:02
char *const *pp

charへのconstポインタへのポインタ?
charへのポインタへのconstポインタ?

char **const p

charへのconstポインタへのconstポインタ?
charへのポインタへのconstポインタ?(char *(*const) p相当?)

688:デフォルトの名無しさん
07/11/02 14:15:29
>>685 さんの説(?)で行くと、

char *const *pp
はcharへのconstポインタへのポインタ、ということになる。

689:デフォルトの名無しさん
07/11/02 14:17:26
>char *const *pp 
charへのconstポインタへのポインタ

>char **const p
charへのポインタへのconstポインタ

>charへのconstポインタへのconstポインタ? 
それは char *const *const p; と書く

690:デフォルトの名無しさん
07/11/02 15:58:45
おまえらはオレの脳を破壊する気ですか?

691:デフォルトの名無しさん
07/11/02 17:28:04
>>683-が一切わからん

692:デフォルトの名無しさん
07/11/02 17:50:59
要するにconstあり/なしの組み合わせの数がたくさんあるってこと。
ポインタじゃないただの変数の場合、constあり/なしの2種類しかない。

char c;
const char c;

ポインタには、指す先のconstあり/なしとポインタ自体のconstあり/なしがあるから、全部で4通りになる。

charへのポインタ … char *p;
charへのconstポインタ … char *const p;
const charへのポインタ … const char *p;
const charへのconstポインタ … const char *const p;

ポインタを指すポインタは、指す先が4種類あって、ポインタ自体のconstあり/なしもあるから、全部で8通り。

charへのポインタ へのポインタ … char **p;
charへのconstポインタ へのポインタ … char *const *p;
const charへのポインタ へのポインタ … const char **p;
const charへのconstポインタ へのポインタ … const char *const *p;

charへのポインタ へのconstポインタ … char **const p;
charへのconstポインタ へのconstポインタ … char *const *const p;
const charへのポインタ へのconstポインタ … const char **const p;
const charへのconstポインタ へのconstポインタ … const char *const *const p;

693:デフォルトの名無しさん
07/11/02 17:53:33
もうやめて>>692>>690-691のライフは0よ!

694:デフォルトの名無しさん
07/11/02 17:56:01
>>692 まとめおつ!!

695:デフォルトの名無しさん
07/11/02 18:01:20
「ポインタ完全制覇」だっけかに考え方が書いてあるよ

const char **const p;
の場合、右から順に考えて
p が const
*p はノーマル
**p が const
という風に機械的に解釈するといいらしい

696:デフォルトの名無しさん
07/11/02 18:03:18
どうせコンパイラも機械的に解釈してるしな

697:デフォルトの名無しさん
07/11/02 18:09:13
初心者だが上に挙げた事例でどこら辺の物まで
実際のプログラムで活用されるの?

なんか、>>692とかわけわかめなんだ。


698:プリンがー
07/11/02 18:11:37
三角形の面積を求めよ。

#include <stdio.h>
int main (void)
{
double height teihen;
double S;

printf("height=");
scanf("%lf",&height);
printf("teihen=");
scanf("%lf",&height);

S=height*teihen/2;

printf("面積S=%f\n",S);
}

これであってますか?

699:プリンがー
07/11/02 18:20:13
e=1+1/1!+1/2!+・・・+1/10!を求めよ。

#include <stdio.h>
int main (void)
{
int i;
double e;

for(i=1;i<=10;i++){

e+=0.1+1/i!:

}
printf("e=%f\n",e);
return(0);
}
あってます?

700:デフォルトの名無しさん
07/11/02 18:21:53
constのポインタだと
どこらへんがおいしいの?

701:デフォルトの名無しさん
07/11/02 18:22:44
>>698
teihen の値が怖いwwwww


>>699
e+= が怖いwwwww

702:デフォルトの名無しさん
07/11/02 18:23:54
!

703:デフォルトの名無しさん
07/11/02 18:27:18
>>697
例えば、
Manpage of QSORT
URLリンク(www.linux.or.jp)

に、(char * const *) p1が出てくる。

704:デフォルトの名無しさん
07/11/02 18:34:47
e+=0.1+1/i!:

eが初期化してない。
1/i!なんて式初めて見た。

705:デフォルトの名無しさん
07/11/02 18:38:43
for(i=1;i<=10;i++)

のケースだと i! はいつも 0 になり、ゼロディバイドw

706:デフォルトの名無しさん
07/11/02 18:43:07
>>705
!iならそうだろうけど・・・。
i!でもおk

707:デフォルトの名無しさん
07/11/02 18:52:45
>>703
thx
使うときは使うんだな。もっかいポインタやりなおすわ。

708:プリンがー
07/11/02 19:10:08
>>701
teihenじゃなくどうすればいいですか?ippen?

>>704
初期化・・このときe=0の初期化が必要なんですか?

709:デフォルトの名無しさん
07/11/02 19:14:25
>>708
printf("teihen=");
scanf("%lf",&height); // テーヘンだ!テーヘンだ!

710:プリンがー
07/11/02 19:19:49
>>709
あ、入力ミスですw
変数名はteihenで構わないですよね?


711:デフォルトの名無しさん
07/11/02 19:21:09
>>708
>>698の自分のプログラムをよく見ましょう
単純なケアレスミス

あとCにはi!なんて記法は存在しません

712:プリンがー
07/11/02 19:28:03
>>711
そうなんですか。
そうした場合>>699の問題でプログラムの本体はどうすればいんですか?

713:デフォルトの名無しさん
07/11/02 19:29:56
>>712

まずn!の意味を考えると・・・

n! = 1*2*3*4*5 ・・・ * n


あとはそれをプログラムするだけ。

714:プリンがー
07/11/02 19:34:23
>>713
なるほど。
プログラム内に「・・・」の表記はありなんですか?

715:デフォルトの名無しさん
07/11/02 19:38:14
あまりにアホすぎて釣りにしか見えない

716:デフォルトの名無しさん
07/11/02 19:38:21
>>714
まず問題の前に書式の勉強をしておいで。

717:プリンがー
07/11/02 19:40:32
初心者なもんですんまそ。


718:プリンがー
07/11/02 19:46:23
なしですね。

719:デフォルトの名無しさん
07/11/02 19:58:25
本気だったならごめん
勉強がんばれ

720:プリンがー
07/11/02 20:00:47
>>719
ありがとうございます。


721:プリンがー
07/11/02 20:47:49
e=1+1/1!+1/2!+・・・+1/10!を求めよ。
これって関数使わずにプログラム作れますか?

722:デフォルトの名無しさん
07/11/02 20:51:06
mainもつかわずに?

723:プリンがー
07/11/02 20:51:09
>>721
追記
関数でfactorial使ってできるんだろな〜てのは分かるんですが関数の学習
はまだちょこっとしかしてなくて

724:デフォルトの名無しさん
07/11/02 20:51:53
ハンドルネーム使ってる時点で…なぁ

725:プリンがー
07/11/02 20:51:59
>>722
mainは使ってです。

726:デフォルトの名無しさん
07/11/02 20:52:24
プリプロセッサメタプログラミングで求めろってことか

727:デフォルトの名無しさん
07/11/02 20:53:00
作れるよ

728:デフォルトの名無しさん
07/11/02 20:53:24
>>723
そんなのしなくても出来る。

まずn!を計算する処理を考える、
それが出来たらnn!を計算する処理を考える
それが出来たら1/nn!を計算する処理を考える。

729:デフォルトの名無しさん
07/11/02 20:55:00
関数使って作れるならそれをインライン展開したものを考えてみよう

730:プリンがー
07/11/02 20:55:14
>>727
そうですか〜。
for〜if〜使えばいいのかな?

731:デフォルトの名無しさん
07/11/02 20:55:59
うん

732:プリンがー
07/11/02 20:59:16
>>728
n!が俺には謎めいてきたw

733:デフォルトの名無しさん
07/11/02 21:04:13
>>730
二重ループは知ってる?

734:プリンがー
07/11/02 21:07:24
>>733
はい。条件分岐はだいたい分かってます。

735:デフォルトの名無しさん
07/11/02 21:07:42
C言語結構粘るな。そろそろ終わってもいいと思うんだが

736:デフォルトの名無しさん
07/11/02 21:12:35
答えはこのとおりだが、自分で考えたいだろうから読みにくくしている。
考え方だけ参考にして。ちなみに行儀の悪いコーディングの例でもあります
#include<stdio.h>
int main(void){int i,n=10;
double e=1.0,x=1.0;for(i=1;
i<=n;i++)e+=(x/=i);printf(
"%f\n",e);return 0;}

737:プリンがー
07/11/02 21:20:58
>>736
大変ありがとうございます。
ちなみにn=10とx=1.0は必要ないですよね!?


738:デフォルトの名無しさん
07/11/02 21:27:23
>>737
何故そう思う?

739:プリンがー
07/11/02 21:42:12
>>738
n=10はiの範囲のうち。x=1.0はe+=1.0/iの1.0はiを格上げするため。
double/int→doubleここはなんて説明すればいいのか・・・

740:プリンがー
07/11/02 21:43:38
xは1.0のままだからボックスを作る必要がない。


741:デフォルトの名無しさん
07/11/02 21:44:52
>>738
>>736のコードが難しすぎたようだ。
初心者にe+=(x/=i);をぱっと理解できるとはおもえん。

742:デフォルトの名無しさん
07/11/02 21:45:00
1.0のままではありませんよ

743:プリンがー
07/11/02 21:57:17
>>742
なぜ1.0のままじゃないんですか??
めんどくさくなければ教えて下さい。

744:デフォルトの名無しさん
07/11/02 21:58:27
>>743

x /= i

x = x/i;
のこと。

x/iをxに代入する。

745:デフォルトの名無しさん
07/11/02 21:58:46
>>739 の解釈だと >>736
e=1 + 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10
ってことになるよ

とりあえず x の値を表示させてみては?


746:プリンがー
07/11/02 22:04:39
>>744
それは分かってます。
>>745
ちょっと説明間違ったかなー
分子は1.0のままでしょ


747:デフォルトの名無しさん
07/11/02 22:17:12
>>746
じゃあ1/3!は 0.5/3だって理解は出来る?
同様に 1/4!は 0.166/4

748:デフォルトの名無しさん
07/11/02 22:21:55
>>746
前回のループで計算したxが分子だよ

749:プリンがー
07/11/02 22:22:53
>>747
1/3!=(1/2)/3
1/4!=(1/6)/4

750:デフォルトの名無しさん
07/11/02 22:26:12
>>749
そうそう。
あれ、分子が1.0のまんま?はて?

751:プリンがー
07/11/02 22:27:29
>>750
頭が痛くなってきた。

752:デフォルトの名無しさん
07/11/02 22:29:31
e+=(x/=i);を分解すると、
x = x / i;
e = e + x;

xのところに直値で1.0を入れることはできない

753:デフォルトの名無しさん
07/11/02 22:29:48
>>751
つまり分子は1.0のままではない。って事。

1/3!=(1/2!)/3
1/4!=(1/3!)/4
1/5!=(1/4!)/5



754:プリンがー
07/11/02 22:33:33
>>753
てか階乗の意味ってもともと
1/3!=(1/2!)/3
1/4!=(1/3!)/4
1/5!=(1/4!)/5
なの?
1/3!=1/1*2*3
1/4!=1/1*2*3*4
1/5!=1/1*2*3*4*5
じゃなくて?

755:デフォルトの名無しさん
07/11/02 22:34:04
西暦を入力すると干支が出るようにしたいんですが、何が違うのかわかりません。教えてください
if文が全般的に違うようです。
#include<stdio.h>

main() {
int year(void);
printf("西暦・・・");
scanf("%d", &year);
if(year % 12 = 2) {printf("%d 年は戌年",year);}
else if(year % 12 = 3) {printf("%d年は亥年\n",year);}
else if(year % 12 = 4) {printf("%d年は子年\n",year);}
else if(year % 12 = 5) {printf("%d年は丑年\n",year);}
else if(year % 12 = 6) {printf("%d年は寅年\n",year);}
else if(year % 12 = 7) {printf("%d年は卯年\n",year);}
else if(year % 12 = 8) {printf("%d年は辰年\n",year);}
else if(year % 12 = 9) {printf("%d年は巳年\n",year);}
else if(year % 12 = 10) {printf("%d年は午年\n",year);}
else if(year % 12 = 11) {printf("%d年は未年\n",year);}
else if(year % 12 = 0) {printf("%d年は申年\n",year);}
else {printf("%d年は酉年\n",year);}
return 0;
}


756:デフォルトの名無しさん
07/11/02 22:35:47
>>754
意味は同じでしょ?
結果が同じならおk

757:デフォルトの名無しさん
07/11/02 22:36:03
>>755
比較は == で

758:デフォルトの名無しさん
07/11/02 22:36:26
>>755
switchで頼むわ・・・。

759:デフォルトの名無しさん
07/11/02 22:37:31
テーブル使おうや・・

760:デフォルトの名無しさん
07/11/02 22:38:11
Hi, Let's use array.

761:デフォルトの名無しさん
07/11/02 22:38:14
int year(void);
って関数じゃなくて変数の宣言をしたいんじゃないの

762:デフォルトの名無しさん
07/11/02 22:50:41
>>757-761
お前らそんな一気に言ったら>>755が可哀想だろw

>>755
これを参考に。

#include<stdio.h>

const char *eto[] = {"申年","酉年","戌年","亥年","子年","丑年","寅年","卯年","辰年","巳年","午年","未年"}

int main(){
int year;

printf("西暦・・・");
scanf("%d", &year);
printf("%d年は%s",year, eto[year%12]);

return 0;
}

763:デフォルトの名無しさん
07/11/02 22:54:15
>>762
year にゲタをはかせて、テーブル自体は 「子」 から始まって 「亥」 で終わって欲しい

764:デフォルトの名無しさん
07/11/02 22:57:06
>>763
ああ、まあ、そっちの方が綺麗か
適当に脳内修正しといて

765:プリンがー
07/11/02 23:03:11
>>757
ですね。ちょいとプリントアウトでもして頭整理します。
ありがとです。

766:プリンがー
07/11/02 23:03:46
>>756だた。


767:デフォルトの名無しさん
07/11/02 23:29:09
>>755
それで警告が出るようにコンパイラオプションを指定しろ。
VC++なら/W4、gccなら-Wallとか。

768:デフォルトの名無しさん
07/11/02 23:30:17
ってそもそもエラーになるな、あほだ俺orez

769:デフォルトの名無しさん
07/11/02 23:30:30
>>767
警告っていうか、エラーにならないか?

770:プリンがー
07/11/02 23:43:00
for(i=0.5;i<=8.2;i++)
このときのi++は0.1刻みに増え(i=i+0.1)ますか?
それとも1ずつ増え(i=i+1)ますか?

771:デフォルトの名無しさん
07/11/02 23:44:47
>>770
やってみればいいじゃないか?

772:デフォルトの名無しさん
07/11/02 23:46:46
インクリメント・デクリメントできるのは整数型だけですよ

773:デフォルトの名無しさん
07/11/02 23:47:05
>>770
0.1刻みに増えると思う根拠は何だい?

774:プリンがー
07/11/02 23:47:06
>>771
コンパイラ?もってないからできない。

775:デフォルトの名無しさん
07/11/02 23:47:23
>>770
基本的にループ変数にfloatやdoubleを使うのはトラブルの元だよ
累積誤差が無視できない

776:プリンがー
07/11/02 23:48:24
>>772
なるほど。

777:デフォルトの名無しさん
07/11/02 23:48:42
>>774
今すぐインストールしなさい

778:デフォルトの名無しさん
07/11/02 23:50:40
コンパイラもなくコード書いてどーするwwwwwwwwwwwwwwwww

779:プリンがー
07/11/02 23:52:08
>>775
例えばy=x^3-x^2を1.5から8.5まで0.1ずつ変化させたときのyの値を
出力せよ。の場合ループを使わざるを得ないよね!?

780:デフォルトの名無しさん
07/11/02 23:53:06
>>779
そういう時は i += 0.1であって i++ではない。

781:デフォルトの名無しさん
07/11/02 23:53:16
>>779
ループは使うがループ変数は整数型でもできる

782:デフォルトの名無しさん
07/11/02 23:53:56
>>779
ループ変数にはintを使ってループの中で10.で割って使う

783:プリンがー
07/11/02 23:54:38
>>777
コンパイラ購入しないといけないでしょ?
ある程度入門書終わらせたら買うけど




784:デフォルトの名無しさん
07/11/02 23:54:45
一定時間ごとに処理を行うようなプログラムは
どのように作ればいいですか?


785:デフォルトの名無しさん
07/11/02 23:55:36
>>784
C標準だけではできない
割り込みとかポーリングとかOSやハードウェアをいじくる

786:デフォルトの名無しさん
07/11/02 23:56:04
>>783
google先生に 無料のコンパイラは無いか聞いてみれ

787:プリンがー
07/11/02 23:57:39
>>782
なるほどー!そうなのか

788:プリンがー
07/11/02 23:59:47
>>786
いつか聞いてみる!
いい道具だしてくれるかな〜ドラえもん

789:デフォルトの名無しさん
07/11/03 00:00:20
>>783
本に付属してるものならともかく今時の入門者はコンパイラ単体で買うのは珍しいと思う
いろんなコンパイラがネットから無料でダウンロードできるしね

790:デフォルトの名無しさん
07/11/03 00:00:53
>>788
今すぐ聞け

791:プリンがー
07/11/03 00:05:00
>>789
そうんだ〜!とある人から聞いたら
コンパイラは買わないといけないよって聞いた!
あぶね〜

792:デフォルトの名無しさん
07/11/03 00:11:12
>>791
特殊な環境用のコンパイラは買わないと無いかも知れない (PIC用とか)
MS-Windows とか MacOS とか Linux ならフリーのコンパイラがある
勉強ならパソコンでやればいい

793:デフォルトの名無しさん
07/11/03 00:13:41
ああ

794:プリンがー
07/11/03 00:20:25
>>792
なるほど。
参考になった。


795:プリンがー
07/11/03 00:27:51
>>782
ループの前に整数を10で割るという変数を定義してて大丈夫でしょ!?

796:デフォルトの名無しさん
07/11/03 02:28:17
>>795
喪前みたいにこんなに物覚えが悪い馬鹿が実際にコンパイルしないで効率落としてたら迷惑だ。
とっととコンパイラをインストールしてこい。
コンパイラなしに勉強したいなら、もう少し他人の書き込みを注意深く読めるようになってからにしろ。

797:デフォルトの名無しさん
07/11/03 02:40:36
生まれた年を入力することによって今年何歳になるかを表示するようにしようとしたのですが、何が間違っているかわかりません。
#include<stdio.h>
int tosi(int a,int b);
return a - b;

main() {
int year;


printf("あなたの生まれた年は?\n");
scanf("%d",&year);
printf("あなたは今年%d歳\n",tosi(2007,year));
return 0;
}


798:デフォルトの名無しさん
07/11/03 02:43:29
>>797
構文

799:デフォルトの名無しさん
07/11/03 03:46:22
配列の入力の時に,EOFだと-1入力で終了になりますよね?
改行で入力終了にしたいのですが,どうすればいいですか?
1 1 0 0 1 0 1 1 改行
で入力を終了したいです。
教えてください。よろしくお願いします。

//---- 配列入力
num = 0;
do {
 scanf("%d", &arr[num]);
} while ( arr[num++] != EOF );   // 改行は入力の終了
num--;                // 有効な入力数


800:デフォルトの名無しさん
07/11/03 04:28:06
変数やポインタについて質問なんですが、
それらが自分自身のメモリサイズを知っているのは何故なんですか?
例えば、
int a[3]={1,2,3};
printf("%d",*(a+1));
とかって場合、*(a+1)の+1がint分オフセットするって記憶している場所ってどこなんでしょう??

801:デフォルトの名無しさん
07/11/03 04:30:23
気にすんな

802:デフォルトの名無しさん
07/11/03 04:34:20
>>800
キニスルナ
あえて言うならコンパイラさんの秘密の小部屋の中だ


803:デフォルトの名無しさん
07/11/03 04:45:16
デジタルフィギュア
URLリンク(www.youtube.com)


804:デフォルトの名無しさん
07/11/03 04:49:05
>>800
そういう風に作られているからとしか言いようがない
CPUが変わるとコンパイラ変えないとだめでしょ?

805:デフォルトの名無しさん
07/11/03 04:49:31
>>801-802
ぅぅ…気になる。。
けど我慢します。
ありがとうございました。
どっかのメモリ上にいるんだろうけど…。
それを参照出来ないのかな…。。
気になる…寝れない。


806:デフォルトの名無しさん
07/11/03 04:51:21
>>805
そんなに気になるならアセンブラ勉強しろ
大抵のコンパイラはソース吐かせられるようになっているから
それを見れば一目瞭然なんだが

807:デフォルトの名無しさん
07/11/03 04:53:43
>>804,806
あ、なるほど。
レジスタにもメモリにもディスクにも記憶されてないんですね!?
ただ単にオフセットしたりする順序が(機械語レベルで)書かれているんですかね。
なんとなく想像付きました。

808:デフォルトの名無しさん
07/11/03 04:57:45
>>800
intやcharのオフセットサイズが知りたいのならsizeof(int)でおk
但し、これらの結果は環境に依存するから注意が必要だ

809:デフォルトの名無しさん
07/11/03 05:01:20
>>807
CPUのアドレッシングモードを活用している場合もある
例えばx86のintならレジスタに+04hずつ足しながらレジスタ+レジスタで
アドレスを算出している事が多い
RISCの場合は完全にコード内に組み込まれてしまう場合が多いね

810:デフォルトの名無しさん
07/11/03 05:02:23
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "ないよう", "たいとる", MB_OK);
return 0;
}

XP2、VC++2005Express、cl.exeなんですが、たったこれだけのソースなのに以下のエラーが出てコンパイルできません。
なんでなんだぜ?

test.obj : error LNK2019: 未解決の外部シンボル __imp__MessageBoxA@16 が関数 _WinMain@16 で参照されました。
test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

811:デフォルトの名無しさん
07/11/03 05:43:32
c言語で、田 (←は辺の数2x2の例) のような図形の辺上での経路探索プログラムを作っているのですが、
自分で作ったプログラムでは、再帰処理を用いたせいかやたら速度が遅く、
辺の数を増やすと数時間では終わらなくなってしまいます。
なるべく関数を再帰呼び出ししないように無駄な探索は再帰前にチェックさせたのですが、それでも遅いです。
再帰を非再帰にしたいのですが、自分の技量ではまったく記述が浮かびませんでした。
再帰の内容は、開始位置から上下左右の4つの方向にそれぞれ移動させ、さらに再帰でその処理を繰り返しながら
目的位置までの経路を探索する、というものです。
どうすれば、非再帰にできるか助言頂けないでしょうか?

812:デフォルトの名無しさん
07/11/03 06:08:11
そうすを出しなさい

813:デフォルトの名無しさん
07/11/03 06:17:14
>>811
経路データをどう与えるんだ? あと一筆書きするって事?


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

5164日前に更新/251 KB
担当:undef