2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

くだすれC言語(初心者用)

1 :デフォルトの名無しさん:2006/07/22(土) 13:27:04
このスレッドはC言語について、 
他のスレッドでは書き込めない超低レベル、 
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 
C使いが優しくコメントを返しますが、 
お礼はC言語の布教と初心者の救済をお願いします。 


2 :1:2006/07/22(土) 13:28:09
超をつけるの忘れたorz

3 :(; д;)つロ○あらあらうふふ ◆1xsES22i66 :2006/07/22(土) 13:45:55
死ね

4 :デフォルトの名無しさん:2006/07/22(土) 14:09:55
#include "stdio.h"
#include "stdio"
#include "cstdio"
の違いを教えてください

5 :デフォルトの名無しさん:2006/07/22(土) 14:46:20
>>4

namespace でぐぐってみれば?

6 :デフォルトの名無しさん:2006/07/22(土) 14:47:39
C++を使わない限り、stdio.hでOK
あと<>な

7 :デフォルトの名無しさん:2006/07/22(土) 14:49:30
#include "stdio.h"

#include <stdio.h>
の違いを教えてください。

8 :デフォルトの名無しさん:2006/07/22(土) 14:50:43
小数点の切り捨てはintでいいの?
floorの存在意義を教えてください

9 :デフォルトの名無しさん:2006/07/22(土) 14:51:41
>>7>>8
まずは名乗ろうな

10 :デフォルトの名無しさん:2006/07/22(土) 14:52:22
長瀬智也です。

11 :デフォルトの名無しさん:2006/07/22(土) 15:05:34
長瀬さんこんにちは。cstdioはC++を将来使おうと思っている場合は、これを使っておくと良いでしょう。


12 :デフォルトの名無しさん:2006/07/22(土) 16:56:08
>>6
>あと<>な

ぷぷぷー

13 :デフォルトの名無しさん:2006/07/22(土) 18:44:34
>>7
自分でstdio.hというヘッダーを作ったとき、
"stdio.h"だとその自分のヘッダーが読み込まれる。
<stdio.h>だと標準のヘッダーが読み込まれる。

14 :デフォルトの名無しさん:2006/07/22(土) 18:57:51
>>8
int型へのキャストでは、小数点部分を単純に捨てるだけ。
floorは、引数の値を超えない最大の整数を返すと定義されており、
負の数のとき、たとえばfloor(-2.5)は-3.0を返す。(int)-2.5では-2になる。

また、結果の値がintで表現できないほど大きかったり小さかったりすることを
想定しなければならない場合ということもある。

15 :デフォルトの名無しさん:2006/07/24(月) 01:39:19
質の良い乱数の生成方法を教えてください

16 :デフォルトの名無しさん:2006/07/24(月) 01:53:22
メルセンヌツイスター

17 :デフォルトの名無しさん:2006/07/24(月) 06:00:28
四捨五入は
int(x+0.5)
で良いのでしょうか?

18 :デフォルトの名無しさん:2006/07/24(月) 07:46:50
TT800

19 :デフォルトの名無しさん:2006/07/24(月) 09:24:37
>>17
正のときだけを考えるのであればそれでよい。

20 :デフォルトの名無しさん:2006/07/25(火) 15:47:06
こうじゃないの?
(int)(x+0.5)

21 :デフォルトの名無しさん:2006/07/25(火) 15:54:00
このスレ的には>>20じゃないとまずいね。
C++なら>>17でもOKだけど。

22 :デフォルトの名無しさん:2006/07/25(火) 17:17:08
でもC++だったらstatic_cast使えと言われるので、
結局17の書き方は使われないと。

23 :デフォルトの名無しさん:2006/07/25(火) 18:45:08
>>22
関数スタイルのキャストは普通に使うだろ。
しかも組み込み型への関数スタイルのキャストは
static_castと同等だと保障されている。

24 :デフォルトの名無しさん:2006/07/25(火) 18:51:17
>>23
組み込み方へのキャストこそstatic_castなどを使えばすむから関数スタイルのキャストは要らない。
むしろコンストラクタ呼び出しになるのでクラスに対して使う方がよっぽど多い。

あと、組み込み型への関数スタイルキャストは、static_castと同等ではなく、Cスタイルキャストと同等。
static/const/reinterpret_cast全てを兼ねる。




25 :デフォルトの名無しさん:2006/07/25(火) 18:52:51
うむ、まぁなんだ
ここはC言語スレだということを忘れないでくれよ

26 :デフォルトの名無しさん:2006/07/25(火) 19:42:49
>>24
もちつけ。前半は組み込み型について言及したつもりはないぞ。
後半に関しては規格を詳細に読むかTC++PLを読んでくれ。

27 :C言語超初心者:2006/07/26(水) 17:19:35
ax^2+bx+c=0
のa,b,cを任意に入力したときのxの解を求めるプログラムを作りたいんです。
誰か教えてくれませんか?
ちなみに虚数解iが出る場合にも分けなきゃいけません。

28 :デフォルトの名無しさん:2006/07/26(水) 17:36:24
マルチ乙

29 :デフォルトの名無しさん:2006/07/26(水) 18:23:36
>>27
ニュートン砲(重力場を瞬間的に反転させることで膨大なエネルギー量を以て物体を放出する兵器)

30 :デフォルトの名無しさん:2006/07/27(木) 00:28:19
>>27
ニュートン峰(南米最高峰アコンカグアのポーランド氷河ルート第3キャンプとして人気が高い)


31 :デフォルトの名無しさん:2006/07/27(木) 22:43:46
下記に定義された関数を使い配列stack[]に任意の整数を5こ連続して
積み上げなさい。次に、それらすべてを読み出し、それらををprintf()
で表示しなさい。以上のプログラムを main()関数に記述し完成させなさい。
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

