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

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

ほう、宿題とはな。

1 :デフォルトの名無しさん:02/06/21 01:59
妻の美砂子が持病で急死した為これから君等の面倒は私が見ることになった。
名は恭祐だ。わからないことは全てここで聞いてくれ。


前スレはこれだ。
 あらあら、宿題なのね
http://pc.2ch.net/test/read.cgi/tech/1020785918/
 キーワードがわかっているならググれ。
http://www.google.co.jp/

2 :デフォルトの名無しさん:02/06/21 01:59
急死したのかよ

3 :デフォルトの名無しさん:02/06/21 02:03
>>1
女の身内と交代してください。
若い方がいいです。

4 :デフォルトの名無しさん:02/06/21 02:04
もしかして本当なのか?ご愁傷様。
取り敢えず、他のスレでは頭から相手にしてもらえないような
初心者を育むべく頑張りましょう。

5 :デフォルトの名無しさん:02/06/21 02:11
「『他のスレでは頭から相手にしてもらえないような』初心者」を育む???
勘弁してくれ。。。

6 :デフォルトの名無しさん:02/06/21 02:13
男か。まぁ、男にも穴はあるしいいな。
早くケツ出せ

7 :デフォルトの名無しさん:02/06/21 11:34
実は鮫島葵級のロリプニオヤジ

8 :恭祐さん教えてください。 :02/06/21 11:57
プログラム技術@2ch掲示板でここを紹介されて来ました。

#include <stdio.h>

int main()
{
char Myoji [80] = "Suzuki";
char Namae [80] = "Muneo";
char Shimei [80];

long i,i1,n,m;
m = strlen(Myoji);
n = strlen(Namae);

for(i=0; i<m; Shimei[i] = Myoji[i++]);
Shimei [i++] = ' ';


for(i1=0; i1<n; Shimei[i1+i]=Namae[i1++]);
Shimei[i1+i] = 0;

printf( "%s\n", Shimei );

return 0;
}
このプログラムから、”Suzuki Muneo”を姓と名の二つに分けるプログラムを作りたいのですが、
どうやればいいのですか?教えてください。

9 :デフォルトの名無しさん:02/06/21 12:01
>>8
sscanf(Shimei, "%s %s", Myoji, name);

10 :恭祐さん教えてください。:02/06/21 12:05
>8
レスありがとうございます♪どこにいれればいいですか??

11 :デフォルトの名無しさん:02/06/21 12:41
>>10
学校やめた方が良いと思われ。

12 :デフォルトの名無しさん:02/06/21 12:49
>>11
いろんな意味でね

13 :デフォルトの名無しさん:02/06/21 12:50
>8
最初から分かれているから繋げなければよい。

14 :デフォルトの名無しさん:02/06/21 13:02
誰だよ2chなんて勧めやがったやつは>>8

15 :デフォルトの名無しさん:02/06/21 13:12
8はここもム板だってことに気づいてないのか?

16 :デフォルトの名無しさん:02/06/21 14:21
>>8
どこに入れたらいいかわからないということは、現在の
プログラムを理解していないということだろう。
そんな状態で「姓と名の分け方(文字列の分割)」を聞いたところで仕方ない。
君が今学ばなくてはいけないのはCの基本文法からだ。
それができないならプログラマに向いてないからあきらめたほうがいい。
(11-12が言ってるのはそういうこと。)


17 :オナニー伯爵 ◆qmiH3ekA :02/06/21 14:41
美人の娘とかにしろよ。親父でてくるならかあちゃん復活させろ。


18 :デフォルトの名無しさん:02/06/21 14:49
>>16
一番最初(ここにリダイレクトされてくる前)の質問見れば
いかに>>8が何もわかってないかがわかるよ

# ちなみに12は問題があまりに糞なのでそんな学校やめちまえ、と

19 :デフォルトの名無しさん:02/06/21 16:54
#include <stdio.h>
#include <conio.h>
void main(){       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}
}


20 :19:02/06/21 16:56
エラーは出ませんが、警告が出ます。
あと、実行して、演算子を入力しても、「演算子がおかしいです」
ってでます、このプログラムのどこがおかしいんでしょうか?


21 :デフォルトの名無しさん:02/06/21 16:58
>>20
あ・な・た

22 :デフォルトの名無しさん:02/06/21 16:58
>>20
君の人間性がおかいしい。


23 :デフォルトの名無しさん:02/06/21 17:00
>>20
そこまで出来てて、そんなことが分からないってことは、
どうせそれも人に教えてもらったんだろ。
友達に、飯でもおごって教えてもらえや。

24 :名無しさん@カラアゲうまうま:02/06/21 17:01
なんで0で割ると0なんだよ。

25 :19:02/06/21 17:02
>>23
ここまではマジで自分でやったよ

26 :デフォルトの名無しさん:02/06/21 17:05
>>25
まあ、それを信じて一ついいこと教えてあげよう。
scanf("%c\n",&enzansi);
の下に...
printf("DEBUG: su1 = %d, su2 = %d, enzansi = %c (%x)\n",
su1, su2, enzansi, enzansi);
を追加して、コンパイル/実行してみな。たぶん「なんで!?」って思う
から。

27 :デフォルトの名無しさん:02/06/21 17:36
>>19
scanf()を使ってるところを
fgets()とsscanf()の組み合わせに置き換えてみな。

char s[100];
fgets(s, 100, stdin);
sscanf(s,"%d",&su1);


28 :デフォルトの名無しさん:02/06/21 18:38
確かに自力でやってると思う
conio.h と getch(); はよく知らんが、
curses.h の getch(); と同じだろうな。

で、警告ってmainがint型じゃないってだけじゃないの?

>>26やってみれば分かるけど、scanfの穴が見事に出てるね
10\n20\n+\nと入力したら、(\nは改行)
最初のscanfで10が読み込まれる
次のscanfで\nが読み飛ばされ(%dだと頭の連続する空白文字は読み飛ばされる)、20が読み込まれる
次のscanfで\nが読み込まれる

scanfは、フォーマット(%dとか)で変換不可能になるまでしか読み込まない。
変換不可能になったら、バッファに溜められる(読み捨てたりしない)。
10\n20+\nと入力したら上手く行く。想定した動作じゃないだろうけど。
ちなみに最初に+と入力すると、0+0=0ってなるかもしれない。
いきなり変換不可能な文字が入力されると、scanfが行われない。
よって、最初の2つのscanfによるsu1とsu2の設定が行われない。
→初期値のままになる。→初期値未設定。これで警告が出るかもね。

標準入力ストリームのことがわからないと混乱するかも。
しかしそれ以上に俺の説明が悪い罠。

29 :19:02/06/21 19:15
>>28
警告は、
「warning C4244: '=' : 'int' から 'float' に変換しました。データが失われているかもしれません。」
こんなんがでます。
一応実行して四則演算できるようになりましたが、演算子を入力してから、何か入力してからエンターを押さないと
結果が表示されません。

30 :デフォルトの名無しさん:02/06/21 19:21
scanfを使わないっていうのが一番いい方法なんだが。
(おそらく)望んでいる動作はあまりおすすめできない方法ならないこともないが・・・。

警告はそのまま「 'int' から 'float' に変換しました。」
明示的にキャストしろと言うことだ。

31 :19:02/06/21 19:23
>>30
>明示的にキャスト
ってどういうことですか?馬鹿のわかるように教えてください。
すいません。

32 :デフォルトの名無しさん:02/06/21 19:25
>>31
(゚∀゚) お前がすっとろいことしてっから、
コンパイラがかわりにキャストしてくれたんだよ。

これからは自分でしっかりキャストしろってこと。



33 :デフォルトの名無しさん:02/06/21 19:26
>>31
http://pc.2ch.net/test/read.cgi/tech/1021620974/561
全く同じ質問がある。答えも出てるので見てきなさい。


34 :デフォルトの名無しさん:02/06/21 19:28
マルチだったのカー・・・

35 :デフォルトの名無しさん:02/06/21 19:38
http://pc.2ch.net/test/read.cgi/tech/1024033400/756
http://pc.2ch.net/test/read.cgi/tech/1024033400/759
http://pc.2ch.net/test/read.cgi/tech/1024033400/760

36 :デフォルトの名無しさん:02/06/21 19:51
>>31
つまんなすぎ、3点。

37 :26:02/06/21 21:17
ダメだよ、答え教えちゃ。詩文でやんないと身につかないよ。まあ、scanf() は
落とし穴いっぱいだから、一応ヒントの意味で >>26 書いてんだからさ。

> →初期値未設定。これで警告が出るかもね。
でるわけねーだろ。それやるなら実行時の検査がいるぞ。Cインタープリタとか、
教育用の特殊な処理系でないとそんな事やってないよ。

38 :デフォルトの名無しさん:02/06/21 21:44
Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland
37はあほ.c:
警告 W8013 37はあほ.c 7: 'i' は、おそらく値が代入される前に使われている(関数 main )
Turbo Incremental Link 5.60 Copyright (c) 1997-2002 Borland

39 :デフォルトの名無しさん:02/06/21 22:32
37じゃないが、>>38が何を言いたいのかわからない。
>>37って間違ってないと思うんだけど。

あえていうなら誤字はあるが。

40 :名無しさん@カラアゲうまうま:02/06/21 22:36
>>38はアドレス渡しが理解できないに100カノッサ。

41 :デフォルトの名無しさん:02/06/21 23:21
>>37
ごめんよ(´・ω・`)。でもscanfの動作はかなり難しいから、
初心者に自力で理解できるはずもないと思って・・・

>でるわけねーだろ
さすがにそこまで賢くないね
アドレス渡ししたら変更があったと考えていいのか
scanfの動作から、特別に警告出すコンパイラがあってもおかしくないかなと思った。
# printfは特別な警告が出るし

コンパイラいってくれれば(俺の知ってるのなら)こんな間違いはしねーんだけどさ

>>31
ぐぐることくらい覚えろ。「C言語 明示的 キャスト」


42 :デフォルトの名無しさん:02/06/21 23:25
ヾ(≧▽≦)oきゃはは
バッカじゃねーの(ププ

43 :デフォルトの名無しさん:02/06/21 23:30
( ´3`)ムチュー >>42

44 :26:02/06/22 00:29
>>41
確かに、scanf() の挙動って理解しにくいし、はっきり言って実務で使えない
から覚えても無駄なんだよね。だから、俺は >>19 に scanf() の動きを覚えて
もらうというより、とにかく自分で >>26 に書いてあることをやって、何が起き
てんのかを知って欲しかったんだよね。(まあ、デバッガ使えりゃそれでもいいん
だけどさ。)

> scanfの動作から、特別に警告出すコンパイラがあってもおかしくないかなと
> 思った。
と言うか、警告出すべきかどうかが実行時に決まるから、コンパイラがエラーを
出すのことはできないよ。「printfは特別な警告が出るし」と言うのは、フォー
マット文字と変数の型が違う時だよね。これは、コンパイル時に決まるし
scanf() でも、フォーマット文字と変数の型については警告を出すこともできる
と思うよ。(実現している処理系があるかどうかは知らないが...。scanf()
なんて普通使わないからね。) でも、char s[xxx]; printf("%s", s); で、s[]
の中身がぐちゃぐちゃかもしれないから警告出すなんて言われたら、ウザクて
やってられないと思うよ。

>>39
> あえていうなら誤字はあるが。
詩文でって何だよ !? > 俺
ちょっと恥ずかしいな。でも見てる奴の 99% は、前後の文脈から「自分で」と
解釈してるよね...。

45 :デフォルトの名無しさん:02/06/22 00:51
>>44
gccにある-Wuninitializedオプション、
あれで、scanfにアドレス渡ししても値を設定しただろうと判断しなくてもいいかな、と。
そーゆーのはさすがにないですかね。

個人的にはscanfに警告出して欲しいところ。
そうすれば学校でscanfなんて教えないだろう。

>詩文
かな入力派ですね

46 :デフォルトの名無しさん:02/06/22 01:42
>>45
だーかーら、アドレス渡しした変数に scanf() が値をセットするかどうかは、
実行時の入力によって決まるんだからコンパイル時に判断するのは無理。
警告を出すというのもあるけど、毎回警告がでるからウザイだけ。
(あくまでも、>>28 の話だよ。scanf("%d", &a, &b); なんて時にエラーに
するとか言うなら、可能だと言うのは >>44 に書いた通り。)

> 個人的にはscanfに警告出して欲しいところ。
> そうすれば学校でscanfなんて教えないだろう。
学校で教えるなら「scanf() は使うな。fgets() + sscanf() でやれ。」と
教えて欲しい。欲を言えば、使うべきでない関数を取り除いたヘッダーファイルと
ライブラリ (+対応したマニュアル) で、やって欲しい。

> かな入力派ですね
やっぱりばれましたね。まあ、'J' と 'S' はあんまり打ち間違えないからね。

47 :デフォルトの名無しさん:02/06/22 02:03
>>46
分かってます。
>>28は、コンパイラを書かなかった皮肉と、初期値設定はした方がいい
ってのを遠まわしにいったつもりなんです(´・ω・`)

>警告を出すというのもあるけど、毎回警告がでるからウザイだけ
だからオプショナルだと・・・(´・ω・`)

(;´д⊂)モレノマケデス

学校教育に不満があるのは、このスレの住人には当然ですかね

48 :デフォルトの名無しさん:02/06/22 02:08
26って粘着馬鹿?

49 :デフォルトの名無しさん:02/06/22 02:22
馬鹿は28(モレ)

50 :デフォルトの名無しさん:02/06/22 07:40
全く危険さのレベルが違うのでこれを直接引合に出しても説得力
がなくて申し訳ないのだけれども、FreeBSD 付属の ld は、tempnam
を使うだけで警告をだすのよね。しかも、FreeBSD の tempnam には
問題が無いにもかかわらず。移植性を考慮してのことらしい。
んでもって、 scanf なんかもこの仲間にいれたらってことかしら。


51 :デフォルトの名無しさん:02/06/22 07:44
【緊急事態】 大変です! 私の肛門から屁が止まりませぬ!!! 【緊急事態】

牛乳飲み過ぎますた

52 :デフォルトの名無しさん:02/06/22 07:57
>>44
「scanf 系関数」が使えないんじゃなくて、
「scanf 系関数を使いこなせない人間」が使えないのな。

そこの区別はしっかり頼むよ。

初心者には勧められないのは同意。

53 :デフォルトの名無しさん:02/06/22 07:58
scanfとfscanfは使えないと思うけど。

54 :デフォルトの名無しさん:02/06/22 07:59
printfさえあれば他はいらん。

55 :デフォルトの名無しさん:02/06/22 08:02
学校では見事に入力はscanfやgetsだったな・・・

56 :デフォルトの名無しさん:02/06/22 10:26
>>51
多分屁の元の実を出すまで止まらんぞ。

57 :デフォルトの名無しさん:02/06/22 11:40
>>32
厳密に言うと暗黙の型変換とキャストは違う
共通してるのは「型変換」という点

58 :デフォルトの名無しさん:02/06/22 11:42
それにキャストしないと警告が出るからキャストするというのは
本末転倒なような
本来警告が出るべきケースまでキャストで警告が消えてしまって
実行時まで気づかない罠とかありそう

59 :デフォルトの名無しさん:02/06/22 11:53
自分で関数の定義しろとか書いてあるがなんですかこれは?

60 :デフォルトの名無しさん:02/06/22 12:03
>>59
どこに書いてあるんだ?

