C/C++の宿題を片付けます 104代目at TECH
C/C++の宿題を片付けます 104代目 - 暇つぶし2ch75: ◆TQgM1tAAxo
08/02/08 22:24:28
>>59
[エラー報告]
58で質問した者です!
即対応していただきありがとうございます。
しかし、その記述をいれてみたところエラーが生じてしまい、またいきづまってしまいました。
そのエラー内容を載せます。
「error C2018:文字'0x81'は認識できません。
error C2018:文字'0x40'は認識できません。
error C2552:'g_tp':初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2039:'x':7CSize'のメンバではありません。」
主に1,2番目と同様のエラーが20個くらい出ています(´・ω・`)なんだかよく分かりません。
一応また質問テンプレ載せておきます。
【質問】
[1] 授業単元:プログラミング
[2] 問題文: ウインドウ中でマウスクリックしたときにビットマップキャラクターが
クリック場所に動いていくようなアニメーションを作成せよ。このときの
OnLButtonUp(UINT nFlags, CPoint point)とOnTimer(UINT nIDEvent) に書くべき記述は?

*ちなみにタイマー識別IDはID1とする

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VC++6.0 .NET
 [3.3] 言語: C++
[4] 期限: 2008年2月10日11:59まで
[5] その他の制限: とくになし

なんどもすいません。
 

76:デフォルトの名無しさん
08/02/08 22:36:21
>>75
全角スペースを使うな

77:デフォルトの名無しさん
08/02/08 22:37:13
THEバカス

78: ◆TQgM1tAAxo
08/02/08 23:00:19
>>76
どうもすいません。
全角を消した結果でたエラーを載せます!

「error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2065: 'CLIENT_SIZE' : 定義されていない識別子です。
error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。
error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。
error C3861: 'CLIENT_SIZE': 識別子は、引数依存の照合を使用しても見つかりません。
error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2065: 'CLIENT_SIZE' : 定義されていない識別子です。
error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。
error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。
error C3861: 'CLIENT_SIZE': 識別子は、引数依存の照合を使用しても見つかりません。」

ちなみに、すべてCPoint g_tp = {CLIENT_SIZE.x / 2, CLIENT_SIZE.y / 2};
の文でエラーがでています!












79:デフォルトの名無しさん
08/02/08 23:28:18
>>78
>>59 はコードの一部だから、あれだけでは動かないよ。
そもそも問題は、「~アニメーションを作成せよ」なのか
「~に書くべき記述を答えよ」なのか、どちらだ?

80:デフォルトの名無しさん
08/02/08 23:34:51
>>78
まさかとは思うが、>59の一行目をコピーしていないって落ちじゃないよな?

81: ◆TQgM1tAAxo
08/02/08 23:53:28
>>80
1行目を記述してもエラーがでてしまいます(´・ω・`)

ちょっとエラー内容がかわったのでまた載せます!

「error C2552: 'CLIENT_SIZE' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
'CPoint' : ベースを含む型はアグリゲートではありません。
error C2039: 'x' : 'CSize' のメンバではありません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atltypes.h(26) : 'CSize' の宣言を確認してください。
error C2039: 'y' : 'CSize' のメンバではありません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atltypes.h(26) : 'CSize' の宣言を確認してください。
error C2552: 'CLIENT_SIZE' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2039: 'x' : 'CSize' のメンバではありません。
error C2039: 'y' : 'CSize' のメンバではありません。」

ちなみに、課題は授業で作ったMFCアニメーションデータを改変し、マウスクリックで
キャラクターを自由に移動させるようにしろというものです。
なので、onDrawなどの関数やその他のものはそろっています。
キャラクターを上下左右に動かす方法は分かるのですが、
クリックされた場所に動かすという記述方法が分からなくて困っています(´・ω・`)


82:デフォルトの名無しさん
08/02/08 23:56:29
まさかとは思うが、お前馬鹿だろw

83: ◆TQgM1tAAxo
08/02/09 00:04:35
>>82
下にキャラクターが進むときはOnTimerに
y+=10;(yはキャラクターのいるy座標値)
と記述すればうごくのですが、クリックしたとこにうごかすのがどうしてもできなくて・・(´・ω・`)
スムーズに動かず、いっきにクリックした位置に移動してしまったりの失敗の繰り返しです(´・ω・`)

どうしたら良いでしょうか?
ほんと頭悪くてすいません(´・ω・`)