#define poland
#define N 100
int stack[N];
int n;
void init(){
n = 0;
}
void push(int x){
stack[n++]=x;
}
int pop(){
return stack[--n];
}
int main(){
   ここにプログラムを記述すること
return 0;
これがよく分かりません><教えてください・・

32 :デフォルトの名無しさん:2006/07/27(木) 22:48:28
宿題は宿題スレへ

33 :デフォルトの名無しさん:2006/07/27(木) 23:22:38
宿題スレは答えを聞く(教える)ところ。
>>31 は自分で理解したいんじゃないか?

34 :デフォルトの名無しさん:2006/07/27(木) 23:40:00
おれは親切だからおしえてやる。
#define orz() printf("%d\n",pop())
push(1);push(2);push(3);push(4);push(5);orz();orz();orz();orz();orz();

35 :デフォルトの名無しさん:2006/07/27(木) 23:41:40
init()わすれたぜorz

36 :ど素人:2006/07/28(金) 02:10:04
前期の追試です。この2問に単位がかかっています。ぜひ、お願いします。
2.通常プログラムカウンタはプログラムの実行にしたがって一定の大きさだけ増えていく.
しかし,時に,プログラムカウンタに直前の値とは大きく異なる値がセットされる
時がある.それはどんな時か?

3.次のプログラムは何を行うプログラムか.簡単に説明しなさい.また,
結果を得るまでに,A[k]==aの比較が行われた回数を書きなさい.

A=new Array(3, 8, 19, 20, 22, 24, 45);
i=0;
j=A.length-1;
a=19;
k=Math.floor((i+j)/2);
while(i<=j){
if(A[k] == a){
break;
}
else if(A[k] > a){
j = k - 1;
}
else{
i = k + 1;
}
k = Math.floor((i+j)/2);
}
if(i>j) k=-1;
document.write(a," ",k);

37 :デフォルトの名無しさん:2006/07/28(金) 02:13:09
すげぇな、スレ違い(いや、鼬害か)の上にマルチかよ。

38 :デフォルトの名無しさん:2006/07/28(金) 08:48:59
何のために単位って概念があるか考えてみたらいいんじゃないかな

39 :単位の書けない奴を煮込む俺 ◆1xdL.Dyf.I :2006/07/28(金) 09:25:14
>>38


40 :デフォルトの名無しさん:2006/08/20(日) 16:15:27
 memset(dat64, 0, sizeof(dat64));
これはどういう役目をしているかわかりません。
誰か教えて下さい。

41 :デフォルトの名無しさん:2006/08/20(日) 16:21:32
多分意味ないから消してみたら?

42 :デフォルトの名無しさん:2006/08/20(日) 17:41:51
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define CATE_NUM 10
#define DATA_DIR "/xxx/yyy/zzz/Data/Img"

void normal(unsigned char *,short);

short hyojun[CATE_NUM][64][64];
unsigned char in_dat[CATE_NUM][200][512];
unsigned char dat64[CATE_NUM][200][64][64];
char *moji[]={"あ","い","う","え","お","か",
"が","き","ぎ","く","ぐ","け",
"げ","こ","ご","さ","ざ","し",
"じ","す","ず"};




43 :デフォルトの名無しさん:2006/08/20(日) 17:42:54
void InputData()
{
FILE *fp;
int c_no;
char fn[256];

for(c_no=0;c_no<CATE_NUM;c_no++) {
int dat_no;

sprintf(fn,"%s/%02d.bimg",DATA_DIR,c_no);
fprintf(stderr,"read %s ",fn);
fp=fopen(fn,"rb");
if(fp==NULL) {
fprintf(stderr,"open error %s\n",fn);
exit(1);
}
if(fread(in_dat[c_no],sizeof(in_dat[c_no]),1,fp)!=1) {
fprintf(stderr,"read error %s\n",fn);
fclose(fp);
exit(1);
}
fclose(fp);
fprintf(stderr,"done\n");
}
}

44 :デフォルトの名無しさん:2006/08/20(日) 17:55:40
void OutputData()
{
FILE *fp;
int c_no;
char fn[256];

for(c_no=0;c_no<CATE_NUM;c_no++) {
int dat_no;

sprintf(fn,"%s/%02d.bimg",DATA_DIR,c_no);
fprintf(stderr,"read %s ",fn);
fp=fopen(fn,"rb");
if(fp==NULL) {
fprintf(stderr,"open error %s\n",fn);
exit(1);
}
if(fread(in_dat[c_no],sizeof(in_dat[c_no]),1,fp)!=1) {
fprintf(stderr,"read error %s\n",fn);
fclose(fp);
exit(1);
}
fclose(fp);
fprintf(stderr,"done\n");
}
}


45 :デフォルトの名無しさん:2006/08/22(火) 23:09:23
 積分について以下の内容がなぜ成立するのか誰か教えて下さい。
 現在以下の内容をC言語で書こうとしています。
 
∬(x-α)i乗(y-β)j乗f(x,y)dxdy=Mijと記述されます。
ここでα,βは位置の正規化において決まります。
そしてこの値を用い、
大きさの正規化基準:M40+M04=1,傾きの正規化基準:M22=1
と設定するのが標準的な手法であります。
最後にこれについては重心周りのモーメントが必要です。

46 :デフォルトの名無しさん:2006/08/23(水) 02:52:59
To6464()は、あるファイルを読み込んだデータのビット操作をして文字画像
に変換している。64x64[pixel]である。
このプログラムについてどのような動作をしている誰か教えて下さい。
お願いします。
void To6464() {
071: int x,y;
072: int c_no,dat_no;
073:
074: memset(dat64,0,sizeof(dat64));
075:
076: for(c_no=0;c_no<CATE_NUM;c_no++) {
077: for(dat_no=0;dat_no<200;dat_no++) {
078: for(y=0;y<64;y++) {
079: for(x=0;x<8;x++) {
080: int i;
081: unsigned char dat8=in_dat[c_no][dat_no][y*8+x];
082: for(i=0;i<8;i++) {
083: if( (dat8&(128>>i))>0)
084: dat64[c_no][dat_no][y][x*8+i]=1;
085: }
086: }
087: }
088:
089: /*PrintDat64((unsigned char *)dat64[c_no][dat_no]);*/
090: }
091: }
092: }


47 :41:2006/08/23(水) 03:48:22
>>40 >>41 >>46
memset() は意味があったのか、残念。
083,084 を
dat64[c_no][dat_no][y][x*8+i]=(dat8&(128>>i))>0;
に変えると memset() はいらないぞ。そして質問には答えない。

48 :デフォルトの名無しさん:2006/08/23(水) 22:55:19
 質問を答えて下さい。
お願いします。

49 :デフォルトの名無しさん:2006/08/23(水) 23:14:38
しょうがねえなあ。
あるファイルを読み込んだデータのビット操作をして文字画像に変換している。
かなり無駄っぽい処理だ。

50 :デフォルトの名無しさん:2006/08/23(水) 23:25:33
 では、なくて45です。
誤解を招くような書き方をしてしまいすみません。

51 :デフォルトの名無しさん:2006/08/23(水) 23:30:56
おれは微積とか忘れたから答えられないぞ。覚えてたかどうかすら忘れた。

52 :デフォルトの名無しさん:2006/08/24(木) 00:08:11
 C言語って半年あれば覚えられるもんなんですか?

53 :デフォルトの名無しさん:2006/08/24(木) 02:23:52
人による。
あと、字下げを適当に使うな。

54 :デフォルトの名無しさん:2006/08/28(月) 15:27:23
32Byte以下の文字データの集合で、40種別に分けられて種別毎の処理をする場合、
TCHAR MojiData[40][200][32] のような配列を作ると思うんですが、

種別毎の文字データの個数がバラバラで、
最高が198個なのに、殆んどは10個や20個程度という場合、
配列で確保したメモリ領域の殆んどは無駄になってしまうと思います。

領域の無駄は無くして、配列みたいに種別ごとの処理をfor文とかで一括処理したい場合、
どんな方法が一般的なんでしょうか。教えてください。


55 :デフォルトの名無しさん:2006/08/28(月) 16:49:03
>>54
こんな感じでどうでしょ。
char **MojiData[40];
for (int ic = 0; ic < 40; ++ic) {
MojiData[ic] = malloc(sizeof(char *) * stringCount);
for (int sc = 0; sc < stringCount; ++sc) {
MojiData[ic][sc] = malloc(32);
}
}
実際には、ファイルか何かから読み込むのかな?

56 :デフォルトの名無しさん:2006/08/28(月) 21:40:14
数値を入力して、0からその数値までを一つずつカウントしていって
偶数部分には○、奇数部分には□を表示する
例えば5と入力した場合、012345→「○□○□○□」と表示。


この程度の問題すら分からない超初心者なんだぜ?
while文を使うとか言われたけど独学じゃさっぱりだぜ

57 :デフォルトの名無しさん:2006/08/28(月) 22:07:39
がむばれだぜ?

58 :デフォルトの名無しさん:2006/08/28(月) 22:13:04
交互に表示とかもう異次元なんだぜ?
それに宿題スレに出すには次元が低すぎる問題だからガチで困る。

59 :物好きな人:2006/08/28(月) 23:30:22
>>58
 臆することはない。宿題スレには、簡単な問題を解きたがる人もいる。
解く人だって初心者に近い人いるからね。次からはテンプレ書いて投げるべし。

以下、解答例(別に模範解答じゃない。ていうか私ならwhileじゃなくて
forを使うな)。
#include<stdio.h>
int main(void)
{
int num, i;
scanf("%d", &num);

i = 0;
while(i <= num) {
if ((i % 2) == 0) {//偶数のとき
printf("〇");
}
else {
printf("□");
}
i++;
}
return 0;
}

60 :デフォルトの名無しさん:2006/08/28(月) 23:54:48
#include <stdio.h>
int main()
{
int ic, num = 0;
scanf("%d", & num);
for (ic = 0; ic < num; ic += 2) {
printf("○□");
}
if (ic == num) {
printf("○");
}
return 0;
}

61 :デフォルトの名無しさん:2006/08/29(火) 12:16:18
>>55
こんなときのためのポポポインタなんですね。
ありがとうございました。

62 :デフォルトの名無しさん:2006/08/29(火) 12:41:15
>>61
何その楽しげな「ポポポインタ」って。

63 :デフォルトの名無しさん:2006/08/29(火) 14:10:10
今日からC言語を始めた21歳の大学生です。
Borland C++ Compilerというコンパイラを導入したのですが、
初期設定に悪戦苦闘を強いられて1時間もかかってしまいました。
僕にはプログラミングの才能は無いのでしょうか・・・?
来年からSEとして働くというのに先が思いやられます・・・


64 :デフォルトの名無しさん:2006/08/29(火) 14:27:05
お勧めorお勧めでないC言語の参考書ってありますか??
あと・・・CとC++の違いはなんですか??

65 :1001:2006/08/29(火) 14:34:06
>>63
そんなんだと、これから先の人生が思いやられるよねー
でも、良かったじゃないか就職できて。

66 :デフォルトの名無しさん:2006/08/29(火) 14:47:37
プログラムができなくてもSEとして就職できる世の中が悪い。

67 :デフォルトの名無しさん:2006/08/29(火) 15:48:17
UNIX(FreeBSD)でforkして子プロセスがexecしたんですが、
親プロセスがwaitせずに子プロセスより先に死んだ場合、
子プロセスの親はinitになるのは判ったんですが、
子プロセスの返り値はwaitを待つために親プロセスが死亡するまで
メモリ上に残っているのでしょうか?

そうすると、親がinitになった場合の子プロセスの返り値などはメモリを食い続けるんですか?
その場合、子プロセスの死亡後のメモリ食いを回避する方法はありますか?

68 :デフォルトの名無しさん:2006/08/29(火) 15:48:48
ageます

69 :デフォルトの名無しさん:2006/08/29(火) 16:06:24
参考書・・・教えてください・・・


70 :デフォルトの名無しさん:2006/08/29(火) 16:45:38
参考書くらい自分で探せ

71 :デフォルトの名無しさん:2006/08/29(火) 17:20:07
>>67
言語の範疇を超えているので、鼬害ですね。

72 :デフォルトの名無しさん:2006/08/29(火) 17:54:51
>>67

「孤児プロセス」という単語でいろいろ調べるんだ

73 :デフォルトの名無しさん:2006/08/29(火) 23:19:28
入門(どちらか一冊)
柴田望洋か結城浩のC入門本

中級
前橋和弥「C言語 ポインタ完全制覇」

少しプログラミングができるようになったら
平林 雅英:新ANSI C言語辞典

さらにアルゴリズムやデータ構造が気になりだしたら
紀平拓男・春日信弥:プログラミングの宝箱 アルゴリズムとデータ構造

74 :デフォルトの名無しさん:2006/08/30(水) 00:06:25
>>65
やっぱり厳しいですよね・・・
Java言語は完璧なんですけどね。

>>66
SEはけっこう文系の人が多いんですよね。
接客が中心だからかもしれないですけどね。

75 :デフォルトの名無しさん:2006/08/30(水) 00:39:15
>>74
>Java言語は完璧なんですけどね。

76 :万年プ中年:2006/08/30(水) 00:47:10
>>6
まったくの初心者ならSEの倉薫さんの本(全2巻)をおすすめします。
柴田さんや結城さんの本はそれからのステップアップでいいとおもいます。

77 :デフォルトの名無しさん:2006/08/30(水) 01:35:01
>74
>Java言語は完璧なんですけどね。

ダウト。

Javaは本当にやり込むと、
多数のOpenSourceのプロダクトやその関連など、
多岐にわたる知識と、それぞれの環境構築、
そしてそれぞれを活用するコーディング能力と、
実際に要求されるスキルはかなり高度なモノになる。

これだけ情報が多いBCCの初期設定に四苦八苦しているようなレベルで
「完璧」とは笑わせてくれる。


78 :デフォルトの名無しさん:2006/08/30(水) 01:58:14
>多数のOpenSourceのプロダクトやその関連など
そっちに行くのもナニだな・・・
おれはJVMの実装とかの話に行くと思ってたんだが

79 :デフォルトの名無しさん:2006/08/30(水) 02:15:31
いや、彼は初期設定に苦労したらしいから。w

80 :デフォルトの名無しさん:2006/08/30(水) 06:35:15
Javaが完璧ワロス

81 :デフォルトの名無しさん:2006/08/30(水) 07:05:10
そう言いたい年頃なのさ。
色んなこと知れば知るほど「完璧」なんて言えなくなるのにな。

82 :デフォルトの名無しさん:2006/08/30(水) 08:24:07
落ち着けお前ら。>>63は自身にプログラミングの才能が
あるかないのかを聞いているだけだ。

まあ、才能なんか皆無だろうし、現時点でJavaを完璧にこなせると
思いこんでいるような奴は努力しないだろうから今後にも期待できないな。
世のため人のために転職しろ。

83 :デフォルトの名無しさん:2006/08/30(水) 10:43:48
俺の童貞は完璧なんだがな

84 :デフォルトの名無しさん:2006/08/30(水) 10:57:49
><

85 :63:2006/08/30(水) 11:17:52
釣りです。ごめんなさい・・・
大学で1年間Javaの勉強はしたんですけど、
教科書に載っている基礎的なプログラムしか組んでません。
JavaかCのどちらかを選択する時に友達が、
「今の時代の流れはJavaだぜ!」と言うのでJavaにしました。
先生も「今の企業はJavaを使っているところが多いから、
後々役に立つよ!CはJavaが出来るようになれば楽にマスター出来るさ!」
って言ってました。


86 :デフォルトの名無しさん:2006/08/30(水) 13:17:46
一番悪いのはこんな役立たずにSE内定を出した企業だ。

87 :デフォルトの名無しさん:2006/08/30(水) 13:18:40
>http://pc8.2ch.net/test/read.cgi/tech/1152856899/722
これもおまえだろ

88 :デフォルトの名無しさん:2006/08/30(水) 13:48:24
>>86
どこの企業も学歴重視ですからね。

>>87
違いますよ!

89 :デフォルトの名無しさん:2006/08/30(水) 13:57:04
>>85
じゃあ、Java 完璧だから C も楽にマスターできたんだね。

90 :デフォルトの名無しさん:2006/08/30(水) 14:06:23
実力なくて学歴で入った奴は
周囲の期待を裏切った罪でいびられて一生を終えるぞ
初期設定に戸惑ったり釣り宣言したりせずにとっとと勉強しろ

91 :デフォルトの名無しさん:2006/08/30(水) 21:53:24
俺もJavaつついてC→C++と移行したクチなんだが、
未だにcppに実装を書いて、hに定義だけ書くっつースタイルに慣れない。
定義と実装を同じ所に置いておかないと、
interfaceが変わったときとかめんどくさくね?
ファイル数が増えると、管理対象も増えるってことで、結構面倒だし…

別に誰にソース見せるわけでもないから、
全部hに書いて組んじゃってるけど、
これって熟練者からすると、噴飯ものだろうなぁ。


92 :デフォルトの名無しさん:2006/08/30(水) 23:45:32
コンパイルの単位がファイルだ、とか、いわゆるファイルスコープの変数とかいう
歴史的な理由が大きいからしょうがないだろう。

>全部hに書いて組んじゃってるけど
処理系によっては全部インライン展開されちゃうぞ

93 :デフォルトの名無しさん:2006/08/30(水) 23:54:21
>>91
ファイルが増えると、コンパイル時間が馬鹿にならなくなってくる。
個人レベルの規模でも、一瞬でコンパイルが終わるケースなのに数十秒かかったりとか。

94 :デフォルトの名無しさん:2006/09/12(火) 23:15:39
>>93
ばーか

95 :デフォルトの名無しさん:2006/09/13(水) 23:35:03
>>94
2週間近く経ってから何を意味のないことを……

96 :デフォルトの名無しさん:2006/09/14(木) 15:00:53
入門書を終えた段階くらいのレベルで、マインスイーパって作れますかね?
10*10くらいなら行けそうな気もしますが・・・

97 :デフォルトの名無しさん:2006/09/14(木) 15:35:21
>>96
作れる香具師は作れるし、作れない香具師はいつまでたっても作れない

>10*10くらいなら行けそうな気もしますが
10*10と20*20で何が違うのか述べよw
10*10が稼働していれば、サイズの違いがどれほどコードに影響する?

98 :デフォルトの名無しさん:2006/09/14(木) 15:45:32
イヤマテ、「もし右上に地雷があったら〜 もし真上に地雷が〜」を
10*10個分並べるんだと思ってるのかもしれん。
「11*10にするには、右端の1列ぶんを全部書き直さなくちゃ!
 きゃ〜〜〜たいへ〜ん」

99 :デフォルトの名無しさん:2006/09/14(木) 23:05:49
確かにそうですね、10*10と20*20は同じプログラムですねorz
何とか自力でやってみます

100 :デフォルトの名無しさん:2006/09/14(木) 23:20:15
再帰使うと楽ですよと。

101 :デフォルトの名無しさん:2006/09/14(木) 23:53:59
先ずは、1x1から作ってみたらどうだろう。

102 :デフォルトの名無しさん:2006/09/19(火) 20:27:01
数字の桁数を求める標準ライブラリってありましたっけ?

103 :デフォルトの名無しさん:2006/09/19(火) 22:52:58
ない希ガス。
n進数をnで割りまくる方法ですぐ作れると思う。

104 :102:2006/09/20(水) 00:23:44
>>103
ありがとう、無いと聞いて安心して自作した


105 :デフォルトの名無しさん:2006/09/20(水) 00:34:23
浮動小数点数だったらlog10などがあると言えると思う。

106 :デフォルトの名無しさん:2006/09/20(水) 17:55:51 ?2BP(200)
itoaとstrlenでどうか。

107 :デフォルトの名無しさん:2006/09/20(水) 23:58:18
ダメすぎ

108 :デフォルトの名無しさん:2006/10/08(日) 11:46:19
C言語でw2kとIISで動くウェブアプリケーションを作れますか?

109 :デフォルトの名無しさん:2006/10/08(日) 14:07:52
たいていの言語でつくれるよ

110 :デフォルトの名無しさん:2006/10/09(月) 12:53:14
使用環境はCygwin+gcc+Meadow又はvimなんですが
入門書にあるとおりエスケープ文字を入力するとコンパイルエラーではじかれてしまいます。
例としては

#include <stdio.h>

int main(void)
{
pritnf("aaa\n");
printf("bbb\n");

return 0;
}
などのソースでコンパイルしようとすると

$gcc ch02-20.c
/cygdrive/d/Temp/ccckx0DW.o:ch02-20.c:(.Text+0x32): undefined reference to 'printf'
collect2: ld はステータス 1 で終了しました

とのエラーが出てしまいます。
Cの初心者なので環境が悪いのかソースが悪いのかもわかりません。
解決方法がわかりましたらよろしくお願いします。

111 :デフォルトの名無しさん:2006/10/09(月) 12:59:18
pritnf
  ~~

112 :デフォルトの名無しさん:2006/10/09(月) 13:03:34
>>111
しかし、エラーメッセージはprintfが参照できてないと読めるが。

113 :110:2006/10/09(月) 13:04:02
>>111
これで一晩悩んでいたうつけでございます。
どうぞ罵ってください。
本当にありがとうございました!

114 :デフォルトの名無しさん:2006/10/09(月) 13:08:51
>>112
ソースのコピペすら出来ていないとすればエラーメッセージの正確なコピペを期待しちゃいかんだろ。

115 :デフォルトの名無しさん:2006/10/12(木) 18:45:20
stdioとcstdioの違いを教えてください


116 :デフォルトの名無しさん:2006/10/12(木) 18:49:31
スレ違い

117 :117:2006/10/12(木) 21:41:39
すみません、ちょっと質問なんですが、
staicを付けて宣言した関数ってのは return 後もメモリ上に配置されたまま
残り続けるんでしょうか?

他のファイルから見えないようにしたいんですが、メモリ上に残り続けるんなら
staticは付けずに、プライベートヘッダファイル内でextern付けて宣言して、
それをincludeするのにとどめておいたほうがいいんでしょうか?

よろしくお願いします。

118 :デフォルトの名無しさん:2006/10/12(木) 21:55:07
関数のstaticはメモリーとは関係がない。

119 :デフォルトの名無しさん:2006/10/12(木) 21:57:01
ノイマン型コンピュータは普通命令はメモリにありますよ

120 :デフォルトの名無しさん:2006/10/12(木) 23:08:42
>>117
staticは付けずに以降のくだりは意味が良くわからないが、
おそらくグローバル変数を使うということだよな。
ならばそんな変数が存在する期間はstaticを付けた変数と同じ。
どちらもプログラム開始から終了まで存在し続ける静的記憶期間を持つ。

121 :デフォルトの名無しさん:2006/10/12(木) 23:16:59
>>120
> staicを付けて宣言した関数
欲嫁

122 :デフォルトの名無しさん:2006/10/12(木) 23:34:47
すっかり見落としていた_| ̄|○

123 :117:2006/10/13(金) 00:33:03
>>118
あ、そうなんですか。
気にせず使えってことですよね? たぶん。
ありがとうございます。

>>119
すみません。ちょっとよく分からないです。

>>120
すみません、はしょり過ぎて意味不明な書き方をしてしまって。

目的は、他のファイルに公開する関数と、そうでない関数とに区別を付けながら書くことです。
staticを付けた関数は、他のファイルからは見えないらしいので、これを利用しようと思いました。

でも、staticと聞くと、ついつい局所変数につけるstaticみたいに
静的領域に割り当てられて、プログラム実行中に常に値を保持するという連想をしてしまったので、
無闇に関数にstaticをつけるのもメモリの無駄遣いかなと思ったわけです。
(>>118さんによるとメモリとは関係ないらしいので杞憂ですが)

そこで、浅はかですが、他のファイルに公開しない関数のプロトタイプ宣言を、
ヘッダファイルに書いて、それをincludeするモジュールとincludeしないモジュールとで区別をつけて、
コンパイラの「暗黙の宣言エラー」を頼りに、手動で管理しようと思ったわけです。

これでは、実際には他のファイルからも呼び出せちゃいますけど、
気持ちとしては他のファイルに公開してるつもりかどうかを意識しながら書けると思ったもので・・。
長文ですみません。


124 :デフォルトの名無しさん:2006/10/13(金) 00:38:09
ライブラリとかだったら、公開する関数だけをヘッダファイルに書くようにすればいいと思うよ。

125 :デフォルトの名無しさん:2006/10/13(金) 00:45:00
staticな関数がメモリ上にあるかどうかはコンパイラ次第。
もしかしたら、インライン展開によって痕跡さえも消えてなくなっているかもしれない。

>>123
と言う話はさておき、一般に関数はプログラムがロードされている間はメモリ上に存在し続けるぞ。
つまり、staticをつけない方が寧ろメモリを消費すると言えるかもしれない。

従って、公開したくない関数にstaticをつけるのは、いろんな意味で正しい姿勢だ。

126 :デフォルトの名無しさん:2006/10/13(金) 02:21:22

☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆


これを再帰ってやつを使って表示させたいんです。
お願いします。

127 :117:2006/10/13(金) 02:27:17
>>124
最終的にはライブラリみたいなのを作りたいんですが、
そのライブラリを作るために書いているソースファイルが複数(たとえばa.c, b.c, ...)あって、
ソース間の関数の呼び出し合いが入り乱れて混乱するのを避けるため、
a.cの中には、「a.cの中の関数だけに利用させたい関数」と「b.cが呼び出す関数」もあるという状態です。
この例では、上手く伝わらないかもしれませんが・・。

>>125
極端なことを言えば、コンパイラによっては、関数を呼び出してる部分を
ジャンプとリターンの形じゃなくて、インライン展開しまくりで実現するかもしれないから
サイズが大きくなる場合もあるってことで合ってるのかな?
とにかく
>と言う話はさておき、一般に関数はプログラムがロードされている間はメモリ上に存在し続けるぞ。
>つまり、staticをつけない方が寧ろメモリを消費すると言えるかもしれない。
>従って、公開したくない関数にstaticをつけるのは、いろんな意味で正しい姿勢だ。
とのことなので、公開したくない関数にはstaticを付けていこうと思います。
丁寧な回答ありがとうございました。


128 :117:2006/10/13(金) 02:33:51
>ソース間の関数の呼び出し合いが入り乱れて混乱するのを避けるため
というのは、ソースを書いているうちにどのファイルにどの関数があったかとか、ファイルの管理で自分が混乱するということです。
すれ汚ししてしまって、すみません。

129 :デフォルトの名無しさん:2006/10/13(金) 03:14:32
ファイルの粒度が小さすぎるということはない?
a.cとb.cを特に分ける必要も無いのに分けてるとか。
複数のファイルがお互いに参照しあってるという状況になってるとしたら、それは分けすぎかも。
あるいは、a.cとb.cが参照する関数は、mylib_util.cとかにまとめて、a.cとb.cはそれをincludeするとか。

130 :デフォルトの名無しさん:2006/10/13(金) 05:32:59
>>126
if (n>1) func(n-1);
for ...

131 :デフォルトの名無しさん:2006/10/13(金) 16:57:10
>>130さん

#include <stdio.h>
#define N 5
#define I 1
void rec(int,int);

int main()
{
rec(N,I);
}

void rec(int n,int i)
{
if(i<=n){
printf("☆");
rec(n,i+1);
}
else{
printf("\n");
if(n>1){
rec(n-1,1);
}
}
}

これの逆バージョンを作りたいんです。
関数1つでforとかwhileとか使わないで
再帰だけでやるやつをお願いします。

132 :デフォルトの名無しさん:2006/10/14(土) 12:32:27
>>131
宿題シネ

133 :デフォルトの名無しさん:2006/10/15(日) 05:29:38
typedef struct original {....} a;
という記述で、自分で構造体を定義しました。
このとき
void function (original *)
という関数を作って、main関数から呼び出したのですが
function( a ) ではうまくいかず function ( &a ) ではうまくいきました。
構造体の変数名はポインタを表すと思うんですが、この場合はなぜ&が必要なのでしょうか?

134 :133:2006/10/15(日) 05:47:02
typedef struct original {....} a; の書き方が間違っていました…

typedef struct {....} original;
original a;

です。

135 :デフォルトの名無しさん:2006/10/15(日) 06:02:29
> 構造体の変数名はポインタを表すと思うんですが、

なぜそう思うのか、理由を100字以上30字未満で述べよ。

136 :デフォルトの名無しさん:2006/10/15(日) 09:40:35
配列と混同している予感。

137 :133:2006/10/15(日) 10:09:40
>>135
あっー!そこがそもそも間違いだったんですねorz

>>136
はい、その通りです…
以前、構造体の配列を扱ったときは&がいらなかったので、
配列の場合と混同してました。

どうもありがとうございました。

138 :デフォルトの名無しさん:2006/10/15(日) 16:23:12
ハッシュ検索って何ですか?

139 :デフォルトの名無しさん:2006/10/15(日) 18:35:38
複数のファイルから利用される、変更されないconstデータは
どこに、どのように書くのが普通でしょうか?
ヘッダにstaticで定義する?
どこかの.cファイルに定義して、ヘッダにextern宣言する?

140 :デフォルトの名無しさん:2006/10/15(日) 18:39:56 ?2BP(204)
cのconstのリンケージってC++同じだっけ?

141 :デフォルトの名無しさん:2006/10/17(火) 11:46:59
ある数が2のべき乗かを調べるプログラムらしいのですが、
C言語はさっぱりなので、プログラムの意味がよくわからんです。
入力された数から、マイナス1して入力された数とビット演算すると言うことでしょうか?

bool powOFTwo(int num)
{
return !(num & (num-1));
}

教えて下さい。

142 :デフォルトの名無しさん:2006/10/17(火) 12:49:17
>>141
そんな感じ。

(入力した数) と (-1した数) とでANDをとって
全ビット0だったら関数の戻り値としてtrue(1)を返す

143 :デフォルトの名無しさん:2006/10/17(火) 21:30:40
base64エンコードする関数って標準ライブラリにある?

144 :141:2006/10/17(火) 22:31:38
>>142
ありがとうございます。
なぜ、それでべき乗になるのか、算数の勉強だな。

145 :デフォルトの名無しさん:2006/10/17(火) 22:33:58
>>144
2進数で考えれば?

146 :141:2006/10/18(水) 10:31:32
あはは、2進数で考えたらすぐですね。
お恥ずかしい。

147 :デフォルトの名無しさん:2006/10/19(木) 13:59:35
現在の時間を百分の一秒まで取得する関数教えて。

148 :デフォルトの名無しさん:2006/10/19(木) 15:05:35
System.currentTimeMillis()*10

149 :デフォルトの名無しさん:2006/10/20(金) 09:38:05
ありがとう。早速試してみるわ。

150 :デフォルトの名無しさん:2006/10/20(金) 12:16:27
>>148
それのどこがCなのかと……

151 :デフォルトの名無しさん:2006/10/20(金) 12:47:06
ではCでは?

152 :デフォルトの名無しさん:2006/10/20(金) 13:14:49
秒単位ならtime()でできるんだけど

153 :デフォルトの名無しさん:2006/10/20(金) 15:32:28
標準関数にはないので、環境ごとにマニュアルでも読んでくれ。
まぁ、gettimeofday()が使える環境は多いが。

154 :デフォルトの名無しさん:2006/10/20(金) 22:19:12
だらだらと長い計算をやっているプログラムのどこかでNaNが発生しているので、
signal(SIGFPE, sighandle);
を使って、その場所を調べようとしているのですが、signalが発生しません。
ためしに、
double a=1/0;
とか入れると、その場所でsignalが発生するのですが。
計算がうまくいっていない場所を調べるにはどうすればよいのでしょうか。

システムはDebian Linux, コンパイラはgcc4.1です。

155 :デフォルトの名無しさん:2006/10/21(土) 02:10:19
>>154
FPUが例外を出さない設定になっているとか、たまたまFPUを使わないで演算しているときに発生しているとか。

156 :デフォルトの名無しさん:2006/10/23(月) 22:21:05
C言語を始めようとVisual Windows for BC++をインストールしたのですが、フォルダが設定されていないらしく先に進めません
フォルダの自動検索・設定を実行しても未検索で終了になってしまいます。
これはインストール方法が悪かったのでしょうか?それともPC上にMeだからでしょうか?
できれば手動での設定の仕方か解決方法を教えてください

157 :デフォルトの名無しさん:2006/10/23(月) 23:56:37
ググったらちょうどいい解説が見つかった。
http://www.enri.go.jp/~fks442/K_MUSEN/bcc.htm

まあ今はBorland C++以外にも、無料のコンパイラは色々あるけどな。

158 :デフォルトの名無しさん:2006/10/24(火) 01:50:37
PHP, Ruby, PerlしかしらないWEBプログラマなんですが、
Cもちょっくら勉強しようかと思います。
なんか目的がないとつまらないので、作るものを決めてそれに向かってがんばろうかと思ってんだけど
Cで作れそうなものが思い浮かばないんだよね。
WEBだったらこんなサービスあったらおもしろそう =>つくろう!ってなるんだけど。
Cだと何作っていいのかわからん。
おもしろそうなものあったら教えて。



159 :デフォルトの名無しさん:2006/10/24(火) 02:45:52
Cよりもアセンブラやった方が速く習得できるよ。

160 :デフォルトの名無しさん:2006/10/24(火) 05:50:32
何が面白いと感じるかは人それぞれであり、
結局のところ自分がそれをはっきりと自覚していない限り
他人に自分のそれを求めるのは理不尽というものではないだろうか。

161 :デフォルトの名無しさん:2006/10/24(火) 19:46:26
普段PHPとかRubyとかPerlでやってることをCでやればいいじゃん

162 :デフォルトの名無しさん:2006/10/28(土) 15:23:52
char (*ptr[])[] を定義と同時に初期化するには

char str1[]="hello";
char str2[]="begin";
char str3[]="wacth";

char (*ptr[])[6]={&str1,&str2,&str3};

のようにやる以外にやりようはないですか?

163 :デフォルトの名無しさん:2006/10/29(日) 18:40:42
char hoge[10],foo[10];

fgets(hoge,10,stdin);
fgets(foo,10,stdin);


としたときに、最初のfgetsで半角で9文字以上入力したときに二番目のfgetsが飛ばされてしまう(というか最初の出オーバーした分を受け取って次へ行ってしまう)
のですが、どのように回避すればいいのでしょうか?

164 :デフォルトの名無しさん:2006/10/29(日) 19:26:36
\nまで読み捨てる。

165 :デフォルトの名無しさん:2006/10/29(日) 19:46:16
読み捨てする、というのはどのようにすればいいのでしょうか?

166 :デフォルトの名無しさん:2006/10/29(日) 19:46:20
>>162
他に何がやりたい?

167 :162:2006/10/29(日) 20:39:12
>>166
普通の配列と同じように事前に何かを用意しなくてもいきなり定義できないのかな、と
例えば
char str[][6]={"hello","begin","wacth"}
みたいにです

必要性無視した単なる可能不可能を知りたいだけの質問で申し訳ないんですが…

168 :デフォルトの名無しさん:2006/10/29(日) 21:42:46
>>167
>167のようにただの配列の配列(の配列……)なら普通に初期化できる。
>162のようにポインタが介在すると、そのポインタを初期化するために、別途初期化された変数が必要になる。
それだけのこと。

169 :デフォルトの名無しさん:2006/10/29(日) 21:44:28
>>165
while (fgetc(stdin) != '\n') ;
とすれば改行まで読み捨てられる。
#但し、入力が閉じられるなどの異常に対応していないので、必要なら対策すべし。

170 :デフォルトの名無しさん:2006/10/29(日) 21:48:25
>>167
char str[][6]={{"hello"},{"begin"},{"wacth"}};

データの境界を教えてあげるために、{} でくくるだけなんですよね。

171 :162:2006/10/29(日) 21:53:46
>>168,170
あ、なるほど、そこが同時では無理だったんですね
ありがとうございました

172 :デフォルトの名無しさん:2006/10/29(日) 22:07:20
>>169
ありがとうございます

char hoge[10],foo[10];

fgets(hoge,10,stdin);
while (fgetc(stdin) != '\n') ;
fgets(foo,10,stdin);

そこで以上のようにしてやってみたのですが、最初のfgetsで9文字以下の入力をされたとき
while (fgetc(stdin) != '\n') ;
で一度エンターをおさないと二番目のfgetsに進まなくなったのですが、使い方間違ってるのでしょうか・・?

173 :デフォルトの名無しさん:2006/10/29(日) 22:15:42
>>172
読み捨てる必要がないときには読み捨てるな。

174 :デフォルトの名無しさん:2006/10/29(日) 22:32:55
>>173
strlenあたりで判定するんでしょうか
やってみます、ありがとうございました

175 :デフォルトの名無しさん:2006/10/30(月) 07:11:03
つーか、最後に改行がなければ読み捨てる必要があって、
最後に改行があれば読み捨てる必要がないのだろう。

176 :デフォルトの名無しさん:2006/11/01(水) 20:19:52
大域ヘッダーファイルの〜〜.hと7つの原始ファイル〜.cを動かすにはどうすればいいですか?

177 :デフォルトの名無しさん:2006/11/02(木) 01:30:35
変数の種類で、ポインタ以外のもの全般の事は一般的になんと呼ばれますか?

178 :デフォルトの名無しさん:2006/11/02(木) 17:22:45
Windows用のコンパイラだと、printf関数とかfopen関数は内部的にはWinAPI呼び出して処理してるんですか?

179 :デフォルトの名無しさん:2006/11/07(火) 02:50:23
Hellow Worldから解説してるサイトを教えてください。m(__)m


180 :デフォルトの名無しさん:2006/11/07(火) 03:28:15
入門書買ったほうがいいんじゃ無いか?
ついでに、C言語ってぐぐればどっかでてくるんじゃね?

181 :デフォルトの名無しさん:2006/11/07(火) 04:08:29
いや、まずは中学の英語の教科書からだ

182 :デフォルトの名無しさん:2006/11/07(火) 05:20:53
Linux入れたらC言語覚える前にシェルスクリプトですよね?


183 :デフォルトの名無しさん:2006/11/16(木) 09:03:29
constについて質問があります。

他のシステムに以下のような関数があり

void foo(const void *prm);

実際にはprmには構造体のポインタを渡しています。
constなのでこのポインタが指す先の構造他はfooでは変更できないという認識なのですが、関数を呼び出し終わって構造体を見てみるとメンバが書き換わっている場合があります。
fooのソースがないので、その関数内で書き換えているのかいないのか定かではなく、問い合わせをしようと思っているのですが、constがあるのに中身を書き換えていませんか??と問い合わせるのは抵抗があります。

constの付いた引数がポインタだった場合、ポインタの指す先が書き換えられないんですよね?

184 :デフォルトの名無しさん:2006/11/16(木) 11:27:38
キャストしてconstを取ってやれば可能。

185 :デフォルトの名無しさん:2006/11/16(木) 16:43:34
便乗で質問。
関数内部で書き換えるのに、引数にconstをつける理由ってなに?

186 :デフォルトの名無しさん:2006/11/16(木) 17:51:45
>>185
ライブラリ設計時点では内部を書き換える予定はなかったが、
実装段階で書き換える必要が出た場合。

187 :デフォルトの名無しさん:2006/11/16(木) 20:02:22
全然constの意味ないな

188 :わからないので教えてください:2006/11/16(木) 21:51:31
すみません、この問題のプログラムはどう作ればよいのかがわからないので
ぜひ、よろしくお願いします・・・

問題
配列su(要素数:12)に任意の数値をランダムに初期値設定し、逐次決定法によって
整列(昇順)させ、結果を表示させるプログラムを作成してください。

189 :デフォルトの名無しさん:2006/11/16(木) 22:09:49
マルチ氏ね

190 :189を:2006/11/16(木) 22:14:26
殺人未遂の容疑でタイ━━━━||Φ|(|゚|∀|゚|)|Φ||━━━━ホ!!!!!!

191 :デフォルトの名無しさん:2006/11/19(日) 00:49:46
ダイテル本の練習問題3.36「二進数を十進数にするプログラム」が書けない・・・
アドバイスか罵声、誰かたのむ

192 :デフォルトの名無しさん:2006/11/19(日) 01:00:35
printf("%d",x);

193 :デフォルトの名無しさん:2006/11/19(日) 01:22:39
strtol(s,0,2);

194 :デフォルトの名無しさん:2006/11/19(日) 05:19:14
>>191
同じとこやってたから書いてみた
int main(void)
{
int bin, dec, a, b, c, d;

printf("0と1のみで数字を入力:");
scanf("%d", &bin);

a = bin / 1000 * 8;
b = bin % 1000 / 100 * 4;
c = bin % 1000 % 100 / 10 * 2;
d = bin % 1000 % 100 % 10;

dec = a + b + c + d;

printf("%d\n", dec);

return 0;
}
binは2進数でdecが10進数。
でもこれだと4桁までしか入力対応してない上、binに1と0以外の値入れても反応する。
whileとシフト演算子使ってどうにかならないのかな

195 :デフォルトの名無しさん:2006/11/19(日) 11:34:32
>>194
%xで十六進法で入力させれば除算・剰余算をシフト・ビット積にできる。

196 :デフォルトの名無しさん:2006/11/19(日) 11:54:37
それだったらfgets()で入力して、strtol()で変換してもいいね。

197 :デフォルトの名無しさん:2006/11/19(日) 18:12:30
>>194
for(i=0,dec=0; bin; i++) {
 if(bin%10) dec += pow(2, i);
 bin /= 10;
}
やりたいことはこういうこと?

198 :194:2006/11/19(日) 19:11:51
>>197
調べたところpowはこの場合(2のi乗)を返すということなので、おそらくそういうことです。
ただ本の進行度として、for文と関数powを使用していません。
197さんのソースを参考にして、作り直してみたところ、実行することができました

while (bin)
  {
    if (bin % 10)
    {
      dec += i;
    }
  i *= 2;
  bin /= 10;
}

ありがとうございます。

199 :191:2006/11/19(日) 23:09:29
>>194-198thx
自分も同じように任意の桁の二進整数を入力した時の
変数宣言後の反復構造の扱いに苦慮していました
参考にさせて頂きます

200 :デフォルトの名無しさん:2006/11/20(月) 21:05:57
data[0][0][0]=data[0]
data[0][0][1]=data[1]
data[0][0][2]=data[2]
data[1][0][0]=data[3]
data[1][0][1]=data[4]
data[1][0][2]=data[5]
data[2][0][0]=data[6]
data[2][0][1]=data[7]
data[2][0][2]=data[8]
 …
data[0][1][0]=data[3w]
data[0][1][1]=data[3w+1]
data[0][1][2]=data[3w+2]
data[1][1][0]=data[3w+3]
data[1][1][1]=data[3w+4]
data[1][1][2]=data[3w+5]

というふうに1次元配列のrgbデータをを3次元配列で表したいんですがどうすればよいですか?


201 :デフォルトの名無しさん:2006/11/20(月) 21:42:25
諦めてオフセット計算用関数を用意するのが一番無難かもね。
Ex.
static inline int offset(int p1, int p2, int p3, int w2, int w3) {return p1 * w2 * w3 + p2 * w3 + p3;}
あー、rgb限定ならこれでもいいか。
static inline int offset(int p1, int p2, int p3, int width) {return p1 * width * 3 + p2 * 3 + p3;}

202 :デフォルトの名無しさん:2006/11/20(月) 23:35:19
遅いレス
>>183
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct {
int a;
char *s;
}HOGE;
void foo(HOGE *hoge){
hoge->s[2] = 'G';
}
int main(void)
{
HOGE hoge;
hoge.s = (char *)malloc(strlen("piyo") + 1);
strcpy(hoge.s, "piyo");
foo(&hoge);
printf("%s\n", hoge.s);
return 0;
}

203 :デフォルトの名無しさん:2006/11/20(月) 23:38:19
要するに、構造体ポインタにconstつけた場合、
構造体そのもの、メンバにはconstがついて変更できないが、
構造体のメンバが指すもの(hoge->s[2])についてはconstにならない。

204 :デフォルトの名無しさん:2006/11/21(火) 01:41:13
以下のような3つのペアの実数をファイルに書き、
それらのペアを配列を使って読んで、
それぞれの四則演算を別のファイルに書き出しなさい。

5.0 3.0
2.5 1.0
4.0 1.5


って課題が授業で出てサッパリわかんなくて困ってるんですが、
どなたか助けていただけないでしょうか?

205 :デフォルトの名無しさん:2006/11/21(火) 10:22:23
WinXP,VC++6.0で
0〜4294967295の符号なし長整数を
扱いたいのですが

#include <stdio.h>
int main()
{
long int v1 = 4294000000;
unsigned long int v2 = 4294000000;
printf("符号付\t\t= %d\n",v1);
printf("符号なし\t= %d",v2);
return 0;
}
実行結果:
符号付 = -967296
符号なし = -967296Press any key to continue
となってしまいます。
どうしたら4294967295まで扱えるのでしょうか?
ヘタレですいませんが、どなたかお願いします。

206 :デフォルトの名無しさん:2006/11/21(火) 10:51:35
>>205
変数がそこまで扱えていても、出力で制限しちゃダメだべ。
long intは%ld、unsigned long intは%luで出力すべし。

207 :デフォルトの名無しさん:2006/11/21(火) 11:04:47
>>206
あぁ、ナルホド!
出力時のtypeが悪かったんですね。。。
ありがとうございます〜。

208 :デフォルトの名無しさん:2006/11/21(火) 14:07:19
/* 自然対数の底eの近似値を求めるプログラム */
#include<stdio.h>
main()
{
float e = 1.00;
int count = 1, n = 1, counter = 1;
while(counter < アレ){
while(count > 0){
n *= count--;
}
e += 1 / (float)n;
++counter;
count = counter;
}
printf("自然対数の底eの近似値は %f", e);
return 0;
}
アレの値を11以上にするとプログラムが動きません
6以上でも出力結果が2.586834のまま変わりません
どなたかアドバイスお願いします

209 :デフォルトの名無しさん:2006/11/21(火) 14:23:02
>>208
nを算出するループの外側で、printf("%.20g, %d\n", e, n);として見給え。
要は、nがある程度大きくなるとfloatの精度では数値が変わらなくなるし、更に大きくなるとそれ自体がオーバーフローする。
#そもそもその近似式はあっているのか?

210 :デフォルトの名無しさん:2006/11/21(火) 14:42:37
愚直に計算するように直してみた。
・long doubleで精度を確保
・long longで階乗もOK
・逆順で計算することで誤差を減らす
でも微妙にmath.hのM_E(2.7182818284590452354)と違う……
--
#include<stdio.h>

int main()
{
long double e = 0;
for (int counter = 21; counter >= 1; --counter) {
unsigned long long n = 1;
for (int count = 1; count < counter; ++count) {
n *= count;
}
e += 1.0 / n;
printf("%.30Lg, %llu\n", e, n);
}
printf("自然対数の底eの近似値は %.30Lg", e);
return 0;
}


211 :デフォルトの名無しさん:2006/11/21(火) 15:41:23
>>209-210
ありがとうございます
>>209のようにプリントした結果、n導出後にnの初期化を忘れていたようです
くどいプログラムとなりましたが、>>210と併せて参考にさせていただきます

212 :デフォルトの名無しさん:2006/11/22(水) 15:45:14
fprintf(stdin,"hogehoge"); のようにして標準入力バッファにどこかからの入力を出力する(つまり保持させる)ことは出来ないんでしょうか?

213 :212:2006/11/22(水) 15:47:21
こんな感じでやってみた時はだめでした
#include <stdio.h>
int main()
{
int c;
fprintf(stdin,"hogehoge");
while( ( c=fgetc(stdin) ) != EOF )
putchar(c);
return 0;
}

214 :デフォルトの名無しさん:2006/11/22(水) 19:01:25
>>213
そりゃ無理だ。だが、環境とやりたいことによっては似たようなことはできる。

215 :212:2006/11/22(水) 19:22:11
>>214
どのようなものでしょう?ただ興味があるだけで活用法はパッと思いつかないんですが、できれば教えていただきたいです

標準入力の入力バッファとかストリームと呼ばれるものはstdinが指す先にあるFILE構造体にあるんですよね
ファイルの状態としてはfopen("stdin","r")みたいに読み取り専用になってるでしょうか?

216 :デフォルトの名無しさん:2006/11/24(金) 11:19:11
環境も書かないような初心者には無理だろ。

217 :212:2006/11/24(金) 12:27:59
>>216
すみません、OSはWindowsXP、コンパイラはVC++Toolkit2003を使っています。

キーボードからの入力以外に、直接文字配列を標準入力に入力することは出来るのか
出来るとしたらどのように実現しているのかが、さわりだけでも興味があったので
環境依存で自分の環境ではできなくても特に不満はないです

218 :デフォルトの名無しさん:2006/11/24(金) 13:34:31
Unix系ならecho foo| yourProgramで標準入力にfooが入力されるわけだが。
勿論これはfooが事前に決定できる文字列の話なので、
自前で文字列を用意して自分自身の標準入力で受けるのならパイプでも使わないと無理だが。

219 :212:2006/11/24(金) 16:29:31
>>218
パイプってまさしくそういうことだったんですね、ありがとうございます
パイプがやってる処理を自前でソースの中に組み込むことは出来るんでしょうか?

220 :デフォルトの名無しさん:2006/11/24(金) 16:52:47
つ[pipe()]

今話題の用途には使いにくいが、お手軽にはpopen()も。

221 :デフォルトの名無しさん:2006/11/24(金) 16:57:04
大域ヘッダーファイルの〜〜.hと7つの原始ファイル〜.cを動かすにはどうすればいいですか?
vc++で動かしたいのですがlinuxでやってたリンク編集とかが分からなくて、
できればVCでの手順などを教えていただけませんか?

222 :212:2006/11/24(金) 17:20:55
>>220
おお、こんな関数があったんですね、ありがとうございます
ぐぐったところには出力の方はあっても入力の方がなかったのでおぼろですが
fprintf(stdin,"hogehoge");みたいなことをしたいのならこんな感じでしょうか?

int filedes[2];
char buf[256];
pipe(filedes);

close(STDIN_FILENO);
dup2( fd[0] , STDIN_FILENO );

write( fd[0] , "hogehoge" , 256 );

223 :212:2006/11/24(金) 17:30:23
すみません弄ってたら余計なものが残ったままでした…
char buf[256];は省いて、writeの第3引数は9にして下さい

224 :デフォルトの名無しさん:2006/11/25(土) 01:01:25
>>222
大体あってる、でも、ひとつ間違いがあってwriteするほうが1、readが0
あとdup2の前でcloseする必要はない。dup2がやってくれる。
#include<unistd.h>
#include<stdio.h>
int main()
{
    int fd[2]; 
    char buf[256]; 
    pipe(fd); 
    dup2( fd[0] , STDIN_FILENO );
    write( fd[1] , "hogehoge" , 9 ); 
    read( fd[0] , buf , 9 );
    puts(buf);
    
}


225 :212:2006/11/25(土) 16:44:17
>>224
レス遅れてすみません、理解するのに時間掛かってました
dup2( fd[0] , STDIN_FILENO );でキーボードからの入力を無効にして
write( fd[1] , "hogehoge" , 9 );で本来なら画面に出力されるところをパイプが受け止めて
read( fd[0] , buf , 9 );でキーボードからの入力を受け取るところ、すでにパイプに
保持されている文字列を受け取っている、という理解でいいでしょうか?

そうなると、パイプがバッファリングに使う領域=標準入力がバッファリングされる領域=標準出力がデータを取ってくる領域
ということなんでしょうか?

226 :デフォルトの名無しさん:2006/11/25(土) 21:04:05
超初心者なんですがreturn 0;ってどういう意味ですか?

227 :デフォルトの名無しさん:2006/11/25(土) 21:33:01
0を返すという意味です

228 :デフォルトの名無しさん:2006/11/25(土) 21:59:16
特にmain関数の場合は、正常終了した場合0を返すと定められています。

229 :デフォルトの名無しさん:2006/11/25(土) 22:09:42
式の中では0は偽で0以外が真なのに、0を返すことが正常終了になってるのは
単にそうすれば0以外の値にどんなエラーだったのかそれぞれ意味を付加ことができるから?

230 :デフォルトの名無しさん:2006/11/25(土) 22:10:24
付加する、だった

231 :デフォルトの名無しさん:2006/11/25(土) 22:35:41
>>229
そのアプリケーションを呼び出すシェルでは逆に0が真で0以外が偽なんだと。
シェルスクリプトでバッチ処理とかする際に対応がきちんとしてるとバグの混入を防げる。

232 :デフォルトの名無しさん:2006/11/25(土) 22:42:13
>>231
あ、なるほど。トンクス

233 :212:2006/11/27(月) 16:32:34
何度も長文ですみません
勘違いしていました、pipe()は標準入力or出力の間に入って本来とは違う場所へ出力できるバッファ=パイプを作ってるわけですね

>>212の話に戻るのですが
for(c=0;c<10;c++)
*(stdin->_ptr+c)=c+'0';
fflush(stdin);
printf("%s\n",stdin->_ptr);
等のようにstdinの指すFILE型構造体の中身を操作してもちゃんと動作するのに
何故fprintf(stdin,"hogehoge")やsscanf("%s",stdin->_ptr)はできないのか不思議です

またstdoutの場合stdout->_ptrは常時NULLを指していて、何か代入しても無視されNULLのままで
ポインタ演算や逆参照をすると、コンパイル自体は通るものの不正終了してしまいます

stdinやstdoutは普通のファイルポインタとはちょっと違うみたいですね
無理なものは無理だとしてとりあえず先に進むことにします、付き合っていただいてありがとうございました

234 :デフォルトの名無しさん:2006/11/29(水) 14:02:53
lseekのlはleadのですか?

235 :デフォルトの名無しさん:2006/11/29(水) 14:24:00 ?2BP(202)
何故唐突にleadが出てくるのかが分からない。

236 :デフォルトの名無しさん:2006/11/29(水) 14:39:26
>>235
なんとなく探す場所に導く(lead)って意味なのかなと…

237 :デフォルトの名無しさん:2006/11/29(水) 17:47:31
柴田望洋の明解C言語って本を渡されたが
これ演習の答えがないと答えがあってるか不安になるなorz


チラ裏でスマソ

238 :デフォルトの名無しさん:2006/11/29(水) 19:06:38
>>236
location seek じゃないかなあ?

239 :234:2006/11/29(水) 19:28:52
>>238
あ、なるほど。それっぽくてすっきりしました、ありがとうございます。

240 :デフォルトの名無しさん:2006/11/29(水) 20:23:12
open <-> fopen
read <-> fread
write <-> fwrite
close <-> fclose
なのにseekは
lseek <-> fseek
なんだよね。
昔システムコールにseekがあってlseekに拡張されてseekがobsoleteになったとかなのかね?

241 :デフォルトの名無しさん:2006/11/30(木) 04:53:40
lseek()のlはlongのl

242 :デフォルトの名無しさん:2006/11/30(木) 09:41:20
>>241
オフセットの型がintなseekが最初にあってlongに拡張されたlseekに置き換わった?
そして今やオフセットの型はoff_tなんだよね。longに結び付けられてたりするけど。
でもシステムによってはintだったりすることもある。

243 :234:2006/11/30(木) 17:57:49
>>241
longですかー、うーん下らない部分だと分かっていても気になってしまう

244 :デフォルトの名無しさん:2006/11/30(木) 21:28:29
fseek だって、_fseeki64 とか言うのが出来たしな


245 :デフォルトの名無しさん:2006/12/01(金) 10:29:33
年賀状の当選番号を検索するってプログラムを作ることになったけどわかんない・・・

具体的には例を出すとあたり番号が「012345」というのがあったら入力が出来ないということです
ですので、文字列としてやって見ようと思うのですが6文字(1等は6桁のため)と言う風に定義が出来ない・・・
タスケテ・・・

246 :デフォルトの名無しさん:2006/12/01(金) 10:36:43
誰が何の目的でそんなプログラムを必要とするのだろうとふと思った

247 :デフォルトの名無しさん:2006/12/01(金) 11:00:39
一応宿題ってことになってます

248 :デフォルトの名無しさん:2006/12/01(金) 11:14:39
ttp://textup.no.land.to/w/1164939089/
初めて作ったんですけどどうすか?
EXIT_**** 定数ってみなさんは使います?


249 :デフォルトの名無しさん:2006/12/01(金) 14:48:16
>245
別に先頭が0でも数字として入力できないわけじゃないだろ?
当選番号の桁数は決まってるんだから、入力された数字から12345を引いて
1000000で割った余りが0なら当選ってすればいいじゃん。

250 :デフォルトの名無しさん:2006/12/01(金) 19:49:34 ?2BP(111)
2chのURLをスラッシュで区切って切り分けようと考えています
http://hoge.2ch.net/test/read.cgi/hogehoge/9桁または10桁の数字/l50とかオマケ
の形で入力してもらって

http;//2ch.dumper.jp/9桁または10桁の数字/とか
http;//makimo.to/2ch/hoge_hogehoge/9桁または10桁の数字の先頭4桁/9桁または10桁の数字.html
のような形でファイルに出力するにはどうしたらいいでしょうか

251 :デフォルトの名無しさん:2006/12/01(金) 20:05:04
fprintfでも使えば?

252 :デフォルトの名無しさん:2006/12/01(金) 20:08:58
s|^http://(.*?)\.2ch.net/test/read.cgi/(.*?)/(\d{4})(\d{5,6})/.*$|http://makimo.to/2ch/$1_$2/$3/$3$4.html|

253 :デフォルトの名無しさん:2006/12/01(金) 21:11:25 ?2BP(111)
>>251
とりあえず、個別に入力してもらって
http;//2ch.dumper.jp/9桁または10桁の数字/を出すところまでやってみました
http://jbbs.livedoor.jp/bbs/read.cgi/computer/21256/1164941934/3

>>252
正規表現は(ご本人には否定されたけど)
Javascriptでhttp://www.geocities.jp/mirrorhenkan/でやられてるみたいなんですね
できたら他の方法でできないものでしょうか
…てこれは最初に書くべきでしたね。申し訳ない

254 :デフォルトの名無しさん:2006/12/03(日) 00:38:56
こういう書き方ってひょっとしてまずいんでしょうか。
この関数にsizeofで260の文字列入れて、戻り値をsizeofしてみたら4だったんですけど、
その戻り値の文字列をprintfしてみたらどう見ても4じゃおさまりません。
ものすごく不安です。

// rev_strstr関数
// strstr関数を文字列の後ろから行う

char* rev_strstr (char* check_str, char* search_str){
char* rev_search_str;
char* rev_str;

rev_search_str = strrev(search_str);
rev_str = strrev(check_str);
rev_str = strstr(rev_str, rev_search_str);
return strrev(rev_str);
}

255 :デフォルトの名無しさん:2006/12/03(日) 00:43:10
ポインタのサイズは今の時代はまだ4で通用するかな
あと何年かすると8で当たり前じゃんこのじじぃがとかいう時代になるのかも

256 :デフォルトの名無しさん:2006/12/03(日) 00:45:19
それだけでは判断が付かないが、sizeofの結果が4になるというのは、
おそらくsizeof (char*)ということになっているのだろう。

257 :デフォルトの名無しさん:2006/12/03(日) 00:52:14
ちなみにANSI Cの文字列は0終端だから
strlenって関数で長さを知ることが出来る。

258 :254:2006/12/03(日) 01:08:31
ありがとうございました。strlen関数で実際のchar配列の要素数と同じ数字を得られました。
内部的に配列になってないんじゃないかと心配したんですが、そういうことじゃなかったんですね。

259 :250:2006/12/03(日) 18:56:34 ?2BP(111)
250です
一応自分で作ってみたのですが無限ループらしく落ちてしまいますorz
どこが原因か見ていただけないでしょうか

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

/* 定数 */
#define FNAME1 "uho.txt" /* 読み込むファイル名 */
#define FNAME2 "yaranaika.txt" /* 吐き出すファイル名 */

/* 関数のプロトタイプ宣言 */
int split_date(char* buf);
char *declast(char saba[20]);

/*グローバル変数として宣言*/
FILE *fp1,*fp2;/* ファイルポインタ */

/* main関数 */
int main(void)
{
/* 変数宣言 */
char buf[512]; /*uho.txtから読み込むデータのための配列*/

/*uho.txtを読み込みモードで開く*/
fp1 = fopen(FNAME1,"r");
if ( fp1 ==NULL)
{
printf("ファイルオープンに失敗したんです><\n");
return 1;
}

260 :250:2006/12/03(日) 18:57:16 ?2BP(111)

/*yaranaika.txtを上書きモードで開く*/
fp2 = fopen(FNAME2,"w");
if ( fp2 ==NULL)
{
printf("ファイルオープンに失敗したんです><\n");
return 2;
}

/*uho.txtから一行分のデータを読み込む*/
while(fgets(buf,256,fp1)!=NULL)
{
/*データの取り出し*/
split_date(buf);
}

/*uho.txtを閉じる*/
fclose(fp1);
/*yaranaika.txtを閉じる*/
fclose(fp2);

return 0;

}

261 :250:2006/12/03(日) 19:00:49 ?2BP(111)
ああ、よく考えたらここに貼る必要ないですねorz
ここに貼っておきました
http://jbbs.livedoor.jp/bbs/read.cgi/computer/21256/1164941934/28-30

262 :デフォルトの名無しさん:2006/12/03(日) 20:11:20
>>261
strtok()何ぞを使っている段階で読む気が失せた。
sscanf()で、%[^/]でも使えば?

263 :デフォルトの名無しさん:2006/12/03(日) 20:57:04
{
int i=0;
int temp=0;
for(i=0;i<n/2;i++)
{
temp = a[i];
a[i] = a[n-i-1];
a[n-i-1] = temp;
}
}
これは逆順の関数なんですがaをポインタ形式に書き換え様としています。
自分でやったら動作がおかしくなるorエラーなので、誰か手本を下さい。
ポインタをよく分かってなさそうなので参考にもしたいです。

264 :デフォルトの名無しさん:2006/12/03(日) 21:38:57
a[x] → *(a+x) に全部書き換えればいいよ

265 :デフォルトの名無しさん:2006/12/03(日) 21:45:31
>>263
つーか、ちゃんとaをポインタとして使っているジャン。
>264がヒントを書いているけれど、Cでは配列を配列のまま参照することはないからね。

266 :デフォルトの名無しさん:2006/12/03(日) 21:50:06
C言語の配列とポインターを使って、文字列をひとつ入れて
それぞれの文字が入っているアドレスを出力しなさい。
また、整数データの列を定義してそれぞれの整数が入っている
アドレスを出力しなさい 。

という問題を考えているんですが、C言語をまだ習い始めたばかりで、
どのように示せばいいのか悩んでいるので、
解答もしくはヒントを提示していただけないでしょうか?
よろしくお願いします。

267 :デフォルトの名無しさん:2006/12/03(日) 22:00:17
>>264-265
ありがとうございます。
分かってるのか分かってないのか・・

268 :デフォルトの名無しさん:2006/12/03(日) 22:28:24
>>266
配列の各要素にアクセスするにはどうしたら良いか?
変数のアドレスを取得するにはどうするか?
後は、>264とかも参考になる。

269 :デフォルトの名無しさん:2006/12/03(日) 22:48:13
始めて書き込みます
コンパイラborlandをインスコしたのですが
メモ帳で作ったファイルの入れ方(コンパイル)がわかりません・・・
お願いします

270 :デフォルトの名無しさん:2006/12/03(日) 23:58:44
C/C++の宿題を片付けます 77代目
http://pc8.2ch.net/test/read.cgi/tech/1164079451/l50

271 :デフォルトの名無しさん:2006/12/04(月) 00:05:29
構造体に配列を使って格納したデータの中に、曜日やら時間やらが入っているんですけど
例えば曜日を入力したらその中の同じ曜日の物だけを表示するプログラムを作りたいです。
なんかアドバイス貰えませんか?

void printf_lesson(struct lesson a)
{
printf("name:%s\n",a.name);
printf("prof:%s\n",a.prof);
printf("day:%d\n",a.day);
printf("period:%d\n\n",a.period);
}
こんな関数を利用するんですが。


272 :デフォルトの名無しさん:2006/12/04(月) 00:21:27
>>271
分からない所はどこ?

273 :デフォルトの名無しさん:2006/12/04(月) 00:57:56
>>269
bcc32 ファイル名.c
で出来ない?

274 :デフォルトの名無しさん:2006/12/04(月) 01:00:53
ttp://tx-h.go2.jp/loada/src/txup0006.zip
このC言語ファイルをコンパイルして、実行した後に、
"search"と入れて学籍番号(1〜10)を入力すると「セグメンテーション違反です」と出てしまいます。
どこが悪いのか全くわからないので、教えていただけないでしょうか?

275 :デフォルトの名無しさん:2006/12/04(月) 02:11:09
>>274
sの初期化を

276 :デフォルトの名無しさん:2006/12/04(月) 02:22:44
>>273
ありがとう
ちょっとやってみてから
また質問します( ^ω^)

277 :デフォルトの名無しさん:2006/12/04(月) 02:32:28
>>271
lesson {a1,a2...ai...an}

曜日を入力
for(i:1->n)
 if(曜日=ai.day) printf_lesson
 i++

278 :デフォルトの名無しさん:2006/12/04(月) 03:12:11
>277
==

279 :デフォルトの名無しさん:2006/12/04(月) 09:36:45
>>275
ありがとうございます。
こんな簡単なことに気づけないなんて、情けないです。
もっと勉強します!

280 :271:2006/12/04(月) 12:25:01
>>277
その曜日の入力のやり方がいまいち分かりません。
scanf("%d",&ai.day);とかでいいんですか?

あとよかったらfor(i:1->n) の意味を説明してほしいです。

281 :271:2006/12/04(月) 14:17:13
情報量が少なくて答えにくいと思うから追記
時間割表のようなものを配列の中に入れるのですが
配列の中に7個 科目を選んで入れてその科目自体に曜日と時間を決めておくから、
配列の1番目が月曜日と決まっているわけではないです。

strcpy(c.name,"科目名");
strcpy(c.prof,"教授の名前");
c.day=2; //曜日。2なので水曜日
c.period=1;//一限目という意味
構造体を使っててこんなデータを7個配列に入れているのですが
2と入力したらその中でday=2の物を全部出すようにしたいです。

282 :274:2006/12/04(月) 14:45:30
ttp://tx-h.go2.jp/loada/src/txup0008.zip

>>274に追加で、"avarage"と入力することによって各教科の平均を表示したいのですが、
途中までやってみたもののよくわからなくなってしまいました。
ご教授のほどよろしくお願いいたします。

283 :デフォルトの名無しさん:2006/12/04(月) 21:17:04
>>281
構造体の配列を使えば良いジャマイカ

284 :デフォルトの名無しさん:2006/12/04(月) 21:34:05
>>283
とりあえず課題はelse ifとか使って無理やり結果は出るようにしたんですが
やっぱ題意と違うからこのまま出したら減点される。。

構造体の配列がいまいち分かりません。
本に書いてある通りだと配列全部同時に出力とかになるんですが
応用して選んだやつだけ、それも配列番号じゃなくて
中のデータの一部を汲み取って表示とかは分からないです。

285 :デフォルトの名無しさん:2006/12/04(月) 22:44:36
2ちゃんで訊かなきゃならんほど追い詰められていながら
減点を気にするとはいやはや

286 :デフォルトの名無しさん:2006/12/04(月) 22:50:50
減点というかそのプログラムを応用したものを次に作らないといけないのと
自分でやった方法だと配列が使われてない(><; のが問題だと思いまして

287 :デフォルトの名無しさん:2006/12/04(月) 23:08:56
とりあえずそのelse ifを使って無理やり結果を出すソースが見たい

288 :デフォルトの名無しさん:2006/12/04(月) 23:33:22
>>286
>>280はちょっと違って、一旦別の変数xに入れてからxとa[i].dayの比較をする
for(i:1->n)は iを1〜nまで を適当に書いただけ

あとは>>287と同じ

289 :デフォルトの名無しさん:2006/12/04(月) 23:51:33
>>282
s=0 としてから ave_m = avarage_math(s); としているがどうなるか、sとは何か
sum=0 として sum += sum; としているがどういう意味の式か


290 :デフォルトの名無し:2006/12/05(火) 12:53:28
このような事ができるようなプログラムを1時間以内で教えて下さい。お願いします

1:4個の1桁の数字からなる順列を乱数で生成
(4個の数字は全て異なる)
2:4個の数字の順列を入力
3:生成した順列と入力の順列を比較
(数と位置があっている「hit])
(数はあるけれど位置が違う「blow])
4:hit数とblow数を表示
5:順列があたるまで入力を繰り返す