61 :26:02/06/22 12:20
>>47
> >>28は、コンパイラを書かなかった皮肉と、初期値設定はした方がいい
> ってのを遠まわしにいったつもりなんです(´・ω・`)
コンパイラ (≒処理系) を書かなかった皮肉と言うのはちょっと意味不明なんだ
けど (一応 ANSI 準拠で進めて OK だよね。あと、>>29 のエラーメッセージから
多分 VC++ だろうと想定してるし。)
初期値設定をした方がいいと言うのには同意。

>>50
そうそう、そんな感じ。もう作られたプログラムは仕方ないけど、
新規の奴には使うなって感じ。

>>52
scanf() って、初心者には勧められないし、初心者じゃない奴は
普通使わないんじゃないの ? 使う機会ってあんまりないような
気がするけど...。まあ、自分しか使わないようなツールとか
ぐらいならありうるけどねぇ。

>>55
まあ、アルゴリズムとか教えてる時に入力とかに凝ってられないとも
思うんだけど、実用プログラムって入力が一番大変で重要だったりするから
そこのところもちょっと配慮して欲しかったりする。

>>58
> それにキャストしないと警告が出るからキャストするというのは
> 本末転倒なような
激しく同意。(コンパイラの) 警告/エラーが消えればプログラムが正しく動くと
思っている奴が結構多いと思う。キャストはダメだよと言うと union で
書いてきた奴がいて唖然としたことがある。

62 :混じれ洲薫:02/06/22 14:12
i8080AでメモリのXX,YY,ZZ,WW番地の内容を交換する(逆順にする)プログラムを作るにはどうすればいいですか?よろしくお願いします.
下のに付け足すのですが使うのはLXI,MOVだけみたいです.

LDA WW

ここに書き足す

HLTXX: DB 1
YY: DB 2
ZZ: DB 3
WW: DB 4
END

63 :デフォルトの名無しさん:02/06/22 15:07
8080なんて知ってるやついるか?

64 :デフォルトの名無しさん:02/06/22 15:19
LXIってレジスタに値を代入するニーモニックか?全然わからん。

65 :デフォルトの名無しさん:02/06/22 15:24
まあ、主要な命令は Z80 に引継がれてるし、そもそもこの問題自体が
難しいわけじゃないからなんとでもなるけど...

1. 既に i8080 のニーモニックを覚えていない
2. どう見ても田舎の工業高校あたりの宿題にしか見えない
3. こいつはマルチで質問する不届きもんだ (これ見るの三つ目だ)

だから、無視するがよろし。

66 :雑じれ主勳:02/06/22 15:42
だれも>>62を解けない。

67 :デフォルトの名無しさん:02/06/22 16:43
>>65
ここは宿題スレだから 2 は問題ないだろ。

68 :デフォルトの名無しさん:02/06/22 16:46
もしかしてほんとに>>62解ける人いないかもしれないな

69 :デフォルトの名無しさん:02/06/22 16:51
http://www.st.rim.or.jp/~nkomatsu/intel8bit/i8080.html

命令表があるから、だれかといてやれや。

70 :デフォルトの名無しさん:02/06/22 16:54
8086ならなんとなく覚えてるが、8080なんてしらん。

71 :デフォルトの名無しさん:02/06/22 17:00
>>62
LXI HL, XX
MOV A, (HL)
LXI HL, YY
MOV B, (HL)
LXI HL, ZZ
MOV C, (HL)
LXI HL, WW
MOV D, (HL)
MOV (HL), A
LXI HL, ZZ
MOV (HL), B
LXI HL, YY
MOV (HL), C
LXI HL, XX
MOV (HL), D

72 :デフォルトの名無しさん:02/06/22 17:04
あっそうか。
MOV A, (XX)
MOV B, A
MOV A, (YY)
MOV C, A
MOV A, (ZZ)
MOV D, A
MOV A, (WW)
MOV (XX), A
MOV A, B
MOV (WW), A
MOV A, C
MOV (ZZ), A
MOV A, D
MOV (YY), A
でもいいな。

73 :デフォルトの名無しさん:02/06/22 17:10
>>72は忘れて下さい。MOVでなくてLDA, STAになってしまう。
8086に慣れきってしまっとる。

74 :デフォルトの名無しさん:02/06/22 17:24
>>68
合ってるかな ?
LXI SP,XX+4
POP H
MOV L,A
MOV H,L
MOV A,H
XTHL
MOV L,A
MOV H,L
MOV A,H
PUSH H
HLT

75 :デフォルトの名無しさん:02/06/22 17:26
2バイトの交換を2回やるんだから、MOVは4*2回で済むと思われ。
にしても、わざわざLXI使えっていう問題の意図がわかるひとの解答きぼん。
INRとかXCHGとか使えるならわかるんだが…

76 :デフォルトの名無しさん:02/06/22 17:29
>>74
それは 0123 を 1032 にしてるような…
問題は 0123 を 3210 にしたいんでないのか?

77 :75:02/06/22 17:33
あ、ペアレジスタにイミディエート値入れるのはLXIなのか、すんまそん。

78 :デフォルトの名無しさん:02/06/22 18:01
AVL木の挿入部分を実装するのですが,完全に詰まっています
もとになる2分木の実装は終わったのですが...

1)新しい要素を挿入したとき,木のバランスが崩れているかどうかを
判断する方法が分かりません
2)(1)においてバランスが崩れたと判断したときに,そこから回復する
方法の実装の仕方が分かりません

ヒントだけでも良いので,お願いします




79 :デフォルトの名無しさん:02/06/22 18:37
>>69>>77
勉強になりました。ありがとうございました

80 :19:02/06/22 23:26
rewind(stdin);
で全て解決しました。
みなさん、大変ご迷惑をおかけしました

81 :デフォルトの名無しさん:02/06/22 23:44
>>78
思いつきで書かせてもらうと、
あるノードにくっついてる木の大きさをノード毎に記録する事で、
バランスが崩れている事がわかる。

バランスが崩れているノードがあれば、
そのノードを少ない方の木に挿入して、木をマージするという動作を繰り返せば
いいのでは?


82 :デフォルトの名無しさん:02/06/23 01:35
>>78
ttp://retropc.net/x68000/software/develop/dis/diseririn/DIS313.ZIP
に汎用AVL木ライブラリが入ってるけど参考になるかなぁ…

83 :名無しさん@カラアゲうまうま:02/06/23 01:51
>>81
AVLはつりあってるかどっちかが一つ大きいかだけじゃなかったっけ。


84 :デフォルトの名無しさん:02/06/23 01:51
>>78
ぐぐったらこんなの見つけた
http://www.jaist.ac.jp/~y-sudo/summer/AVL.html
あと、木の高さは再帰を使えば求められるはず。

#AVL木にこだわらないなら赤黒木とかの別の木のを使うと(゚∀゚)イイかも。

85 :名無しさん@カラアゲうまうま:02/06/23 01:52
>>80
解決しねーよ。


86 :デフォルトの名無しさん:02/06/23 02:50
>>85
rewind(stdin); はstdinのバッファを捨てるんじゃなかったっけ
リダイレクトで暴走確定

87 :名無しさん@カラアゲうまうま:02/06/23 03:21
つーか、シークできないデバイスに対するfseek()はシステム依存。


88 :78:02/06/23 04:03
>>81
>>82
>>84
レス,有り難うございます
リンク先で勉強してから出直してきます


89 :デフォルトの名無しさん:02/06/23 07:52
n個の数字でできるすべての順列を表示するにはどうしたらいーの?

90 :デフォルトの名無しさん:02/06/23 08:06
こんな時こそ数学の出番だ

91 :デフォルトの名無しさん:02/06/23 08:32
>>89
お前「順列」って分かってるか?
n個のからr個取るんだろ?
ああ、r=1〜nまで全部の順列か。
漏れなら再起呼び出しを使うな


92 :デフォルトの名無しさん:02/06/23 10:31
static int fact(int n){
if(n==1){
return 1;
}else{
return n*fact(n-1)
}
}

93 :デフォルトの名無しさん:02/06/23 10:32
(n-1)のあと、;忘れた・・
鬱だ。

94 :デフォルトの名無しさん:02/06/23 10:34
91って頭わるそう(w

95 :デフォルトの名無しさん:02/06/23 10:54
>>89
とりあえずこんな感じ...

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

void PermSub(const int a[], int used[], int perm[],
 const size_t n, const size_t level)
{
 if(level < n){
  for(size_t i = 0; i < n; i++){
   if(!used[i]){
    used[i] = 1;
    perm[level] = a[i];
    PermSub(a, used, perm, n, level + 1);
    used[i] = 0;
   }
  }
 } else {
  for(size_t i = 0; i < n; i++){
   printf(" %d", perm[i]);
  }
  printf("\n");
 }
}

void Permutation(const int a[], const size_t n)
{
 int *used = new int[n];
 int *perm = new int[n];
 for(size_t i = 0; i < n; i++){
  used[i] = 0;
 }
 PermSub(a, used, perm, n, 0);
 delete [] perm;
 delete [] used;
}

int main()
{
 int a[] = {1, 2, 3, 4, 5};
 Permutation(a, sizeof(a)/sizeof(a[0]));
 getch();
 return 0;
}

適当に組んだから、C なのか C++ なのかよくわからんようになって
しもうた。

96 :デフォルトの名無しさん:02/06/23 11:30
>>94
挑発に乗って答えを書くほど悪くはない
質問しなおしゃ答えてやるのに

97 :混じれ洲薫:02/06/23 12:06
アセンブラi8080Aで
メモリの1EH,1FH,20H,21H,22H番地の内容を
逆に並べるプログラムをつくりたいのですが,
INR,DCR,INX,DCXを使って下のに書き足す形なのですが,
ヒントもしくは解答を教えて下さい.
解説もしていただけるとうれしいです.
よろしくお願いします.

LXI D,1EH
LXI H,22H
LDAX D
MOV B,M
XCHG
MOV M,B

ここに書き足す

HLT
ORG 1EH
DB 1,3,5,7,9
END

98 :デフォルトの名無しさん:02/06/23 12:08
>>96
「書かない」じゃなくて「書けない」だろ ? ププ
頭悪いことを何回も表明しなくていいぞ。

99 :デフォルトの名無しさん:02/06/23 12:11
>>97
宿題そのまま書かないで、ちょっとは自分で考えろ。

100 :デフォルトの名無しさん:02/06/23 12:50
>>98
確かに私も「俺なら再起でやる」としか書けません
残念ながらシックスセンスはもってないので
早とちりしてCで答えてるやつ等もいるけど
挑発してる暇があったら質問書き直せ
まあ厨の質問なんて誰も教えてくれないだろうけど

101 :デフォルトの名無しさん:02/06/23 13:49
>>89
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>

void sp(int n) {
std::vector<int> v(n) ;
int i = 0 ;

for(std::vector<int>::iterator vi=v.begin();vi!=v.end();vi++)
*vi = i ++ ;

do {
std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout, " ")) ;
std::cout << std::endl ;
} while(std::next_permutation(v.begin(),v.end())) ;
}

102 :デフォルトの名無しさん:02/06/23 14:56
>>100
粘着ウザイよ。氏ね。

103 :デフォルトの名無しさん:02/06/23 15:53
必死な奴が一人紛れこんでるな。
しかも煽るの下手だし。

晒しとこう。

104 :デフォルトの名無しさん:02/06/23 16:04
晒し上げだゴルァ(゚Д゚#)

105 :デフォルトの名無しさん:02/06/23 16:18
>>96
まあ、落ち着けや。

宿題を他人に教えてもらってそのまま提出したところで
結局本人が得する訳じゃないのは分かっているのだから、
気が向いたなら、挑発に乗って書いてやってもいいのでは?
むしろ相手の役に "立ちたくない" なら書いてやるのが吉。
(ただし、面倒臭いなら書く必要なし)

それとも、頭わるそうっていう発言を気にしているの?
どちらが頭がわるそうかは傍目から見ても明らか。
それほどこの板の人間(一部を除く)は馬鹿じゃないよ。気にするな。

106 :デフォルトの名無しさん:02/06/23 16:22
>>105
おまえは答えられないだけだろ。この屁理屈野郎

107 :デフォルトの名無しさん:02/06/23 16:37
>>106
答えてやればいいじゃんって意見を煽るお前のバカさ加減を是非とも分析したい。

108 :105:02/06/23 16:44
>>106
おう。もちろん俺は気前がいいから教えてやる。
ただし、手書き(&でばぐ)するの面倒臭いから
他人のコードで勘弁してくれ。
まあ、有名どころでこんなのがある。

ftp://ftp.matsusaka-u.ac.jp/pub/algorithms/src/genperm.c

これコピペして明日先生に提出しれ。
宿題せずに済んで、良かったね(w

109 :89:02/06/23 17:21
89ですけど、以降の煽りは私じゃないです・・・。
なんだか、誤解の招く書き方して申し訳ないです。
n個の数字でできる順列を計算するプログラムは作れたんですけど、
順列を全て表示するプログラムができなくて。
↑これでもわかりにくいですね(汗
例:(n=3として)3!=6 ていうのはできるんですけど。
  123 132 213 231 312 321
  と表示するのができなくて教えて欲しかった・・・。
嫌なムードの元を作ってすみません。

110 :デフォルトの名無しさん:02/06/23 17:27
>89
101さんのじゃだめなの?全部に1足せばまさに89さんが望んだものが
得られるのでは?


111 :デフォルトの名無しさん:02/06/23 17:37
http://pc.2ch.net/test/read.cgi/tech/1024752903/
>>89が↑の1なら>>101見てもわからんかモナー

112 :デフォルトの名無しさん:02/06/23 17:42
Java限定ということですか?

113 :デフォルトの名無しさん:02/06/23 17:50
>>109
> n個の数字でできる順列を計算するプログラムは作れたんですけど、
> 順列を全て表示するプログラムができなくて。
「計算できて、表示できない」ってどういうことだ ?

> 例:(n=3として)3!=6 ていうのはできるんですけど。
そりゃ階乗じゃねーのか ?

> 嫌なムードの元を作ってすみません。
>>91 みたいなバカはほっとけ。それより、何がしたくて何がわからない
かちゃんと書け。

114 :デフォルトの名無しさん:02/06/23 17:51
同じ学校のヤシらかな

115 :学生:02/06/23 20:19
プログラマーの皆さまお疲れ様です。
不動小数点の質問なんですが、
「2014」の4桁をXとし、Xを2バイトの
符号付整数として表せ。と言う問題と
XをIBM方式により浮動小数点として表し
32ビットで表せ。と言う問題が良く解かりません
どなたか解説をお願いします

116 :デフォルトの名無しさん:02/06/23 20:20
不動なの?

117 :デフォルトの名無しさん:02/06/23 20:26
>>115
なめるな。
> 「2014」の4桁をXとし、Xを2バイトの符号付整数として表せ。
これもわからないんだったら首釣って市ね。

118 :アフォ ◆mxnad08k :02/06/23 20:44
宿題手伝ってもらえませぬか?(prolog)

119 :デフォルトの名無しさん:02/06/23 20:47
2バイトで表すって単に2014→0x07DEってことかな。
浮動小数点数のIBM方式はサパーリ

120 :アフォ ◆mxnad08k :02/06/23 20:47
↓の[]内の文字を打ち込むと、次の[]までが表示されるようなプログラムをprologで作りたいんです。

?-[add.]

Input=[あ.]

 1件

Input=[い.]

 2件

Input=[う.]

 3件

Input=[end.]

現在3件です







以上


121 :デフォルトの名無しさん:02/06/23 20:55
>>117
恭祐さんキビシいな

122 :デフォルトの名無しさん:02/06/23 20:59
恭祐さんて誰?

123 :デフォルトの名無しさん:02/06/23 21:02
スレを重ねるごとにスパルタになっているぞ。
麻衣よ帰ってきておくれ。

124 :デフォルトの名無しさん:02/06/23 21:07
答えるどころか罵声を浴びせるような奴が、なんでこのスレを見てるのか疑問だ。
黙ってるか見なけりゃいいのに。

125 :デフォルトの名無しさん:02/06/23 21:10
ああ、恭祐ってここのおやじか。

126 :デフォルトの名無しさん:02/06/23 21:13
レベルの低い奴がもっとレベルの低い奴を罵倒するためにここに居る罠



127 :デフォルトの名無しさん:02/06/23 21:15
アフォ ◆mxnad08k が完全にシカトされてる罠

128 :デフォルトの名無しさん:02/06/23 21:16
>>123
今、マイちゃんはボーイフレンドに夢中で、お兄ちゃんにかまってる
ヒマはできません。

129 :デフォルトの名無しさん:02/06/23 21:42
>>113
>何がしたくて何がわからないかちゃんと書け。
>>91は正にそれを言ってるんじゃ・・・
よーするに回答者を煽って人口減らそうとしてるやつが紛れ込んでるってことだな


130 :デフォルトの名無しさん:02/06/23 22:05
引き続き
>>97をよろしくお願いします

131 :デフォルトの名無しさん:02/06/23 22:08
>>130
>>99

132 :デフォルトの名無しさん:02/06/23 23:15
>>20
ここの奴等はレベル低いから難しすぎるんじゃねぇか?藁

133 :デフォルトの名無しさん:02/06/23 23:18
そんなに答えて欲しいのか?


ところで今PC鯖めちゃ重くない?
他のカテゴリは普通なのに。

134 :デフォルトの名無しさん:02/06/23 23:27
>>prolog
リストにして保存
リストの数を数えつつ表示

135 :デフォルトの名無しさん:02/06/24 00:13
http://www2.nasicnet.com/~hila/C/kadai6-1.c

このソースをコンパイルすると32行目と52行目に
illegal pointer combination (!=)
という警告がでます。
どこが間違ってるのかわからないのですが・・・
ちなみにコンパイラはLCCです

136 :デフォルトの名無しさん:02/06/24 00:16
>135
ポインタと-1は比較できないんでは?

137 :デフォルトの名無しさん:02/06/24 00:16
>>135
> t->left!=-1
原因はコレではないでしょうか?

138 :デフォルトの名無しさん:02/06/24 00:21
>>135
どこから-1が出てきたん?

139 :デフォルトの名無しさん:02/06/24 00:25
問題が、ノードが無い時は‐1を入力するとなってるのです。
こういうときはどうやって比較すればいいのでしょう?

140 :デフォルトの名無しさん:02/06/24 00:26
-1を入力するのはいいけど、ポインタに-1を入れるのはいただけない。

141 :デフォルトの名無しさん:02/06/24 00:31
多分これが解決してもうまくいかなくて、そっちが本題になると思うので
問題も見てもらいます(^^;

>140
構造体*tの中のint numに入ってるのですがだめでしょうか?

問題
キーボードから,数値データ(1〜100の整数)を入力し,
以下のような2分木を構築するプログラムを作成せよ

http://www2.nasicnet.com/~hila/C/tree.gif
実行結果例
http://www2.nasicnet.com/~hila/C/tree.txt

142 :デフォルトの名無しさん:02/06/24 00:33
>141
numに-1を入れるのはいい。それならなぜleftやrightと-1を比較する?

143 :デフォルトの名無しさん:02/06/24 00:40
ああ、そうか!
とりあえず警告は消えました!

でもやっぱり実行結果は上手くいかないっす・・・
最初の入力を求める時に
Input data [0: depth = 0] of a left node =
と出てしまうのですが・・・


144 :デフォルトの名無しさん:02/06/24 00:42
>>143
直したソースを示してくれないと、誰も何とも言えんがな。

145 :デフォルトの名無しさん:02/06/24 00:43
>>135
動くかどうかは別として、(struct Data *)-1 という風にキャストしてから
比較するとエラーは出ない。

でも、設計をしっかりしないと、バグの泥沼にはまるぞ・・・・

146 :デフォルトの名無しさん:02/06/24 00:46
http://www2.nasicnet.com/~hila/C/kadai6-1.c

とりあえず (t->left)->num != -1 みたいな感じに直したら
警告は消えました。
でもInput data [0: depth = 0] of a left node =
となってしまう・・・


147 :デフォルトの名無しさん:02/06/24 00:59
>>146
Data->leftもData->rightも初期化されてないので、俺の環境では
Access Violationが出るよ。
mallocで確保した領域は自動変数と同じで不定値が入っているから、
確保した後は必ず初期化しよう。それかcallocで0で確保するかだな。

148 :デフォルトの名無しさん:02/06/24 01:04
http://www2.nasicnet.com/~hila/C/kadai6-1.c

>147
とりあえずmallocの後にleftとrightにNULLをいれるようにしました。
それでもやっぱり最初のデータ入力のメッセージが
Input data [0: depth = 0] of a left node =
ってなってしまいます・・・
あ、いい忘れたけどとりあえず実行結果例
http://www2.nasicnet.com/~hila/C/tree.txt
と同じようにデータを入れていこうと思ってるので、
最初の Input data of a top node =  で20を入力しています。
そのあと
Input data [20: depth = 0] of a left node =
と出て欲しいのですが・・・

149 :デフォルトの名無しさん:02/06/24 01:07
topのleftやrightもNULLクリアしてる?

150 :デフォルトの名無しさん:02/06/24 01:12
>>148
次のようにしてご覧。GenTreeにはまだ問題があるけどね。

int main()
{
int count=0;
struct Data *top;
void GenTree(struct Data *,int);

top = (struct Data *)malloc(sizeof(struct Data));

top->left = top->right = NULL;
printf("Input data of a top node = ");
scanf("%d",&top->num);

GenTree(top,count);
return 0;
}

151 :デフォルトの名無しさん:02/06/24 01:14
ああ、そうだった!
なんとか表示はうまくなりました。

でも例と入力の順番が違う・・・
ループの仕方がおかしいんだろなぁ・・・

152 :デフォルトの名無しさん:02/06/24 01:16
てかデータを全部いれ終わる前に終わる(爆)

153 :デフォルトの名無しさん:02/06/24 01:22
>>151
正直、ゼロから作り直したほうが、かえって早くできるかも

154 :デフォルトの名無しさん:02/06/24 01:27
>>153
全く見当違いすかね?(^^;

155 :デフォルトの名無しさん:02/06/24 01:28
>154
いや、ゴールに近いため、かえって間違いを探しにくいんじゃないかと。

156 :デフォルトの名無しさん:02/06/24 01:30
再帰関数を作るときは、挙動と呼ばれる順番をよく考えてみよう。

157 :デフォルトの名無しさん:02/06/24 01:35
ああ、原因はわかりました。
一つ目のifでデータを左右に作ると
2つ目のifで絶対rightがあるから絶対ひっかかってしまうんですね・・・
うーん、どうすりゃいいんだ・・・

>>156
挙動とはなんでしょう?

158 :デフォルトの名無しさん:02/06/24 01:42
>>157
再帰関数は、自分自身を呼び出しているので、パッと見、どういう
風に動くのか、判断しにくい。

だから、再帰関数に渡されるパラメータをその都度表示するなど
して、挙動をつかんでおくと、デバッグが容易になりやすい。

もっとも、頭の中で挙動がイメージできにくい場合、無理にプログ
ラムしても、変な動きをして、泥沼にはまってしまう場合が多い。

159 :デフォルトの名無しさん:02/06/24 01:43
http://www2.nasicnet.com/~hila/C/kadai6-1.c

うーん、だんだん近づいてきた。
depthが増えない・・・
‐1をいれても終わらなかったり・・・

ところでこの実行結果例をみるとleftに-1をいれるとrightは
データの入力も求めてませんがなんででしょう?
問題文もあれだけだしとにかくこのとおりやればいいか・・・

160 :デフォルトの名無しさん:02/06/24 01:45
なんでGenTreeでc++を渡しているの?

161 :デフォルトの名無しさん:02/06/24 01:46
1個下の階層に行くのでdepthの表示をあげるためのつもりなんですが・・・

162 :デフォルトの名無しさん:02/06/24 01:47
c+1じゃだめなん?

163 :デフォルトの名無しさん:02/06/24 01:47
>>162
同じじゃないんですか?

164 :デフォルトの名無しさん:02/06/24 01:49
c++だと、1足す前の値が渡される。

165 :135:02/06/24 01:52
そうなのか・・・

っていうかさっきから名前欄に何もいれてなかった、すんません(^^;

166 :デフォルトの名無しさん:02/06/24 01:56
c+1にすれば、depthが増えない問題は解決するかと。

167 :135:02/06/24 02:02
>>166
あ、それは解決しました、ありがとうございます。
次の問題は-1いれても-1のleftを聞いてくることだぁ。
なぜか90なんて表示が出て来たりする・・・

168 :135:02/06/24 02:07
ぎゃあああ!できたぁああ!(爆)
ありがとうございました〜〜!
今週中にまた次の問題を聞きに来ると思うのでよろしく(笑)

169 :デフォルトの名無しさん:02/06/24 02:07
そりゃあ、
if(left->num != -1){
  printf("Input data [%d : depth = %d] of a right node = ",t->num,c);
  scanf("%d",&right->num);
}

t->left=left;
t->right=right;
GenTree(t->left,c+1); ←A
GenTree(t->right,c+1);

ってなっているから、-1が入力されたときにも普通にAが呼ばれるからでは?


170 :169:02/06/24 02:08
いやん、おそかった。

171 :デフォルトの名無しさん:02/06/24 02:08
if(t->left!=NULL && (t->left)->num!=-1)

if((t->left)->num==-1)
return;
else if(t->left!=NULL)
では?


172 :デフォルトの名無しさん:02/06/24 02:09
>171
leftがNULLの時に死ぬんじゃ?もう終わったみたいだからあれやけど

173 :デフォルトの名無しさん:02/06/24 02:16
というか、GenTreeが呼ばれるときは必ずnum != -1で、
t->left == NULLのように思うのですが…どうでしょうか?

174 :デフォルトの名無しさん:02/06/24 02:19
>173
あ、そうかも。
でもなんとなくテストしないでポインタ使うと気持ち悪くないですか?

175 :デフォルトの名無しさん:02/06/24 02:34
   /  /ヽ丿彡彡彡彡彡ヽヽ
   |  丿           ミ
   | 彡 ____  ____  ミ/
   ゝ_//|    |⌒|    |ヽゞ
   |tゝ  \__/_  \__/ | |
   ヽノ    /\_/\   |ノ
    ゝ   /ヽ───‐ヽ /  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     /|ヽ   ヽ──'   / < 気持ち悪くないデース
    / |  \    ̄  /   \
   / ヽ    ‐-            ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

void GatesTree(struct Data *t, int c)
{
    int left_num, right_num;

    printf("Input data [%d : depth = %d] of a left node = ", t->num, c);
    scanf("%d", &left_num);

    if (left_num != -1)
    {
        printf("Input data [%d : depth = %d] of a right node = ", t->num, c);
        scanf("%d", &right_num);

        t->left = (struct Data *)calloc(1, sizeof(struct Data));
        t->left->num = left_num;
        GatesTree(t->left, c+1);

        if (right_num != -1)
        {
            t->right = (struct Data *)calloc(1, sizeof(struct Data));
            t->right->num = right_num;
            GatesTree(t->right, c+1);
        }
    }
}

176 :デフォルトの名無しさん:02/06/24 07:44
引き続き
>>97をよろしくお願いします


177 :デフォルトの名無しさん:02/06/24 10:53
>176
>>99

178 :デフォルトの名無しさん:02/06/24 12:15
>>176一応考えたりしてます。

179 :デフォルトの名無しさん:02/06/24 12:38
>178
作りかけのを貼ってみたら?

180 :デフォルトの名無しさん:02/06/24 12:55
>176

LXI D,1EH ← DEレジスタペアに(16ビット)1EHを入れる
LXI H,22H ← HLレジスタペアに(同上)22Hを入れる
LDAX D ← DEレジスタペアが指す番地の中身をAレジスタに読み込む
MOV B,M ← HLレジスタペアが指す番地の中身をBレジスタに読み込む
XCHG ← HLレジスタペアとDEレジスタペアを交換
MOV M,B ← Bレジスタの中身をHLレジスタペアが指す先に代入

ここに書き足す

HLT ← 実行おはり
ORG 1EH ← 1EH番地
DB 1,3,5,7,9 ← データ
END

じゃないの?



181 :デフォルトの名無しさん:02/06/24 13:20
>>120
もう自分でやっちゃったかもしれないがかいてみる。
これであってるかな?

add_word(end,Words,Num,Words,Num) :- writef('%w%w%w\n',['現在',Num,'件です']).
add_word(X,Words,Num,A,B) :- append(Words,[X],Result),plus(Num,1,Num1),writef('%w%w\n',[Num1,'件']),
write('Input='),read(Y),add_word(Y,Result,Num1,A,B).
make_list(List) :- write('Input='),read(X),add_word(X,[],0,List,_).
print_list([]) :- writeln('以上').
print_list([W|Remain]) :- writeln(W),print_list(Remain).

add :- make_list(Words),print_list(Words).

182 :デフォルトの名無しさん:02/06/24 14:25
windowsでprologってできる?

183 ::02/06/24 14:48
>>181
まだやってる、やりつづけてるです。
なんだかみたことない記号が…(。。;)
自分はここまでです。
助けてくだしぃ…。

l:-assert(no(0)),repeat,qa('Input=',A),retract(no(D)),L is D+1,assert(no(L)),tab(4),write(L),write(件),nl,A=end,!,com(A).
l.
com(end):-no(L),write(現在),write(L),write(件です),nl,write(A),nl,fail.
com(end):-write(以上).

qa(Q,A):-prompt(_,''),write(Q),read(A).



184 ::02/06/24 15:04
その前に、お返事ありがとうございました!
あと1時間で提出なので、放置状態承知で
きてみたのですが、よかたです。
ほんとにありがとうです。


185 :デフォルトの名無しさん:02/06/24 15:07
http://www.st.rim.or.jp/~phinloda/cqa/cqa8.htmlは?

186 :185:02/06/24 15:08
ごめん、まちがえた

187 :デフォルトの名無しさん:02/06/24 17:58
>>177>>180
出来ました.迷惑かけました.
一応貼ります.プログラム中のコメントは
適当に書いたんでつっこまないで無視して下さい.
isim (Intel 8085 Simulater) Ver. 1.0 by T.Inoue
Program:kadai11.asm

loc. object label opcode operand
0000 111E00 LXI D,1EH ; D,Eペアに1EH番地の情報が入る
0003 212200 LXI H,22H ; H,Lペアに22H番地の情報が入る
0006 1A LDAX D ; D,Eペアの値をAに転送する
0007 46 MOV B,M ; Bにメモリを転送
0008 EB XCHG ; D,EとH,Lを交換する
0009 70 MOV M,B ; メモリにBを転送
000A 12 STAX D ; Aの内容をメモリに転送
000B 12 ;; 1FHと21H番地を逆にする
000B 111F00 LXI D,1FH ; D,Eペアに1FH番地の情報が入る
000E 212100 LXI H,21H ; H,Lペアに21H番地の情報が入る
0011 1A LDAX D ; D,Eペアの値をAに転送する
0012 46 MOV B,M ; Bにメモリを転送
0013 13 INX D ; D,Eペアを1加算
0014 13 INX D ; D,Eペアを1加算
0015 2B DCX H ; H.Lペアを1減算
0016 2B DCX H ; H,Lペアを1減算
0017 70 MOV M,B ; メモリにBを転送
0018 12 STAX D ; Aの内容をメモリに転送
0019 76 HLT ; 計算機の動作停止命令
ORG 1EH
001E 01 DB 1,3,5,7,9
001F 03
0020 05
0021 07
0022 09
END



============= SYMBOL TABLE ===========

=======================================

Executed from 001E.

:A=03 B=07 C=03 D=00 E=21 H=00 L=1F IR=76 PC=0019 SP=0000

0000: 111E 0021 2200 1A46 EB70 1211 1F00 2121
0010: 001A 4613 132B 2B70 1276 0000 0000 0907
0020: 0503 0100 0000 0000 0000 0000 0000 0000



188 :デフォルトの名無しさん:02/06/24 22:09
Cを学び始めて半月な厨ですが、早速つまいでしまってます
1. 標準入力から以下の16個の16進数を入力し、
"a"と"b"で表されるビットマップ図形として標準出力へ出力(表示)
0200
0200
3FF8
0400
0440
07F0
1C5C
3444
2446
6482
4482
4506
4604
381C
0070
0000

2.

標準入力から"a"と"b"で表される図形を入力し、
16個の16進数として標準出力へ出力

(例)aaaaaaaaaaaaaaabなら0001
aaaabbbbaaaabbbbなら0f0f と出力される。

という感じの問題で1はできたのですが2の問題ができません。お願いします

189 :デフォルトの名無しさん:02/06/24 22:16
>188
・質問ならageたら?
・文章の意味がよくわからん
・厨を自称しないほうがいい

190 :デフォルトの名無しさん:02/06/24 22:20
>>188
文字列の2進を数値の16進にするということ?

191 :デフォルトの名無しさん:02/06/24 22:21
>>188
どこらへんがわからない?
1.の問題が出来るなら2.も出来ると思うけど、何でつまづいてるのか教えてくれ。

192 :デフォルトの名無しさん:02/06/24 22:37
188のこのレスポンスの悪さは、もしかしてここを宿題の「すべり止め」的
に使用する気か?

193 :デフォルトの名無しさん:02/06/24 23:04
>>188
stdin2int(){int c,a=0;while(31<(c=getchar())&&c!=EOF)a+=a+(c=='b');return a;}

194 :デフォルトの名無しさん:02/06/24 23:05
>>192
2ch を本命にするはずないと思うけど...。

195 :188:02/06/24 23:21
あ、すいません。ちょっとした勘違いでした。
問題の意味は文字列の2進を16進数で表すと言う意味でした。
ご迷惑おかけしました

196 :デフォルトの名無しさん:02/06/24 23:25
>>195
で、できたのか?

197 :デフォルトの名無しさん:02/06/25 01:01
1  2  3  4  5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

配列なんですけど、プログラム教えておながい
C++で一次元と二次元で作るんですけど全く思いつきません

198 :デフォルトの名無しさん:02/06/25 01:04
>>197
何をしたいのかもなにがわからないのかも分からない

199 :デフォルトの名無しさん:02/06/25 01:07
うーむ、こいつぁ難問だ・・・
下手するとなんとかの定理とかより難しいかもな(w

200 :197:02/06/25 01:10
うずまき型で数字を出力したいのですが
手段として配列を使わねばならないのです。


201 :デフォルトの名無しさん:02/06/25 01:11
久々のpuzzleだ・・・

202 :デフォルトの名無しさん:02/06/25 01:18
アタック25〜

203 :デフォルトの名無しさん:02/06/25 01:19
>>200
チミはまず質問の仕方から学ばねばならないようだね
その質問では、例え我々が答えを書いたとしても
「そうじゃない」と言われるのがオチだ

204 :デフォルトの名無しさん:02/06/25 01:32
キタ━━━━━━━━━┓
 ┏━━━━━━━┓ ┃
 ┃┏━(゚∀゚)━!!!!  ┃ ┃
 ┃┃         ┃ ┃
 ┃┗━━━━━━┛┃
 ┗━━━━━━━━┛

205 :197:02/06/25 01:33
ああ、この答えは全く分からないので「そうじゃない」
なんて言いませんよ。197のように出力するプログラムをC++で一次元配列の場合、
二次元配列の場合、それぞれ考えようっていう問題なんですけど。



206 :デフォルトの名無しさん:02/06/25 01:41
1次元配列に 1,2,3,4,5,16,17,18,19,6 ・・・13,12,11,10,9 って入れて5個ずつ5回表示する。
2次元配列に5つの行の値を入れておいて、それを表示する。

って、こんなことじゃないよな。問題が良くわからん。

207 :デフォルトの名無しさん:02/06/25 01:44
printf("
1  2  3  4  5\n
\n
16 17 18 19 6\n
\n
15 24 25 20 7\n
\n
14 23 22 21 8\n
\n
13 12 11 10 9 \n");

208 :デフォルトの名無しさん:02/06/25 01:45
>>205
こんなのでもいいのか?

#include<iostream>
using namespace std;

int main(){
int a[25]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};

cout << " " << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << endl;
cout << a[15] << " " << a[16] << " " << a[17] << " " << a[18] << " " << a[5] << endl;
cout << a[14] << " " << a[23] << " " << a[24] << " " << a[19] << " " << a[6] << endl;
cout << a[13] << " " << a[22] << " " << a[21] << " " << a[20] << " " << a[7] << endl;
cout << a[12] << " " << a[11] << " " << a[10] << " " << a[9] << " " << a[8] << endl;

return 0;
}

209 :デフォルトの名無しさん:02/06/25 01:53
おまけだ。
#include<iostream>
using namespace std;

int main(){
int a[25]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
cout << " " << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << endl;
cout << a[15] << " " << a[16] << " " << a[17] << " " << a[18] << " " << a[5] << endl;
cout << a[14] << " " << a[23] << " " << a[24] << " " << a[19] << " " << a[6] << endl;
cout << a[13] << " " << a[22] << " " << a[21] << " " << a[20] << " " << a[7] << endl;
cout << a[12] << " " << a[11] << " " << a[10] << " " << a[9] << " " << a[8] << endl;

int b[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
cout << "\n " << b[0][0] << " " << b[0][1] << " " << b[0][2] << " " << b[0][3] << " " << b[0][4] << endl;
cout << b[3][0] << " " << b[3][1] << " " << b[3][2] << " " << b[3][3] << " " << b[1][0] << endl;
cout << b[2][4] << " " << b[4][3] << " " << b[4][4] << " " << b[3][4] << " " << b[1][1] << endl;
cout << b[2][3] << " " << b[4][2] << " " << b[4][1] << " " << b[4][0] << " " << b[1][2] << endl;
cout << b[2][2] << " " << b[2][1] << " " << b[2][0] << " " << b[1][4] << " " << b[1][3] << endl;

return 0;
}

こんなくだらないことしてないでそろそろ寝よう・・・

210 :デフォルトの名無しさん:02/06/25 01:54
int i, array[] = {
1,2,3,4,5,
16,17,18,19,6,
15,24,25,20,7,
14,23,22,21,8,
13,12,11,10,9
};

for (i = 1; i <= 5*5 ;i++) {
if (i%5 == 0)
cout<<"\n";
cout.width(3);
cout.fill(' ');
cout<<array[i];
}
cout<<endl;

とか。

211 :デフォルトの名無しさん:02/06/25 01:55
早押しクイズみたいだね。問題がわからないのに答えが出るとは。

212 :デフォルトの名無しさん:02/06/25 01:55
for (i = 0; i < 25 ;i++) {
失礼こっち。

213 :デフォルトの名無しさん:02/06/25 01:57
桁揃えようとして半角スペース入れたけど、2chでは反映されない罠・・・

鬱駄寝よう・・・

214 :デフォルトの名無しさん:02/06/25 01:57
じゃぁおれも

#include <iostream>
#include <iterator>

int main()
{
char text[][30] = {
" 1  2  3  4  5 ",
"16 17 18 19  6 ",
"15 24 25 20  7 ",
"14 23 22 21  8 ",
"13 12 11 10  9 ",
};
std::copy( text, text+5, std::ostream_iterator< char* >( std::cout, "\n" ) );
}

215 :197:02/06/25 02:02
みなさん
ありがとうございます

216 :デフォルトの名無しさん:02/06/25 02:05
>>215
(;´-`).。oO(さすが>>197

217 :デフォルトの名無しさん:02/06/25 02:09
>>215
214を提出したらほめてやる

218 :デフォルトの名無しさん:02/06/25 02:14
やろうとしている事は>>206だと思う。

で、その配列に入る値は、ハードコーディングではなく実行時に計算する、と。
for の組み合わせでできそうですな。1...nを順番に配列に入れていけばよい
わけだけど、そのときのインデックスをどうfor文でうまく計算するか。
(多分for文2個か4個でできる)

行・列数を簡単に増やせるようにしておくのが、宿題的にも吉だよ、と。

219 :197:02/06/25 02:16

    ∧ ∧ 
| ̄ ̄( ゜Д゜) ̄ ̄| <みなさん。遅くまでありがとうございますた。
|\⌒⌒⌒⌒⌒⌒\     214もありがとう。
|  \           \
\  |⌒⌒⌒⌒⌒⌒⌒|
  \|________|



220 :デフォルトの名無しさん:02/06/25 02:20
そして、多くの謎を残し、197は消えた・・・

221 :デフォルトの名無しさん:02/06/25 02:54
#define SIZE 5
int main(){
int a[SIZE][SIZE] = {0};
int i;

bool isHoriz = true;
int x=0,y=0;
bool isRev = false;
for(i=1;i<=SIZE*SIZE;++i){
a[x][y] = i;
if(isHoriz){
if(isRev){
if(x-1 < 0 || a[x-1][y] !=0){
isHoriz = false;
--y;
}else{
--x;
}
}else{
if(x+1 > SIZE || a[x+1][y] != 0){
isHoriz = false;
++y;
}else{
++x;
}
}
}else{
if(isRev){
if(y-1 < 0 || a[y-1][y] !=0){
isHoriz = true;
isRev = false;
++x;
}else{
--y;
}
}else{
if(y+1 > SIZE || a[x][y+1] != 0){
isHoriz = true;
isRev = true;
--x;
}else{
++y;
}
}
}
}

for(y=0;y<SIZE;++y){
for(x=0;x<SIZE;++x){
printf("%02d ", a[x][y]);
}
printf("\n");
}
return 0;
}

やってみた。
冗長だなあ。もっとエレガントなのキボンヌ。

222 :デフォルトの名無しさん:02/06/25 03:05
問題があまりにも分からなさすぎると逆に盛り上がる罠

223 :デフォルトの名無しさん:02/06/25 03:20
>>221

ほい

#include <iostream>
#include <iterator>
#include <iomanip>

static int const SIZE = 5, SPACE = 3;

int main()
{
int array[SIZE][SIZE];

std::fill_n( &array[0][0], SIZE*SIZE, 0 );

for( int x = 0, y = 0, dx = 1, dy = 0, i = 1; i<=SIZE*SIZE; ++i, (x+=dx), (y+=dy) )
{
array[y][x] = i;
int const nextx = x+dx, nexty = y+dy;
if ( nextx<0 || nexty<0 || nextx>=SIZE || nexty>=SIZE || array[nexty][nextx]!=0 )
{
int const tmpdy = dy; dy = dx; dx = -tmpdy;
}
}

for( int y = 0; y<SIZE; ++y )
{
for( int x = 0; x<SIZE; ++x )
std::cout << std::setw( SPACE ) << array[y][x];
std::cout << std::endl;
}
}

224 :223:02/06/25 03:25
>>221

Σ(゜д゜lll)ガビーン
そうか・・・そうやって配列全部初期化できるんだっけ・・・
fill_nなんか使ってバカみたいだ


225 :221:02/06/25 03:38
>>223
そうか・・・いちいち場合分けしなくても、xとyの増加量を順番に反転させてやればいいんだね。
思いつかなかった・・・

初期化は配列でも構造体でも最初の要素だけで全部できるよ。
漏れも最近知って、結構お気に入り。

226 :デフォルトの名無しさん:02/06/25 04:12
でも、クラスには使えない罠。

std::string s[10] = {"hoge"}; //s[0]だけが"hoge"

227 :デフォルトの名無しさん:02/06/25 20:27
forでくるくるくるくるとな

228 :馬鹿な僕に愛の手を!:02/06/25 22:37
次の覆面算を何らかのヒューリスティックスを
用いて、枝刈りをしながら解け。
SEND+MORE=MONEY
CROSS+ROADS=DANGER

一体どうすればいのでしょうか?アルゴリズムだけ
でいいんで教えてください。

229 ::02/06/25 22:41
この問題を教えてください.
3×3行列Aに対し
1,Aを読み込みAの行列式を出力
2,Bを読み込みA×Bを出力
3,|A|≠0の時のA^(-1)を出力


230 :デフォルトの名無しさん:02/06/25 22:43
>>228
↓この中のfukumen.cを見てみて。
http://www.vector.co.jp/soft/data/prog/se002453.html

>>229
マルチ氏ね

231 :デフォルトの名無しさん:02/06/25 22:46
BASICの完全数を高速で求めるプログラム教えてください
学校の宿題ででてるんだがわかないので・・・
切実


232 :デフォルトの名無しさん:02/06/25 22:52
>>231
↓このPDFの3ページ目にハケーンしたよ
http://www5b.biglobe.ne.jp/~simomac/paso2001/10sinb.PDF

233 :a:02/06/25 22:56
nの階乗を求めるプログラムをCで作ってください・・・
むむむ・・

234 :デフォルトの名無しさん:02/06/25 22:57
ありがとうなんですが・・・なーんかこれ分かりにくいんですが・・・


235 :デフォルトの名無しさん:02/06/25 23:04
>>234 これでちゃんと動くよ。10進BASICなので適当にコンバートしてね

10 input n
for a = 1 to n
let n = int(sqr(a))
for i = 1 to n
let r = a - i * int(a/i)
if r = 0 then
let s = s + i + a / i
end if
next i
if a = s - a then print a; s - a
let s = 0
next a

END

236 :デフォルトの名無しさん:02/06/25 23:06
>>233
nのかいじょー

int result = 1;
int i;

for (i = 1; i <= n; i++)
    result *= i;

237 :デフォルトの名無しさん:02/06/25 23:16
>231
「BASICの完全数」って何サ?

238 :馬鹿な僕に愛の手を!:02/06/25 23:25
>>230
手計算では無理でしょうか?

239 :デフォルトの名無しさん:02/06/26 00:09
>>238
まず普通に手で解いてみるとよいのでわ?

240 :デフォルトの名無しさん:02/06/26 00:11
>237
完全数をもとめるBASICのプログラムってことだろ?
6とか。

241 :デフォルトの名無しさん:02/06/26 00:23
>>237は完全数を知らないのではないのでしょうか・・・。

242 :デフォルトの名無しさん:02/06/26 00:34
奇数の完全数は、あるでしょうか。

243 :デフォルトの名無しさん:02/06/26 00:34
>>241
書き方が悪いという皮肉だろう。

244 :デフォルトの名無しさん:02/06/26 00:35
>231
日本語がわかりにくいよ。
大体、「高速で求める」ってなんやねん?
高速道路で求めるんか?

245 :デフォルトの名無しさん:02/06/26 00:37
>242
ないんじゃない?

246 :デフォルトの名無しさん:02/06/26 00:37
>>242
発見したり、ないことを証明できれば有名になれるかも

#まだ未解だよね?

247 :デフォルトの名無しさん:02/06/26 00:42
>>244
あんなのも読み取れないのか。へー。

248 :馬鹿な僕に愛の手を!:02/06/26 00:48
>>239
枝刈りのうまいやりかたがわかりません・・・

249 :デフォルトの名無しさん:02/06/26 00:50
>248
枝刈りをしないバージョンはつくれたん?

250 :デフォルトの名無しさん:02/06/26 00:52
>>248
https://www.nicoh.co.jp/047080.html

251 :デフォルトの名無しさん:02/06/26 01:21
>>248
まずは手で解けるようにならないと、プログラム上で枝刈りなんて
高等テクニックは使えないよ。

252 :デフォルトの名無しさん:02/06/26 03:59
  ノ     ∧     /) ∧
  彡  ノW \从/V  W \   ミ
  (  ノ        |      ノ \)
  ∩V      、、 |       >V7
  (eLL/ ̄ ̄\/  L/ ̄ ̄\┘/3)
  (┗(      )⌒(      )┛/
   ~| \__/ |  \__/ |~     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    爻     < |  ;     爻    < ほう、宿題とはな。
    ~爻     \_/  _, 爻~      \____________
     ~爻__/⌒ ̄ ̄ ̄~~ヽ_ 爻~
     /    ー ̄ ̄\_ ̄\
  _一‘     < ̄ ̄\\\J
<\       ー ̄ ̄ヽ_ヽJ   ̄\_
  \     _ニニニヽ )       ~\
   \  _/⌒|\ ヽ_~~ ~⌒\_
  __/~    V \_|     ~\_