84:デフォルトの名無しさん
08/02/09 00:04:57
>>81
キャラクターをクリックされた場所に動かすという記述方法は分かるのですが、
onDrawなどの関数やその他のものが分からなくて困っています(´・ω・`)

85: ◆TQgM1tAAxo
08/02/09 00:09:43
>>84
どういうことですか?(´・ω・`)
どうしたら良いのでしょうか?(´・ω・`)

86:デフォルトの名無しさん
08/02/09 00:13:45
一挙手一投足、全て教わらないとできないなら、最早他人から教えてもらう必要なんてないだろ。

87:デフォルトの名無しさん
08/02/09 00:18:33
>>50
③Ackermann関数
キャッシュのやつを作ってみたので一応添付
URLリンク(kansai2channeler.hp.infoseek.co.jp)

ショートカットを加えると確保領域が少なくすむのは何故なんだろ・・・・

88:デフォルトの名無しさん
08/02/09 02:28:13
昨日59を書いたものだが、まさかこんな事になってるとは…
OnLButtonUpとOnTimerに書くべき記述を答えれば良いだけじゃなかったのか
DELAYの値をもっと大きくしてみろ
もしくは
int OnTimer(UINT nIDEvent)
{
if (TIMER_ID == nIDEvent)
{
//X軸方向の移動
if (g_cp.x < g_tp.x) {g_cp.x++;}
else if (g_cp.x > g_tp.x) {g_cp.x--;}

//Y軸方向の移動
if (g_cp.y < g_tp.y) {g_cp.y++;}
else if (g_cp.y > g_tp.y) {g_cp.y++;}
}
}
で代替。コピペじゃなくて自分で打つように
あと、タイマーイベントの間隔を遅めにしてくれ
ちなみに、cp=キャラクターポジション、tp=ターゲットポジションの略ね

OnTimerとかってMFCのパーツだよな?使ってないからサッパリ思い出せんw

89:デフォルトの名無しさん
08/02/09 02:46:43
>>88
それを>>58が理解できると思うか?
またエラーが出るって言ってくるのがオチだろ。

90: ◆TQgM1tAAxo
08/02/09 05:43:14
>>88
丁寧にありがとうございます!でも、もう一回考えて、ちょっと違う方法ですが自分で解決しました。
どうもありがとうございます

>>89
考えたらできたわ

91:デフォルトの名無しさん
08/02/09 09:38:03
最初から考えろ馬鹿。

92:デフォルトの名無しさん
08/02/09 12:29:51
すいません。 教えて下さい。

0x1234を0x123fにするには (28) と (29) を行う。その演算子の
記号は (30) である。 また、上位1バイトを0にし、下位1バイトをそのままに
するには、 (31) と (32) を行う。その演算子の記号は (33) である。
ビットを反転するには、 (34) と排他的論理和を行うか、ビット演算子の反転
を使用する。そのビット演算子(反転)の記号は (35) である。

(28)の解答群
ア 0x0000 イ 0x000F ウ 0x1230 エ 0xfff0 オ 0xffff

(29)、(32)の解答群
ア 論理和 イ 論理積 ウ 排他的論理和 エ 否定論理和 オ 否定論理積

(30)、(33)、(35)の解答群
ア & イ | ウ ^ エ ~ オ !

(31)の解答群
ア 0x0001 イ 0x000f ウ 0x00ff エ 0xf000 オ 0xff00

(34)の解答群
ア 0x0000 イ 0x0001 ウ 0x1111 エ 0x1010 オ 0xffff



93:デフォルトの名無しさん
08/02/09 12:30:33
キャスト演算子は、式の結果を一時的に指定したデータ型に変更するものである。例
えば、double型の変数aの小数点以下を切り捨てるには、 (36) と記述する。
キャスト演算子は (37) であり、算術演算子より優先順位が (38)
ため、int型の変数a、bの除算を実数の精度で計算し、その結果をdouble型の変数c
に格納する記述は (39) である。
また、キャスト変換はポインタにも有効であり、int型の配列の内容を1バイトずつ
参照することができる。
なお、次のプログラムの出力結果は処理系によって異なる場合があるが、本問では考
慮しないものとする。

#include <stdio.h>
main()
{
int a[] = {0x01020304, 0x05060708};
int i;
char *p;

p = (40) ;
for (i = 1;i <= 8; i++)
printf(゙%x゙,*p++);
}


94:デフォルトの名無しさん
08/02/09 12:31:51

(36)の解答群
ア int a イ int (a) ウ (int a) エ (int) a オ a(int)
(37)の解答群
ア 単項演算子 イ 関係演算子 ウ 比較演算子 エ 論理演算子 オ 条件演算子
(38)の解答群
ア 高い イ 低い
(39)の解答群
ア c = a / b イ (double)c = a / b ウ c = (double)a / b エ c = (double)(a / b)
(40)の解答群
ア char a イ char *a ウ (char) a エ (char) *a オ (char *) a


95:デフォルトの名無しさん
08/02/09 12:32:22
文が見づらくてすいません。m(_ _)m

どなたか解答をお願いいたします。


96:デフォルトの名無しさん
08/02/09 12:35:15
>>95
スレリンク(tech板:808番)

97:デフォルトの名無しさん
08/02/09 12:58:33
すいませんが、>>74に答えていただけませんか?

98:デフォルトの名無しさん
08/02/09 13:17:07
>>97
・yearとmonthを入力できるようにする。
・1日の曜日を求める。

99:デフォルトの名無しさん
08/02/09 13:29:41
>>98
ありがとうございます。えっと、つまり…どの部分をどう変えればいいんでしょうか…orz

100:デフォルトの名無しさん
08/02/09 13:35:24
>>99
int year = 2008;
int month = 2;
int first_dow = 5; /* 1日は金曜日 */
を変えればいい。
year, monthはそれぞれscanf()か何かで入力すればいいし、first_dowは問題に書いてある通り。
>(課題では,前回のプログラムを使って1日の曜日を計算する)
つまり、「前回のプログラム」がないと作れない。

101:デフォルトの名無しさん
08/02/09 13:37:59
>>100の優しさに発情した

102:デフォルトの名無しさん
08/02/09 13:55:43
ありがとうございます。
すいません これもできれば...

問?
関数定義に関する次の記述中の()に入れる適切な字句を解答群の中か
ら選べ。なお、同じ解答を複数回使用してもよい。

関数の基本構成は次のようになっている。

記憶クラス 型 関数名(引数の型と名前)
{
宣言と文
}

関数の記憶クラスには、その関数をほかのモジュールから参照できる (1) 、
その関数をほかのモジュールから参照できない (2) があり、特に指定しない場
合は (3) になる。
関数の型は、その関数が (4) 文で戻すデータの型である。また、特殊な型と
して (5) があり、戻り値をもたないことを示す。型が (6) の戻り値
を使用する場合には、省略することができる。
関数でデータのやりとりをするには引数を用いる。関数の定義側の変数を
(7) と呼び、この関数を呼びだす側の引数を (8) と呼ぶ。

(1)~(3)、(5) (6)の解答群
ア char イ extern ウ int エ static オ void
(4)の解答群
ア break イ continue ウ exit エ goto オ return
(7) (8)の解答群
ア 定数 イ 仮引数 ウ 元引数 エ 実引数 オ ポインタ変数


103:デフォルトの名無しさん
08/02/09 14:04:51
>>102
(1)extern
(2)static
(3)extern
(4)return
(5)void
(6)int
(7)仮引数
(8)実引数

104:デフォルトの名無しさん
08/02/09 14:06:27
問?
ファイル入出力に関する次の記述の正誤を、解答群の中から選べ。

(9) fopen関数のエラー時の戻り値は NULL である。
(10) ファイルのオープンモードを ゙a゙ (追加書き込み)と指定した場合、ファイルが存
在しない場合はエラーとなる。
(11) プログラム中に fopen関数を使用した場合、 fclose関数を記述していないとコ
ンパイルエラーが発生する。
(12) fscanf関数のエラー時の戻り値は NULL である。
(13) fgets関数のファイル終了時の戻り値は EOF である。
(14) fgets関数は読み込んだ文字列の最後に ゙\0゙ を付加する。
(15) fgetc関数及びgetc関数は、ファイルから1文字ずつ読み込む。
(16) ungetc関数はファイルから読み込んだ文字を、まだ読んでいなかったものとし
て扱う。

解答群
ア 正しい イ 誤り



105:デフォルトの名無しさん
08/02/09 14:08:55
どなたか 問7 問8の解答を教えていただけると ありがたいのですが..



106:デフォルトの名無しさん
08/02/09 14:11:01
>>104
(9) ○ (10) (多分)× (11) × (12) (0がNULLと同等に扱えるから)○
(13) × (14) ○ (15) ○ (16) (なんか表現が微妙だが)○

107:デフォルトの名無しさん
08/02/09 14:15:39
>>106
(12) について
fscanf は入力エラーのとき EOF を返す

108:デフォルトの名無しさん
08/02/09 14:15:48
ungetcはストリームに戻すというイメージがある

109:デフォルトの名無しさん
08/02/09 14:36:44
>>100
ありがとうございます!!本当に助かりました!

110:デフォルトの名無しさん
08/02/09 14:40:35
{
*buffer = '0' + ((char)(data >> 8) & 0x0F);
if(((data >> 8) & 0x0F) > 9)
*buffer += 7;
buffer++;
*buffer = '0' + ((char)(data>>4) & 0x0F);
if(((data>>4) & 0x0F) > 9)
*buffer += 7;
*buffer++;
*buffer = '0' + ((char)data & 0x0F);
if((data & 0x0F) > 9)
*buffer += 7;
}
これは、10ビットバイナリ値を3桁の16進数へ変換するらしいのですが
これを4桁の10進数にするには、どのように書けば良いのでしょうか。
cは全くの初心者で、本来はで基礎から勉強すれば良いのですが、すぐに
この部分だけのソースが欲しいのです。だれか、お助けください。

111:デフォルトの名無しさん
08/02/09 14:46:49
>>110
sprintf(buffer, "%04d", data);

112:110
08/02/09 14:55:51
>>111
ありがとうございます。こんな早く対応して頂けるなんて感謝です。
おかげさまで4桁の数字が表示されました。

ただ、プログラム全体としては、桁が増えた分動かなくなってしまいました。
もう少し、頑張ってみます。
今後とも、どうぞよろしくお願いします。

113:デフォルトの名無しさん
08/02/09 14:55:58
>>110
{
int i;
for (i = 12; i >= 0; i -= 4)
*buffer++ = "0123456789ABCDEF"[(data >> i) & 15];
}

114:デフォルトの名無しさん
08/02/09 14:56:41
問7

プログラムの説明

このプログラムの目的は、コマンドラインより入力されたビット列を15ビットごとに
パリティビットを付加し、16進数で表示することである。
コマンドラインから渡される引数には、ビット列のほかに偶数パリティ、奇数パリティ
を選択するパラメータがある。
ビット列は255ビット以内の任意の長さであり、15ビットの倍数に満たない場合は、
足りないビットには0を挿入する。
なお、コマンドラインの入力に間違いはないものとする。

コマンドラインの書式

プログラム△ビット列(任意の長さ)△パリティの指定



115:デフォルトの名無しさん
08/02/09 14:59:55
パリティの指定
0 偶数パリティ
1 奇数パリティ

※「△」は1文字以上の空白文字を示す。

コマンドラインの例 (プログラム名が「toi7」の場合)
toi7 0101001100101010001010010010101011010 0

処理手順
① コマンドラインより渡されたビット列を配列にコピーする。
② 配列に格納された文字列を、先頭から1文字ずつ取り出し以下の処理を行う。
・取り出した文字(ビット)の1の個数をカウントする。
・15ビットの数値に変換するために、変換後の数値を左に1ビットシフトし、数値
に変換した文字(ビット)とのビット演算を行う。
③15文字ごとに以下の処理を行う。
・変換後の数値を左に1ビットシフトする。なお、ビット列が15文字に満たない場合は、足りない分左にシフトする。
・カウントした1の個数から、パリティビットを付加する。偶数パリティであれば
1の個数が偶数になるように、奇数パリティであれば奇数になるようにパリティ
ビットを付加する。
・パリティビットを付加した変換後の数値を16進数で表示する。


116:110
08/02/09 15:08:17
>>113
ありがとうございます。 4桁の数字が、ちゃんと表示されました。
ただ、10進数の表示をしたいのですが英字まで表示されてしまいます。
引き続き、アドバイス頂けた助かります。
ほんと、すみません。

117:デフォルトの名無しさん
08/02/09 15:18:50
実行結果 (プログラム名が「toi7」の場合)
C:\>toi7 0101001100101010001010010010101010010 0
532B
1495
A401
※「C:\>」はコマンドプロンプトを示す。



118:デフォルトの名無しさん
08/02/09 16:22:36
>>117
#include <stdio.h>

int str2bit(char *str, char *pal, int , int);

int main(int argc, char **argv)
{
int i = 0;
int cnt = 0;
int hyoji = 0;
int res = 0;
char array[256];

memset(array, 0, sizeof(array));
memcpy(array, argv[1], strlen(argv[1]));

for ( i = 0 ; i < strlen(array); i++ ) {
if ( i && !(i % 15) ) { /* 区切り */
/* bit化 */
res = str2bit(array, argv[2]
, hyoji * 15, strlen(array));
fprintf(stdout, "0x%4x\n", res);
hyoji++;
}
}
res = str2bit(array, argv[2], hyoji * 15, strlen(array));
fprintf(stdout, "0x%4x\n", res);

return 0;
}


119:デフォルトの名無しさん
08/02/09 16:24:15
>>118の続き
int str2bit(char *str, char *pal, int cur, int max)
{
int res = 0;
int i = 0;
int cnt =0;
char t_byte[16+1];

memset(t_byte, 0, sizeof(t_byte));

for ( i = 0; i < 15; i++ ) {
t_byte[i] = ( cur + i >= max ) ? '0' : str[cur + i];
if ( t_byte[i] == '1' ) {
cnt++;
res += 1;
}
res <<= 1;
}

if ( *pal == '0' ) { /* 偶数パリティ */
if ( cnt % 2 )
res++;
} else { /* 奇数パリティ */
if ( !(cnt % 2 ) )
res++;
}
return res;
}
できたから載せただけ。

120:デフォルトの名無しさん
08/02/09 16:29:45
>>119
特定しましたよ。

121:デフォルトの名無しさん
08/02/09 16:34:26
>>120
何を特定できた??

122:デフォルトの名無しさん
08/02/09 16:36:01
>>115 入力チェックは一切していない
#include<stdio.h>

void encode(char *bits, int parity)
{
unsigned short value=0;
int i, bitnum=0;

for(i=0;bits[i];i++)
{
value=(value<<1)+bits[i]-'0';
bitnum+=value&1;
if((i+1)%15==0)
{
printf("%04X\n", (value<<1)+((bitnum+parity)&1));
value=0;
bitnum=0;
}
}
if((i%15))
{
value<<=(15-(i%15));
printf("%04X\n", (value<<1)+((bitnum+parity)&1));
}
}

int main(int argc, char *argv[])
{
if(argc==3) encode(argv[1], atoi(argv[2]));

return 0;
}

123:デフォルトの名無しさん
08/02/09 17:43:15
[1] 授業単元:プログラミング入門演習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: (2月12日まで)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

プログラムの一部 URLリンク(kansai2channeler.hp.infoseek.co.jp)

コンパイルできてもセグメントエラーorz どなたかお願いします。



124:110
08/02/09 17:59:53
{
int i;
for (i = 12; i >= 0; i -= 4)
*buffer++ = "0123456789"[(data >> i) & 9];
}

アドバイスいただいた、プログラムを10進数表示させようと上のように書き換えたのですが
このように書くと0189しか表示されません。
こんな簡単な奴ふざけるなと思わせてしまって申し訳ないのですが
どうか、教えていただけないのでしょうか。
初心者のスレかくのが本来ですが、マルチぽくなるのでこのまますみません。

125:デフォルトの名無しさん
08/02/09 18:14:58
>>124
data>>iで済むのは16進数だからであって、
10進数で同じ方法は考えないほうがいい。

126:デフォルトの名無しさん
08/02/09 18:20:09
>>124
{
unsigned tmp;
for(tmp=1000;tmp>0;tmp/=10)
{
*buffer++=((data/tmp)%10)+'0';
}
}

127:110
08/02/09 18:37:44
>>125>>126

アドバイスありがとうございます。無事に動作するようになりました。
ASMを勉強していてASMでの書式など有る程度把握出来てきたのですが
c言語は、書式がまるっきり分からず困っていました。
c言語は生活に十分必要な物だと思いますのでこれを機に勉強をしようとおもいます。

とても困っていたので、ほんと感謝の気持ちでいっぱいです。
ありがとうございました。

128:デフォルトの名無しさん
08/02/09 19:32:03
>>117の続き

プログラム

/*パリティビットの生成*/
#include <stdio.h>
#include <string.h>

main(int argc,char *argv[])
{
char dum[256];
int num,cnt;
int i = 0,j;

(41) ;
while(dum[i] != `\0`){
num = cnt = 0; for(j=0;j<15 && dum[i] != `\0`;j++){
(42) ;
num <<= 1;
(43);
}
for (;j < 16; j++)
num <<= 1;
if ( (44) == (1 ー ( (45) ー '0')))
num |= 1;
printf("%x\n",num);
}
}


129:デフォルトの名無しさん
08/02/09 19:44:13
>>128

すいませんm(_ _)m

しばらく書き込み出来なかったもんで..

上記の(41)~(45)を答えるんですが..

(41)の解答群
ア dum = argv イ dum = argv[1] ウ strcpy(dum,argv) エ strcpy(dum,argv[1])
(42)の解答群
ア cnt += 1 イ cnt += dum[i] + 1 ウ cnt += dum[i] - `0' エ cnt += dum[i] + `1'
(43)の解答群
ア num |= dum[i] - `0' イ num |= dum[i++] - `0' ウ num &= dum[i] - `0' エ num &= dum[i++] - `0'
(44)の解答群
ア cnt イ cnt / 2 ウ cnt % 2 エ cnt * 2
(45)の解答群
ア argv[1] イ *argv[1] ウ argv[2] エ *argv[2]

です

130:デフォルトの名無しさん
08/02/09 21:05:59
[1] 授業単元:プログラミング
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)

input.txt: URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:2月13日正午
[5] その他の制限:

計算式の記述が分かり辛いですが、どうぞよろしくお願いいたします。

131:デフォルトの名無しさん
08/02/09 22:31:45
>>130
URLリンク(kansai2channeler.hp.infoseek.co.jp)

132:デフォルトの名無しさん
08/02/10 01:19:11
>>131
ありがとうございます!

133:デフォルトの名無しさん
08/02/10 02:10:32
>>114 >>115 >>117
プログラム >>128
解答群 >>129

すいませんm(_ _)m どなたか解答をお願いします。



134:デフォルトの名無しさん
08/02/10 03:15:38
(42):ウ
(43):イ
(44):ウ
(45):ウ

但し(41)の答えが何なのか、これが分らない

135:デフォルトの名無しさん
08/02/10 03:19:59
ごめん、(45)はエだ。

但し(41)の答えがn(ry
自分でやってくれ

136:デフォルトの名無しさん
08/02/10 03:21:16
>>134
エ じゃないかな

137:デフォルトの名無しさん
08/02/10 04:10:18
>>136
一つくらい自分でやらせようとしてたんだが…


138:デフォルトの名無しさん
08/02/10 04:12:39
入門書に確実に載ってる問題を質問するようなヤツが考えるわけもない
ググってもすぐ分かるというのに

139:デフォルトの名無しさん
08/02/10 10:34:58
すいませんm(_ _)m ありがとうございます。

(41)エ
(42)ウ
(43)イ
(44)ウ
(45)エ


これでOKでしょうか?



140:デフォルトの名無しさん
08/02/10 11:03:41
#include <stdio.h>
main()
{
char x[3][7] = {"first","second","third"};
char *z[3] = {"first","second","third"};
char **p;


p = z;
p++;
① printf("%c\n",**p);
② printf("%s\n",*p+1);
③ printf("%s\n",*(p+1)+1);

これだと xの要素数は21個で ポインタ配列zの要素数は19個
①②③のprintfの表示は ①がs ②がecond ③がhird
でいいですかね?

141:デフォルトの名無しさん
08/02/10 11:35:41
>>123
これで合ってるのかな。srandがよくわからない。。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>140
合ってる


142:デフォルトの名無しさん
08/02/10 13:18:18
>ポインタ配列zの要素数は19個
3個だろ

143:54
08/02/10 15:24:52
答えてくれたみなさんありがとうございます!!
めっちゃかんしゃです。

144:デフォルトの名無しさん
08/02/10 15:38:46
度々大変すいませんm(_ _)m どなたか解答をお願いします。
プログラム

/*語尾変換プログラム*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int f_read(void);
int w_cnv(int ln);

#define CHRSIZE sizeof(char)

char str[20][(254 + 2)* CHRSIZE * 2 + sizeof(char)];

main()
{
int ln;
int i;
int cnt;

ln = f_read();
cnt = w_cnv(ln);
for(i=0;i<ln;i++) printf("%s",str[i]);
printf("\n文章中を%d件変換し、\n",cnt);
printf("文末を%d件付加しました。\n",ln);
}
/*ファイル入力*/
int f_read(void)
{
FILE *fp;

145:デフォルトの名無しさん
08/02/10 15:39:16
続き
char buf[256];
int cnt = 0;

if((fp = fopen("word.dat","r")) == NULL){
printf("入力ファイルがオープンできません\n");
exit(1);
}
while( (46) != NULL)
(47) ;
fclose(fp);
return(cnt);
}
/*変換*/
int w_cnv(int ln)
{
int i;
int cnt = 0;
char w_str[256];

for(i=0;i<ln;i++){
while( (48) != NULL){
strcpy(w_str,strstr(str[i],"な") + CHRSIZE * 2);
strcpy(strstr(str[i],"な"),"にゃ");
(49) ;
cnt++;
}
strcpy( (50) ,"にゃ\n");
}
return(cnt);
}

146:デフォルトの名無しさん
08/02/10 15:40:31
(46)の解答群
ア fgets(buf,255,fp) イ fgets(fp,buf,255) ウ fscanf("%s",buf,fp) エ fscanf(fp,"%s",buf)

(47)の解答群
ア strcpy(buf,str[cnt++]) イ strcpy(buf,str[cnt+1],buf) ウ strcpy(str[cnt++],buf) エ strcpy(str[cnt+1],buf)

(48)の解答群
ア strcat(str[i],"な") イ strchr(str[i],"な") ウ strcpy(str[i],"な") エ strstr(str[i],"な")

(49)の解答群
ア strcat(w_str,str[i]) イ strcat(str[i],w_str) ウ strcpy(w_str,str[i]) エ strcpy(str[i],w_str)

(50)の解答群
ア strchr(str[i],`\0') イ strchr(str[i],`\n') ウ strchr(w_str[i],`\0') エ strchr(w_str[i],`\n')

文中の「な」を「にゃ」に変換し、さらに文末の語尾に「にゃ」を付加して表示するプログラムです
(46)~(50)の答はどうなりますかね?

147:デフォルトの名無しさん
08/02/10 16:16:12
>>146
うざいからうpロダ使ってくれないかな。

148:デフォルトの名無しさん
08/02/10 17:03:18
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]
環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:2月13日
[5] その他の制限:

前回は本当にありがとうございました。
今回もよろしくお願いいたします。


149:デフォルトの名無しさん
08/02/10 17:42:59
>>148
URLリンク(kansai2channeler.hp.infoseek.co.jp)

150:デフォルトの名無しさん
08/02/10 18:09:40
[1] 授業単元:パターン認識
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]
環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2月13日
[5] その他の制限:
動的計画法についての課題です。問題が図表付きなので圧縮しています。

151:デフォルトの名無しさん
08/02/10 20:25:53
>>149
ありがとうございました。

152:デフォルトの名無しさん
08/02/10 21:05:23
[1] 授業単元:プログラミング
[2] 問題文:入力された文字列を逆に並べて表示せよ(例:TOKYO→OYKOT)
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition
 [3.3] 言語:C
[4] 期限:2008年2月13日8:00まで
[5] その他の制限:#include <stdio.h>で使える命令のみ
            一次元配列のみ

153:デフォルトの名無しさん
08/02/10 21:10:05
[1]プログラミング
[2]時計の針2本がなす角(中学入試の算数問題でよく出題される問題)
問:キーボード上から時と分を入力し、その時間とそれを指す長針・短針
のなす角を求める。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] bcc32
 [3.3] 言語: C
[4] 期限: [2008年2月12日まで]
[5]その他の制限:
入力・計算・出力部分は必ず関数化し、mainの中でそれらを呼び出すようにする

なす角θを計算する部分は成功しましたが(そこまでの完成版はリンクしたプログ
ラムを参照)、キーボード上から入力した時間をうまく表示することができません。出力は、

??:?? なす角:??°

とします。どうか宜しくお願いします。

154:デフォルトの名無しさん
08/02/10 21:11:22
>>152
#include <stdio.h>

int main(void)
{
char *p, str[256];

scanf("%s", str);

p = str;

while(*p) p++;
while(p--!=str) putchar(*p);

return 0;
}


155:デフォルトの名無しさん
08/02/10 21:24:02
>>154
自分の技量不足で申し訳ありませんが質問してもよろしいでしょうか?
関数の*pの*は何か意味があるのでしょうか?

156:デフォルトの名無しさん
08/02/10 21:24:35
>>153
>>149

157:デフォルトの名無しさん
08/02/10 21:24:35
>>153
void output(int s, int t, double r1)
{
printf("%d:%d なす角:(%.1f)°\n", s, t, (double)r1);
}
にしてh1とm1渡すだけじゃね?

158:デフォルトの名無しさん
08/02/10 21:24:52
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Win XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C
[4] 期限: 2008年2月12日午前7時00分
[5] その他の制限:色々な処理方法があるそうですが、
  なるべくレベルが低い方法でよろしくおねがいします。

159:デフォルトの名無しさん
08/02/10 21:27:27
>>155
間接参照。

160:デフォルトの名無しさん
08/02/10 21:30:03
>>159
ありがとうございます!

161:デフォルトの名無しさん
08/02/10 21:56:55
>>158
#include <stdio.h>