実行例
Number?:0123
Hits:0,Blows:1
Number?:0124
Hits:0,Blows:0
Number?:3567
Hits:3,Blows:0
Number?:3568
Hits:3,Blows:0
Number?:3569
Hits:4,Blows:0
Trials:5

291 :デフォルトの名無しさん:2006/12/05(火) 12:58:39
borlandのコンパイラを入れたんですが
マイドキュメントにあるtest.cを
C:\borland\bcc55\Bin\bcc32.exeでコンパイルして別のフォルダに出力する方法ってありますか?
出来れば簡単に出来るといいのですが・・・
変なところあるかもしれませんがよろしくお願いしますm(__)m

292 :デフォルトの名無しさん:2006/12/05(火) 13:39:31
>>291
出力ファイル名を指定するオプションは、たぶんパス指定も受け付けると思う。

293 :デフォルトの名無しさん:2006/12/05(火) 13:53:54
>>291
-eFilePath
スペース空けたら駄目

294 :デフォルトの名無しさん:2006/12/05(火) 18:58:15
猫でもわかるプログラm
という本を買ってやり始めようと思ったんですが・・・
初めのパスやPATHの設定の仕方が書いてありません!
設定のやり方がkwsk載っているサイトありましたら
教えて下さいorz

295 :デフォルトの名無しさん:2006/12/05(火) 19:07:17
>>294
パスやPATHって何?
http://www.google.com/search?num=50&lr=lang_ja&q=PATH+%E8%A8%AD%E5%AE%9A