253 :デフォルトの名無しさん:02/06/26 04:10
初心者なんですけど逆ポーランド計算を作るところで詰まってしまいました・・・教えてください

254 :デフォルトの名無しさん:02/06/26 04:16
>>253
マジな話、その質問の仕方のレベルだったら、先生のとこ行って
教えてもらったほうがいいと思うぞ。

255 :デフォルトの名無しさん:02/06/26 04:41
本当にわからないんです。お願いします・・・
参考になるページだけでもいいので。

256 :デフォルトの名無しさん:02/06/26 04:56
>>253
http://www.google.co.jp/search?q=%8Bt%83%7C%81%5B%83%89%83%93%83h&lr=lang_ja


257 :デフォルトの名無しさん:02/06/26 05:23
>>255
べつに>>254は意地悪してるんじゃなくて、ここで聞くより先生に聞いたほうが100倍ましな答えが得られるって言ってんの。
(そもそもそのための教師って職業だし)
あの質問じゃ俺らは大して役に立つ答えは返せそうにない。
掲示板で聞くにはそれなりの聞き方を身につけてからでないと望んだ答えは得られないよ。

258 :javaの問題です。:02/06/26 08:21
数nを入力して、幅nで高さnの以下のような直角三角形を2つ並べて画面に
表示するプログラムを書け。
これはnが5の場合。
____s
___ss
__sss
_ssss
sssss
____s
___ss
__sss
_ssss
sssss

「_」はスペースの意味です。
誰か教えて下さい。




259 :デフォルトの名無しさん:02/06/26 08:24
>>258
どこが直角なんですか?

260 :258:02/06/26 08:29
すみません。うまくいきませんでした。「凵vの形に直角になるはずなんです。
スペースとsの合計数は行ごとにn個になっています。
(例では5つ)

261 :デフォルトの名無しさん:02/06/26 08:35
Javaで文字や文字列の連結のやり方は知ってますか? >>258

262 :258:02/06/26 08:37
すみません…よくわかりません…

263 :デフォルトの名無しさん:02/06/26 08:39
Javaでループの書き方(forとか)は知ってますか? >> 258

264 :258:02/06/26 08:40
それはわかります。ループをつなげればよい、
というのはわかるのですが…

265 :258:02/06/26 08:44
すみません、途中で申し訳ないのですが、今から高校に行ってきます。
許してください。(遅刻するわけにはいかないので)

266 :デフォルトの名無しさん:02/06/26 08:47
最後の質問です。
画面に文字を出力するやりかたは知ってますか? >> 258
これがyesなら、文字の扱い方を勉強すれば必要な
知識はそろいますよ。言語がなにかわからないので
これでおしまい。
(今回は試しに一問一答形式で進行してみました。)


267 :266:02/06/26 08:48
しまった、逃げられた。にしても20分ちょっとで
宿題の答えが欲しかったのか。すげー。

268 :デフォルトの名無しさん:02/06/26 08:50
>>266
おい、言語Javaってはじめに書いてないか?

269 :デフォルトの名無しさん:02/06/26 08:50
Javaは和下欄
class S
{
public static void main(String[] args)
{
int num = 2;
char[] data = {' ', ' ', ' ', ' ', ' ', 's', 's', 's', 's', 's'};
for (int i = 0; i < 5; i++) {
for (int j = 0; j < num; j++) {
System.out.print( new String(data, i + 1, 5) );
}
System.out.println();
}
}
}


270 :デフォルトの名無しさん:02/06/26 08:58
>>269
[]の位置はそこでいいの?

271 :デフォルトの名無しさん:02/06/26 09:06
ダメなの?

272 :デフォルトの名無しさん:02/06/26 09:16
>>269
数を入力してって書いてあるぞ。

273 :デフォルトの名無しさん:02/06/26 09:21
>>272
だから和下欄と書いたじゃないか。
apiドキュメントを見ただけでJDKも入れてないので動くかどうかは和下欄し、
Java自体いじるの始めてでどうしたらいいか和下欄

274 :デフォルトの名無しさん:02/06/26 09:24
Javaがわかんないんだろ。要件を満たしてないこととかんけーねーじゃん。

275 :デフォルトの名無しさん:02/06/26 09:29
>>274
一文字ずつprintしていくなら作れるけど、ダサ過ぎる。
誰かがJavaで文字列の構築方法を教えてくれたら書き直すよ。
sprintfとかstringstreamみたいな奴が欲しい。

276 :すいません、おしえていただけないでしょうか....:02/06/26 09:38
「ある特定の文字列を含んだ行を異なるファイルとして抽出するプログラム。
まず、抽出する文字列と検索対象ファイル名を入力する。
また、結果出力用のファイル名を入力する。
そして、検索対象ファイルを読み込んで文字列が含まれるか否かのチェックを行い、
当該文字列が含まれていればそのデータを結果として出力する。」
というプログラムをつくりたいのですが、うまく動いてくれません。
どなたか間違いをご指摘してくだされば幸いです。
どうかよろしくおねがいします。


#include <stdio.h>

main()
{
FILE *fpp1, *fpp2;
char line1[10], line2[10], line3[20], line4[10000];
int num1, i, j;

printf("imput file name >");
fgets(line1, sizeof(line1), stdin);
printf("output file name >");
fgets(line2, sizeof(line2), stdin);
printf("keyword >");
fgets(line3, sizeof(line3), stdin);


fpp1 = fopen(line1, "r");
fpp2 = fopen(line2, "w");
num1 = strlen(line3);
num1 = num1 - 1;

while(fgets(line4, 10000, fpp1) != NULL){
for(i = 0; i < 10000; i++){
if(line3[0] == line4[i]){
for (j = 1; j < num1; j++){
if(line3[j] != line4[i+j])
break;
}
if(j == num1){
fputs(line4, fpp2);
}
}
}
}
fclose(fpp1);
fclose(fpp2);
}


277 :デフォルトの名無しさん:02/06/26 09:54
>>276
だから「うまく動かない」だけじゃなくてどう動かないか書けって
なんども言われてるだろう。
コンパイルできないのか、実行時エラーなのか、うまく抽出されないのか?

今回の場合、一度にやろうとせず
1.入力ファイルを読み込み画面に出力(TYPE/cat相当)
2.入力ファイルを読み、出力ファイルにそのまま出力(COPY/cp相当)
3.文字列の中にキーワードが含まれるか判定する関数を作る
4.2と3を組み合わせる(grep相当)
とステップアップしていくといいんではないかな?
(関数の作り方習ってないか?)

278 :デフォルトの名無しさん:02/06/26 09:56
とりあえずな、ファイルがきちんと開けているか
くらいは最低限チェックしろよ。

それとな、strstr使わないのもまあいいけれど、
文字列の終端子\0をキチンと考慮しろよな。

279 :すいません、276です:02/06/26 09:57
<output file>と< keyword>の入力が同時に求められてしまうのです。
コンパイラはgccです。
よろしくおねがいします。


280 :デフォルトの名無しさん:02/06/26 09:59
すくなくとも10000文字以上の行があって、lins3[0]と同じものが
はじめて10000-num1文字目で現れたときに確保した領域の外を読んじゃうね。


281 :デフォルトの名無しさん:02/06/26 10:04
「なんども言われてるだろう。」みたいな内容は恭祐さんが
1に書いておくべきだったなぁ。今度からテンプレ作る必要が
あるかもね。

282 :280:02/06/26 10:18
しまった、境界条件より先にfor(i = 0; i < 10000; i++){
に気づかない俺って... 駄目駄目だ。



283 :デフォルトの名無しさん:02/06/26 10:33
cat inputfile | grep mojiretu > outputfile

じゃ無理かな。よくわからん。

284 :デフォルトの名無しさん:02/06/26 10:33
>>258
Javaに移植すれ

int i, n, j;
cin>>n;
for (i = 1; i <= n ;i++) {
for (j = n-i; j > 0 ;j--) cout.put(' ');
for (j = i; j > 0 ;j--) cout.put('*');
cout<<endl;
}

285 :デフォルトの名無しさん:02/06/26 10:35
>>276
line1とline2が10Byteって少なすぎないか?
最低でも8+3(拡張子)+2('.'と'\0')で13は必要。
ネスケのブックマークから抽出しようとフルパスと書くと
C:\Program Files\Netscape\Users\hogehoge\bookmark.htm
55byteは必要になる。80Byte程度はほしい。


286 :デフォルトの名無しさん:02/06/26 10:40
>>283
grep相当の物を自分で書くというのが宿題(を出した人)の意図じゃないの?

287 :デフォルトの名無しさん:02/06/26 10:44
>>279
gccはいってないから確認できないけど、入力でこけてるなら
fgets(line3, sizeof(line3), stdin);
の行よりあとを消して、確認してみれば?
それぞれの変数に何が入ってるか表示させてみたり、fgets以外の入力を使ってみるとか。

288 :デフォルトの名無しさん:02/06/26 10:49
>>286
Group Regular Expression Print

REの部分は宿題としてどうかとw

289 :284:02/06/26 10:55
何、2つ並べてかΣ(´□`||)

290 :286:02/06/26 11:38
>>288
確かに宿題としては正規表現はヘビーすぎるな。すまん。
宿題スレでは既存コマンドと同等(の下位バージョン)を作る宿題が
たまにでるということを言いたかったんだ。
そういう質問に「○○を使えばできる」というのはネタとしてはともかく
回答としてはいかがなものかと。
(初心者スレかくだらない質問スレならそれで正解と思うけどね)

291 :デフォルトの名無しさん:02/06/26 12:16
この場合は fgrep inputfile > outputfileだろう。


292 :名無しさん@カラアゲうまうま:02/06/26 12:19
>>289
>>258では縦に並んでるような気が汁。とりあえず横に並べるバージョン。
縦にすんのはテメエでやれ。>>258

class triangle
{
  int size;
  char ch;

  triangle(int size, char ch)
  {
    this.size = size;
    this.ch = ch;
  }

  void line(int n)
  {
    for (int i = n; i < size; ++i) {
      System.out.print(" ");
    }
    for (int i = 0; i < n; ++i) {
      System.out.print(ch);
    }
  }

  void show(int n)
  {
    for (int i = 1; i <= size; ++i) {
      line(i);
      for (int j = 1; j < n; ++j) {
        System.out.print(" ");
        line(i);
      }
      System.out.println();
    }
  }

  public static void main(String[] args)
  {
    char c = 's';
    int num = 2, size = 5;
    if (args.length > 0)
      size = Integer.parseInt(args[0]);
    if (args.length > 1)
      c = args[1].charAt(0);
    if (args.length > 2)
      num = Integer.parseInt(args[2]);
    new triangle(size, c).show(num);
  }
}


293 :デフォルトの名無しさん:02/06/27 02:15
C++でlong型のポインタをint型のポインタに変更するには
(int*)(value)
reinterpret_cast<int*>(value)
これらのどちらを使うべきなのでしょうか?
reinterpret_castの誤用は危険だと習ったのですが、
上の場合とはどのように違うのでしょうか?

294 :デフォルトの名無しさん:02/06/27 02:27
Cのキャストはソース上で見づらい
しかもどんな型変換もOKだった気がする
ので私はC++のキャストを選ぶ

295 :デフォルトの名無しさん:02/06/27 02:32
>>294
ありがとうございます。
ということはCスタイルのキャストはreinterpret_castと同じか
それ以上に危険ということでしょうか?

296 :デフォルトの名無しさん:02/06/27 02:36
ものわかりが早いコって好きよ♥

297 :くいずたいむしょっく:02/06/27 02:51
至急お願いします!!

N88BASICなんですけどできますか?

テーマ IF・・・THEN・・・ELSEを使う

1 X,Aを入力して、XがAの倍数か否かを表示するプログラムを作れ。

2 Nを入力し、2からNまでの素数を表示するプログラムを作れ。Nも表示し改行せよ。
  素数はPRINT USING"#####"を用いて5桁で表示せよ




298 :デフォルトの名無しさん:02/06/27 03:06
10 INPUT "X:",X:INPUT "A:",A
20 IF INT(X/A)*A = X THEN PRINT "#t" ELSE PRINT "#f"


299 :くいずたいむしょっく:02/06/27 03:22
298さんありがとうございます!
2番わかりますか?
FOR・・・NEXTとかIF・・・THENとかINT使うと思うんですけど

300 :デフォルトの名無しさん:02/06/27 03:27
BASICインタープリタ・・・Excel VBAか十進BASICしかねえよ・・・・

301 :デフォルトの名無しさん:02/06/27 03:28
keyword:エラストテネスの篩

ついでに300ズダー

302 :デフォルトの名無しさん:02/06/27 03:29
ヽ(`Д´)ノウワァァァン

303 :デフォルトの名無しさん:02/06/27 03:31
>>299 十進BASICで作ったから、適当にコンバートしてくれ。

100 REM 2以上の自然数を入力すると,素数か否かを判定する
105 INPUT n
110 FOR j = 2 to n
120 IF MOD(j,2)=0 THEN
130 IF j=2 THEN PRINT using "#####":j
140 ELSE
150 FOR i=3 TO SQR(j) STEP 2
160 IF MOD(j,i)=0 THEN EXIT FOR
170 NEXT i
180 IF i>SQR(j) THEN PRINT using "#####":j
190 END IF
195 next J
200 END

304 :デフォルトの名無しさん:02/06/27 03:33
http://www.geocities.com/Tokyo/Flats/9390/basic_3.html
ここにあった

305 :デフォルトの名無しさん:02/06/27 03:34
つーか、BASICで配列を使う方法しりましぇん。
なもんで振るいアルゴリズムは実装できない。

306 :名無しさん@カラアゲうまうま:02/06/27 03:43
dimとかじゃなかったっけ。

307 :デフォルトの名無しさん:02/06/27 04:12
Cについて教えてください。
ある数群から条件に合う物だけ抜き出して配列に入れたいのですがその数群というのが数千個あり、その条件に合う物は高々数個から十数個で実行するごとに違います。
数千個の配列を用意してもいいのですが、もっとメモリ効率のいい方法を探しています。

条件に合う物を探す前にメモリ領域を確保しなければならないのでmallocも使えなくて困っています。
方法が有れば教えてください。

308 :デフォルトの名無しさん:02/06/27 04:33
>>307
その数群ってどっから持ってくるの?



309 :デフォルトの名無しさん:02/06/27 04:50
>>307
・2パスにする(先に条件に合うものの数を数え,メモリ確保後に以下略)
・malloc,memcpyを繰り返す
・reallocを使う
・高々10数個なら配列サイズを20にすれば?
・線形リストを使い,あとで配列に変換


310 :デフォルトの名無しさん:02/06/27 05:36
整列済みの整数データの重複を取り除くにはどうすればいいっすかね

311 :デフォルトの名無しさん:02/06/27 05:42
>>310
>>253-257を読んで出直して来い


312 :デフォルトの名無しさん:02/06/27 08:14
>>308
バイナリー画像データから配列に入れるんです。
>>309
・2GHzのマシンに計算させても2分ほどかかる計算なので2パスにすると計算量が。。。
・mallocを繰り返して使うやりかたがいまいちよく分からない。。。・この方法採用させていただきます。
・数百分の一の確率で数十個出たりするので固定はできないんです。。。
・リスト、スタックは考えたのですが、自分の脳味噌足りませんでした。。

ありがとうございました

313 :デフォルトの名無しさん:02/06/27 08:32
>>312
ちなみに「数千個の配列」とやらは、何バイトぐらいになるの?

314 :デフォルトの名無しさん:02/06/27 09:08
>>312
元の画像は破壊しちゃだめなの?画像配列内部で条件を満たすものだけ
前に持ってくるとか?

315 :名無しさん@カラアゲうまうま:02/06/27 09:27
ひょっとして画像データの数千個の配列か?

316 :デフォルトの名無しさん:02/06/27 09:35
>・mallocを繰り返して使うやりかたがいまいちよく分からない。。。・この方法採用させていただきます。

マズ最初にサイズ10の配列用意して、それが一杯になったらもうちょっと大きい配列
ようして、そちらに全部コピーする。

317 :名無しさん@カラアゲうまうま:02/06/27 10:28
realloc()ならコピーまでしてくれる。


318 :デフォルトの名無しさん:02/06/27 11:01
>>312
配列の要素がめちゃくちゃ大きいようだったら、
malloc,memcpyの繰り返し(もしくはrealloc)は時間がかかるぞ。
リストの配列化をオススメしる
・リストの数を数えて
・「要素へのポインタ」の配列を確保して
・順番に入れていく
qsortとか使う時によくやる
リストが分からないなら...この先苦労しそうだが...

319 :デフォルトの名無しさん:02/06/27 11:01
>>312
2GHzで2時間って・・・さては宿題じゃなくて研究だな

320 :デフォルトの名無しさん:02/06/27 11:29
ひょっとしてT研か?

321 :デフォルトの名無しさん:02/06/27 12:19
|
|ρ・)<2GHzのマシンで"2分"
|