static int su[9], cnt;

void perm(int *a, int j){
    int i;
    if(j == 9){
        int x = 0, y = 0;
        for(i = 0; i < 6; i++) x = 10*x + a[i];
        for(i = 6; i < 9; i++) y = 10*y + a[i];
        if(x%y == 0){
            printf("%d / %d = %d\n", x, y, x/y);
            cnt++;
        }
        return;
    }
    for(i = 0; i < 9; i++)
        if(su[i] == 0){
            su[i] = 1;
            a[j] = i + 1;
            perm(a, j + 1);
            su[i] = 0;
        }
}

int main(void){
    int a[9];
    perm(a, 0);
    printf("合計パターン数 = %d\n", cnt);
    return 0;
}

162:デフォルトの名無しさん
08/02/10 22:35:42
>>158
URLリンク(kansai2channeler.hp.infoseek.co.jp)

163:デフォルトの名無しさん
08/02/10 23:00:27
>>144
>>145
>>146

ですが
解答はいかがでしょうか...

携帯からで見づらくて大変すいません...m(_ _)m



164:デフォルトの名無しさん
08/02/10 23:02:13
>>163
>>1

165:デフォルトの名無しさん
08/02/10 23:15:13
さすがに携帯にうpろだはきつくね?

166:デフォルトの名無しさん
08/02/10 23:15:22
153です。

157番さんのおっしゃる通りにしたら、「output関数における呼び出し時のパ
ラメータが足りない」というエラーが出ました。157番さんの通りにプログラム
を設計するなら、mainの中でoutputなどの各種呼び出しをどのようにすれば良い
のか教えて下さい。プログラミングの基本である自学自習を心掛けていますが
この呼び出し関数の設計などはあまり得意な方でないのでどうかお願いします。

167:123
08/02/10 23:15:37
>>141
ありがとうございます。実行してみたのですが生成される乱数が全て0になってしまいます。
srand関数を使って乱数の種を定めた時のプログラミング例を載せてみます。
URLリンク(kansai2channeler.hp.infoseek.co.jp) 
どうかお願いします。

168:デフォルトの名無しさん
08/02/10 23:35:33
>>166
お前どうやって>>153まで自分で出来たんだ?
得意じゃないってレベルじゃねーぞ
output(h1, m1, show1);

169:デフォルトの名無しさん
08/02/10 23:37:49
誰かの回答だろ

170:153
08/02/10 23:57:48
正直に言うと今までに扱った内容を参考にしながらでした。
それでも不足部分は沢山あるのでそれを補えるよう努力しなければと思い
ます。

ちなみにコンパイルできました。ありがとうございました。

171:デフォルトの名無しさん
08/02/11 00:13:35
質問!

エラーがでたわけではないのですが、VC++2003.NETで
ビットマップ画像をインポートして追加しようとしたのですが、
実行するとその画像が表示されません!
実行の際には画像が切り替わっている様子がうかがえるのですが、表示されないのです。
新規作成で追加するとちゃんと表示されるのですが・・。

どなたか原因分かる方いますか?

172:デフォルトの名無しさん
08/02/11 00:13:39
double→int→doubleとか意味不明なことしてるし、
設計を見直すべき。

173:デフォルトの名無しさん
08/02/11 00:17:52
>>146です

すいません 荒らしてしまって...

携帯からなんで うp無理みたいです...

なんかいろいろほんとすいませんでしたm(_ _)m



174:デフォルトの名無しさん
08/02/11 00:21:45
>>167
「10 動的に確保したメモリの解放」
これが抜けてる以外は問題なさそうだけど。

試しに実行してみたら、ちゃんと乱数生成されてるし。

175:デフォルトの名無しさん
08/02/11 00:30:32
>>174
pc環境とか関係するんですかね?とりあえず学内pcにファイルを移して実行してみます。
本当にありがとうございました。

176:50
08/02/11 00:30:47
>>65~73、87の書込みをしてくださった方々
一番難しい課題③を解いていただき、ありがとうございましたm(__)m


177:デフォルトの名無しさん
08/02/11 00:51:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 2005
 [3.3] 言語: C
[4] 期限: 2月13日
[5] その他の制限:特にありません


178:デフォルトの名無しさん
08/02/11 01:48:02
>>173
うpろだが使えないとしても、>>1読んでテンプレくらいは使って欲しいところ
まぁ推奨になってるからどうしてもテンプレは使いたくないってのなら止めないけど

179:デフォルトの名無しさん
08/02/11 11:21:06
>>144
>>145
>>146
携帯からの投稿自体 無理がありました すいませんでした...m(_ _)m

できれば解答をいただけると幸いです..



180:デフォルトの名無しさん
08/02/11 14:34:02
[1] 授業単元:
[2] 問題文:
 文字列を入力させ、それを表示するプログラムを作成せよ。
 ただし、文頭にaが入力された場合はそれを表示せず、
 数値が入力された場合はエラーとしてもう1度入力させること。

【実行例】
  入力=jgmttgad18j
 ※エラー※数値が入力されました。
 もう1度入力してください
  入力=aaaiaueokaki

  出力=iaueokaki