296 :デフォルトの名無しさん:2006/12/05(火) 19:19:15
>>295
ありがとうございます(*´∀`*)
なんとか設定できたみたいです。
"bcc32.cfg"を作れ、とかいてあり作ろうとしたらなぜかもう作ってありました・・・。
こういうのはなぜ作るのか教えて下さいorz気になる、、、
猿でもわかるようにorz

297 :デフォルトの名無しさん:2006/12/05(火) 19:29:01
>>296
まだC言語に触ったことないなら説明しても解からないと思うが

インクルードパスやライブラリパスを指定するためにbcc32.cfgを作る

298 :デフォルトの名無しさん:2006/12/05(火) 19:39:47
>>297
・・・
よくわかりませんが、ありがとうございます⊂二二二( ;^ω^)二⊃ブーン



299 :デフォルトの名無しさん:2006/12/06(水) 21:22:22
main()とmain(void)のようにカッコの中に何も書かない場合とvoidを書く場合の違いがわからないのですが、解説してもらえないでしょうか。

300 :デフォルトの名無しさん:2006/12/06(水) 21:36:06
そこにvoidを書くと、引数を取らないことを意味する。
関数定義でvoidを書かない場合は上と同じ。
プロトタイプ宣言でそれを書かない場合、引数の指定が全くないことを意味する。

なお、C++では常に引数を取らないことを意味する。

301 :デフォルトの名無しさん:2006/12/06(水) 21:53:34
Visual C++ 2003でCの勉強してるんですけど
ど〜してもエディタが気に入りません。
どうしたらいいですか。

302 :デフォルトの名無しさん:2006/12/06(水) 22:05:34
すいません質問です。
#include <stdio.h>
#include <conio.h>

int main(void)
{
char ch;

printf("メッセージを入力:\n");

ch = getche();
while(ch != '\r') {
printf("%c", ch+1);
ch = getche();
}

return 0;
}
このコードをコンパイルして実行したんですが
文字を入力したら文字が右斜め上に行ってしまいます。
何が原因なんでしょうか?
コンパイラはBorland C++5.5.1です。win2000で使用してます。
よろしくお願いします。

303 :デフォルトの名無しさん:2006/12/06(水) 22:07:51
ある程度はカスタマイズできる。
それでも気に入らないなら、使わなければいい。

コンパイルはコマンドプロンプトからするも良し、
他のエディタでコマンドを呼び出すようにするも良し。

304 :デフォルトの名無しさん:2006/12/06(水) 22:15:19
>>302
bccだけ斜め上行くね
VC++,gccは問題なかった
なんでだろ

305 :デフォルトの名無しさん:2006/12/06(水) 22:16:26
C言語を習得したいと思っているのですが、分かりやすい参考書、サイトなどありましたら教えてください。
また、C言語にも色々と種類があるようなのですが、どれから勉強していけばよいのでしょうか?

306 :デフォルトの名無しさん:2006/12/06(水) 22:22:17
>>302

#include <stdio.h>
#include <conio.h>

int main(void)
{
char ch;

printf("メッセージを入力:\n");

ch = getch();
while(ch != '\r') {
printf("%c", ch);
printf("%c", ch+1);
ch = getch();
}

return 0;
}

これでちょっとやってみて。

307 :デフォルトの名無しさん:2006/12/06(水) 22:23:50
CRLFが悪さをしてるかと

308 :デフォルトの名無しさん:2006/12/06(水) 22:30:22
>>306
>>302じゃないけどgetchでは問題なかった

309 :デフォルトの名無しさん:2006/12/06(水) 22:35:42
>>305
独習CからC++やC#なりに行けばいいと思いますが、
もし、基礎的なことを理解しているのであれば、
http://www.amazon.co.jp/gp/product/489471115X/sr=8-1/qid=1165411940/ref=sr_1_1/503-3871966-3793501?ie=UTF8&s=books
がいいと思います。C言語をしらないことを前提に書かれています。
ただし、第2版でもnamespaceのことはおざなりな説明ですのであしからず。
C++がわかればいいというのであればこれで勉強するといいと思います。


310 :302:2006/12/06(水) 22:39:36
>>306
9行目はどういう意味になるのでしょうか?
>>302
getchはconio.hでいいんですか?

311 :デフォルトの名無しさん:2006/12/06(水) 22:40:14
>>309
ありがとうございます。
>独習CからC++やC#なりに行けばいいと思いますが
とありますが、C言語自体は独学でも十分に習得できるものということでしょうか?
またプログラムのプの字も知らない状態なので、
フリーのコンパイラとともに「猫にもわかるプログラミング」というサイトで勉強しようと思っているのですが
なんとかなりますか?

312 :302:2006/12/06(水) 22:41:01
>>307
CRLFが原因だとすると解決方法は
あるのでしょうか?

313 :デフォルトの名無しさん:2006/12/06(水) 22:44:41
コマンドラインからビルドしたら右上に行ったけど、
BCC Developer でビルドしたら普通に動いたよ。
素人だからわからんけど、引数じゃ無いかな?

314 :デフォルトの名無しさん:2006/12/06(水) 22:51:55
>>310
思い出した
DOS窓の行数が増えていくと表示がおかしくなる現象
新たにDOS窓開くと問題ないと思う

315 :デフォルトの名無しさん:2006/12/06(水) 23:00:14
>>314
ホントだ。
再現できた。
コンソール起動してすぐなら異常ないけど、
行数稼いでから実行すると異常を起こす。


316 :デフォルトの名無しさん:2006/12/06(水) 23:00:18
>>300
ありがとうございます

317 :デフォルトの名無しさん:2006/12/06(水) 23:08:15
>>315
bccのconioまわりがおかしいのかもね
カーソル位置を指定するgotoxyも同じように行数増えるとおかしくなるはず

318 :デフォルトの名無しさん:2006/12/06(水) 23:52:03
どうするとバグが多くなると思いますか?

319 :デフォルトの名無しさん:2006/12/06(水) 23:55:40
キーボードにコーヒーをこぼすと
入力ミスが多くなりますよ (^^

320 :デフォルトの名無しさん:2006/12/07(木) 01:09:49
バグ少ない作りかたしたほうがよくないですか?
プログラムしたことないんですが?

321 :デフォルトの名無しさん:2006/12/07(木) 09:25:01
Cです。

      略
int main()
{ char expr[] = { '8', '6', '*', '5', '-', '\n'};
int i,j;

for(i=0; i < 10; i++){
if (isdigit(expr[i])) {
j = atoi(expr[i]);
      略

この状態でコンパイルしようとすると、atoiの行でエラーが出てしまうのですが対処法を教えてもらえないでしょうか?
型が関係しているのかと思い色々試してみてもうまくいきません。
j = atoi(expr);  とするとコンパイルはできたのですが、代入された数字が他の数字(98)に変わってしまいました・・・。

322 :デフォルトの名無しさん:2006/12/07(木) 09:43:27
>>321
j = atoi(&(expr[i]));

何をしようとしているかぐらい話のネタとして書いてくれないとつまらない

323 :デフォルトの名無しさん:2006/12/07(木) 10:06:15
>>321
これがやりたい?そのコードで10回ループはマズイよ。

char expr[] = { '8', '6', '*', '5', '-', '\n'};
int i, j;

for(i = 0; i < sizeof(expr) / sizeof(char); ++i){
if(isdigit(expr[i])){
char str[] = {expr[i], '\0'};
j = atoi(str);
}
}

324 :デフォルトの名無しさん:2006/12/07(木) 10:19:45
>>321
何故「atoi(expr[i])」がダメかと言うと
atoi()は引数に「const char*」を取るから。
「expr[i]」の場合の型は「char」だからコンパイルエラーになるよ。

だから一旦、下みたいに別の領域に置いて、atoi()に渡してやる必要があるよ。
char str[]={expr[i],'\0'}; ←何処までが文字列か分かる様に'\0'を追加しとく

あと配列の要素数ぶんキチンとループしないと
確保したメモリ領域以外にアクセスする事になるから気を付けないと。
for(i=0;i<10;i++) こんな適当じゃなくて
for(i=0;i<sizeof(expr)/sizeof(char);++i) こんなふうに要素数を溢れない様にしないと。

325 :デフォルトの名無しさん:2006/12/07(木) 11:37:03
>>322-324
ありがとうございます。逆ポーランド式の計算プログラムを作っています。
sizeofというのは演算子なんですね。初めて見ました。
「’\n’」が来た時にiに10より大きい数字を代入してループを抜けようと考えていたのですが、むちゃくちゃすぎるでしょうか?
今は期限がせまっているのであとでじっくり考えてみます!

326 :デフォルトの名無しさん:2006/12/07(木) 11:53:20
>>325
文字数ぶんループしたいなら↓の様にすればいいよ。
char expr[] = { '8', '6', '*', '5', '-', '\0'};
for(i = 0; i < strlen(expr) ++i)
これでもいいけど。
for(i = 0; expr[i] != '\0'; ++i)
改行で判定したい場合はこれ。
char expr[] = { '8', '6', '*', '5', '-', '\n'};
for(i = 0; expr[i] != '\n'; ++i)

327 :デフォルトの名無しさん:2006/12/07(木) 12:09:23
>>326
strlen()も初めて見ました。\0という表現(?)も。あとで調べてみます。

expr[i] != '\n' ← なるほど!と思いました。なぜ気づかなかったんだろう。
どうにかプログラムがうまく動くようになってよかったです。本当にありがとうございました(^^)

328 :デフォルトの名無しさん:2006/12/07(木) 13:30:36
atoi()よりもstrtol()かsscanf()を使うべきだな。
それらはatoi()と違って、変換終了点が判るのだから。

329 :デフォルトの名無しさん:2006/12/07(木) 23:45:22
C言語で最適なコンパイラって何ですか?(市販品も含めて)

330 :デフォルトの名無しさん:2006/12/08(金) 02:09:47
awkのことはここで聞いてもおk?

初心者というかアルゴリズムがわからなくって・・。
# cat aaa
1
2
3

これを
1 2 3 
に並べ替えるってどうすりゃいいのか

331 :デフォルトの名無しさん:2006/12/08(金) 04:31:51
>>330
awkじゃ完全にスレ違いだ。ちゃんとawkスレはあった気がする。
並べ替えっていうより複数行をまとめるってことじゃないの?
そうなら、アルゴリズム以前の問題だ。
ヒント:BEGIN{ORS=" "}{print}

332 :デフォルトの名無しさん:2006/12/08(金) 10:15:45
>>329
ライブラリは探せば出てくるから、とくにこれといって優れたものというのはないと思う。

333 :デフォルトの名無しさん:2006/12/08(金) 19:10:45
ダイテル本の練習問題の解答集を自費出版するまでの道のりを教えて下さい

334 :デフォルトの名無しさん:2006/12/08(金) 19:17:11
>>333
ハメ撮りクイズをインディーズで出すってこと?

335 :デフォルトの名無しさん:2006/12/09(土) 14:20:24
ちょっと質問。
fwrite() とかの、size と count ってのは何のために用意されてるんでしょう?
fwrite(hoge, 2, 4, fp);


336 :デフォルトの名無しさん:2006/12/09(土) 14:21:13

fwrite(hoge, 2, 4, fp);
fwrite(hoge, 1, 8, fp);

の違いが分かりません。
メモリ上のデータと書き込み先のデータでインディアンが違うときとか、そういう時のため?

337 :デフォルトの名無しさん:2006/12/09(土) 14:32:21
C言語でカレンダーを作りたいのですがわかりません
簡単なプログラムで作りたいのですが……
よろしくおねがいします

338 :デフォルトの名無しさん:2006/12/09(土) 14:37:28
printf("12月");
printf("          1 2");
printf(" 3 4 5 6 7 8 9");
printf("10 11 12 13 14 15 16");
printf("17 18 19 20 21 22 23");
printf("24 25 26 27 28 29 30");
printf("31");





339 :デフォルトの名無しさん:2006/12/09(土) 14:39:53
つまりは、何が分からないのかをしっかり伝えないと、
こちらからはこんな答えしか書きようがないってことだ。


340 :デフォルトの名無しさん:2006/12/09(土) 14:44:05
>>337
http://www.fireproject.jp/feature/c-language/basic-library/date-time.html


341 :デフォルトの名無しさん:2006/12/09(土) 14:46:17
>>337
#include <stdio.h>
int day_of_week(int year, int month, int day) {
    if (month == 1 || month == 2) { --year; month += 12; }
    return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7;
}
int days_of_month(int year, int month){
    static const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (month < 1 || month > 12) month = 1;
    if (month == 2) return days[1] + (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
    else return days[month-1];
}
void calendar(int year){
    int i, k, month, days;
    for (month = 1; month <= 12; month++) {
        printf("\n    %d年%d月\n日 月 火 水 木 金 土\n", year, month);
        k = day_of_week(year, month, 1);
        days = days_of_month(year, month);
        for (i = 0; i < k; i++) printf(" ");
        for (i = 1; i <= days; i++) {
            printf("%2d ", i);
            if (++k % 7 == 0) printf("\n");
        }
        printf("\n");
    }
}
int main(void) {
    int year;
    printf("何年?:"); scanf("%d", &year);
    calendar(year);
    return 0;
}

342 :デフォルトの名無しさん:2006/12/09(土) 15:05:17
>>338
せめてネタでも改行くらいしようや。

>>336
戻り値の違いに注意。

343 :デフォルトの名無しさん:2006/12/09(土) 15:14:16
インディアンが違うと確かに困るな。
南米ではインディオだな。

344 :デフォルトの名無しさん:2006/12/09(土) 15:16:56
fwriteの戻り値の説明で

>読み書きに成功した要素の個数を返す。エラーが生じた場合や、end-of-file(ファイルの最後)に達した場合、
>返り値は指定した個数よりも小さい値(またはゼロ)となる。

とありました。
fwrite(buf, sizeof(int), 8);
とした場合に8より小さい値が返ってきたらエラーかどうかの区別がつかない気がするのですが、
エラーかどうかをどうやって判断したらよいのでしょうか?

345 :デフォルトの名無しさん:2006/12/09(土) 15:17:12
ネイティブアメリカンだバカヤロウ

346 :デフォルトの名無しさん:2006/12/09(土) 15:43:11
>>344
そこでferror()ですよ。
まぁ、大抵fwrite()で4*8程度ではバッファ内に収まってしまうから実際の書き出しは行なわれず、
エラーなんぞ起きやせんのだが。
#そしてfclose()で書き出しが行なわれてエラーになったりする罠。

347 :デフォルトの名無しさん:2006/12/09(土) 17:16:29 ?2BP(294)
fwrite()の場合は、書きこんだサイズがバッファより小さかったら、エラーなんじゃないの?
いや、ferror()で調べればいいけどさ。

348 :デフォルトの名無しさん:2006/12/09(土) 17:22:17 ?2BP(294)
unixのwrite()の場合は、全部書きこまないで戻ってきて、しかもエラーで
ない場合がありえるって話を読んだことがあるな。。。
fwrite()もそうなのか?
まあ、どちらにしてもferror()で調べるようにすればいい話だけど。

349 :デフォルトの名無しさん:2006/12/09(土) 17:45:23
>>344の戻り値の説明はfread()の間違いだろと誰も指摘しないのかよ

350 :デフォルトの名無しさん:2006/12/09(土) 18:35:54 ?2BP(294)
「読み書きに成功した・・・」だから、fwriteも含んでるんじゃね?

351 :デフォルトの名無しさん:2006/12/09(土) 19:04:24
>>350
自分の持ってるANSI Cの辞書にはfwrite()の項にこう書いてある。

返却値
@書き込みに成功した値を返す.
A書き込みエラーが発生したときのみ,nより小さくなる.

352 :346:2006/12/09(土) 19:59:38
>>347
エラーの種類の判断とミスリードした。確かに、少ない時点でエラーだね。
#それさえも起きない可能性が高いことは>346に書いた通り。

353 :デフォルトの名無しさん:2006/12/09(土) 20:11:29
Cってセックスのことでしょ?
まだ手をにぎったことしかないんですけど、
セックスのときってなにかとくべつな言葉をつかうものなのですか?

354 :デフォルトの名無しさん:2006/12/09(土) 22:47:41
よろしくお願いします。

for(i=0;i<12;i++)
{
printf("a[%d]=",i+1); scanf("%lf",&a[i]);
}

上のような構文(?)を使って、

a[1]=5(数字は何でも良い)
a[2]=7



a[11]=5
a[12]=8

というように入力していき、
その入力した数字(上の例では、a[1]=5、a[2]=7、a[11]=5、a[12]=8)を
for文を使って、

5
7



5
8

という風に表示させたいのですが、どのようにしたら良いでしょうか?

355 :デフォルトの名無しさん:2006/12/09(土) 23:09:41
>>354
自分で答えかいてるようなものじゃん

for(i=0;i<12;i++)
{
printf("%d",a[i]);
}

356 :デフォルトの名無しさん:2006/12/09(土) 23:10:11
改行忘れた
\nね

357 :354:2006/12/09(土) 23:28:54
ありがとうございます。
しかし、仰るようにすると、すべて「0」になってしまうんです・・・。
ソースを貼っておきますので、アドバイスお願いします。

#include<stdio.h>
#include<math.h>
int main(void)
{
printf("測定データを入力せよ!\n");
double a[12],ave=0.0,ss=0.0,var,std;
int i;
for(i=0;i<12;i++)
{
printf("a[%d]=",i+1); scanf("%lf",&a[i]);
}
for(i=0;i<12;i++)
ave+=a[i];
   ave/=(double)12;
for(i=0;i<12;i++)
ss+=(a[i]-ave)*(a[i]-ave);
var=ss/(double)12;
std=sqrt(var);
printf("測定データ:\n");
for(i=0;i<12;i++)
{
printf("%d \n",a[i]);
}
printf("平均板厚=%1f(mm)\n",ave);
printf("標準偏差=%1f\n",var);
return 0;
}

358 :デフォルトの名無しさん:2006/12/09(土) 23:36:07
>>357
a[i]はdoubleだから%lfだな


359 :354:2006/12/09(土) 23:37:19
すみません。自己解決しました。。。
%dを%lfに変えるの忘れてました。

ありがとうございました!!

360 :354:2006/12/09(土) 23:38:28
>>358

その通りでした
ありがとうございます!

361 :デフォルトの名無しさん:2006/12/09(土) 23:43:55
「3次元空間で座標を入力して現在位置から次の敵機が迎撃可能かどうかを
確認するプログラム」を作りました。
(3次元のインベーダーみたいなのを想像してください)
これから拡張してどの経路をたどれば最高得点か、というところまで
行きたいのですがどのように作っていけばいいでしょうか?


362 :デフォルトの名無しさん:2006/12/09(土) 23:49:44
>>361
移動の仕組みはどうなっているのか、
撃てば必ず当たるの?
その際の得点は?

など説明が足りなさ過ぎる。

363 :361:2006/12/09(土) 23:53:06
移動速度は自機と敵機おなじ速さで敵は今はまっすぐ落ちてくるだけ
そして、迎撃方法は時機が敵機に体当たりするという変なプログラムですw
だから迎撃可能範囲が円錐になる感じですね
当たり判定は今のところ点です.

364 :361:2006/12/09(土) 23:59:15
追加補足で、自機の移動は最低ラインを動くのみで前には出ない
      得点はどれもおなじ
      
です

365 :デフォルトの名無しさん:2006/12/10(日) 00:00:15
>>363
なんだかよくわからないが、得点が固定ならMST(最小木)を調べてみたらどうだろう

366 :361:2006/12/10(日) 01:52:48
>>365
やってみます!

367 :デフォルトの名無しさん:2006/12/10(日) 10:18:05
このスレと別の宿題スレとか勉強になるね
サンプルかき集めたら何か出来そう

368 :デフォルトの名無しさん:2006/12/10(日) 11:01:08
Cで中田氏を実行したら、Dに進んでしまった。
手術費をどうするかでもめてる。orz

369 :デフォルトの名無しさん:2006/12/10(日) 13:43:10
>>368
結果がどうなるかは処理系によります

370 :デフォルトの名無しさん:2006/12/11(月) 03:16:06
>>368


371 :デフォルトの名無しさん:2006/12/11(月) 11:31:04
>>367
オマエのレスはなんの参考にもならんな

372 :372:2006/12/13(水) 16:34:32
流れを断ち切って申し訳ナス。

変数を引数して、変数名と値を出力する関数を作りたいです!
変数から、その変数名の文字列をとりだす方法ってありますか?

//ソース
void DebugOut(int value);
void main(){
int value = 100;
DebugOut(value);
}

//実行結果
value:100

って感じになる関数を作りたいんです!よろしくお願いします!


373 :デフォルトの名無しさん:2006/12/13(水) 17:00:58
printf("value:%d", value);じゃダメなの?

374 :デフォルトの名無しさん:2006/12/13(水) 17:03:41
そういうときはマクロのの出番。
#define DebugOut(variable) (fprintf(stderr, "%s : %d\n", #variable, (int)(variable)))

375 :372:2006/12/13(水) 17:53:50
<<373
それでできるんだろうけど、めんどくさかったんです!

<<374
すげー!できました。

お二方とも、ありがとうございました!

376 :デフォルトの名無しさん:2006/12/13(水) 20:14:54
OpenCVを使っているのですが、
画像を読み込んで、すべてのピクセルで、
getpixel(img,x,y,&r,&g,&b);
printf("座標(%d, %d)のRGB値は(%d, %d, %d)です.\n",x,y,r,g,b);
を繰り返したいのですが、
for文などの繰り返し文をどのように書けばいいのかわかりません。
よろしくお願いします。

377 :デフォルトの名無しさん:2006/12/13(水) 20:26:49
for
for

とか?

378 :デフォルトの名無しさん:2006/12/13(水) 20:27:41
あれ・・・スペース入んない・・・

379 :デフォルトの名無しさん:2006/12/13(水) 20:44:36
そうです!
自分で調べてみたらWidthなどを使っていました。
for文の書き方教えてほしいです。
とりあえず10*10でやってみようと思って、
int x,y;
for(y=0,y<=10,y++){
for(x=0,x<=10,x++){
getpixel(img,x,y,&r,&g,&b);
printf("座標(%d, %d)のRGB値は(%d, %d, %d)です.\n",x,y,r,g,b);
}
}
と書いてみたのですが、エラーで実行できませんでした。
おかしいところを指摘していただけたら嬉しいです。

380 :デフォルトの名無しさん:2006/12/13(水) 22:17:21
エラーメッセージを書いて

381 :379:2006/12/13(水) 22:49:19
全source
#include <stdio.h>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
IplImage *img=0;
int getpixel(IplImage *image, int x, int y, int *r, int *g, int *b){
*r =(uchar) image->imageData[y *image->widthStep+ x * image->nChannels + 2];
*g =(uchar) image->imageData[y *image->widthStep+ x * image->nChannels + 1];
*b =(uchar) image->imageData[y *image->widthStep+x * image->nChannels];
return 0;
}

int main( int argc, char** argv ){
int x=240,y=370;
int r,g,b;
char* filename = argc == 2 ? argv[1] : (char*)"image.bmp";
if( (img = cvLoadImage( filename, 1)) == 0 )
return -1;
cvNamedWindow("Image", 1);
for(y=0,y<=10,y++){
for(x=0,x<=10,x++){
getpixel(img,x,y,&r,&g,&b);
printf("座標(%d, %d)のRGB値は(%d, %d, %d)です.\n",x,y,r,g,b);
}
}
cvShowImage("Image", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Image");
return 0;
}

382 :379:2006/12/13(水) 22:55:27
error
expected `;'before')'token
could not convert `cvShowImage(((const char*)"Image"),((const CvArr*)((void*)img)))' to `bool'
expected `)'before';'token

383 :デフォルトの名無しさん:2006/12/13(水) 22:56:23
よろしくおねがいします^^;

384 :デフォルトの名無しさん:2006/12/14(木) 00:06:01
>>379
取り敢えず、forの書式を直せ。

385 :デフォルトの名無しさん:2006/12/14(木) 01:17:20
>>379
for(y=0,y<=10,y++)
これじゃ0から10までの11回実行されるよ。
0,1,2,3,4,5,6,7,8,9,10 <-11個あるよね?
for(y=0,y<10,y++)
イコール無しだと0から9までの10回ループ。
0,1,2,3,4,5,6,7,8,9 <--10個

386 :デフォルトの名無しさん:2006/12/14(木) 01:21:37
>>385
>384

387 :デフォルトの名無しさん:2006/12/14(木) 01:23:21
>385
もっと大きな問題があるだろ。
コピペしといて気づかないのか?

388 :デフォルトの名無しさん:2006/12/14(木) 01:23:38
それと、forの中は、,じゃなく;だよ。

389 :デフォルトの名無しさん:2006/12/14(木) 01:28:19
ファイルが20個あってその20個について同じ処理をしたいのですが、
ファイルをループさせるにはどうすれば良いのですか?




390 :385:2006/12/14(木) 01:33:04
おぉ。すっかり見落としてた。
みんな目ぇいいな。

391 :歩歩:2006/12/14(木) 01:33:20
誰かこの問題を解いてください。
9〜11行目を別の関数(関数名FuncDev)とし、修正しなさい。ただし、グローバル変数は使わないこと。
また、FuncDev内のローカル変数名は任意とする。
FuncDev関数は以下の定義とする。
int FuncDev(void); FuncDev関数の戻り値は、画面入力されたint型データとする。

1:#include<stdio.h>
2:void main (void);
3:void main (void)
4:{
5:int n1,n2;
6:int nt;
7:nt=0;
8:for(n1=0;n1<10;n1++){
9:printf("0-9の数値を入力:");
10:scanf("%d",&n2);
11:nt -=n2;
12:}
13:printf("結果は%dです。",nt);
14:}

よろしくお願いします。


392 :デフォルトの名無しさん:2006/12/14(木) 01:41:11
ファイル名は用意しなきゃならんような…
新規で作るなら連番でfor回せば良いけど。

393 :デフォルトの名無しさん:2006/12/14(木) 01:44:23
>389
1.ファイル名を連番で用意する
2.ファイル名の入った文字列の配列を用意する
>391
int FuncDev(void){
int n;
printf("0-9の数値を入力:");
scanf("%d", &n);
return n;}

void main(void) {
int n, nt;
nt = 0;
for(n=0; n<10; n++) nt -= FuncDev();
printf("結果は%dです。", nt);
}



394 :デフォルトの名無しさん:2006/12/14(木) 01:46:49
>>392
返答ありがとうございます。
ファイル名をtest1.txt test2.txt …… test20.txt としたら
for文でどう書いたらよいのですか?

395 :歩歩:2006/12/14(木) 01:48:06
ありがとうございます
すごい助かりました

396 :デフォルトの名無しさん:2006/12/14(木) 01:52:30
>>394
ファイルへの書き込みの仕方はわかる?
for(i=1;i<21;i++)の中で、ファイルへの書き込みを回すだけ。
書き込む式のファイル名の部分を、test[i]とすれば、中身が同じな連番ファイルの出来上がり。

397 :デフォルトの名無しさん:2006/12/14(木) 01:52:31
キーボードから読み込んだ整数n以下の素数をすべて求め1行に12個表示させなさい。
という問題がまったくわかりません。どなたか教えてください・・

398 :デフォルトの名無しさん:2006/12/14(木) 01:58:45
>394
for(i=0; i<20; i++) {
sprintf(filename, "test%d.txt", i+1);
fp = fopen(filename,

399 :デフォルトの名無しさん:2006/12/14(木) 01:59:10
>>397
1以上の整数nが素数であるかどうかは、
n%2,n%3,n%4,n%…とやっていって、
n%(n-1)まで繰り返して(本当はもっと少なくて良いんだけど)、
一度も余りが0にならなかったら(つまり一度も割り切れなければ)素数。
ここから考えていけば作れると思うよ。


400 :デフォルトの名無しさん:2006/12/14(木) 01:59:29
>>397
キーボードからの入力と画面への出力
http://www.media.osaka-cu.ac.jp/~k-abe/2001-JS-OSAKA-U/C.html
素数を求めるアルゴリズム
http://www.tsg.ne.jp/TT/tsg/c/mansaku/P01.html
さぁ作れ。

401 :デフォルトの名無しさん:2006/12/14(木) 02:00:12
>>396
返答ありがとうございます。まだできません。
私はファイルからデータを読み込んで処理をしたいのです。
for(i=1; i<=20; i++){
   fp = fopen(test[i] , "r");
処理
   fclose(fp);
}
これで良いのでしょうか?


402 :399:2006/12/14(木) 02:00:27
1以上ってorz
1より大きい整数ね・・・

403 :デフォルトの名無しさん:2006/12/14(木) 02:02:44
test[i].txtだね。




404 :デフォルトの名無しさん:2006/12/14(木) 02:05:44
>397
1行に12個表示するということは、12個表示したら改行するということ。
カウンタを用意して素数を表示するたびに+1して12になったら改行すればいい。

405 :デフォルトの名無しさん:2006/12/14(木) 02:09:20
>>401
あぁ、ごめん。
398さんの方法でお願い。
惑わせまくってる・・・ちょっと吊って来る。

406 :歩歩:2006/12/14(木) 02:10:25
何度もすいませんがお願いします。
このプログラムのfor文をwhile文に修正しなさい。
#include<stdio.h>
void main (void);
void main (void)
{
int n1,n2;
int nt;
nt=0;
for(n1=0;n1<10;n1++){
printf("0-9の数値を入力:");
scanf("%d",&n2);
nt -=n2;
}
printf("結果は%dです。",nt);
}

ほんとお願いします。

407 :デフォルトの名無しさん:2006/12/14(木) 02:14:02
>406
初期設定部をwhileの前に置く。
条件判定部をwhileの括弧内に入れる。
インクリメント部をwhileブロック内の最後に入れる。

408 :デフォルトの名無しさん:2006/12/14(木) 09:27:19
コマンドライン引数で与えられたファイルを開いて、そのファイルの最初の1文字を表示するプログラムを作りたいんですが、
あえて関数を使うとすると、次のどちらのプログラムの方がよいのでしょうか?
1.
#include <stdio.h>
#include <stdlib.h>
void f(char *filename);
int main(int argc, char *argv[])
{
if (argc != 2) {
puts("error");
exit(1);
}
f(argv[1]);
return 0;
}
void f(char *filename)
{
FILE *fp;
char ch;
if ((fp = fopen(filename, "r")) == NULL) {
puts("error");
exit(1);
}
if (!feof(fp))
ch = fgetc(fp);
fclose(fp);
putchar(ch);
}

409 :408:2006/12/14(木) 09:28:27
2.
#include <stdio.h>
#include <stdlib.h>
void f(FILE *fp);
int main(int argc, char *argv[])
{
FILE *fp;
if (argc != 2) {
puts("error");
exit(1);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
puts("error");
exit(1);
}
f(fp);
fclose(fp);
return 0;
}
void f(FILE *fp)
{
char ch;
if (!feof(fp))
ch = fgetc(fp);

putchar(ch);
}

410 :デフォルトの名無しさん:2006/12/14(木) 18:10:20
他のスレで見かけたんですけど、これ。
http://d.hatena.ne.jp/yaneurao/20061205
conitune以外で、forとwhileが等価でない箇所ってわかります?

411 :デフォルトの名無しさん:2006/12/14(木) 18:42:27
Windowsプログラミングって、C/WinAPIってことですか?

412 :デフォルトの名無しさん:2006/12/14(木) 20:31:22
基本的にはそれ。
場合によっては広義にMFCを使ったり.NET Frameworkを使ったものも含まれることがある。

413 :デフォルトの名無しさん:2006/12/14(木) 20:48:41
>>412
どうもです

414 :デフォルトの名無しさん:2006/12/14(木) 23:47:12
>>408
それだけではどちらともいえない。
それはさておき、fopen()直後のfeof()は無意味だ。

415 :デフォルトの名無しさん:2006/12/14(木) 23:47:54
>>408 私ならmainが小さくなる1だな。関数に分ける意味も出る。2だったらf関数はあまり意味が無い気がする。
#include <stdio.h>
void f(FILE *fp);
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
if (argc != 2) {
puts("error");
return 1;
}
if ((fp = fopen(argv[1], "r")) == NULL) {
puts("error");
return 1;
}
ch = fgetc(fp);
if (ch == EOF) {
return 1;
}
putchar(ch);
f(fp);
fclose(fp);
return 0;
}

416 :デフォルトの名無しさん:2006/12/16(土) 01:59:58
main関数でX=5と値を入れ、次にaaaという関数を呼び出し
そのaaaでもX=5だと認識させるにはどうすればいいのですか?

417 :デフォルトの名無しさん:2006/12/16(土) 02:14:11
kwsk無いから良くわかんないけどグローバル変数じゃね?

418 :デフォルトの名無しさん:2006/12/16(土) 11:40:48
Xを変更しないならそのまま渡してやればいいだろうし、変更したいならポインタで渡せばいい。

419 :デフォルトの名無しさん:2006/12/16(土) 18:46:31
BCB6でソフトウェアキーボードを作ってみようと思うんですが、
keybd_eventのことについて全く知識がなく、検索かけてみたんですが、
あまり詳しく載っている所がありません。
加えて、文字を打ち込みたい箇所をアクティブにする操作も分からないので、
どなたか詳しく紹介されてあるページか、操作そのものを教えていただけると幸いです。。。。

420 :デフォルトの名無しさん:2006/12/16(土) 19:01:14
Win32APIのスレへどうぞ

421 :デフォルトの名無しさん:2006/12/19(火) 15:15:01
ダイテル本のp.p.128練習問題4.30「switch文をネストされたif/else文に書き換える」
書いてみたんですがうまく動きません。アドバイス頂けますか?

/* switch構造をif/else文に書き換える(リスト4.5) */
#include<stdio.h>

main()
{
int grade;
int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0;

printf("試験の成績(A,B,C,D,F)を入力してください。\n");
printf("入力を終了するには、EOFをタイプしてください。\n");


422 :421続き:2006/12/19(火) 15:15:55
while ( ( grade = getchar() ) != EOF) {
if( ( grade = getchar() ) == 'A' || grade == 'a' )/* 成績がAまたはaの場合 */
++aCount;
else if( ( grade = getchar() ) == 'B' || grade == 'b' )/* 成績がBまたはbの場合 */
++bCount;
else if( ( grade = getchar() ) == 'C' || grade == 'c' )/* 成績がCまたはcの場合 */
++cCount;
else if( ( grade = getchar() ) == 'D' || grade == 'd' )/* 成績がDまたはdの場合 */
++dCount;
else if( ( grade = getchar() ) == 'F' || grade == 'f' )/* 成績がFまたはfの場合 */
++fCount;
else if( ( grade = getchar() ) == ' ' || grade == '\n' )/* 空白改行は無視 */
;
else {/* その他の文字が入力された場合 */
printf("成績を表す文字が正しくありません。\n");
printf("もう一度、入力して下さい。\n");
}
}

printf("\n各成績の集計結果:\n");
printf("A: %d\n", aCount);
printf("B: %d\n", bCount);
printf("C: %d\n", cCount);
printf("D: %d\n", dCount);
printf("F: %d\n", fCount);

return 0;
}

423 :デフォルトの名無しさん:2006/12/19(火) 16:12:36
>>421
元のswitch使った方がどういうものかは知らないが、
if,else ifに入るたびにgetcharしてるのは問題ないのか?

424 :421:2006/12/19(火) 16:47:19
>>423
仰るように、{}内のgetcharは不要のようでした
ありがとうございました

425 :デフォルトの名無しさん:2006/12/20(水) 04:12:41
test

426 :デフォルトの名無しさん:2006/12/23(土) 13:34:14
NaNを変数に直接代入できないでしょうか?
今は

a=1/0;

のようにやっているんですが、スマートな記述法があったらご教授ください。

427 :デフォルトの名無しさん:2006/12/23(土) 17:56:06
>>426
1/0ではNaNにならないだろ。
それにそのコードは警告を出すコンパイラが多いだろうし、
場合によっては実行時に0除算の段階で異常終了する。
1./0.でも無限大であってNaNにはならない。

「NaNを変数に直接代入」ってのがNaNのリテラルが欲しいっていう意味なら、
処理系によってはNANみたいに定義されていることもあるので、
使ってる処理系のmath.h辺りを探してみ。
最近の処理系ならあると思うが、無ければ例えばIEEE754形式のNaNの表現に従って、
仮数部を非0、指数部を255にしたビットパターンを作って自分で定義してやればいい。

428 :デフォルトの名無しさん:2006/12/24(日) 19:27:13
ついさっきボーランドのコンパイラとBCC Developerをインスコして、
とりあえず色んなサイト見つつプログラム書いてみた。
440の音源を指定した周波数にずらすには、何セントずらせばいいかってプログラムなんだけど、
"log10 SIGN error"って出て上手くいかない。
#include <stdio.h>
#include <math.h>

main()
{
double Hz,cent;
int S;
char MSB,LSB;
printf("何Hz? > ");
scanf("%d", &Hz);
cent = 1200 * log10(Hz / 440) / log10(2);
printf("cent = %d\n", cent);
}

何か俺がCの書き方を勘違いしてるからなんだろうけど、誰かエロいひとおせーて。

429 :デフォルトの名無しさん:2006/12/24(日) 19:53:52
>>428
Hzがdoubleなのにscanf()で%dを指定しているから、まともに値を拾うことができていない。
その値がたまたま負となったために件のエラーが起きたのだろう。
従って、scanf()の指定を%lfにでもすればいい。
勿論、printf()も%g辺りにしておかなければいけないのは言うまでもない。

430 :デフォルトの名無しさん:2006/12/24(日) 20:30:09
>>429
ありがとう。ああ、%dとかにも種類があるんだね。
精進するよ。

431 :デフォルトの名無しさん:2006/12/24(日) 21:52:55
何度もごめん。また行き詰まった。

#include <stdio.h>
#include <math.h>
main()
{
double Hz,cent,St;
int S;
char MSB,LSB;
printf("何Hz? > ");
scanf("%lf", &Hz);

cent = 1200 * log10(Hz / 440) / log10(2);
St = cent / ( 100 / 8192 ); // この行が問題っぽい
S = (int)((St >= 0) ? (St + 0.5) : (St - 0.5));

printf("S %d",S);
}
って書いたら、コンパイルは通るのに、実行して数値を入れると強制終了されちゃう。
というか、世間はイブだっていうのに俺はここで何してるんだろorz

432 :デフォルトの名無しさん:2006/12/24(日) 21:56:54
>>431
 100 / 8192  == 0
でゼロ除算
 100.0 / 8192.0にしる


433 :デフォルトの名無しさん:2006/12/24(日) 22:05:36
>>432
サンクス。


434 :デフォルトの名無しさん:2006/12/25(月) 17:09:12
CとC++って根本的に何がどう違うんですか?
最初は何となく、Cはコンソール、C++はそれにウィンドウ表示ができるものと思っていたんですが、それも違うようです。

あと、ウィンドウを表示するアプリケーション(API?)の作り方が詳しく解説されてるサイトってありませんか?
それとも素直にVC++に移行した方がいいんでしょうか…?


435 :デフォルトの名無しさん :2006/12/25(月) 22:57:35
CでもC++でもウィンドウの生成は出来る
違いはCで言う構造体のパワーアップしたクラスというものと
コンテナという便利な物やその他Cで書くとめんどくさいアルゴリズム等
を用意してくれてる。
でもCだろうとC++だろうと、精度の高いプログラムを作れるかどうかは
結局本人のスキル次第

436 :デフォルトの名無しさん:2006/12/25(月) 23:18:40
つーかプログラミング言語と言語製品の区別ぐらいしろよ。

437 :デフォルトの名無しさん:2006/12/25(月) 23:24:03
>>434
本買え。

438 :デフォルトの名無しさん:2006/12/26(火) 04:10:23
>>434
C を基にしつつ、オブジェクト指向言語として新しく作られたのが C++
C でもオブジェクト指向「っぽい」記述は出来るけれども、あくまで「っぽい」しか出来ない
435 が書いてる通り、C で Windows でウインドウを扱うプログラムは作れるし
C++ でコンソールアプリを作る事も出来る

WIN32API を使えば Windows でウインドウアプリを作る事は充分可能だが
ちょっと面倒だぞ
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
http://www.geocities.jp/ky_webid/win32c/index.html
この辺を通読して試せば、だいたいは分かるようになるが・・・

439 :デフォルトの名無しさん:2006/12/26(火) 09:44:52
超初心者です。
scanfの練習をしていたんですが、上手く動いてくれません。
手本によれば、100と入力すると100.000000が表示される筈なのですが
何を入力しても、0.000000が表示されます。orz
見比べて入力間違いは無いと思うのですが…

どこに間違いが有るか教えて下さい。お願いします。


#include <stdio.h>

int main(void)
{
double data;
scanf("%If",&data);/*入力*/
printf("%f\n",data);
return 0;
}

440 :デフォルトの名無しさん:2006/12/26(火) 09:53:30
%lf

441 :439:2006/12/26(火) 10:14:17
>>440

解決しました。私の使っているエディターで『I』、『l』の
表示が同じだったので気付きませんでした。orz

どうもありがとうございました!

442 :デフォルトの名無しさん:2006/12/26(火) 10:23:00
そういうのをきちんと区別できるフォントにしたほうがいいよ。

443 :デフォルトの名無しさん:2006/12/26(火) 10:35:49
lfはlong floatだっけ

444 :デフォルトの名無しさん:2006/12/26(火) 13:57:43
>>435-438
ありがとうございます。
理解できました。

ウインドウアプリは少し面倒そうですが、がんばってみます。

445 :デフォルトの名無しさん:2006/12/26(火) 19:34:08
これからC言語を始めたいと思うのですが、初心者はとりあえずこれ使っとけみたいなコンパイラってどれですか?
プログラミングはJavaを少しかじった程度なのでどれを選んだら良いのかさっぱり分かりませんorz

446 :デフォルトの名無しさん:2006/12/26(火) 19:41:58
むしろいくつも使っとけ。

447 :デフォルトの名無しさん:2006/12/26(火) 19:49:09
>>445
Visual C++ Express

448 :デフォルトの名無しさん:2006/12/26(火) 19:50:55
今は無料でいろいろ試せるからなあ

449 :デフォルトの名無しさん:2006/12/26(火) 19:51:14
コンパイラによって実行ファイルの動作が違うからいくつも試したほうがいい。

450 :445:2006/12/26(火) 20:00:11
素早い回答ありがとうございます。
とりあえず>>447を使ってみようと思います。

451 :デフォルトの名無しさん:2006/12/26(火) 21:13:53
コマンドプロンプトでソースファイルの行数を調べる方法ありますか?

wc -l ソースファイル名

上記のコマンドでUNIX(?)では調べられるらしいんですが・・・
windowsMeではだめでした。

452 :デフォルトの名無しさん:2006/12/26(火) 21:48:10
Cygwinをインストールすればwcも使える。
それはともかくとして、行数数えるプログラムくらい自分で作ってみろよ。

453 :デフォルトの名無しさん:2006/12/26(火) 21:53:18
>>452

あやや!そう言われればそうでした!
ナイスですw

454 :デフォルトの名無しさん:2006/12/26(火) 21:56:13
ってかC関係ないじゃん…
findコマンドを応用すれば出来るから自分で考えれ

455 :デフォルトの名無しさん:2006/12/26(火) 22:42:15
>>454
C以外の事でしたね。すみません

ところでこの手の質問はどこにしたらいいのでしょうか?
探して見ましたが余り適当な所が見当たらなかったです。


456 :デフォルトの名無しさん:2006/12/26(火) 23:27:56
>>455
wcはcの入門書の例題によく出てくるから、まあ範疇でいいじゃない。 
wc sed grep lsなど簡単なunixコマンドは大抵win32版がgnuその他のフリーウェアで 
転がっているから、ググレば拾えるよ。 

457 :デフォルトの名無しさん:2006/12/26(火) 23:58:43
wcを作りたいって話じゃなかったろ…
>>455
Win板で見つからないなら探し方が悪いだけ

458 :デフォルトの名無しさん:2006/12/27(水) 00:10:29
>>456

了解です。只、あれば使って見ようって発想だったんで。プログラム世界のガキ状態ですw

>>457

何かを作るというより、何かを利用して試したいという段階なんでこれ以上の思惑はないですよ。


只、wcと等価なプログラムを自分で作れっていいうその発想自体が刺激的で勉強になりました。
三四郎じょうたいですねw

459 :デフォルトの名無しさん:2006/12/27(水) 00:22:25
>>458
会社の新人に、wc -l相当を作らせた。
できてきたから今度は各行の桁数をカウントさせた。
#wcにはない機能だ。
「wcを自力で拡張した」気になって楽しかったそうだ。

460 :デフォルトの名無しさん:2006/12/27(水) 11:13:44
こんな感じ?
#include <stdio.h>
#define CR 0x0D
int main(int c,char **v)
{
FILE *fp=NULL;
int c=0;
unsigned long l=0;
if(!(fp=fopen(v[1])))
return -1;
while((c=fgetc(fp))!=EOF){
if(c==CR)
l++;
}
printf("Line : %lu",l);
return 0;
}

461 :デフォルトの名無しさん:2006/12/27(水) 15:29:45
質問です。
関数を二つ使うプログラムで変数を共有する方法を教えてください
大局変数で出来るかと思ったのですが、
同じ変数は使えるけど値が共有されてなかったみたいなので・・・

462 :デフォルトの名無しさん:2006/12/27(水) 15:39:39
グローバル変数でOK
もしかして別ファイルで変数定義をヘッダに入れて static つけたりしてないか?

463 :デフォルトの名無しさん:2006/12/27(水) 15:41:17
>>461
大局変数でできます。

464 :デフォルトの名無しさん:2006/12/27(水) 15:42:36
>>461
マルチスレッドとかはやってないよね?

465 :461:2006/12/27(水) 15:47:26
>>462-464
あれ・・できるんですかorz
すいませんもうちょっと見直してきます
staticやマルチスレッドがどういうものなのかも分からん初心者ですいません

466 :デフォルトの名無しさん:2006/12/27(水) 16:21:32
その変数を使用する関数より(ソース上で)先に宣言されてないとグローバルであっても使えない

467 :デフォルトの名無しさん:2006/12/27(水) 17:29:09
グローバルで宣言したのと同じ名前の変数を関数内で宣言してない?

468 :461:2006/12/27(水) 19:32:36
>>466-467 それはたぶん大丈夫だと思います
実は学校で出された課題で
f(関数fib)を読んだ数をカウントしろというものです

#include<stdio.h>

int t;

int fib(int n){
int fn;
t++;
printf("%d\n", time);
if(n == 1 || n == 2)fn = 1;
else fn = fib(n-1) + fib(n-2);
return fn;
}

int main(){
int n;
char buf[256];

printf("与えられたnに対してフィボナッチ数f(n)を返します。\nn: ");
fgets(buf, 256, stdin);
sscanf(buf, "%d", &n);
printf("f(%d) = %d, f は %d 回呼ばれました。", n, fib(n), t);
}

469 :デフォルトの名無しさん:2006/12/27(水) 19:47:58
>>468
それ、何を持って違うと判断した?
tはグローバル変数だから、0に初期化されてるが
printf の引数は右から積むから、printfにはtが0のままセットされるよ
関数fib()を呼び出すのはその後だから、違うように見える

470 :デフォルトの名無しさん:2006/12/27(水) 19:52:04
>>469
おおおお!ありがとうございます!!
順番のことなんてまったく思いつきませんでした
printfは右からだったなんてまったく知りませんでしたorz
おかげで動きました!!


471 :デフォルトの名無しさん:2006/12/27(水) 19:54:51
いわゆる副作用ってやつだ。
関数の引数は評価の順番に依存してはいけない

472 :デフォルトの名無しさん:2006/12/27(水) 22:12:29
プログラムでそのプログラム中で使われる変数名や関数名を記憶している領域から
任意の変数名や関数名を取り出して表示することって出来ますか?

473 :デフォルトの名無しさん:2006/12/27(水) 22:30:01
>>472
デバッグオプション付きでコンパイル + デバッガ

474 :デフォルトの名無しさん:2006/12/27(水) 22:44:26
>>473
そっか、確かにそういう作業ってデバッグだと必要ですよね、ありがとうございます
まずは使えるようにするところからか…

475 :デフォルトの名無しさん:2006/12/28(木) 01:05:53
>>460
色々なってない。特に酷いのはCRだ。

476 :デフォルトの名無しさん:2006/12/28(木) 13:01:04
すいません。初めての書き込みです。プログラム初心者、というか何も勉強していないのですが、
このような問題を解決しなければならなくなってしまいました。どうか教えてください。課題を教えてくださるスレッド(?)が書き込みできなくなっていたので、
こちらに書き込ませていただきました。
【質問テンプレ】
[1] 授業単元:基礎情報処理
[2] 問題文:縦100横100のマス目(点)に分けられた紙の各点が、白と黒に塗り分けられたものを考える。この中に、下にある様な黒い点で囲まれた図形が1つだけある。図形は必ず、黒い点で囲まれており、
内部は白い点で埋め尽くされている。この「囲まれている」とは、各黒い点の上下左右および8つの点のどれかが黒い点となっているものと考えよう。
□□□□□□□□□□
□□■■■■■■□□
□■□□□□■□□□
□□■□□□□■□□
□□■□□□□■□□
□□■■■■■■□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
この図形は整数値の2次元配列(例えばC言語ならa[y,x])で表されている。x軸は左から右、y軸は上からしたとするので、a[1,1]は一番左上の点になる。この配列はプログラムに入る前に何らかの方法で、白い点は0、黒い点は1になっているものとする。
さて、図形の面積、つまり黒い点で囲まれた内部の「白い点」の数を数えるプログラムを考えよう。ただし図形は必ず紙の上に1つだけ存在し、また必ず紙の端から点1つ以上ずつ少し離れた位置にあるとする(つまり黒い点は紙の上下左右の端には存在しない)。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: すみません、よくわかりません
 [3.3] 言語: なんでもかまいません。
[4] 期限: 2007年1月5日0時まで
[5] その他の制限:まだ何も習っていません。具体的に回答を提示してくれると助かります。


477 :デフォルトの名無しさん:2006/12/28(木) 13:17:17
無関係なスレにマルチするような馬鹿に教える気はない

478 :デフォルトの名無しさん:2006/12/28(木) 13:26:09
まずはローカルマナーだな

479 :デフォルトの名無しさん:2006/12/28(木) 16:02:13
生瀬智也です

480 :デフォルトの名無しさん:2006/12/28(木) 22:36:47
「メモリのオーバーレイ」
という技法はC言語の範囲で実現可能ですか?


昔はゲーム等でよく使われてた方法みたいですが

481 :デフォルトの名無しさん:2006/12/28(木) 22:43:12
できるけど、今は仮想記憶当たり前だから使わんよ

482 :デフォルトの名無しさん:2006/12/28(木) 22:59:07
確かにメモリが厳しかった頃、関数ポインタを求めて、そこに直接
別の関数をロードするなど、今からすれば考えられないような
汚いテクニックが当たり前のように使われていた時代がある。

家庭用ゲーム機には仮想記憶がないので、未だにオーバーレイが
使われている。

483 :デフォルトの名無しさん:2006/12/29(金) 03:01:24
メモリロックとか言うやつだっけ?

131 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)