あらあら、宿題なのね?

このエントリーをはてなブックマークに追加
1お母さん
麻衣の母、美砂子です。
宿題、判らないところがあったら、遠慮しないで聞いてくださいね。

えれなちゃんの前スレはこちら、
宿題、手伝おっか?
http://pc.2ch.net/test/read.cgi/tech/1011722640/
キーワードがわかっていれば、googleで探しましょうね。
http://www.google.co.jp/
>>3-1000
落第。
       ∧_∧
      ( ´Д`) 
     /    \
  __| | 落第 | |__
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
落第・・・(´・ω・`)ショボーン

 ママ〜 プログラム教えて〜
 \__  ______
      ∨    ∧_∧
           " ,  、 ミ   / ̄ ̄ ̄ ̄ ̄
            ゝ∀ く  < あらあら、宿題なのね?
           ∧_∧  |   \_____
        三  (    とノ
      三   /   つ |
     三  _ ( _  /|  |
        (_ソ(_ソ(_ )
6デフォルトの名無しさん:02/05/08 00:44
Σ(゚д゚lll)ガーン

・・・・ラクダイ
7デフォルトの名無しさん:02/05/08 00:47
>>5
(・∀・)イイ!
〜oノハヽo〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ^▽^) < 新スレおめでとうございまーす♪ 
= ⊂   )   \_______
= (__/"(__) トテテテ...

Σ(゚Д゚)
明日の朝までにCの初心者向けの宿題を作らなきゃならないんで
よろしくお願いします。何か無い?
11デフォルトの名無しさん:02/05/08 01:04
「スタックオーバーフローを起こすプログラムを作りなさい」
>>11
int main()
{
main();

return 0;
}
main()
{main();}
>>11>>10あて
15デフォルトの名無しさん:02/05/08 01:07
「スタックオーバーフローを引き起こすプログラムを鯖で実行したらどうなるか説明しなさい」
>>15
スタックがオーバーフローする。
たしかに
18デフォルトの名無しさん:02/05/08 01:13
セグメント違反で落ちる。かも。
つぅかサーバに依存。
>>10 生徒にかわぃぃ子はいますか
>>10
自分自身を表示するプログラムというのは?
>>20
それ。それ重要。
       ∧_∧
       ( ´Д` ) < >>10>>20の質問に答へろ!
      /,  /
     (ぃ9  |
2410:02/05/08 01:50
ぁゃιぃ子ならいます。
        ∧_∧
       /⌒ヽ )
      i三 ∪ ソウカ・・・
       |三 |
      (/~∪
     三三
ワラタ
27デフォルトの名無しさん:02/05/08 07:48
>>21
それはいわゆる自己印刷プログラムではなくて、
生徒の自画像を表示させるのですか?
28デフォルトの名無しさん:02/05/08 08:14
>>8
新スレ荒らしがこの板にもΣ(゚Д゚)
かおりんがプログラム板−>monazillaプロジェクト−>ツール開発−>新スレ発見率70%アップ−>しかし自動化された作業にむなしさを覚える−>マズー
宿題作りか・・・、そういや大学時代、作成と採点やらされたなぁ・・・
31:02/05/08 23:23
私も採点やらされてるわ・・・・
怜たんはいつぞやのスレのお兄ちゃんのようなのが好みなのかい?
33:02/05/09 09:06
今、喧嘩中でね・・・・・
34デフォルトの名無しさん:02/05/09 15:53
Lispの宿題です。次のような問題です。
1。リストpと自然数nを引数として、pのうち最初のn個の要素を除いた
リストを返す関数lowerを定義せよ。
2。リストpと自然数nを引数として、pのうち最初のn個の要素をもった
リストを返す関数upperを定義せよ。
Cではないですが、よろしくおねがいいたします。
>>33
ソウナノカ・・・
(defun lower (p n) (subseq p n))
(defun upper (p n) (subseq p 0 (1- n)))
37お母さん:02/05/09 18:16
>>34
あらあら、lispね。
まず、lispの再帰関数の基本形はわかるかしら?
課題1を例に説明すると、
(defun lower (p n)
  (cond
    ((= n 0) p)
    (t (lower (cdr p) (- n 1)))
    )
)
これが基本形ね。ポイントは、cond の中で n が 0 の時は関数を抜けて、
n が 0 以外の時は、n を 1 引いて自分自身(lower)を呼ぶっていう形に
なってることね。
流れを自分で追ってみると、うまく再帰してることが分かるかしらね。

課題2のほうも、基本は同じ。ただし、今度は cond の (t の部分
(シャレじゃないのよ)が、ちょっとだけ複雑になるかしら。

わからなかったら、またいらっしゃいね。
3834:02/05/09 18:43
>>36
>>37お母様
ありがとうございます。もう少し考えてみます。
39デフォルトの名無しさん:02/05/11 23:18
学校の宿題で、
入力として文字列が与えられ
それをもとに木をつくれとの事なのですが
どのようにすればいいのでしょうか?
文字列の解析の仕方は既に友人に教えてもらいました。
それと、当方プログラム歴3日です。
ソースコードを提出するので、動きそうであればいいのですが。


文章には
主部と述部があります。
主部が、名詞と形容詞みないになります。
例えば、「親切な名無しさんが宿題を教えてくれた」
とあった場合、
各単語がどういう品詞か分類する事ができます。
「親切な名無しさんが宿題を教えてくれた」は
「親切な名無しさん」「が」「宿題を教えてくれた」
に分けられます。
「親切な名無しさん」は
「親切」「な」「名無しさん」
にわけられます。
これらを木として保存しろと言う事だと思います。

言語はVBでお願いします
40デフォルトの名無しさん:02/05/11 23:19
すげぇお母ちゃんだな!
こんなお母ちゃんいたらいいのにな・・・
 ママン〜 抱っこ〜
 \__  ______
      ∨    ∧_∧
           " ,  、 ミ   / ̄ ̄ ̄ ̄ ̄
            ゝ∀ く  < あらあら、宿題を教えて欲しいのね
           ∧_∧  |   \_____
        三  (    とノ
      三   /   つ |
     三  _ ( _  /|  |
        (_ソ(_ソ(_ )
42デフォルトの名無しさん:02/05/11 23:49
宿題おねがいします。

エンロンの破綻について、
「コーポレートガバナンス」「マネーゲーム」の語句を使い
A4用紙2枚程度にまとめよ。
4342:02/05/11 23:52
>>39
VBで木?Cならできるけど・・・
とりあえず、ノードの構造体を作る。ノードは右と左の子へのポインタを持っていて、
その子もさらに子へのポインタを持っている。
NULLなら子はない。
キミの宿題なら、「ポーランド記法」なんかを検索してみるといいかもよ。

それとも俺の宿題と交換するかい?
44デフォルトの名無しさん:02/05/11 23:54
>>43
親へのポインタももっておいた方がよくない?
二分木検索とかならいらないけど。
なんか簡単なコードは無いでしょうか?
>>39
プログラミング歴3日でいきなり言語のパーサーをつくれとか、そういうことなのかな(-_-;)
VBって、メモリの動的割り当てできるの?
48デフォルトの名無しさん:02/05/11 23:57
>>47

b=30

dim a(b) as integer
struct node
{
  node* left,right,parent;
  char* str;
};
レポート作成のぱたーんらんげーじ
42<<
yhaooかgoogleで下の2つを検索。いくつかの文書をコピペ。
エンロン コーポレートガバナンス
エンロン マネーゲーム
5149:02/05/11 23:59
まちがえた。
node *left,*right,*parent;
だな。
52デフォルトの名無しさん:02/05/12 00:01
>>49
エラー
5352:02/05/12 00:01
>>51
それもエラー
5449:02/05/12 00:02
struct node *left,*right,*parent;

これでいい?ベターCなのね・・
>>12-13
C++ではmain関数を再帰呼び出しすることが出来ませんって言われました。
>>55
C++なんて使うな。
>>55
じゃあ速攻で違う関数よびなされ。
n個の値 a[0]、a[1]、a[2]、a[n-1]が与えられている時、
a[i]の順位rを求める。
順位は自分より大きいものの個数+1

どういうことですか?
58 書いてあるとおりです。
>>58
a[0] 〜 a[i - 1]とa[i + 1] 〜 a[n - 1]までのうちa[i]より大きいものの個数を
数え、それに+1する。それで終わり。
>>60
a[0] 〜 a[i - 1]とa[i + 1] 〜 a[n - 1]なんてややこしいことしなくても、
a[0] 〜 a[n - 1] でOK。
a[i] > a[i] は成り立たないに決まってる。
62デフォルトの名無しさん:02/05/14 11:29
バイオリズムで、身体・感情・知性が誕生日からそれぞれ周期23日・28にち・33日の正弦波に従うとき、今日の日付け(たとえば2002/5/10)と生年月日を入力したら、身体・感情・知性のそれぞれの要注意日を出力するプログラムを作りなさい。

C言語でおねがいします。宿題っていうか、講義の課題なんですが、いまいち閏年の処理はどうしたらいいのかわかりません。

おながいします。
64棄教者 ◆witdLTi2 :02/05/14 12:05
>>39
Bison/Flexを使え

%%
s: /* empty */
| sentence
;

sentence
: shubu jutsubu PERIOD
;

shubu
: keiyoushi meishi
;

...
%%
って構文規則を記述すれば簡単に構文木を生成してくれるYO!
65デフォルトの名無しさん:02/05/16 20:19
Pascalの質問です。
program jyou(input, output);
var a: integer;
begin
read(a);
a:=a*a*a*a*a;
writeLn(a)
end.
これでaの5乗が求められるはずなんですが…
aには整数が入ります。
>>65
で、答えはなんて出るのさ?
6765:02/05/16 20:31
これはサンプルでこれでちゃんと答えはちゃんと正しい答えがでます。
しかしスマートでないような…
とにかく入力されたaの17乗を求められるスマートな方法はありませんか?
68デフォルトの名無しさん:02/05/16 20:35
>>67
ループじゃだめなのか?
>>65
再帰関数でも書け。
7065:02/05/16 20:41
すみません。たとえばどうのように書くのですか?
( ´3`)ムーン
>>67
>>65のどこから17って数字が出てくるんだよ。まあいいや。
b := a*a*a*a;
a := b*b*b*b*a;
WriteLn(a);
これでいいだろ。
( ´3`)怜たんキスしよう・・・
7465:02/05/17 00:50
どうもお騒がせしました。
program pow(input,output);
var
a:real ;
b:real ;
function pow(x,y:real):real;
begin
pow := exp(y*ln(abs(x)));
end;

begin
writeln('変数 a に入れる値を入力して下さい');
readln(a);
b := pow(a,17);
writeln(b:10:0);
end.
これで問題解決です。

> >>65のどこから17って数字が出てくるんだよ。まあいいや。
それは…宿題だからです。(爆)
75:02/05/17 01:55
>>73に反応して登場)
....さて、次の問題はないかな?
76デフォルトの名無しさん:02/05/18 00:12
0以上9以下の整数をランダムにキーボードから入力するとき、全ての整数が少なくとも1回入力された時点でアラートを鳴らし、総入力回数を出力するプログラムを作成せよ
>>76
10個のBYTE配列用意。

文字は打ち込まれるたびに対応する配列要素をインクリメント。
配列を走査してすべてのフラグが立っていたらアラートならして
配列のΣ取って表示。
>>77
何故に BYTE 配列 ? 全ての正数が入力される前に特定の数字が 256 回
以上入力されたらダメじゃん。メモリも安くなったんだから、long に
しとけ。
>>78
ごめん、BYTEは忘れて。血迷った。
いや、配列は純粋にフラグにして別の変数で合計数えようかな〜って迷いながら書いてたから・・・。
size_t check ( int i ) {
 static int flag ;
 static size_t n ;
 n++ ;
 return ( ( flag |= ( 1 << i ) ) < 0x03ff ) ? 0 : n ;
}
後は自分で頑張ってね
81デフォルトの名無しさん:02/05/18 01:02
C言語でおねがいします・・・
配列は頭ではわかるんですが、プログラムの組み方がわかりません(泣)
82デフォルトの名無しさん:02/05/18 01:11
あげ
83:02/05/18 01:14
>>81
>>80はC言語だけどね。ビット演算はなじみないよね?
ところどころ抜いて書いておくから、□□□に何が入るか考えてみてね。

main(){
 int total = 0; /* 今までの総入力回数 */
 int num = 0; /* 10種類の整数のうち、何種類が既に入力されたか? */
 int check[10]: /* nが既に入力されていれば、check[n] = 1、でなければ0 */
 int i;
 int k;

 /* checkの配列の中身を初期化 */
 for(i = 0; i < 10; i++) □□□;

 while( □□□ ){
  /* kにキーボードから入力した文字を入れる */
  □□□

  if( □□□ ){ /* 現在入力した数がまだ、入力されていなければ */
   num++;
   □□□
  }

  total++;
 }

 /* アラートを鳴らし、総入力回数を出力する */
 (略)
}
84デフォルトの名無しさん:02/05/18 01:17
なるほど・・・ありがとうございます。
考えてみます。
できたら報告します。
85なんで無理?:02/05/18 02:03
#include<stdio.h>
main()
{

int total, n,che[10],i,k;

total=0;
n=0;

for (i=0;i<=9;i++){
che[i]=0;
}
do{
printf("0から9を入力して下さい\n");
scanf("%d",&k);

if(che[k]=0){
n++;
che[k]=1;
total++;
}
else (che[k]=1);{
total++;
n=n;
che[k]=1;
}
} while (n=9);

printf("\a");
printf("総入力数%d\n",total);
}
n=9
87デフォルトの名無しさん:02/05/18 02:07
n=n;

無駄なコードハケーン。
88なんで無理?:02/05/18 02:09
10にしても無理でした・・・
なんか何回入力してもつづくのですが・・・
89デフォルトの名無しさん:02/05/18 02:11
あのね。。。。
代入してるよ。。。
n = 9

( n = 9 ) != 0
91デフォルトの名無しさん:02/05/18 02:13
永遠ループハケーン!!!
while((n=9)!=0)
にしても無理でしたって言いそうだな…
93なんで無理?:02/05/18 02:15
わからん。
おれってあほすぎ・・・鬱
ぜひ言ってほしい
95デフォルトの名無しさん:02/05/18 02:17
代入文と比較は違うものだと思ってください。
そうすれば答えは出てきます。
96なんで無理?:02/05/18 02:17
くそう・・・上手い具合にヒントをくれるぜ。
しかし、わからんおれには意味不明(泣)
今度は、1回で終わってしまいますってか?
98なんで無理?:02/05/18 02:19
何が無限ループなんだ?いみわかんねぇ・・・
あと(n=9)!=0も??
>>96
この面白さを共有できないのは残念
100デフォルトの名無しさん:02/05/18 02:23
永遠ループあげ
永遠ループ・・・TTSを思い出すぜ・・・
elseの書き方もちょっと素敵。
こんどマネして周りを混乱させてみよう。
つーか、マジで分からんのか?
elseすげぇ!
思わず超え出して笑った!
本読みゃ終わるような単純知識で調子に乗って煽るなって。
なんか激しく馬鹿みたいだぞ。
永遠ループをいつまでも引っ張るのは確かに馬鹿っぽいが、
このelseを見て感動しないやつはプログラマじゃない
神のコードを書く男出現。
109デフォルトの名無しさん:02/05/18 02:40
まあ、能力の低い奴はそれよりもさらに低い奴を馬鹿にすることでバランスを
取ってるのはワカルケドサ(藁
どうでもいいが、>>85はなぜcheckをcheにしたんだろう……。
111なんで無理?:02/05/18 02:48
ネタにここまでくらいついてくるとは・・・バカはバカだなw
>>110
区分をkbnにする癖が抜けていなかった。
ネタにしちゃやけにバグだらけだな。
ネタであのelseが書けるやつにならつられても後悔しないぜ
コンパイラのエラーが出なくなった時の「やったぜ」って顔が見たい>else()の後の;
あり?コンパイルは通るかと思ったけど?
>>115はC初心者
118デフォルトの名無しさん:02/05/18 05:26
>>85 >>115 晒しage(w
119115:02/05/18 05:37
else(exper){ は { の前でparse errorになるだろ、で、悩んだあげく ; つけたら
コンパイル通っておおよろこび、ってこった。
そのぐらい想像できないやつは(以下略)
120116:02/05/18 05:55
>>119
あ、確かに・・・
すみませんでした(TдT)

コンパイラに「;が必要です」とか言われたんで
指示どおり;付けたんだね。きっと。
>>117-118を晒しsage
122デフォルトの名無しさん:02/05/18 18:57
まとめて晒しage
コンパイラはプログラマよりアホである。
なぜならプログラマより賢いとプログラマがいらなくなってしまうからである。
124デフォルトの名無しさん:02/05/18 22:49
1変数のマイナス演算子と2変数の減法演算子との異なる点を挙げよ。
っていう問題を教えてください.
こまってます
本気で回線切って首吊れ
こぴぺもうざい。
127デフォルトの名無しさん:02/05/18 22:52
粘着質
>>124
まず自分がどう思っているかを挙げよ。
そして宿題ができないとどうなるか述べよ。
話はそれからだ。
>>123
そうか?レジスタ配置なんぞ芸術だぞ。
よく言われるコンピュータとユーザの違いじゃないの?
130デフォルトの名無しさん:02/05/18 22:55
てごわいと思ってる。宿題忘れになる
131デフォルトの名無しさん:02/05/18 22:56
はやくおしえろ
132デフォルトの名無しさん:02/05/18 22:57
この世界でしか相手にされないんだから、たのむよ。これが終わったらもうこねーからよ
133デフォルトの名無しさん:02/05/18 22:58
>129
じゃ、キミはコンパイラより仕事してないって事でいいか?

文字列閉じ忘れ時のエラーメッセージは「アホやなー」とか思うな。
134デフォルトの名無しさん:02/05/18 22:58
彼女がこまってんだよー
135デフォルトの名無しさん:02/05/18 22:59
まったく粘着質だなー
136デフォルトの名無しさん:02/05/18 22:59
まだかよー
>>133
コンパイラにソースいじられるくらいなら自分で直した方がまし。

あなたのコードには8つのエラーがありましたが復旧しました。

とかがお好み?
138デフォルトの名無しさん:02/05/18 23:03
おまえらいいかげんにしろ!はやくおしえろ!
139デフォルトの名無しさん:02/05/18 23:07
まあ俺はVCを勧めるがな
140デフォルトの名無しさん:02/05/18 23:08
shukudaihayakuosiero
141デフォルトの名無しさん:02/05/18 23:09
俺が相手してやるからよー、ひきこもりなんだろ?
142マルチ死すべし:02/05/18 23:10
ここまでやったら絶対にここの住人は答えません。
おまえ歳はいくつだ。と。
常識をわきまえろ。と。

たとえて言うなら、
彼女が10人いて、内 3人が隣の部屋の 3姉妹、
残りのうち 5人は同じ階の住人。
1人は 3姉妹の母親。
母親以外同じ学校で、6人は同じクラス。
最後の一人は担任。

というのと同じような行為。
これでもオッケーならおまえは精神異常者。
とにかく回線切って首吊れ。
>>142
夢みたいだな
彼女に聞かれて分からないといえない立場におまえはない。
その程度の頭脳のやつなら彼女も期待してないよ。

もし期待してたら彼女もパープリン(w
ってことだ。
145デフォルトの名無しさん:02/05/18 23:13
実際にあったら、142はこんなこと人に言えない奴なんだろーなー。
実際にあってみて−よ、どうせもやしっこなんだろーな
146デフォルトの名無しさん:02/05/19 00:05
>>124
利用されていることに気付け


===========================ゴミが涌くので終了===============================
147デフォルトの名無しさん:02/05/19 00:09
>>124
>1変数のマイナス演算子と1変数のマイナス演算子との異なる点を挙げよ。
>っていう問題を教えてください.
>こまってます

教えるからさっさと消えろ
今後は聞き方に注意するように
マルチポストは厳禁

1変数のマイナス演算子は浮動小数点がからむので、画像処理などの処理が速い。
1変数のマイナス演算子ではバイオスレベルでのアクセスが必要なので、速度的にはかなり不利。

#もう来るな

148147:02/05/19 00:14
1変数のマイナス演算子は浮動小数点がからむので、画像処理などの処理が速い。
2変数の減法演算子ではバイオスレベルでのアクセスが必要なので、速度的にはかなり不利。

間違った訂正
149デフォルトの名無しさん:02/05/19 00:19
>>148
マジレスすんな氏ね
放置でいいんだよこういう厨房は
プログラマはいつでもコンパイラに勝てる。
なぜならプログラマはコンパイラの出すコードを見て
改良すれば良いから。
>>150
それが面倒だからみんなコンパイラに頼るのさ。
>>151
ニヒルだね。
ニヒルって、意訳すると「不気味カッコイイ」だよね?
>>151
ダンディだね。
>>154
俺も思った。
もっとも、俺は再放送世代だがね。
>85
代入する時は
 n = 3;
比較する時は
 n == 3;

if文は
 if(〜){
  ;
 }else if(〜){
  ;
 }
157デフォルトの名無しさん:02/05/19 04:19
Consider the grammar G= ({S,D},{0,1},S,P)
where P consist semantic rules,

S->S1D
S->D
D->0
D->1

S.v=2*S1.v + D.v
S.v=3*D.v
D.v=2
D.v=1
LR(K)

1.Write program, any language you want, VALUE of an input binary string
is returned. Your program must be based on the LR(k) method.

2.Write program, any language you want, PARSE TREE of an input binary string
is returned. Your program must be based on the LR(k) method.

この2つのプログラムをどうやって書けばいいのかわかりません。
どなたかヒントでもいいので教えてください。コンパイラの
問題でLR(K)のプログラムを、CかC++で書かないといけません。
2進数を10進数に直す問題なんですが・・・
お願いします・・・


>>157
S1.vってなんだよコ゛ラァ
nonterminalにもterminalにもS1ってねーじゃねえか。
159デフォルトの名無しさん:02/05/19 04:48
>>158
すいません、説明がなっていませんでした。
    s
/ \
/ D
s1 D |
/\ \ 0
s2 D 0
/\
s3 D
| |
D |
| |
1 0

上のように、S1は木が下にくるごとに、s2,s3と大きくなっていくんです。
ですから、
S->SD or D
D->0 or 1
と同じことなんです。まぎらわしくかいてすいませんでした。
お願いします・・・

160デフォルトの名無しさん:02/05/19 04:53
ずれてる・・・
s
/ \
/ D
s1 D |
/\ \ 0
s2 D 0
/\
s3 D
| |
D |
| |
1 0

S->SD or D
D->0 or 1

はわかるのですが、

S.v = 2 * S.v + D.v の部分は二進数から10進数に直すというのは
わかるのですが、

S.v= 3 * D.vのところが何を意味してるのかわかりません。
ご教授おねがいします。
>>161-162
おまえらこれくらい脳内で補完して読めよな
>137
いいねーそれ。詳細表示ができたりするともっといいねぇ。

てめーのコードが気にくわねー!
こっちの方が10倍早くてエレガントだ!

とかやってくれるコンパイラ希望。

>>160
オレにもよくわからん。
http://watalab.cs.uec.ac.jp/OBandG/fukuda/semi/attr.htm
このへん、参考になるかね。
構文木?
なんにしても難しい質問が来たもんだ・・・
ドラゴン・ブックとかかなぁ。そういうのは。
168デフォルトの名無しさん:02/05/19 10:00
ドラゴンブックねあったねー
友達の少しみたことあるけど
まったくわからんかった。
コンパイラの勉強とはむずかしいのう
169デフォルトの名無しさん:02/05/19 14:07
あるクラスオブジェクトへのポインタ
CClass* pClassObj1;
CClass* pClassObj2;
を参照でなく値渡し(メモリの別の場所に)コピーしたいのですが、
*pClassObj1 = *pClassObj2;
でコピーできるのでしょうか?

また、あるクラスオブジェクト
CClass ClassObj1;
CClass ClassObj2;
も同様に参照でなく値渡し(メモリの別の場所に)コピーしたいのですが、
ClassObj1 = ClassObj2;
とすると参照(ClassObj1とClassObj2が同じのもを指し示してしまう)と
聞いたのですが、ではどうすれば別々にコピーできるのでしょうか?

よろしくお願いします
> ClassObj1とClassObj2が同じのもを指し示してしまうと聞いたのですが

C++ならがせネタ。
ってか宿題なのか?
171:02/05/19 14:35
>>157
私も詳しくないんだけど、一応答えようとしてみる。

S->S1D
って、S1っていう文字ってこと?
S+"1"+Dって意味でなくてでいいんだよね?

んん・・、2進法から10進法とか、そういう意味あるのかな。
深く考えないでとにかく実装してみればいいんじゃないかな?
最後の一文字をDとしてのけて、残りを再帰的評価という感じで。

もし意味を考えるとすると・・、というか今考えてみたんだけどよくわらかない。
1 = 3
0 = 6
11 = 7
10 = 8
01 = 13
00 = 14
111 = 15
。。何か意味があるのかな? それとも私の解釈間違ってるのかな。

>>169
コピーコンストラクタとか、その周りは理解してる?
172:02/05/19 14:50
 んー、よく見たらLR(K) Methodとか書いてあるね・・。これ解釈一通りし
かなさげだけど、適当な事いってそう。あとで調べてみるから、ちょっと無
視してくれると嬉しいな。
173デフォルトの名無しさん:02/05/19 15:06
ハァハァ・・・レイたん(;´Д`)
174阿呆:02/05/19 15:14
マージソートの併合部分、つまりあらかじめ昇順にソートされた2つの
実数系列を併合して全てを昇順にソートするプログラムを作る宿題を
出されました。
とりあえず↓のようなプログラムを打ってみたんですが動きません…
っていうかコンパイルしても何処がエラーなのか表示されないんですよ。

#include<stdio.h>
void Marge(int i, int j, int A[]);
main()
{
int i=0,j=9;
int A[]={1,3,6,7,8,2,4,5,9,10};
Marge(i,j,A);
for(i=0;i<10;i++)
printf("%d ",A[i]);
}
void Marge(int i, int j, int A[])
{
int h,k,l,m,mdl=(i+j)/2;
int B[10];
for(k=0;k<10;k++)
B[k]=A[k];
for(k=i,h=mdl+1,l=0;(k<=mdl)&&(h<=j);l++){
if(B[k]<B[h]){
A[l]=B[k];
k++;
}
else{
A[l]=B[h];
h++;
}
}
for(m=(h=j)?k:h;m<=(h=j)?mdl:j;l++,m++)
A[l]=B[m];
}

ちなみに配列Bの10という大きさは仮です。
それ以外に方法が思いつかなかったので…
夜にまた来ますのでよろしければ誰か教えてください…
>>171
怜たんの解釈であってるんじゃないかと思う。
「2進数を10進数になおすプログラム」じゃなくて、
「binary stringから(ある決められた規則で求まる)値を計算するプログラム」
だと思う。

あとは、LR(k)にするやり方だが、yacc使う、というのは無しなのかな。

手で書くなら、状態遷移表を作るより、状態をラベルにしてgotoか
switchでやる方が人間には分かりやすいと思う。

state = S0;
while (token() != NOTOKEN) {
 switch (state) {
 case S0:
  ...
  state = S1;
  break;
 case S1:
  ...
 }
}
みたいな感じで。
先読み字句の数kが1より大きく必要なら、
ずっとk個持っとくよりも、必要に応じてpushbackで戻すように
した方が楽だと思う。
>>172
Margeをmergeに変えれば動くかも。

あと、配列は2つ引数で与えて1つ返すようにしろ。
それから、実数を扱うのに整数配列使うな。
177176:02/05/19 15:29
>>172じゃなくて>>174
178デフォルトの名無しさん:02/05/19 15:55
>>174はクイックソートとマージソートをごっちゃにしてると思われる。
179デフォルトの名無しさん:02/05/19 17:13
その文法は2真数から10進数変換っていうのはなんとなくわかる。
1010 = 10 = (2^3 * 1) + (2^2 * 0) + (2^1 *1) + (2^0 *0)
で10になる、これはS.v=2*S1.v + D.v
のルールを満たしてるから10進数への変換とわかる。
けどS.v=3*D.v
ってなに?これは何を意味してるの?16進数変換でも8進数変換でも
ないみたいだし。
なぞじゃ。
S1ってのは
上でも言ってるけど
S->SD or D
D->0 or 1
と同じことなんでしょ?


180デフォルトの名無しさん:02/05/19 21:21
うん
181阿呆:02/05/19 22:42
>>176
マージのスペルミスは皮肉と受け取っておきます…
すいません、でも
>あと、配列は2つ引数で与えて1つ返すようにしろ。
ここの意味がよくわかりません。
とりあえず配列はdoubleで宣言したほうがいいんですね?
182阿呆:02/05/19 22:43
>>>178
クイックソートって基準値より上か下かでソートするやつですよね?
いちおうそれとは区別してプログラムしたんですけど…
>>182
>クイックソートって基準値より上か下かでソートするやつですよね?
50点。
>>181
マージソートとはどういうことか説明してみ
185阿呆:02/05/19 22:57
>>184
うーん、データ列を分割してそれぞれソートしてから
併合してソートする方法?
なんか日本語おかしいような…
>>185
まず教科書読み直せ(笑)
別名勝ち抜き選手権ソート。
>>185
仕様もわからんと作り出してはいかん。
189阿呆:02/05/19 23:03
>>186
えぇ!?そんなに的はずれなこと言ってますかね?(;´Д`)
そういえば授業でも”トーナメント法”とか言ってましたね。
ちなみに>>174はマージソート全部じゃないですよ。
併合部分だけプログラムしてくる宿題なんです。
>>189
なんだかなあ(´д`;)
その併合部分だけをマージソートっていうんだよ。
191阿呆:02/05/19 23:06
>>190
??
教科書によると
「データ列を複数のデータ列に分割し、個々のデータ列を整列し、併合する物」
とありますが…
192デフォルトの名無しさん:02/05/19 23:10
>>191
それであってるよ
阿呆は>>190
そだね、ソートしてない物をマージしても良い結果は出ない。
しまった、墓穴
要素長1の列は常に整列済みとみなせる。
あとは倍々ゲームで元のデータ全体に達するまで併合すりゃできあがりっしょ
typedef struct {
    int year;
    int month;
    int day;
} BirthDay;

static BirthDay birthDay[] = {
    { 1990, 1, 28 },
    { 1986, 4, 1 },
    { 1995, 3, 3 },
    { 1945, 7, 4 }
};

// ↑こんなデータを併合してソートするんじゃないの?
197阿呆:02/05/19 23:15
今、とりあえず配列宣言をdoubleにしてみたらいちおう動きました。
ただ、結果が
「1 2 3 4 5 6 7 8 2 4」
になってしまいました。
for文を抜けるとこのhの値は初期化されてしまうんですかね?

あと配列Bの大きさのよい宣言の仕方を教えてください…
>>195
バブルソートのようなにおいがするソート。
199デフォルトの名無しさん:02/05/19 23:18
>>195
要素長1まで分割しちゃったらバブルソートのオーダと同じになってしまわないか?
間違ってたらスマソ
200デフォルトの名無しさん:02/05/19 23:23
わかってるつもりの事って意外とわかってないもんだな…
この程度の宿題に少しとまどってしまった俺…
>>199
倍々ゲーム( 1+1 → 2+2 → 4+4 と処理 )なので O(n log n) でしょ
>>201
クイックソート並みに効率が良いことに・・・。
203199:02/05/19 23:24
>>201
その通りですね。
やっぱ間違いでした。スマソ
>>200
全くだ…
みんな>>174を考え中?
206デフォルトの名無しさん:02/05/19 23:28
>>205
面倒だからやらないだけです
>>205
違う。TOTOで一等とる方法。
208阿呆:02/05/19 23:29
>>206
そこをなんとか
209デフォルトの名無しさん:02/05/19 23:31
>>207
3^13
>>199
マージ1段階がO(n)で、log{2}n 段だから、全部でO(n*log n)だよー
クイックソートやヒープソートと同じオーダーだよー
>>174 のコードは面倒だから追ってないが、
倍々ゲームにするなら、再起または2重ループが必要だが
どっちにもなってないから駄目なんじゃないか、と適当に言ってみる。
212210:02/05/19 23:32
思いっきり出遅れた…鬱出汁脳
213デフォルトの名無しさん:02/05/19 23:33
>>211
>>174は併合部分だけらしいから再帰は必要ないでしょ
併合部分だけなら、テスト入力データは整列済みの2列になってないといかんのでは。
配列aにn1個, bにn2個のソートされた要素が
入っているとする。それをマージしてcにn1+n2個のソートされた
配列を入れる関数
void merge(double a[], int n1, double b[], int n2, double c[])
があるとする。

それを使うと関数void merge_sort(double a[], int n)は

void merge_sort(double a[], int n)
{
 if (n > 1) {
  int n1 = n / 2;
  int n2 = n - n1;
  int i;
  double c[n];

  for (i = 0; i < n; i++) {
   c[i] = a[i];
  }
  merge_sort(c, n1);
  merge_sort(c + n1, n2);
  merge(c, n1, c + n1, n2, a);
 }
}
と書ける。(コピーしないですむ方法あるのかな。)
おいおい。クイックソートのオーダーはO(n^2)だぞ。
O(・)は最悪時の場合をいうことに注意.
217阿呆:02/05/19 23:55
>>214
配列A[i〜j]の整列済みのデータは
一次元配列Aのi〜mdlまでとmdl+1〜jまでに
分けて入れられていることになってるんです
218阿呆:02/05/19 23:57
>>215
>配列aにn1個, bにn2個のソートされた要素が
>入っているとする。それをマージしてcにn1+n2個のソートされた
>配列を入れる関数
>void merge(double a[], int n1, double b[], int n2, double c[])
>があるとする

「あるとする」で良ければ俺の宿題もすぐ終わるんですけどね…
>>215
>  double c[n];
これってC99?
220デフォルトの名無しさん:02/05/19 23:59
>>215
>>174はそのmergeを作る宿題なんじゃないのか?
221阿呆:02/05/20 00:02
若干手直ししてみました。

#include<stdio.h>
void merge(int i, int j, double A[]);
main()
{
int i=0,j=9;
double A[]={1,3,6,7,8,2,4,5,9,10};
merge(i,j,A);
for(i=0;i<10;i++)
printf("%lf ",A[i]);
}
void merge(int i, int j, double A[])
{
int h,k,l,m,mdl=(i+j)/2;
double B[255];
for(k=0;k<(j-i+1);k++)
B[k]=A[k];
for(k=i,h=mdl+1,l=0;(k<=mdl)&&(h<=j);l++){
if(B[k]<B[h]){
A[l]=B[k];
k++;
}
else{
A[l]=B[h];
h++;
}
}
for(m=(h=j)?k:h;m<=(h=j)?mdl:j;l++,m++)
A[l]=B[m];
}

でもこれだと
結果が
「1 2 3 4 5 6 7 8 2 4」
になっちゃうんですよね。
for文中でインクリメントした値は
ループを抜けるとその初期化されてしまうんでしょうか?
>>阿呆
じゃあ仕様をもう少し考えろや
引数が配列1個じゃどうしようもないことを
説明してやってるってのによ。

mdlの意味なんざ先にいえ。知るか。もう勝手にやれ。

>>220
merge自体を作ったら答教えてるのとおんなじじゃん。

>>219
21世紀になってC99でないC使ってる原人は氏ね。
バカ。もう知らないから!
>>阿呆

質問したのなら人の話を少しは聞け…(泣
224阿呆:02/05/20 00:06
>>222
すいません、引数に使う配列は1コという指定なんですよ…
mdlはデータ列の真ん中の値のことです。
プログラムを見ればわかっていただけたかもしれませんが
最初に説明するべきでした。
いろいろ説明不足で大変申し訳ありません。
225阿呆:02/05/20 00:08
>>223
すいません、
どれかレスが漏れてしまったでしょうか?
僕なりに反芻して取り入れているつもりです。
質問者の立場でありながら度重なる失礼、まことに恐れ入ります…
226デフォルトの名無しさん:02/05/20 00:09
>>222
どうどう

>>225
まぁこういう業種の人たちは気むずかしい人が多いから…
>オレモナー
227デフォルトの名無しさん:02/05/20 00:10
本当に阿呆だな
228219:02/05/20 00:09
>>222
(´・ω・`)ショボーン
229デフォルトの名無しさん:02/05/20 00:12
>>222
別に引数に使う配列は1コでも大丈夫でしょ。
コピーする配列は関数内で定義すればいいんだし。
事実、>>221でほとんど出来てる
230デフォルトの名無しさん:02/05/20 00:13
まぁプログラムに「これが絶対の正解」というのはないからな。
より最適なものを作り出すのが俺たちの仕事なわけだから。
231219:02/05/20 00:13
>>221
hにjを代入してるねー
232デフォルトの名無しさん:02/05/20 00:17
>>231
!!
そうでした!
比較の場合は”==”ですよね!
あーこれでようやく完成です。
こんなくだらない宿題につき合ってくださったみなさん、
本当にありがとうございました!
233阿呆:02/05/20 00:20
>>232=僕です。
本当にどうもです!>ALL
234デフォルトの名無しさん:02/05/20 00:21
>>232
がんばれよ、プログラマの卵
        /⌒彡
        /冫、 )
        / `  ∩ ))
    (( (つ  丿
      ( ヽノ
      し(_)
236豆。:02/05/20 14:04
C言語なんですけど、1〜10までの数字の総和、平均、最大値、最小値を
求めるプログラムが宿題で出てるんですけど、教えてくれませんか?
>>236
大学生だろ?それくらい自分で書いてくれ。
>>236
void main()
{
printf("1から10間での総和は 55 です。\n");
printf("1から10間での平均は 5.5 です。\n");
printf("1から10間での最大値はは 10 です。\n");
printf("1から10間での最小値は 1 です。\n");

}
239デフォルトの名無しさん:02/05/20 20:12
肝心な関数のところが書かれてないなんて素敵
>>239
コンパイルしちゃえば取りあえずはばれない。
バイナリを見ると大抵テキストはそのまま見える
int i;
float tmp;
for(tmp = 0.0f,i = 1;i <= 10;i++)
tmp += i;
printf("総和 %.0f\n", tmp);
printf("平均 %.1f\n", tmp/10.0f);
printf("最大 10\n最小 1\n");
>>236
全部定数やん
>>243
>>238見てから反省して下さい。
245こんなかんじでどうよ?:02/05/20 21:13
#include <stdio.h>
#include <stdlib.h>

/* tree node */
typedef struct tnode_type
{
struct tnode_type* left;
int prod;
int digit;
int value;
struct tnode_type* right;
}TNode;

/* tree function prototypes */
void print_tree(TNode* tnode, int level);
TNode * make_node(int prod,int value, TNode* left, TNode* right);


/* ll parser function prototypes */
void S();
void D();
void next();
void error(int ch);


/* shared variables */
int ch;
int sv=0,dv=0;
TNode* tree=NULL;
TNode* dnode=NULL;

// driver
int main()
{
ch = getchar(); /* get first digit */

S(); /* parse statement */

printf(" value = %d\n",sv); /* print out result */

printf("look!!\n");
print_tree(tree,0); /* print tree (look side ways) */
putchar('\n');
return 0;
}


246こんなかんじでどうよ?:02/05/20 21:13
// statement
void S()
{
while(ch!=-1)
{
D(); /* check for digit */
sv = 2 * sv + dv; /* calculate sv */
tree=make_node('S',sv,tree,dnode);
}

}


// digit
void D()
{
if(ch == '0' || ch == '1')
{
dv=ch-'0';
dnode=make_node('D',dv,NULL,NULL);
putchar(ch);
next(ch);
}
else error(ch);
}

/* get next character */
void next()
{
ch = getchar();
while(ch=='\n'||ch=='\r')
if(ch!=-1)ch=getchar();
}

/* error handler */
void error(int ch)
{
printf("character %c not expected: ",ch);
exit(1);
}
247こんなかんじでどうよ?:02/05/20 21:14

/* tree functions */
TNode * make_node(int prod, int value, TNode* left, TNode* right)
{
TNode* tnode = malloc(sizeof(struct tnode_type));
tnode->prod=prod;
tnode->value=value;
tnode->left=left;
tnode->right=right;
return tnode;
}


/* print tree */
void print_tree(TNode* tnode, int level)
{
int i;
level++; /* increment level */
if(tnode != NULL)
{
print_tree(tnode->left,level);
for(i=0;i<15-level;i++)
printf(" ");
printf("%c %d\n",tnode->prod,tnode->value);
print_tree(tnode->right,level);
}
level--; /* decrement level */
}

248219:02/05/20 21:20
template<int T> inline int sum_to() {
 return sum_to<T-1>() + T;
}
template<> inline int sum_to<1>() {
 return 1;
}

1から10までの和は、sum_to<10>() で GCC -O2 -S で見たら定数55に展開された。
>>248
ぜひ
T*(1+T)/2
を使用してください
250219:02/05/20 21:32
>>249
いや、あえてアホなことを面倒な方法でやってみただけ(w
<>
252質問:02/05/21 00:33
Buttonクラスを使用したプログラムを作成しなさい。題材は各自で自由に決めてよい。また、Button以外のコンポーネントを自由に組み合わせてもよい。クラス図とシーケンス図を作成することが望ましい。
253デフォルトの名無しさん:02/05/21 00:34
Javaはワカラソ
>>252
なんかその宿題見たことあるような・・・
>>252
お前、自由研究くらい自分でやれって。
256252:02/05/21 00:59
>>254
同じ大学だたーりw
>>255
全くわからないのですまんかった。
( ´3`)怜たんキスしよう・・・(´д`)えっ…
ムーン( ´=======3  (´д` )イ、イヤ…
ブチュゥ( ´=============3´д` )アン… 
260デフォルトの名無しさん:02/05/21 15:27
宿題じゃないけど教えてくれさい。
1(2)の補数がどういうものかはわかるんだけどなぜ1(2)の補数と
呼ばれるかおしえてくれさい。
>>260
一般にn進法には「n-1の補数」と「nの補数」が存在する。
「n-1の補数」は、「各桁の数字をn-1から引いたもの」だ。
例えば、10進数3758の9の補数は6241。ここまでは別に
無理なかろう。

「nの補数」ってのは「n-1の補数に1を足したもの」と定義
される。例えば、10進数3758の10の補数は6242だ。(足して
みると1万になる)。

で、これがなんで「nの補数」と呼ばれるかというと、「n-1
の補数」との語呂合わせとしか言いようがない。

ちなみに、英語では、2の補数を"two's complement"と書くのに
対して、1の補数は(各桁ごとに1の補数をたくさん取るから複
数形で)"ones' complement"と書くのが正しい。

262デフォルトの名無しさん:02/05/21 15:42
うおー完全に理解しました。ありがたふ
誰か折れの補数を取りたいやつはいないか?
勉強になるでごわす
補数は歩数からきたの?
for文を使ってa〜zまでを出力するプログラムを
教えて下さい。
for (i=0; i<1; ++i) {
printf("abcdefghijklmnopqrstuvwxyz");
}
for (i=0; i<26; ++i) {
putchar("abcdefghijklmnopqrstuvwxyz"[i]);
}
for (i = 0; i < 26; i++) {
putchar(i["abcdefghijklmnopqrstuvwxyz"]);
}
int i;
for(i = 0;i < 26;i++) cout.put('a'+i);
for (puts("abcdefghijklmnopqrstuvwxyz");0;)
全員鬼(w
char buf[]="a";
for(int i=0; i<26; i++ )
{
 buf[1]++;printf("%s", buf);  
}
あ、失敗。
buf[1]++;printf("%s", buf);

printf("%s", buf); buf[1]++;
ダネ
>>274
それを書くなら buf[0]++; だろ。
segmentation fault起きるぞ。どっちにしても。
276 :02/05/21 21:53
レジスタ GR0 の内容を 10進数で表示するサブルーチン OUTDEC を作成しなさい。

メインプログラムでレジスタ GR0 に値を格納して,作成した表示ルーチンを呼び出して下さい。なお、OUTDEC とメインプログラムは、別々のファイル (outdec.cas, main.cas) に作成すること。
>>275
buf[0]++なら起きないんじゃない?
char *bufじゃなくてchar buf[]と宣言してるから。

いずれにせよ>>270>>274は文字コード依存という罠。
278273:02/05/21 23:34
なんで、277はbuf[1]++だとSegFaultになると思いますカ?
>>278
buf[1]は定義されてないだろ。厳密には'\0'だろうが。
printf("%s", buf); とやった時点で、何が起きるかわからない。
>>270>>274はEBCDICでは動作が不定となる。
ん?ああ、マルチバイト文字(2バイトのつもりなんだろな)を
char配列にいきなり書いちゃうってことか。

うー、今までは「文字コード依存だけど実はたいてい動く」
と思ってたんだが、それだといきなり未定義動作...
今時EBCDICとか、
未定義動作とか
ぐちゃぐちゃいう香具師は、
正直、fj逝ってくれよ、と思う……
ルールなしのパズルは面白くないよ。
JAVAですが、以下のような課題です。

50個のデータを保持できるスタッククラスを作成せよ。
ただし、Javaの配列宣言は以下の通りである。
int buf[] = new int[50];

また、このスタックを利用して、与えられた50個以下の
整数列を逆順にするプログラムを作成せよ。

Javaは初めて触ったので皆目見当がつきません。
よろしくお願い致します。

class StackClass{
private int buf[] = new int[50];
private int index = 0;
public void push(int n)
{
if(index < 0 || index >= 50)
index = 0;
buf[index++] = n;
}

public int pop()
{
if(index < 1 || index >= 50)
index = 1;
return buf[--index];
}
}
こうか?
スマン俺もjavaなんてやったことないからわからない
しーらないっと(;゚3゚)〜♪
285ちーん:02/05/22 15:32
-|z|<(x-a)^2+(y-b)^2<|z| を満たす整数(x,y)の組の総数を返す関数を作成しなさい。

c言語でおながします。

やりかたがサパーリわかりません。
286ちーん:02/05/22 15:35
#include <stdio.h>
main()
{
int x,y;
float z,a,b ;

printf("z=?\n");
scanf("%f",&z);
printf("a=?\n");
scanf("%f",&a);
printf("b=?\n");
scanf("%f",&b);

((x-a)*(x-a)+(y-b)*(y-b))*((x-a)*(x-a)+(y-b)*(y-b))<z*z

ここまでは書いたんですけどね。
285
一つ聞こう?
aとbは複素数なのか
その式変と思わんカッタか?
>>285-286
-sqrt(fabs(z)) + a < x < sqrt(fabs(z)) + a
-sqrt(fabs(z)) + b < y < sqrt(fabs(z)) + b
の範囲でxとyを動かし、
(x-a)^2+(y-b)^2 < fabs(z) となる(x,y)の組を見つけるだけだよ。
289ちーん:02/05/22 15:48
>>287
もともと3乗の問題で、それを2乗にかえて出題したためこういうことがおこったそうです(^^
290ちーん:02/05/22 15:50
sqrtは平方根ですよね?
??
>>290
これは、図形的に解釈すると、(x-a)^2+(y-b)^2=|z|という円の方程式の中に
当てはまる(x,y)の組を見つける問題だからだよ。
この円の半径は、sqrt(abs(z))となるよ。
292do?f?l:02/05/22 16:03
コマンドラインに指定したプログラムファイルの中身を
表示するにはどうしたらいいでしょうか。

例えば
% 実行形式ファイル名 表示したいファイル名

みたいな。
293ちーん:02/05/22 16:15
わかりました・・・ありがとうございました>291さん
294292:02/05/22 16:25
ちなみにC言語です。
#include <stdio.h>
#include <ctype.h>
int main(int argc,const char **argv)
{if(argc == 2){FILE *fp = fopen(argv[1], "rb"); int c;
if(fp == NULL) return 1;
while((c = fgetc(fp)) != EOF)
putchar(isprint(c)?c:'.'); fclose(fp);}return 0;}
>>292
1バイトずつ読んで出力せよ
297276:02/05/22 16:41
caslIIれす。。。
298292:02/05/22 17:13
うっ…

れ、レスありがとうございます。
Cの勉強を始めたばかりの自分には
少し難しかったですが、なんとか理解出来ました。

ところで
putchar(isprint(c)?c:'.');
って所は

putchar(c);
ではいけないのでしょうか?
>>298
バイナリエディタでは不可視の文字は . に置き換えられるでしょ?
>>292
問題ないと思う。
ただputchar(isprint(c)?c:'.')のほうがプリント可能キャラクタかチェックして出力しているので、>>295はより実践的。
>>298
もしバイナリ開いて0x07がきたらやかましくなるぞ。
302298:02/05/22 17:41
なるほど。
fopenのモード指定を"r"にして
テキストエディタのみで使うのなら問題無いってことなのでしょうか?
303デフォルトの名無しさん:02/05/22 17:47
>>301
Alarm('\a')?
>>302
フールプルーフ(fool proof)って知ってるか?
マーフィーの法則なら知ってるか?
305さくら:02/05/22 18:30

64*64の2次元配列に1/0の2値を持ったものを画像とし、
この画像を拡大する関数ExpandImage()を作ってみました。
しかし微妙にバグってるところが幾つかあるようなのです。
かなり考えたんですけど、もう限界です。
どなたか、誤りを訂正していただけないでしょうか。


int ExpandImage(int image[][64])
{
int x1, x2, y1, y2, n, i, i1, i2;
double mgnH, mgnV, dH, dV;
int tmpImage[64][64];

// 画像の4隅の座標を得る関数
zahyou(&x1, &x2, &y1, &y2, image);
x1 = 32-x1; x2 = x2-32;
y1 = 32-y1; y2 = y2-32;
dH = (x1+x2)/2; dV = (y1+y2)/2;

// 拡大倍率計算
mgnH = 32.0/dH; mgnV = 32.0/dV;

// 横拡大
i1 = 1;
for(i=0; i<dH; i++){
i2 = (i+1)*mgnH;
while(i2 >= i1){
for(n=0; n<64; n++){
tmpImage[n][33-i1] = image[n][33-i];
tmpImage[n][32+i1] = image[n][32+i];
}
i1++;
}
}
// 縦拡大
i1 = 1;
for(i=0; i<dV; i++){
i2 = (i+1)*mgnV;
while(i2 >= i1){
for(n=0; n<64; n++){
image[33-i1][n] = tmpImage[33-i][n];
image[32+i1][n] = tmpImage[32+i][n];
}
i1++;
}
}
}
線がランダム入るのか、ドットが四角く等間隔ではいるのか
まったく動かんのか?
>>288
それはあんまり頭イイ方法とはいえないんじゃないかな。
ブレゼンハムでがんばれ
309デフォルトの名無しさん:02/05/22 21:15
C言語で
abc def ghi jkl mno
のようにスペースで区切られた単語を前から読んでいく時
終わりはどうやって指定すればいいんですか?

例えば上の単語列のファイルがあるとして
(今やってる問題は構造体なので)

for(i=0;???;i++)
fscanf(fp,"%s",data[i].name)

なんて感じにしたいのですが、ループの終了をどうやって
指定すればいいのかわかりません・・・
おねがいしまーす
310デフォルトの名無しさん:02/05/22 21:18
>>309
\nまたはEOF
311309:02/05/22 21:20
この場合何が \n または EOF になれば終了とすればいいんでしょうか?

for(i=0;i<100;i++){
fscanf(fp,"%s",data[i].name);
if(data[i].name == EOF)
break;
}

とやっても上手くいかなかったんですが・・・
312さくら:02/05/22 21:27
>>305
1.一番上の行にドットがあるべきなのに、全くない。
2.一番左の列がずれているように見える。
3.1,2行(列)分余計に拡大している。

このような問題があります。
>>311
Cの本とか読んでる?初歩の初歩だよ。
314ハァハァ:02/05/22 21:34
(;´Д`)さくらタン
C言語はじめて一週間なのに下記の宿題をいただきました。
教えていただけないでしょうか。
よろしくお願いします。

May 20 17:43:19 mail sendmail[59250]: to=<[email protected]>, delay=00:00:41,
xdelay=00:00:40, mailer=esmtp, pri=30301, relay=ww.test.net. [192.168.111.130],
dsn=2.0.0, stat=Sent (ok 1021884198 qp 8845)
上のようなログがたくさんファイルAの中に入っていて
それを必要な個所だけ抜き出してファイルBに出力するという宿題です。
例)
May 20 17:43:19 host=ww.test.net, address=192.168.111.130
          ・
          ・
          ・
          ・
316デフォルトの名無しさん:02/05/22 21:37
宿題なんですが、よろしくお願いします。
unixのコマンドにcatとかmore less ってありますよね。
その、lessコマンドのソースを作ってもらえませんか。
catはできたんですが・・・
コレ改良してつくれませんかねぇ・・・

#include < stdio.h >

main (int argc, char *argv[])
{
FILE *fpr;
cahr buf[BUFSIZ]

if(argc<2){
fpr=stdin;
}else if((fpr=fopen(argv[argc-1],"r"))==NULL){
fprintf(stderr,"%sというファイルが見つかりません\n", argv[argc-1]);
return(-1);
}else{
}

while(fgets(buf,sizeof(buf),fpr)!=NULL){
fprintf(stdout,"%s",buf);
}
}
lessが何をするもんなのか言ってくれたら考える
>>316
それ以前に #include < stdio.h > のスペースは何だ?
              ^    ^
>>315
そんなら一行ごと読み出して正規表現使おうYO
>コレ改良してつくれませんかねぇ・・・

lessって、catの改良とかそういうレベルじゃないような。
312
小さい方の画像の解像度が2のべき数でもずれるか?(8x8とか32X32とか)
322309:02/05/22 22:25
すんません、ちょっと考えたらできました。
久しぶりにやったもんで忘れてしまってて・・・
>>316
悪いことは言わんからmoreにしとけ。
lessって、ページャーだよな。MSDOSで言うと、miel(な、懐かしい・・・・)のような
ものでアール。
325デフォルトの名無しさん:02/05/23 01:42
C言語始めたばかり何ですが、0〜200の間で2と3と6の倍数の和を一度に3つとも
求める。繰り返し関数の使用は1回しか使えない。
ヒントだけでも教えてもらえないでしょうか?
>>325
3つの変数を用意し、それぞれ2、3、6を代入。次にそれぞれに2、3、6を
足して行き、その結果を別の3つの変数に足して行く。足した結果が200を
超えた時点で足すのをやめる。これだけ。
>>326
2x3=6を利用すれば
変数一つ減らせていいと思った一人ぼっちの放課後
328325:02/05/23 01:54
>>326,327
ありがとうございます。
何となくわかったので自分でがんばってやってみます。
>>326は問題を取り違えているような気がしないでもない。
0-200の間って、0から200の間の2の倍数の全ての和、ってことだよね?

だったら、繰り返し文でnを0から200まで変化させる。
その中で、nが2の倍数だったら、2の倍数の和を表す関数に足す・・
nが3の倍数だったら・・・
とかやればいいと思う。それだけ。
>>329
結果は同じだと思うが。
(関数に足すってのは変数のまちがいだよな…)

しかし、質問者も「繰り返し関数」って…まさかLisperか?
331330:02/05/23 03:34
違った。スマソ
326は終了条件をまちがえてるね。
>>329
まあ%演算子を使えば簡単になるだろうね。
>>326は足した結果が200を超えた時点と言っているが、これは確かに
間違っているな。
333330:02/05/23 03:35
いや、また違った(ウツ
やっぱ326は正しい。
「繰り返し関数」って、forやwhileのことを関数だとでも思ってるってパターンか。
>>333
>>325の質問の意味があいまいだよな。倍数の和が0〜200の間なのか、
倍数が0〜200の間なのかはっきりしない。>>326は前者だとしてヒントを
与えている。
繰り返し関数って・・・・・・繰り返し文の間違いだよな。そうと言ってくれ。
337325:02/05/23 05:38
みなさんすみません。日本語の説明の時点で色々間違えていたみたいで、
倍数が0〜200の間と言うことと繰り返し関数じゃなくて繰り返し文でした。
すみませんでした。
>>326
>3つの変数を用意し、それぞれ2、3、6を代入。
その手順なら、全てに0を代入の間違いだと思われ
>>334&>>336
式と関数しか習ってないと思われ
つー訳で>>325がやりたい事は、こんな所だろう

void forever ( signed int i, int *p2, int *p3, int *p6 ) {
 *p2 += ( i % 2 ) ? 0 : i ;
 *p3 += ( i % 3 ) ? 0 : i ;
 *p6 += ( i % 6 ) ? 0 : i ;
 ( i >= 0 ) ? forever ( i - 1, p2, p3, p6 ), 0 : 0 ;
}
339338:02/05/23 05:51
(T_T)
>>329-
考えがまとまってから書き込め
何でも良いが公倍数は無視か?
>>326 が意味するのはこんなとこでしょう。

int i2, i3, i6;
int sum2 = 0, sum3 = 0, sum6 = 0;
for (i2 = 2, i3 = 3, i6 = 6; i2 <= 200; i2 += 2, i3 += 3, i6 += 6) {
 if (i2 <= 200)
  sum2 += i2;
 if (i3 <= 200)
  sum3 += i3;
 if (i6 <= 200)
  sum6 += i6;
}

>>338
i2, i3, i6の初期値に0を入れても結果は同じ。
343329:02/05/23 10:39
>>325
プログラマができなければいけない言語は母国語です。
言いたい事を上手く言葉にして伝える練習をしましょう。
何かここ見ただけだと余計混乱してそうなので、わかりやすく正解書いとく。
int sum2 = 0;
int sum3 = 0;
int sum6 = 0;
int n;
for(n = 0; n <= 200; n++){
 if(n % 2 == 0) sum2 += n;
 if(n % 3 == 0) sum3 += n;
 if(n % 6 == 0) sum6 += n;
}
ダレがなんと言おうと唯一絶対の階はこれです

#include <stdio.h>

template<int N>
struct F
{
 enum {
  _2 = F<N-1>::_2 + (N % 2 ? 0 : N),
  _3 = F<N-1>::_3 + (N % 3 ? 0 : N),
  _6 = F<N-1>::_6 + (N % 6 ? 0 : N),
 };
};

template<> struct F<1>
{ enum {_2 = 0, _3 = 0, _6 = 0}; };

main()
{
 const int N = 200;
 printf("%d, %d, %d\n", F<N>::_2, F<N>::_3, F<N>::_6);
}
int calc_sum(const int min, const int max, const unsigned mul){

  int first, last;

  if (!mul || min > max)
    return 0;

  first = min + ((first = min % mul) ? (mul - first) : 0);
  last = max - max % mul;

  if (first > last)
    return 0;

  return (first + last) * ((last - first) / mul + 1) / 2;

}

int main(){
  const int MIN = 0;
  const int MAX = 200;
  printf("s2 = %d s3 = %d s6 = %d\n", calc_sum(MIN, MAX, 2) , calc_sum(MIN, MAX, 3), calc_sum(MIN, MAX, 6));
  return 0;
}
346デフォルトの名無しさん:02/05/23 12:33
ファイル名を指定して、そのファイルがC言語ファイルか
Pascal言語ファイルだった場合、
そのファイル中の「自分で定義した関数、もしくは手続き名」を
型情報とともに表示するCプログラムを作成せよ。
なお指定されるファイルは文法的に正しいものだけと仮定する。

お願いします。
>>346
あらあらしゅくだいなのね?
がんばってくださいねー
手続き名ってなんだ?Pascalの?
関数はプロトタイプだけでいいのか?
>>346 Pascalなら楽だが(コメントを削って、カッコの中にないprocedure
またはfunctionの次の名前だけ表示すれば良い)、Cだと難しすぎる。パーザ
書かなきゃ。
350346:02/05/23 13:21
すいません。
Pascal言語の場合は関数名及び手続き名。
C言語の場合は関数名です。
関数はプロトタイプだけで良いものと思われます。
>>350
それでもC言語の場合は難しすぎる。

型定義をちゃんと解釈できないとどこが関数名か分からない。
型定義を解釈するためにはstructやunionやenumやtypedefも
解釈できないと…
>>350
grepしたれ
353350:02/05/23 13:40
truct,union,enum,typedefと
関数の区別については今回は目をつぶるようです…

Pascalの場合は簡単だという事ですが
どうなるのでしょうか?
>>349
昨日はご回答ありがとうございました。
今日もお願い致します。
Javaでエラトステネスのふるいを作成せよ、という問題です。
クラスはMainとSieveを使用するのが原則となっています。
よろしくお願い致します。
>>355
で、どこがわからんの?
それは宿題をやってほしいのかな?
それとも現在分からないことがあるのかな?
358355:02/05/23 14:08
できれば、課題自体をお願いしたいのですが。。。
演習書の説明が理解できないので。。。
エラトステネスのふるい自体わかりませんので。。。
今回、はじめて聞きました。
359353:02/05/23 14:11
>>354
文字列が procedure または function かどうか
判定するにはやはり一文字ずつ読み込んで
比較するのでしょうか?
>>358
http://www.sra.co.jp/public/doc/GSletter/vol.27/java/java.html
したから1/4位。
エラトステネスのふるいは素数の倍数を除去しながら計算していく方法
361デフォルトの名無しさん:02/05/23 14:14
text fileで質問ですが、簡単な20KBにもみたないファイルを
友達から送ってもらったのですが、なぜかそれを受け取った
時、ファイルの容量が980KBになっていました。
それをハードディスクに落として、見てみるともとの20KBに
戻っていました。それでそのファイルを今度は他の人に
送ったとき、またファイルの容量が980KBになっていました。
これはなぜこうなるんでしょうか?目に見えないヘッダファイル
かなにかが添付されてるのでしょうか?もしそうだったら
どのようにそのヘッダファイルを見ることができますか?
別に宿題じゃないんですが、疑問に思って
>>361 マルチたん・・・ハァハァ
363デフォルトの名無しさん:02/05/23 14:29
すいません・・・むこうじゃ誰も答えてくれないので
こっちのほうが詳しい人いそうと思って・・・
>>363
安心しろ。俺も5KBのファイルが1GBになったのを見たことがある。
気にすることはない。
ええマルチたん!?!

>>361
あ、ほんとだ

(;´Д`)イイ!
>>361
怜たんより萌えるな・・・ハァハァ
367デフォルトの名無しさん:02/05/23 14:50
20KBが980KBですから、残りの960KBは
何がふくまれてるのかなーって思って。
不思議なんです。どんな情報がはいってるのやら。
その残りを見ようとしても見る方法がわからないので。
誰かファイルのエキスパートいませんか?
ファイルファイル
ファイル ファイリフレ ファイリホー
>なぜかそれを受け取った 時、ファイルの容量が980KBになっていました。
>それをハードディスクに落として、見てみるともとの20KBに 戻っていました。

どういうことよ?受け取ったときはディスクにないの?
メーラーで添付ファイル見たときの表示が980KBってことでは。
371デフォルトの名無しさん:02/05/23 15:19
370
そうです、ファイルをいったんハードディスク上に落とすと
20KBのファイルなんですが、メーラーの上でみると
なぜか980KBになってるんです。

それで実験で、新しいファイルをオープンして、これをaa.txtとして
このファイルにさっきHDDに落としたファイルをコピーアンドペーストで
貼り付けます。それでaa.txtというファイルを保存します。この時点で
このファイルは20KBバイトです。しかし、このファイルをメーラーで
送ると、受け取ったさきは980KBになっているのです。
この、のこりの960KBを、
じっちゃんの名にかけて解いてくれ
漏れのじっちゃんは、名にかけてっていうほど有名じゃないしなぁ
そのメーラが腐ってた!

ただ980KBと表示されてるだけならどうだっていいじゃん
実際にスペース食ってなければ
374デフォルトの名無しさん:02/05/23 15:31
メーラーは今を時めくスーパーグレートアウトルックエクスプレッサー
なずけて、SGOE
375無責任だが:02/05/23 15:49
>>346
きちんとしたパーサーを作るのが結局一番簡単でしょう

C言語の文法は規格書を基準に、他には
http://www.lysator.liu.se/c/ANSI-C-grammar-y.html

pascalなら tplyで検索してその中の pas.Y を参考に
376無責任だが:02/05/23 16:46
pascalはこっちがいいかも
http://www.moorecad.com/standardpascal/yacclex.html
んで、入力されたソースがcであるかpascalであるかはんていせにゃならんから、
かなり大変でない?
そこはほら、拡張子で(w
>>374 それはやはりドイツ語風にスギョェとよむんでしょうか?
>>346
プリプロセスはどうするんだ?
どう考えても無茶な課題だよな・・・
中括弧だけ見て、中括弧の外に出てるものだけを見るというのでは駄目?
””とコメントだけは注意して。課題レベルならそれくらいでいいかなと・・
>>346
その課題って、ちゃんと字句解析、構文解析について習った上で出されたんだよな?
>>346

#define a( ignored_param ) a[] =

int a( int ignored ){ 0, 1 };

がんばってください
385あぼん:02/05/23 21:00
逆行列求めるプログラムなんですが、
#include<stdio.h>

intv1(a,n,nn)
double *a;
int n,nn;
{
int i,j,k;
double p,q;
double *ak,*ai;
for(k=0,ak=a;k<n;++k,ak+=nn){
p=ak[k];
ak[k]=1.0;
for(j=0;j<n;++j)
ak[j]/=p;
for(i=0,ai=a;i<n;++i,ai+=nn){
if(i!=k){
q=ai[k];
ai[k]=0.0;
for(j=0;j<n;++j){
ai[j]-=q*ak[j];
}
}}}


int main(void){

double a[2][2]={ {1.0,2.0},{3.0,4.0}},x[2][2],ad[2][2];
intv1(a,2,2);
return 0;

}
こうやると、どうしても int mainのあたりでシンタックスエラーがでます。
どこがまちがってるかオシエテクダサイ。
386デフォルトの名無しさん:02/05/23 21:06
>>385
ネタニマジレス
カコワルイ
>>385
{ } の対応がおかしいけどさ、それ以前に文法古すぎ(w
}}}ってまとめて閉じてるのもすごいな。
先史時代にタイムスリップしたかのようだ
>>387
あがる一方のソースって初めて見た・・・。
普通正規分布型になるのに。
>>385
配列へのポインタの使い方が無駄すぎだけどこんな感じ。

#include<stdio.h>

void intv1(double (*a)[2], int n, int nn)
{
int i,j,k;
double p,q;
double (*ak)[2], (*ai)[2];
for(k=0,ak=a;k<n;++k,ak++){
p=ak[0][k];
ak[0][k]=1.0;
for(j=0;j<n;++j)
a[0][j]/=p;
for(i=0,ai=a;i<n;++i,ai++){
if(i!=k){
q=ai[0][k];
ai[0][k]=0.0;
for(j=0;j<n;++j){
ai[0][j]-=q*ak[0][j];
}
}
}
}
}

int main(void){
double a[2][2]={ {1.0,2.0},{3.0,4.0}},x[2][2],ad[2][2];
intv1(a,2,2);
return 0;
}
>>385
>>389の間違いを訂正しました。

#include<stdio.h>

void intv1(double (*a)[2], int n, int nn)
{
int i,j,k;
double p,q;
double (*ak)[2], (*ai)[2];
for(k=0,ak=a;k<n;++k,ak++){
p=ak[0][k];
(*ak)[k]=1.0;
for(j=0;j<n;++j)
(*ak)[j]/=p;
for(i=0,ai=a;i<n;++i,ai++){
if(i!=k){
q=(*ai)[k];
(*ai)[k]=0.0;
for(j=0;j<n;++j){
(*ai)[j]-=q*(*ak)[j];
}
}
}
}
}

int main(void){
double a[2][2]={ {1.0,2.0},{3.0,4.0}},x[2][2],ad[2][2];
intv1(a,2,2);
return 0;
}
391デフォルトの名無しさん:02/05/23 22:26
headは構造体、code,tempは配列だとして
tempに読みこんだ文字列を構造体headの中の配列codeに
いれたいのですが

head->code = temp;

とやるとエラーが出てしまうのですが
このやりかたはまずいのでしょうか?
l-value required (=) と言うエラーが出てきてしまいます。
392デフォルトの名無しさん:02/05/23 22:28
>>391
もしC言語なら、=では文字列のコピーはできない。
#include <string.h>
strcpy(head->code,temp);
>>392
当然ながらバッファオーバーフローに注意
394391:02/05/23 22:33
あ、書き忘れてました、C言語です。
ありがとうございます! やってみます!
395392:02/05/23 22:35
そういえば文字列だときめかかっているな。
文字列でないならmemcpyで。
396あぼん:02/05/23 22:52
>>389 390
ありがと。解決しました。
397391:02/05/23 22:57
今やってる問題はこれなんですが
http://www2.nasicnet.com/~hila/C/kadai5-1.c
コンパイルの時に最初のmallocのところに
Warning:function 'malloc' undefined -- assumed to be int
と出てしまいます。
コンパイルしたものを実行したら結果は上手く行くのですがこれが
気になってしまいます、これはなんなんでしょう?
C++で次の問題ができません

コンソールから整数を入力するとその入力した数の段の三角形を表示する
プログラムを書きなさい

例えば5と入力すると
  . ●
 . ●●
 .●●●
. ●●●●
●●●●●

こんな感じだそうです、どうにかお願いします!
>>397
そのソース、malloc使っているのに<stdlib.h>をインクルードしていないね。

関数のプロトタイプがないために、mallocの戻り値がint型だと見なされている。
で、int型をstruct Data *型にキャストすることはできないので、そういうウォーニングが出たというわけ。
<stdlib.h>にmallocのプロトタイプ宣言があるから、それをインクルードすればOK
団子だ
402391:02/05/23 23:05
ああ、なるほど!
上手く行きました、ありがとうございました!

宿題は続くのでまた質問すると思いますが(^^;
>>398
わり、パスカルの三角形じゃねえや。
#include <iostream>
using namespace std;

int main()
{
int n;

cout << "N = ";
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = n - i; j >= 0; j--) cout << " ";
for (int j = 1; j <= i; j++) cout << "●";
cout << endl;
}
}
>>397
お、stdlib.hが追加されている(笑)
405399:02/05/23 23:11
>>399
どうもです!
おかげさまでできました!
406391:02/05/23 23:15
>>404
いやぁ、家でやって鯖にあげて、学校から落として使おうとしてるので
完成したのをアップしてるのです(笑)
407346:02/05/24 18:30
こんな原始的な方法しか思い浮かばん。

printpas()
{
int c;

while((c = fgetc(fp)) != EOF) {
if(c == 'f') {
if((c = fgetc(fp)) == 'u')
if((c = fgetc(fp)) == 'n')
if((c = fgetc(fp)) == 'c')
if((c = fgetc(fp)) == 't')
if((c = fgetc(fp)) == 'i')
if((c = fgetc(fp)) == 'o')
if((c = fgetc(fp)) == 'n') {
printf("function");
while((c = fgetc(fp)) != ';')
putchar(c);
printf("\n");
}
}
else
if(c == 'p')
if((c = fgetc(fp)) == 'r')
if((c = fgetc(fp)) == 'o')
if((c = fgetc(fp)) == 'c')
if((c = fgetc(fp)) == 'e')
if((c = fgetc(fp)) == 'd')
if((c = fgetc(fp)) == 'u')
if((c = fgetc(fp)) == 'r')
if((c = fgetc(fp)) == 'e') {
printf("procedure");
while((c = fgetc(fp)) != ';')
putchar(c);
printf("\n");
}
}
}

408無責任だが:02/05/24 19:03
>>407
 その方法を自動的に展開してくれるコードを書いてくれるのが >>375-376

後は lex/yacc を手に入れて
409デフォルトの名無しさん:02/05/24 21:06
#include <stdio.h>
#include <string.h>
#define TOKEN_MAX 100

int c;         // 1文字先読み
int next_char()
{
 if ((c = getchar()) == EOF) {
  exit(0);
 }
 return c;
}

char token[TOKEN_MAX]; // つねに1トークン先読み
char *next_token()
{
 char *p = token;

 // 空白、コメントを読み飛ばす(略)
 *p++ = c;
 if (isalnum(c)) {
  while (isalnum(next_char())) {
   *p++ = c;
  }
 } else if (c == '\'') {
  // 文字列を読み飛ばす(略)
 } else {
  next_char();
 }
 *p = '\0';
 return p;
}

void paren(int level)
{
 while (strcmp(token, ")") != 0) {
  if (strcmp(token, "procedure") == 0 && level == 0) {
   next_token();
   printf("procedure: %s\n", token);
  } else if (strcmp(token, "function") == 0 && level == 0) {
   next_token();
   printf("function: %s\n", token);
  } else if (strcmp(token, "(") == 0) {
   next_token();
   paren(level + 1);
  } else {
   next_token();
  }
 }
 next_token();
} 

int main()
{
 next_char();
 next_token();
 paren(0);
 return 0;
}
410デフォルトの名無しさん:02/05/24 22:11
C言語で相乗平均を求めているのですが、n乗根の求め方がどうしてもわかりません。
どなたか教えていただけないでしょうか?

pow(x,y);は実数値をとらないとエラーになりますし…もうお手上げです
>>410
#include <math.h>
n乗根? pow(x, 1.0/n); で何が困る?実数値をとらないとエラーって何?
(int)pow(x,y);
414デフォルトの名無しさん:02/05/24 22:22
>>411-413
型宣言の間違いのようでした。
pow(x,1/n);ではうまくいきませんでしたが、
pow(x,1.0/n);で成功しました!ありがとうございました(TT)
よしlessもどきができたぞ>>いつかの学生
メモリばりばり壊してすぐdじゃってもいいなら晒すぞ。
っていうかここのお母さん、全然登場せえへんやん。
>>416
そう思うなら、玲たんが早くお母さんになってね♪
>>417
は?何言ってんだ?
419:02/05/25 02:41
字、違うし・・・・
420417:02/05/25 02:47
ギャフン
>>417
お母さんになるにはまず・・・(以下略
422デフォルトの名無しさん :02/05/25 21:41
C++の宿題でました。
サンプルプログラムがあって、リストの中に入れたアルファベットをabc・・・の順番で出力するやつです。
で、サンプルのなかで、malloc(sizeof(LIST)っていうのが使われているんですが、これってどういう効果がありますか?

リストが、こう定義されてます。
struct list{
char key[LEN+1];
struct list *next;
};
>>422
sizeof(LIST) がわからんのか ?
malloc() の効果がわからんのか ?
malloc(〜) は、指定したバイト数のメモリ領域を確保します。
sizeof(LIST) は、構造体 LIST のバイト数を表します。
425デフォルトの名無しさん:02/05/25 21:47
>>423

えと・・・両方です。

>>424

凄くよくわかりました。
ありがとうございます。
426422:02/05/25 23:21
422ですが、宿題がわかりません。
リストの中に入れたアルファベットをabc・・・の順番で出力するようにする、宿題です。
アドバイスください。
while(printf("string->"),scanf("%s",data),strcmp(data,"end")!=0){
からが、理解できません。
↑のwhile内ではheadが出てこないのに、show_list(&head);にどう関わってくるのかわかりません。
サンプルプログラムは↓です。



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

#define LEN 10

struct list{
char key[LEN+1];
struct list *next;
};

typedef struct list LIST;

void show_list( LIST *a){
printf("%10s %10s %10s\n","address","key","next");
while(a!=NULL){
printf("%10p %10s %10p\n",a,a->key,a->next);
a=a->next;
}
}


int main(void){
LIST head;
LIST *ptr,*p;
char data[LEN+1];


strcpy(head.key,"head");
head.next=NULL;


printf("リスト入力(終了はendで入力)\n");
while(printf("string->"),scanf("%s",data),strcmp(data,"end")!=0){
ptr=(LIST *)malloc(sizeof(LIST));
strcpy(ptr->key,data);
ptr->next=NULL;

p=&head;
while(p->next!=NULL)
p=p->next;
p->next=ptr;
}

show_list(&head);

return 0;
}
>>426
>while(printf("string->"),scanf("%s",data),strcmp(data,"end")!=0){
・・・・・。
そんな書き方するサンプルは見限れと言いたい。
でも宿題じゃ仕方ないんだろぉなぁ。なんか言ってやれ、こんな宿題出す教師に。
んで、これは

printf("string->");
scanf("%s", data);
while(strcmp(data, "end") != 0){

などと分解して読むと読みやすいかも。要するにそういう意味です。
で、そもそも、リストについては御存知?
428422:02/05/25 23:35
>>427

はい、リストについては昨日勉強しました。
while(strcmp(data, "end") != 0){

これは、endを入力したらwhileが終わるってことですよね?
このwhile内で、何もheadに代入されてないのに、最後に
show_list(&head);とあるので、while内で何が起こっているのかわからなくなりました。
>>427
>>while(printf("string->"),scanf("%s",data),strcmp(data,"end")!=0){
何も入力しなかったとき自動的に終わらないか?
430422:02/05/25 23:40
>>429

いいえ、endを押さないと終わりません。
>>427
その分解は動作を変更してしまってるよ。
こうしないと。
for (;;) {
 printf("string->");
 scanf("%s", data);
 if (strcmp(data, "end") == 0) break;
432427ではない:02/05/25 23:44
>>431
ループの本体で同じことを重複して書けばよいじゃん。
超初心者相手なんだから分かりやすさが重要では。
↑のように分解したらwhile文の一番下にも付けとけば同じ動作ね。
同じコードを二カ所(以上)に書く癖はつけないように指導したいところ。
>>431
ええい五月蠅い。承知の上だ。意味が通じればいいの。
>>432
まったく。
>>434
ええ、たまにやります。もう癖ついてしまってます。どうしたらいいでしょう。自分的には、まぁいいやと思ってるんですが。

>>428
まず最初の状態があるだろ。
head.next→NULL
んで、なんか入力する。仮に "A" とすると、mallocでLIST構造体を確保して、これを仮に listA とすると、
listA.next→NULL
listA.data→"A"
head.next→listA
んで次に仮に "B" と入力して、新たに malloc で確保したのを仮に listB とすると、
listB.next→NULL
listB.data→"B"
listA.next→listB
listA.data→"A"
head.next→listA
おっけー?以下 "end" を入力するまで同様に。図に書きながら動作を追ってみるといい。
>>426
なぜ一回毎にリストの終端を検索する?前に入れた場所を覚えてれば済むことだろうに。
わざと遅くしてまで読みにくいプログラムにしてるとしか思えん(w

printf("リスト入力(終了はendで入力)\n");
p=&head;   /*ループ前にポインタを初期化*/
while(printf("string->"),scanf("%s",data),strcmp(data,"end")!=0){
 ptr=(LIST *)malloc(sizeof(LIST));
 strcpy(ptr->key,data);
 ptr->next=NULL;

 p->next=ptr;
 p=ptr;    /*p=p->next=ptr;でも行けるか?*/
}

それとも、この方がいいかな(変数が1ついらなくなる)。
 p->next=(LIST *)malloc(sizeof(LIST));
 p=p->next;  /*上と同じく、p=p->next=(・・とできるかも?*/
 strcpy(p->key,data);
 p->next=NULL;
>>436
宿題のサンプルなんだから>>426が悪い訳じゃないかと
p = p->next = ptr ;
は文法的には大丈夫だと思うけど自信がないので他の奴にパス
p->next = NULL ;
はブロックの外に出してやると良さげ
分かってて書いたならブロックは閉じなくても
インデントは、揃えない方が良かったと思う
438お母さん:02/05/27 00:50
>>436
お母さんの予想だと、入力時にリストの適切な位置に挿入させたいんじゃないかしら。

>>426
サンプルプログラムでは、
while(p->next!=NULL)
  p=p->next;
p->next=ptr;
となってるわね。これは、毎回リストの終端に新しい要素(prt)を追加してるというのは
分かるかしら?
そこで、while()の条件を追加して「新しく入力した文字列(prt->key)より
今調べている文字列(p->next->key)のほうがabc順で前
(strcmp(p->next->key,ptr->key)<0)の間だけループする」ようにして、
ループを抜けたら、pとpの次(p-next)の間にptrを挿入するようにすると、
abc順で挿入できるわね。

あと、全く別の解として、入力する時は終端に追加していって(>>436)、後で
まとめてソートする方法もありですよ。(こっちのほうが早いんですけど、
1.リスト構造になっている。2.頭にダミー要素がわざわざつけてある。
ことを考えると、出題者の意図するところではないかもしれないわね。)

分からなかったら、また聞いてちょうだいね。
439346:02/05/27 13:47
完成
440デフォルトの名無しさん:02/05/27 20:59
JAVAで書いたプログラムをJARファイルで圧縮して
提出しなければいけないのですが、圧縮したら
画像ファイルが取り出せなくなってしまいました。

例えばJARファイルの中のhomework/resource/image.gifを取り出す時
java.awt.Toolkit.getDefaultToolkit().getImageはどのような引数を取ればいいのでしょうか?

homework/resource/image.gif
homework.resource.image.gif
image.gif
../resource/image.gif
などを試してみたのですが、うまくこの画像を読み込んでくれません。

[ homework.awt.ImageFrame.class ]
private Image image = java.awt.Toolkit.getDefaultToolkit().getImage("image.gif");
試してませんが、こんなのはどう。
image = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("homework/resource/image.gif"))
>>441
ありがとうございます。うまく読み込むことができました。
JARファイルだとずいぶん要領が違いますね。
443デフォルトの名無しさん:02/05/27 21:35
javaで
swap( a , b )
てのはどう書けばいいの?
aとbの入れ替えをしたいんだけど。
>>443
他の言語ではお前はどうやってるんだ?
>>443
プログラマとして問題だと思う。それ。
446デフォルトの名無しさん:02/05/27 21:48
>>444
まだJavaしか使ったこと無い…Cも本で読んだことはあるけど。

>>445
なんで?メソッドでやるほどの事じゃないってこと?
んじゃいちいち
○○ c =a ;
a = b;
b = c;
って書くのが正解?
>>442
たぶんそのコードは jar にアーカイブしてない状態でも使えると思う。便利でし。
>>443
出来ません。残念ながら。不可能です。
でも「入れ替えをしたい」っていう状況は実はあんまし無いような気もするし、直に書いても大して面倒でもないからいいんでわ?
>>444
C++だったら余裕で書けるんだな。
>>446
正解。
449446:02/05/27 22:09
何だ
あ前ら使えねーな。
照れる
確かに、褒め言葉と取っておいた方が良いな。
453デフォルトの名無しさん:02/05/28 01:29
ここでよいのか迷ったのですが、他に適切な板が
見つからなかったので、お願いしたします。

GLP(www.gnu.org/copyleft/gpl.html)についての
レポートを書かなくてはいけないのですが、
簡単な概要を読んで、大体は理解できました。
しかし、実際の例で考えてみると以下のような例に
これが当てはまるのかがうまく読み取れません。

1、JAVAのようにクラスで分割されている場合、(ソースに組み込む形でなく)それを外部から使うとGLPは適用されるのか?
2、GLPのアプリケーション(www.retrologic.comなど)をアプリケーションに使用する場合、GLPは適用されるのか?

どうかよろしくお願いします。
GPL
>>453
1 yes
2 yes
関係するプログラムにひたすら感染していきます
GPLはソフトウェア会のガンです
>>454-456
とても恥ずかしいミスをしてしまい、ご指摘ありがとうございます。
1、は直感的にYESかなとは思っていたんですが、2までYESということで驚きました。
どうもありがとうございました。
リンク先を見たけど、RetroGuardはLGPLだね。
これならプログラム本体がソースを公開する必要はない(GPLとして配布する必要はない)
1.2.とも、「外部から使う」「アプリケーションに使用する」
の詳細がわからないとなんとも……
たとえば、pipeみたいなIPC機構を用いればOKという話もある。
フロントエンドだったり、そのGPLアプリケーションが完全にソフトの一部の場合はNG
461質問名無し。:02/05/28 02:20
CASLです。

【プログラム名をXX01とし、数値88を16進数で定義する。】

このような問題で
ラベル:XX01 命令コード:DC
まではわかるのですが、オペランドが判りません。
御教授お願い致します。
462デフォルトの名無しさん:02/05/28 02:27
>>461
オペランド:#0058
>460
え?GPLなソフトのフロントエンドは、GPLに縛られるの?
なして?
リンクしてなきゃ縛られないと思われ
465デフォルトの名無しさん:02/05/28 07:00
宿題でコンピューターウィルスをつくる宿題がでました。
だれか僕のためにつくってください
>>465
宿題は自分で野郎な。
467仕様書無しさん:02/05/28 07:19
なんかアタック受けたぞ。お前だろ。

The firewall has blocked Internet access to your computer (TCP Port 1433) from 80.65.196.179 (TCP Port 1777) [TCP Flags: S].

Time: 2002/05/28 7:04:26

16 234 ms 235 ms 234 ms chi-bb1-pos1-0-0.telia.net [213.248.80.33]
17 250 ms 250 ms 265 ms nyk-bb1-pos0-1-0.telia.net [213.248.80.5]
18 328 ms 359 ms 344 ms kbn-bb1-pos0-2-0.telia.net [213.248.64.9]
19 359 ms 360 ms 375 ms s-bb1-pos3-0-0.telia.net [213.248.64.130]
20 344 ms 375 ms 375 ms s-b3-pos5-0.telia.net [213.248.66.2]
21 344 ms 359 ms 360 ms song-s-b3.c.telia.net [213.248.67.90]
22 359 ms 375 ms 360 ms pos1-0.cty-pe1.sdl.se.sn.net [213.88.255.70]
23 360 ms 375 ms 375 ms fe0-0.cty-pe1.huv.se.sn.net [62.95.54.86]
24 360 ms 375 ms 375 ms cbq1_out.ljusnet.se [80.65.193.252]
25 343 ms 360 ms 375 ms 80.65.193.242
26 360 ms 375 ms 390 ms 80.65.196.179
468caslです:02/05/28 19:10
レジスタ GR0 の内容を 10進数で表示するサブルーチン OUTDEC を作成しなさい。

メインプログラムでレジスタ GR0 に値を格納して,作成した表示ルーチンを呼び出して下さい。なお、OUTDEC とメインプログラムは、別々のファイル (outdec.cas, main.cas) に作成すること。
469ちーん:02/05/29 00:12
シフト演算子を使って、被除数を2^nで割ったときの商と余りをだすプログラムをつくりなさい。

シフト演算子の使い方がわかりません・・・教えてください・・・
470デフォルトの名無しさん:02/05/29 00:13
ずらす値 << 何桁ずらすか
ずらす値 >> 何桁ずらすか
471ちーん:02/05/29 00:16
よくわかりません・・・w
printf("%d\n",50 << 4);

0000 0000 0000 0000 0000 0000 0011 0010 ←10進整数 50のビット
2進数で4桁左へ
0000 0000 0000 0000 0000 0011 0010 0000

つまり整数800出てくる
ずらしてできたとこはゼロで埋められる
>>468
CASLのCコンパイラ作れ。
475469:02/05/29 00:33
実際にプログラムしてみるとどんなふつうになるのでしょうか??
>被除数を2^nで割ったときの商と余りをだすプログラムをつくりなさい。

ここがわからん詳しくキボーン
477469:02/05/29 00:38
被除数とnをキーボートから入力したとき、被除数を2^nで割ったときの商と余りをだすプログラムをつくりなさい

です。
被除数を右にn回シフトしてから左にn回シフトをしたものを、
被除数から引いたら余りがでるのでは?
・・・・・

( つД`)さっぱりわかんない
480469:02/05/29 00:49
オレモサパーリ(・∀・)
Quo = Value >> n;
Rem = Value - (Quo << n);
解決したようだ。
よかたよかた(-_-)
>>469は寝たか、>>481を見ても分からないか・・・
後者なら、おじさん何するかわからないよ?
>>483
ヲヂサン、おまんこクチュクチュするとか?
ゲイなのに?
486:02/05/29 15:35
余りもシフト演算だけでできないかな?
処理系依存になってしまうけど、32ビットなら、
(Value << (32 - n)) >> (32 - n)
とかすればいくのかな。どうでしょうか。
sizeof(int)使えば?
Valueが負の値だと途端に未定義動作になる罠
それ以前に減算演算子は使っちゃダメです。
使っていいのはシフトだけ。
なら、481のRemもだめじゃん。
さぁ困った
492デフォルトの名無しさん:02/05/30 17:33
一つの非公開関数を含むdiceという名前のクラス
を作成しなさい。また、標準乱数であるrand()関数を
使用して1〜6までの範囲の整数を生成するroll()
という関数を作成しなさい。
非公開整数変数を参照する、look()という関数を
作成しなさい。
クラスが正しく動作することを確認するための
main関数を作成しなさい。

この問題がまったくわからないので誰か教えて下さい
ちなみにiostream使わないでお願いします
http://pc.2ch.net/test/read.cgi/tech/1022402165/634-653
までは出来てるので、iostreamを使わないように修正してあげてください。
494デフォルトの名無しさん:02/05/30 17:41
向こうでこっちにいけって言われました
元のせりふは、
>ほんとに申し訳ないんですけどiostream.h
>使わないでできませんか?
なんだから、当然
#include <iostream>
using namespace std;
ダロ
とこりょでさ。
丸投げするやつらは課題って何のためにあるか分かってんのかな?
答えを提出することだけが目的じゃないんじゃないかな?
たとえ間違ったって自分でやらなきゃ何の意味もないんじゃないかな?
学生時分は普通、んなこと考えない。
将来プログラミングと縁がない職業に就くつもりなら丸投げでもいいんじゃない。
>>497
そうだ罠。俺も学生時代はとにかく単位をもらうことだけを考えていたから
なあ。手段を選ばず。
その頃にはまだネットなんてものがなかったから、友達づきあいだけは
大切にしたよ。

やがて俺の後輩が課題を下宿に持ち帰ってくるようになり、必死に教えて
くれと頼み込まれるようになり、教えてやっているうちに俺にも自然と力が
付き、いまじゃいっぱしのPGやってるよ。

でも仕事内容はSEのような仕事やバグ取りがメインで、自分ではあまり
組んだりしない。会社曰く、「組む奴は掃いて捨てるほどいるが、バグ取り
できる奴はそんなにいない」とか。
> 単位をもらうことだけを考えていたから
 なあ。手段を選ばず。

ハゲドウじゃ
>>499
おだてられてデバッグ押しつけられてるのか。悲しいな。
悲しいときー
503デフォルトの名無しさん:02/05/30 21:08
ある数値(例えば999など)が入力されるまで、繰り返しキーボードから数値を入力し、
結果として入力された数値の平均値を出力するプログラムを作りなさい。
ヒント:
繰り返しには「無限ループ」を使用。
「偽」にならない条件をwhile文の条件として与える。
ある数値が入力されるまで繰り返すという処理は、
「ある数値が入力されたらbreakする」という処理を使う。


という問題なんですが、、、ちなみにC言語です。
よろしくおながいします、、、
#include <stdio.h>

int main(void)
{
double avg = 0, d;
int count = 0;

while (1) {
scanf("%f", &d);
if (d == 999.) break;
avg += d;
count++;
}

printf("avarage = %f\n", avg / count);
return 0;
}
>>504
×scanf("%f", &d);
○scanf("%lf", &d);
506デフォルトの名無しさん:02/05/30 21:19
例えば999はデータとしては扱えなくていいのね。
この問題を出した先生(?)に「プログラム書法」って本を
勧めといて。

while (1) {
scanf("%d", &a); /* fgets + sscanf がおすすめだけどね。*/
if (a==999) break;
s+=a;
n++;
}
printf("%f\n", s/n);

a, s, n は適切に宣言、初期化してね。
%d でいいのか? これを%fにしたら、a==999 が危険かも。
どうしよう。
いきなり999をいれたらどうなるかもかんがえといて。
507デフォルトの名無しさん:02/05/30 21:24
>>504
>>506
お二人ともありがとうございました!どうにかなりそうです。
神と呼ばせてください。。。
>>506
浮動小数点数を==で比較した場合にヤバイのは、小数点以下がある
場合に限られるものが多い。整数部は循環小数とはならないものが
ほとんど。

でも、処理系依存ということもあるので、intで読んでおいてキャスト
する方が安全ですね。
>>489
Rem = Value & (~0 << n);
っつーか & もNGですか?
510509:02/05/30 22:35
おっと間違えた。
Rem = Value & ~(~0 << n);
511C初心者:02/05/31 01:22
HTTPサーバーを作って来い言われて困惑してます…
とりあえずGETとHEADをサーバープログラムで実現したいのですが
どう書いたら良いのかサッパリわからずです。
ヘルプお願いします…。
djbのpublicfileなんかわかりやすぞ。
検索すれば適当なサバがあるよ
514C初心者:02/05/31 01:51
それが「既存のプログラムを用いてサーバを構築しろ」ではなくて
「サーバープログラムを書いてこい」という課題なので…。

その辺をCで書くとこんな感じになるとか解説してるページとか
ありませんでしょうか。
オープンソースの鯖プログラムのコードパクれ。
>>514
ピッタリなの見つけてやった。
ぐぐるうまく使う方法身につけないと損だぞ。
Fetch the software. クリックして落とせ。
http://www.acme.com/software/micro_httpd/
517デフォルトの名無しさん:02/05/31 02:05
(;´д`).。oO(これがいわゆるデッドロックってやつか・・・?)
518C初心者:02/05/31 02:28
>>515
まんまパクるのはさすがにヤバいかと思うのでちょとアレです。
なんせ作ったプログラムを元にプレゼンまでやらないとアカンので
構造をある程度理解できてないと…。

>>516
おお、これは今まで見たサーバープログラムの中でもそうとう小さい!
これならなんとか中身も読み進められるかな…
C初心者ゆえ、C言語辞典片手にだけど。
とりあえずこれで進めてみます。ありがとうございましたー
519デフォルトの名無しさん:02/05/31 03:07
while文を使って5つの値を入力して真の値の誤差を出すプログラムを
作る宿題何ですが、いまいち理解できません(;´д⊂)
ちなみに↓は本を読みながら作ってみたのですが16行目でエラーが
でてコンパイルができませんでした。

#include <stdio.h>

main()
{
double sokutei[5];
double sin[5][4] = {1.0,2.0,3.0,4.0,5.0};
double gosa[5];
int i = 0;

while(i<5)
{
printf("値%d\n",i+1);
scanf("%lf",&sokutei);
i++;
}

gosa[i]=(sokuteiti[i] - sin[i]) / sin[i] * 100;


printf("-----------------------------------");
printf("真の値[V]     値[V]   誤差[%]");
printf("-----------------------------------");

i = 0;
while(i<5){
printf("%.1lf\n%.1lf\n%.1lf\n",sin[i],sokutei[i],gosa[i]);
i++;
}
printf("-----------------------------------");
}

誤差[%]");
?
>真の値の誤差

って何さ
>double sin[5][4] = {1.0,2.0,3.0,4.0,5.0};
ここは二元配列ではない

>gosa[i]=(sokuteiti[i] - sin[i]) / sin[i] * 100;
ここもループでかこむ

>printf("真の値[V]     値[V]   誤差[%]");
%を文字として出力したいときは%%とする
523デフォルトの名無しさん:02/05/31 15:50
JAVAのことさっぱりわかりませんが、課題で
人工無能の対話するものを作らなくてはなりません。
どなたかソース(?)教えてください。(もしくは公開しているHP)
言葉をかえるだけでいい!みたいなのありますか?

別スレでも聞いたんですけど、本当に困ってて…。
>>523
これいじってなんとかしれ。

import java.io.*;
class Brain
{
 public static void main(String args[]) throws IOException
 {
  InputStreamReader ir = new InputStreamReader(System.in);
  BufferedReader br = new BufferedReader(ir);
  while(true)
  {
   String line = br.readLine();
   System.out.println("( ´_ゝ`)ふーん ");
  }
 }
}
525切羽詰まって:02/05/31 18:48
できればつっこみをつけて教えてください。

(1)
#include<stdio.h>
void main()
{
double p=0;
for(i=1;i<20;i++)
{
p+=1.0/i;
if(p>2)break;
}
printf("%f\n",p);
}

(2)
void main()
{
int a[]={12,11,10,9,8,7,6,5,4,3,2,1,0};
int *p,*q r;
r=a[3]; ・・・(a)
p=a; q=a+1;
r=*(p+2); ・・・(b)
q-- ;
r=q[2]; ・・・(c)
上の(a)〜(c)の代入で、rに代入される数値は?

超素人なので、よろしくお願いします。
526切羽詰まって:02/05/31 18:49
(1)は実行すると、なにがでるか?という問題で、
(2)はrがなにかという問題です。
>>525
(1)コンパイルして実行すれば?
(2)トレースすれば?
528デフォルトの名無しさん:02/05/31 18:55
>525

(1)
iが宣言されていないのでコンパイル通らねぇぞ。
宣言してからコンパイルしたら、2.083333って出た。
つーか、実行結果聞く問題なら動かしてみれ。
(2)は待て。
>>525
(a)9
(b)10
(c)9
修正
(c)10
531528:02/05/31 19:00
うーん、(2)は本がないと分からん。ごめんね。
いま授業中なんで。
a 9
b 10
だと思うけど、cはわからん。落ちそうだけど。
いくら宿題だからって基本中の基本を丸投げされても…
>>528
授業に集中しなさい。
こんな時間に授業って二部?
実行もしてみないでせっぱ詰まってるとか言われても・・
536528:02/05/31 19:05
実行してみたyo!
9
10
10
だった。
つーかこれも宣言するところでカンマ抜けてる。
>536

>>529-530に書いてあんじゃん。
つーか実行しないと分からないのか?
538528:02/05/31 19:07
>534
そうだyo!
>>537
ポインタさえも理解せずにCを教える奴もいたりする世の中だ。
気にするな。
>>538
授業聞けよ。
541528:02/05/31 19:08
>537
ごめんね。Cは素人でさ。
542切羽詰まって:02/05/31 19:14
解説どうもでした。
実行したいのは山々でしたが、ソフトがないのでできませんでした。
>>542
このくらいなら頭の中で実行しろ。
紙の上で計算してもいい。

>ソフトがないのでできませんでした。
知るか。切羽詰るまで放置するのが悪い。
544切羽詰まって:02/05/31 19:34
正直、答えを教えてもらっても細部はよくわからないです。
故に、頭の中で計算できない。
まだ初心者のへっぽこです。
>>544
教えてくらはい。
ちゃんと講義を聴いてても解けないような進度無視した宿題を出す教官が馬鹿なのですか?
それとも講義を聴いてないあなたが馬鹿なのですか?
           从/

        __∧_∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      /(  ´Д`)V  < はッ!先生、ちがっ・・・!、寝てません!
  __ / /|  u゚_/ )   \_______________
  \  ( ( ̄ ̄⊆_ノ ̄\
  ||\ `ー⊃         \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
547切羽詰まって:02/05/31 20:16
半々くらいだと思います。
>>546
ヨダレふけYO!
549名無しさん@お腹いっぱい。:02/05/31 21:59
UNIXです。

4文字からなる単語で2文字目と3文字目とが同じである、というパターンをあらわす正規表現を記述せよ。

教えてください。
>>549
とりあえず、お前の考えは?
>>549
\b\w(\w)\1\w\b
552名無しさん@お腹いっぱい。:02/05/31 22:11
549です。

1文字目と4文字目は「.」でいいとして、2文字めを「.」にして3文字めを*にすると、3文字目はどの文字でもいいってことになるし、、、って考えてストップしました。
553名無しさん@お腹いっぱい。:02/05/31 22:13
>>551

ありがとうございました。
できました。
でも理由がよくわからないので、これから考えてみます。
554Cで:02/05/31 22:23
1,2,3,4,5と書かれたカードがそれぞれ、2,3,5,5,5枚ある。
その全部のカードを使って5桁の数を4つつくる。
その4つの和が123456になる時、4つの数を大きい順にa,b,c,dとおく。
そのabcdのすべての組を表示するプログラムを組め

ってやつなんだけど誰かわかる?
>>554
それ必修の(自由提出でない)宿題?
556554:02/05/31 22:25
>>555
うん。必修の宿題。
557554:02/05/31 22:28
5桁の数を4つすべて総当りで調べるプログラム作ったんだけど
ループ回数多すぎて失敗。
>>554
面白そうだ・・・
559名無しさん@お腹いっぱい。:02/05/31 22:49
う〜ん。。。553なんですが、まだ551さんの書いてあるようなのは習ってなくて、意味がよくわからないのですが・・・。
一応、どういう理由でそれでできるか、も書かなければならないんで・・・
誰か答えじゃなくてもいいので、考え方だけでも教えてください。
>>554
とりあえずこれでいけると思うけど。
各桁最大5なので、四つ足しても高々20にしかならない。
ということは、最下位桁の合計が6になる組み合わせは
1+1+2+2 = 6 か
1+5+5+5
2+4+5+5
3+4+4+5
4+4+4+4 = 16の
5パターンしかない
で最下位桁を削って
合計が12345(または12344)になるパターンを探す問題に落とすことが出来る。
ここでまた、最下位桁の合計5(または4)の組み合わせは・・・と考えていくと、ループ回数はかなり減らせる・・・とおもふ。
561554:02/05/31 23:39
>>560
それも考えてみたんですけど
アルゴリズムが複雑になりすぎて、
初心者のおれにはできませんでした。
>>554
再帰の基本問題だと思うよ。
563554:02/05/31 23:42
>>562
始めのほうだけでもちょっとコード書いてみてくれませんか??
564デフォルトの名無しさん :02/05/31 23:43
Cのソースコードから整数型配列を定義した行を検索する正規表現を教えてください。

565562:02/05/31 23:46
じゃあとりあえず初めだけ。
int a[4][5];
main()
{
 check(0, 0, 6);
}
566554:02/05/31 23:49
>>565
とりあえずもう少し自分で考えてみます。
ってことでまた来ます!
567560:02/06/01 00:26
ダメだ・・・1つもヒットしねぇ・・・
マジで該当する組み合わせあんの?
組み合わせ無視で行きます
使えるカードの数字の合計は
1*2+2*3+3*5+4*5+5*5 = 2+6+15+20+25 = 68

総和が123456になるので、最下位の合計を16にすると、
残ったカードの数字の合計は68-16 = 52
これを
123456- 16 = 123440 : 68-16 = 52 と書く、次の桁は
123440- 140 = 123300 : 52-14 = 38
123300- 1300 = 122000 : 48-13 = 25
122000-12000 = 110000 : 25-12 = 13
110000-不可能

最下位桁を6とすると
123456- 6 = 123450 : 68-6 = 62
123450- 150 = 123300 : 62-14 = 48
123300- 1300 = 122000 : 58-13 = 35
122000-12000 = 110000 : 35-12 = 23
110000-不可能


漏れの頭では不可能でつ・・・
569568訂正:02/06/01 00:51
最下位桁を6とすると
123456- 6 = 123450 : 68-6 = 62
123450- 150 = 123300 : 62-15 = 47
123300- 1300 = 122000 : 57-13 = 34
122000-12000 = 110000 : 34-12 = 22;//漏れのプログラムはすでにこれが出来ないと言ってる
110000-不可能
570 :02/06/01 03:24
総当たりでやってもヒットするのなかった。
4つの数字の下の桁から埋めていって
4個数字を拾うごとに逐次チェック。
見込みのない組み合わせはすぐ放棄。
実行はすぐ終わるけど該当の組み合わせ無し。
571570:02/06/01 03:42
途中までいった一例

  3 4455
  4 3245
  3 3555
+ 3 2211
−−−−−−−−
 14 3456
  =

全体で2多いのでカードの数を 3, 4, 4, 5, 5枚ずつにかえるとヒットする組み合わせが出てくる。

23345
43445
24555
32111

とか。重複消すと45通りかな?
STLのnext_permutationでGo!
573570:02/06/01 04:16
3, 4, 4, 5, 5枚でなくて3, 3, 4, 5, 5枚でした。
問題が3, 3, 4, 5, 5の間違いだと仮定した場合、
2599375通りと予想
575574:02/06/01 11:14
2599374通りに訂正かも
goal

1011111111111111111111
1000100100001000000101
1110101110111101110001
1000000010100101011101
1011111010110001000001
1000100000010101011101
1010111110110111010111
1010001000000100000001
1111111111111111111101
               ↑
              start

1が壁で0が通れます。
この迷路を抜け出すプログラムがわかりません。
おしえてください。
>>576
どういうふうに経過・結果を出せって指定?
578576:02/06/01 15:41
>>577
抜け出すまでの道のりを座標で表示せよって問題です。

あとstartの位置が少しずれてます。(9,21)から出発です。
自分でどれぐらいできて、どこで詰まってるの?
580576:02/06/01 17:58
一応再帰的に解くことはできたんですが、寄り道した結果を表示させない方法がわかりません。

実行結果。
(8,20)→(7,20)→(7,19)→(7,18)→(6,18)→(7,17)→(7,16)→(6,16)→(5,16)→(4,16)→(4,17)→(4,18)→(4,19)→(4,20)→
(5,20)→(3,20)→(2,20)→(1,20)→(2,19)→(2,18)→(1,18)→(1,17)→(1,16)→(1,15)→(1,14)→(1,13)→(2,14)→(3,14)→
(4,14)→(4,13)→(4,12)→(3,12)→(3,11)→(5,12)→(6,12)→(7,12)→(7,11)→(7,10)→(7,9)→(6,9)→(5,9)→(5,10)→(4,9)
→(3,9)→(2,9)→(1,9)→(1,10)→(1,11)→(1,8)→(5,8)→(5,7)→(4,7)→(3,7)→(3,6)→(3,5)→(2,5)→(1,5)→(1,6)→(3,4)
→(3,3)→(2,3)→(1,3)→(1,2)→(1,1)→(0,1)→

1011111111111111111111
1222122122221222222121
1112121112111121112221
1002222212122121011121
1011111212112221222221
1000100222212101211121
1010111112112111212111
1010001002222100222221
1111111111111111111121

2は一度通った道です。
>>580
子がゴールにたどり着いたと返した経路を(こうするとゴールからスタートにむかって確定するから)
溜め込んで最後に逆順に出力するとか。
582576:02/06/01 18:22
>>581
やっぱ木構造使わなきゃ解けないですか。。
ポインタとかよくわからないから、今勉強中です。
>>582
木でもいいけど、再起を想定してたよ。

大雑把にいってこんな疑似コードで逆順、みたいな。

bool go( x, y ) {
 static struct xy { int x,y; } dirs[4] = { {1,0}, {0,-1}, {-1,0}, {0,1} };

 if ( x == GOAL_X && y == GOAL_Y )
  return true;

 for ( i = 0 ; i < 4 ; ++i ) {
  wx = x + dirs[i].x;
  wy = y + dirs[i].y;
  if ( map[wx][wy] == 0 ) {
   if ( go(wx,wy) ) {
    printf("(%d,%d)",wx,wy);
    return true;
   }
  }
 }

 return false;
}
584576:02/06/01 19:12
>>583
こんなにスマートなコードで書けたのか。。
逆順って考えは頭になかった。ありがとうございます。
585デフォルトの名無しさん:02/06/02 15:16
双方向リストの宿題がでました。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 10

typedef struct strdlist{
char key[LEN+1];
struct strdlist *prev;
struct strdlist *next;
}DLSTR;

void show_list( DLSTR *p){
printf("%10s %10s %10s %10s\n","address","key","prev","next");
while(p!=NULL){
printf("%10p %10s %10p %10p\n",p,p->key,p->prev,p->next);
p=p->next;
}
}
DLSTR *possearch(DLSTR *p,char str[]){
while(p->next != NULL){
if(strcmp(p->key,str)<=0 && strcmp(str,p->next->key) <=0)
return p;
p=p->next;
}
return p;
}
int main(void){
DLSTR head;
DLSTR *ptr,*p;
char data[LEN+1];
int com;

strcpy(head.key,"\0");
head.prev=NULL;
head.next=NULL;
分けて書きます
586デフォルトの名無しさん:02/06/02 15:17
do{
printf("command(挿入:1,削除:2,終了:3) ->");
scanf("%d",&com);

switch(com){
case 1:
printf("挿入する文字列 ->");
scanf("%s",data);
if( (ptr=(DLSTR *)malloc(sizeof(DLSTR)) )==NULL){
printf("mallocに失敗しました\n");
return 1;
}
p=possearch(&head,data);
ptr->prev=p;
ptr->next=p->next;
strcpy(ptr->key,data);

show_list(&head);
break;
case 2 :

break;
case 3:
break;

}
}while(com!=3);
return 0;
}
587デフォルトの名無しさん:02/06/02 15:17
case1の、strcpy(ptr->key,data);の下と、case2の空いてるとこにプログラムを書くものです。
これは、アルファベット順に出力されるプログラムです。
例えば最初にbと入力して、次にaと入力したら、
a
b
と出力されます。
で、case1の方をやっていたのですが、
p->next->prev=ptr;
p->next=ptr;
こう入力しました。
でも、これでは、何故かエラーが出てしまいます。
答えはcase1の方は3行らしいのですが、わかりません。
教えてください。
case1の方は
ptr->prev != NULL && (ptr->prev->next = ptr);
ptr->next != NULL && (ptr->next->prev = ptr);
別に
p->next != NULL && (p->next->prev = ptr);
p != NULL && (p->next = ptr);
でもいいけど。
589デフォルトの名無しさん:02/06/02 16:13
>>588

どうもです。
確かにそれでcase1はできるのですが、その書き方は習ってないので意味がよくわからないのですが・・・
590デフォルトの名無しさん:02/06/02 16:23
>>588

下の方で考えたらよくわかりました。
ありがとうございました。
591デフォルトの名無しさん:02/06/02 16:42
続いてcase2の方を考えたのですが、またわかりません。
前にただのリスト(双方向リストじゃないやつ)でやったときは、削除する場所pを見つけるために、関数を使ってました。
そして、その関数でpがわかります
その後は次のような感じになります。

case 2:
if(p==NULL){
printf("そのような文字列はありません");
}

ptr=p->next;
p->next=ptr->next;
free(ptr);
show_list(&head)
}
break

こんかいは >>585->>586の状態で、case 2のあとに削除のプログラムを書くのですが・・・助けてください。
双方向リストなんて単方向リストにprevを付けただけでしょ。
何故分からんのかが不思議だ。
どこが分からないの?
全く分からないなら聞いてもこれからついてけなくなるだけだから
自分でやった方がいいと思うが。
紙に箱と矢印を書いてどうしたいのかを整理すればすぐに理解できると思う
答え書いちゃってみるテスト

DLSTR *possearch2(DLSTR *p,char str[])
{
 while(p != NULL)
 {
  if(!strcmp(p->key,str))
   return p;
  p=p->next;
 }
 return NULL;
} 


case 2 :
   printf("削除する文字列 ->");
   scanf("%s",data);
   p = possearch2(&head, data);
   if(p != NULL)
   {
    p->prev != NULL && (p->prev->next = p->next);
    p->next != NULL && (p->next->prev = p->prev);
    free(p);
   }
   show_list(&head);
   break;
596デフォルトの名無しさん:02/06/02 17:02
わからないのは、削除する場所、pを見つける方法です。
前に今回とほとんど同じようなリストのプログラムの勉強をしました。
そのときは、削除する場所を見つける関数が最初から書かれていたので、それを使ったのです。
でも、今回(双方向リスト)のプログラムはその関数がなくて、case 2の中で削除する場所を見つけるにはどうすればいいのか迷いました。
>>596
分からないときはいつまでソースを眺めてても時間の無駄だから、
紙に図を書いて、脳内シミュレートしてみるのが理解への近道。
答えを聞いてばかりじゃなくてやってみろ。
>>595
関係無いけどdetach部分を関数に分けたいな(笑)
そもそもscanfは使いたくないな。
最後に全部freeしときたいな。
600:02/06/02 21:50
%fは何桁まで表示ですか?
floatで表現しうる精度
VC++の場合LDBL_MAX が 1.7976931348623158e+308 で
LDBL_MIN が 2.2250738585072014e-308 だから、
308桁+デフォルトの少数以下の桁(6桁)
>>602
FLT_*をみないとダメだろ。%lfじゃないんだから
>>603
”表示”だから%lfも%fも同じでないの?
%fだと切りつめられても文句は言えないと思うが。
606caslです:02/06/03 13:29
レジスタ GR0 の内容を 10進数で表示するサブルーチンを作成てください

メインプログラムでレジスタ GR0 に値を格納して,作成した表示ルーチンを呼び出して下さい。
607助けて・・・・:02/06/03 15:21
子供プロセスを二人のみつくるプログラムを作成せよ。各プロセスは何か画面に
メッセージを表示してから終了すること。If文をつかうこと。ただし
1:親と子はそれぞれ違うメッセージを出力すること。
2:兄弟は全く同じメッセージを出力すること。
3:それ以外のプロセスは生成されないこと。
誰か助けてください・・・C言語でforkを使うらしいのですが。
>>607
googleで「fork プロセス」を検索せよ
609助けて・・・・:02/06/03 15:41
>>608さん
ありがとうございます!googleでforkを検索するところまではやったのですが
プロセスを付け加えることは知らなかったので助かりました。
>>606
CASLぜんぜん知らんので、でっち上げアセンブリで。
# CASLの命令セットってどこ見ればいい?

.PRINT_AS_DEC
  push r0 ;GR0
  push r1 ;work
  push r2 ;work
  clr r1
  clr r2
  test r0
.LOOP
  jz NEXT ;jump on zero
  mod r0,10,r1 ;10==0xA
  mul r2,0x10,r2 ;or lsl r2,4,r2
  add r1,r2,r2
  div r0,10,r0
  jp LOOP
.NEXT
  out r2 ;print
  pop r2
  pop r1
  pop r0
ret

r0〜r2がこわれていいなら最初と最後のpushとpopはいらんけど。
611デフォルトの名無しさん:02/06/03 20:02
612宿題ではありませんが、:02/06/03 20:09
当方プログラム自体まったくの初心者なのですが。
pythonとやらで、とりあえず、繰り返し文と判断文等を知った所で、
5から200までの素数を列挙するように書いてみた、
つもりだったのですが、動きません。
どこが拙いのでしょうか?教えて下さい。

>>>a=0
>>>n=2
>>>list[2]
>>>while n<100:
     if (2*n+1)%list[a]!=0:
         a=a+1
         if (+a)>len(list):
                list[:0]=[n]
                print 2*n+1
                a=0
                n=n+1
     if (2*n+1)%list[a]==0:
         a=0
         n=n+1

Traceback (most recent call last):
File "<pyshell#9>", line 9, in ?
if (2*n+1)%list[a]==0:
IndexError: list index out of range

list[2] ?
a=a+1の次の行でa==len(list) のとき、 list[a] は、エラー、ってことか?
>>613
list=[2]
でした済みません。
そこを間違えてるわけでは、ありません。
616612,615,616:02/06/03 21:22
>>614
あっ、わかりました。
listがlist[a-1]までしか、ないんですね。
617612:02/06/03 21:29
>>> a=0
>>> n=2
>>> list=[2]
>>> while n<100:
if (2*n+1)%list[a]!=0:
a=a+1
if (a+1)>len(list):
list[:0]=[n]
print 2*n+1
a=0
n=n+1
if (2*n+1)%list[a]==0:
a=0
n=n+1

で大丈夫でした。お騒がせしました。
618デフォルトの名無しさん:02/06/03 21:58
よろしくおながいします。

「カタログする」「カタログされた」と、動詞で使われる「カタログ」はどういう意味なのでしょうか?
ファイルの操作だという事はなんとなくわかるのですが・・・・・
ググるにも「カタログ」という語が一般的過ぎて難しいのです。
>>618
英和辞典でcatalog引け
620デフォルトの名無しさん:02/06/03 22:21
=card catalog; 【コンピユータ】 カタログ, (プログラムや命令の)一覧目録. 
− vt. カタログに作る[載せる]; 【コンピユータ】 (プログラムや命令を)カタログに載せる. 

辞書に載ってますた。驚きです。

「カタログされてないファイル」ってのはどういうことでしょうか。
作業領域内で一時的に作成されるファイルなどの事ですか?
>>620
汎用機?
622606:02/06/04 00:39
>>610
?わからない...
623610:02/06/04 02:50
CASLってけっこう汚いのね。。シンプルだけど。ていうかRISCだと思ってた。
乗除算がないのはいい課題がなくなるからと深読みしたりして。
まあ、フィールド長の問題なんでしょうけど。

CONSTS DC 10000, 1000, 100, 10, 1, 0
OBUF DS 5
OBUFLEN DC 5

PRINT10 PUSH 0,GR0
PUSH 0,GR1
PUSH 0,GR2
PUSH 0,GR3
XOR GR1,GR1
LOOP1 LD GR2,CONSTS,GR1
JZE NEXT1
XOR GR3,GR3
LOOP2 CPA GR2,GR0
JPL NEXT2
SUBA GR0,GR2
LAD GR3,1,GR3
JUMP LOOP2
NEXT2 LAD GR3,48,GR3
ST GR3,OBUF,GR1
LAD GR1,1,GR1
JUMP LOOP1
NEXT1 OUT OBUF,OBUFLEN
POP GR3
POP GR2
POP GR1
POP GR0
RET

実行してないので無責任モード。
5桁ないとき頭に0がつくけど気になるなら勝手にどーぞ。


どうしようもなくなったら、まずCでライブラリ関数を使わずに書いて
人間コンパイルすればOKよ(本当か!?)。
624デフォルトの名無しさん:02/06/04 06:19
>>621
そうです。
汎用機・・・・・・・・
言葉は知ってたけど現物は初めて見ました(w
よく覚えてないけど、カタログドプロシージャってのがあったなぁ。
626ハッシュ:02/06/04 16:56
ハッシュ表の大きさを10個として(領域を確保して)
ハッシュ検索プログラムを作成してください。
W杯が見たいのに帰れません。おねがいします。


keyは何だ?
文字列か?
628ハッシュ:02/06/04 17:14
文字列です
データは?
言語は?
631ハッシュ:02/06/04 17:25
言語はC言語です。
データはa,ab,abc,d,de,def,g,gh,ghiです。
なんだソリャ
633キャノン:02/06/04 18:58
     ▼問題▼
◆◆反復型の成績判定◆◆
 10人分のプログラムについて、一人ずつ成績判定を行うプログラムを
作る。途中までコードを記述してあるので、残りのプログラムリストを
完成させなさい。

ヒント:成績判定の部分は多分岐構造になるので、Select〜Caseステート
メントを使うといいでしょう。以下 プログラム リスト

Sub 反復型の成績判定()

' 10人分の得点を設定
Dim X As Variant
X = Array(60, 82, 87, 50, 86, 89, 76, 58, 68)

' 判定文字列の設定
Dim hantei As Variant
hantei = Array("不可", "可", "良", "優", "対象外")
Dim h As Integer

Const N As Integer = 10
Dim i As Integer
Dim tokuten As Integer

For i = 1 To N
tokuten = X(i - 1)
/* >>631 */
/* C code produced by gperf version 2.7.2 */
/* Command-line: gperf */

#define TOTAL_KEYWORDS 9
#define MIN_WORD_LENGTH 1
#define MAX_WORD_LENGTH 3
#define MIN_HASH_VALUE 1
#define MAX_HASH_VALUE 21
/* maximum key range = 21, duplicates = 0 */

#ifdef __GNUC__
__inline
#else
#ifdef __cplusplus
inline
#endif
#endif
static unsigned int
hash (str, len)
register const char *str;
register unsigned int len;
{
static unsigned char asso_values[] =
{
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 5, 0, 0,
10, 0, 0, 0, 0, 0, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22
};
return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
}
635634の続き:02/06/04 19:38

#ifdef __GNUC__
__inline
#endif
const char *
in_word_set (str, len)
register const char *str;
register unsigned int len;
{
static const char * wordlist[] =
{
"",
"g",
"gh",
"ghi",
"", "", "",
"ab",
"abc",
"", "",
"a",
"de",
"def",
"", "", "", "", "", "", "",
"d"
};

if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash (str, len);

if (key <= MAX_HASH_VALUE && key >= 0)
{
register const char *s = wordlist[key];

if (*str == *s && !strcmp (str + 1, s + 1))
return s;
}
}
return 0;
}
HASHのサイズは10でお願いします
せっかくgperfで完全ハッシュにしてるのに何が不満なんだッ
要求仕様を満たしていないのが不満です
639::02/06/04 20:09
自分で考えなさい
(define x '(60 82 87 -5 86 140 58 68))
(define (hantei tokuten)
(cond ((< tokuten 0) '対象外)
((<= tokuten 40) '不可)
((<= tokuten 60) '可)
((<= tokuten 80) '良)
((<= tokuten 100) '優)
(else '対象外)))
(display (map hantei x))
あれか、フィフティーキャニバってゆうやつ
642デフォルトの名無しさん:02/06/04 20:24
int
sxhash(key)
const char *key;
{
static char *s[] = {"a", "ab", "abc", "d", "de", "def", "g", "gh", "ghi"
};
int l=0, m, r=8;

while (l < r) {
m = (l + r) / 2;
if (strcmp(s[m], key)<0) l = m + 1; else r = m;
}
if (!strcmp(s[l], key)) return l;
return 9;
}
ちゃんとコメントを書いてください。
コードと同程度の量のコメントが書けないのは問題外ですよ?
>>643
年寄りはされ。
>コードと同程度の量のコメントが書けないのは問題外ですよ?

コメントジェネレータでもつくるか(ワラ
$str =~ s/int/\/*int型変数の宣言*\//g
645通すとコードが動かなくなります。
int i=0;
printf("%d", i);



/*int型変数の宣言*/ i=0;
printf("%d", i);


error C2065: 'i' : 定義されていない識別子です。
auto int i=0;
すべての行に40カラム目からコメントが書かれていて、
印刷すると紙の左半分がコード、右半分がコメントと
きれいに分かれるソースを昔見たことがあります。

>>643 ひょっとして、あのソースの作者様ですか?
>>642
そりゃバイナリサーチ。
>>643
i++; //iに1を足す
>>652
それはコメントの量が多すぎます
654デフォルトの名無しさん:02/06/05 19:22
>>651
わかってないね。バイナリサーチは実装がたまたまそうなっているだけ。
ハッシュ関数ってのは、入力からハッシュ値を計算して返す関数であって、
それがどう実装されていようと、この関数は、文字列を受け取って0-9 を
返すかんすうなの。わかる?
特定の文字列しか扱えないハッシュ関数か。しかもO(log n)。
つーか、>>626はハッシュ*検索*プログラムといってるが。
656C初心者です:02/06/05 19:28
テキストファイルのある特定の文字列を含んだ行を
異なるファイルとして抽出するプログラムをCで2〜3種類作る、
という課題が出たのですが、1つも思い浮かびません。
ご教授頂けませんでしょうか?よろしくお願いします。
>>656
main(int argc, char * argv[])
{
 char cmd[4096];
 sprintf(cmd, "fgrep %s > %s", argv[1], argv[2]);
 system(cmd);
}

main(int argc, char * argv[])
{
 char cmd[4096];
 sprintf(cmd, "grep -F %s > %s", argv[1], argv[2]);
 system(cmd);
}
>>657
main(int argc, char * argv[])
{
 char cmd[4096];
 sprintf(cmd, "fgrep %s %s > %s", argv[1], argv[2], argv[3]);
 system(cmd);
}

main(int argc, char * argv[])
{
 char cmd[4096];
 sprintf(cmd, "grep %s %s > %s", argv[1], argv[2], argv[3]);
 system(cmd);
}
じゃないのか?
659656:02/06/05 19:40
>>657
ありがとうございます。
しかしチンプンカンプン・・・^^;
これから各関数の勉強をして参ります。

こんなにすぐ作れてしまうとは・・・凄い。
660656:02/06/05 19:41
>>658
ありがとうございます。

・・・・・・・(^^;;

いろいろやってみます。
>>660
騙されるな
外部プログラムに渡しているだけで、Cで処理をしているわけじゃないから合格もらえないぞ
合格もらえないか要領がいいとして優がくるかのどっちかだな。
自分が採点するなら、要求は満たしてるから仕方なく合格はやるが、優はやりたくないな、という感じ
windowsだから、デフォルトで*grepが無いという罠
>>664
BCC5.5.1を入れておけば、Turbo grepが起動する罠。
>>664
find とかいうパチもんがあったっけ。
strtok()とか。

BM法と言う手もあるが。
strtok()は違うだろ。
strstr
670デフォルトの名無しさん:02/06/06 17:44
VBで3角形を表示する宿題がでました。
適当にネットでソースを発見し、宿題を終えたのですが、ちょっと理解できません。

Option Explicit
Dim i, n As Integer

Private Sub Command1_Click()
n = Text1.Text
Dim x1, x2, y1, y2, p1 As Double

Picture1.Scale (-1, 1)-(1, -1)
Picture1.DrawWidth = 2

p1 = 4# * Atn(1#)
n = Val(Text1.Text)
For i = 1 To n
x1 = Cos(2 * p1 * (i - 1) / n)
y1 = Sin(2 * p1 * (i - 1) / n)
x2 = Cos(2 * p1 * i / n)
y2 = Sin(2 * p1 * i / n)

Picture1.Line (x1, y1)-(x2, y2)
Next i

End Sub


わからないところは、
Picture1.Scale (-1, 1)-(1, -1)
Picture1.DrawWidth = 2

x1 = Cos(2 * p1 * (i - 1) / n)
y1 = Sin(2 * p1 * (i - 1) / n)
x2 = Cos(2 * p1 * i / n)
y2 = Sin(2 * p1 * i / n)

この6行です。
誰か教えてください。
671670:02/06/06 17:59
ちょっと訂正。
3角形→n角形です。
672デフォルトの名無しさん:02/06/06 18:00
VisualBasic使い始めた初心者なんですけど、
宿題の中で、時間をmsecまで出せというのがありまして。。。
どうやったらいいのでしょうか?
学校の授業でVBなんかやるんだ。楽しそうだな、色々と。
>>656
この処理は、
1、ファイルの1行リード
2、特定の文字列を含むか否かの判定
3、ファイルの1行ライト
となるわけだが、1や3は当然わかってるものとして進めていいよね?

で、2のヒントだが、strで始まる関数の説明を片っ端から読むべし。
ただ題意からして、解答のうち1つはstr関数を使わず自力で判定するのを求められてる
ように思う。その場合は単純に1文字ずつ比較していくのでいいのではないかな。
>>672
Googleで検索してみそ、使える関数がわかるから。
676無責任な回答者:02/06/07 00:28
>>670
VBはよく知らんのだが、それなりに答えてみる。
>Picture1.Scale (-1, 1)-(1, -1)
たぶん、座標系の設定

>Picture1.DrawWidth = 2
たぶん、描く線の太さの設定。
この2つはPicture1のメソッドとかプロパティとかを調べてみよう。
VBのヘルプシステムがどうなってるか知らんけど。

x1 = Cos(2 * p1 * (i - 1) / n)
y1 = Sin(2 * p1 * (i - 1) / n)
x2 = Cos(2 * p1 * i / n)
y2 = Sin(2 * p1 * i / n)
これは円周をn等分したi-1番目とi番目の点の座標を計算している。
文字で解説するのは面倒なので、詳しくは身近で数学が得意な奴に聞け。
677専門生:02/06/07 03:39
-655536と65536を正規化した場合、同じ結果になりますか?
どちらも0.1×2の17乗になってしまいます
正規化ってどういう正規化よ?
>>677
実はintが2バイトですか?
> どちらも0.1×2の17乗になってしまいます
ってんだからintじゃなくてfloat?
>>677
-655536は-65536の間違いとすると
結果の符号ビットを見てないだけとか。
単に5が一個余計なだけなら2の補数表現で下16bitだけとれば0だが、
0.1×2の17乗ってのがわからん。
683351:02/06/07 13:57
little
2 little
3 little indians,
4 little
5 little
6 little indians,
7 little
8 little
9 little indians,
10 little indian boys.

この歌詞を画面に表示するプログラムを作成せよ
ループを用いることによって、プログラム中に「little」「indian」は一回しか出ないとし
数字「2」と「4から10」は一回も出てこない。
while文とfor文の2通りをおながいします
684683:02/06/07 14:00
一行目のlittleのまえの1が抜けてしまいました
"indians"は"indian"1回分になるのか?
例えば

while (
{
途中で書いてしまった・・・
ようはコード中に"indians"と"indian"は両方出現してもいい?だめ?
687683:02/06/07 14:10
>>685
多分なると思います。

 
#! /usr/bin/ruby

LITTLE = 'little'
INDIAN = 'indian'
i = 0
1.upto(3) do
1.upto(3) do |j|
puts "#{i+=1} #{LITTLE}#{" #{INDIAN}s," if j==3}"
end
end
puts "#{i+=1} #{LITTLE} #{INDIAN} boys."
#include <stdio.h>

main()
{
 char* l = "little";
 char* i = "indian";
 for(;;) break;
 while("永遠ループ") break;
 printf("1 %s", l);
 printf("2 %s", l);
 printf("3 %s %ss,", l, i);
 printf("4 %s", l);
 printf("5 %s", l);
 printf("6 %s %ss,", l, i);
 printf("7 %s", l);
 printf("8 %s", l);
 printf("9 %s %ss,", l, i);
 printf("10 %s %s boys.", l, i);
}
>>689
ダメだ
#include <stdio.h>

main()
{
 char* l = "little";
 char* i = "indian";
 for(;;) break;
 while("永遠ループ") break;
 printf("%d %s", 1, l);
 printf("%d %s", 1 + 1, l);
 printf("%d %s %ss,", 1 + 1 + 1, l, i);
 printf("%d %s", 1 + 1 + 1 + 1, l);
 printf("%d %s", 1 + 1 + 1 + 1 + 1, l);
 printf("%d %s %ss,", 1 + 1 + 1 + 1 + 1 + 1, l, i);
 printf("%d %s", 1 + 1 + 1 + 1 + 1 + 1 + 1, l);
 printf("%d %s", 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1, l);
 printf("%d %s %ss,", 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1, l, i);
 printf("%d %s %s boys.", 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1, l, i);
}
int i = 1;

do
{
printf("\r\n%d little", i);

if (i % 3 == 0 || i == 3*3+1)
printf(" indian");

if (i % 3 == 0)
printf("s");

} while (i++ < 3*3+1);

printf(" boys", i);
>>690
3は書いてもいいらしいから有効利用しようぜ
>>692
#include <stdio.h>

main()
{
 char* l = "little";
 char* i = "indian";
 for(;;) break;
 while("永遠ループ") break;
 printf("%d %s\n", 1, l);
 printf("%d %s\n", 1 + 1, l);
 printf("3 %s %ss,\n", l, i);
 printf("%d %s\n", 3+1, l);
 printf("%d %s\n", 3+3-1, l);
 printf("%d %s %ss,\n", 3+3, l, i);
 printf("%d %s\n", 3+3+1, l);
 printf("%d %s\n", 3*3-1, l);
 printf("%d %s %ss,\n", 3*3, l, i);
 printf("%d %s %s boys.\n", 3*3+1, l, i);
}
694デフォルトの名無しさん:02/06/07 14:27
#include <stdio.h>

#define a little_indians

static const char a[] = {
0x31, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x0a,
0x32, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x0a,
0x33, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20,
0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x2c, 0x0a,
0x34, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x0a,
0x35, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x0a,
0x36, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20,
0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x2c, 0x0a,
0x37, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x0a,
0x38, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x0a,
0x39, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20,
0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x2c, 0x0a,
0x31, 0x30, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65,
0x20, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x62,
0x6f, 0x79, 0x73, 0x2e, 0x0a,
};

int main()
{
int i;
for (i = 0; i < sizeof(a); ++i) {
putchar(a[i]);
}
return 0;
}
695683:02/06/07 14:45
ありがとうございます!
696デフォルトの名無しさん:02/06/07 14:58
691さんみたいな感じで、for文はできませんか?
>>691
なんで最初に改行して最後にしないの?
というかなんで\rを?
確かめてないけどこんなもんじゃないの

for (i = 1; i < 3*3+1; i++) {
printf("\r\n%d little", i);

if (i % 3 == 0 || i == 3*3+1)
printf(" indian");

if (i % 3 == 0)
printf("s");
}

printf(" boys\n", i);
699683:02/06/07 15:12
for文とdo while文を同一画面を得るようにしたいんですが、わかりますか?
>>699
お前の日本語がわからん
>>699
お前、一から十まで全部聞いて済まそうとするなよ。
自分でやらんと何も身につかんぞ。俺の知ったことじゃないが。
702683:02/06/07 15:21
>>698
エラー
703683:02/06/07 15:31
>>701
鋭い視点から物事を突きますね!わかりますた。
for文は自力でやります!
704デフォルトの名無しさん:02/06/07 15:45
あの、もし答えていただけたらうれしいのですが
「オブジェクトインスタンスクローン」って何ですか。
オブジェクトインスタンスのクローンのことですか。
そして、1つのオブジェクトインスタンスに
別のオブジェクトインスタンスが含まれるということはあるのですか。
>>704
シルベスタ・スタローンの親戚。
3点。
>>704
インスタンスのクローン(複製)です。

あるインスタンスAに別のインスタンスBが含まれることはもちろんありえます。
この場合のAを複製するには、シャローコピーとディープコピーの
二つの方法がありますが、単に「クローン」と言った場合、
どちらになるかは決まっていません。
708デフォルトの名無しさん:02/06/07 16:07
707様
ありがとうございます。
プログラミングはド素人の翻訳者なのですが、以下の文がわからなくて
お尋ねしますた(翻訳板で、わからないことは2chのどこかの板で聞く
と書いてあったので真似してみました)。
目茶苦茶書き込んで、本当にすみませんでした。

もし、以下の文に間違いがあったら、指摘していただけたらさらに
ありがたいのですが、厚かましすぎるので、無視していただいても
いいです。

State changes in an object instance clone trigger transmission
of a state change message to other object instance clones
of the same object instance.
あるオブジェクトインスタンスのクローン内でステートの変更を行うと、
元のオブジェクトインスタンスに含まれる別のオブジェクト
インスタンスのクローンに対し、ステート変更メッセージが転送される。
709デフォルトの名無しさん:02/06/07 16:09
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

ホクトナンバー1PK、あの「つじのぞみ」ちゃんのアカウントがなんとオークション中!!!
今なら○○○○もついてくるかも!!きゃーエッチ〜。もしかして女子高生の・・・ひ・み・つ♪
http://www.muhoho.com/~tsuji/
http://www.kinsan.ne.jp/uo/bbs2-4/petit.cgi

☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
710707:02/06/07 16:27
>>708
そういうことは先に言え(w

その訳は違うと思う。

元のインスタンス(A)があって、
それのクローンがいっぱいあるわけだ(B,C,D)。
で、そのうちの一つ、たとえばBのステートが変更されると、
ほかのクローン(C、D)に、メッセージが転送される

って意味じゃないのか?
>>708
なんかクローンが沢山あるみたいだけど、どういう話なのか見えないなあ。

〜ステートの変更を行うと、同じオブジェクトインスタンスに対する他のクローンにも
ステート変更メッセージが送信される?
712708:02/06/07 16:32
考えてみれば、そういうことなのですね。
わかったような気がします。
ありがとうございました。
707様のことは忘れません。
また、どこかでお会いしたら、教えてください。

皆様、どうもお邪魔しました。
>>708
頼む、訳した文章を出版物にしないでくれ
714708:02/06/07 16:39
しません、しません(w
State changes       状態の変化
in             〜内の
an object instance clone  オブジェクトインスタンスの複製
trigger          発端となる

以上で、
「オブジェクトインスタンスの複製内の状態の変化が発端となり」

transmission of 〜の送信
a state change message 状態変更のメッセージ
to other object instance clones 他のオブジェクトインスタンスの複製へ
of the same object instance. 同一種類のオブジェクトインスタンスの

「同一種類のオブジェクトインスタンスの他のオブジェクトインスタンスの複製へ、
状態変更のメッセージが送信される」

こんな感じ?
716693:02/06/07 23:57
>>683

エラーにならんぞ。条件判定で=入れとかないとだめとか 1 littleになるとか
そのぐらいは自分でやれ。

まさかint main(void)書いていないということは無いよな。
少なくともエラーにはならんはずだけど。

、、、あり得る。
>>716
あんた誰よ?
693は俺だぞ
>>683

/* 数字は3のみ */
int i, j;
for( i = j = 3; (i ^ 3) >= - 3; i--, j = 3 )
do {
j--;
printf("%d little%s%s\n",
(j ^ 3) + (i ^ 3) * 3,
j * i ? "" : " indian",
j ? i ? "" : " boys." : "s,");
} while ( j * i );
719683:02/06/08 11:21
for文が出来ない・・・
720683:02/06/08 11:50
for(式1;式2;式3)文 らしい
ぃっτょι
722683:02/06/08 12:02
in function `main`って言われるのは何故??
723683:02/06/08 12:09
出来た!と思ったら、10番目のlittleが出てきてなかった・・・
>>683
お前まだやってたのか。
725デフォルトの名無しさん:02/06/08 17:02
今、DIME誌(小学館)を読んでいたが
高校生の「情報」教科書では
携帯電話やポケベルのサービス開始年を覚えなきゃダメなのか?
ファイルを管理するツリー構造の節の部分(ディレクトリ)を
「フォルダ」として覚えなきゃダメなのか?

俺も年取ったのか?(享年28)
>>725
死むな。生きる。
>>725
調べればわかるし、知ってても意味の無いものを丸暗記させるのが、日本の教育だしょ。
その検索の方法でも教えたほうがどれほど役に立つことか
このプログラムを実行するとエラーがでます。
なぜでしょうか。

#include<stdio.h>
#include<math.h>
void main(void){

double x1,x2,cc;

x1=1.50;                                                                                   
cc=1.0;
while(c>=pow(10,-5)){
x2=(x1*x1+1.0)/3.0;
cc=fabs((x2-x1)/x1);

x1=x2;
}
printf("x=%f",x1);
}
730デフォルトの名無しさん:02/06/09 13:33
確か、x^2-3 x+1=0を解くプログラムです。。
>>729
実行する以前にコンパイルできません。
それとエラーならエラーメッセージも貼りましょう。
732デフォルトの名無しさん:02/06/09 13:40
x1=1.50;の所が、文字エラーとかで、
エラーが102でました。                     
>>731
エラーが出たなら貼りましょう。
>>732
エラー番号ではなく、エラーメッセージ全部じゃないと意味がありません。
>>729をトリプルクリックすると
x1=1.50;の後ろに大量の全角空白があってビビる
736デフォルトの名無しさん:02/06/09 13:46
>>735
わかりました。
多分、空白のせいで、エラーが出てました。
ありがとうございます。
あと、c→cc
738デフォルトの名無しさん:02/06/09 13:48
すいません、よかったら、このプログラムよくわからないので、
教えてくれますか?
739デフォルトの名無しさん:02/06/09 13:49
#include<stdio.h>って何ですか、、って感じです。。
>>738
さすがに付き合いきれん。
先生に聞け(笑)
>>739
プレイの項目に「スタジオ内でのエッチも含む」という事です。
教えかけようとして、739見てやめた。
           从/

        __∧_∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      /(  ´Д`)V  < はッ!先生、ちがっ・・・!、寝てません!
  __ / /|  u゚_/ )   \_______________
  \  ( ( ̄ ̄⊆_ノ ̄\
  ||\ `ー⊃         \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
744デフォルトの名無しさん:02/06/09 13:57

問題2.
10個の非実数値を読み込み、それを小→大の順に並べ、
一番大きい数の平方根を求めよ。
条件 √xは言語Cでは、sqrt(x)と書く。
   このsqrt(x)を使ってはいけない。

この問題を教えてください。
>>744
非実数値ってなんですか?
整数のことだろ
虚数?
748デフォルトの名無しさん:02/06/09 14:03
多分、整数だと思います。
749デフォルトの名無しさん:02/06/09 14:08
(-_-).。oO(ヘイホーコソ・・・・)
問題の表現に問題があるな。
非実数値って言葉もそうだが、「それを小→大の順に並べ」は表示しろってことか? も明確でない。
さすがに最後の求めた結果は表示しないとおかしいと推測できるが。
平方根は実数値でいいのかな?
752デフォルトの名無しさん:02/06/09 14:12
平方根は実数値でいいと思います。。
なにかこの問題の新しいスレがたっとりますが本人の仕業なのですか?
言語Cっていう言い方がカコイイ
755デフォルトの名無しさん:02/06/09 14:17
本人の仕業です。
>>750
printf("求めました");
>>744
非負値の間違いと思われ。
758るーぷ:02/06/11 15:29
ループ関数ってなんですか?
759デフォルトの名無しさん:02/06/11 15:32
文字列を扱うクラスstrを作りなさい
仕様は以下のとおりです、
1、コンストラクタで文字列を指定して
  初期化できるようにする
2、Setメンバ関数で文字列を設定するようにする
3、Lookメンバ関数で文字列を参照するようにする
4、Chainメンバ関数ですでに保持している文字列に
 指定された文字列を連結できるようにする。

main関数を用いてこのクラスが正しく動作することを確認する
760るーぷ:02/06/11 15:37
ループ関数ってなんですか??

761デフォルトの名無しさん:02/06/11 16:05
google検索してみましたか?
762るーぷ:02/06/11 16:08
googleで検索したんですけど
いまいちいいサイトがないので、
わかりません。
>>759

#include <string>
#include <iostream>

class str
{
 std::string str_;
public:
 str(const char* s) : str_(s) {}
 void Set(const char* s) { str_ = s; }
 const char* Lock() { return str_.c_str(); }
 void Chain(const char* s) { str_ += s; }
};

main()
{
 str s("string");
 std::cout << s.Lock() << std::endl;
 s.Set("s::Set");
 std::cout << s.Lock() << std::endl;
 s.Chain(" + s::Chain");
 std::cout << s.Lock() << std::endl;
}

(゚д゚;)・・・・・
>>763
s/Lock/Look/g
>>765
どうでもいい。
>>764-765
ゴメソ
768C初心者:02/06/11 20:04
ある特定の文字列を含んだ行を異なるファイルとして抽出するプログラム。

1)インプット用、アウトプット用ファイル名の入力。
2)検索キーワードの入力
3)検索キーワードの文字数を数える→strlen()で
4)インプット用ファイルをオープン
5)インプット用ファイルからfgets()で1段落をゲット
6)キーワードの一文字目とゲットした1段落の一文字目を比較
6−1)合致していなければゲットした二文字目を比較。
6−2)合致していればキーワードの二文字目とゲットした二文字目を比較。
7)上記の操作のパターンを用いてキーワードが含まれているかどうかを確認。
8)キーワードが含まれていればゲットした1段落を新ファイルにアウトプット

このような課題が出たのですが、1段落ずつGetする方法、
文字列が含まれていたらその段落全てをputする方法等、
分からない点が多いです。
ご教授頂けませんでしょうか?
1行(\nマデ)=1段落とすればいいのでは。
>>1768
1行目で行を出力といいながら
後半は段落全てを出力か・・・
実はhtmlファイルで、<p> ~ </p>を認識しなければいけないとか(マテ
>>768
行頭から改行までを1段落ということでいいかな。

>1段落ずつGetする方法
char型の十分大きい配列を用意してfgetsを使って読み込む。

>文字列が含まれていたらその段落全てをputする方法等
これは「文字列中にキーワードが含まれているか判定する関数」(A)と
「段落をputする処理」に分ける。
(A)はさらに「文字列とキーワードを1文字ずつずらしながら
(一致するか行末まで)ループする処理」と、
「文字列の先頭と、キーワードが一致するか判定する関数」(B)に分ける。
(B)の実装は「比較しながらキーワード末or不一致になるまでループまわす」ね。
773スレ間違えた厨房:02/06/11 20:57
10 rem
20 dim a(20),b(20)
30 for i=i to 20
以下略

で数値をいくつか入力するとその数字と順位が表示
されるようにしたのですが平均値も表示するには
どうしたら良いのですか?
forループ中で点数を足してって合計求めて、
総人数で割ったものを表示するようにすればいい。
べつにオーバーフローとか気にする問題でもないんだろ。
775スレ間違えた厨房:02/06/11 21:09
>>774
BASIC初めて4時間でまだ何も・・・
776768:02/06/11 21:23
皆さんありがとうございました。
大変参考になりました!
777スレ間違えた厨房:02/06/11 22:06
10 rem
20 dim a(20),b(20)
30 for i=i to 20
40 print i;
50 input a(i)
60 next i
70 for I=1 to 20
80 b(i)=1
90 next i
100 for i=1 to 20
110 for j=1 to 20
120 if a(i)<a(J) then b(I)B(I)+1
130 next j
140 next i
145 print ";""
150 for i=1 to 20
160 print A(I);B(I)
170 next i
180 end

で平均値を割り出すには何を加えたらよいのですか?
>>777
とりあえず120に=が抜けていると思いまーす。
779スレ間違えた厨房:02/06/11 22:15
>>778
単なるミスですので気にしないで・・・
780デフォルトの名無しさん:02/06/12 02:27
import java.net.*;
import java.io.*;

class MultiClient extends Thread
{
MultiClient(Socket ソケット)
{
クライアントのソケット = ソケット;
}

Socket クライアントのソケット;

public void run()
{
try
{
ObjectOutputStream 出力ストリーム;
ObjectInputStream 入力ストリーム;
String 入力ファイル名 = null;
出力ストリーム = new ObjectOutputStream(クライアントのソケット.getOutputStream());
入力ストリーム = new ObjectInputStream(クライアントのソケット.getInputStream());
入力ファイル名 = (String) 入力ストリーム.readObject();
File ファイル = new File(入力ファイル名);
long ファイルの大きさ;
ファイルの大きさ = ファイル.length();
byte[] バッファ = new byte[(int) ファイルの大きさ];
FileInputStream バイトストリーム = new FileInputStream(ファイル);
バイトストリーム.read(バッファ);
バイトストリーム.close();
String 文字列 = new String(バッファ);
出力ストリーム.writeObject(文字列);
}
catch (IOException error_report)
{
System.out.println(error_report);
System.exit(1);
}
catch (ClassNotFoundException error_report)
{
System.out.println(error_report);
System.exit(1);
}
}
}

これを複数のファイルが読み込めるように変更しなきゃならんのです。
どうしたらよいですか?
781デフォルトの名無しさん:02/06/12 02:46
宿題がでました
javaチャットを作ってこいとの事です。
どなたか簡単なjavaチャット作っていただけませんか?
http://freshmeat.net/search/?q=java+chat
好きなのをもってけ。
783デフォルトの名無しさん:02/06/12 02:59

-------Yahooオークション悪質者 報告書------------------

Yahoo! JAPAN ID : shigechin001(35)
オークションページ http://rating.auctions.yahoo.co.jp/jp/show/rating?userID=shigechin001&

××××過去評価抜粋 ××××
評価: 非常に悪い 出品者です。評価者は takebon621 (173)
必見!!Norton InternetSecurity2002クロスアップグレード(登録可能・送料無料)  (12月 14日 23時 45分)
落札者は「 非常に悪い 」と出品者を評価しました。
コメント:都合の悪い事は、一切載せておらずおまけに、綺麗なものと判断させるようなコメントでした。CD−ROMには、
大きなキズ、欠けている所があり、梱包も雑で非常に状態の悪い物でした。おまけに、落札時にあった、キャンペーン用の
ステッカーがはがされていました。この方の・(1月 7日 23時 54分) (最新)
返答:これで気は済みましたか?メールでのやり取りをさせていただきましたが、そちらの言われる事はむちゃくちゃです。
もう少し、筋の通る話をしてください。 (1月 8日 0時 8分)

評価: 非常に悪い 出品者です。評価者は cilver90 (-1)
激安!!デジカメNinja 新品・未開封 (11月 2日 23時 39分)
落札者は「 悪い 」と出品者を評価しました。
コメント:説明は、もっと、解りやすく丁寧に応対してください。 (11月 11日 13時 59分)
返答:誤解を招くような説明文にはしておりません。きちんと、ソフトであること、商品名もはっきり明記していること、写真もきちんと載せていること、
常識で分かる価格。それでどうしてデジカメ本体と間違われるのですか?他にどういう説明を求められられるのですか?それで間違っ・
(11月 11日 23時 47分)
返答:間違って落札されて逆恨みするとは非常に人間性を疑います。今までの取引の中で一番最低でした。今後他の方に迷惑をかけないよう
お願いしたいところです。 (11月 11日 23時 50分)

落札者は「 非常に悪い 」と出品者を評価しました。
コメント:逆恨みした覚えもありませんし、電話では、確認後、謝ったはずですが、まして、今後の事をそちらに言われる
筋合いは無いと思います。 (11月 12日 5時 7分) (最新)
返答:では、最初の悪いという評価はどういう意味ですか?私はきちんと対応しましたし、こちらの何に非があったといわれるのですか?
それが逆恨みというものではないでしょうか?もう少し筋が通る話をして下さい。 (11月 12日 12時 28分)
返答:それと、あなたからの謝罪はありませんでしたよ。あなたはただ、こちらの確認ミスです。と言われただけ。
実際謝罪されたのはあなたのご主人さんです。これ以上私を怒らせないで下さい。 (11月 12日 12時 31分)

『解説』
 この人物 shigechin001(35)は複数YahooIDを作成して、入札価格の吊り上げ自作自演行為や他人の出品を意図的に妨害している
悪質な人物である。 Yahooオークションを利用する際は十分に注意が必要な人物である。
Yahoo! JAPAN ID : shigechin001(35)もコイツが所有している複数のYahoo! JAPAN IDの1つであると思われる。
コイツの過去オークション評価を見ても容易に悪質な人間性が分かる。 要注意。
>>783
一つ目はともかく二つ目は落札者のほうが一方的に悪いな
785デフォルトの名無しさん:02/06/12 05:46

  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (    ) < >>777 (a(1)+a(2)+a(3)+ … +a(20))/20
〜(___ノ   \_________



  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,・∀・) < なんつったりして
〜(___ノ   \_________
786デフォルトの名無しさん:02/06/12 05:55
> sum = 0.0
> for I=1 to 20
> sim += a(i)
> next i
> sum /= 20.0
BASICの文法は解らんけど
sumは実数型でな。
787786:02/06/12 06:00
×sim → ○sum
×I → ○i

786が実行できたらいやだなぁ。
788デフォルトの名無しさん:02/06/12 06:00
>>784
このIDと評価はあくまでもコイツの悪行の一部に過ぎないからね。
まぁここに載せてるのは軽い方の部類やね。氷山の一角って事よ。
 それなら、試しにチミがコイツと取引してみなよ。この警告無視してさ。
きっと面白い結果になると思うけど。
>>788
やめておく、欠けたCDなんかいらんぜよ
790デフォルトの名無しさん:02/06/12 12:39
Cで画像処理をするプログラムを作成中なんですが、
JPGを扱うためjpeglibを使おうとしています。

それで、画像のサイズ変更(拡大、縮小)を行うためには
どうすればいいでしょうか。jpeglibにリサイズするようなものが
準備されているのでしょうか。



>>790
調べれば?
792デフォルトの名無しさん:02/06/12 14:15
VBScriptなどを使って、ログオンしているユーザーのディレクトリを
指定することできますか?
例えば
Win9x
c:\windws\profile\ユーザ名
Win2k
c:\DocumentAndSetting\ユーザ名
という風にOS毎の差違がありますが、実行時にどのOSでも
動作できるようにできるでしょうか?
言語はWindowsにRuntimeなどを入れなくても使えるものであれば、
バッチファイルでもVBScriptでもexeでもOKです
793屋根裏男 ◆ZMVdytmo :02/06/12 15:04
明後日までにC++言語でdumpプログラムを作らなければならなくなりました。
C++言語らしく中身を書けだそうです。
お願いします
794デフォルトの名無しさん:02/06/12 15:13
何か板違いかもしれませんが、聞ける場所がないのでここで聞きます。

任意の文字列を検索するcgiスクリプトをbashで作成せよ。
対象は、http://・・・・1・・・・/htm
ここでは、アドレスをいうことはできません。
で、1のところは、1,2,3,4,・・・255まで検索します。
つまり、255個のページを調べ、任意の文字列があれば、その行を抜き出せということです。

実行結果は、例えば、linkを検索した場合。
http://・・・・1・・・・/htm
linkという文字があれば、その行を出力。

・・・・・・・・・・・
・・・・・・・・・・・
http://・・・・255・・・・/htm
linkという文字があれば、その行を出力。

と、なります。
perlとawkは使わないこと。

HTMLでフォームを作って、そこに入れた文字が検索されるようにすること。
という課題です。

とりあえず、フォームを作り、そこに入れた文字がCGIの方にいくようにしました。
method="post"でやってます。

シェルスクリプトは、こんな感じにしなければならない。
#!/bin/bash
arg='tr"&+" "\012" | sed-e "s/^.*=//"'

echo "Content-type:text/html"
echo ""
echo "<HTML><HEAD>"
echo "<TITLE>index.html search</TITLE>"
echo "</HEAD><BODY>"

ここにプログラムを書く

echo "</BODY></HTML>"

まだシェルスクリプトについて習ったばかりフォームから送られてきた文字をどうやって処理するかもわかりません。
というか、最初はフォームの作り方すら知りませんでした。
というわけで、だれか、おしえてください。ヒントでもいいです。
>>794
おまえそれ宿題じゃなくて、アタックをかけたり、
エロサイトを巡回保存したいだけだろ?
>792
できます。
>793
正直、dumpをC++らしく作る、って言われても、
iostream使うくらいしか、C++らしくないような……
>794
Ruby!(笑
797デフォルトの名無しさん:02/06/12 15:37
>>795

アタックとかよくわからないんですが・・・

>>796
Rubyとは?
798794:02/06/12 15:47
期間は2週間なんですが、ここで教えてもらえそうもないところを見ると、すごい長いプログラムになるんですか?
それとも、板違いなんでしょうか?
webprog板へいけ
800794:02/06/12 16:03
>>799

なるほど。こういう板があったのですね。
そちらで聞いてきます。
ありがとうございました。
801792:02/06/12 21:41
>796
ありがとうございます!なにかヒントになる情報でも教えて頂けないでしょうか?
>794
なぜにbashなのか知りたい。
それと、sedはOKなのにperlやawkがダメな理由も知りたい。

perlとawkは使わないこと、という事はRubyやCやC++やJavaはOKなんだな?

803デフォルトの名無しさん:02/06/12 23:13
/*x^2-3 x+1=0の解*/

#include<stdio.h>
#include<math.h>
void main(void){

double x1,x2,cc;

x1=1.50;
cc=1.0;
while(c>=pow(10,-5)){
x2=(x1*x1+1.0)/3.0;
cc=fabs((x2-x1)/x1);

x1=x2;
}
printf("x=%f",x1);
}

で、x1=1.50の辺りから、どうしてそうなるのかわからないので、
教えていただける方、教えてください。
-=・=-  -=・=- その式どこかで見た
805デフォルトの名無しさん:02/06/12 23:15
よく覚えてますね
-=・=-  -=・=- ここの729で見た
807デフォルトの名無しさん:02/06/12 23:17
少しは分かった気がするので、再チャレンジ
x1=1.50の辺りからって・・・

     ほとんど全部じゃねぇか!
ヽ(`Д´)ノ
  (  )
  < ヽミ3


















-=・=-  -=・=-  って言って欲しかったか?
809デフォルトの名無しさん:02/06/12 23:23
どうしていきなり、1.5が出てくるのか、よくわかんないです。。
1.5
解のひとつに収束する適当な初期値
>>803
反復法は挙動が怪しいので、ニュートン法を使え。
>>803
そのプログラムがANSI準拠のC言語でかかれているならコンパイルできない
よってそのプログラムは/*x^2-3 x+1=0の解*/を求めるプログラムではない
813デフォルトの名無しさん:02/06/12 23:43
>>810
ありがとうございます。

cc=1.0って何ですか?
ニュートン法知らないです。
>>813
812の言うようにプログラムが間違っているが、
反復法知ってるなら分かるだろ?
>>813
ニュートン法とは、x[k+1] = x[k] - f[xk] / f'[xk] を繰り返し求めて
収束させる方法。

f(x) = x^2 -3x + 1 なら、
f'(x) = 2x - 3 だから、

x = x - (x^2 - 3x + 1) / (2x - 3) を、xに適当な初期値を入れて
繰り返す。
>>813
つーか、f(x) = xと、f(x) = (x^2+1)/3 の交点を強引に求めているが、
これって学校の宿題なのか?
>f'(x) = 2x - 3 だから、

何でこうなるんだ?
818デフォルトの名無しさん:02/06/13 00:15
学校の宿題です。
>817
リア厨?
>>818
どんな問題か書けよ
何をどう説明すればいいのかわからんだろ
本当に反復法は分かってるのか?
>>817
微分の事知らないの?
822デフォルトの名無しさん:02/06/13 15:02
反復法よくわかっていません。
問題は、「x^2-3 x+1=0の根を少なくとも1つ求めよ。」
です。
823木村 キタキタマシーン:02/06/13 16:21
まず、左辺と右辺を入れ替えて考えろ
.......,,,,.  ,,,,,,.....
-=・=-  -=・=-
   く。
  -=ニ=-    < 解の公式使えばぁ
825デフォルトの名無しさん:02/06/13 18:09
マイナスの数が入力されるまでの入力データを使って平均値を求め、個々のデータと平均値の差の2乗和を
表示するプログラムを書きなさい。
//program1
#include <stdio.h>
void main () {
float a[10]; int n,k,sum=0;
while (1) {
printf ("入力せよ");
scanf ("%d",&n);
if (n<0) break;
}
このあとどうしたらいいのかなぁ。平均の求め方がわからないよ。
助けて。
まず算数の教科書を捜し出せ
827デフォルトの名無しさん:02/06/13 19:01
解の公式を使って、プログラムングするのですか?
828デフォルトの名無しさん:02/06/13 19:02
プログラミングですね。。
まず手計算しろ。
そのとき考えたことを全部声に出してそれを録音しておけ。
雑念は捨てろ。ノイズはバグのもとだ。
録音したのをもとにプログラムをつくれ。
>>825
入力された値を全部足して割ればいいじゃん。(プログラム技術か?)
どうでもいいが、問題で与えられた雛型プログラムのnは、おそらく入力された
データの個数を保持するための変数だと思われ。だからscanfで読んだ値をnに
いれないほうが先生もにっこりすると思うよ。
つーか、平均と標準偏差だけなら配列はいらん。
分散は二乗の平均から平均の二乗をひくんでしたっけ?
そう。だけど>>825は差の二乗和であって分散ではない罠。
分散って、個々の値から平均を引いたものの二乗和じゃないの?つまり>825
835デフォルトの名無しさん:02/06/14 00:00
文字列として読み込まれた16進数字を整数値に変換する関数を作成しなさい。

C言語でプリーズ
sscanf(buf, "%x", &hex);
>>835

char str[128];
int i;

gets(buf);
i = strtol(buf, NULL, 16);
839デフォルトの名無しさん:02/06/14 00:10
ウホ?それだけでできてしまうのか????
>>838
>>838
buf->strの間違いですた
841デフォルトの名無しさん:02/06/14 00:11
>>838
問題の要求満たしてないような木がするぞ。
842837:02/06/14 00:11
わしのはだめですか?
>>838
できればint->longにすてくれ。
合ってるかどうか知らないけど、
質問者にスルーされてる>>837がかわいそうです。
845デフォルトの名無しさん:02/06/14 00:18
BASICです。
下のプログラムは、10個の数を順に入力し、
それらの最小値を表示するプログラムである。
(1) 空欄(ア),(イ),(ウ)を埋めよ。
(2) 途中経過を観察するため「165 PRINT M; 」を挿入した。
  順に、「40,30,50,80,20,10,70,90,100,60」を入力したとき、
  行165の出力をすべて答えよ。

100 DIM D(10)
110 FOR I=1 TO 10
120 INPUT D(I)
130 NEXT I
140 M =(ア)
150 FOR I=2 TO 10
160 IF M.>D(I) THEN (イ)
170 NEXT I
180 PRINT ”サイショウチ=”;(ウ)
190 END

さっぱりわかりません。お願いします。
行番号BASICで仮名は片仮名のみか…
なんでこんな時代錯誤な物が。
a D(1)
i M = D(I)
u PRINT M

30 30 30 20 10 10 10 10 10
さっぱりわからんとかこのスレに丸投げしに来るやつら
2chばっかやってっからそうなるんだよ、
自分が落ちこぼれてることを自覚しろよ
uってPRINTいるの?
>>835
小文字の'a'〜'f'は自分で作ってちょ。

int mystrtol(const char *str)
{
int tmp = 0;
const char *p;

for (p = str; *p; p++);

do {
p--;
tmp *= 16;
tmp += *p - ((*p <= '9') ? '0' : 'A' - 10);
} while (p != str);

return tmp;
}
851845:02/06/14 00:25
有り難うございます。
なぜそうなるのか簡単で結構ですので教えてください。
>>851
教科書でも読んでおけ
long xtoi(const char *src)
{
long buf, c;
while (isspace(*src)) src++;
for (buf = 0;isxdigit(*src);src++)
buf = buf * 16 + ((isalpha(c = toupper(*src))?c+10:c) - (isalpha(*src)?'A':'0'));
return buf;
}
854853:02/06/14 00:32
ガーン先越されてた
>>853
わたしゃ貴殿のコードのほうが好きですよ。気を落とされますな。
>>853
>>850はバグってるから気を落としなさんな。上位と下位が逆になっとる。
これでどうだ!ってもう遅いか・・・

int mystrtol(const char *str)
{
int tmp = 0;

do {
tmp *= 16;
tmp += toupper(*str) - ((*str <= '9') ? '0' : 'A' - 10);
} while (*++str);

return tmp;
}
16進数文字以外があったらそこで辞める

long mystrtol(const char *str)
{
static const char * hextable = "0123456789ABCDEF";
long tmp = 0;
const char * p;

while ( (p = strchr(hextable, toupper(*str)) != 0 ) {
tmp = tmp * 16 + (p - hextable);
}

return tmp;
}
>>858
while内に str++; を書き忘れた
860デフォルトの名無しさん:02/06/14 02:32
1から5の総和を求めるやつをつくりたいんですが、どこがまちがってますか?

#include<stdio.h>
int add(int);

void main()
{
add(1);
add(2);
add(3);
add(4);
printf("%d\n",add(5));
}

int add(int n)
{
int sum ;
sum += n;
return (sum);
}
>860
手っ取り早いのは、int sum;をstatic int sum;にする。
862835:02/06/14 02:35
ありがとうございました。。。。
本よんでもなかなかわからんっす(;´д`)

レスおくてれすまそ
863860:02/06/14 02:37
ほんとだ・・・すげぇ

なんでこうなるんだろー?
本で調べてみます
>>834
分散は差の自乗の平均。
>>851
言語なんてどうでもいいから、最小値を求めるアルゴリズムを
フローチャートで考えてみる(もちろんノートとかに書く)ことから始めろ

>>863
それ以前に、
int sum ;
sum += n;
は激しく間違っている。int sum;の時点でsumにどんな値が入っているかわからない。
よって、返される値もどうなるか分からない。

静的変数でも、static int sum = 0;として初期化しておかなくていいんだっけ?
ANSIは初期化無し静的変数には0を入れるんだっけ?
グローバル変数には0が入るけど・・・
>>865
static int sum;とした時は、sumは静的領域に取られるので、プログラム開始
の初期化時に0で初期化される。
>>863
staticじゃない場合、add()に入るたびに新しくsumが作られ
add()から出るさいに解放されるから。
>>866
フォローさんくす
グローバルだけじゃなく、staticもそうだったか
まあ、初期化した方がわかりやすくていいと思う
869683:02/06/15 15:00
int a=1,b;
int *p;
p=&a;
b=*p;

これが意味がよくわかりません!
int a;
int b;
int* p;
a = 1;
p = &a;
b = *p;
こんな感じで書き直してもわかんないか?
わからなきゃ、ポインタ専門の解説書があるのでそれでも読め。

871デフォルトの名無しさん:02/06/15 15:22
aと&aは何が違うんですか?
>>871
変数と変数のアドレス
C言語だったら、多分&aはaの格納されているメモリのアドレス。
874871:02/06/15 15:29
p=&aとp=aは??
875堀越:02/06/15 15:30
[email protected]
[email protected]
↑これで全て解決。
>>874
pにaのアドレスを代入。
pにaの中身を代入。

宿題か?
877871:02/06/15 15:31
なるほど!!
つまり、*pがp=&aなんですね!?
int a=1, b;
//int型のaとbという名前の変数を宣言(おそらく関数内なので+定義)、aは1で初期化

int *p;
//int型の変数を指すポインタ変数を宣言(同上)

p = &a;
//単項&演算子は右オペランド(要左辺値)のアドレスを与える
//ここでは変数aのアドレス。そしてそれをpに代入

b = *p;
//単項*演算子は右オペランドにあるアドレスに逆参照して値を取り出す
//そしてそれを上で宣言した変数bに代入
//この演算子を使うにはオペランドに任意のポインタ型が必要(ただしvoid*には使えない)

/*逆参照するつうのはそのアドレスを割り振られているメモリの中の値を取り出すこと
bにaの値をコピーしたいとき
p = &a;
b = *p;

b = a;
と実質まったく同じ効果。
変数は甘い文法以外、通常宣言通りに使わなければイクナイ
*/
おい(w
880871:02/06/15 15:32
>>876
宿題の一部を質問してます。
宿題をまるまる書いたら怒られた経験があるので・・・
>>880
こんなスレに頼ってたら就職できないぞ。
>874
p = a;
はエラーになる。
pはアドレスを入れる変数。
だから、必ず正の値。
&aもaのアドレスだから必ず正の値。
だから、
p = &a;
はOK
でも、aはint型で負の値を取ることもあるから
p = a;
は不正。
例しにコンパイルしてみろ。
>>882 君が初心者なのはよーくわかった。
>>882
>例しにコンパイルしてみろ。

お前もな。
ネタだとおも痛い
型が違(省略)
887871:02/06/15 15:42
何故、b=aとしないのか・・・
ポインタを説明するためのコードだから。
889882:02/06/15 15:48
>883,884
おれのLSICだとちゃんとWarningがでるけど。
アドレスを入れるべきポインタ変数に、int型のような値を入れても無意味ってことを説明したつもりなんだが。
>>878
ポインタのメリットがびっくりするくらい伝わらないな。
俺もそう言うサンプルで勉強したから激しく悩んだ。
>>890
小さなサンプルでポインタのありがたさを伝えるのはムズイね。
せめて関数とか作らないと。
>>889 根本的にポインタを理解して無いだろ。

> でも、aはint型で負の値を取ることもあるから
> p = a;
> は不正。

なんだこりゃ。正負云々の問題じゃない。
int *p = &aって

unsigned int p = &aと一緒ってことで良いんですね?
894878:02/06/15 15:57
>>890
俺の解説が悪かった?
>>894
いや、言いがかり。

言ってることは全部正解。

でも、このサンプルには嫌な思い出があるんで。

同じ関数内で変数のエイリアス(語弊あり)を作っても意味無いじゃん。
元の変数そのまま使えば済む話・・・じゃあポインタって何に使うの?
難しいって言うか必要ないじゃん。

的な。
>>894
君の解説は問題ないかと、元のサンプルが糞かと
897882:02/06/15 16:02
初心者はint型 と int *型の違いすら理解してないんだから。
まず正負でポインタの感覚をつかんだ方がわかりやすいと思ったから、ああいう説明にしたんだよ。
898871:02/06/15 16:03
結局、よくわからないので、宿題を全部書きます。
一行一行、何をやってるのか解説しないといけないんです・・・

int a=5, b=3, c=2, d=2;
int *p=&a, *q=&b, *r=&c, *s=&d;
d=b;
p=&d;
r=p;
*s=a;
*s=*p;
a=*p;
*p*=*s;
899871:02/06/15 16:05
3行目は「dにbを代入する」で、
4行目が「pにdのアドレスを代入」です。
ここで力尽きました・・・
900878:02/06/15 16:05
失礼、最後の行
変数は → 識別子は
>>897
ホントかよ?
あんなむちゃくちゃな説明されたらわかるもんもわからんくなるかと
初心者の理解を「助ける」ための嘘は比較的発生しがちだけど、わりと
危険なかほりがします
>>882
アドレスは正だからとか、intが負になることがあるからダメとか
それで何が理解できるんだって感じれす
>>898
int a=5, b=3, c=2, d=2;
int *p=&a, *q=&b, *r=&c, *s=&d;
d=b; //a=5 b=3 c=2 d=3
p=&d;
r=p;
*s=a;//a=5 b=3 c=2 d=5
*s=*p;//a=5 b=3 c=2 d=5
a=*p;//a=5 b=3 c=2 d=3
*p*=*s;//a=5 b=3 c=2 d=15
905882:02/06/15 16:12
>901
893読んでみろよ。
unsigned int とポインタは同じなんじゃないかって893は勘違いしてくれただろ。
ポインタとunsigned int が似ているってのは認めるよな?
sizeも一緒だし、取り得る値の範囲も一緒。
あとは、ポインタとunsigned intの違いを893が理解すればいいんじゃないのか。

>>905
>ポインタとunsigned int が似ているってのは認めるよな?
unsigned君ですがw。

根本的に違うと思われ。
一緒なのはサイズと取り得る値の範囲だけ。

この部屋は四畳半で、一人でぎゅうぎゅうだ。だからここは便所だ!
と、他人の下宿で用を足すようなもの。
> pはアドレスを入れる変数。
> だから、必ず正の値。

根拠は?

> でも、aはint型で負の値を取ることもあるから
> p = a;
> は不正。

じゃぁこれは?
signed int i = -10;
unsigned int j = i;
908882:02/06/15 16:17
>906
「似ている」って日本語の意味がわからないのか?
同じとは書いてないぞ。

ポインタとunsignedは言語の実装としては近いかもしれないが、概念的には
非常に遠いと思う。
悪い方向に勘違いさせといて、

> あとは、ポインタとunsigned intの違いを893が理解すればいいんじゃないのか。

もうダメぽ。
>>908
「同じ」と「根本的に違う」は反義語。
「似ている」と「根本的に違う」も反義語。


(´ー`)。o ○(そもそもポインタとunsigned intのどこをどうとって似ているって言うんだろう・・・共通点なんて皆無な気がする・・・)
>>912
32ビット(語弊あり)で0〜2の32乗-1(語弊あり)の値を表現できるって所じゃないの?
>>913
unsignedとポインタのサイズが同じって仕様で規定されてたっけ?
>>914
far。
>>914
初めからそう言えばこんなに盛り上がらなかったね。
IA-32エンハンスドモードな頭になってるよ〜。
http://www2.airnet.ne.jp/pak04955/ramble-199912.htm

> ポインタ変数の大きさはintの大きさと同じではない。
> 現状sizeof(int) = 4, sizeof(void*) = 4の環境が多いが,
> 64bit環境ではsizeof(int) = 4, sizeof(void*) = 8となる場合がある。

らすぃ
(´ー`)。o ○(で、結局ポインタとunsigned intのどこをどうとって似ているって言うんだろう・・・)
>>918
メモリ上の1領域である。
920878:02/06/15 16:44
>>898
int a = 5, b = 3, c = 2, d = 2;
// int型変数 aを5で初期化(以下同じように)

int *p = &a, *q = &b, *r = &c, *s = &d;
// int*型変数 pをaのアドレスで初期化(以下同じように)

d = b;
// 2で初期化したはずの値は使わずにdにbをコピー 次の文からdとbの値は3

p = &d;
// pに&演算子が生み出したdのアドレス(一時オブジェクト)のコピーをコピー
// pはdを指していることになる(初期化に使ったaのアドレスは使われていない)

r = p;
// rにpをコピー rとpは同じのを指すようになる(変数dを)
// 初期化したcのアドレスは使っていない

*s = a;
// sは初期化以来ここまで変更されていない
// つまりsが指しているのはd
// そして逆参照をしてdを取り出しコピー つまり(d = a)と同義

*s = *p;
// 今p、sが各々指しているオブジェクトを取り出し、コピー
// つまり(d = d)

a = *p;
// aにpの指しているものの値をコピー(a = d)

*p *= *s;
// d *= d; こういうことで
// これは左辺式が一度だけ評価されるのを除いて d = d * d; と同じ
// 現在のdの値が5なのでd*dは25、そしてその25を再びdにコピー
>>919
charとポインタもすごく似てるよね。
>>921
俺に絡まれても困るんだけどねw
「昔はアドレスを平気でintに突っ込んでたもんだ (゚Д゚ )y-~~ 」
って雑誌のコラムか何かで見ますた。 ( ´・∀・`) へー
924878:02/06/15 16:51
ラストの前2行目
左辺式が一度だけしか評価されないのを除いて
>>923
Windows上では今でも平気で突っ込んでます
最近はINT_PTRだけど
926871:02/06/15 17:13
p=&dというのは、dを代入じゃなく、dのアドレスを代入でいいんですね!
>>926
大正解。
>>871
まるでパズルだな
混乱させる為の問題としか思えん

変数名を&で修飾する→ポインタになる
ポインタを*で修飾する→参照先になる
*(&a)はaと同じ
ポインタpに&aが代入されていれば、*p → *(&a) → a ってこと
>*p *= *s;
間接参照演算子の*と乗算代入演算子の*=を両方出して、わざと紛らわしく書いてるのか。
つーか、その区別をちゃんとできるようにという意図で出題したんだろうと思うが。
930デフォルトの名無しさん:02/06/17 18:04
はじめまして。。

 変数 a は実数型であるとする。
 a の値がある特定の値と等しいかどうかの同値判定を行いたい。
 どのように行えばよいかを答えよ。

思いっきり厨房質問なんですが、
聞いてみていいでしょうか。
abs(b-a)<e
>>931
Cならfabsじゃないの?
>>930
マルチ氏ね
934デフォルトの名無しさん:02/06/17 18:43
みなさんありがとうございます。
床そうじが回避できそうです。
氏にます。いつか氏にます。
935デフォルトの名無しさん:02/06/17 19:27
>>931
a==b
でダメなら、
fabs(a-b)<=e*fabs(a)
かな。これでもまだちょっと危険が残るけど。。。
Cゲンガーっていまだにfloatメインで使ってるの?
>>936
あんたは?
2進16桁を10回連続でキーボードから入力して、入力した順番に16進数で出力するのにはどうしたらいいですか?
for(i = 0; i >= 9; i++ )
{

}
この{}の中が分からないのでお願いします。
939デフォルトの名無しさん:02/06/20 00:14
age
>>938
条件式がいきなり成り立たないがいいのか。
>>938>>940
ワラタ
>>938
int BINtoDEC(char *data)
{
int i, result=0, value=1;

for(i=0;i<16;i++)
{
if(data[15-i] != '0')
result += value;
value *= 2;
}
return result;
}

int main(void)
{
char data[10][17];
int i;

for(i=0;i<10;i++)
{
scanf("%s", data[i]);
}


for(i=0;i<10;i++)
{
printf("%d : %s -> %x \n", i, data[i], BINtoDEC(data[i]));
}


return 0;
}
943初心者:02/06/20 14:57
得点を次々入力して、もし70以上なら合格、70未満なら不合格とし、
合格人数、不合格人数、受験者合計、最高得点、最低得点、平均点を出力する
プログラムを設計・開発せよ。なお、999が入力されたらループを抜け、
999はカウントしない。

これの最高・最低得点ができません。
お願いします。
max min という変数を作る。
とりあえず最初の人の得点を入れる。

後は
if (max < 得点) max = 得点;
if (min > 得点) min = 得点;
の繰り返し。
>>943
最初にいきなり999を入力した場合はどう出力すればいいのですか?
946デフォルトの名無しさん:02/06/20 15:08
4個のforループを使い次のように表示してみましょう("|"はShift+\で入力します)。横方向のサイズは20になっていますが、この数はプログラムの最初で変数に代入し後で自由に換えられるようにしてください。
--------------------
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
--------------------

教えてください。全然わかりません。
947デフォルトの名無しさん:02/06/20 15:09
--------------------
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
--------------------

946じゃなくてこれです
>>946

どうぞ

#include <iostream>
#include <string>
#include <list>
#include <iterator>

int main(void)
{
int count = 20;
std::list< std::string > text( 2, std::string( count, '-' ) );
text.insert( ++text.begin(), 10, std::string( "| |" ) );
std::copy( text.begin(), text.end(), std::ostream_iterator<std::string>(std::cout, "\n" ) );

for(;false;)for(;false;)for(;false;)for(;false;);
}
949初心者:02/06/20 15:44
>944
サンクスです。できますた
elseとか使ってたので変な結果になってました。
>>946
#define width 20
#define height 10

int main(void)
{
int i,j;
for(i=0;i<width;i++) printf("-");
printf("\n");
for(j=0;j<height;j++)
{
printf("|");
for(i=0;i<width-2;i++) printf(" ");
printf("|\n");
}
for(i=0;i<width;i++) printf("-");
printf("\n");

return 0;
}

>>950
仕様を満たしていないので59点
952デフォルトの名無しさん:02/06/20 16:01
>>946-947
2chでは、連続した半角スペースは削除される。
行の先頭もまた然り。
>>948
美しい・・。
>>948
>for(;false;)for(;false;)for(;false;)for(;false;);
(・∀・)イイ!!
while (0); while (0); if (0);else;
とか書いてみたくなるNE!
955ほんまわからん:02/06/20 23:52
文字列として読み込まれた16進数字を整数値に変換する関数を作れ

Cでおながい。
なんか本とか読んでもわからなかったです。
何回この質問に答えたらいいのよ?
int hexstr_to_int(const char* hexstr)
{
 return (int)strtol(hexstr, NULL, 16);
}
int hexstr_to_int(const char* hexstr)
{
int i;
sscanf(hexstr,"%x",&i);
return i;
}
int hexstr_to_int(const char* hexstr)
{
 return rand();
}
960ほんまわからん:02/06/21 00:05
エラーでるんですが・・・w
961ほんまわからん:02/06/21 00:08
実行できないぞ、ゴルァ
このすれの800番台半ばをみたら?
>>955
同じネタは辞めて。
964ほんまわからん:02/06/21 00:28
できないんですが
できます
両手を合わせて胸の前に置きイエス様の降臨を待ちつづけましょう
エラーが出るときは、少なくともエラーメッセージを書いてや
967ほんまわからん:02/06/21 00:39
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/mondai64.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

です・・・すいません。
>967
VCかしら?
969ほんまわからん:02/06/21 00:45
そうです>968さん
>>967
main()関数書いてや。
Delphi6の宿題なのですが
{$apptype console}
uses sysutils; を最初に入れて

@「ローンを複利で増えると同時に、毎期一定額(最初の借入金の10%)の
返済をした場合、返済し終わるまで何期掛かるかを求めるプログラムを
作成せよ。Loan関数を使用し、利率は3.82%、借入金は10万円とする。」

A「返済条件は@のままで、loan関数をつかって、利率5.43%の場合と利率2.12%
の場合では返済期間に何期の差があるかをこたえなさい。」

の宿題を出されましたが手続きの宣言だの呼び出しだの
変数の設計をしろと既にパンクしています。今更ながらDelphiの壁の厚さに
ぶち当たった、ヘタレ物に指導をお願いいたします

972ほんまわからん:02/06/21 00:47
>>970
どこにかけばいいんでしょうか?
プロジェクトの設定がどこか変なのでは?
>972
もしかしてソースコード中にmain()書いてないノカ?
975ほんまわからん:02/06/21 00:52
もちろんです。
でもどこにかけばいいかわからんです
とりあえず、コンパイルするソースコードの一番下に書いとき。
977デフォルトの名無しさん:02/06/21 00:54
>>975
そこにかけ
978ほんまわからん:02/06/21 00:57
わかんないっす・・・泣き
C言語がまったくわからんということですか?
980ほんまわからん:02/06/21 00:59
まったくではなく、いまいち定義関数がわからないんで
問題のソースコード全文をここに貼ってくだされ。
もう、話だけじゃわからん。
982ほんまわからん:02/06/21 01:02
#include<stdio.h>
#include<string.h>

int hexstr_to_int(const char* hexstr)


{
int i;
sscanf(hexstr,"%x",&i);
return i;
}


ども!
983デフォルトの名無しさん:02/06/21 01:05
http://www.nozomi.dr.ag/
このサイトを日本語訳してください
>982
その下に、これを書いてみてよ。

int main(void)
{
  int x;
  
  x = hexstr_to_int("10");
  printf("%d\n", x);

  return 0;
}
985ほんまわからん:02/06/21 01:26
できたヽ( ´ー`)ノ
でもリクツがわからんw
どのへんの理屈がわからんの?
>>985
かなり落ちこぼれてますね・・・
先生によく教わって下さい
>>985
とりあえず理屈はさておいて、C言語では一番最初に main() から実行が
始まると言う仕様になっているってことだよ。
誰か新スレ立ててくれ
よし、こんどこそ漏れが立てよう。
新スレ立てました〜速やかな移行をおながいします(^▽^)

ほう、宿題とはな。
http://pc.2ch.net/test/read.cgi/tech/1024592344/
>>991
スレ立てお疲れ
993 ◆6obdUsOA :02/06/21 02:17
test
999?
10001000:02/06/21 02:35
              ∧            ∧
              / ・           / ';,
             /  ';          /  ';  1000 ワショーイ…
             /   ;______/   ;
          /                  \
         /    /          \     \
        /´   (  ) |____|  (  )      |
       |  /////  (  |     :|    )  /////    |
       |    (   ) :|      |  (   (       |
        |    )  (  |     |   )   )      |
        |   (   ) ';    /   (   (     /
         \  )  (   \/    )   )  ../
           ヽ              ........:::

10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。