[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C++
[4] 期限:2008年2月11日22:00まで
[5] その他の制限:

先生が、ヒントで「フラグを使うとできるかも」といってました!

よろしくお願いします!

181:デフォルトの名無しさん
08/02/11 14:54:09
>>180
#include <iostream>
#include <string>
using namespace std;
int main()
{
while(1) {
cout << "入力=";
string s;
cin >> s;
if( s.find_first_of( "0123456789" ) == string::npos ) {
cout << "出力=" << s.substr( s.find_first_not_of( "a" ) ) << "\n";
break;
} else {
cout << "数値が含まれるので、再度入力してください。\n";
}
}
return 0;
}

182:デフォルトの名無しさん
08/02/11 18:40:08
>>180
#include <stdio.h>
#include <string.h>

int main(void)
{
char str[256];
int top;
printf("入力:");
start:
top=0;
fgets(str,256,stdin);
again0:
if(str[top]>=48&&str[top]<=57){
printf("再入力:");
goto start;
}
if(top++<strlen(str))goto again0;
top=0;
again1:
if(str[top]=='a'){
top++;
goto again1;
}
printf("出力:");
again2:
printf("%c",str[top++]);
if(str[top]!=NULL)goto again2;
return 0;
}

183:デフォルトの名無しさん
08/02/11 18:57:58
>>181
>>182
ありがとうございます!
できれば入力に
cin.getlineとか使うくらいの初歩のでもやってほしいんですが..(><)
入力だけでいくと
#include<iostream.h>

main()
{
char a[50] ;

cout<<"a=" ;
cin.getline(a,50) ;
}

こんな感じで・・
サーセン(・_・、)

184:デフォルトの名無しさん
08/02/11 19:38:23
>>180

#include <iostream>
#include <string>
#include <boost/regex.hpp>

int main() {
    while (true) {
        std::cout << "入力: ";
        std::string line;
        if (!std::getline(std::cin, line))
            break;
        boost::regex re_num("\\d+");
        if (boost::regex_search(line, re_num)) {
            std::cout << "※エラー※数値が入力されました" << std::endl;
            std::cout << "もう一度入力してください" << std::endl;
            continue;
        }
        boost::regex re_str("^a+");
        std::cout << "出力: "
            << boost::regex_replace(line, re_str, "") << std::endl;
        break;
    }
}

185:デフォルトの名無しさん
08/02/11 19:41:23
>>183
それなら>>180
cin >> s;

char sz[50]; cin.getline(sz,50); s=sz;
にすればいいが、
初歩というのは、もしかしてstringを使うなと言ってる?

186:デフォルトの名無しさん
08/02/11 19:46:40
>>184
>>185

ありがとうございます!!


stringをならってません(・_・、)
ごめんなさい↓

187:デフォルトの名無しさん
08/02/11 20:00:14
>>186
#include <iostream>
using namespace std;

bool hasDigit( const char* pstr )
{
while(*pstr) {
if( isdigit(*pstr) )
return true;
pstr ++;
}
return false;
}

int main()
{
while(1) {
cout << "入力=";
char sz[50];
cin.getline( sz, sizeof(sz) );
if( !hasDigit( sz ) ) {
char* p;
for( p=sz; *p=='a'; p++ );
cout << "出力=" << p << "\n";
break;
} else {
cout << "数値が含まれるので、再度入力してください。\n";
}
}
return 0;
}

188:デフォルトの名無しさん
08/02/11 22:32:23
[1] 授業単元: プログラム テスト
[2] 問題文 URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語:C言語
[4] 期限: できれば、早いとありがたいです。


よろしくお願いいたします。



189:デフォルトの名無しさん
08/02/11 22:44:53
[1] 授業単元:プログラミング
[2] 問題文
四問あります
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: visual stdio
 [3.3] 言語: C
[4] 期限: 2月13日の昼まで

190:デフォルトの名無しさん
08/02/11 22:46:32
>>188
アウエイ
(50)は解なし。強いてあげればイか。

191:189
08/02/11 22:48:29
すいません
>>189には不備がありました

課題1には二つ問題があるのですが
一つtxtファイルが入ってません
それを書き直したものにしますので少々待っててください

192:デフォルトの名無しさん
08/02/11 22:58:36
[1] 授業単元:プログラミング
[2] 問題文
5問あります
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: visual stdio
 [3.3] 言語: C
[4] 期限: 2月13日の昼まで
[5]ご迷惑をおかけして申し訳ありません
  期限を13日としていますが出来ればなるべく早くお願いします

193:デフォルトの名無しさん
08/02/11 23:07:15
>>192
どれも最近見た気がするが、これって何処の課題なんだろ。
最後の二つは、ちょっと前に俺がうpしたから間違いない。

194:デフォルトの名無しさん
08/02/11 23:15:21
>>193
本当ですか
よろしければその解答を頂けないでしょうか

195:デフォルトの名無しさん
08/02/11 23:18:41
>>194
ちょっと前にうpしたって言ってるじゃん。
ホントに欲しけりゃ、スレから探して持っていけばいいさ。

196:デフォルトの名無しさん
08/02/11 23:30:16
>>195
ありがとうございます
4と5は解決しました

197:デフォルトの名無しさん
08/02/11 23:36:55
アイムジャグラーちっとも勝てません。なぜでしょうか?
URLリンク(www.borujoa.org)
↓参考ページ。
URLリンク(www.htv-net.ne.jp)

198:デフォルトの名無しさん
08/02/11 23:37:55
>>190さん
ありがとうございます。

まぁ結果的に2級は落ちましたが..

少しは勉強になったのでよかったです

皆さん いろいろ迷惑をかけましたがありがとうございましたm(_ _)m



199:デフォルトの名無しさん
08/02/11 23:40:13
試験の問題だったのか。
この程度だと、あんまり取る意味なさそうな気も。

200:デフォルトの名無しさん
08/02/12 00:09:02
>>199さん

確かにそうですよね..
C2級も取れないレベルなんて 俺ってなんなんだろう...

やっぱりバカなんだなぁ つくづく思います。

201:デフォルトの名無しさん
08/02/12 00:40:36
【質問テンプレ】 通りに書き込まなきゃいけないと思うんですが
眠くてやばいんで誰か解き方のだけ速攻教えてください。

C言語で123の数値を合計して6とするにはどうすればいいんでしょうか?



202:デフォルトの名無しさん
08/02/12 00:43:29
>>201
int sum=1+2+3;でおk

203:デフォルトの名無しさん
08/02/12 00:46:27
>>177
URLリンク(kansai2channeler.hp.infoseek.co.jp)

204:デフォルトの名無しさん
08/02/12 00:48:33
>>202
ありがとうございます。

その数値が入力されたものの場合はどうすればいいんでしょうか><

205:199
08/02/12 00:48:33
>>200
いやいや、この程度とは言ったけど、
これを全く勉強せずに解ける人なんて居ないよ。

資格としての意味は薄いにしても、
1つの通過点にするのはいいんじゃないかな。
目標があると励みやすいし。

でさ、本当に2級を取得するだけの力をつけたいんだったら、
このスレで解答を求めたりするんじゃなくて、
自分で試行錯誤して辿り着く方が為になると思うんだけどな。


スレ違いなんでこの辺で。

206:デフォルトの名無しさん
08/02/12 00:51:42
>>204
int sum = val / 100 + (val / 10) % 10 + val % 10;

207:デフォルトの名無しさん
08/02/12 00:52:05
入力された文字列をatoiで変換→数値を合計みたいな問題でやり方がわからないんでヒントもらいたいです。

説明不足でほんとすみません。

208:207
08/02/12 00:54:18
>>206

ありがとうございます。


209:デフォルトの名無しさん
08/02/12 00:54:19
情報を小出しにするな。

210:デフォルトの名無しさん
08/02/12 00:54:39
>>207
説明不足だと思うならちょっとくらい眠くてもテンプレに従えよ

211:デフォルトの名無しさん
08/02/12 00:54:57
>>207
int sum = (str[0] - '0') + (str[1] - '0') + (str[2] - '0');

212:207
08/02/12 00:55:23
>>206

ありがとうございます。


213:デフォルトの名無しさん
08/02/12 01:00:18
!!!!>211さん 眠気がとびました!
そっか atoiを絶対使うと思い込んでいたからできなかったのか><

'0'から引けば結果は数値と同じっすもんね・・・
本当にありがとうございました。


214:デフォルトの名無しさん
08/02/12 01:02:05
>>201 >>207
#include<stdio.h>
#include<stdlib.h>
int main(void){
char buf[16];
int n, sum = 0;
fgets( buf, 16, stdin );
n = atoi( buf );
while( n > 0 )
{
sum += n % 10;
n /= 10;
}
printf("%d\n",sum);
return 0;
}
多分こういうことがやりたいんだろうと思って答えてみる
間違っててもそれは質問の仕方が悪いと思う

215:デフォルトの名無しさん
08/02/12 01:09:38
150ですがどなたかお願いします・・・

216:デフォルトの名無しさん
08/02/12 01:16:23
>>161-162
ありがとうございます。助かりました。

217:デフォルトの名無しさん
08/02/12 03:07:47
>>150
どう表示したらいいか不明なので適当にやった
最小のものが見つかった時点で逐次表示

#include<stdio.h>
int main(void){
int cost[][4][3]={{{3,2,1},{2,3,3},{3,3,2},{0,2,0}},
{{1,1,2},{2,1,3},{3,1,2},{0,2,0}},
{{1,1,2},{1,2,3},{1,1,4},{0,3,0}},
{{3,0,0},{2,0,0},{2,0,0},{0,0,0}}},
c,cmin=9999,p,pmin=9999,x,y,i,k;
for(i=0;i<729;i++){//3^6=729
printf("(0,0)0");
for(k=i,c=p=x=y=0;x<3&&y<3;k/=3)
c+=cost[x][y][k%3],
p++,
x+=(k%3!=0),
y+=(k%3!=1),
printf("→(%d,%d)%d",x,y,c);
if(x==3&&y==3&&cmin>c)cmin=c,printf(" 最小コスト\n");
else if(x==3&&y==3&&pmin>p)pmin=p,printf(" 最短経路\n");
else printf("\r%79s\r","");
}
return 0;
}


218:デフォルトの名無しさん
08/02/12 15:32:39
>>192
課題1
#include <stdio.h>

int main(void)
{
bool exist[10000]={false,};
int temp,i=0,max,min,count=0;
FILE *fp=fopen("input8500.txt","r");
if(!fp) return 1;
while(!feof(fp)){
fscanf(fp,"%d ",&temp);
exist[temp]=true;
}
fclose(fp);
while(!exist[i++]);
min = i;
i = 9999;
while(!exist[i--]);
max = i;

for(i = 0; i < 10000;i++) if(exist[i])count++;
printf("count = %d\nmax - min = %d",count,max-min);
return 0;
}

219:デフォルトの名無しさん
08/02/12 15:38:30
>>192
課題2
#include <stdio.h>

int main(void)
{
int rank[11]={0,};
int temp,i,j;
FILE *fp=fopen("input_histo.txt","r");
if(!fp) return 1;
while(!feof(fp)){
fscanf(fp,"%d ",&temp);
rank[temp/10]++;
}
fclose(fp);

for(i=0;i<11;i++){
printf("\n%3d点台:",i*10);
for(j=0;j<rank[i];j++)printf("*");
}
return 0;
}

220:193
08/02/12 16:59:52
>>192
URLリンク(kansai2channeler.hp.infoseek.co.jp)
(1)~(3)

221:デフォルトの名無しさん
08/02/12 20:27:04
>>218
>>219
>>220
皆さんありがとうございます
これでなんとかなりそうです><

222:デフォルトの名無しさん
08/02/12 21:21:05
先ほど質問スレで質問したのですが場違いだったようなので
こちらで質問したいと思います。

お時間がある方、ご協力いただけると幸いです。

先週からC言語について学び始めた高1です。
明日からプログラミングが学校の授業ではじまり
予習していたのですが、何度やっても思い通りの結果を表示できません

本当に基礎的な問題かも知れませんが、アドバイス、正答などいただけると幸いです。

1.5個の整数データを配列に代入し合計と平均を求めるプログラムをつくれ。
2.問1のデータの最大値を求めるプログラムをつくれ。
3.問1のデータを大きい順に並べ替えるプログラムをつくれ。

本当に程度の低い質問かもしれませんが
悩んでます><よろしくおねがいします。


223:デフォルトの名無しさん
08/02/12 21:24:37
>>1

224:デフォルトの名無しさん
08/02/12 22:06:18
>>222

#include <stdio.h>
int main(int argc, char **argv) {
static int array[5];
int i;
double sum=0.0;
if (argc==6)
{
for(i=0;i<5;i++) {
array[i]=atoi(argv[i]);
sum += array[i];
}
printf("average[%lf] sum[%d]\n", sum/5, (int)sum);
}
return 0;
}
悩んでいるというのであれば何がわからないのかくらい書くべきです。
予想すると何もわからなくて悩んでいるんですよね。
2と3は自分で考えましょう。

225:デフォルトの名無しさん
08/02/12 22:27:32
[1] 画像処理
[2] 画像ファイルを読み込み、マウスでクリックした位置の
  水平垂直方向の輝度を表示せよ。
 [3.1] Windows XP
 [3.2] Visual C++2005 ExpressEdition
 [3.3] C++
[4] 期限: 無期限
[5] その他の制限:とくになし。
ファイルダイアログでpicturebox1に画像ファイルを取り込んで、
getpixelでRGB値を取得しています。
pictureboxは640*480なのですが、画像サイズが640*480以外だと、
エラーが出たり、マウスの位置と、取得したRGB値が一致しません。
どうしたものだろうか?
private: System::Void pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
Graphics^gr=this->CreateGraphics();
Bitmap^bm = (Bitmap^)(pictureBox1->Image);
int w = pictureBox1->Image->Width; int h = pictureBox1->Image->Height;
int z = 480/h;
int x=e->X/z; int y=e->Y/z;
gr->FillRectangle(Brushes::Black,Rectangle(700,27,128,480));
gr->DrawLine(Pens::LightGray,700+64,27,700+64,27+480);
if(x<w && y<h ){
for (int y=0;y<h-1;y++) {
Color c=bm->GetPixel(x,y);
//平均輝度
int r=c.R; int g=c.G; int b=c.B;
int rgbdiv = (int)((r+g+b)/3);
Color c2=bm->GetPixel(x,y+1);
int r2=c2.R; int g2=c2.G; int b2=c2.B;
int rgbdiv2 = (int)((r2+g2+b2)/3);
gr->DrawLine(Pens::Red,700+rgbdiv/2,27+y*z,700+rgbdiv2/2,27+(y+1)*z);
} } }

226:デフォルトの名無しさん
08/02/12 22:44:17
C++/CLI ?

227:デフォルトの名無しさん
08/02/12 23:12:51
C#?

228:デフォルトの名無しさん
08/02/12 23:21:25
.net

229:デフォルトの名無しさん
08/02/13 01:36:59
>>217
ありがとうございました。

230:デフォルトの名無しさん
08/02/13 10:19:22
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
input.txt: URLリンク(kansai2channeler.hp.infoseek.co.jp)