322 :デフォルトの名無しさん:02/06/27 12:24
vectorに突っ込みまくれば?(w

323 :お願いします:02/06/27 12:41
問題
 始めに配列に文字列を入力します。
次に1文字入力をし、入力した配列の何番目にその文字があるのか出力せよ。
文字がない場合は”ありません”と表示する。
なお、配列中には同じ文字が何個入ってもかまいません。
文字列のサイズは100位ないとする。

勉強を始めてから2ヶ月経つのですがわからないです。
お願いします。

324 :予想:02/06/27 12:48
↓に、”質問の仕方から勉強しろ”とレスがつく予感

325 :デフォルトの名無しさん:02/06/27 12:50
>>323
1.入力した(検索される)文字列を配列に格納する
2.入力した(検索する)文字を変数に格納する
3.配列の中身を1つずつチェックし2の変数の中身と同じかどうか調べる

どこまでできる?

326 :デフォルトの名無しさん:02/06/27 12:51
>>324
予想を裏切ってスマソ

327 :デフォルトの名無しさん:02/06/27 12:58
(´・∀・`)

328 :デフォルトの名無しさん:02/06/27 12:59
>>323
質問の仕方から勉強しろ

329 :デフォルトの名無しさん:02/06/27 13:00
char line[101], *pbuf;
int c;

cout<<"100文字以内よ: ";
cin.getline(line, sizeof line, '\n');
cout<<"1文字だけよウフ: ";
if ((c = cin.get()) == EOF || (pbuf = strchr(line, c)) == NULL)
cout<<"ありませーん(´д`)"<<endl;
else
cout<<"\nline["<<pbuf-line<<"] の位置にハケーン"<<endl;

330 :お願いします:02/06/27 13:07
すいません。
質問の仕方もお願いします。
>329さん、私には高度すぎて・・・

今知っているのは分岐型(if)繰り返し(for)くらいです。


331 :デフォルトの名無しさん:02/06/27 13:12
ネタはもう少し人が寄って来る話題を振ってください。
おながいします。

332 :デフォルトの名無しさん:02/06/27 13:22
>>330
質問の仕方はここで聞かれても困ります。
小学校あたりからやり直してみてはいかがでしょうか?

333 :デフォルトの名無しさん:02/06/27 13:23
>>330
>>325は無視?どこまでできるか聞いてるんだけど。

334 :お願いします:02/06/27 14:00
>325さん すいません。
3番目がどうしたら良いのかわかりません。
1番目はscan("%s",配列)でよろしいでしょうか?


335 :デフォルトの名無しさん:02/06/27 14:23
p:\DQN.c(5) warning C4013:関数'scan'は定義されていません int型の値を返す外部関数と見なします。

336 :デフォルトの名無しさん:02/06/27 14:34
DQN.cs(7,4): error CS0103: 名前 'scan' は クラスまたは名前空間 'DQN.DQN'
に存在しません。

337 :お願いします:02/06/27 14:48
あああああああああああああああああああああ
scanfでした

338 :デフォルトの名無しさん:02/06/27 15:31
>>330
言語の指定がないのだからC++だろうとperlだろうとBasicだろうと
どの言語で回答されても文句はいえないはずだが。
つまりは言語/環境を明記しろってこと。<質問の仕方

339 :お願いします:02/06/27 15:45
>338さん、有難うございます。かなり恥ずかしいです。
言語はC言語です。
>329さん、すいませんでした。

340 :デフォルトの名無しさん:02/06/27 16:27
C言語です。1:ある文字列をキーボード入力 例:abcdbc
      2:比較対照の文字列を同様に入力 例:#bc
3:比較対照が1の文字列に何回出現するか数える
というプログラムなんですが(この場合2回)、
比較対照にワイルドカード文字#を入れなくてはならないんです。
私の貧弱な頭ではさっぱりでして…もしよろしければ回答お願いします。

341 :デフォルトの名無しさん:02/06/27 16:41
あう…対象でした

342 :デフォルトの名無しさん:02/06/27 17:03
とりあえず、"abc"と"#bc"がマッチするか調べる
関数は作れるのかえ?

343 :デフォルトの名無しさん:02/06/27 17:09
ここは宿題を教えるスレですか?手伝うスレですか?

344 :デフォルトの名無しさん:02/06/27 17:10
そのワイルドカードが今ひとつでして…
一文字づつ比較して#部はその工程を飛ばすような形で考えているんですが…

345 :デフォルトの名無しさん:02/06/27 17:10
>>343
質問者の態度によって変わる。

346 :デフォルトの名無しさん:02/06/27 17:12
>>344
#がワイルドカードってことは
最初の文字列がbcdbcなら1回?

347 :デフォルトの名無しさん:02/06/27 17:16
はい。「dbc」の部分が一致するので一回です。

348 :デフォルトの名無しさん:02/06/27 17:19
>>347
#は一文字としかヒットしないわけだね?
abbba

a#a
は一致しないってことでよろしいか?

349 :デフォルトの名無しさん:02/06/27 17:20
ワイルドカードだとしたらマッチは1回だろ
#=abcdにマッチするんだから

350 :デフォルトの名無しさん:02/06/27 17:20
>>348
はい。そういうことです。その場合だとa###aで一致になるわけです。

351 :デフォルトの名無しさん:02/06/27 17:24
すいません。ワイルドカードの意味も分かってなかったみたいです。
#はひとつ一文字に対応です。

352 :デフォルトの名無しさん:02/06/27 17:25
>>350
検索の方法はどうするんでしょう?
abacadaeと入力して
a#a#
と比較した場合、
1.abac adae の2回
2.abac acad adae の3回

353 :デフォルトの名無しさん:02/06/27 17:26
>>352
2.abac acad adae の3回です。説明不足で申し訳ありません。

354 :デフォルトの名無しさん:02/06/27 17:35
こんな感じでせうか

for( i = 0; i<=文1の長さ-文2の長さ; ++i )
{
 for( j = 0; j<文2の長さ; ++j )
 {
  if ( 文2[j]!='#' && 文2[j]!=文1[i+j] ) break;
 }
 if ( j==文2の長さ ) ++ヒット数
}

355 :デフォルトの名無しさん:02/06/27 17:51
コンパイルしてみましたがこんな感じです。
ただ、scanfが必要なんです。問題はこいつなんですよね。
scanfでとりこんでアドレスをずらしながら比較…とか考えてたんですけど
難しいです…

356 :デフォルトの名無しさん:02/06/27 18:10
ま た s c a n f か

357 :デフォルトの名無しさん:02/06/27 18:47
どうやらscanfを使うのはよくないみたいですね。
fgets()とsscanf()の使い方を調べてやってみます。

358 :デフォルトの名無しさん:02/06/27 19:57
今 度 は s s c a n f か

359 :デフォルトの名無しさん:02/06/27 19:59
>>357
sscanfは必要ないのでは・・・?

360 :デフォルトの名無しさん:02/06/27 20:06
>>358 >>359
過去ログ漁って>46を見て意味も分からず書いてしまったので…すいません。

361 :312:02/06/27 22:56
reallocで無事解決しました。
とある画像から条件の合う物だけコピーしてイロイロ操作するプログラムを組んでます。
画像配列のメモリ容量は多いと言っても50kBぐらいなので
全部確保できないことはないのですが、自分的にイヤなもので。。
リストはこれからミチーリ勉強します。

362 :デフォルトの名無しさん:02/06/28 01:24
鬼初心者なんですけど・・・
質問させてください。

実行ファイル名をtstとします。
書き込み対象のファイル名をsmp.txtとします。

それでですね、
tst smp.txt abcde
と、引数を渡したときに
文字列abcdeがsmp.txtに書き込まれる
プログラムをCで書きたいのですが、まったくわかりません。

どなたかご教授ください。
おながいします!!

363 :予想屋:02/06/28 01:25
↓に"マルチは氏ね"とレスが付く予感

364 :デフォルトの名無しさん:02/06/28 01:26
>>362
なにがわからないのかまったくわかりません。

365 :デフォルトの名無しさん:02/06/28 01:29
>>362
Cの入門書やWebサイトにいくらでも同じプログラムが転がってると思うが・・・

366 :名無しさん@カラアゲうまうま:02/06/28 01:31
1 引数の扱い
2 ファイル操作(オープン/クローズ)
3 入出力

どれが分からん。

367 :デフォルトの名無しさん:02/06/28 01:33
>>362

main(int argc, char** argv)
{
 fprintf(fopen(argv[1], "w"),"%s",argv[2]);
}

エラーチェックとかは自分で汁

368 :デフォルトの名無しさん:02/06/28 01:36
int main(int ac, char **av)
{
FILE *fp;
int i;
if (ac < 3) {
fputs("引数が少ないよ\n", stderr);
return 1;
}
if((fp = fopen(av[1], "w")) == NULL) {
fputs("書き込みファイルを開けないよ\n", stderr);
return 1;
}
for (i = 2; i < ac ;i++) fprintf(fp, "%s\n", av[i]);
fclose(fp);
return 0;
}

369 :デフォルトの名無しさん:02/06/28 01:47
標準入力と標準出力ってなんですか?
それを利用したプログラムを書かないといけないのですが。

370 :362:02/06/28 01:47
みなさんどうもありがとうございました。
解決いたしました。

ほんとお恥ずかしい質問でしたが、これから
精進したいと思います。
(・∀・)人(・∀・)ババーナ!

371 :デフォルトの名無しさん:02/06/28 01:47
>>369
>いや、5時間くらい悩んでるんですよ

知るか。本読め。検索しろ。適正無い。学校やめて違う道を探せ。

372 :デフォルトの名無しさん:02/06/28 01:49
#include <stdio.h>

int main(){
printf("hello,Word\n");
}
標準出力を利用したプログラム(ぷ

373 :名無しさん@カラアゲうまうま:02/06/28 01:51
>>369はフィルタが書きたいのかと小一時間。


374 :デフォルトの名無しさん:02/06/28 01:55
>>372
すいません、それは一番最初にやりました。
たぶんそれじゃダメだと思います。
とりあえず今googleで検索してるので、また後で聞きに来ます。

375 :デフォルトの名無しさん:02/06/28 01:57
>>374
これも標準出力を利用したプログラムといえるので先生に提出してください

376 :デフォルトの名無しさん:02/06/28 02:01
>>374
ダメかどうか判定するのはお前じゃないだろ。
まあ仕方ない、標準入力も利用してやるよ。

int main() {
printf("hello,Excel\n");
getchar();
}


377 :デフォルトの名無しさん:02/06/28 02:04
>>374
ダメと思う理由を簡潔に述べよ

>>376
せめてgetcharの戻り値を使ってやってくれよ

378 :デフォルトの名無しさん:02/06/28 02:06
>>369
標準入出力を使ったファイル(テキストファイル)のコピー
使い方は、自分で考えると良さげ

#include <stdio.h>
main () {
 int buf ;
 while ( ( buf = fgetc ( stdin ) ) != EOF ) fputc ( buf, stdout ) ;
}

379 :改良:02/06/28 02:07
int main() {
printf("おはようエクセルくん\n");
return getchar();
}


380 :デフォルトの名無しさん:02/06/28 02:20
>>378
ありがとうございます。
標準入力って面白いですねこんなの作ってみました。
でもごみが表示されるんだけど、なんでですか?

#include <stdio.h>

void main()
{
int i;
char buffer[9999],c;
for(i=0;i<=9999;i=i+1)
{
c=getchar();
buffer[i]=c;
if (c==EOF)
break;
}
for(;i>=0;i=i-1)
{
putchar(buffer[i]);
}
}


381 :デフォルトの名無しさん:02/06/28 02:24
>>370
(・∀・∀・)ヌッヘッホー

382 :デフォルトの名無しさん:02/06/28 02:28
>char buffer[9999],c;
>for(i=0;i<=9999;i=i+1)

とりあえずこれはまずいだろ。

383 :デフォルトの名無しさん:02/06/28 02:29
>>380
コンピュータは正直です。
ゴミが出るのは、ゴミを入れてるからです。

ゴミの正体については次週の解決篇で。

384 :デフォルトの名無しさん:02/06/28 02:31
char buf[9999] は 0...9998・・・・・・

385 :デフォルトの名無しさん:02/06/28 02:31
>>383
来週かよ!

386 :デフォルトの名無しさん:02/06/28 02:34
誰かネタバレしる!

387 :デフォルトの名無しさん:02/06/28 02:36
じゃあ一つだけ・・・・・
cはcharなので、絶対にEOFにならない。

388 :デフォルトの名無しさん:02/06/28 02:36
>>386
自分がバラしとるやん

389 :デフォルトの名無しさん:02/06/28 02:38
>>387
処理系によってはEOFになるよ。EOFが-1の場合、
(char)-1 == (int)-1

390 :デフォルトの名無しさん:02/06/28 02:39
>>389
Σ( ̄□ ̄ || 〒 ||そうだった!char == signed charだとintにする時符号拡張
されるのか。どちらにしろcはintにせにゃならんけどね。

391 :デフォルトの名無しさん:02/06/28 02:40
>>380
cをint型にして、bufferへの代入を EOF の判定後にすれば良さげ

392 :デフォルトの名無しさん:02/06/28 02:41
ゴミは多分EOFマーカーをputcharしているせいです。EOFはbufferに
代入しないように。

393 :デフォルトの名無しさん:02/06/28 02:44
腹痛え。トウガラシ麺を2個も食ったせいだ。トイレ逝ってくる。

394 :デフォルトの名無しさん:02/06/28 02:49
出来ました!
ありがとうございました。
ところで、マイクロソフトのコンパイラだと
abc^Zと入力しても入力が続くんですが、なんででしょう?

#include <stdio.h>

void main()
{
int i,c;
char buffer[1000];
for(i=0;i<=9999;i=i+1)
{
c=getchar();
if (c==EOF)
break;
buffer[i]=c;
}
for(i=i-1;i>=0;i=i-1)
{
putchar(buffer[i]);
}
}



395 :デフォルトの名無しさん:02/06/28 02:50
>>394
まだだめだ。char buffer[10000]にしないと。
それから、ctrl+z押してからenter押さないと、バッファを読みとってくれない。

396 :デフォルトの名無しさん:02/06/28 02:51
>>395
あ、ポカミスです。
それから、enterは押してます
ボーランドのだとうまくいくのですが。

397 :名無しさん@カラアゲうまうま:02/06/28 02:52
それはコンパイラではなくDOS窓のことか?
行の途中でも効いたっけ?

398 :デフォルトの名無しさん:02/06/28 02:53
>>396
MSVCRTはctrl+dじゃなかったっけ?

399 :デフォルトの名無しさん:02/06/28 02:54
2回目のループは
while ( i>0 ) {
 putchar ( buffer[--i] ) ;
}
に汁

400 :デフォルトの名無しさん:02/06/28 02:56
>>397
そうだわ。行の途中のctrl+zはEOFと見なしてくれない。
行頭じゃないと。

401 :デフォルトの名無しさん:02/06/28 02:58
VC6.0だと行頭でC-z[enter]じゃないとダメ
gcc(cygwin)は行頭でC-d
bccはどこでもC-z[enter]でOK

402 :デフォルトの名無しさん:02/06/28 03:00
>>399
ありがとうございます。
394のはバグありますか?
ちょっとよく分からないのですが。

403 :デフォルトの名無しさん:02/06/28 03:06
>>402
別に、そこの部分はバグじゃない
ただ、for で同じ式を繰り返し使ってるのが美しくないだけ
あとは、使い方をリダイレクト限定にすれば期待どうりに動くはず

404 :デフォルトの名無しさん:02/06/28 03:41
>>276 2日前のにレス

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

#define MAXLINE 1024

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

    char *prog = NULL;

    char *pattern = NULL;

    FILE *fpin = NULL;
    FILE *fpout = NULL;

    char line[MAXLINE];


    if(argc != 4){
        fprintf(stderr, "Error: wrong number of argument\n");
        fprintf(stdout, "Usage: ./prog <pattern> <input-file> <output-file>\n");
        exit(1);
    }

    prog = argv[0];
    pattern = argv[1];
    fpin = fopen(argv[2], "r");
    if(fpin == NULL){
        fprintf(stderr, "Error: cannot open %s\n", argv[2]);
        exit(1);
    }
    fpout = fopen(argv[3], "w");
    if(fpout == NULL){
        fprintf(stderr, "Error: cannot open %s\n", argv[3]);
        exit(1);
    }

    while(fgets(line, sizeof(line), fpin) != NULL){
        if(strstr(line, pattern) != NULL)
            fputs(line, fpout);
    }


    fclose(fpin);
    fclose(fpout);

    return 0;
}

405 :デフォルトの名無しさん:02/06/28 04:34
>>404
おまえ、不吉

406 :デフォルトの名無しさん:02/06/28 04:49
>>404のソースみたいに、
複数桁のスペースを入れるにはどうすればいいの?

407 :デフォルトの名無しさん:02/06/28 05:09
>>406
全角スペースを入力しる。

408 :デフォルトの名無しさん:02/06/28 05:20
 を好みの数だけ

409 :デフォルトの名無しさん:02/06/28 05:31
&nbsp;

410 :デフォルトの名無しさん:02/06/28 05:46
void main(int argc, char *argv[])
{
    printf("(・д・)");
}

411 :デフォルトの名無しさん:02/06/28 05:50
>>409
ありがとー

412 :test:02/06/28 06:22
  cout<<"Fuck men!\n";
  cin>>str;   //紛らわしい、何れオーバフローする

413 :遭難中:02/06/28 08:18
二分木探索法をポインタではなく、配列でやるにはどうしたらいいんでしょう?
友人に聞いたら、配列の添え字を返すようにすればいいんじゃん?といわれましたが・・・

414 :デフォルトの名無しさん:02/06/28 08:27
まず、ポインタでどうやっているか書いてみろ

415 :デフォルトの名無しさん:02/06/28 09:11
>>413
配列の添字を相対的なメモリアドレスと考えれば通常の変数がポインタの役割を担えることに気付くだろう。
その代わり配列管理が面倒だと思われ。

俺、この方法でスタック書いたけど。

416 :デフォルトの名無しさん:02/06/28 12:15
二分木の探索を配列の添え字を使ってする場合、
二分木を配列上に構築しなければならないんだけど、
それ自体できてる?
それとも二分探索の書き間違い?

417 :ほんまわからん:02/06/28 12:58
文字列strをメモリに格納するための関数char*SaveStr(char*)を作成しなさい。

C言語でおながいします。

方針としては、文字列の長さを求めて、メモリの確保をおこなって、文字列をコピーする。

418 :デフォルトの名無しさん:02/06/28 13:02
>>417
文字列の長さの求め方はわかるか?
メモリの確保の仕方はわかるか?
文字列のコピーの仕方はわかるか?

419 :デフォルトの名無しさん:02/06/28 13:07
strlen, malloc, strcpyが怪しいぞ(w

420 :ほんまわからん:02/06/28 13:17
わかりますよ。一応模範解答がほしいのです・・・
無駄なプログラム書きそうなので(^^


421 :デフォルトの名無しさん:02/06/28 13:18
>>420
じゃあ、その無駄なソースをアップしてくれ。
こっちで添削する。

宿題を見るって本来こういう事だし。


422 :sager:02/06/28 13:20
↓に”>>420 氏ね” とレスがつく予感

423 :ほんまわからん:02/06/28 13:21
ちょっとまってください。がんばってつくりまふ。

整数んとmをコマンド行から入力し、nからmまでの和をディスプレイに表示するプログラムをつくりなさい。

これはわからないっす・・・・(T_T)


424 :デフォルトの名無しさん:02/06/28 13:22
>>423
大丈夫、日本語じゃないから。

425 :ほんまわからん:02/06/28 13:27
整数nとmをコマンド行から入力し、nからmまでの和をディスプレイに表示するプログラムをつくりなさい。

だったw

426 :デフォルトの名無しさん:02/06/28 13:27
>>424
氏ね

427 :デフォルトの名無しさん:02/06/28 13:30
ミス
>>425 失せて。

428 :デフォルトの名無しさん:02/06/28 13:46
>>417
strdup を検索してみると吉。

>>425
とりあえず普通に数列の問題として解くことはできるのか?

>>426
ストレス発散ならお前の家から一番近い繁華街まで行って、
そこら辺でたむろしてるチンピラにでも喧嘩売ってろ。

徒に死ねとか言うな。

429 :ほんまわからん:02/06/28 13:55
数列の問題としてなら

#include<stdio.h>
main()
{
int m,n,t;

printf("m=?");
scanf("%d",&m);
printf("n=?");
scanf("%d",&n);

t= (n+m)*(m-n+1)/2 ;

printf("mからnまでの和=%d\n",t);
}

でいいとおもうのですが・・・

430 :デフォルトの名無しさん:02/06/28 14:00
>>429
forループ回すより明らかに効率が良いのよね。
数学はやっておくもんだ。

431 :デフォルトの名無しさん:02/06/28 14:02
>>429
ほほう

432 :ほんまわからん:02/06/28 14:35
で、コマンド行からの入力はどうしたらいいのですか?

433 :ほんまわからん:02/06/28 14:40
文字列strをメモリに格納するための関数char*SaveStr(char*)を作成しなさい。
格納したアドレスを関数の戻り値とすること。

わかんないっす。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main(void)
{
char str[99];
int i=0,t,l;

printf("文字列を入力して下さい");
scanf("%s",&str);

l = strlen(str);
malloc(l);
strcpy(str);

printf(


}

ここらへんまではやったのですが・・・

434 :riarutyuubou:02/06/28 14:43
>>432
mからnまでの和の意味が全然分からないので、それを教えてくれたら、教えます

435 :デフォルトの名無しさん:02/06/28 14:51
>>433
Σ(゚д゚lll)ガーン
char*SaveStr(char*)っていう関数ないじゃん

436 :デフォルトの名無しさん:02/06/28 14:54
あの式を見るたび小学生のときに読んだガウスの話を思い出す。

437 :riarutyuubou:02/06/28 15:03
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* SaveStr(char *str){
char *c;
c=(char *)malloc(strlen(str)+1);
strcpy(c,str);
return c;
}

int main(){
char *str="omankobanzai";
char *c;
c=SaveStr(str);
printf("%s\n",c);
return 0;
}

mからnまでの和の意味を教えてください

438 :riarutyuubou:02/06/28 15:11
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
int m,n,t;

m=atoi(argv[1]);
n=atoi(argv[2]);

t=(n+m)*(m-n+1)/2;

printf("mからnまでの和=%d\n",t);

return 0;
}

mからnまでの和の意味を教えてください


439 :デフォルトの名無しさん:02/06/28 15:13
>>433
メモリ確保、コピーはchar*SaveStr(char*)の中でやらんと意味ないぞ。
あとmallocは確保したメモリのアドレス返すから受け取ってやらんと。
というか433はポインタ理解してるか?

440 :riarutyuubou:02/06/28 15:14
ほんとうにmからnまでの和の意味がわからないんです。
数学さっぱりなんで。

441 :デフォルトの名無しさん:02/06/28 15:17
>>437
借りたものは返してください。

442 :riarutyuubou:02/06/28 15:19
>>441
期末テストが終わってfreeな気分だったので、、すみません

443 :デフォルトの名無しさん:02/06/28 15:28
>>440
m=1,n=3の時のmからnの和は6
(1+3)*(3-1+1)/2

あ、プログラムはこれを最後に辞めたほうが良いよ。

444 :デフォルトの名無しさん:02/06/28 15:32
>>440
ちなみに 1 から n までの和が n * (n + 1) / 2
ということは知っているのか?

445 :riarutyuubou:02/06/28 15:34
>>444
しりません。
というかmからnの概念がまだ理解できません
もうプログラミングやめます

446 :riarutyuubou:02/06/28 15:45
>>444
n=3だとすると
13ですかね?


447 :riarutyuubou:02/06/28 15:46
いや6.5ですか。

448 :デフォルトの名無しさん:02/06/28 15:47
ひょっとして和=合計の意ということが分からないのか?
和差商積=+−÷×


449 :riarutyuubou:02/06/28 15:50
>>448
和==+ということはわかるんですが
m=8
n=5
で、なぜ26なのかがわかりません。


450 :444:02/06/28 15:58
1以上n以下の自然数の総和が n * (n + 1) / 2
ということは知っているのか?

451 :riarutyuubou:02/06/28 15:58
>>444勘違いしてました6ですね。

452 :riarutyuubou:02/06/28 16:02
>>450
つまりn=3だとすると
1+2+3ってことですよね?
んでm=8,n=5だと
5+6+7+8ってことですか!
やっとわかりました!!本当にありがとうございました。

453 :444:02/06/28 16:15
なんだ遠回しに間違いを指摘しているのではなかったのか。

454 :デフォルトの名無しさん:02/06/28 17:02
int a[] = {0,1,2,3,4};
int *p[] = {a,a+1,a+2,a+3,a+4};
int **pp = p;

このように定義したとき、a,+a,p,*p,**p,pp,*pp,**ppは何をさすか

455 :デフォルトの名無しさん:02/06/28 17:05
>>454
+aってなんすか?

456 :デフォルトの名無しさん:02/06/28 17:08
*a
でしたw

ぐはーw

457 :デフォルトの名無しさん:02/06/28 17:10
aは変数
*aはそのアドレス


458 :デフォルトの名無しさん:02/06/28 17:19
どういう値になるかを答えるのか?

459 :デフォルトの名無しさん:02/06/28 17:21
おれもよくわからんです。
さしてるものを答えるのか、値なのか・・・
多分値だとおもいます。。。

460 :デフォルトの名無しさん:02/06/28 17:32
なんていうか・・・。答えられない問題だなぁ。

461 :デフォルトの名無しさん:02/06/28 17:32
ん?なんで?


462 :デフォルトの名無しさん:02/06/28 17:36
なにが?

463 :デフォルトの名無しさん:02/06/28 17:48
>>454
a 配列aの先頭アドレス
*a 0
p 配列pの先頭アドレス
*p 配列aの先頭アドレス
**p 0
pp 配列pの先頭アドレス
*pp 配列aの先頭アドレス
**pp 0

じゃ、駄目か?

464 :デフォルトの名無しさん:02/06/28 17:51
だめです。

465 :!463:02/06/28 17:52
>>464
じゃあ、正しい答えよろしく。

466 :じゃんけん:02/06/28 18:01
ポソ

467 :デフォルトの名無しさん:02/06/28 18:09
>>463
*a とかは代入可能なんだから、
配列 a の先頭の要素って感じで書かないといけなくない?

468 :463:02/06/28 18:14
>>467
たしかに

469 :デフォルトの名無しさん:02/06/29 01:07
char *i;
((i)) = "(・∀・)マンコー";

//(;´Д`)ハァハァ

470 :デフォルトの名無しさん:02/06/29 18:29
  *
 ***
*****


471 :デフォルトの名無しさん:02/06/29 18:32
ピラミッドを作りましょう。
何段ですか:3
  *
 ***
*****


472 :デフォルトの名無しさん:02/06/29 18:35
勉強しててつまづいたので教えてください。
471に示すように、読み込んだ整数の段数をもつピラミッドを表示するプログラムを作成せよ。
ってな感じの問題があるんですがわかりません。教えてください。

473 :デフォルトの名無しさん:02/06/29 18:37
471に近いやつは
#include <stdio.h>
main()
{
int i,j,in;
printf("ピラミッドを作りましょう。\n");
printf("何段ですか:");
scanf("%d",&in);
for(i=1;i<=in;i++){
for(j=1;j<=in-i;j++){
printf(" ");
}
for(j=1;j<=i;j++){
printf("**");
}
printf("*");
printf("\n");
}
return(0);
}
のプログラムでできたのですが、なんか違います

474 :デフォルトの名無しさん:02/06/29 18:38
完全数を求めるプログラムを高速化したいんだけど
そのためには、普通のアルゴリズムじゃ、
その演算に多大な無駄が。。。

そこで!!10000までの完全数を求めるために必要な時間が、
数秒程度になるようにこのアルゴリズムを改良したいんです。

演算部分のアルゴリズムをどのように変更すればいいのか教えて!
その数学的理由とともに。。


475 :デフォルトの名無しさん:02/06/29 18:44
>>474
こっちでレスしてやったじゃん。
紹介したサイトは証明も載ってるから翼嫁。

***すれ立てるまでもない質問はここで 第16刷***
http://pc.2ch.net/test/read.cgi/tech/1024791990/257


476 :デフォルトの名無しさん:02/06/29 19:32
>>474
6
28
496
8128
1740msec

適当に作ってみたけど、PentiumV500MHzでこんなもんだったよ。
普通のアルゴリズムとやらを示してみな。
改良点を教えてやるから。

本当に適当に書いたんだけど、数秒におさまってしまった…

477 :476:02/06/29 19:37
> 普通のアルゴリズムとやらを示してみな。
> 改良点を教えてやるから。

って書いたけど、普通のアルリズムってのと全く同じだったらどうしよう。
しかもsage損ねたし…

478 :デフォルトの名無しさん:02/06/29 20:32
>>472
#include <stdio.h>
int main()
{
int i,j,in;
printf("ピラミッドを作りましょう。\n");
printf("何段ですか:");
scanf("%d",&in);
printf("\n");
for(i = 1;i <= in;i++)
{
for(j = i;j < in;j++)
{
printf(" ");
}
for(j=0;j<i*2-1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}

479 :472:02/06/29 20:53
違うスレで質問してみます

480 :デフォルトの名無しさん:02/06/29 20:57
>>472
はぁ?
>>478で問題ないジャン
それとも、BASICで答えろって?
そもそも言語くらい書いとけ

481 :472:02/06/29 21:38
>>478
gomennasai!!
>>479nohatugen,tasikani,bokudesu.
matigaeta,hatugendesu.
honto,mousiwakennai,desu.
suimasen,suimasen
ima,mnihongo,dasenaidesu.hontodesu.gomennasai!!
kotae,arigatougozaimasu!!
tottemotasukarimasita!!arigatou,gozaimasu!!

482 :デフォルトの名無しさん:02/06/29 21:39
教 え て 君 の 鏡 だ な

483 :デフォルトの名無しさん:02/06/29 21:58
>>482
な に が 映 っ て る の で す か ?

484 :デフォルトの名無しさん:02/06/29 22:03
教 え て 君 必 死 だ な

485 :デフォルトの名無しさん:02/06/29 22:05
>>483
お前の間抜け面。

486 :デフォルトの名無しさん:02/06/29 22:14
単に鑑だろとつっこみを入れたかっただけなのだが。
教えて君といっしょにされたか。

487 :デフォルトの名無しさん:02/06/29 22:18
>>477
INPUT m
FOR n=2 TO m
sum=0
FOR k=1 TO (n-1)
a=n MOD k
IF a=0 THEN
sum=sum+k
END IF
NEXT k
IF n=sum THEN
PRINT n;
END IF
NEXT n
END


488 :487:02/06/29 22:19
どこかえればいいの?

489 :デフォルトの名無しさん:02/06/29 22:20
単に >>472 っていうリンクを見逃したってことでは?

最近答える方も叩く準備しているような気がする。
この板も WebProg 板のようになってしまうのか。。。ガクガク、ブルブル

490 :!476:02/06/29 22:35
>>487
kのループをn-1までやらなくてもいいだろ
n/2までで済むハズ

もっとやるなら、ループをnの平方根までにして
剰余が0のとき
sum=sum+k
sum=sum+(n/k)
とすると、良いかな?
試してないので、やってミソ


491 :デフォルトの名無しさん:02/06/29 22:39
>>489
らら枯れておかしくない質問が増えたのも・・・

492 :デフォルトの名無しさん:02/06/29 22:44
>>489
Ruby、HSP、VB、Delphi といったスケープゴートが機能しなくなって
一般のスレが荒れだしている。

493 :デフォルトの名無しさん:02/06/29 22:50
>>476
6
28
496
8128
50ms(Celeron650)
どうやったらそんなに遅くなるのかと…

494 :デフォルトの名無しさん:02/06/29 22:57
6
28
496
8128
33550336
8589869056
137438691328
1ms(ポケコン)

495 :476:02/06/29 23:34
もう言われてしまいました。
というかBASICだったのね。
実は、Cなら普通に組んでも数秒でおさまるだろうと首をかしげてた。

>>493
n / 2 でやっていたから、それで目標値は出たのでよしとしてた。
平方根版だと、50msなったよ。

496 :490:02/06/29 23:46
>>493
>>495
もっと、早くする方法ないかな?
この方法だと5つ目以降が遅すぎ。



497 :デフォルトの名無しさん:02/06/30 00:02
>>496
アルゴリズムスレでやったほうが良いのでは……

498 :デフォルトの名無しさん:02/06/30 00:25
JAVAにて、「元金を入れてください」と
「金利を%で入れてください」の質問に答えたら、
1〜3年後の金額が出てくる元利計算のプログラムを
書けと言われたのですが、全く分かりません。
まわりにJAVAを知っている人がおらず、困っております。
書いていただけないでしょうか。

499 :デフォルトの名無しさん:02/06/30 00:27
>>498
超基礎的なところを触れば出来るだろ。
ネットで解説ページ探せ

500 :デフォルトの名無しさん:02/06/30 00:27
>>498
Excelでいいんじゃないの?

501 :500:02/06/30 00:28
ごめん、ここ宿題スレだった。

502 :デフォルトの名無しさん:02/06/30 00:30
>>501
作れない方がおかしいんだから気にしない。

503 :490:02/06/30 00:32
>>497
ごもっとも、逝ってきます

504 :デフォルトの名無しさん:02/06/30 00:46
ここは宿題スレだし。煽るだけなら(・∀・)カエレ!

505 :デフォルトの名無しさん:02/06/30 01:06
>>504
おお、だから何だ?
明らかに宿題直前の授業も理解できてないようなDQNだぞ?
こんな奴ら今の内に単位落とさせて退学にし、プログラマ人生を
断ってやった方がこいつらのためだ。


506 :デフォルトの名無しさん:02/06/30 01:23
いるね。こういう余計なお世話な人。

507 :デフォルトの名無しさん:02/06/30 01:31
>>504 (=498=504)
まぁまぁ落ち着けよ。お前も煽ってるだけだぞ。

確かに此処は宿題スレだ。しかしな、やる気の無いやつの
宿題を肩代わりしてやるスレではないんだよ。

508 :498:02/06/30 01:33
ただの文系大学生。パソコンがちょっと使える程度なのに、
調子に乗って共通教育の情報科学S(JAVA入門)を取り、
講義を受けてみれば、先生が工学部の情報工学なら、
生徒もほとんど工学部の情報工学の学生ばかり、
講義もいい加減で、身内が理解出来てるだけ。
で、結局全学部の学生対象とかいいながら、
僕を含め、情報工学の学生以外は落ちこぼれ〜

509 :476:02/06/30 01:38
>>496
1 : 1
2 : 6
3 : 28
5 : 496
7 : 8128
13 : 33550336
17 : 8589869056
19 : 137438691328
31 : 2305843008139952128
0msec
メルセンヌ素数を使うと素数判定をいい加減に作っても一瞬で終わる。
ポケコンで1msというのはそういう訳のよう。

自分で数学的理由が説明できないので悲しいものがあるが…

510 :デフォルトの名無しさん:02/06/30 01:38
>>507
> 確かに此処は宿題スレだ。しかしな、やる気の無いやつの
> 宿題を肩代わりしてやるスレではないんだよ。

答えるかどうかは回答者次第なんだから勝手に決めるなよ。

511 :デフォルトの名無しさん:02/06/30 01:39
教授って研究する人であって物を教える人じゃないからね。
総合大学っておもしろそうだね。

512 :デフォルトの名無しさん:02/06/30 01:41
>>509
?それは偶数の話だろう?

513 :デフォルトの名無しさん:02/06/30 01:42
俺は暇で何か問題解きたい時や自己満足に浸りたい時に答えるよん。
相手のレベルなんてこのスレで問いたりしまへん。
でもJava知らないので>>498はパスっ

514 :デフォルトの名無しさん:02/06/30 01:44
>>510
お前の偽善が一人の人間の人生を潰してるんだよ。

515 :498:02/06/30 01:44
>>507
504は僕じゃない。
そんなこと書くほど身勝手じゃないですよ。

516 :デフォルトの名無しさん:02/06/30 01:45
>>515
504 名前:デフォルトの名無しさん 投稿日:2002/06/30(日) 00:46
ここは宿題スレだし。煽るだけなら(・∀・)カエレ!

身勝手?

517 :デフォルトの名無しさん:02/06/30 01:47
いつもこのスレ見てて思うんだけど、金払ってんだから
教官に聞けばいいのに。

518 :デフォルトの名無しさん:02/06/30 01:48
なんで510が偽善なんだ?




519 :デフォルトの名無しさん:02/06/30 01:49
>>516
ちょっと言葉が足りなかったのですが、
ちょっと自分の質問に答えてもらえないからって、
カエレ!って書くとか・・・

520 :デフォルトの名無しさん:02/06/30 01:51
>>507
504だけど、498ではないよ。
勝手にイコールで結ばないように。

こんなところに宿題を丸投げするようなやつに説教しても無駄。
調べろって言っても調べるわけないじゃん。ほっとけ。

521 :デフォルトの名無しさん:02/06/30 01:51
>>514
おやさしいことで・・・

522 : :02/06/30 01:54
ここは宿題の答えを教えるスレじゃなくて宿題を手伝うスレだよね?
ならば、問題だけ書いて答えてくれっていうんじゃ話にならないでしょ。
どこまでやったかを書かない時点で質問者として駄目でしょ。

>>498はどこまで出来た?出来たところまででも書いてみ。
誰かヒントくれるから。俺は答えられないけど。JAVAしらないし。

523 :デフォルトの名無しさん:02/06/30 01:55
>ここは宿題の答えを教えるスレじゃなくて宿題を手伝うスレだよね?
ば〜か。そんなのどっちでもいいんだよ
勝手に決めるな傲慢野郎

524 :デフォルトの名無しさん:02/06/30 01:57
>宿題、判らないところがあったら、遠慮しないで聞いてくださいね。
           〜〜〜

全部はところじゃないな。お馬鹿さん。

525 :デフォルトの名無しさん:02/06/30 01:57
> やる気の無いやつの宿題を肩代わりしてやるスレではないんだよ。
とか、
> ここは宿題の答えを教えるスレじゃなくて宿題を手伝うスレだよね?
とかってルールあるの?
俺はその時の気分で答えてるけど。

526 :デフォルトの名無しさん:02/06/30 01:57
ここは、宿題を聞くやつをひとつのスレに封じ込めるためにあるんじゃないの?

527 :デフォルトの名無しさん:02/06/30 01:58
☆ chin        hungry~
      hungry~
☆ chin  〃 Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ヽ ___\(\・∀・)< download 92 % complete.
    \_/⊂ ⊂_)_ \____________
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
  |  ̄  ̄ ̄ ̄  ̄ ̄:| :|
  |            |

528 :498:02/06/30 01:59
import java.io.*;

public class Ganrikeisan {
public static void main(String[] args) {
System.out.println("元金を入れてください。");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in), 1);
try{
String line = reader.readLine();
System.out.println("金利を入れてください。(%で)");
line = reader.readLine();
int per = Integer.parseInt(line);
System.out.println("1年後は" + ( x * (1 + (per / 100)) ) + "円です。");
System.out.println("2年後は" + ( (x * (1 + (per / 100))) * (1 + (per / 100) ) + "円です。");
System.out.println("3年後は" + (((x * (1 + (per / 100))) * (1 + (per / 100))) * (1 + (per / 100))) + "円です。");
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("数値が正しくありません。");
}
}
}

あるプログラムに当てはめてみたのですが、
全然成立していません。コンパイルも出来ません。
こんな情けないものをお見せするのが恥ずかしいです。

529 :デフォルトの名無しさん:02/06/30 02:00
>全部はところじゃないな。お馬鹿さん。

幼稚園児がいるようで

530 :デフォルトの名無しさん:02/06/30 02:01
>>526
正解。
答える・答えない・ヒントだけ出すっていうのはレス付ける人の自由かと思いますが。
個人的には、ここで答えないとマルチを始めるお馬鹿さんもいるので
下手に煽るより答えた方がいいと思っております。

531 :デフォルトの名無しさん:02/06/30 02:01
>>529
>幼稚園児がいるようで
反論できないと。

532 :デフォルトの名無しさん:02/06/30 02:03
>>524はどっからの引用で誰へのレス?

533 :デフォルトの名無しさん:02/06/30 02:20
>>528
おまえなぁ…

まぁいい、ヒント。
計算する前に、入力した値をそのまま表示するようにしろ。

534 :498:02/06/30 02:28
String line = reader.readLine();
System.out.println(line + "円ですね");
System.out.println("金利を入れてください。(%で)");

こういうことですか?

535 :デフォルトの名無しさん:02/06/30 02:37
>java Ganrikeisan
元金を入れてください。
3万[enter]
3万円ですね
金利を入れてください。(%で)
2


536 :デフォルトの名無しさん:02/06/30 02:39
元金をいれてください。
3万[enter]
3万元ですね


537 :デフォルトの名無しさん:02/06/30 02:39
>>498 いやたぶん533は x にはちゃんと数値が入ると思うの?
ってことを確認させたいんだと思うよ。
でも、それ以前に(と)の対応がとれてないから確認できない
かもしれないけど。コンパイラのメッセージも確認してごらん。

538 :528:02/06/30 02:47
import java.io.*;

public class Ganrikeisan {
public static void main(String[] args) {
System.out.println("元金を入れてください。");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in), 1);
try{
String line = reader.readLine();
System.out.println(line + "円ですね");
int x = Integer.parseInt(line);
System.out.println("金利を入れてください。(%で)");
line = reader.readLine();
int per = Integer.parseInt(line);
System.out.println("1年後は" + ( x * (1 + (per / 100)) ) + "円です。");
System.out.println("2年後は" + ( (x * (1 + (per / 100))) * (1 + (per / 100)) ) + "円です。");
System.out.println("3年後は" + (((x * (1 + (per / 100))) * (1 + (per / 100))) * (1 + (per / 100))) + "円です。");
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("数値が正しくありません。");
}
}
}

上記のプログラムで、535のようになりました。
あとはうまく計算させるだけのようなんですが、
そこが一番の難問です。

539 :デフォルトの名無しさん:02/06/30 02:50
すまん、535ってネタだと思ってた。
「30000」じゃなくて「3万」って入力する必要あるの?

540 :528:02/06/30 02:53
>>539
そんな高度なことしません(出来ません)。
3万円の時は「30000」正解です。

541 :540:02/06/30 02:54
× 「30000」正解です。
○ 「30000」で正解です。

542 :デフォルトの名無しさん:02/06/30 02:54
回答側の推奨事項:
・自分がどうするかは自分が決める。
・他人の意見を勝手に代弁しない。(このスレは〜するところです、とか)
・質問者の将来について心配しない。(ここでの質問事項にのみ関わる)
・DQNな質問者は放置。

他なんか推奨意見ある?

質問者側の推奨事項とかも挙げて、次スレ辺りから >>1 に書くことを希望。


543 :デフォルトの名無しさん:02/06/30 02:56
>>538
単に計算式がおかしいだけじゃないの?

544 :デフォルトの名無しさん:02/06/30 02:58
・ダメな質問者の家族や家臣やパイロットを呼ばない

545 :デフォルトの名無しさん:02/06/30 03:00
>>512
更に勉強してみた。
えーと、偶数の完全数とメルセンヌ素数との関係は
オイラーが証明済み。
奇数の完全数があるかどうかはわかっていない。

ってことは、後は奇数の完全数がある範囲内にはないってことを
プログラムで確かめてみればいいってことでいいのかな?
奇数は偶数の約数を持たないってことを考慮すると
処理は平方根板の4分の1程度になるということでいい?

それでも10000000の範囲を調べるには数時間かかりそうだけど。

546 :デフォルトの名無しさん:02/06/30 03:01
>>538
Javaやっとことないから理由はわからないけど、
int a;
a = x * (1 + (per / 100));
System.out.println("1年後は" + a + "円です。");
こんな感じにすると計算できてるような。


547 :デフォルトの名無しさん:02/06/30 03:02
>>546
スマソ。取り消してくれ

548 :デフォルトの名無しさん:02/06/30 03:02
式は合ってると思うが、変数の型がおかしい。

>538
System.out.println( 50/100 );
って、どういう結果になると思う?
この実行結果が予想と違った場合、その原因は?


549 :デフォルトの名無しさん:02/06/30 03:03
>>538
int型だから端数が切られてるに一票

550 :デフォルトの名無しさん:02/06/30 03:03
>>542
理想的には
http://www.hyuki.com/writing/techask.html#template
を熟読して欲しい。けど質問者にはなにも望まない、期待しない。


551 :540:02/06/30 03:11
>>549
型というのは、絶対値の大きな方だけではなく、
小さな方も考慮しなければならないのですか?

552 :デフォルトの名無しさん:02/06/30 03:15
>>551
絶対値の大きい・小さいじゃないけど、
int x=0.5;
ってやるとどうなる?

553 :538:02/06/30 03:16
>>548
50/100は0になるんでしたよね?
0.5<1なので。

554 :デフォルトの名無しさん:02/06/30 03:19
ここってただの隔離スレだろ?
あんまり細かいこと言い出すと宿題丸投げ君が他で迷惑かけそうなんだけど。

555 :538:02/06/30 03:24
分かりました。
int perをdouble perに治したら、うまくいきました。
が、答えの1〜3年後は○○○円の所に、小数点以下が出てしまいます。
これを何とか出来ないでしょうか?

556 :デフォルトの名無しさん:02/06/30 03:26
>553
おめでとう。

で、宿題は出来たか?


557 :デフォルトの名無しさん:02/06/30 03:30
>555
100.6 円だったら、101 にする?
それとも、単に切り捨てる?

まぁ、いずれにせよ、キャストぐらい覚えとけ。


558 :538:02/06/30 03:38
完成しました。本当にありがとうございました。
1〜3年後の数値の前に、それぞれ(int)を入れてやったら、
ちゃんと切り捨ててくれました。
この際なので、もう一つ勉強させてください。
切り上げるにはどうすればよいのでしょうか?

559 :デフォルトの名無しさん:02/06/30 03:44
切り上げ:+1.0して端数切り捨て
四捨五入:+0.5して端数切り捨て

560 :538:02/06/30 03:50
分かりました。最後までお世話になりました。
初歩的な問題(僕には高度でしたが)の質問攻めに
答えてもらい、大変感謝しております。
ありがとうございました。m( _ )m

561 :デフォルトの名無しさん:02/06/30 03:52
-1 かけて、切り捨てて、もっかい -1 かけるのが手っ取り早いかな…?


562 :デフォルトの名無しさん:02/06/30 03:56
>559
それで2.0を切り上げると3になるよ。
Javaはよく知らんけど、Mathにceilとかないの?

563 :538:02/06/30 03:57
先生が切り捨てでいいよって言った理由が
よ〜く分かりました・・・

564 :デフォルトの名無しさん:02/06/30 04:06
四捨五入は Math.round でいいんじゃないの?


565 :デフォルトの名無しさん:02/06/30 04:13
Math.ceil あるなー。
nativeメソッドだからちょっと速いかも。


566 :490:02/06/30 04:31
>>545
何か、調べてくれてThx!
メルセンヌ素数 (2^p)-1
完全数 (2^(p-1))*((2^p)-1 )
だから、メルセンヌ素数を知ってれば、
完全数(偶数)は求められる。
あるかどうか分からない奇数は、
奇数の約数でがんがれば、
コストは1/4だと言うことで納得。


567 :デフォルトの名無しさん:02/06/30 04:39
メルセンヌ素数から完全数を求めるのはインチキだろ。
メルセンヌ素数もプログラムで求めるならいいけど。

568 :デフォルトの名無しさん:02/06/30 04:42
☆ chin        hungry~
      hungry~
☆ chin  〃 Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ヽ ___\(\゚∀゚)< download 100%, completed!
    \_/⊂ ⊂_)_ \____________
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
  |  ̄  ̄ ̄ ̄  ̄ ̄:| :|
  |            |

569 :476=545:02/06/30 11:08
>>567
>>545 は実際にメルセンヌ素数をプログラムから求めてる。
1 <= p < 32 の31個の数が素数かどうか調べているだけなので、
処理量は少ない。

奇数の処理は入ってない。

570 :デフォルトの名無しさん:02/06/30 13:16
数秒で10000までの完全数出すBASIC 2進のプログラム教えて!
あとどうして半分まで調べれば分かるのかが分からない。

571 :デフォルトの名無しさん:02/06/30 13:19
完全数だらけ

572 :476:02/06/30 13:57
>>570
>>487 に書かれてあったプログラムで今何秒ぐらいかかっているんだ?
BASIC環境がないんで、どのくらい短縮すればいいのかわからん。

32 の約数 1,2,4,8,16,32
33 の約数 1,3,11,33

という具合に、自分自身を除けば、約数は1 / 2以下しかないから。
逆に言うと1より大きい約数は2以上になるから。

573 :デフォルトの名無しさん:02/06/30 17:18
あれでやると4桁の完全数出るのに数分かかるの。。。
もっと短縮するのにはどう変えたらいい??
ってかどうしたら早くなるのか理由を教えて〜。

574 :476:02/06/30 18:37
>>573
もっと正確に時間が測れないのか?
>>487 のプログラムを変更して10秒内にしたいとしたら、
半分にするやり方の場合、現時点で20秒以内じゃないとまずい。
平方根+奇数の約数の場合でも、133秒以内じゃないとまずい。
つまり数分というのが2分を超えるかどうかによって、
メルセンヌ素数を使ったプログラムにするかが決まってくる。
残念ながら、メルセンヌ素数に関しては、私自身数学的理由を
説明できる自信がない。

平方根に関して説明すると、
36の約数 1,2,3,4,6,9,12,18,36
1 × 36 = 36
2 × 18 = 36

6 × 6 = 36

18 × 2 = 36
36 × 1 = 36
という関係を使う。
1〜6 までの約数を求めれば、自然と9〜36の約数も求まる。
で、その境目が36の平方根となる。

奇数が偶数の約数を持たない理由は、
奇数が素因数2を持たないから。

ちなみにメルセンヌ素数+平方根+奇数の約数の場合でも、
400秒以内じゃないとまずいと思われるんで、6分40秒以上
かかっているなら、今までの考えじゃ無理。

575 :476:02/06/30 18:39
× 測る
○ 計る

576 :デフォルトの名無しさん:02/06/30 19:45
学校でC言語やってるんですが、(Visual C++)
貰ったプリントにあった問題が分かりません。(問題の意味さえ)
今、ポインタに入ったばっかりです。

問題

変数の宣言(例えば int a,b;)で、変数のアドレスが決まることを確かめる。

次に、scanf(" ",&a);の代わりに&aの値(&aの値をcに代入)を用いて、
scanf(" ",c);としても同じことであることを確かめる。

また、*(&b)は、bに等しい子を、g=&e;,c=&a;の場合に*g=*cはe=aと同じことを確認する。

ようなプログラムを作成する。


577 :576:02/06/30 19:46
分かるとこまで書いたプログラム。

#include <stdio.h>

void main (void)
{
int a,b,*c,*d;
c=&a;
d=&b;
printf("adress a=%d, adress b=%d \n",c,d);

printf("a= ");
scanf("%d",&a);
printf("b= ");
scanf("%d",d);
printf("a=%d, b=%d \n",a,b);
}



578 :デフォルトの名無しさん:02/06/30 19:55
>>577
×printf("adress a=%d, adress b=%d \n",c,d);
○printf("adress a=%p, adress b=%p \n",c,d);

579 :デフォルトの名無しさん:02/06/30 20:04
> 変数の宣言(例えば int a,b;)で、変数のアドレスが決まることを確かめる。

これってポインタの中身を表示しなくても、int *c,*d; c=&a,d=&b;でコンパイル時に警告がでなければ確かめられたことになるんじゃない?

580 :デフォルトの名無しさん:02/06/30 20:06
>>577
printf("*c=");
scanf("%d",c);
printf("a=%d\n",a);


581 :576:02/06/30 20:08
>>578
×の方ではadress a=1245052ってなり、pにすると、0012FF7Cってなります。
整数型ではだめなんですか?

>>579
確かめるというのは、結果表示で可能とヒントに書いてありました。

582 :580:02/06/30 20:08
>>577
printf("b= ");
scanf("%d",d);
printf("b=%d,*(&b)=%d\n",b,*(&b));


583 :デフォルトの名無しさん:02/06/30 20:09
>>581
ポインタを文字列で表現するときは%pを使う。

584 :576:02/06/30 20:10
>>576
前半はなんとなく、>>577でやりましたが、後半の
>また、*(&b)は、bに等しい子を、g=&e;,c=&a;の場合に*g=*cはe=aと同じことを確認する。
ってのが全く分かりません…



585 :デフォルトの名無しさん:02/06/30 20:11
>>584
× bに等しい子を、
○ bに等しいことを、

だろ

586 :576:02/06/30 20:12
>>585
あ、訂正ありがとうございました。すみません。

587 :デフォルトの名無しさん:02/06/30 20:12
>>584
int b;に何かをいれて、printf("%d\n",*(&b));ってやってみな。

588 :576:02/06/30 20:16
>>587
なるほど。これは分かりました。やった後で気づきましたが、
>>582にあった…>>580さん、>>587さんありがとう。

589 :576:02/06/30 20:21
>>583
送れてスミマセン。ありがとうございました。

590 :576:02/06/30 20:41
最後までやってみたんですが、最後の方が全く
自信ないです…

#include <stdio.h>

void main (void)
{
int a,b,e,*c,*d,*g;
c=&a;
d=&b;
printf("adress a=%p, adress b=%p \n",c,d);

printf("a= ");
scanf("%d",&a);
printf("b= ");
scanf("%d",d);
printf("a= %d, b= %d \n",a,b);

printf("b= ");
scanf("%d",d);
printf("b= %d,*(&b)= %d \n",b,*(&b));

g=&e;
c=&a;
printf("e= ");scanf("%d",&e);
printf("a= ");scanf("%d",&a);
printf("*g= %d,*c= %d \n",*g,*c);
}

591 :デフォルトの名無しさん:02/06/30 21:16
>>573
十進BASIC
100 INPUT m
LET t = TIME
DIM primenum(SQR(m)/2)
LET pnmax = 1
LET primenum(1)=2

LET n=2
DO WHILE primenum(pnmax)<=SQR(m)
LET n = n + 1
FOR i=1 TO pnmax
IF mod(n,primenum(i))=0 THEN GOTO 200
NEXT I
LET pnmax = pnmax+1
LET primenum(pnmax)=n
200 LOOP
300 FOR n=2 TO m
LET nn = n
LET i = 1
LET sum=1
LET partsum=1
LET prevnum = 2

DO WHILE (primenum(i)*primenum(i)) <= nn
400 IF mod(nn,primenum(i))=0 THEN
LET nn = nn/primenum(i)
IF prevnum <> primenum(i) THEN
LET sum=sum*(partsum*prevnum-1)/(prevnum-1)
LET partsum=1
LET prevnum = primenum(i)
END IF
LET partsum = partsum * primenum(i)
GOTO 400
END IF
LET i=i+1
LOOP
IF prevnum <> nn THEN
LET sum=sum*(partsum*prevnum-1)/(prevnum-1)
LET sum = sum*(nn+1)
ELSE
LET sum=sum*(partsum*prevnum*prevnum-1)/(prevnum-1)
END IF

IF n=(sum-n) THEN
PRINT n;
END IF
NEXT n
LET t = TIME -t
PRINT t
END

592 :591:02/06/30 21:18
私のパソコンで
>>487だと203.58秒
>>591だと1.03秒

593 :デフォルトの名無しさん:02/06/30 22:03
487を591にするのってどう考えを変えたんですか?
数学的理由ってよく分からなくて487を591にする過程を説明してください。

594 :デフォルトの名無しさん:02/06/30 22:13
>>578
些細なことだが...
×printf("adress a=%d, adress b=%d \n",c,d);
△printf("adress a=%p, adress b=%p \n",c,d);
○printf("address a=%p, address b=%p \n",c,d);

595 :デフォルトの名無しさん:02/06/30 22:19
>>593
まず約数の和は
http://naomi.is.s.u-tokyo.ac.jp/~yato/puzzle/note.html
のホームページのような形にかけるから、(確か中学で習ったと思う)
これに等比級数の和の公式を適用すればいい。(これは高校で習ったと思う)
これは完全数に関するオイラーの定理の証明の過程でもでてくるね。

そうすれば残った問題はいかにはやく素因数分解するかということになる。
このプログラムでは簡単に先に必要な素数テーブルを作っておき
素因数分解を行ってみた

596 :476:02/06/30 22:43
>>595
うへ〜。全然記憶に残っていない。
実際に展開して確かめてみましたけど、約数の総和は確かにそうなりますね。

597 :490:02/06/30 22:50
>>595
Cに直して実行したら、
10000まで計算するのに、0mS

早い・・・

598 :デフォルトの名無しさん:02/07/01 01:46
>>593
うーん。。説明しろと言われると難しい。
誰か説明できる人いたら俺もしりたい。

599 :591:02/07/01 04:28
>>593,>>596-598
こんな時間にごめん。結構バグっていた。BASICなど数年ぶりなものだから
C++(Windows)で同等の表現に書き直したからこちらをよろしく
#include<iostream>
#include<windows>
#include<cmath>

intmain() {
intmax ; // 最大値読み込み
std::cout << "Max>" ; std::cin >> max ;

DWORD dwTime = timeGetTime() ; // 開始時間

// 最小限の素数テーブル作成
int*pr_num = new int[std::sqrt((double)max)/2+1] ;
pr_num[0]=2 ;
for(int i=0,n=pr_num[0]+1;pr_num[i]*pr_num[i]<=max;n++) {
int flag=1 ;
for(int j=0;j<=i&&pr_num[j]*pr_num[j]<=n;j++)
if(!(n%pr_num[j])) { flag=0 ; break ;} // 割り切れてしまったら終了
if(flag) pr_num[++i]=n ; // 今までの素数で割り切れなかったらテーブルに追加
}

for(int n=2;n<=max;n++) {
int m=n,sum=1 ; // 素因数分解と同時に約数の和を計算
for(int i=0;pr_num[i]*pr_num[i]<=m;i++) { // 全ての素数について調べる
int part_mul=1 ;
while(!(m%pr_num[i])) // 素因数の場合は重複分のべき乗を得る
m/=pr_num[i],part_mul*=pr_num[i] ;
sum*=(part_mul*pr_num[i]-1)/(pr_num[i]-1) ; // 約数の和を更新
}
if(m!=1) sum*=m+1 ; // 最後に残ったmは√m以内に約数がないので素数である
if(sum==n+n) std::cout << n << "\n" ; // 約数の和は自身を含む。完全数なら表示
}

dwTime = timeGetTime() - dwTime ; // 終了時間との差を表示
std::cout << dwTime << "[msec]" << std::endl ;
}


600 :名無しさん@カラアゲうまうま:02/07/01 08:42
timeGetTime()なんてシステム固有のじゃなくてclock()使えよ。

601 :デフォルトの名無しさん:02/07/01 10:42
氏ね

602 :デフォルトの名無しさん:02/07/01 10:53
>>601
手本見せてくれ。

603 :上げちゃえ♪:02/07/01 11:15


604 :経営情報学科1年:02/07/01 15:46
すみません急ぎでおながいします。
2014を浮動小数点数として表現し
32ビットで表せと言う問題と
2014を2バイトの符号付整数(補数表現)
として表せ。と言う問題です。
お願いします。

605 :デフォルトの名無しさん:02/07/01 16:03
IEEE754単精度
01000100111110111100000000000000
short int
0000011111011110


606 :経営情報学科1年:02/07/01 16:11
問題間違えますた。
整数2014を2バイトの符号付整数(補数表現)
として表せ。と
整数2014をIBM方式により浮動小数点数として
表現し32ビットで表せ。です。
おながいします。

607 :デフォルトの名無しさん:02/07/01 16:22
マジで?あれは16進だっけ。ちょっと分からん

608 :デフォルトの名無しさん:02/07/01 16:22
むかし見たことのあるような宿題。

609 :経営情報学科1年:02/07/01 16:24
最速でおながいします。

610 :デフォルトの名無しさん:02/07/01 16:25
>>609
>>605に対するコメントは無いのか?

611 :デフォルトの名無しさん:02/07/01 16:33
01000010011111011110000000000000
かな?

612 :経営情報学科1年:02/07/01 16:36
すみせん、>605の方
ありがとうございます。
ANDみなさま。


613 :経営情報学科1年:02/07/01 16:51
>611
の方の01000010011111011110000000000000
が正解ということで良かったのでしょうか?



614 :デフォルトの名無しさん:02/07/01 17:41
では、まとめてみます

>>375-380
>>382-383
>>385
>>387
>>391
>>393
>>398
>>401
>>404
>>409
>>412
>>414
>>418
>>421
>>425
>>428
>>430
>>433



615 :名無しさん@カラアゲうまうま:02/07/01 19:12
何をどうまとめたんだ。

616 :デフォルトの名無しさん:02/07/01 23:44
>>615
激しく的を射た突っ込みに思わずワラタよ

617 :デフォルトの名無しさん:02/07/02 04:38
>>615
HSPスレからのコピペだよ

618 :構造体テンプレート:02/07/02 15:31
構造体テンプレートをstruct complex{ float real; float imag; };
と宣言して、その条件で変数をstruct complex z1, *p1;と
宣言したとき、z1の要素realを p1の要素に代入する式をおしえてください。


619 :デフォルトの名無しさん:02/07/02 15:35
>>618
p1------------------>real = z1.....................real;

620 :デフォルトの名無しさん:02/07/02 15:38
p1 = (struct complex*)malloc(sizeof(struct complex)) ;
p1->real = z1.real ;
それとも
p1=&z1 ;

621 :デフォルトの名無しさん:02/07/02 15:51
int *p a[5]={3,4,5,6,7};の記述において、pの中の
3番目の値5のアドレスと、3番目の値5のアドレスを
ポインタを用いて取り出し、表示するプログラムを
おしえてください。




622 :デフォルトの名無しさん:02/07/02 15:55
(´-`).。oO(まさか電波で俺より上のヤシがいるとはな)

623 :デフォルトの名無しさん:02/07/02 16:01
>>621
自分で文章を考えずに出された問題をそのまま書くことを勧めておく。

624 :デフォルトの名無しさん:02/07/02 16:08
>>621
#include<stdio.h>
void main(void){
int *p,a[5]={3,4,5,6,7};
p=&a[2] ;
printf("%p:%d\n",p,*p);
}


625 :デフォルトの名無しさん:02/07/03 02:34
fopenの返すファイルポインタからファイル名の逆引き
ということは可能なのでしょうか?

626 :デフォルトの名無しさん:02/07/03 02:45
>>625
無理。

627 :デフォルトの名無しさん:02/07/03 10:58
>>625
つぅか責任持てるっしょ。自分の開いたファイルなんだから。

628 : :02/07/03 20:21
シェルを作る課題がでました。
サンプルを改造するようになってるのですが、とりあえず実行方法から全くわかりません。

#include <stdio.h>

int main(void){
printf("Hello world!\n");
return(0);
}

これを実行して、Hello world! と出力されるようにするには、どうすればいいんでしょうか?
ファイルにプログラムを書き込んでもできません。



629 :情報2年生:02/07/03 20:37
int array[] = {5, 7, 6, 1, 4} ;
このような配列があったとして
↓みたいに棒グラフ風に表示との宿題が出たのですがさっぱりわかりません

5 7 6 1 4
  ●      
  ● ●    
● ● ●    
● ● ●   ●
● ● ●   ●
● ● ●   ●
● ● ● ● ●


630 :情報2年生:02/07/03 20:40
age忘れました(鬱

631 :デフォルトの名無しさん:02/07/03 20:45
>>629
大き目の2次元配列で作業領域を作り、必要なところに●
かスペースを代入しといてあとでまとめて表示とか

632 :デフォルトの名無しさん:02/07/03 20:45
>>628
そこから出発してシェルを作らせるのか... すげぇ盛りだくさんな
先生だ。頑張れ。

633 :デフォルトの名無しさん:02/07/03 20:45
>>629
おい・・・なもん小学生でも組めるぞ

634 :デフォルトの名無しさん:02/07/03 20:46
>> 628
1.そこからシェルに到達するのは大変。
2.コンパイルしてくだせい

635 :デフォルトの名無しさん:02/07/03 20:47
>>632

いや、サンプルはまともなものがあるんですよ。
ただ今は実行ができないので、どうやって実行するのかな、と。

636 :デフォルトの名無しさん:02/07/03 20:59
>>634

VCでコンパイルしたら、色んなファイルがでてくるのですが、それらを全てunixサーバの方に転送するんですか?

637 :デフォルトの名無しさん:02/07/03 21:00
>>636
手前でコンパイルしてどうする。

638 :デフォルトの名無しさん:02/07/03 21:00
>>636
動きません。unixで動かす実行プログラムは、unixでコンパイルする事。
クロスコンパイラでない限り。

639 : :02/07/03 21:04
>>637-638

何かすごく初心者っぽいことを言ってしまったみたいです。すいません。
・・・それで、unixでコンパイルするにはどうすればいいんでしょうか?

640 :デフォルトの名無しさん:02/07/03 21:05
>>639
UNIXマシンにインストールしてあるCコンパイラを使う。

641 :デフォルトの名無しさん:02/07/03 21:05
>>629 適当に改造しなさい。

#include <stdio.h>

int main(void)
{
int array[] = {5, 7, 6, 1, 4} ;
int i, j;

for (i = 7; i >= 1; i--) {
for (j = 0; j < 5; j++)
printf((array[j] >= i) ? "● " : " ");
printf("\n");
}
return 0;
}

642 :デフォルトの名無しさん:02/07/03 21:05
>>639
教師から説明を受けていないの?

643 :デフォルトの名無しさん:02/07/03 21:07
>>641
"● "の次は半角スペース3つのつもりだから。2chに書き込む時に
スペース1つに削られちまった。

644 :デフォルトの名無しさん:02/07/03 21:08
>>643
2chに削られたわけではない。

645 :通信工1年:02/07/03 21:09
>>629
1行1行処理するとして、
処理している行+配列の値>配列の中の最大値
の時に●を書く、とかは駄目ですか?

646 : :02/07/03 21:11
>>640 and >>642

それが、コンパイルとかって言葉は全然授業ででてませんでした。
でもプリントを見た感じは、Emacsとviってのが使えるようなんですが、これを使ってコンパイルできるのでしょうか?


647 :デフォルトの名無しさん:02/07/03 21:13
vi使えるとかこいいけど、コンパイルはできません。
Emacsからコンパイラを呼び出すことはできる

648 :デフォルトの名無しさん:02/07/03 21:13
>>646
ぷよまんでも食べて落ち着きなさい。さすれば自ずと答えは出る

649 :デフォルトの名無しさん:02/07/03 21:14
>>646
Emacsやviはテキストエディタ。
多分ccかgccが入っていると思うからそれでコンパイル。

650 :デフォルトの名無しさん:02/07/03 21:14
>>648
理論的に考えて既に発酵しててもおかしくない時間だな。

651 :デフォルトの名無しさん:02/07/03 21:15
>>645
どっちでもいいよ。書ければね。

652 :デフォルトの名無しさん:02/07/03 21:16
>>650
この前ぷよまん売ってるの見たぞ。カーバンクル饅頭も

653 :デフォルトの名無しさん:02/07/03 21:18
>>646
cc ファイル名 でコンパイルできる。
このままだと a.out という実行ファイルができるから、
cc ファイル名 -o 実行ファイル名 としてもよい。
あとから mv ファイルでリネームしてもよい。

こんなことも教えてくれない先生は失格。

654 :デフォルトの名無しさん:02/07/03 21:18
もしかして、 >>648 は駄洒落なのか!?


655 :デフォルトの名無しさん:02/07/03 21:19
>>654
なるほど・・・ぷよぷよを作った会社の名前か。

656 :デフォルトの名無しさん:02/07/03 21:34
お前らぷよまん食ったことあんのかよ。
めちゃくちゃうまいんだぞ
(カーバンクルまんはさらにうまい)
一度食ったら他の饅頭なんか食えなくなるから試しに食ってみれ。

657 :デフォルトの名無しさん:02/07/03 21:39
つーか、もみじまんじゅうだろ?
広島銘菓。


658 :デフォルトの名無しさん:02/07/03 21:41
広島といえばぷよまんだろう

659 :646:02/07/03 21:42
>>653

とりあえず、コンパイルができて、a.outというファイルがつくれました。
元のa.cというファイルには
#include <stdio.h>

int main(void){
printf("Hello world!\n");
return(0);
}
と入力されてて、Hello world!、と出力したいんですが、できません。
a.outを使うときは、ただa.out入力するだけではできないのですが、どうやるのでしょうか?


660 :デフォルトの名無しさん:02/07/03 21:43
すけどうたらこを忘れるな。と


661 :デフォルトの名無しさん:02/07/03 21:43
>>659
./a.out

UNIXの基礎の基礎。
それも教えてくれない学校なんてやめてしまえ。

662 :646:02/07/03 21:47
>>661

やっとできました!
ありがとうございました。
前の課題でもそうだったんですけど、最初のやり方を教えてくれないから、これでつまづくと先に進めないのでホント困ってました。


663 :デフォルトの名無しさん:02/07/03 21:48
>>661
それもそうだが、>>659 の理解力にも問題あると思うが

664 :デフォルトの名無しさん:02/07/03 21:49
すごい学校だのう

665 :デフォルトの名無しさん:02/07/03 21:49
>>661
> それも教えてくれない学校なんてやめてしまえ。

禿同、学校変えたほうがいいよ、マジで。
んな学校続けてるとダメになるよ。

666 :デフォルトの名無しさん:02/07/03 21:54
>>662
大学?

教授によってはめちゃくちゃ不親切な奴もいる。

667 :デフォルトの名無しさん:02/07/03 21:58
>>660
そうなん有ったのか。

668 :646:02/07/03 23:05
シェルの課題、どこから手をつければいいのかわからないのでアドバイスでいいので助けてください。
とりあえず、課題とサンプルを書きます。

付録ソースコードを参考にして簡単なシェルを作れ。コマンドラインの解析を行うparseは付録で与えられているので、それをそのまま使うか改造すること。
実際にコマンドの実行を行う部分はexecute関数である。ここを埋めよ。リダイレクトとパイプの機能はオプションとする。&によるバックグラウンド処理はできるようにすること。
また、自分なりの工夫を最低1つは組み込むこと。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>


int parse(char *, char **);
int execute(char **, int);

int main(void){
char buf[1024]; /* buffer for input line */
char *args[64]; /* argument list */
int i, argnumber;

while(1){
/* show prompt */
printf("> ");

/* read line */
if(gets(buf) == NULL){
printf("\n");
exit(0);
}

/* parse line */
argnumber=parse(buf, args);

/* execute a command with its arguments */
execute(args, argnumber);
}
return(0);
}



669 :646:02/07/03 23:05
parse です。
int parse(char buf[], char *args[]){
int bufnum=0, argnum=0;

while(buf[bufnum] != '\0'){
/* skip white space and tab */
while((buf[bufnum] == ' ') || (buf[bufnum] == '\t')){
buf[bufnum] = '\0';
bufnum++;
}

/* set an argument to args */
args[argnum]=&buf[bufnum];
argnum++;

/* search for the next argument */
while ((buf[bufnum] != '\0') && (buf[bufnum] != ' ') && (buf[bufnum] != '\t\')){
bufnum++;
}
}
args[argnum]=NULL;
return(argnum);
}

これらがサンプルです。


670 :デフォルトの名無しさん:02/07/03 23:17
>>668
system関数駆使。

671 :デフォルトの名無しさん:02/07/03 23:20
execute()のサンプルは?

672 :646:02/07/03 23:24
>>671

executeのサンプルはありません。
たぶん自分で書くのだと思います。


C言語と同じように書くなら、parseなどの関数はincludeの後に書くのでしょうか?
その後に、int main(void)が来るのですよね?

後、最初のint parse(char *, char **)
int execute(char **, int)
の部分の意味がわからないのですが・・・

673 :デフォルトの名無しさん:02/07/03 23:31
>>663
そう?でも教えてくれなければ./を頭につけることはしないんじゃないかな?

$ a.out
bash:command not found

674 :デフォルトの名無しさん:02/07/03 23:35
>>672
関数のプロトタイプ

675 :デフォルトの名無しさん:02/07/03 23:37
>>672
./a.outがわからないシトにこの問題いきなりやらすのはどうだろう…
ポインタって知ってる?

676 :646:02/07/03 23:40
ネットで調べたら「関数のプロトタイプとは、関数の呼び出しに先立って、関数の型と引数の内容をコンパイラに教えるものです。」と。

つまりプログラムそのものには関係ないのですね。

677 :デフォルトの名無しさん:02/07/03 23:42
>>676
関係有るぞ(笑)
処理をするわけではないが。

678 :646:02/07/03 23:44
>>675

ポインタ、構造体は習いました。そのへんはわかります。

679 :デフォルトの名無しさん:02/07/03 23:45
>>678
そこまで習ってなんでコンパイルの仕方すら知らない・・・。

やっぱりやめた方が良いと思われ。それがあなたのため。
今なら人生修正聞くぞ?

680 :646:02/07/03 23:46
>>677

え・・・もしかして理解してないと解けませんか?

681 :デフォルトの名無しさん:02/07/03 23:47
>>680
理解していなかったからあんな質問したんだろ。

682 :デフォルトの名無しさん:02/07/03 23:48
>>646
教官名晒せ


683 :デフォルトの名無しさん:02/07/03 23:48
というか参考書はいっさい使わない主義の人ですか?

684 :デフォルトの名無しさん:02/07/03 23:48
>>680
まあ、「最初に関数の宣言(変数の宣言みたいに)が必要」と思ってればいいかも。

685 :デフォルトの名無しさん:02/07/03 23:49
>>678
どんな授業だったのか非常に興味があるなぁ。
講義だったの?

686 :デフォルトの名無しさん:02/07/03 23:51
>>685
俺も興味ある
一度もコンパイルせずに
変数や関数、ポインタや構造体までを机上で教えたのか・・・
ある意味すごいな・・・

687 :デフォルトの名無しさん:02/07/03 23:52
問題は

文字列中の a--z の各文字の個数を求める関数
void histogram(char str[], int h[])を作り、それを利用して
各文字の個数を一覧表で表示しなさい。

です。どなたかよろしくお願いします。

688 :デフォルトの名無しさん:02/07/03 23:53
VC++でやっていたんだろ?

689 :646:02/07/03 23:55
>>688

そうです。VC++でポインタや構造体はやりました。

690 :デフォルトの名無しさん:02/07/03 23:55
もしかしてシェル→Windowsのヤシですか?
だったらレジストリを書き換えるんだったかExplorerを置き換えるんだったかどっちかだった気がしる

691 :デフォルトの名無しさん:02/07/03 23:55
>>687
/* h[]の要素は0に初期化されているものとする */
for(;*str;str++){
switch(*str){
case 'a':
h[0]++; break;
case 'b':
h[1]++; break;
/* 中略 */
case 'z':
h[25]++; break;
}
}


692 :デフォルトの名無しさん:02/07/03 23:58
うちの大学で講義のみのPascalの授業があった。
宿題として課題が出されるんだけど、初日に
「○○にPascalが入ってるからそこでやってきなさい」
まあ、使い方は教えてくれたけど、パソコンを自在に操れる奴限定でしか
理解できない説明だった。
他の授業ではUNIXしか使って無くて、DOSとかいわれて何のことかわからず苦労した記憶があるなぁ。

693 :デフォルトの名無しさん:02/07/04 00:02
>>692
工学部?
だったらパソコン使えて当たり前、DOSくらい知ってて当たり前、の世界じゃないの?

694 :デフォルトの名無しさん:02/07/04 00:03
>>691

h[*str - 'a']++

でいいだろ。

695 :デフォルトの名無しさん:02/07/04 00:04
>>694
asciiじゃないとだめじゃん。

696 :695:02/07/04 00:04
というか、文字列が全てa-zで構成されているとは限らないぞ

697 :デフォルトの名無しさん:02/07/04 00:05
>>693
んなこたーない

698 :デフォルトの名無しさん:02/07/04 00:05
なら、

if(*str >= 'a' && *str <= 'z')
  h[*str - 'a']++;


699 :デフォルトの名無しさん:02/07/04 00:07
>>697
現実問題、出来ないと困ると思うが。

700 :デフォルトの名無しさん:02/07/04 00:08
昔、UNIX 信者の数学教授の C プログラムを見たが、あまりの汚さに驚いた。
ちゃんと動いてるらしいのだが、便所の落書きにしか見えなかった。

701 :デフォルトの名無しさん:02/07/04 00:08
>>697
3流国公立大工学部(非・情報)通ってるけど、
パソコン使えないやつなんて同じ学科では
数人しか居ない。まぁ MS-DOS となると
3分の1くらいになるかも知れないが。

702 :デフォルトの名無しさん:02/07/04 00:09
>>700
そう言うのをハックと呼びます。

703 :デフォルトの名無しさん:02/07/04 00:13
>>698
>>695

704 :デフォルトの名無しさん:02/07/04 00:14
>>693
工学部だけど、情報系ではない。
今みたいに一般家庭にパソコンが普及してればそうかもしれないけど、
Win3.1が出たての頃の話なのでそうでもない。
実際ほとんどがパソコンをさわったことない人ばかりだった。

705 :デフォルトの名無しさん:02/07/04 00:16
>>703
つか、asciiだろ

706 :687:02/07/04 00:18
>>691、698

もしかしてポインタ使ってますか?
まだ習ってないんですけど。

707 :デフォルトの名無しさん:02/07/04 00:19
ポカーン

708 :デフォルトの名無しさん:02/07/04 00:20
>>706
あなたの示した関数のプロトタイプがポインタを使っているようなものです。

709 :デフォルトの名無しさん:02/07/04 00:31
ポインタを使うのは素人

710 :デフォルトの名無しさん:02/07/04 00:32
ポインタのある言語を使うのは素人

711 :デフォルトの名無しさん:02/07/04 00:34
>>700
数学はプロでも、プログラムは素人。
素人プログラマなら、それで問題ない。

712 :デフォルトの名無しさん:02/07/04 00:34
>>709-710

で、もしかして参照を認めるのか?

何も知らないか何かを知りすぎてるかどっちかだな。

713 :デフォルトの名無しさん:02/07/04 00:47
そして宿題はできずに夜が更けていく・・・

714 :デフォルトの名無しさん:02/07/04 01:00
ここのスレタイが「はうっ、宿題とはな。」に見えて仕方がないが、まあどうでもいいことだ。

715 :言いたいことも言えないこんな世の中じゃ:02/07/04 01:04
ぽいずん

716 :デフォルトの名無しさん:02/07/04 01:05
>>715
2chで、

>言いたいことも言えないこんな世の中

とか言うか?

717 :デフォルトの名無しさん:02/07/04 01:06
>>714
ワラ イソウ

718 :デフォルトの名無しさん:02/07/04 01:34
2chで宿題の答えを聞ける条件

・面白いギャグを持っている
・回答者の機嫌がいい
・その回答者の機嫌をさらにくすぐる
・運がいい

他に何かあるか?

719 :デフォルトの名無しさん:02/07/04 01:36
>>718
・質問内容がちゃんと日本語になっていること。
・自分で頑張る意志、もしくは自分の力で頑張ってみたことを伝えられる人。
・その問題を解くための常識的な知識を持ち合わせていること。


720 :言いたいことも言えないこんな世の中じゃ:02/07/04 01:37
>>718 簡単な質問であること

721 :デフォルトの名無しさん:02/07/04 01:38
>>718
・自作自演で興味ありそうなレスをつけて、回答者が答えようと思う雰囲気をつくる

722 :デフォルトの名無しさん:02/07/04 01:42
時間帯。
細かいことに文句つける奴が多い時間帯と、そうでない時間帯がある気がする。

723 :デフォルトの名無しさん:02/07/04 01:44
・言語が何か書いてあること
言語がCだと回答率がいいような気がする

724 :デフォルトの名無しさん:02/07/04 01:47
・変なコテハンを使わないこと


725 :デフォルトの名無しさん:02/07/04 01:49
・自分がどの程度できるのか等の条件が書いてあること
レス付いた後で「forはまだ習ってないんです」とか言うヤシ多すぎ

726 :デフォルトの名無しさん:02/07/04 01:52
・質問してからどこかに行かないで、ちゃんと待っていること。
たまに質問するだけして、レスしても1時間くらい無反応な奴がいる。

727 :デフォルトの名無しさん:02/07/04 01:54
・転んでも暴れない

728 :デフォルトの名無しさん:02/07/04 01:55
・転んでもキレない

729 :デフォルトの名無しさん:02/07/04 02:02
>>718
>>719
>>723
>>725
次回テンプレに入れようぜ。
べつに2chに限ったことじゃなく常識レヴェルなんだが、
常識の無いやつが多すぎるからな

730 :デフォルトの名無しさん:02/07/04 02:11
・あっちこっちにマルチポストしない

731 :デフォルトの名無しさん:02/07/04 02:13
・授業をまじめに聞く

732 :デフォルトの名無しさん:02/07/04 02:13
>>719
>・その問題を解くための常識的な知識を持ち合わせていること。

それがあったらこんなとこに質問しない。

733 :デフォルトの名無しさん:02/07/04 02:15
>>731
それ重要

734 :デフォルトの名無しさん:02/07/04 02:17
・提出日の前日とかに来て、勝手に切羽詰らない

735 :646:02/07/04 02:17
http://www.jaist.ac.jp/~n-sakai/i224/rp2/
ここで、http://www.jaist.ac.jp/~n-sakai/i224/rp2/sh3.c
こういうのを見つけました。
解析してみるつもりですが、これで何とかなりますよね?
ってか、やってることは同じですよね?

736 :デフォルトの名無しさん:02/07/04 02:19
>>732
intって何ですか?とかほざくアフォに何か教えたいか?

737 :名無しさん@カラアゲうまうま:02/07/04 02:20
>>687
void histogram(const char* str, int h[])
{
  static const char alphabet[] = "abcde...xyz";
  char *p;
  memset(h, 0, 26 * sizeof(*h));
  while (*str) {
    if ((p = strchr(alphabet, *str++)) != NULL) {
      h[p - alphabet]++;
    }
  }
}


738 :デフォルトの名無しさん:02/07/04 02:21
から揚げ食べたい。

739 :名無しさん@カラアゲうまうま:02/07/04 02:22
>>735
とりあえずgets()はfgets()に汁

740 :デフォルトの名無しさん:02/07/04 02:25
>>737
ポインタは習ってないそうです。

741 :デフォルトの名無しさん:02/07/04 02:25
>>719-732
今風呂から上がってきました。
こんなスゲー数のレスがついていて嬉しいです。
回答者冥利に尽きますね。
これからも面白い問題には答えて行きますのでヨロスク。

742 :デフォルトの名無しさん:02/07/04 02:26
>>741
よろすく。

743 :デフォルトの名無しさん:02/07/04 02:26
>>737
>>698 の方法を使わないのはなんで?

744 :デフォルトの名無しさん:02/07/04 02:31
>>743
ASCIIでない場合のことを考えているんでしょ。

745 :デフォルトの名無しさん:02/07/04 02:35
>>737
結構トリッキーですな。
EBCDICコード体系への対応もばっちりどす。

746 :デフォルトの名無しさん:02/07/04 02:36
>>737
const char *alphabet = "abcde...xyz";にしろ。

747 :名無しさん@カラアゲうまうま:02/07/04 02:39
なんで? >>746

748 :デフォルトの名無しさん:02/07/04 02:40
>>747
static const・・・なんて阿呆みたいだから。

749 :名無しさん@カラアゲうまうま:02/07/04 02:42
そうか?

750 :デフォルトの名無しさん:02/07/04 03:01
関数内のローカル変数ならstatic charかconst charのどちらかでいいと思う。
static const charとすると、馬から落ちて落馬して・・・みたいな感じがする。

751 :デフォルトの名無しさん:02/07/04 03:06
俺は
static char const alphabet[].
がいいと思うが

752 :名無しさん@カラアゲうまうま:02/07/04 06:44
>>750
> 関数内のローカル変数ならstatic charかconst charのどちらかでいいと思う。
意味が全然違うじゃん。

>>751
その順序に拘りが?

753 :デフォルトの名無しさん:02/07/04 06:52
>>752
C++なら大いにあり得る。
クソ言語たるゆえん。

754 :名無しさん@カラアゲうまうま:02/07/04 06:55
>>753 順序の話だよね。
なんか違うんだっけ、ちと教えて。

755 :デフォルトの名無しさん:02/07/04 07:02
>>754
ポインタ自体をconstにするかポインタのポイント先をconstにするか。
他の言語にはない優秀な機能だけど順番だけで意味が変わるのはどうかと。


756 :デフォルトの名無しさん:02/07/04 07:05
>>752
static->変数につける->宣言中で高々1回→前につけてよし
const->型につける->宣言中で複数回登場→前につけるといろいろ困る

const が前のとき
const int a; // const な nit
const int* p; // const な int へのポインタ
const const int* p; // const な int への const なポインタにチャレンジしてみた→(゜д゜)マズー

const が後ろのとき
int const a;
int const* p;
int const* const p; //(゜д゜)ウマウマ

757 :756:02/07/04 07:06
あ、消えてる・・・

C++でのメンバ関数の const 指定も後ろから行わないとダメだよん

を補完して

758 :名無しさん@カラアゲうまうま:02/07/04 07:52
>>755-757
>>737はポインタにはしてないんだが。
ひょっとして配列とポインタの区別がついてない?


759 :751=756:02/07/04 08:08
>>758
あんたの聞き方が悪いだけだろ

拘りが?と聞いたから
constは常に型の後ろから掛けるべきだという俺の拘りを書いたまで
振る舞いに違いが?と聞かれたら
同じ、と答えただろうけどね

760 :名無しさん@カラアゲうまうま:02/07/04 08:13
単なる拘りということなら漏れは前からつける。

761 :デフォルトの名無しさん:02/07/04 08:15
>>760
756を読んだ上でそう思うならそれでいいよ

762 :デフォルトの名無しさん:02/07/04 08:16
>>760
あ、でも const なポインタをどう書くのかは興味あるな

763 :デフォルトの名無しさん:02/07/04 08:20
俺は、
const C A::hoge(const B const * pb) const;
とか書くが。

764 :デフォルトの名無しさん:02/07/04 08:24
>>763
pbがconstになってない

765 :お願いいたします。:02/07/04 08:38
JAVAの問題なのですが、
配列の問題になってから授業についていけなくなってしまいました。
どなたか教えていただけないでしょうか。

問題
class Reverse {
public static void main(String[] args){
int a[] = new int[10];
int i,j,x;
i=0;
System.out.println("0以上の数を最高10個打ち込め。終わりは-1で表わす");
System.out.print("> ");
x=IO.in.readInt();
while(x >= 0)
{
if(i>=10)System.out.println("10個を超えたので無視する。");
else{ a[i]=x; i++;}
System.out.print("> ");
x=IO.in.readInt();
}
System.out.println("数列を逆順に書くと以下のとおり。");
for(j=i-1;j>=0;j--)
System.out.println(a[j]);
}
}

このプログラム(10個までの数をよみこんで逆順に書き出す)
を書き直して、配列の中で入れ替えをして逆順にし、
かきだすようにせよ。
つまり、まず配列にデータを読み込み、続いて配列の中の要素を入れ替え、
逆順にし、最後にそれを順に書き出すようにせよ。



という問題です。上のプログラムと完成したプログラム、
結果は同じになる、ということはわかっているのですが、
配列の要素の交換をどうやってよいのかがわかりません。
よろしくお願いします。

766 :デフォルトの名無しさん:02/07/04 08:41
>>765
交換にこだわるのなら、

a = b[0];
b[0] = b[1];
b[1] = a;


個人的には配列の要素をforループで全部なめて別に用意した配列に逆順に格納。
元の配列の参照に逆順にした配列のインスタンスを入れて返すけどね。
GCバンザイなテクニック。

767 :デフォルトの名無しさん:02/07/04 08:47
>>764
const C A::hoge(const B* const pb) const;
だな。寝ぼけてたわ。

768 :デフォルトの名無しさん:02/07/04 08:53
ポインタとメンバ関数は後ろから、それ以外は前からかけるの?
全部後ろからに統一したほうがわかりよくない?

769 :755:02/07/04 09:02
>>766
どうもありがとうございます。
しかし、その交換は変数ひとつに関してですよね?
配列の最初の数と最後の数、最初から2番目と最後から2番目、…
というふうに交換するにはどうしたらよろしいのでしょうか?
ご教授ください。

770 :デフォルトの名無しさん:02/07/04 09:55
cの頃はあんまり気にせず前にconst書いてたけど、
c++になってconstを多用するようになったらなるべく後ろで統一させるようにしてる。
たまに癖で前に書いちゃうことがあるけどね。

771 :デフォルトの名無しさん:02/07/04 09:57
>>770
アフォ


772 :デフォルトの名無しさん:02/07/04 12:04
const を正しく理解している人って少ないから、
const を多用すると可読性が低くなる気がする。

773 :デフォルトの名無しさん:02/07/04 12:23
漏れは引数や一時変数がその後変更されないことを保障するために
プログラム中の変数はほとんどconstですが、なにか?

774 :デフォルトの名無しさん:02/07/04 13:24
俺は最初const無しで書いて変更しないものだったら付け加えてる

775 :名無しさん@カラアゲうまうま:02/07/04 16:29
>>762
const int *p;
int *const p;
どっちをいってる?

この手のqualifierで戸惑ったことなんてないぞ。

776 :デフォルトの名無しさん:02/07/04 17:12
>>769
for(int i = 0; i < arr.length / 2; i++){
 int j = arr.length - 1 - i ; //最後からi番目にあたる添え字の計算
 int tmp = arr[i];
 arr[i] = arr[j];
 arr[j] = tmp;
}

777 :デフォルトの名無しさん:02/07/04 17:16
>>769
いっしょだろ?
 最初 ( a[0] ) と最後 ( a[i-1] ) を交換
 2番目( a[1] ) と最後から2番目 ( a[i-2] ) を交換
これを繰り返していけばいいんだ。
ちなみに、index は 0 から i/2 の直前までな。
最後までやると楽しいことになるぞ。


778 :デフォルトの名無しさん:02/07/04 20:44
外部変数がいまいちよくわかりません。

779 :デフォルトの名無しさん:02/07/04 20:45
>>778
他のソースファイルで宣言したグローバル変数を参照(使用)する。

780 :779:02/07/04 20:46
あくまでもCの場合ね。PHPだとクライアントから送られてきたデータが入っている変数だったかな。
言語は何?

781 :デフォルトの名無しさん:02/07/04 20:46
externalだがんがれ。

782 :デフォルトの名無しさん:02/07/04 21:09
2点間の距離を求める問題なのですが、うまくできません。訂正おねがいします。

#include<stdio.h>
#include<math.h>

float dist(float a0,float a1,float b0,float b1)
{

float dist ;
dist = (a0-b0)*(a0-b0)+(a1-b1)*(a1-b1);
dist = pow (dist,0.5);
return dist;
}

int main()
{
float a0,a1,b0,b1;
printf("a0=?");
scanf("%f",&a0);
printf("a1=?");
scanf("%f",&a1);
printf("b0=?");
scanf("%f",&b0);
printf("b1=?");
scanf("%f",&b1);

printf("%.2f\n",dist);
return 0;
}

783 :デフォルトの名無しさん:02/07/04 21:11
>>782
何が上手くできないかかけ。
と何度も言われ続けてることなんだが、少しは過去ログを読め。

784 :デフォルトの名無しさん:02/07/04 21:12
こたえが0になる。

785 :デフォルトの名無しさん:02/07/04 21:15
>>784
関数の使い方をもう一回勉強しろ

786 :デフォルトの名無しさん:02/07/04 21:15
よくわからんのれす


787 :デフォルトの名無しさん:02/07/04 21:19
>>786
教科書読み直すか、↓読め
ttp://users-web1.iac.ne.jp/~yasutaka/c_lang/intro/no_21.htm

788 :デフォルトの名無しさん:02/07/04 21:20
>>786
そうか。よかったな

789 :デフォルトの名無しさん:02/07/04 21:21
>>782
scanf()でうまく数字が読みとれないんだろ?

scanf()を、char buf[128]; gets(buf); sscanf(buf, "%f", &a0); とかに
書き直すと動く。

なぜ元のプログラムがおかしいかというと、最後の改行文字が読み
取られずにしつこくバッファに残ってしまうからだ。

790 :デフォルトの名無しさん:02/07/04 21:22
>>782
まず、関数 dist() にどういう値が渡ってきているか、確認しろ。話は
それからだ。

791 :デフォルトの名無しさん:02/07/04 21:22
>>789
それもそうだけど、
もっと根本的なとこ指摘してやれよ!

792 :デフォルトの名無しさん:02/07/04 21:22
>>789
そんな間違いじゃない。
数値だからscanfでもちゃんと読みとれる。
めちゃくちゃ基本的なことがわかってないだけだと思うが。

793 :791:02/07/04 21:23
>>792
ケコーン汁!

794 :792:02/07/04 21:24
>>793
ふとどき者ですが、よろしくおながいします。

795 :791:02/07/04 21:25
>>794
ふとどき者かよ(w
ワラタ


796 :デフォルトの名無しさん:02/07/04 21:25
>>789
頼むから、知ったか厨は出てくんなよ。話がややこしくなるから。

797 :デフォルトの名無しさん:02/07/04 21:26
>>789を叩くすれはここですか?

798 :デフォルトの名無しさん:02/07/04 21:29
>>789は前にscanf使うなボケ!と言われた質問者に一票

799 :デフォルトの名無しさん:02/07/04 21:43
わかんないよーん


800 :デフォルトの名無しさん:02/07/04 21:44
(´_ゝ`)フーン

801 :デフォルトの名無しさん:02/07/04 21:52
関数名とローカル変数名が同じなのはまずダメ。
次に関数の呼び出しがなってない。

802 :デフォルトの名無しさん:02/07/04 21:54
>>801
>関数名とローカル変数名が同じなのはまずダメ。
(゚Д゚)ハァ?

803 :デフォルトの名無しさん:02/07/04 21:56
ここにはこんな簡単な間違いがわからないやつらがそろってるのか・・・?

804 :デフォルトの名無しさん:02/07/04 21:58
>>802>>803 ヲイヲイ・・・・・

↓こりゃやっぱダメだろ。。。。
float dist(float a0,float a1,float b0,float b1)
   ~~~~
{
float dist ;
   ~~~~

805 :デフォルトの名無しさん:02/07/04 21:59
>>782
何が悪いのかわからないのならmain関数のみで作れ。

806 :名無しさん@カラアゲうまうま:02/07/04 22:02
>>804
たしかに紛らわしくて勧められたもんではないが、問題はそんなところではない。

807 :デフォルトの名無しさん:02/07/04 22:03
えと、4日前学校ででた宿題なんですが
「正の数をキーボードから一つ読み込みおからその数までのすべての素数と
その素数の個数をディスプレイ画面に表示するフローチャートを描け」
なんですけれども、自分でやったんですけれども全然わからなくて(;´Д`)
房な質問ですみません・・・

808 :デフォルトの名無しさん:02/07/04 22:04
関数返しの方法でつくらなあかんのよ。

809 :デフォルトの名無しさん:02/07/04 22:04
>>804
質問者の希望の動作をさせるだけなら問題はない。

810 :デフォルトの名無しさん:02/07/04 22:04
>読み込みおからその数まで
漏れも全然わかんない。

811 :デフォルトの名無しさん:02/07/04 22:05
>>808
で、教科書か紹介されたリンク先は読んだのか?

812 :デフォルトの名無しさん:02/07/04 22:05
>>804
だからもっと根本的な床指摘汁!

>>808
そうか。じゃあそういう仕様でつくれ。

813 :デフォルトの名無しさん:02/07/04 22:07
読んだけどわかんないっす。
教科書はほんま意味不明。

814 :デフォルトの名無しさん:02/07/04 22:10
>>813
はっきり言おう。

あ・き・ら・め・ろ。

815 :デフォルトの名無しさん:02/07/04 22:10
>>813
じゃあ、こっち。
ttp://www.orchid.co.jp/computer/cschool/cschool8.html

816 :デフォルトの名無しさん:02/07/04 22:14
>>804
スコープって知ってる?

817 :デフォルトの名無しさん:02/07/04 22:16
>>804
ま た 知 っ た か か

818 :デフォルトの名無しさん:02/07/04 22:20
いや、それはわかる

819 :デフォルトの名無しさん:02/07/04 22:21
>>782
printf("%.2f\n",dist);

printf("%.2f\n",dist(a0,a1,b0,b1));

よく確認しろ

820 :デフォルトの名無しさん:02/07/04 22:30
>読み込みおからその数まで
ひょっとして、
読み込み0からその数まで
だったりシテ……

821 :デフォルトの名無しさん:02/07/04 22:31
>>819
うそつくな

822 :デフォルトの名無しさん:02/07/04 22:33
>>819
ほんとうそつきだなおまえは

823 :デフォルトの名無しさん:02/07/04 22:33
>>820
だとしたら割れガキケテーイ。

824 :デフォルトの名無しさん:02/07/04 22:48
>823
そういう発想が出るヤツの方が(略


825 :デフォルトの名無しさん:02/07/04 22:50
if ( ( fclose ( fp ) ) ) !=0 ) {
printf("Can't close");
exit(1);
}
↑を関数化したいんすけどできますか?

826 :デフォルトの名無しさん:02/07/04 22:50
>>825
出来ない理由はないです。

827 :825:02/07/04 22:52

int FileClose (FILE *fp) {
:
:
}
とかにするんすか?

828 :デフォルトの名無しさん:02/07/04 22:53
>>827
as you like

829 :825:02/07/04 22:54
>>828
えっ!?
827でいいんすか??

830 :デフォルトの名無しさん:02/07/04 22:55
void kansu(void){
  if ( ( fclose ( fp ) ) ) !=0 ) {
    printf("Can't close");
    exit(1);
  }
}

できますた!


831 :デフォルトの名無しさん:02/07/04 22:56
>>830
どう笑えばいいの?

832 :デフォルトの名無しさん:02/07/04 22:57
>>807
関数返しってのがわからんが、いちおうサンプル

読み込む Nに代入
 ↓
C=0
P=2
 ↓
1:
PがNより大きい 真→ 2へ
 ↓偽
Cを1増やす
Pを書く
Pの次の素数を求める Pに代入
 ↓
1へ

2:
Cを書く
終了

:Pの次の素数を求める
3:
Pを1増やす
 ↓
Pが素数 偽→ 3へ
↓真
Pを返す

:Pが素数
Q=2
 ↓
4:
PがQ*Qより小さい 真→ 真を返す
 ↓偽
PがQで割れる 真→ 偽を返す
 ↓偽
Qの次の素数を求める Qに代入
 ↓
4へ

833 :825:02/07/04 22:58
ウーン
厨なもんで・・・
みなさんすごいっすねぇ
プログラミングって難しいっす

834 :デフォルトの名無しさん:02/07/04 23:13
>>831
関数化できてるからいいんじゃないの ? fp は、多分グローバルなんだよ。

ヴァカは、放置するしかないよ。後は、そう言う奴が自分の周りにこないことを
祈るしかないね。

835 :デフォルトの名無しさん:02/07/04 23:14
>>834
お前のそばに行きたくないってことは確かだろうな。

836 :807:02/07/04 23:18
>>832さん、どうもありがとうございます^^
これを元にしてやってみます〜

837 :デフォルトの名無しさん:02/07/04 23:25
#include<stdio.h>
#include<math.h>

float dist(float*,float*);
float abc;

float dist(float a[1],float b[1])
{
abc = (a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1]);
abc = pow(abc,0.5);
return abc;
}
main()
{
float a[1],b[1];
printf("a[0]=?");
scanf("%f",&a);
printf("a[1]=?");
scanf("%f",&a);
printf("b[0]=?");
scanf("%f",&b);
printf("b[1]=?");
scanf("%f",&b);

abc = dist(a[1],b[1]);

printf("%.2f\n",abc);
return 0;
}


今度はポインタつかったやつ。
 
abc = dist()
のところがわからないっす

838 :デフォルトの名無しさん:02/07/04 23:29
>>837
最初の方がよかったな。
今度はつっこみどころが・・・

839 :デフォルトの名無しさん:02/07/04 23:32
>>837
abc = dist(a,b);

その脳みそじゃ大変だな

840 :デフォルトの名無しさん:02/07/04 23:35
>>837
えーと、ダメになったとこ。

> float dist(float*,float*);
> float dist(float a[1],float b[1])
これは意味が違う。

> float a[1],b[1];
[1]だと要素は一個だけ。

> printf("a[0]=?");
> scanf("%f",&a);
> printf("a[1]=?");
> scanf("%f",&a);
どこに書き込もうとしてる?

それと>>839

ふぅ。疲れる奴だな。

841 :デフォルトの名無しさん:02/07/04 23:41
>>782は寝ぼけてるのかと思ったが、>>837を見て真性だと気づきました。
>>837ってコンパイルエラーでてるだろ。

842 :デフォルトの名無しさん:02/07/04 23:52
>>840
でけたwさんきゅう

>>841
昨日からはじめたんで、まだまだっすw

843 :デフォルトの名無しさん:02/07/05 00:21
>>837
とりあえずコンパイラ通して、そのエラーメッセージを頼りに
自力で修正してみろ。

844 :デフォルトの名無しさん:02/07/05 00:54
>>843
お前はログを読めるように日本語の勉強しろ。

845 :デフォルトの名無しさん:02/07/05 16:49
JAVA(サーブレットやJSPも含む)やXMLを使った
webアプリケーションで
何かいいアプリケーションってありませんか?
こんなのあったらいいなのでもいいので。

846 :デフォルトの名無しさん:02/07/05 16:50
>>845
就職板に帰れ。

847 :デフォルトの名無しさん:02/07/05 17:05
なぜ就職板?

848 :デフォルトの名無しさん:02/07/05 17:06
>>847
551 名前:就職戦線異状名無しさん 投稿日:2002/07/05(金) 10:18
誰か頭の切れる人教えて!!
XML JAVA データベース サーブレット などを使って新しいWebアプリケーション
を考えたいのですが何かないですかね?



552 名前:就職戦線異状名無しさん 投稿日:2002/07/05(金) 11:01
>>551
取りあえずお前はその技術達を理解しているのかと問いたい。
JavaとServletを敢えて別に離して書いた理由も聞きたい。

849 :デフォルトの名無しさん:02/07/05 17:17
>>845
リアルタイムで人生相談してくれるアプリケーションがあったらいいなー。


850 :デフォルトの名無しさん:02/07/05 17:19
>>849
シーマン。

851 :デフォルトの名無しさん:02/07/05 17:23
>>848
どのスレですか。
ちなみに就職板に書いたのは俺ではありません。

852 :デフォルトの名無しさん:02/07/05 17:24
SE志望でまだ内定ない人●持ち駒ナッシン ver.4
http://school.2ch.net/test/read.cgi/recruit/1025182470/l50

853 :デフォルトの名無しさん:02/07/05 17:28
こんばんは!

WMIクラスを使って、CPUの温度とパケットの流れなどを監視したいのですが、
CIM、WIMをMSDNで探して見て実際にデータを取得したりしましたが
うまくできません。

クラスとプロパティ どなたか知っている方おられませんか?

854 :FORTRAN:02/07/05 18:12
なのですが、ファイルから数値データを取り出すときにどうしても始めの数字から
読み出してしまいますよね?それを、どうしても途中の数字から読み始めたいのですが
どのようにすればよいですか?

855 :デフォルトの名無しさん:02/07/05 18:13
フォートランって、ファイルのシークできんの?

856 :FORTRAN:02/07/05 18:32
>>855
まだ始めたばかりなのでよく分かりません(シーク)
一番目から十番目のデータと十一番目から20番目のデータを
別々の配列に格納したいんですよ。

857 :デフォルトの名無しさん:02/07/05 23:22
10×10の配列Aの要素をキーボードから入力し、Aの4乗を計算し、結果を
表示するプログラムなんだけど、書いててもうわけわかんなくなっちゃいました。
間違えているのは確実なんでどこが間違えているのか教えてください。
お願いします。ちなみにPascalです。

begin
{10×10配列要素の読み込み}
for i:= 1 to 10 do begin
for j:= 1 to 10 do
read(A[i,j]);
readln;
end;

{配列の初期化(単位行列 C の作成)}
for i:= 1 to 10 do begin
for j:= 1 to 10 do
C[i,j] := 0.0;
C[i,i] := 1.0;
end;

{A の4乗の計算処理}
for k:= 1 to 4 do begin
for i:= 1 to 10 do begin
for j:= 1 to 10 do begin
B[i,j] := 0.0;
for m:= 1 to 10 do
B[i,j] := B[i,j] + C[i,m] * A[m,j];
end;
end;
for i:= 1 to 10 do
for j:= 1 to 10 do
C[i,j] := B[i,j];
end;

{計算結果の表示}
for i:= 1 to 10 do begin
for j:= 1 to 10 do
write(C[i,j]:10:3);
writeln;
end;

end.

858 :デフォルトの名無しさん:02/07/05 23:39
>>857
単位行列をかけたら対角行列になっちゃうよ。
4乗を計算するのなら、2乗の2乗でいいでしょ。

859 :デフォルトの名無しさん:02/07/06 00:15
>>858
2乗の2乗は他のべき乗に対応させやすいように避けたいです。
空白を半角にしてしまい見づらくてすみません。

860 :デフォルトの名無しさん:02/07/06 00:22
なんのこっちゃい。行列積ABの関数を作って
それを何回か呼び出すだけだろう

861 :デフォルトの名無しさん:02/07/06 00:25
>>856
いったん全部配列に読み込んで、それから処理すれば?

862 :デフォルトの名無しさん:02/07/06 00:32
>>860
うむ。
B = A * A;
B = B * A;
B = B * A;
とやれば4乗になるのう。って当たり前か。

863 :デフォルトの名無しさん:02/07/06 00:49
>>857
何も間違っていないような

864 :デフォルトの名無しさん:02/07/06 00:58
>>858
単位行列をかけても対角行列にはならんだろ。
AE=EA=Aで、何も変わらない。

865 :857:02/07/06 01:19
みなさん、お手数おかけしました。
無事完成しました。
ありがとうございました。

866 :デフォルトの名無しさん:02/07/06 02:32
int* pointer = new int[10];
delete pointer;
は最初のポインタしか削除しないということを読んでのですが、
逆に
int* pointer = new int;
delete [] pointer;
は何か弊害があるのでしょうか?

867 :デフォルトの名無しさん:02/07/06 02:43
>>866
もちろん。配列として削除しようとするわけだから、配列のサイズを
記憶しているであろうと思われる領域にアクセスし、読み出す。
次にそのサイズで削除する。

変な領域の読み出し、そこに何が書かれているかわからない事
(サイズがメチャクチャ)、もしかしてリードオンリー領域かもしれない
事など、危険がイパーイ。

868 :867:02/07/06 02:57
ありがとうございます。
うまく一緒に使いたかったのですが、
かなり危険がイパーイですね。

int* pointer = new int[1];
とか怪しい方法でやってみたいと思います

869 :デフォルトの名無しさん:02/07/06 12:05
この問題さっぱりわからないので教えてください。
言語はCです。

10進数1桁の4個の数A,B,C,Dを与えられたとする。
(1)op1,op2,op3は四則演算のどれかを表すものとする(2つ以上が同一でも可)
(2)A op1 B op2 C op3 D == 10 という式が成り立つかを調べる
(3)成り立つ場合は[1+2+3+4=10]のように成り立つ式を表示する

870 :デフォルトの名無しさん:02/07/06 12:13
>>869
4の4乗で16通りが考えられる。
ループ回して工夫するのが吉。

こう言うときOOの多様使えば便利な気がした。

class op
{
virtual int operate(int,int)=0;
}

class plass:public op
{
int operate(int a,int b)
{
return a + b;
}
}
}





871 :デフォルトの名無しさん:02/07/06 12:20
4の4乗が16か・・・

872 :デフォルトの名無しさん:02/07/06 12:21
>>871
自分で読んで愕然となった(泣)。

256ですな・・・。

873 :hint>>869:02/07/06 12:21
static char tbl[]="+-*/" ;
int sub(a,b,c,d,op1,op2,op3)
{
/*ここになんかいれる*/
}
main()
{
int a,b,c,d,op1,op2,op3;
for(a=1;a<10;a++)for(b=1;b<10;b++)for(c=1;c<10;c++)for(d=1;d<10;d++)
for(op1=0;op1<4;op1++)for(op2=0;op2<4;op2++)for(op3=0;op3<4;op3++)
if(sub(a,b,c,d,op1,op2,op3))
printf("%d %c %d %c %d %c %d \n",a,tbl[op1],b,tbl[op2],c,tbl[op3],d) ;
return 0 ;
}

a,b,c,d が互いにちがう場合は、あそこをああ変える。

874 :デフォルトの名無しさん:02/07/06 12:24
>>873
A B C Dは固定でないんかい?

875 :873:02/07/06 12:27
>>874
ごめん問題読み間違えた・・・



876 :デフォルトの名無しさん:02/07/06 12:30
>>875
でも、これが完成するとかなりおもしろい物がコンソールを駆け抜けていくかと。
ちょっと見てみたいw

877 :デフォルトの名無しさん:02/07/06 12:33
>>870-872
つーか3乗だろ

878 :デフォルトの名無しさん:02/07/06 12:34
>>873
ヒントどもです。
ですが実のところ /*ここになんかいれる*/ の部分が
わからず悩んでいたのが実情でして・・・
そこのところをもう少し教えてもらえないでしょうか?

>>874
固定ですね。

879 :873:02/07/06 12:36
3の4乗だと俺は思うが・・・

880 :デフォルトの名無しさん:02/07/06 12:37
>>879
鯖食べたら気分悪くなった・・・。

881 :873:02/07/06 12:46
さらにこんなサブルーチンをつくる
int ope_たす(num0,num1)
int ope_ひく(num0,num1)
int ope_かける(num0,num1)
int ope_わる(num0,num1)

んでsubの中で op?を判定して*とか/とか優先的に処理させて
上の関数に与えていく。

おわり

882 :デフォルトの名無しさん:02/07/06 12:51
>>881
いっそ関数ポインタで・・・具ハァ。

883 :名無しさん@カラアゲうまうま:02/07/06 12:57
>>882
知恵は浅いぞ、しっかりしる!!

884 :デフォルトの名無しさん:02/07/06 13:21
乗除算を優先する、とすると面倒だなぁ。
いっその事

 sprintf(ex, "set noglob; expr %d %c %d %c %d %c %d", a, op1, b, op2, c, op3, d);
 fp = popen(op, "r");
 fgets(result, sizeof(result), fp);
 fclose(fp);
 return (atoi(result) == 10);

とかしたいなぁ。

885 :デフォルトの名無しさん:02/07/06 13:24
>>884
UNIX的には正解だけど宿題的にはアウトだね。
でも、アイデア賞として何かくれるかも知れない。

886 :884:02/07/06 13:24
あ、あれ??

× fp = popen(op, "r");
○ fp = popen(ex, "r");

887 :884:02/07/06 13:38
優先順位を考えなければ、
数値を int val[4]、演算子を char op[3] に突っ込んで

 int ret = val[0];
 for (i=0; i<3; i++)
  switch (op[i]) {
   case '+': ret += val[i+1]; break;
   case '-': ret -= val[i+1]; break;
   case '*': ret *= val[i+1]; break;
   case '/': ret /= val[i+1]; break;
  }
 return ret == 10;

888 :デフォルトの名無しさん:02/07/06 13:46
力業でやってみました。

#!/bin/sh
cat <<EOF
#include <stdio.h>
try(a, b, c, d)
{
EOF
for o1 in + - '*' /; do for o2 in + - '*' /; do for o3 in + - '*' /; do
if [ "$o1" = "/" ]; then echo "if (b)"; fi
if [ "$o2" = "/" ]; then echo "if (c)"; fi
if [ "$o3" = "/" ]; then echo "if (d)"; fi
echo "if (a $o1 b $o2 c $o3 d == 10) pans(a,b,c,d,\"$o1$o2$o3\");"
done done done
cat <<EOF
}
pans(a, b, c, d, p)
char *p;
{
printf("[%d%c%d%c%d%c%d=10]\n", a, p[0], b, p[1], c, p[2], d);
}
main()
{
int a,b,c,d;
for (a=0; a<=9; a++) for (b=0; b<=9; b++)
for (c=0; c<=9; c++) for (d=0; d<=9; d++)
try(a, b, c, d);
}
EOF


889 :869:02/07/06 14:01
>>873,884
結局優先順位とか考えるとひたすら分岐させていくことに
なるんですかね?
とりあえず今それで挑戦してますが。

>>888
すみません。自分はヘタレなんでそのプログラムが
何をしているのかがわかりませぬ・・・


890 :デフォルトの名無しさん:02/07/06 14:06
すげえ見づらいコードがあった
しね糞が

891 :スピード優先。:02/07/06 14:06
bool 判定(A,B,C,D)
{
if(A+B+C+D!=10) if(A+B+C-D!=10) if(A+B+C*D!=10) if(A+B+C/D!=10) if(A+B-C+D!=10)
if(A+B-C-D!=10) if(A+B-C*D!=10) if(A+B-C/D!=10) if(A+B*C+D!=10) if(A+B*C-D!=10)
if(A+B*C*D!=10) if(A+B*C/D!=10) if(A+B/C+D!=10) if(A+B/C-D!=10) if(A+B/C*D!=10)
if(A+B/C/D!=10) if(A-B+C+D!=10) if(A-B+C-D!=10) if(A-B+C*D!=10) if(A-B+C/D!=10)
if(A-B-C+D!=10) if(A-B-C-D!=10) if(A-B-C*D!=10) if(A-B-C/D!=10) if(A-B*C+D!=10)
if(A-B*C-D!=10) if(A-B*C*D!=10) if(A-B*C/D!=10) if(A-B/C+D!=10) if(A-B/C-D!=10)
if(A-B/C*D!=10) if(A-B/C/D!=10) if(A*B+C+D!=10) if(A*B+C-D!=10) if(A*B+C*D!=10)
if(A*B+C/D!=10) if(A*B-C+D!=10) if(A*B-C-D!=10) if(A*B-C*D!=10) if(A*B-C/D!=10)
if(A*B*C+D!=10) if(A*B*C-D!=10) if(A*B*C*D!=10) if(A*B*C/D!=10) if(A*B/C+D!=10)
if(A*B/C-D!=10) if(A*B/C*D!=10) if(A*B/C/D!=10) if(A/B+C+D!=10) if(A/B+C-D!=10)
if(A/B+C*D!=10) if(A/B+C/D!=10) if(A/B-C+D!=10) if(A/B-C-D!=10) if(A/B-C*D!=10)
if(A/B-C/D!=10) if(A/B*C+D!=10) if(A/B*C-D!=10) if(A/B*C*D!=10) if(A/B*C/D!=10)
if(A/B/C+D!=10) if(A/B/C-D!=10) if(A/B/C*D!=10) if(A/B/C/D!=10)
return false;
return true;
}


892 :デフォルトの名無しさん:02/07/06 14:08
>>891
自動生成したのでないならあんたはアフォだw

893 :891:02/07/06 14:10
スピード優先はウソです、すみません。
可読優先です(?

894 :891:02/07/06 14:12
static const char 四則演算子[]="+-*/" ;
main()
{
intii,jj,kk ;
for(ii=0;ii<4;ii++)
for(jj=0;jj<4;jj++)
for(kk=0;kk<4;kk++)
printf("if(A%cB%cC%cD!=10) ",
四則演算子[ii],四則演算子[jj],四則演算子[kk] ) ;
}
こんな感じ。


895 :デフォルトの名無しさん:02/07/06 14:12
>>893
それって可読なのか・・・・

896 :デフォルトの名無しさん:02/07/06 14:22
済みません、全部Cで解くんですね。
Cで書き直しました。相変わらずエレガントさのかけらも
ありませんが。。。

#include <stdio.h>
main()
{
char *ops="+-*/", *op1, *op2, *op3;
printf("#include <stdio.h>\ntry(a, b, c, d)\n{\n");
for (op1=ops; *op1; *op1++)
for (op2=ops; *op2; *op2++)
for (op3=ops; *op3; *op3++)
{
if (*op1=='/') printf("if(b)");
if (*op2=='/') printf("if(c)");
if (*op3=='/') printf("if(d)");
printf("if(a%cb%cc%cd==10)", *op1, *op2, *op3);
printf("printf(\"[%%d%c%%d%c%%d%c%%d=10]\\n\", a, b, c, d);\n", *op1, *op2, *op3);
}
printf("\n}\nmain()\n{\n"
"int a, b, c, d;\n"
"for (a=0; a<=9; a++) for (b=0; b<=9; b++)\n"
"for (c=0; c<=9; c++) for (d=0; d<=9; d++)\n"
"try(a, b, c, d);\n"
"}\n");
}


897 :893:02/07/06 14:23
>>895
自分的には・・・


898 :デフォルトの名無しさん:02/07/06 15:35
今回のCマガの問題、難しいね

899 :デフォルトの名無しさん:02/07/06 17:17
>>898
どんな問題よ?

900 :デフォルトの名無しさん:02/07/06 20:58
隔離スレはたまにはあげんとね。

901 :デフォルトの名無しさん:02/07/07 14:16
単発質問禁止age

902 :デフォルトの名無しさん:02/07/07 21:49
>>869
発想の転換で10を4つの数に分解していったら
効率的なんじゃないの?
四則演算なんだから逆算は簡単だし。

903 :デフォルトの名無しさん:02/07/08 00:54
括弧とかも許すやつなら、昔宿題で書いた記憶あるなぁ。

904 :DQN:02/07/08 02:20
先生にstrstrとstrtolを書いて来いって言われたんだけどどーすりゃいいかね

905 :名無しさん@カラアゲうまうま:02/07/08 03:35
書くしかないだろな

906 :デフォルトの名無しさん:02/07/08 05:06
>>904
strstr の実装例。
http://www.ring.gr.jp/archives/NetBSD/NetBSD-current/src/lib/libc/string/strstr.c


907 :デフォルトの名無しさん:02/07/08 05:24
>>906
やさしいのね。

908 :デフォルトの名無しさん:02/07/08 13:32
>>906
strstr()の内部でstrncmp()とか使ってるから、こういう関数も使うなと
先生に言われるかもね。

909 :デフォルトの名無しさん:02/07/08 19:16
次スレは?

910 :デフォルトの名無しさん:02/07/08 19:18
950くらいになってからでいいんじゃない?

911 :デフォルトの名無しさん:02/07/08 19:35
3×3行列A×行列Bを出力するプログラムを教えてください。
for文を使えばできるみたいなんですけどわかりませんので・・・。
よろしくお願いします。

912 :デフォルトの名無しさん:02/07/08 19:36
>>911
行列の掛け算自体は知っているのかい?

913 :名無しさん@カラアゲまずまず(-д-):02/07/08 19:37
そうだな。

914 :911:02/07/08 19:43
>>912
わかんないです・・・

915 :デフォルトの名無しさん:02/07/08 19:44
>>914
先に数学の勉強した方がよろしいのでは?

916 :デフォルトの名無しさん:02/07/08 19:45
>>914
線形代数やりなおせ

917 :911:02/07/08 19:47
ガウスジョルダン法でやるんですか?

918 :デフォルトの名無しさん:02/07/08 19:48
プログラム技術以前のことは板違いですね。

919 :デフォルトの名無しさん:02/07/08 19:50
>>917
ネタだと思うが、それは掃き出し法では?

920 :911:02/07/08 19:54
ネタじゃないです

921 :デフォルトの名無しさん:02/07/08 19:56
>>911
学校で習わなかった?教科書持ってない?

922 :911:02/07/08 19:56
>>912
すいません、C言語で行列の計算ができないの間違いです。
行列の計算はできます。

923 :デフォルトの名無しさん:02/07/08 19:58
>>922
じゃあ、式は書けるんだな。
それをmainの中に書いてみろ。

924 :デフォルトの名無しさん:02/07/08 20:06
>>923
そう苛めてやるなよ。

> ガウスジョルダン法でやるんですか?

とか言ってる時点で分かってないことがバレバレなんだからさ。
今頃必死になって教科書を見直してるんだよ >>911 は。

925 :911:02/07/08 20:32
#include<stdio.h>
void main()
{
int mat[3][3],a,b,c,d;
for(a=0;a<3;a++)
{
for(b=0;b<3;b++)
{
printf("mat[%d][%d]=",a,b);
scanf("%d",&mat[a][b]);
}
}

for(c=0;c<3;c++)
{
for(d=0;d<3;d++)
{
printf("mat[%d][%d]=",c,d);
scanf("%d",&mat[c][d]);
}
}
}
ここまではあってます?

926 :デフォルトの名無しさん:02/07/08 20:35
>>925
何があってるのかあってないのかがわからん。

927 :デフォルトの名無しさん:02/07/08 20:36
>>925
多分間違ってはいないからつづけてください

928 :デフォルトの名無しさん:02/07/08 20:40
925のやと、なぜforの二重ループが2つあるのかが不明ダナ……

929 :911:02/07/08 20:40
行列の掛け算てfor文でやるんですか?

930 :デフォルトの名無しさん:02/07/08 20:44
3次元同士ならfor使わんでもやれるが、forを使えば次数を変えたとき
対応が楽。どちらでもお好きなほうで

931 :911:02/07/08 20:46
>>930
forを使わないとかなり大変じゃないですか?

932 :デフォルトの名無しさん:02/07/08 20:49
>>931
そう思うなら、forを使いなされ。

933 :911:02/07/08 20:54
>>932
誰かヒントください。


934 :デフォルトの名無しさん:02/07/08 20:55
>>933
2次正方行列同士の積を、for使わずに書いてみてよ

935 :デフォルトの名無しさん:02/07/08 21:08
>934
一瞬テンプレートで生成できないか
考えてしまったではないか。

936 :911:02/07/08 21:25
>>934
できない・・・

937 :デフォルトの名無しさん:02/07/08 21:30
このファイル はCで書かれたプログラムの断片です.
これを理解しやすい形に書き改めなさい.
こういうのがありますが、全然わかりません。何をしたいプログラムか、どういう点が「理解しずらい」のか、「理解しやすい形にする」という観点で、
ヒントだけでも教えていただけませんか?
ソースは>>936に書きます。


938 :デフォルトの名無しさん:02/07/08 21:31
>936

C = A x B (2次元)

としたとき

C[0][0] = A[0][0] x B[0][0] + A[0][1] x B[1][0]
C[0][1] = A[0][0] x B[0][1] + A[0][1] x B[1][1]
C[1][0] = A[1][0] x B[0][0] + A[1][1] x B[1][0]
C[1][1] = A[1][0] x B[0][1] + A[1][1] x B[1][1]




939 :デフォルトの名無しさん:02/07/08 21:31
while(A) {
if(B) continue;
C;
}

do {
if (!A) continue;
else B;
C;
} while(A);

if(A)
if(B)
if(C) D;
else ;
else ;
else
if(B)
if(C) E;
else F;
else;

while( (c=getchar()) != '\n') {
if( c==' ') continue;
if( c=='\t') continue;
if( c<'0') return (OTHER);
if( c<='9') return (DIGIT);
if( c<'a') return (OTHER);
if( c<='z') return (ALPHA);
return (OTHER);
} return (EOL);


done=i=0;
while( i<MAXI && !done) {
if( (x/=2)>1) {i++; continue;}
done++;
}

{
if(A) {B; return;}
if(C) {D; return;}
if(E) {F; return;}
G; return;
}

plusflg=zerolfg=engflag=0;
if(a>0) ++plusflg;
if(a==0) ++zeroflg;
else if(!plusflg) ++negflg;


940 :デフォルトの名無しさん:02/07/08 21:32
>>937
>>936

941 :デフォルトの名無しさん:02/07/08 21:32
>>939の続きです。
i=0;
while( (c=getchar()) != EOF) {
if(c!='\n' && c!='\t') {s[i++]=c;continue;}
if(c=='\n')break;
if(c=='\t')c=' ';
s[i++]=c;}

if(x!=0)
if(j>k) y=j/x;
else y=k/x;
else
     if(j>k) y=j/NEARZERO;
else y=k/NEARZERO;

942 :937:02/07/08 21:33
ごめんなさい、>>939>>941です。
どうかよろしくお願いします。

943 :デフォルトの名無しさん:02/07/08 21:35
|a b ||e f |  |ae+bg af+bh |
|c d ||g h| = |ce+cg cf+dh |

というか、コレを理解していれば
簡単に作れるのではなかろうか。

944 :938:02/07/08 21:35
なんかコメント欲しかった。

945 :デフォルトの名無しさん:02/07/08 21:35
>>943
ちなみに行列式のように見えるが、行列の積ということにしておいてくれ

946 :911:02/07/08 21:39
>>938
ありがとうございます。
3次元の場合は長くなりますけどなんかいい方法ないですか?

947 :デフォルトの名無しさん:02/07/08 21:41
>>946
まず、2次元の場合をforで書き直す。
(それから3次元に拡張すればよいので)

948 :デフォルトの名無しさん:02/07/08 21:46
>946
A * B なら、Aの要素は縦に、Bの要素は横に見ていく

949 :デフォルトの名無しさん:02/07/08 21:48
>948
ごめん、逆

950 :937:02/07/08 21:49
誰か、、、HELPぅー

951 :デフォルトの名無しさん:02/07/08 21:57
>>911
ところでさ、 >>925 では 3*3 の正方行列同士の積しか
考えてないようだけど、やりたいのは 3*3 の正方行列A と、
ある行列B との積なんでしょ?


952 :デフォルトの名無しさん:02/07/08 21:58
>>950
インデントすれば見やすくなるんじゃない?

953 :デフォルトの名無しさん:02/07/08 22:00
>>952
そういう問題か (w

954 :911:02/07/08 22:00
>>951
そうだった・・・。

955 :デフォルトの名無しさん:02/07/08 22:02
>>765

for(i=0 ; i>(i+1)/2 ; p++)
j=a[p];a[p]=a[i-p];a[i-p]=j

でいいんじゃん?

956 :937:02/07/08 22:02
>>952
レスありがとうございます。
インデントはもともとされてるんです。
コピペした時に、ずれちゃったようで・・・
ソースはこちらです。
ttp://mitss5.mit-s.otaru-uc.ac.jp/ss/puzzle4.c

答えを教えてくれ、なんて都合のいいことはいいません。
ただ話の取っ掛かりだけ、「理解しやすい形」という方向性だけ教えていただけませんか?
(本当は答えも教えてくれると助かるけど、それじゃ力になりませんものね(苦笑))

957 :デフォルトの名無しさん:02/07/08 22:02
>>954
A[3][3] * B[3][X] = C[3][X]
あんまり気にしなくても良いと思うがな

958 :デフォルトの名無しさん:02/07/08 22:03
そろそろ新スレの時期?
前にでてきた>>719-732あたりはテンプレにいれるの?

959 :デフォルトの名無しさん:02/07/08 22:04
登場人物の相関図って昔つくってなかったけか。

960 :デフォルトの名無しさん:02/07/08 22:05
>>959
誤爆?

961 :937:02/07/08 22:09
すみません、今になって>>719-732のテンプレ読ませていただきました。
わかると思いますが、もう一度書きます。
>>956はCで書かれたプログラムです。
自分の実力は、、、全然ないんです(汗
大学の授業でCをやってるのですが、とにかく変な授業で、
履修している学生が全くプログラム関係をやるのが初めてなのに、
ろくに文法も説明せず、たんたんと演算式ばかりやっています。
そして出た宿題がこれで。。。

962 :957:02/07/08 22:10
分かっているとは思うが、意味を取り違える可能性のある
書き方だったので書き直しとく。

(3*3)の行列A × (3*X)の行列B = (3*X)の行列C

963 :デフォルトの名無しさん:02/07/08 22:15
>>959これ?
http://pc.2ch.net/tech/kako/1007/10079/1007902384.htmlより
938 名前: デフォルトの名無しさん 投稿日: 02/01/22 21:48

登場人物&過去スレ

●お姉さん
あなたの宿題、お姉さんが答えます
http://piza.2ch.net/tech/kako/972/972032579.html
で登場。

●麻衣
お兄ちゃんの宿題、私が答えるよ
http://pc.2ch.net/tech/kako/982/982853418.html
で初登場。可愛い妹キャラ

●お兄ちゃん(名称不明)
宿題見てやるよ
http://pc.2ch.net/tech/kako/1003/10038/1003838158.html
で初登場。しかし、女性がいいという影の圧力により
1以外には登場せず。

●怜
宿題みてあげるっ
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
で初登場。お兄ちゃんの恋人。
結構親切に答えてくれる年上キャラ。

>>961
>>718を読め。


964 :911:02/07/08 22:18
あ〜〜いくらやってもエラーです。
誰か教えて下さいよ〜。


965 :デフォルトの名無しさん:02/07/08 22:20
>>963
追記
●えれな
宿題、手伝おっか?
http://pc.2ch.net/tech/kako/1011/10117/1011722640.html
で登場。お兄ちゃんのおさななじみ

●美砂子
あらあら、宿題なのね
http://pc.2ch.net/test/read.cgi/tech/1020785918/
で登場。えれなの母。持病で急死

●恭祐
ほう、宿題とはな。
http://pc.2ch.net/test/read.cgi/tech/1024592344/l50
で登場。えれなの父。美砂子の旦那。

966 :デフォルトの名無しさん:02/07/08 22:20
>>964
そのソースを書いてみ

967 :デフォルトの名無しさん:02/07/08 22:23
女キャラがいいという意見が多いから、次はえれなの姉妹とか?
名前は香苗(個人的願望)

968 :デフォルトの名無しさん:02/07/08 22:24
・質問内容がちゃんと日本語になっていること。
・自分で頑張る意志、もしくは自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
・できれば、自分の実力を書くこと

こんくらい?

969 :デフォルトの名無しさん:02/07/08 22:25
>>968
・言語名を入れること
・マルチポストしない

970 :デフォルトの名無しさん:02/07/08 22:26
ソースを書き込むとき、TABを全角空白数文字分と
置換するなどして見やすくして欲しい

971 :デフォルトの名無しさん:02/07/08 22:27
誰かまとめてみませんか?(けっこう大変そう)

972 :デフォルトの名無しさん:02/07/08 22:27
美砂子さんって恭祐さんが現れたあとに、他板でQAスレ作ってたね。
ホントは離婚なんだろう。えれなちゃんが「私って捨てられたんだ」
とかいじけないように死んだことになっているんだろうな。と、話を進めてみる。

973 :937:02/07/08 22:33
>>965
頑張ってみます。
教えてぽーんっ★








ダメジャン

974 :デフォルトの名無しさん:02/07/08 22:33
>>973
氏ね

975 :デフォルトの名無しさん:02/07/08 22:37
>>939
なんとなく分かってきた・・・
空行で区切られている部分ごとが1つの問題になっている訳ね。

while(A) {
    if(B) continue;
    C;
}

だったら

while(A)
    if(!B) C;

に変換できるとか。

それにしても、こんな下らん問題ばっか考えてる講師の
授業受けてる学生は可哀相だな。

そんな事してたって、何の役にも立たんぞ。
そんな学校やめちまえ。

976 :デフォルトの名無しさん:02/07/08 22:40
美砂子さんの妹登場がうれしいな。

>>937
たとえば、こっちのほうがわかりやすいかな。
とかそんな感じなんじゃないの?
if (A) {
  if (B && C)
    D;
}
else if (B) {
  if (C)
    E;
  else
    F;
}


977 :デフォルトの名無しさん:02/07/08 22:43
リファクタリングの講義であるとかごまかしてそうだ。

978 :911:02/07/08 22:57
>>975
俺はわかってこない

979 :デフォルトの名無しさん:02/07/08 22:59
>>978
誰よ?オマエ

980 :デフォルトの名無しさん:02/07/08 23:05
>>979
911じゃね?

981 :デフォルトの名無しさん:02/07/08 23:07
>>980
誰よ?オマエ

982 :デフォルトの名無しさん:02/07/08 23:10
>>978
すげー大雑把に言えば、「セミコロンを減らせ」って
問題だと考えていいと思うが。

983 :デフォルトの名無しさん:02/07/08 23:12
>>982
行列の問題で? (w

984 :937:02/07/08 23:13
>>975
>空行で区切られている部分ごとが1つの問題になっている訳ね。
そうでしたか(汗
それすらもわからないという罠。
もうダメかなぁ。
とりあえず文法書買ってきて眺めてますが、全然理解できない。
演算子と演算練習しかやってないのに、どうしてこんな問題出すかなぁ。

985 :デフォルトの名無しさん:02/07/08 23:15
>>984
いつ提出よ?

986 :デフォルトの名無しさん:02/07/08 23:16
>>984
ダメダメなのは講師だという罠。

・・・いや、マジで。

987 :デフォルトの名無しさん:02/07/08 23:20
        ☆ チン  〃  Λ_Λ    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) <  次スレまだ〜?
             \_/⊂ ⊂_ )   \_____________
           / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄| 


988 :かおる:02/07/08 23:21
次スレたてました。

宿題とか手伝えます
http://pc.2ch.net/test/read.cgi/tech/1026138039/l50

989 :937:02/07/08 23:22
>>985
提出は金曜日です。
今までの講義は、「Cパズルブック」という本で、
演算パズル系の問題しかやっていません。
今回の宿題のレベルがどれくらいかわからないですが、
今から文法を学んでも間に合わない!?

990 :デフォルトの名無しさん:02/07/08 23:25
埋めるか。

991 :デフォルトの名無しさん:02/07/08 23:26
1000取り合戦

992 :デフォルトの名無しさん:02/07/08 23:26
マターリ

993 :デフォルトの名無しさん:02/07/08 23:28
マターリ993

994 :デフォルトの名無しさん:02/07/08 23:28
マターリ

995 :デフォルトの名無しさん:02/07/08 23:29
マッタリ

996 :デフォルトの名無しさん:02/07/08 23:30
マターリ996

997 :デフォルトの名無しさん:02/07/08 23:30
人いない?

998 :デフォルトの名無しさん:02/07/08 23:31
マターリ

999 :デフォルトの名無しさん:02/07/08 23:31
マターリ

1000 :デフォルトの名無しさん:02/07/08 23:32
1000

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

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

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)