[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:visual stdio
 [3.3] 言語:C
[4] 期限:2月13日中
[5] その他の制限:
期限間近ではありますが、よろしくお願いいたします

231:デフォルトの名無しさん
08/02/13 10:44:46
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(www.uploda.net)
待ち行列の問題です。
pdfの11ページに載っています。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日23:59まで
その他の制限: 特になし
丸投げです。よろしくお願いします。

232:デフォルトの名無しさん
08/02/13 13:50:42
>>230
URLリンク(kansai2channeler.hp.infoseek.co.jp)

233:デフォルトの名無しさん
08/02/13 14:43:34
ひどいな

234:デフォルトの名無しさん
08/02/13 14:47:34
ひどすぎるな

235:デフォルトの名無しさん
08/02/13 14:54:57
>while(!feof(fp)){
> fscanf(fp, "%d", &temp);
> data[temp]++;
> }

>while(count <= 100)

236:デフォルトの名無しさん
08/02/13 15:02:22
晒しage

237:デフォルトの名無しさん
08/02/13 15:30:21
>>231
URLリンク(kansai2channeler.hp.infoseek.co.jp)

238:デフォルトの名無しさん
08/02/13 16:19:12
>>230
URLリンク(kansai2channeler.hp.infoseek.co.jp)

239:デフォルトの名無しさん
08/02/13 20:12:05

チョンのあやかり創価学会

偽善者が政治活動、公明党

ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや

カルトキチガイ・創価騙されバカ信者

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党


240:デフォルトの名無しさん
08/02/13 20:44:17
>>232
>>238
期限間近のものを本当にありがとうございました。

241:デフォルトの名無しさん
08/02/13 20:48:28
>>232は荒らしだから礼は言わなくてよし。

242:デフォルトの名無しさん
08/02/13 21:01:17
>>241
今、実行できる環境がないのですが>>232はなぜ荒らしなのでしょうか。

243:デフォルトの名無しさん
08/02/13 21:08:23
表面上問題文で要求された結果は返すけど、
拡張性が無く再利用できないアルゴリズム。
fclose()してない。
こんなの宿題で提出されたら俺なら赤点つける。

244:デフォルトの名無しさん
08/02/13 21:14:18
>>243
荒らしのプログラムにも気付けない自分が情けないです…
詳しい説明ありがとうございました。

245:デフォルトの名無しさん
08/02/13 22:04:07
宿題丸投げしてる時点で情けないけどな

246:デフォルトの名無しさん
08/02/13 22:20:41
>>243
>>232読んでみたがこれで十分だろ
題意は満たしてるし、時間・空間計算量も小さくなるように組まれてるしな
拡張性について指定がない以上、こういうのも一つの解としてありだろ

247:デフォルトの名無しさん
08/02/13 22:28:18
学生の宿題なんだからむしろ質素な方がいいと思うのですが
>>243さんは一体何のつもりなんでしょうか(苦笑

248:デフォルトの名無しさん
08/02/13 22:36:48
ここはIDが出ないから自演が楽でいいなw

249:デフォルトの名無しさん
08/02/13 22:42:48
>>246
題意満たしてるか?

250:デフォルトの名無しさん
08/02/13 22:42:52
自演以外でいちいち擁護する奴なんていないしなw

251:デフォルトの名無しさん
08/02/13 22:43:53
>>249
何か条件抜けてるか?

252:デフォルトの名無しさん
08/02/13 22:48:30
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \   
     |┃     |    (__人__)     |     俺なら赤点つける
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \



253:デフォルトの名無しさん
08/02/13 22:48:33
>>235


254:デフォルトの名無しさん
08/02/13 22:54:02
>>251
合格者がちょうど100人の時にカウントがずれる。
<にすべき比較を<=にしてるという初心者のようなミス。
fclose()していない。

仮にあれが荒らしじゃないとすれば、無能であるという自覚の無い初心者。
ある意味荒らしよりたちに負えない。

255:デフォルトの名無しさん
08/02/13 22:55:30
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \   表面上問題文で要求された結果は返すけど、
     |┃     |    (__人__)     |     拡張性が無く再利用できないアルゴリズム。
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

256:デフォルトの名無しさん
08/02/13 22:57:38
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \   題意は満たしてるし、時間・空間計算量も小さくなるように組まれてるしな
拡張性について指定がない以上、こういうのも一つの解としてありだろ
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

257:デフォルトの名無しさん
08/02/13 22:59:46
     |┃三        / ̄\
     |┃         |     | ←これなに?
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

258:デフォルトの名無しさん
08/02/13 22:59:47
>>232はダメだろ。
211回数えてるぞ。

259:デフォルトの名無しさん
08/02/13 23:03:02
最近オプーナAAをよく見かけるな

260:デフォルトの名無しさん
08/02/13 23:03:27
データ210個あるって言ってるのに配列101個分しか用意してないし。
何したいのかわからん。

261:デフォルトの名無しさん
08/02/13 23:04:31
受験生全員が100位タイ以内に収まる場合にずっこける希ガス

262:デフォルトの名無しさん
08/02/13 23:05:02
穴だらけじゃんwwwwwwwwwww

263:デフォルトの名無しさん
08/02/13 23:06:28
>>260
それはお前がバカ

264:デフォルトの名無しさん
08/02/13 23:06:59
>>260
それは点数による度数分布だからおk
0~100以外の点数が来たらNGだが

265:デフォルトの名無しさん
08/02/13 23:07:17
feofでend-of-fileの判定。

266:デフォルトの名無しさん
08/02/13 23:13:22
まとめ
>>232
・今回与えられたデータではたまたま正常に動く
・不正なデータ(100点を超えたりマイナスだったり)に対する備えが無い
・偏ったデータ(全員が100点とか)で無限ループ
・100位以内が丁度100人の時に計算がずれる
・ファイルから点数を直接読み出してないから拡張性が無い
・↑のデータを利用して他の関数を書いてるから再利用できない
・fclose()してない

>>238
・パーフェクト

>>230は好きな方選んで提出したらいいんじゃね?
自力で組めなかったんだし粗悪なプログラムで赤点補習した方が将来のためかもしれないしね。

267:デフォルトの名無しさん
08/02/13 23:14:52
>>266
バカがまとめんなよw
>>232で出る答えは間違ってるし、全員100点でも無限ループなんてしない。

268:デフォルトの名無しさん
08/02/13 23:21:10
>>266
>>238も人数が210人未満のときに間違える。

269:デフォルトの名無しさん
08/02/13 23:22:04
>>232の実行結果
合格者数:105人
合格者平均点:77.7723810点

>>238の実行結果
Success:104
Average:77

270:デフォルトの名無しさん
08/02/13 23:33:34
どうして>>232の答えは間違うんでしょうか?

271:デフォルトの名無しさん
08/02/13 23:34:26
>>270
プログラムが間違ってるからだね。

272:デフォルトの名無しさん
08/02/13 23:37:40
>>270
ループ終了条件をfeofで判定してるため、最後の数を二重に数えてるから。

273:デフォルトの名無しさん
08/02/13 23:37:52
烏賊じゃないんだ

274:デフォルトの名無しさん
08/02/13 23:40:35
まあ>>238のプログラムも入力部分を関数化しろって条件満たしてないんだけどな。

275:デフォルトの名無しさん
08/02/13 23:50:30
>>237
ありがとうございますm(_ _)m

276:デフォルトの名無しさん
08/02/13 23:56:49
>>272
ありがとうございます。

while(!feof(fp))
{
fscanf(fp, "%d", &temp);
data[temp]++;
}



while(fscanf(fp, "%d", &temp) != EOF)
{
data[temp]++;
}

みたいにしたらいいのかな。

277:デフォルトの名無しさん
08/02/13 23:58:10
そうだね

278:デフォルトの名無しさん
08/02/14 00:10:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++2005 ExpressEdition
 [3.3] 言語:C
[4] 期限:2月15日
[5] その他の制限:特にないです

279:デフォルトの名無しさん
08/02/14 00:14:35

チョンのあやかり創価学会

偽善者が政治活動、公明党

ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや

カルトキチガイ・創価騙されバカ信者

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党


280:デフォルトの名無しさん
08/02/14 00:18:58
条件なのにできるってなんかおかしくね?

281:デフォルトの名無しさん
08/02/14 00:40:44
>>276
fscanfを使うなら、
while (fscanf(...) == 1)
とするべき。

282:デフォルトの名無しさん
08/02/14 00:50:47
>>278
「double max(double a,double b)関数をとり、引数aとbの大きいほうを返す関数」は、
double max_caller(double (*f)(double, double), double a, double b){
return (*f)(a, b);
}
でよろしいか?

283:デフォルトの名無しさん
08/02/14 07:06:31
>282
いいですよ。

284:デフォルトの名無しさん
08/02/14 09:53:12
>>281
なるほど、それだと読み込みエラーとかでもループを抜けられるんですね。
勉強になりました。ありがとうございました。

285:デフォルトの名無しさん
08/02/14 11:39:45
>>278
URLリンク(kansai2channeler.hp.infoseek.co.jp)
チェックあまりしてない。甘いところはご愛嬌。

286:デフォルトの名無しさん
08/02/14 12:09:39
>>278
問題2
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これもチェックあまりしてない。甘いところはご愛嬌。

287:デフォルトの名無しさん
08/02/14 18:04:30
「nステップによるある一回の酔歩における、格子点上の経路を画面に表示するプログラムを作成せよ。」
って課題が出たんですけど、誰か教えてください。

288:デフォルトの名無しさん
08/02/14 18:19:45
>>287
>>1からやり直し

289:デフォルトの名無しさん
08/02/15 12:03:39
すいません。書き直します。宜しくお願いします。

[1] 授業単元: 一般情報処理C
[2] 問題文(含コード&リンク):「nステップによるある一回の酔歩における、格子点上の経路を画面に表示するプログラムを作成せよ。」

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:c
[4] 期限:2008/2/19
[5] その他の制限:なし

290:デフォルトの名無しさん
08/02/15 14:45:36
急ですみませんが、(1)だけでもいいので、出来る方いらっしゃいましたらよろしくお願いします。

[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
崖から鉛直上向きに投げた石の4秒後の鉛直方向位置を求めたい.
(1)オイラー法によりその位置を求めるプログラムを作成し,4秒後の
位置を求めなさい.
(2)理論解との位置の誤差を0.1m以下にするには時間きざみΔtを
いくらにすればよいか考察しなさい.
[3] 環境
 [3.1] OS:Vista
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語:C
[4] 期限:2008/2/15 15:50まで
[5] その他の制限:

291:デフォルトの名無しさん
08/02/15 15:11:20
>>290
(1)だけ。
初速に関する条件がなかったけど入力させる形でよかった?
#include <stdio.h>
#include <stdlib.h>

#define GRAVITY (-9.80665)
#define DELTA_T (0.1)

int main(void)
{
char temp[32];
double v0, velocity, time, y;

printf("初速度を入力してください:");
do{
fgets(temp, sizeof(temp), stdin);
v0 = atof(temp);
}while(v0 <= 0);

for(time = 0; time < 4; time += DELTA_T)
{
velocity = v0 + time * GRAVITY;
y += velocity * DELTA_T;
}
printf("4秒後の位置は %f(m) です", y);
return 0;
}

>>289
一口に酔歩って言っても定義はいくつもあるんだけど、
何の前提条件も無しでその問題文がだされたわけ?

292:デフォルトの名無しさん
08/02/15 17:34:59
>>291
えっとその前の課題が「二次元格子上での酔歩におけるnステップによる平均移動距離を、m回のシュミレーションによる統計平均から計算せよ。また、その標準偏差を求めよ」
で、その課題の下に「乱数の発生方法について」とあって、1#include<stdlib.h>によって、stdlib.hヘッダーをインクルードする。2#include<time.h>によって、time.hヘッダーをインクルードする。
3srand((unsigned)time(NULL));によって乱数の種の初期値を現時刻から決める。4rand()/(RAND_MAX+1.0);によって0から1における一様乱数を発生させる。
と書いてあって、その下に上記の課題が書いてあります。

293:デフォルトの名無しさん
08/02/15 20:05:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 2月18日24時まで
[5] その他の制限:考察も書かないといけないので
         注訳等も入れてもらえると幸いです。
         また期限はギリギリの期限ですので出来るだけ
早く対応していただけると非常に助かります。

294:デフォルトの名無しさん
08/02/15 21:59:30
>>293
元のプログラムがてんでダメダメだな。

295:デフォルトの名無しさん
08/02/15 22:13:23
>>294
あれ、引用のコピペ失敗したかな(´・ω・`)、自分で動かした分には元のプログラムは動いたんだけど

296:293 ◆klsLRI0upQ
08/02/15 22:19:36
>>294
サンプルプログラムの原文HTML化したものはありますけど
そちらをうpった方がいいでしょうか?

297:デフォルトの名無しさん
08/02/15 22:26:43
>>295
67行目に変な文字が入ってるけど、ダメってのはそういう意味じゃない。
元のプログラムの作り自体にセンスが感じられないってこと。

298:293 ◆klsLRI0upQ
08/02/15 22:28:41
>>297
なるほど、そういう事ですか><

299:デフォルトの名無しさん
08/02/16 07:24:05
>>293
URLリンク(kansai2channeler.hp.infoseek.co.jp)

300:デフォルトの名無しさん
08/02/16 10:45:37
>299
ありがとうございます

301:_
08/02/17 08:34:24
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

302:デフォルトの名無しさん
08/02/17 11:03:44
                三 |┃┃
            三    |┃┃
                  |┃┃
             ∧∧ ..|┃┃
          三 (  ;). |┃┃ピシャッ!
            /   ⊃.|┃┃

303:_
08/02/17 11:52:13
      .. |┃三    ..   / ̄\
     ..  |┃        |     |
      .. |┃     ..    \_/
   ガラッ.. |┃           ..|        
     三 |┃            |    
  三    |┃  ノ//   ./ ̄ ̄ ̄ \
        |┃三    /  ::\:::/:::: \   
   ∧∧ ..|┃     /  <●>::::::<●>  \ 
三 (  ;). |┃     |    (__人__)     | 
  /   ⊃.|┃三   \    ` ⌒´    / 
 シュー    |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

304:_
08/02/17 11:52:33
                三 |┃┃
            三    |┃┃
                  |┃┃
             ∧∧ ..|┃┃
          三 (  ;). |┃┃ピシャッ!
            /   ⊃.|┃┃

305:デフォルトの名無しさん
08/02/17 12:15:33
【質問テンプレ】
[1] 授業単元: コンピュータ実習
[2] 問題文:(下記のコードに書き加えてファイルに出力しなさい)
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C++)
[4] 期限: 今日
[5] その他の制限: なし
#include <iostream>
#include <string>
#include <fstream>

class write{
private:
string input;
public:
string input(){
cout<<文字列をファイルに書き込みたい;
cin>>input;
return input;
}};

int main(){
write ob;
//書き込み処理

//書き込み処理終了
return 0;
}


306:デフォルトの名無しさん
08/02/17 15:57:43
//書き込み処理
fstream("ファイル", ios::out) << ob.input();
//書き込み処理終了

307:デフォルトの名無しさん
08/02/17 16:06:25
>>306
ofstream使えよ。

308:デフォルトの名無しさん
08/02/17 17:48:53
[1] 授業単元: Cプログラミング
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 明日まで

問題はC言語のシグナルの送信に関するものです。
よろしくお願いします。


309:デフォルトの名無しさん
08/02/17 18:10:27
シグナルハンドラとしてSIG_IGNを使う。
あと、シグナルハンドラの中では、非同期シグナルセーフな関数以外は呼び出さない方がいい。

310:デフォルトの名無しさん
08/02/17 21:55:38
[1] 授業単元:C言語II
[2] 問題文(含コード&リンク)
  シェルを実装していますが、分からないのは入出力リダイレクションの処理です。
  たとえばプロンプトから

  $ cat 123 > textout

  と、入力して 引数の'>'(もしくは'<') で入出力を切り替える処理を考えています。
  どうすればいいのでしょうか?
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4.4
 [3.3] 言語:C
[4] 期限: 2008年2月29日

311:デフォルトの名無しさん
08/02/18 00:26:19
>>308
とりあえずsignal.hなるものの存在を初めて知った

で、<unistd.h>は「unix standard」。
ここまで来ると、Windowsの人間はまるでついていけない……


312:デフォルトの名無しさん
08/02/18 02:30:54
>>308 [kill-main.c]
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>

pid_t pid;
void ctrlc(void){
kill(pid,SIGUSR1);
}

int main(){
unsigned int c;
if((pid = fork()) == 0){
execl("kill-child","kill-child",(char *)0);
perror("execl");
exit(EXIT_FAILURE);
}
if(signal(SIGINT,(void*)ctrlc) == SIG_ERR){
perror("sigint");
exit(EXIT_FAILURE);
}
do{
printf("Send signal?(C-c/n)\n");
while((c=getchar()) != EOF)
if(c != '\n')
break;
if(c == 'n')
exit(0);
}while(c != EOF);
}

313:デフォルトの名無しさん
08/02/18 02:32:35
>>308 [kill-child.c]
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void siguser(void){
static int n = 0;
printf("Signal received %d times\n",++n);
if(n == 10)
exit(EXIT_SUCCESS);
}

int main(){
signal(SIGINT,SIG_IGN);
if(signal(SIGUSR1,(void *)siguser) == SIG_ERR){
perror("signal");
exit(EXIT_FAILURE);
}
for(;;){}
}

子まで書き換えないとならないのがミソだな

314:デフォルトの名無しさん
08/02/18 04:08:11
>>312-313
御回答ありがとうございます。
SIG_IGNを使いシグナルを無視させることで無効化するんですね。
勉強になりました!ありがとうございます。

315:デフォルトの名無しさん
08/02/18 14:14:22
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):Cシェルを作成しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2008年2月19日まで
[5] その他の制限: なし

C言語でシェルを作っているのですが、
>310さんと同じく'>'の入力リダイレクションの処理が分からないです。
自力で途中までは書いているのですが、キー入力の分割処理が上手く行きません。
void parseitファンクション内の処理がおかしいと思われます。

助けて頂けると幸いです。

ソースファイル↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)

316:デフォルトの名無しさん
08/02/18 16:43:12
誰か292頼みます

317:デフォルトの名無しさん
08/02/18 18:15:57
>>316
問題が理解できないのでどうしようもない

まずnステップっていうのがわからない
そもそも、1ステップでどういう動きをするんだ?
ランダムで X 方向 or Y 方向に 1つ動くっていうのか、
それとも、X 方向にランダムでいくつ、Y方向にランダムでいくつって言う風に動くのか

あと表示のしかたも、各ステップ毎のX,Yの値をただ単に並べればいいのか、
図で見せるのかわからない

318:デフォルトの名無しさん
08/02/18 22:56:21
>>315
void parseit 内で、
*params++ = command;
の後のパラメータ分文字を読み飛ばす処理内で、">"の処理をしているのが不味い

a.out > aaa
   ↑
ここでパラメータ分文字を読み飛ばす処理は終了するので、次のパラメータを探す処理に
移ると、次のパラメータは、">"になる

">" の処理もそのままだと、 ファイル名の前後に空白文字が入る可能性がある(問題ないのかもしれないけど)

あと、void parseit 関数の終わりの*params = '\0'; は、 *params = NULL; じゃね

319:デフォルトの名無しさん
08/02/19 00:16:23
>>318
なるほど、そう言うのが原因なんですね。
確かにテストをすると空白らしくものがファイル名と'>'の前(おそらく)に入ってると思われます
となると、やはり新しいファンクションを増やした方がてっとり早いのでしょうか?

320:デフォルトの名無しさん
08/02/19 00:59:51
>>319
横レスになるけど.
先に ">"の前後で文字列を切り分けてからコマンド部分をあらためて切り分ける方法もあるんじゃないかな。

標準関数を使っていいのなら切り分けはこんな感じ↓

char redirect[20]; // リダイレクト先
_Bool test_parse( char *command, char **param )
{
   _Bool ret = false;
   char cmd[256]; // コマンド部
   int result;
   // >の前後で文字列を切り分け
   result = sscanf( command, "%255[^>]%*[>]%19s", cmd, redirect );
   if( result > 1 ) {
      ret = true;
   }
   getToken( cmd, param ); // ここでコマンド部をパラメータと切り分ける関数を別に作って呼ぶ
   return ret;
}

こうするとローカル変数cmdとredirectにそれぞれ>の前後で切り分けた文字が入るはず。
ついでにretで1以外が入っていた場合はredirectにも代入があったことになるからフラグでそれを知らせてます。

321:デフォルトの名無しさん
08/02/19 03:51:32
>>320
レス感謝です。
getTokenでparseitと同様の処理をさせれば良いのでしょうか?

322:デフォルトの名無しさん
08/02/19 06:43:13
>>321
4時か、がんばってるねぇ…

とっくに寝てそうだけど、getTokenでparseitのparamsに入れていく部分の処理を入れればいいと思う。
元のソース見る限りだとredirectは特に同じことをしてなさそうに見えるから。

323:デフォルトの名無しさん
08/02/19 06:54:35
試しに>>320の教えてくれたsscanfを使ってみたのですが、
未だに空白が付いて正しい結果を出しません。
もしかしたらメイン内でやったのがいけなかったのかもしれません。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

324:デフォルトの名無しさん
08/02/19 07:09:34
あー

空白がつくのって
"a.out params > text.txt"
みたいなときに " text.txt"がredirectにはいるってこと?

VC++でコンパイルしたからGCCでは挙動違うのかな?

sscanfの処理を
sscanf( command, "%255[^>]%*[> \t]%19s", cmd, redirect );
って修正してもだめ?

325:デフォルトの名無しさん
08/02/19 07:13:47
すみません>>322の通りにやると文字化けが生じてしまいます。
もしこれが解決出来れば、test_parseファンクションを使えると思うのですが…。
何か解決方法があったら教えてください。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

326:デフォルトの名無しさん
08/02/19 10:37:19
無事に解決できました。
どうやら問題やはcmdの最後の部分に空白があったため、問題が起きていたようです。
なので、最後尾にNULLを追加したらリダイレクションが正常に完了しました。
>>318 >>320 >>322 >>324助言ありがとうございました。

327:デフォルトの名無しさん
08/02/19 10:39:06
>>316
適当解釈。

#include <stdio.h>
#include <stdlib.h>
#define N 10

void suiho(int *x, int *y)
{
int r=rand()%4;
*x+=((r/2)*2-1)*(r%2);
*y+=((r/2)*2-1)*(!(r%2));
printf("(%d,%d)\n",*x,*y);
}

int main(void)
{
int i,x=0,y=0;
srand(time(NULL));
for(i=0;i<N;i++)suiho(&x,&y);
return 0;
}

328:デフォルトの名無しさん
08/02/19 20:29:30
>>327
面白い解釈だ

神龍:どんな問題でも一つだけ聞き流してやろう
ってのが思い浮かんだ

329:デフォルトの名無しさん
08/02/19 21:26:31
誰か終わってないリストチョーライ。

330:デフォルトの名無しさん
08/02/19 22:00:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):2問ありますURLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限: 問題文にそって作る

お手数おかけしますが、よろしくお願いします。

331:デフォルトの名無しさん
08/02/19 22:27:31
因数因数って引数だろ、「ひきすう」で変換すればちゃんと出てくるのに・・・
ってもやもやしながら読んでたらばおで噴いたwwwwwww

332:デフォルトの名無しさん
08/02/19 22:37:55
構造体変数名がlist_tっていうのが違和感あるんだが,これって変数が
list_tって名前なんだよな?

xxx_tって普通,型名につける方法じゃないっけ?

333:デフォルトの名無しさん
08/02/19 23:18:56
ば、ばお・・・ごめんなさいorz

>>332
問題文を確認したら構造体変数名はlist_tとありました。
これが誤っているとすると

typedef struct list{

} list_t;

って感じですかね?

334:デフォルトの名無しさん
08/02/20 00:13:00
typedef struct list_t{}list;だろ
_tは普通使わないと思うけど

335:デフォルトの名無しさん
08/02/20 00:15:26
>>334
へぇ 普通はそうなのか
普通って難しいな

336:デフォルトの名無しさん
08/02/20 00:27:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境 
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2/22
[5] その他の制限: 
よろしくお願いします。

337:デフォルトの名無しさん
08/02/20 01:03:12
[1] 情報セキュリティ
[2] 問題文(含コード&リンク):
C言語プログラムのファイルを読み込んで、バッファオーバーラン
の危険性を検出(修正)するサポートツール。
[3] 環境
 [3.1]Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2月21
[5] その他の制限: なし

338:デフォルトの名無しさん
08/02/20 01:07:57
さらっと書いてるけど>>337は相当むずかしくないか?

339:デフォルトの名無しさん
08/02/20 01:11:45
gets()が検出できればおkだったりしてな

340:デフォルトの名無しさん
08/02/20 01:16:50
つ lint

341:337
08/02/20 01:25:54
* get * sprintf * strcat * strcpy * vsprintf
が検出できれば OKです

342:デフォルトの名無しさん
08/02/20 01:28:57
先に書けよ

343:337
08/02/20 01:33:14
すみません。

344:デフォルトの名無しさん
08/02/20 04:14:35
・getってなんだよ。
・scanfはスルーかよ。

345:デフォルトの名無しさん
08/02/20 04:23:51
>>337
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFMAX 1024

int main(int argc, char *argv[]) {

FILE *fp;
char buf[BUFMAX];
int line = 0;
if (argc < 2 || (fp = fopen(argv[1], "r")) == NULL) {
printf("Usage: a.out [assemble code file]\n");
exit(0);
}

while (fgets(buf, BUFMAX, fp)) {
++line;
if (!strcmp(buf, "\tcall\tscanf\n") ||
!strcmp(buf, "\tcall\tgets\n") ||
!strcmp(buf, "\tcall\tsprintf\n") ||
!strcmp(buf, "\tcall\tstrcat\n") ||
!strcmp(buf, "\tcall\tstrcpy\n") ||
!strcmp(buf, "\tcall\tvsprintf\n")) {
printf("find at line%d: %s", line, buf);
}
}

fclose(fp);
return 0;
}
こんな感じでいいのかな。アセンブリコードに対して検索した方が楽だよな。

346:デフォルトの名無しさん
08/02/20 04:35:42
>>345
その発想はなかったわw

347:337
08/02/20 07:49:57
ありがとうございます

348:デフォルトの名無しさん
08/02/20 11:53:11
>>330
1問目
URLリンク(kansai2channeler.hp.infoseek.co.jp)

構造体変数名はlist_tとする意図が汲み取れないが、それは無視して作った。
構造体のtypedefした名前をlist_tとするの間違いじゃなかろうか・・・

349:デフォルトの名無しさん
08/02/20 12:13:13
>>330
URLリンク(kansai2channeler.hp.infoseek.co.jp)

問題をそのまま書いた方が良いと思うよ・・・

350:デフォルトの名無しさん
08/02/20 19:57:42
>>336
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
一応作ってみた
考え方が良く分からんから、まぁたぶん大丈夫だろう的なレベル

351:デフォルトの名無しさん
08/02/20 20:47:15
>>348-349
ありがとうございます。

352:デフォルトの名無しさん
08/02/20 21:23:03
>>350
ありがとうございます

353:デフォルトの名無しさん
08/02/22 00:51:17
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):

・リスト構造
アルファベットの文字列をいくつか読み込み、それを、アルファベット順にソートし、以下のコマンドが入力された場合、それぞれの命令を実行せよ。
条件として、リスト構造が使われていること、サブ関数の呼び出し(単純なものでもよい)が使われていること、malloc関数が使われていること。

p :入力された文字列を表示する。
a :指定された文字列をリストに追加する。(アルファベット順に並ぶように)
d :指定された文字列をリストに削除する。(不要になった記憶領域はfree()を使って開放すること。また、指定された文字列がリストに無い場合は、その旨を表示。)
q :プログラムを終了する。
? :使用可能なコマンドの一覧を表示する。
end:データ入力の終了

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:2月26日まで
[5] その他の制限:

こんな感じです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
できればなるべく簡単な方法でお願いします。


354:353
08/02/22 00:54:56
ごめんなさい、訂正です。
× d :指定された文字列をリストに削除する。
○ d :指定された文字列をリストから削除する。

355:デフォルトの名無しさん
08/02/22 02:55:06
>>353
BUFSIZE文字以上の入力があった場合に異常動作を起こす他、色々と問題・手抜きは抱えてるが少なくともその実行例は通る
URLリンク(kansai2channeler.hp.infoseek.co.jp)

356:353
08/02/22 03:24:27
>>355
ありがとうございます。
しかし、まんまコピペでコンパイルが通りませんでした…
そしてNode型とかようわからん件…ごめんなさい低級で
とりあえず自分なりにいじってみます。ダメだったらまたくるかも。



357:デフォルトの名無しさん
08/02/22 03:27:56
>>356
あぁ、VC++2008でコンパイルしたから気付かんかったけど
C99形式のコメント(//~)を使ってるからそれかもしれん
その部分を全部消してみてくれ

358:353
08/02/22 03:50:47
>>357
消してみましたが、やはり同じようです。
とりあえずvistaですが、bccでまんまコピペでコンパイルしてみた結果、以下が表示されました。

list.c:
警告 W8060 list.c 24: おそらく不正な代入(関数 insert )
警告 W8060 list.c 24: おそらく不正な代入(関数 insert )
警告 W8060 list.c 32: おそらく不正な代入(関数 insert )
警告 W8060 list.c 32: おそらく不正な代入(関数 insert )
警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode )
警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode )
エラー E2468 list.c 100: void 型の値は許されない(関数 appendProc )
警告 W8019 list.c 100: コードは効果を持たない(関数 appendProc )
エラー E2468 list.c 114: void 型の値は許されない(関数 deleteProc )
警告 W8019 list.c 114: コードは効果を持たない(関数 deleteProc )
エラー E2468 list.c 136: void 型の値は許されない(関数 main )
警告 W8019 list.c 136: コードは効果を持たない(関数 main )
*** 3 errors in Compile ***

359:デフォルトの名無しさん
08/02/22 04:01:06
>>358
コメントを消した状態ならこっちではANSI C準拠の設定でgcc通る(警告は出る)以上分かりかねる
bcc捨ててくれとしか言い様がない

使用したgccは以下
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)

360:デフォルトの名無しさん
08/02/22 04:21:12
これはbccのバグっぽい

361:デフォルトの名無しさん
08/02/22 04:24:08
多分三項演算子とfgetsの合わせ技でエラーになってんだろうな
bccだとvoid fgetsで定義されてるとかか?

362:デフォルトの名無しさん
08/02/22 04:26:26
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:本日正午まで(恐らく本日中であればなんとかなります)
[5] その他の制限:
なるべく自分でどうやっているプログラムなのか理解した上で提出した方がいいため、
if文やfor文使いまくりでもいいので、簡単なプログラムにしていただけると助かります。


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