1 :
デフォルトの名無しさん :
02/06/21 01:59
急死したのかよ
>>1 女の身内と交代してください。
若い方がいいです。
もしかして本当なのか?ご愁傷様。 取り敢えず、他のスレでは頭から相手にしてもらえないような 初心者を育むべく頑張りましょう。
「『他のスレでは頭から相手にしてもらえないような』初心者」を育む??? 勘弁してくれ。。。
男か。まぁ、男にも穴はあるしいいな。 早くケツ出せ
実は鮫島葵級のロリプニオヤジ
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 レスありがとうございます♪どこにいれればいいですか??
>8 最初から分かれているから繋げなければよい。
8はここもム板だってことに気づいてないのか?
>>8 どこに入れたらいいかわからないということは、現在の
プログラムを理解していないということだろう。
そんな状態で「姓と名の分け方(文字列の分割)」を聞いたところで仕方ない。
君が今学ばなくてはいけないのはCの基本文法からだ。
それができないならプログラマに向いてないからあきらめたほうがいい。
(11-12が言ってるのはそういうこと。)
17 :
オナニー伯爵 ◆qmiH3ekA :02/06/21 14:41
美人の娘とかにしろよ。親父でてくるならかあちゃん復活させろ。
>>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 そこまで出来てて、そんなことが分からないってことは、
どうせそれも人に教えてもらったんだろ。
友達に、飯でもおごって教えてもらえや。
なんで0で割ると0なんだよ。
>>25 まあ、それを信じて一ついいこと教えてあげよう。
scanf("%c\n",&enzansi);
の下に...
printf("DEBUG: su1 = %d, su2 = %d, enzansi = %c (%x)\n",
su1, su2, enzansi, enzansi);
を追加して、コンパイル/実行してみな。たぶん「なんで!?」って思う
から。
>>19 scanf()を使ってるところを
fgets()とsscanf()の組み合わせに置き換えてみな。
char s[100];
fgets(s, 100, stdin);
sscanf(s,"%d",&su1);
確かに自力でやってると思う
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の設定が行われない。
→初期値のままになる。→初期値未設定。これで警告が出るかもね。
標準入力ストリームのことがわからないと混乱するかも。
しかしそれ以上に俺の説明が悪い罠。
>>28 警告は、
「warning C4244: '=' : 'int' から 'float' に変換しました。データが失われているかもしれません。」
こんなんがでます。
一応実行して四則演算できるようになりましたが、演算子を入力してから、何か入力してからエンターを押さないと
結果が表示されません。
scanfを使わないっていうのが一番いい方法なんだが。 (おそらく)望んでいる動作はあまりおすすめできない方法ならないこともないが・・・。 警告はそのまま「 'int' から 'float' に変換しました。」 明示的にキャストしろと言うことだ。
>>30 >明示的にキャスト
ってどういうことですか?馬鹿のわかるように教えてください。
すいません。
>>31 (゚∀゚) お前がすっとろいことしてっから、
コンパイラがかわりにキャストしてくれたんだよ。
これからは自分でしっかりキャストしろってこと。
マルチだったのカー・・・
ダメだよ、答え教えちゃ。詩文でやんないと身につかないよ。まあ、scanf() は
落とし穴いっぱいだから、一応ヒントの意味で
>>26 書いてんだからさ。
> →初期値未設定。これで警告が出るかもね。
でるわけねーだろ。それやるなら実行時の検査がいるぞ。Cインタープリタとか、
教育用の特殊な処理系でないとそんな事やってないよ。
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
37じゃないが、
>>38 が何を言いたいのかわからない。
>>37 って間違ってないと思うんだけど。
あえていうなら誤字はあるが。
>>38 はアドレス渡しが理解できないに100カノッサ。
>>37 ごめんよ(´・ω・`)。でもscanfの動作はかなり難しいから、
初心者に自力で理解できるはずもないと思って・・・
>でるわけねーだろ
さすがにそこまで賢くないね
アドレス渡ししたら変更があったと考えていいのか
scanfの動作から、特別に警告出すコンパイラがあってもおかしくないかなと思った。
# printfは特別な警告が出るし
コンパイラいってくれれば(俺の知ってるのなら)こんな間違いはしねーんだけどさ
>>31 ぐぐることくらい覚えろ。「C言語 明示的 キャスト」
42 :
デフォルトの名無しさん :02/06/21 23:25
ヾ(≧▽≦)oきゃはは バッカじゃねーの(ププ
>>41 確かに、scanf() の挙動って理解しにくいし、はっきり言って実務で使えない
から覚えても無駄なんだよね。だから、俺は
>>19 に scanf() の動きを覚えて
もらうというより、とにかく自分で
>>26 に書いてあることをやって、何が起き
てんのかを知って欲しかったんだよね。(まあ、デバッガ使えりゃそれでもいいん
だけどさ。)
> scanfの動作から、特別に警告出すコンパイラがあってもおかしくないかなと
> 思った。
と言うか、警告出すべきかどうかが実行時に決まるから、コンパイラがエラーを
出すのことはできないよ。「printfは特別な警告が出るし」と言うのは、フォー
マット文字と変数の型が違う時だよね。これは、コンパイル時に決まるし
scanf() でも、フォーマット文字と変数の型については警告を出すこともできる
と思うよ。(実現している処理系があるかどうかは知らないが...。scanf()
なんて普通使わないからね。) でも、char s[xxx]; printf("%s", s); で、s[]
の中身がぐちゃぐちゃかもしれないから警告出すなんて言われたら、ウザクて
やってられないと思うよ。
>>39 > あえていうなら誤字はあるが。
詩文でって何だよ !? > 俺
ちょっと恥ずかしいな。でも見てる奴の 99% は、前後の文脈から「自分で」と
解釈してるよね...。
>>44 gccにある-Wuninitializedオプション、
あれで、scanfにアドレス渡ししても値を設定しただろうと判断しなくてもいいかな、と。
そーゆーのはさすがにないですかね。
個人的にはscanfに警告出して欲しいところ。
そうすれば学校でscanfなんて教えないだろう。
>詩文
かな入力派ですね
>>45 だーかーら、アドレス渡しした変数に scanf() が値をセットするかどうかは、
実行時の入力によって決まるんだからコンパイル時に判断するのは無理。
警告を出すというのもあるけど、毎回警告がでるからウザイだけ。
(あくまでも、
>>28 の話だよ。scanf("%d", &a, &b); なんて時にエラーに
するとか言うなら、可能だと言うのは
>>44 に書いた通り。)
> 個人的にはscanfに警告出して欲しいところ。
> そうすれば学校でscanfなんて教えないだろう。
学校で教えるなら「scanf() は使うな。fgets() + sscanf() でやれ。」と
教えて欲しい。欲を言えば、使うべきでない関数を取り除いたヘッダーファイルと
ライブラリ (+対応したマニュアル) で、やって欲しい。
> かな入力派ですね
やっぱりばれましたね。まあ、'J' と 'S' はあんまり打ち間違えないからね。
>>46 分かってます。
>>28 は、コンパイラを書かなかった皮肉と、初期値設定はした方がいい
ってのを遠まわしにいったつもりなんです(´・ω・`)
>警告を出すというのもあるけど、毎回警告がでるからウザイだけ
だからオプショナルだと・・・(´・ω・`)
(;´д⊂)モレノマケデス
学校教育に不満があるのは、このスレの住人には当然ですかね
26って粘着馬鹿?
馬鹿は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 系関数を使いこなせない人間」が使えないのな。
そこの区別はしっかり頼むよ。
初心者には勧められないのは同意。
scanfとfscanfは使えないと思うけど。
printfさえあれば他はいらん。
学校では見事に入力はscanfやgetsだったな・・・
>>32 厳密に言うと暗黙の型変換とキャストは違う
共通してるのは「型変換」という点
それにキャストしないと警告が出るからキャストするというのは 本末転倒なような 本来警告が出るべきケースまでキャストで警告が消えてしまって 実行時まで気づかない罠とかありそう
59 :
デフォルトの名無しさん :02/06/22 11:53
自分で関数の定義しろとか書いてあるがなんですかこれは?
>>47 >
>>28 は、コンパイラを書かなかった皮肉と、初期値設定はした方がいい
> ってのを遠まわしにいったつもりなんです(´・ω・`)
コンパイラ (≒処理系) を書かなかった皮肉と言うのはちょっと意味不明なんだ
けど (一応 ANSI 準拠で進めて OK だよね。あと、
>>29 のエラーメッセージから
多分 VC++ だろうと想定してるし。)
初期値設定をした方がいいと言うのには同意。
>>50 そうそう、そんな感じ。もう作られたプログラムは仕方ないけど、
新規の奴には使うなって感じ。
>>52 scanf() って、初心者には勧められないし、初心者じゃない奴は
普通使わないんじゃないの ? 使う機会ってあんまりないような
気がするけど...。まあ、自分しか使わないようなツールとか
ぐらいならありうるけどねぇ。
>>55 まあ、アルゴリズムとか教えてる時に入力とかに凝ってられないとも
思うんだけど、実用プログラムって入力が一番大変で重要だったりするから
そこのところもちょっと配慮して欲しかったりする。
>>58 > それにキャストしないと警告が出るからキャストするというのは
> 本末転倒なような
激しく同意。(コンパイラの) 警告/エラーが消えればプログラムが正しく動くと
思っている奴が結構多いと思う。キャストはダメだよと言うと union で
書いてきた奴がいて唖然としたことがある。
i8080AでメモリのXX,YY,ZZ,WW番地の内容を交換する(逆順にする)プログラムを作るにはどうすればいいですか?よろしくお願いします. 下のに付け足すのですが使うのはLXI,MOVだけみたいです. LDA WW ここに書き足す HLTXX: DB 1 YY: DB 2 ZZ: DB 3 WW: DB 4 END
8080なんて知ってるやついるか?
LXIってレジスタに値を代入するニーモニックか?全然わからん。
まあ、主要な命令は Z80 に引継がれてるし、そもそもこの問題自体が 難しいわけじゃないからなんとでもなるけど... 1. 既に i8080 のニーモニックを覚えていない 2. どう見ても田舎の工業高校あたりの宿題にしか見えない 3. こいつはマルチで質問する不届きもんだ (これ見るの三つ目だ) だから、無視するがよろし。
>>65 ここは宿題スレだから 2 は問題ないだろ。
68 :
デフォルトの名無しさん :02/06/22 16:46
もしかしてほんとに
>>62 解ける人いないかもしれないな
8086ならなんとなく覚えてるが、8080なんてしらん。
>>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
あっそうか。 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 でもいいな。
>>72 は忘れて下さい。MOVでなくてLDA, STAになってしまう。
8086に慣れきってしまっとる。
>>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
2バイトの交換を2回やるんだから、MOVは4*2回で済むと思われ。 にしても、わざわざLXI使えっていう問題の意図がわかるひとの解答きぼん。 INRとかXCHGとか使えるならわかるんだが…
>>74 それは 0123 を 1032 にしてるような…
問題は 0123 を 3210 にしたいんでないのか?
あ、ペアレジスタにイミディエート値入れるのはLXIなのか、すんまそん。
78 :
デフォルトの名無しさん :02/06/22 18:01
AVL木の挿入部分を実装するのですが,完全に詰まっています もとになる2分木の実装は終わったのですが... 1)新しい要素を挿入したとき,木のバランスが崩れているかどうかを 判断する方法が分かりません 2)(1)においてバランスが崩れたと判断したときに,そこから回復する 方法の実装の仕方が分かりません ヒントだけでも良いので,お願いします
79 :
デフォルトの名無しさん :02/06/22 18:37
rewind(stdin); で全て解決しました。 みなさん、大変ご迷惑をおかけしました
>>78 思いつきで書かせてもらうと、
あるノードにくっついてる木の大きさをノード毎に記録する事で、
バランスが崩れている事がわかる。
バランスが崩れているノードがあれば、
そのノードを少ない方の木に挿入して、木をマージするという動作を繰り返せば
いいのでは?
>>81 AVLはつりあってるかどっちかが一つ大きいかだけじゃなかったっけ。
>>85 rewind(stdin); はstdinのバッファを捨てるんじゃなかったっけ
リダイレクトで暴走確定
つーか、シークできないデバイスに対するfseek()はシステム依存。
89 :
デフォルトの名無しさん :02/06/23 07:52
n個の数字でできるすべての順列を表示するにはどうしたらいーの?
こんな時こそ数学の出番だ
>>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
>>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++ なのかよくわからんようになって
しもうた。
>>94 挑発に乗って答えを書くほど悪くはない
質問しなおしゃ答えてやるのに
アセンブラ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
>>96 「書かない」じゃなくて「書けない」だろ ? ププ
頭悪いことを何回も表明しなくていいぞ。
>>97 宿題そのまま書かないで、ちょっとは自分で考えろ。
>>98 確かに私も「俺なら再起でやる」としか書けません
残念ながらシックスセンスはもってないので
早とちりしてCで答えてるやつ等もいるけど
挑発してる暇があったら質問書き直せ
まあ厨の質問なんて誰も教えてくれないだろうけど
>>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())) ;
}
103 :
デフォルトの名無しさん :02/06/23 15:53
必死な奴が一人紛れこんでるな。 しかも煽るの下手だし。 晒しとこう。
104 :
デフォルトの名無しさん :02/06/23 16:04
晒し上げだゴルァ(゚Д゚#)
105 :
デフォルトの名無しさん :02/06/23 16:18
>>96 まあ、落ち着けや。
宿題を他人に教えてもらってそのまま提出したところで
結局本人が得する訳じゃないのは分かっているのだから、
気が向いたなら、挑発に乗って書いてやってもいいのでは?
むしろ相手の役に "立ちたくない" なら書いてやるのが吉。
(ただし、面倒臭いなら書く必要なし)
それとも、頭わるそうっていう発言を気にしているの?
どちらが頭がわるそうかは傍目から見ても明らか。
それほどこの板の人間(一部を除く)は馬鹿じゃないよ。気にするな。
>>105 おまえは答えられないだけだろ。この屁理屈野郎
>>106 答えてやればいいじゃんって意見を煽るお前のバカさ加減を是非とも分析したい。
89ですけど、以降の煽りは私じゃないです・・・。 なんだか、誤解の招く書き方して申し訳ないです。 n個の数字でできる順列を計算するプログラムは作れたんですけど、 順列を全て表示するプログラムができなくて。 ↑これでもわかりにくいですね(汗 例:(n=3として)3!=6 ていうのはできるんですけど。 123 132 213 231 312 321 と表示するのができなくて教えて欲しかった・・・。 嫌なムードの元を作ってすみません。
>89 101さんのじゃだめなの?全部に1足せばまさに89さんが望んだものが 得られるのでは?
Java限定ということですか?
>>109 > n個の数字でできる順列を計算するプログラムは作れたんですけど、
> 順列を全て表示するプログラムができなくて。
「計算できて、表示できない」ってどういうことだ ?
> 例:(n=3として)3!=6 ていうのはできるんですけど。
そりゃ階乗じゃねーのか ?
> 嫌なムードの元を作ってすみません。
>>91 みたいなバカはほっとけ。それより、何がしたくて何がわからない
かちゃんと書け。
同じ学校のヤシらかな
プログラマーの皆さまお疲れ様です。 不動小数点の質問なんですが、 「2014」の4桁をXとし、Xを2バイトの 符号付整数として表せ。と言う問題と XをIBM方式により浮動小数点として表し 32ビットで表せ。と言う問題が良く解かりません どなたか解説をお願いします
不動なの?
>>115 なめるな。
> 「2014」の4桁をXとし、Xを2バイトの符号付整数として表せ。
これもわからないんだったら首釣って市ね。
宿題手伝ってもらえませぬか?(prolog)
2バイトで表すって単に2014→0x07DEってことかな。 浮動小数点数のIBM方式はサパーリ
↓の[]内の文字を打ち込むと、次の[]までが表示されるようなプログラムをprologで作りたいんです。 ?-[add.] Input=[あ.] 1件 Input=[い.] 2件 Input=[う.] 3件 Input=[end.] 現在3件です あ い う 以上
恭祐さんて誰?
スレを重ねるごとにスパルタになっているぞ。 麻衣よ帰ってきておくれ。
答えるどころか罵声を浴びせるような奴が、なんでこのスレを見てるのか疑問だ。 黙ってるか見なけりゃいいのに。
ああ、恭祐ってここのおやじか。
レベルの低い奴がもっとレベルの低い奴を罵倒するためにここに居る罠
アフォ ◆mxnad08k が完全にシカトされてる罠
>>123 今、マイちゃんはボーイフレンドに夢中で、お兄ちゃんにかまってる
ヒマはできません。
>>113 >何がしたくて何がわからないかちゃんと書け。
>>91 は正にそれを言ってるんじゃ・・・
よーするに回答者を煽って人口減らそうとしてるやつが紛れ込んでるってことだな
130 :
デフォルトの名無しさん :02/06/23 22:05
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
>135 ポインタと-1は比較できないんでは?
>>135 > t->left!=-1
原因はコレではないでしょうか?
139 :
デフォルトの名無しさん :02/06/24 00:25
問題が、ノードが無い時は‐1を入力するとなってるのです。 こういうときはどうやって比較すればいいのでしょう?
-1を入力するのはいいけど、ポインタに-1を入れるのはいただけない。
141 :
デフォルトの名無しさん :02/06/24 00:31
>141 numに-1を入れるのはいい。それならなぜleftやrightと-1を比較する?
143 :
デフォルトの名無しさん :02/06/24 00:40
ああ、そうか! とりあえず警告は消えました! でもやっぱり実行結果は上手くいかないっす・・・ 最初の入力を求める時に Input data [0: depth = 0] of a left node = と出てしまうのですが・・・
>>143 直したソースを示してくれないと、誰も何とも言えんがな。
>>135 動くかどうかは別として、(struct Data *)-1 という風にキャストしてから
比較するとエラーは出ない。
でも、設計をしっかりしないと、バグの泥沼にはまるぞ・・・・
146 :
デフォルトの名無しさん :02/06/24 00:46
>>146 Data->leftもData->rightも初期化されてないので、俺の環境では
Access Violationが出るよ。
mallocで確保した領域は自動変数と同じで不定値が入っているから、
確保した後は必ず初期化しよう。それかcallocで0で確保するかだな。
148 :
デフォルトの名無しさん :02/06/24 01:04
topのleftやrightもNULLクリアしてる?
>>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
ああ、そうだった! なんとか表示はうまくなりました。 でも例と入力の順番が違う・・・ ループの仕方がおかしいんだろなぁ・・・
てかデータを全部いれ終わる前に終わる(爆)
>>151 正直、ゼロから作り直したほうが、かえって早くできるかも
>154 いや、ゴールに近いため、かえって間違いを探しにくいんじゃないかと。
再帰関数を作るときは、挙動と呼ばれる順番をよく考えてみよう。
ああ、原因はわかりました。
一つ目のifでデータを左右に作ると
2つ目のifで絶対rightがあるから絶対ひっかかってしまうんですね・・・
うーん、どうすりゃいいんだ・・・
>>156 挙動とはなんでしょう?
>>157 再帰関数は、自分自身を呼び出しているので、パッと見、どういう
風に動くのか、判断しにくい。
だから、再帰関数に渡されるパラメータをその都度表示するなど
して、挙動をつかんでおくと、デバッグが容易になりやすい。
もっとも、頭の中で挙動がイメージできにくい場合、無理にプログ
ラムしても、変な動きをして、泥沼にはまってしまう場合が多い。
なんでGenTreeでc++を渡しているの?
1個下の階層に行くのでdepthの表示をあげるためのつもりなんですが・・・
c+1じゃだめなん?
c++だと、1足す前の値が渡される。
そうなのか・・・ っていうかさっきから名前欄に何もいれてなかった、すんません(^^;
c+1にすれば、depthが増えない問題は解決するかと。
>>166 あ、それは解決しました、ありがとうございます。
次の問題は-1いれても-1のleftを聞いてくることだぁ。
なぜか90なんて表示が出て来たりする・・・
ぎゃあああ!できたぁああ!(爆) ありがとうございました〜〜! 今週中にまた次の問題を聞きに来ると思うのでよろしく(笑)
そりゃあ、 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が呼ばれるからでは?
いやん、おそかった。
if(t->left!=NULL && (t->left)->num!=-1) は if((t->left)->num==-1) return; else if(t->left!=NULL) では?
>171 leftがNULLの時に死ぬんじゃ?もう終わったみたいだからあれやけど
というか、GenTreeが呼ばれるときは必ずnum != -1で、 t->left == NULLのように思うのですが…どうでしょうか?
>173 あ、そうかも。 でもなんとなくテストしないでポインタ使うと気持ち悪くないですか?
/ /ヽ丿彡彡彡彡彡ヽヽ | 丿 ミ | 彡 ____ ____ ミ/ ゝ_//| |⌒| |ヽゞ |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
178 :
デフォルトの名無しさん :02/06/24 12:15
>178 作りかけのを貼ってみたら?
>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 じゃないの?
>>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ってできる?
>>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).
その前に、お返事ありがとうございました! あと1時間で提出なので、放置状態承知で きてみたのですが、よかたです。 ほんとにありがとうです。
ごめん、まちがえた
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
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たら? ・文章の意味がよくわからん ・厨を自称しないほうがいい
>>188 文字列の2進を数値の16進にするということ?
>>188 どこらへんがわからない?
1.の問題が出来るなら2.も出来ると思うけど、何でつまづいてるのか教えてくれ。
188のこのレスポンスの悪さは、もしかしてここを宿題の「すべり止め」的 に使用する気か?
>>188 stdin2int(){int c,a=0;while(31<(c=getchar())&&c!=EOF)a+=a+(c=='b');return a;}
>>192 2ch を本命にするはずないと思うけど...。
あ、すいません。ちょっとした勘違いでした。 問題の意味は文字列の2進を16進数で表すと言う意味でした。 ご迷惑おかけしました
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++で一次元と二次元で作るんですけど全く思いつきません
>>197 何をしたいのかもなにがわからないのかも分からない
うーむ、こいつぁ難問だ・・・ 下手するとなんとかの定理とかより難しいかもな(w
うずまき型で数字を出力したいのですが 手段として配列を使わねばならないのです。
久々のpuzzleだ・・・
アタック25〜
>>200 チミはまず質問の仕方から学ばねばならないようだね
その質問では、例え我々が答えを書いたとしても
「そうじゃない」と言われるのがオチだ
キタ━━━━━━━━━┓ ┏━━━━━━━┓ ┃ ┃┏━(゚∀゚)━!!!! ┃ ┃ ┃┃ ┃ ┃ ┃┗━━━━━━┛┃ ┗━━━━━━━━┛
ああ、この答えは全く分からないので「そうじゃない」 なんて言いませんよ。197のように出力するプログラムをC++で一次元配列の場合、 二次元配列の場合、それぞれ考えようっていう問題なんですけど。
1次元配列に 1,2,3,4,5,16,17,18,19,6 ・・・13,12,11,10,9 って入れて5個ずつ5回表示する。 2次元配列に5つの行の値を入れておいて、それを表示する。 って、こんなことじゃないよな。問題が良くわからん。
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");
>>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;
}
おまけだ。 #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; } こんなくだらないことしてないでそろそろ寝よう・・・
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; とか。
早押しクイズみたいだね。問題がわからないのに答えが出るとは。
for (i = 0; i < 25 ;i++) { 失礼こっち。
桁揃えようとして半角スペース入れたけど、2chでは反映されない罠・・・ 鬱駄寝よう・・・
じゃぁおれも #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" ) ); }
みなさん ありがとうございます
やろうとしている事は
>>206 だと思う。
で、その配列に入る値は、ハードコーディングではなく実行時に計算する、と。
for の組み合わせでできそうですな。1...nを順番に配列に入れていけばよい
わけだけど、そのときのインデックスをどうfor文でうまく計算するか。
(多分for文2個か4個でできる)
行・列数を簡単に増やせるようにしておくのが、宿題的にも吉だよ、と。
∧ ∧ | ̄ ̄( ゜Д゜) ̄ ̄| <みなさん。遅くまでありがとうございますた。 |\⌒⌒⌒⌒⌒⌒\ 214もありがとう。 | \ \ \ |⌒⌒⌒⌒⌒⌒⌒| \|________|
そして、多くの謎を残し、197は消えた・・・
#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; } やってみた。 冗長だなあ。もっとエレガントなのキボンヌ。
問題があまりにも分からなさすぎると逆に盛り上がる罠
>>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;
}
}
>>221 Σ(゜д゜lll)ガビーン
そうか・・・そうやって配列全部初期化できるんだっけ・・・
fill_nなんか使ってバカみたいだ
>>223 そうか・・・いちいち場合分けしなくても、xとyの増加量を順番に反転させてやればいいんだね。
思いつかなかった・・・
初期化は配列でも構造体でも最初の要素だけで全部できるよ。
漏れも最近知って、結構お気に入り。
でも、クラスには使えない罠。 std::string s[10] = {"hoge"}; //s[0]だけが"hoge"
forでくるくるくるくるとな
228 :
馬鹿な僕に愛の手を! :02/06/25 22:37
次の覆面算を何らかのヒューリスティックスを 用いて、枝刈りをしながら解け。 SEND+MORE=MONEY CROSS+ROADS=DANGER 一体どうすればいのでしょうか?アルゴリズムだけ でいいんで教えてください。
この問題を教えてください. 3×3行列Aに対し 1,Aを読み込みAの行列式を出力 2,Bを読み込みA×Bを出力 3,|A|≠0の時のA^(-1)を出力
231 :
デフォルトの名無しさん :02/06/25 22:46
BASICの完全数を高速で求めるプログラム教えてください 学校の宿題ででてるんだがわかないので・・・ 切実
nの階乗を求めるプログラムをCで作ってください・・・ むむむ・・
234 :
デフォルトの名無しさん :02/06/25 22:57
ありがとうなんですが・・・なーんかこれ分かりにくいんですが・・・
>>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
>>233 nのかいじょー
int result = 1;
int i;
for (i = 1; i <= n; i++)
result *= i;
>231 「BASICの完全数」って何サ?
238 :
馬鹿な僕に愛の手を! :02/06/25 23:25
>>238 まず普通に手で解いてみるとよいのでわ?
>237 完全数をもとめるBASICのプログラムってことだろ? 6とか。
>>237 は完全数を知らないのではないのでしょうか・・・。
奇数の完全数は、あるでしょうか。
>231 日本語がわかりにくいよ。 大体、「高速で求める」ってなんやねん? 高速道路で求めるんか?
>242 ないんじゃない?
>>242 発見したり、ないことを証明できれば有名になれるかも
#まだ未解だよね?
248 :
馬鹿な僕に愛の手を! :02/06/26 00:48
>>239 枝刈りのうまいやりかたがわかりません・・・
>248 枝刈りをしないバージョンはつくれたん?
>>248 まずは手で解けるようにならないと、プログラム上で枝刈りなんて
高等テクニックは使えないよ。
252 :
デフォルトの名無しさん :02/06/26 03:59
ノ ∧ /) ∧ 彡 ノW \从/V W \ ミ ( ノ | ノ \) ∩V 、、 | >V7 (eLL/ ̄ ̄\/ L/ ̄ ̄\┘/3) (┗( )⌒( )┛/ ~| \__/ | \__/ |~ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 爻 < | ; 爻 < ほう、宿題とはな。 ~爻 \_/ _, 爻~ \____________ ~爻__/⌒ ̄ ̄ ̄~~ヽ_ 爻~ / ー ̄ ̄\_ ̄\ _一‘ < ̄ ̄\\\J <\ ー ̄ ̄ヽ_ヽJ  ̄\_ \ _ニニニヽ ) ~\ \ _/⌒|\ ヽ_~~ ~⌒\_ __/~ V \_| ~\_
初心者なんですけど逆ポーランド計算を作るところで詰まってしまいました・・・教えてください
>>253 マジな話、その質問の仕方のレベルだったら、先生のとこ行って
教えてもらったほうがいいと思うぞ。
本当にわからないんです。お願いします・・・ 参考になるページだけでもいいので。
>>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 「_」はスペースの意味です。 誰か教えて下さい。
すみません。うまくいきませんでした。「凵vの形に直角になるはずなんです。 スペースとsの合計数は行ごとにn個になっています。 (例では5つ)
Javaで文字や文字列の連結のやり方は知ってますか?
>>258
すみません…よくわかりません…
Javaでループの書き方(forとか)は知ってますか? >> 258
それはわかります。ループをつなげればよい、 というのはわかるのですが…
すみません、途中で申し訳ないのですが、今から高校に行ってきます。 許してください。(遅刻するわけにはいかないので)
最後の質問です。 画面に文字を出力するやりかたは知ってますか? >> 258 これがyesなら、文字の扱い方を勉強すれば必要な 知識はそろいますよ。言語がなにかわからないので これでおしまい。 (今回は試しに一問一答形式で進行してみました。)
しまった、逃げられた。にしても20分ちょっとで 宿題の答えが欲しかったのか。すげー。
>>266 おい、言語Javaってはじめに書いてないか?
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
ダメなの?
>>272 だから和下欄と書いたじゃないか。
apiドキュメントを見ただけでJDKも入れてないので動くかどうかは和下欄し、
Java自体いじるの始めてでどうしたらいいか和下欄
Javaがわかんないんだろ。要件を満たしてないこととかんけーねーじゃん。
>>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); }
>>276 だから「うまく動かない」だけじゃなくてどう動かないか書けって
なんども言われてるだろう。
コンパイルできないのか、実行時エラーなのか、うまく抽出されないのか?
今回の場合、一度にやろうとせず
1.入力ファイルを読み込み画面に出力(TYPE/cat相当)
2.入力ファイルを読み、出力ファイルにそのまま出力(COPY/cp相当)
3.文字列の中にキーワードが含まれるか判定する関数を作る
4.2と3を組み合わせる(grep相当)
とステップアップしていくといいんではないかな?
(関数の作り方習ってないか?)
とりあえずな、ファイルがきちんと開けているか くらいは最低限チェックしろよ。 それとな、strstr使わないのもまあいいけれど、 文字列の終端子\0をキチンと考慮しろよな。
279 :
すいません、276です :02/06/26 09:57
<output file>と< keyword>の入力が同時に求められてしまうのです。 コンパイラはgccです。 よろしくおねがいします。
すくなくとも10000文字以上の行があって、lins3[0]と同じものが はじめて10000-num1文字目で現れたときに確保した領域の外を読んじゃうね。
「なんども言われてるだろう。」みたいな内容は恭祐さんが 1に書いておくべきだったなぁ。今度からテンプレ作る必要が あるかもね。
しまった、境界条件より先にfor(i = 0; i < 10000; i++){ に気づかない俺って... 駄目駄目だ。
cat inputfile | grep mojiretu > outputfile じゃ無理かな。よくわからん。
>>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;
}
>>276 line1とline2が10Byteって少なすぎないか?
最低でも8+3(拡張子)+2('.'と'\0')で13は必要。
ネスケのブックマークから抽出しようとフルパスと書くと
C:\Program Files\Netscape\Users\hogehoge\bookmark.htm
55byteは必要になる。80Byte程度はほしい。
>>283 grep相当の物を自分で書くというのが宿題(を出した人)の意図じゃないの?
>>279 gccはいってないから確認できないけど、入力でこけてるなら
fgets(line3, sizeof(line3), stdin);
の行よりあとを消して、確認してみれば?
それぞれの変数に何が入ってるか表示させてみたり、fgets以外の入力を使ってみるとか。
>>286 Group Regular Expression Print
REの部分は宿題としてどうかとw
何、2つ並べてかΣ(´□`||)
>>288 確かに宿題としては正規表現はヘビーすぎるな。すまん。
宿題スレでは既存コマンドと同等(の下位バージョン)を作る宿題が
たまにでるということを言いたかったんだ。
そういう質問に「○○を使えばできる」というのはネタとしてはともかく
回答としてはいかがなものかと。
(初心者スレかくだらない質問スレならそれで正解と思うけどね)
この場合は fgrep inputfile > outputfileだろう。
>>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の誤用は危険だと習ったのですが、 上の場合とはどのように違うのでしょうか?
Cのキャストはソース上で見づらい しかもどんな型変換もOKだった気がする ので私はC++のキャストを選ぶ
295 :
デフォルトの名無しさん :02/06/27 02:32
>>294 ありがとうございます。
ということはCスタイルのキャストはreinterpret_castと同じか
それ以上に危険ということでしょうか?
ものわかりが早いコって好きよ♥
297 :
くいずたいむしょっく :02/06/27 02:51
至急お願いします!! N88BASICなんですけどできますか? テーマ IF・・・THEN・・・ELSEを使う 1 X,Aを入力して、XがAの倍数か否かを表示するプログラムを作れ。 2 Nを入力し、2からNまでの素数を表示するプログラムを作れ。Nも表示し改行せよ。 素数はPRINT USING"#####"を用いて5桁で表示せよ
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使うと思うんですけど
BASICインタープリタ・・・Excel VBAか十進BASICしかねえよ・・・・
keyword:エラストテネスの篩 ついでに300ズダー
ヽ(`Д´)ノウワァァァン
>>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
つーか、BASICで配列を使う方法しりましぇん。 なもんで振るいアルゴリズムは実装できない。
dimとかじゃなかったっけ。
307 :
デフォルトの名無しさん :02/06/27 04:12
Cについて教えてください。 ある数群から条件に合う物だけ抜き出して配列に入れたいのですがその数群というのが数千個あり、その条件に合う物は高々数個から十数個で実行するごとに違います。 数千個の配列を用意してもいいのですが、もっとメモリ効率のいい方法を探しています。 条件に合う物を探す前にメモリ領域を確保しなければならないのでmallocも使えなくて困っています。 方法が有れば教えてください。
>>307 ・2パスにする(先に条件に合うものの数を数え,メモリ確保後に以下略)
・malloc,memcpyを繰り返す
・reallocを使う
・高々10数個なら配列サイズを20にすれば?
・線形リストを使い,あとで配列に変換
310 :
デフォルトの名無しさん :02/06/27 05:36
整列済みの整数データの重複を取り除くにはどうすればいいっすかね
>>308 バイナリー画像データから配列に入れるんです。
>>309 ・2GHzのマシンに計算させても2分ほどかかる計算なので2パスにすると計算量が。。。
・mallocを繰り返して使うやりかたがいまいちよく分からない。。。・この方法採用させていただきます。
・数百分の一の確率で数十個出たりするので固定はできないんです。。。
・リスト、スタックは考えたのですが、自分の脳味噌足りませんでした。。
ありがとうございました
>>312 ちなみに「数千個の配列」とやらは、何バイトぐらいになるの?
>>312 元の画像は破壊しちゃだめなの?画像配列内部で条件を満たすものだけ
前に持ってくるとか?
ひょっとして画像データの数千個の配列か?
>・mallocを繰り返して使うやりかたがいまいちよく分からない。。。・この方法採用させていただきます。 マズ最初にサイズ10の配列用意して、それが一杯になったらもうちょっと大きい配列 ようして、そちらに全部コピーする。
realloc()ならコピーまでしてくれる。
>>312 配列の要素がめちゃくちゃ大きいようだったら、
malloc,memcpyの繰り返し(もしくはrealloc)は時間がかかるぞ。
リストの配列化をオススメしる
・リストの数を数えて
・「要素へのポインタ」の配列を確保して
・順番に入れていく
qsortとか使う時によくやる
リストが分からないなら...この先苦労しそうだが...
>>312 2GHzで2時間って・・・さては宿題じゃなくて研究だな
ひょっとしてT研か?
| |ρ・)<2GHzのマシンで"2分" |
322 :
デフォルトの名無しさん :02/06/27 12:24
vectorに突っ込みまくれば?(w
323 :
お願いします :02/06/27 12:41
問題 始めに配列に文字列を入力します。 次に1文字入力をし、入力した配列の何番目にその文字があるのか出力せよ。 文字がない場合は”ありません”と表示する。 なお、配列中には同じ文字が何個入ってもかまいません。 文字列のサイズは100位ないとする。 勉強を始めてから2ヶ月経つのですがわからないです。 お願いします。
↓に、”質問の仕方から勉強しろ”とレスがつく予感
>>323 1.入力した(検索される)文字列を配列に格納する
2.入力した(検索する)文字を変数に格納する
3.配列の中身を1つずつチェックし2の変数の中身と同じかどうか調べる
どこまでできる?
(´・∀・`)
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)くらいです。
ネタはもう少し人が寄って来る話題を振ってください。 おながいします。
>>330 質問の仕方はここで聞かれても困ります。
小学校あたりからやり直してみてはいかがでしょうか?
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型の値を返す外部関数と見なします。
DQN.cs(7,4): error CS0103: 名前 'scan' は クラスまたは名前空間 'DQN.DQN' に存在しません。
337 :
お願いします :02/06/27 14:48
あああああああああああああああああああああ scanfでした
>>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回)、 比較対照にワイルドカード文字#を入れなくてはならないんです。 私の貧弱な頭ではさっぱりでして…もしよろしければ回答お願いします。
あう…対象でした
とりあえず、"abc"と"#bc"がマッチするか調べる 関数は作れるのかえ?
ここは宿題を教えるスレですか?手伝うスレですか?
そのワイルドカードが今ひとつでして… 一文字づつ比較して#部はその工程を飛ばすような形で考えているんですが…
>>344 #がワイルドカードってことは
最初の文字列がbcdbcなら1回?
はい。「dbc」の部分が一致するので一回です。
>>347 #は一文字としかヒットしないわけだね?
abbba
と
a#a
は一致しないってことでよろしいか?
ワイルドカードだとしたらマッチは1回だろ #=abcdにマッチするんだから
>>348 はい。そういうことです。その場合だとa###aで一致になるわけです。
すいません。ワイルドカードの意味も分かってなかったみたいです。 #はひとつ一文字に対応です。
>>350 検索の方法はどうするんでしょう?
abacadaeと入力して
a#a#
と比較した場合、
1.abac adae の2回
2.abac acad adae の3回
>>352 2.abac acad adae の3回です。説明不足で申し訳ありません。
こんな感じでせうか 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の長さ ) ++ヒット数 }
コンパイルしてみましたがこんな感じです。 ただ、scanfが必要なんです。問題はこいつなんですよね。 scanfでとりこんでアドレスをずらしながら比較…とか考えてたんですけど 難しいです…
ま た s c a n f か
どうやらscanfを使うのはよくないみたいですね。 fgets()とsscanf()の使い方を調べてやってみます。
今 度 は s s c a n f か
reallocで無事解決しました。 とある画像から条件の合う物だけコピーしてイロイロ操作するプログラムを組んでます。 画像配列のメモリ容量は多いと言っても50kBぐらいなので 全部確保できないことはないのですが、自分的にイヤなもので。。 リストはこれからミチーリ勉強します。
362 :
デフォルトの名無しさん :02/06/28 01:24
鬼初心者なんですけど・・・ 質問させてください。 実行ファイル名をtstとします。 書き込み対象のファイル名をsmp.txtとします。 それでですね、 tst smp.txt abcde と、引数を渡したときに 文字列abcdeがsmp.txtに書き込まれる プログラムをCで書きたいのですが、まったくわかりません。 どなたかご教授ください。 おながいします!!
↓に"マルチは氏ね"とレスが付く予感
>>362 なにがわからないのかまったくわかりません。
>>362 Cの入門書やWebサイトにいくらでも同じプログラムが転がってると思うが・・・
1 引数の扱い 2 ファイル操作(オープン/クローズ) 3 入出力 どれが分からん。
>>362 main(int argc, char** argv)
{
fprintf(fopen(argv[1], "w"),"%s",argv[2]);
}
エラーチェックとかは自分で汁
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 >いや、5時間くらい悩んでるんですよ
知るか。本読め。検索しろ。適正無い。学校やめて違う道を探せ。
#include <stdio.h> int main(){ printf("hello,Word\n"); } 標準出力を利用したプログラム(ぷ
>>372 すいません、それは一番最初にやりました。
たぶんそれじゃダメだと思います。
とりあえず今googleで検索してるので、また後で聞きに来ます。
>>374 これも標準出力を利用したプログラムといえるので先生に提出してください
>>374 ダメかどうか判定するのはお前じゃないだろ。
まあ仕方ない、標準入力も利用してやるよ。
int main() {
printf("hello,Excel\n");
getchar();
}
>>374 ダメと思う理由を簡潔に述べよ
>>376 せめてgetcharの戻り値を使ってやってくれよ
>>369 標準入出力を使ったファイル(テキストファイル)のコピー
使い方は、自分で考えると良さげ
#include <stdio.h>
main () {
int buf ;
while ( ( buf = fgetc ( stdin ) ) != EOF ) fputc ( buf, stdout ) ;
}
int main() { printf("おはようエクセルくん\n"); return getchar(); }
>>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]);
}
}
>char buffer[9999],c; >for(i=0;i<=9999;i=i+1) とりあえずこれはまずいだろ。
>>380 コンピュータは正直です。
ゴミが出るのは、ゴミを入れてるからです。
ゴミの正体については次週の解決篇で。
char buf[9999] は 0...9998・・・・・・
誰かネタバレしる!
じゃあ一つだけ・・・・・ cはcharなので、絶対にEOFにならない。
>>387 処理系によってはEOFになるよ。EOFが-1の場合、
(char)-1 == (int)-1
>>389 Σ( ̄□ ̄ || 〒 ||そうだった!char == signed charだとintにする時符号拡張
されるのか。どちらにしろcはintにせにゃならんけどね。
>>380 cをint型にして、bufferへの代入を EOF の判定後にすれば良さげ
ゴミは多分EOFマーカーをputcharしているせいです。EOFはbufferに 代入しないように。
腹痛え。トウガラシ麺を2個も食ったせいだ。トイレ逝ってくる。
出来ました! ありがとうございました。 ところで、マイクロソフトのコンパイラだと 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]); } }
>>394 まだだめだ。char buffer[10000]にしないと。
それから、ctrl+z押してからenter押さないと、バッファを読みとってくれない。
>>395 あ、ポカミスです。
それから、enterは押してます
ボーランドのだとうまくいくのですが。
それはコンパイラではなくDOS窓のことか? 行の途中でも効いたっけ?
>>396 MSVCRTはctrl+dじゃなかったっけ?
2回目のループは while ( i>0 ) { putchar ( buffer[--i] ) ; } に汁
>>397 そうだわ。行の途中のctrl+zはEOFと見なしてくれない。
行頭じゃないと。
VC6.0だと行頭でC-z[enter]じゃないとダメ gcc(cygwin)は行頭でC-d bccはどこでもC-z[enter]でOK
>>399 ありがとうございます。
394のはバグありますか?
ちょっとよく分からないのですが。
>>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;
}
406 :
デフォルトの名無しさん :02/06/28 04:49
>>404 のソースみたいに、
複数桁のスペースを入れるにはどうすればいいの?
を好みの数だけ
void main(int argc, char *argv[]) { printf("(・д・)"); }
cout<<"Fuck men!\n"; cin>>str; //紛らわしい、何れオーバフローする
二分木探索法をポインタではなく、配列でやるにはどうしたらいいんでしょう? 友人に聞いたら、配列の添え字を返すようにすればいいんじゃん?といわれましたが・・・
まず、ポインタでどうやっているか書いてみろ
>>413 配列の添字を相対的なメモリアドレスと考えれば通常の変数がポインタの役割を担えることに気付くだろう。
その代わり配列管理が面倒だと思われ。
俺、この方法でスタック書いたけど。
二分木の探索を配列の添え字を使ってする場合、 二分木を配列上に構築しなければならないんだけど、 それ自体できてる? それとも二分探索の書き間違い?
417 :
ほんまわからん :02/06/28 12:58
文字列strをメモリに格納するための関数char*SaveStr(char*)を作成しなさい。 C言語でおながいします。 方針としては、文字列の長さを求めて、メモリの確保をおこなって、文字列をコピーする。
>>417 文字列の長さの求め方はわかるか?
メモリの確保の仕方はわかるか?
文字列のコピーの仕方はわかるか?
strlen, malloc, strcpyが怪しいぞ(w
420 :
ほんまわからん :02/06/28 13:17
わかりますよ。一応模範解答がほしいのです・・・ 無駄なプログラム書きそうなので(^^
>>420 じゃあ、その無駄なソースをアップしてくれ。
こっちで添削する。
宿題を見るって本来こういう事だし。
423 :
ほんまわからん :02/06/28 13:21
ちょっとまってください。がんばってつくりまふ。 整数んとmをコマンド行から入力し、nからmまでの和をディスプレイに表示するプログラムをつくりなさい。 これはわからないっす・・・・(T_T)
425 :
ほんまわからん :02/06/28 13:27
整数nとmをコマンド行から入力し、nからmまでの和をディスプレイに表示するプログラムをつくりなさい。 だったw
426 :
デフォルトの名無しさん :02/06/28 13:27
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); } でいいとおもうのですが・・・
>>429 forループ回すより明らかに効率が良いのよね。
数学はやっておくもんだ。
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( } ここらへんまではやったのですが・・・
>>432 mからnまでの和の意味が全然分からないので、それを教えてくれたら、教えます
>>433 Σ(゚д゚lll)ガーン
char*SaveStr(char*)っていう関数ないじゃん
あの式を見るたび小学生のときに読んだガウスの話を思い出す。
#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までの和の意味を教えてください
#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までの和の意味を教えてください
>>433 メモリ確保、コピーはchar*SaveStr(char*)の中でやらんと意味ないぞ。
あとmallocは確保したメモリのアドレス返すから受け取ってやらんと。
というか433はポインタ理解してるか?
ほんとうにmからnまでの和の意味がわからないんです。 数学さっぱりなんで。
>>441 期末テストが終わってfreeな気分だったので、、すみません
>>440 m=1,n=3の時のmからnの和は6
(1+3)*(3-1+1)/2
あ、プログラムはこれを最後に辞めたほうが良いよ。
>>440 ちなみに 1 から n までの和が n * (n + 1) / 2
ということは知っているのか?
>>444 しりません。
というかmからnの概念がまだ理解できません
もうプログラミングやめます
いや6.5ですか。
ひょっとして和=合計の意ということが分からないのか? 和差商積=+−÷×
>>448 和==+ということはわかるんですが
m=8
n=5
で、なぜ26なのかがわかりません。
1以上n以下の自然数の総和が n * (n + 1) / 2 ということは知っているのか?
>>450 つまりn=3だとすると
1+2+3ってことですよね?
んでm=8,n=5だと
5+6+7+8ってことですか!
やっとわかりました!!本当にありがとうございました。
なんだ遠回しに間違いを指摘しているのではなかったのか。
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は何をさすか
456 :
デフォルトの名無しさん :02/06/28 17:08
*a でしたw ぐはーw
457 :
デフォルトの名無しさん :02/06/28 17:10
aは変数 *aはそのアドレス ?
どういう値になるかを答えるのか?
459 :
デフォルトの名無しさん :02/06/28 17:21
おれもよくわからんです。 さしてるものを答えるのか、値なのか・・・ 多分値だとおもいます。。。
なんていうか・・・。答えられない問題だなぁ。
461 :
デフォルトの名無しさん :02/06/28 17:32
ん?なんで?
なにが?
>>454 a 配列aの先頭アドレス
*a 0
p 配列pの先頭アドレス
*p 配列aの先頭アドレス
**p 0
pp 配列pの先頭アドレス
*pp 配列aの先頭アドレス
**pp 0
じゃ、駄目か?
だめです。
466 :
じゃんけん :02/06/28 18:01
ポソ
>>463 *a とかは代入可能なんだから、
配列 a の先頭の要素って感じで書かないといけなくない?
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までの完全数を求めるために必要な時間が、 数秒程度になるようにこのアルゴリズムを改良したいんです。 演算部分のアルゴリズムをどのように変更すればいいのか教えて! その数学的理由とともに。。
476 :
デフォルトの名無しさん :02/06/29 19:32
>>474 6
28
496
8128
1740msec
適当に作ってみたけど、PentiumV500MHzでこんなもんだったよ。
普通のアルゴリズムとやらを示してみな。
改良点を教えてやるから。
本当に適当に書いたんだけど、数秒におさまってしまった…
> 普通のアルゴリズムとやらを示してみな。 > 改良点を教えてやるから。 って書いたけど、普通のアルリズムってのと全く同じだったらどうしよう。 しかもsage損ねたし…
>>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;
}
違うスレで質問してみます
>>472 はぁ?
>>478 で問題ないジャン
それとも、BASICで答えろって?
そもそも言語くらい書いとけ
>>478 gomennasai!!
>>479 nohatugen,tasikani,bokudesu.
matigaeta,hatugendesu.
honto,mousiwakennai,desu.
suimasen,suimasen
ima,mnihongo,dasenaidesu.hontodesu.gomennasai!!
kotae,arigatougozaimasu!!
tottemotasukarimasita!!arigatou,gozaimasu!!
教 え て 君 の 鏡 だ な
>>482 な に が 映 っ て る の で す か ?
教 え て 君 必 死 だ な
単に鑑だろとつっこみを入れたかっただけなのだが。 教えて君といっしょにされたか。
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
どこかえればいいの?
単に
>>472 っていうリンクを見逃したってことでは?
最近答える方も叩く準備しているような気がする。
この板も WebProg 板のようになってしまうのか。。。ガクガク、ブルブル
>>487 kのループをn-1までやらなくてもいいだろ
n/2までで済むハズ
もっとやるなら、ループをnの平方根までにして
剰余が0のとき
sum=sum+k
sum=sum+(n/k)
とすると、良いかな?
試してないので、やってミソ
>>489 らら枯れておかしくない質問が増えたのも・・・
>>489 Ruby、HSP、VB、Delphi といったスケープゴートが機能しなくなって
一般のスレが荒れだしている。
>>476 6
28
496
8128
50ms(Celeron650)
どうやったらそんなに遅くなるのかと…
6 28 496 8128 33550336 8589869056 137438691328 1ms(ポケコン)
もう言われてしまいました。
というかBASICだったのね。
実は、Cなら普通に組んでも数秒でおさまるだろうと首をかしげてた。
>>493 n / 2 でやっていたから、それで目標値は出たのでよしとしてた。
平方根版だと、50msなったよ。
>>496 アルゴリズムスレでやったほうが良いのでは……
498 :
デフォルトの名無しさん :02/06/30 00:25
JAVAにて、「元金を入れてください」と 「金利を%で入れてください」の質問に答えたら、 1〜3年後の金額が出てくる元利計算のプログラムを 書けと言われたのですが、全く分かりません。 まわりにJAVAを知っている人がおらず、困っております。 書いていただけないでしょうか。
>>498 超基礎的なところを触れば出来るだろ。
ネットで解説ページ探せ
ごめん、ここ宿題スレだった。
>>501 作れない方がおかしいんだから気にしない。
ここは宿題スレだし。煽るだけなら(・∀・)カエレ!
>>504 おお、だから何だ?
明らかに宿題直前の授業も理解できてないようなDQNだぞ?
こんな奴ら今の内に単位落とさせて退学にし、プログラマ人生を
断ってやった方がこいつらのためだ。
いるね。こういう余計なお世話な人。
>>504 (=498=504)
まぁまぁ落ち着けよ。お前も煽ってるだけだぞ。
確かに此処は宿題スレだ。しかしな、やる気の無いやつの
宿題を肩代わりしてやるスレではないんだよ。
ただの文系大学生。パソコンがちょっと使える程度なのに、 調子に乗って共通教育の情報科学S(JAVA入門)を取り、 講義を受けてみれば、先生が工学部の情報工学なら、 生徒もほとんど工学部の情報工学の学生ばかり、 講義もいい加減で、身内が理解出来てるだけ。 で、結局全学部の学生対象とかいいながら、 僕を含め、情報工学の学生以外は落ちこぼれ〜
>>496 1 : 1
2 : 6
3 : 28
5 : 496
7 : 8128
13 : 33550336
17 : 8589869056
19 : 137438691328
31 : 2305843008139952128
0msec
メルセンヌ素数を使うと素数判定をいい加減に作っても一瞬で終わる。
ポケコンで1msというのはそういう訳のよう。
自分で数学的理由が説明できないので悲しいものがあるが…
>>507 > 確かに此処は宿題スレだ。しかしな、やる気の無いやつの
> 宿題を肩代わりしてやるスレではないんだよ。
答えるかどうかは回答者次第なんだから勝手に決めるなよ。
教授って研究する人であって物を教える人じゃないからね。 総合大学っておもしろそうだね。
俺は暇で何か問題解きたい時や自己満足に浸りたい時に答えるよん。
相手のレベルなんてこのスレで問いたりしまへん。
でもJava知らないので
>>498 はパスっ
>>510 お前の偽善が一人の人間の人生を潰してるんだよ。
>>507 504は僕じゃない。
そんなこと書くほど身勝手じゃないですよ。
>>515 504 名前:デフォルトの名無しさん 投稿日:2002/06/30(日) 00:46
ここは宿題スレだし。煽るだけなら(・∀・)カエレ!
身勝手?
いつもこのスレ見てて思うんだけど、金払ってんだから 教官に聞けばいいのに。
なんで510が偽善なんだ?
>>516 ちょっと言葉が足りなかったのですが、
ちょっと自分の質問に答えてもらえないからって、
カエレ!って書くとか・・・
>>507 504だけど、498ではないよ。
勝手にイコールで結ばないように。
こんなところに宿題を丸投げするようなやつに説教しても無駄。
調べろって言っても調べるわけないじゃん。ほっとけ。
ここは宿題の答えを教えるスレじゃなくて宿題を手伝うスレだよね?
ならば、問題だけ書いて答えてくれっていうんじゃ話にならないでしょ。
どこまでやったかを書かない時点で質問者として駄目でしょ。
で
>>498 はどこまで出来た?出来たところまででも書いてみ。
誰かヒントくれるから。俺は答えられないけど。JAVAしらないし。
>ここは宿題の答えを教えるスレじゃなくて宿題を手伝うスレだよね? ば〜か。そんなのどっちでもいいんだよ 勝手に決めるな傲慢野郎
>宿題、判らないところがあったら、遠慮しないで聞いてくださいね。 〜〜〜 全部はところじゃないな。お馬鹿さん。
> やる気の無いやつの宿題を肩代わりしてやるスレではないんだよ。 とか、 > ここは宿題の答えを教えるスレじゃなくて宿題を手伝うスレだよね? とかってルールあるの? 俺はその時の気分で答えてるけど。
ここは、宿題を聞くやつをひとつのスレに封じ込めるためにあるんじゃないの?
527 :
デフォルトの名無しさん :02/06/30 01:58
☆ chin hungry~ hungry~ ☆ chin 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< download 92 % complete. \_/⊂ ⊂_)_ \____________ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄  ̄ ̄:| :| | |
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("数値が正しくありません。"); } } } あるプログラムに当てはめてみたのですが、 全然成立していません。コンパイルも出来ません。 こんな情けないものをお見せするのが恥ずかしいです。
>全部はところじゃないな。お馬鹿さん。 幼稚園児がいるようで
>>526 正解。
答える・答えない・ヒントだけ出すっていうのはレス付ける人の自由かと思いますが。
個人的には、ここで答えないとマルチを始めるお馬鹿さんもいるので
下手に煽るより答えた方がいいと思っております。
>>529 >幼稚園児がいるようで
反論できないと。
>>528 おまえなぁ…
まぁいい、ヒント。
計算する前に、入力した値をそのまま表示するようにしろ。
String line = reader.readLine(); System.out.println(line + "円ですね"); System.out.println("金利を入れてください。(%で)"); こういうことですか?
>java Ganrikeisan 元金を入れてください。 3万[enter] 3万円ですね 金利を入れてください。(%で) 2
元金をいれてください。 3万[enter] 3万元ですね
>>498 いやたぶん533は x にはちゃんと数値が入ると思うの?
ってことを確認させたいんだと思うよ。
でも、それ以前に(と)の対応がとれてないから確認できない
かもしれないけど。コンパイラのメッセージも確認してごらん。
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のようになりました。 あとはうまく計算させるだけのようなんですが、 そこが一番の難問です。
すまん、535ってネタだと思ってた。 「30000」じゃなくて「3万」って入力する必要あるの?
>>539 そんな高度なことしません(出来ません)。
3万円の時は「30000」正解です。
× 「30000」正解です。 ○ 「30000」で正解です。
回答側の推奨事項:
・自分がどうするかは自分が決める。
・他人の意見を勝手に代弁しない。(このスレは〜するところです、とか)
・質問者の将来について心配しない。(ここでの質問事項にのみ関わる)
・DQNな質問者は放置。
他なんか推奨意見ある?
質問者側の推奨事項とかも挙げて、次スレ辺りから
>>1 に書くことを希望。
・ダメな質問者の家族や家臣やパイロットを呼ばない
>>512 更に勉強してみた。
えーと、偶数の完全数とメルセンヌ素数との関係は
オイラーが証明済み。
奇数の完全数があるかどうかはわかっていない。
ってことは、後は奇数の完全数がある範囲内にはないってことを
プログラムで確かめてみればいいってことでいいのかな?
奇数は偶数の約数を持たないってことを考慮すると
処理は平方根板の4分の1程度になるということでいい?
それでも10000000の範囲を調べるには数時間かかりそうだけど。
>>538 Javaやっとことないから理由はわからないけど、
int a;
a = x * (1 + (per / 100));
System.out.println("1年後は" + a + "円です。");
こんな感じにすると計算できてるような。
式は合ってると思うが、変数の型がおかしい。 >538 System.out.println( 50/100 ); って、どういう結果になると思う? この実行結果が予想と違った場合、その原因は?
>>549 型というのは、絶対値の大きな方だけではなく、
小さな方も考慮しなければならないのですか?
>>551 絶対値の大きい・小さいじゃないけど、
int x=0.5;
ってやるとどうなる?
>>548 50/100は0になるんでしたよね?
0.5<1なので。
ここってただの隔離スレだろ? あんまり細かいこと言い出すと宿題丸投げ君が他で迷惑かけそうなんだけど。
分かりました。 int perをdouble perに治したら、うまくいきました。 が、答えの1〜3年後は○○○円の所に、小数点以下が出てしまいます。 これを何とか出来ないでしょうか?
>553 おめでとう。 で、宿題は出来たか?
>555 100.6 円だったら、101 にする? それとも、単に切り捨てる? まぁ、いずれにせよ、キャストぐらい覚えとけ。
完成しました。本当にありがとうございました。 1〜3年後の数値の前に、それぞれ(int)を入れてやったら、 ちゃんと切り捨ててくれました。 この際なので、もう一つ勉強させてください。 切り上げるにはどうすればよいのでしょうか?
切り上げ:+1.0して端数切り捨て 四捨五入:+0.5して端数切り捨て
分かりました。最後までお世話になりました。 初歩的な問題(僕には高度でしたが)の質問攻めに 答えてもらい、大変感謝しております。 ありがとうございました。m( _ )m
-1 かけて、切り捨てて、もっかい -1 かけるのが手っ取り早いかな…?
>559 それで2.0を切り上げると3になるよ。 Javaはよく知らんけど、Mathにceilとかないの?
先生が切り捨てでいいよって言った理由が よ〜く分かりました・・・
四捨五入は Math.round でいいんじゃないの?
Math.ceil あるなー。 nativeメソッドだからちょっと速いかも。
>>545 何か、調べてくれてThx!
メルセンヌ素数 (2^p)-1
完全数 (2^(p-1))*((2^p)-1 )
だから、メルセンヌ素数を知ってれば、
完全数(偶数)は求められる。
あるかどうか分からない奇数は、
奇数の約数でがんがれば、
コストは1/4だと言うことで納得。
メルセンヌ素数から完全数を求めるのはインチキだろ。 メルセンヌ素数もプログラムで求めるならいいけど。
568 :
デフォルトの名無しさん :02/06/30 04:42
☆ chin hungry~ hungry~ ☆ chin 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\゚∀゚)< download 100%, completed! \_/⊂ ⊂_)_ \____________ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄  ̄ ̄:| :| | |
>>567 >>545 は実際にメルセンヌ素数をプログラムから求めてる。
1 <= p < 32 の31個の数が素数かどうか調べているだけなので、
処理量は少ない。
奇数の処理は入ってない。
570 :
デフォルトの名無しさん :02/06/30 13:16
数秒で10000までの完全数出すBASIC 2進のプログラム教えて! あとどうして半分まで調べれば分かるのかが分からない。
完全数だらけ
>>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桁の完全数出るのに数分かかるの。。。 もっと短縮するのにはどう変えたらいい?? ってかどうしたら早くなるのか理由を教えて〜。
>>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秒以上
かかっているなら、今までの考えじゃ無理。
× 測る ○ 計る
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と同じことを確認する。 ようなプログラムを作成する。
分かるとこまで書いたプログラム。 #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);
> 変数の宣言(例えば int a,b;)で、変数のアドレスが決まることを確かめる。 これってポインタの中身を表示しなくても、int *c,*d; c=&a,d=&b;でコンパイル時に警告がでなければ確かめられたことになるんじゃない?
>>577 printf("*c=");
scanf("%d",c);
printf("a=%d\n",a);
>>578 ×の方ではadress a=1245052ってなり、pにすると、0012FF7Cってなります。
整数型ではだめなんですか?
>>579 確かめるというのは、結果表示で可能とヒントに書いてありました。
>>577 printf("b= ");
scanf("%d",d);
printf("b=%d,*(&b)=%d\n",b,*(&b));
>>581 ポインタを文字列で表現するときは%pを使う。
>>576 前半はなんとなく、
>>577 でやりましたが、後半の
>また、*(&b)は、bに等しい子を、g=&e;,c=&a;の場合に*g=*cはe=aと同じことを確認する。
ってのが全く分かりません…
>>584 × bに等しい子を、
○ bに等しいことを、
だろ
>>585 あ、訂正ありがとうございました。すみません。
587 :
デフォルトの名無しさん :02/06/30 20:12
>>584 int b;に何かをいれて、printf("%d\n",*(&b));ってやってみな。
>>583 送れてスミマセン。ありがとうございました。
最後までやってみたんですが、最後の方が全く 自信ないです… #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); }
>>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
593 :
デフォルトの名無しさん :02/06/30 22:03
487を591にするのってどう考えを変えたんですか? 数学的理由ってよく分からなくて487を591にする過程を説明してください。
>>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 うへ〜。全然記憶に残っていない。
実際に展開して確かめてみましたけど、約数の総和は確かにそうなりますね。
>>595 Cに直して実行したら、
10000まで計算するのに、0mS
早い・・・
598 :
デフォルトの名無しさん :02/07/01 01:46
>>593 うーん。。説明しろと言われると難しい。
誰か説明できる人いたら俺もしりたい。
>>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 ;
}
timeGetTime()なんてシステム固有のじゃなくてclock()使えよ。
601 :
デフォルトの名無しさん :02/07/01 10:42
氏ね
602 :
デフォルトの名無しさん :02/07/01 10:53
603 :
上げちゃえ♪ :02/07/01 11:15
604 :
経営情報学科1年 :02/07/01 15:46
すみません急ぎでおながいします。 2014を浮動小数点数として表現し 32ビットで表せと言う問題と 2014を2バイトの符号付整数(補数表現) として表せ。と言う問題です。 お願いします。
IEEE754単精度 01000100111110111100000000000000 short int 0000011111011110
606 :
経営情報学科1年 :02/07/01 16:11
問題間違えますた。 整数2014を2バイトの符号付整数(補数表現) として表せ。と 整数2014をIBM方式により浮動小数点数として 表現し32ビットで表せ。です。 おながいします。
マジで?あれは16進だっけ。ちょっと分からん
むかし見たことのあるような宿題。
609 :
経営情報学科1年 :02/07/01 16:24
最速でおながいします。
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
何をどうまとめたんだ。
>>615 激しく的を射た突っ込みに思わずワラタよ
618 :
構造体テンプレート :02/07/02 15:31
構造体テンプレートをstruct complex{ float real; float imag; }; と宣言して、その条件で変数をstruct complex z1, *p1;と 宣言したとき、z1の要素realを p1の要素に代入する式をおしえてください。
>>618 p1------------------>real = z1.....................real;
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のアドレスを ポインタを用いて取り出し、表示するプログラムを おしえてください。
(´-`).。oO(まさか電波で俺より上のヤシがいるとはな)
>>621 自分で文章を考えずに出された問題をそのまま書くことを勧めておく。
>>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の返すファイルポインタからファイル名の逆引き ということは可能なのでしょうか?
>>625 つぅか責任持てるっしょ。自分の開いたファイルなんだから。
シェルを作る課題がでました。 サンプルを改造するようになってるのですが、とりあえず実行方法から全くわかりません。 #include <stdio.h> int main(void){ printf("Hello world!\n"); return(0); } これを実行して、Hello world! と出力されるようにするには、どうすればいいんでしょうか? ファイルにプログラムを書き込んでもできません。
int array[] = {5, 7, 6, 1, 4} ; このような配列があったとして ↓みたいに棒グラフ風に表示との宿題が出たのですがさっぱりわかりません 5 7 6 1 4 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
630 :
情報2年生 :02/07/03 20:40
age忘れました(鬱
>>629 大き目の2次元配列で作業領域を作り、必要なところに●
かスペースを代入しといてあとでまとめて表示とか
>>628 そこから出発してシェルを作らせるのか... すげぇ盛りだくさんな
先生だ。頑張れ。
>> 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 動きません。unixで動かす実行プログラムは、unixでコンパイルする事。
クロスコンパイラでない限り。
>>637-638 何かすごく初心者っぽいことを言ってしまったみたいです。すいません。
・・・それで、unixでコンパイルするにはどうすればいいんでしょうか?
>>639 UNIXマシンにインストールしてあるCコンパイラを使う。
>>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;
}
>>641 "● "の次は半角スペース3つのつもりだから。2chに書き込む時に
スペース1つに削られちまった。
>>629 1行1行処理するとして、
処理している行+配列の値>配列の中の最大値
の時に●を書く、とかは駄目ですか?
>>640 and
>>642 それが、コンパイルとかって言葉は全然授業ででてませんでした。
でもプリントを見た感じは、Emacsとviってのが使えるようなんですが、これを使ってコンパイルできるのでしょうか?
vi使えるとかこいいけど、コンパイルはできません。 Emacsからコンパイラを呼び出すことはできる
>>646 ぷよまんでも食べて落ち着きなさい。さすれば自ずと答えは出る
>>646 Emacsやviはテキストエディタ。
多分ccかgccが入っていると思うからそれでコンパイル。
>>648 理論的に考えて既に発酵しててもおかしくない時間だな。
>>650 この前ぷよまん売ってるの見たぞ。カーバンクル饅頭も
>>646 cc ファイル名 でコンパイルできる。
このままだと a.out という実行ファイルができるから、
cc ファイル名 -o 実行ファイル名 としてもよい。
あとから mv ファイルでリネームしてもよい。
こんなことも教えてくれない先生は失格。
>>654 なるほど・・・ぷよぷよを作った会社の名前か。
お前らぷよまん食ったことあんのかよ。 めちゃくちゃうまいんだぞ (カーバンクルまんはさらにうまい) 一度食ったら他の饅頭なんか食えなくなるから試しに食ってみれ。
つーか、もみじまんじゅうだろ? 広島銘菓。
広島といえばぷよまんだろう
>>653 とりあえず、コンパイルができて、a.outというファイルがつくれました。
元のa.cというファイルには
#include <stdio.h>
int main(void){
printf("Hello world!\n");
return(0);
}
と入力されてて、Hello world!、と出力したいんですが、できません。
a.outを使うときは、ただa.out入力するだけではできないのですが、どうやるのでしょうか?
すけどうたらこを忘れるな。と
>>659 ./a.out
UNIXの基礎の基礎。
それも教えてくれない学校なんてやめてしまえ。
>>661 やっとできました!
ありがとうございました。
前の課題でもそうだったんですけど、最初のやり方を教えてくれないから、これでつまづくと先に進めないのでホント困ってました。
すごい学校だのう
>>661 > それも教えてくれない学校なんてやめてしまえ。
禿同、学校変えたほうがいいよ、マジで。
んな学校続けてるとダメになるよ。
>>662 大学?
教授によってはめちゃくちゃ不親切な奴もいる。
シェルの課題、どこから手をつければいいのかわからないのでアドバイスでいいので助けてください。 とりあえず、課題とサンプルを書きます。 付録ソースコードを参考にして簡単なシェルを作れ。コマンドラインの解析を行う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); }
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); } これらがサンプルです。
execute()のサンプルは?
>>671 executeのサンプルはありません。
たぶん自分で書くのだと思います。
C言語と同じように書くなら、parseなどの関数はincludeの後に書くのでしょうか?
その後に、int main(void)が来るのですよね?
後、最初のint parse(char *, char **)
int execute(char **, int)
の部分の意味がわからないのですが・・・
>>663 そう?でも教えてくれなければ./を頭につけることはしないんじゃないかな?
$ a.out
bash:command not found
674 :
デフォルトの名無しさん :02/07/03 23:35
>>672 ./a.outがわからないシトにこの問題いきなりやらすのはどうだろう…
ポインタって知ってる?
ネットで調べたら「関数のプロトタイプとは、関数の呼び出しに先立って、関数の型と引数の内容をコンパイラに教えるものです。」と。 つまりプログラムそのものには関係ないのですね。
>>676 関係有るぞ(笑)
処理をするわけではないが。
>>675 ポインタ、構造体は習いました。そのへんはわかります。
>>678 そこまで習ってなんでコンパイルの仕方すら知らない・・・。
やっぱりやめた方が良いと思われ。それがあなたのため。
今なら人生修正聞くぞ?
>>677 え・・・もしかして理解してないと解けませんか?
>>680 理解していなかったからあんな質問したんだろ。
というか参考書はいっさい使わない主義の人ですか?
>>680 まあ、「最初に関数の宣言(変数の宣言みたいに)が必要」と思ってればいいかも。
>>678 どんな授業だったのか非常に興味があるなぁ。
講義だったの?
>>685 俺も興味ある
一度もコンパイルせずに
変数や関数、ポインタや構造体までを机上で教えたのか・・・
ある意味すごいな・・・
687 :
デフォルトの名無しさん :02/07/03 23:52
問題は 文字列中の a--z の各文字の個数を求める関数 void histogram(char str[], int h[])を作り、それを利用して 各文字の個数を一覧表で表示しなさい。 です。どなたかよろしくお願いします。
688 :
デフォルトの名無しさん :02/07/03 23:53
VC++でやっていたんだろ?
>>688 そうです。VC++でポインタや構造体はやりました。
もしかしてシェル→Windowsのヤシですか? だったらレジストリを書き換えるんだったかExplorerを置き換えるんだったかどっちかだった気がしる
>>687 /* h[]の要素は0に初期化されているものとする */
for(;*str;str++){
switch(*str){
case 'a':
h[0]++; break;
case 'b':
h[1]++; break;
/* 中略 */
case 'z':
h[25]++; break;
}
}
うちの大学で講義のみのPascalの授業があった。 宿題として課題が出されるんだけど、初日に 「○○にPascalが入ってるからそこでやってきなさい」 まあ、使い方は教えてくれたけど、パソコンを自在に操れる奴限定でしか 理解できない説明だった。 他の授業ではUNIXしか使って無くて、DOSとかいわれて何のことかわからず苦労した記憶があるなぁ。
>>692 工学部?
だったらパソコン使えて当たり前、DOSくらい知ってて当たり前、の世界じゃないの?
694 :
デフォルトの名無しさん :02/07/04 00:03
>>691 h[*str - 'a']++
でいいだろ。
695 :
デフォルトの名無しさん :02/07/04 00:04
というか、文字列が全てa-zで構成されているとは限らないぞ
698 :
デフォルトの名無しさん :02/07/04 00:05
なら、 if(*str >= 'a' && *str <= 'z') h[*str - 'a']++;
昔、UNIX 信者の数学教授の C プログラムを見たが、あまりの汚さに驚いた。 ちゃんと動いてるらしいのだが、便所の落書きにしか見えなかった。
>>697 3流国公立大工学部(非・情報)通ってるけど、
パソコン使えないやつなんて同じ学科では
数人しか居ない。まぁ MS-DOS となると
3分の1くらいになるかも知れないが。
>>693 工学部だけど、情報系ではない。
今みたいに一般家庭にパソコンが普及してればそうかもしれないけど、
Win3.1が出たての頃の話なのでそうでもない。
実際ほとんどがパソコンをさわったことない人ばかりだった。
705 :
デフォルトの名無しさん :02/07/04 00:16
>>691 、698
もしかしてポインタ使ってますか?
まだ習ってないんですけど。
707 :
デフォルトの名無しさん :02/07/04 00:19
ポカーン
708 :
デフォルトの名無しさん :02/07/04 00:20
>>706 あなたの示した関数のプロトタイプがポインタを使っているようなものです。
ポインタを使うのは素人
ポインタのある言語を使うのは素人
>>700 数学はプロでも、プログラムは素人。
素人プログラマなら、それで問題ない。
>>709-710 で、もしかして参照を認めるのか?
何も知らないか何かを知りすぎてるかどっちかだな。
そして宿題はできずに夜が更けていく・・・
ここのスレタイが「はうっ、宿題とはな。」に見えて仕方がないが、まあどうでもいいことだ。
715 :
言いたいことも言えないこんな世の中じゃ :02/07/04 01:04
ぽいずん
>>715 2chで、
>言いたいことも言えないこんな世の中
とか言うか?
717 :
デフォルトの名無しさん :02/07/04 01:06
2chで宿題の答えを聞ける条件 ・面白いギャグを持っている ・回答者の機嫌がいい ・その回答者の機嫌をさらにくすぐる ・運がいい 他に何かあるか?
>>718 ・質問内容がちゃんと日本語になっていること。
・自分で頑張る意志、もしくは自分の力で頑張ってみたことを伝えられる人。
・その問題を解くための常識的な知識を持ち合わせていること。
>>718 ・自作自演で興味ありそうなレスをつけて、回答者が答えようと思う雰囲気をつくる
時間帯。 細かいことに文句つける奴が多い時間帯と、そうでない時間帯がある気がする。
・言語が何か書いてあること 言語がCだと回答率がいいような気がする
・変なコテハンを使わないこと
・自分がどの程度できるのか等の条件が書いてあること レス付いた後で「forはまだ習ってないんです」とか言うヤシ多すぎ
・質問してからどこかに行かないで、ちゃんと待っていること。 たまに質問するだけして、レスしても1時間くらい無反応な奴がいる。
・転んでも暴れない
・転んでもキレない
・あっちこっちにマルチポストしない
・授業をまじめに聞く
>>719 >・その問題を解くための常識的な知識を持ち合わせていること。
それがあったらこんなとこに質問しない。
・提出日の前日とかに来て、勝手に切羽詰らない
>>732 intって何ですか?とかほざくアフォに何か教えたいか?
>>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]++;
}
}
}
から揚げ食べたい。
>>735 とりあえずgets()はfgets()に汁
>>719-732 今風呂から上がってきました。
こんなスゲー数のレスがついていて嬉しいです。
回答者冥利に尽きますね。
これからも面白い問題には答えて行きますのでヨロスク。
>>743 ASCIIでない場合のことを考えているんでしょ。
>>737 結構トリッキーですな。
EBCDICコード体系への対応もばっちりどす。
>>737 const char *alphabet = "abcde...xyz";にしろ。
>>747 static const・・・なんて阿呆みたいだから。
そうか?
関数内のローカル変数ならstatic charかconst charのどちらかでいいと思う。 static const charとすると、馬から落ちて落馬して・・・みたいな感じがする。
俺は static char const alphabet[]. がいいと思うが
>>750 > 関数内のローカル変数ならstatic charかconst charのどちらかでいいと思う。
意味が全然違うじゃん。
>>751 その順序に拘りが?
>>752 C++なら大いにあり得る。
クソ言語たるゆえん。
>>753 順序の話だよね。
なんか違うんだっけ、ちと教えて。
>>754 ポインタ自体をconstにするかポインタのポイント先をconstにするか。
他の言語にはない優秀な機能だけど順番だけで意味が変わるのはどうかと。
>>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; //(゜д゜)ウマウマ
あ、消えてる・・・ C++でのメンバ関数の const 指定も後ろから行わないとダメだよん を補完して
>>758 あんたの聞き方が悪いだけだろ
拘りが?と聞いたから
constは常に型の後ろから掛けるべきだという俺の拘りを書いたまで
振る舞いに違いが?と聞かれたら
同じ、と答えただろうけどね
単なる拘りということなら漏れは前からつける。
>>760 756を読んだ上でそう思うならそれでいいよ
>>760 あ、でも const なポインタをどう書くのかは興味あるな
俺は、 const C A::hoge(const B const * 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個までの数をよみこんで逆順に書き出す) を書き直して、配列の中で入れ替えをして逆順にし、 かきだすようにせよ。 つまり、まず配列にデータを読み込み、続いて配列の中の要素を入れ替え、 逆順にし、最後にそれを順に書き出すようにせよ。 という問題です。上のプログラムと完成したプログラム、 結果は同じになる、ということはわかっているのですが、 配列の要素の交換をどうやってよいのかがわかりません。 よろしくお願いします。
>>765 交換にこだわるのなら、
a = b[0];
b[0] = b[1];
b[1] = a;
個人的には配列の要素をforループで全部なめて別に用意した配列に逆順に格納。
元の配列の参照に逆順にした配列のインスタンスを入れて返すけどね。
GCバンザイなテクニック。
>>764 const C A::hoge(const B* const pb) const;
だな。寝ぼけてたわ。
ポインタとメンバ関数は後ろから、それ以外は前からかけるの? 全部後ろからに統一したほうがわかりよくない?
>>766 どうもありがとうございます。
しかし、その交換は変数ひとつに関してですよね?
配列の最初の数と最後の数、最初から2番目と最後から2番目、…
というふうに交換するにはどうしたらよろしいのでしょうか?
ご教授ください。
cの頃はあんまり気にせず前にconst書いてたけど、 c++になってconstを多用するようになったらなるべく後ろで統一させるようにしてる。 たまに癖で前に書いちゃうことがあるけどね。
771 :
デフォルトの名無しさん :02/07/04 09:57
const を正しく理解している人って少ないから、 const を多用すると可読性が低くなる気がする。
漏れは引数や一時変数がその後変更されないことを保障するために プログラム中の変数はほとんどconstですが、なにか?
俺は最初const無しで書いて変更しないものだったら付け加えてる
>>762 const int *p;
int *const p;
どっちをいってる?
この手のqualifierで戸惑ったことなんてないぞ。
>>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;
}
>>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 他のソースファイルで宣言したグローバル変数を参照(使用)する。
あくまでもCの場合ね。PHPだとクライアントから送られてきたデータが入っている変数だったかな。 言語は何?
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; }
>>782 何が上手くできないかかけ。
と何度も言われ続けてることなんだが、少しは過去ログを読め。
784 :
デフォルトの名無しさん :02/07/04 21:12
こたえが0になる。
786 :
デフォルトの名無しさん :02/07/04 21:15
よくわからんのれす
788 :
デフォルトの名無しさん :02/07/04 21:20
>>782 scanf()でうまく数字が読みとれないんだろ?
scanf()を、char buf[128]; gets(buf); sscanf(buf, "%f", &a0); とかに
書き直すと動く。
なぜ元のプログラムがおかしいかというと、最後の改行文字が読み
取られずにしつこくバッファに残ってしまうからだ。
>>782 まず、関数 dist() にどういう値が渡ってきているか、確認しろ。話は
それからだ。
791 :
デフォルトの名無しさん :02/07/04 21:22
>>789 それもそうだけど、
もっと根本的なとこ指摘してやれよ!
>>789 そんな間違いじゃない。
数値だからscanfでもちゃんと読みとれる。
めちゃくちゃ基本的なことがわかってないだけだと思うが。
>>793 ふとどき者ですが、よろしくおながいします。
>>789 頼むから、知ったか厨は出てくんなよ。話がややこしくなるから。
797 :
デフォルトの名無しさん :02/07/04 21:26
>>789 は前にscanf使うなボケ!と言われた質問者に一票
799 :
デフォルトの名無しさん :02/07/04 21:43
わかんないよーん
800 :
デフォルトの名無しさん :02/07/04 21:44
(´_ゝ`)フーン
関数名とローカル変数名が同じなのはまずダメ。 次に関数の呼び出しがなってない。
802 :
デフォルトの名無しさん :02/07/04 21:54
>>801 >関数名とローカル変数名が同じなのはまずダメ。
(゚Д゚)ハァ?
ここにはこんな簡単な間違いがわからないやつらがそろってるのか・・・?
>>802 >>803 ヲイヲイ・・・・・
↓こりゃやっぱダメだろ。。。。
float dist(float a0,float a1,float b0,float b1)
~~~~
{
float dist ;
~~~~
>>782 何が悪いのかわからないのならmain関数のみで作れ。
>>804 たしかに紛らわしくて勧められたもんではないが、問題はそんなところではない。
807 :
デフォルトの名無しさん :02/07/04 22:03
えと、4日前学校ででた宿題なんですが 「正の数をキーボードから一つ読み込みおからその数までのすべての素数と その素数の個数をディスプレイ画面に表示するフローチャートを描け」 なんですけれども、自分でやったんですけれども全然わからなくて(;´Д`) 房な質問ですみません・・・
808 :
デフォルトの名無しさん :02/07/04 22:04
関数返しの方法でつくらなあかんのよ。
>>804 質問者の希望の動作をさせるだけなら問題はない。
>読み込みおからその数まで 漏れも全然わかんない。
>>808 で、教科書か紹介されたリンク先は読んだのか?
812 :
デフォルトの名無しさん :02/07/04 22:05
813 :
デフォルトの名無しさん :02/07/04 22:07
読んだけどわかんないっす。 教科書はほんま意味不明。
>>813 はっきり言おう。
あ・き・ら・め・ろ。
817 :
デフォルトの名無しさん :02/07/04 22:16
818 :
デフォルトの名無しさん :02/07/04 22:20
いや、それはわかる
>>782 printf("%.2f\n",dist);
を
printf("%.2f\n",dist(a0,a1,b0,b1));
よく確認しろ
>読み込みおからその数まで ひょっとして、 読み込み0からその数まで だったりシテ……
821 :
デフォルトの名無しさん :02/07/04 22:31
>>819 うそつくな
822 :
デフォルトの名無しさん :02/07/04 22:33
>823 そういう発想が出るヤツの方が(略
825 :
デフォルトの名無しさん :02/07/04 22:50
if ( ( fclose ( fp ) ) ) !=0 ) { printf("Can't close"); exit(1); } ↑を関数化したいんすけどできますか?
int FileClose (FILE *fp) { : : } とかにするんすか?
void kansu(void){ if ( ( fclose ( fp ) ) ) !=0 ) { printf("Can't close"); exit(1); } } できますた!
>>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へ
ウーン 厨なもんで・・・ みなさんすごいっすねぇ プログラミングって難しいっす
>>831 関数化できてるからいいんじゃないの ? fp は、多分グローバルなんだよ。
ヴァカは、放置するしかないよ。後は、そう言う奴が自分の周りにこないことを
祈るしかないね。
>>834 お前のそばに行きたくないってことは確かだろうな。
>>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() のところがわからないっす
>>837 最初の方がよかったな。
今度はつっこみどころが・・・
>>837 abc = dist(a,b);
その脳みそじゃ大変だな
>>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 ふぅ。疲れる奴だな。
842 :
デフォルトの名無しさん :02/07/04 23:52
>>837 とりあえずコンパイラ通して、そのエラーメッセージを頼りに
自力で修正してみろ。
>>843 お前はログを読めるように日本語の勉強しろ。
845 :
デフォルトの名無しさん :02/07/05 16:49
JAVA(サーブレットやJSPも含む)やXMLを使った webアプリケーションで 何かいいアプリケーションってありませんか? こんなのあったらいいなのでもいいので。
847 :
デフォルトの名無しさん :02/07/05 17:05
なぜ就職板?
>>847 551 名前:就職戦線異状名無しさん 投稿日:2002/07/05(金) 10:18
誰か頭の切れる人教えて!!
XML JAVA データベース サーブレット などを使って新しいWebアプリケーション
を考えたいのですが何かないですかね?
552 名前:就職戦線異状名無しさん 投稿日:2002/07/05(金) 11:01
>>551 取りあえずお前はその技術達を理解しているのかと問いたい。
JavaとServletを敢えて別に離して書いた理由も聞きたい。
>>845 リアルタイムで人生相談してくれるアプリケーションがあったらいいなー。
851 :
デフォルトの名無しさん :02/07/05 17:23
>>848 どのスレですか。
ちなみに就職板に書いたのは俺ではありません。
853 :
デフォルトの名無しさん :02/07/05 17:28
こんばんは! WMIクラスを使って、CPUの温度とパケットの流れなどを監視したいのですが、 CIM、WIMをMSDNで探して見て実際にデータを取得したりしましたが うまくできません。 クラスとプロパティ どなたか知っている方おられませんか?
854 :
FORTRAN :02/07/05 18:12
なのですが、ファイルから数値データを取り出すときにどうしても始めの数字から 読み出してしまいますよね?それを、どうしても途中の数字から読み始めたいのですが どのようにすればよいですか?
フォートランって、ファイルのシークできんの?
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.
>>857 単位行列をかけたら対角行列になっちゃうよ。
4乗を計算するのなら、2乗の2乗でいいでしょ。
859 :
デフォルトの名無しさん :02/07/06 00:15
>>858 2乗の2乗は他のべき乗に対応させやすいように避けたいです。
空白を半角にしてしまい見づらくてすみません。
なんのこっちゃい。行列積ABの関数を作って それを何回か呼び出すだけだろう
861 :
デフォルトの名無しさん :02/07/06 00:25
>>856 いったん全部配列に読み込んで、それから処理すれば?
>>860 うむ。
B = A * A;
B = B * A;
B = B * A;
とやれば4乗になるのう。って当たり前か。
>>858 単位行列をかけても対角行列にはならんだろ。
AE=EA=Aで、何も変わらない。
みなさん、お手数おかけしました。 無事完成しました。 ありがとうございました。
866 :
デフォルトの名無しさん :02/07/06 02:32
int* pointer = new int[10]; delete pointer; は最初のポインタしか削除しないということを読んでのですが、 逆に int* pointer = new int; delete [] pointer; は何か弊害があるのでしょうか?
>>866 もちろん。配列として削除しようとするわけだから、配列のサイズを
記憶しているであろうと思われる領域にアクセスし、読み出す。
次にそのサイズで削除する。
変な領域の読み出し、そこに何が書かれているかわからない事
(サイズがメチャクチャ)、もしかしてリードオンリー領域かもしれない
事など、危険がイパーイ。
ありがとうございます。 うまく一緒に使いたかったのですが、 かなり危険がイパーイですね。 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]のように成り立つ式を表示する
>>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;
}
}
}
・
・
・
4の4乗が16か・・・
>>871 自分で読んで愕然となった(泣)。
256ですな・・・。
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 が互いにちがう場合は、あそこをああ変える。
>>875 でも、これが完成するとかなりおもしろい物がコンソールを駆け抜けていくかと。
ちょっと見てみたいw
878 :
デフォルトの名無しさん :02/07/06 12:34
>>873 ヒントどもです。
ですが実のところ /*ここになんかいれる*/ の部分が
わからず悩んでいたのが実情でして・・・
そこのところをもう少し教えてもらえないでしょうか?
>>874 固定ですね。
3の4乗だと俺は思うが・・・
さらにこんなサブルーチンをつくる int ope_たす(num0,num1) int ope_ひく(num0,num1) int ope_かける(num0,num1) int ope_わる(num0,num1) んでsubの中で op?を判定して*とか/とか優先的に処理させて 上の関数に与えていく。 おわり
乗除算を優先する、とすると面倒だなぁ。 いっその事 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); とかしたいなぁ。
>>884 UNIX的には正解だけど宿題的にはアウトだね。
でも、アイデア賞として何かくれるかも知れない。
あ、あれ?? × fp = popen(op, "r"); ○ fp = popen(ex, "r");
優先順位を考えなければ、 数値を 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;
力業でやってみました。 #!/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
>>873 ,884
結局優先順位とか考えるとひたすら分岐させていくことに
なるんですかね?
とりあえず今それで挑戦してますが。
>>888 すみません。自分はヘタレなんでそのプログラムが
何をしているのかがわかりませぬ・・・
すげえ見づらいコードがあった しね糞が
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; }
>>891 自動生成したのでないならあんたはアフォだw
スピード優先はウソです、すみません。 可読優先です(?
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] ) ; } こんな感じ。
済みません、全部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"); }
898 :
デフォルトの名無しさん :02/07/06 15:35
今回のCマガの問題、難しいね
900 :
デフォルトの名無しさん :02/07/06 20:58
隔離スレはたまにはあげんとね。
単発質問禁止age
902 :
デフォルトの名無しさん :02/07/07 21:49
>>869 発想の転換で10を4つの数に分解していったら
効率的なんじゃないの?
四則演算なんだから逆算は簡単だし。
括弧とかも許すやつなら、昔宿題で書いた記憶あるなぁ。
先生にstrstrとstrtolを書いて来いって言われたんだけどどーすりゃいいかね
書くしかないだろな
>>906 strstr()の内部でstrncmp()とか使ってるから、こういう関数も使うなと
先生に言われるかもね。
909 :
デフォルトの名無しさん :02/07/08 19:16
次スレは?
950くらいになってからでいいんじゃない?
911 :
デフォルトの名無しさん :02/07/08 19:35
3×3行列A×行列Bを出力するプログラムを教えてください。 for文を使えばできるみたいなんですけどわかりませんので・・・。 よろしくお願いします。
そうだな。
>>914 先に数学の勉強した方がよろしいのでは?
ガウスジョルダン法でやるんですか?
プログラム技術以前のことは板違いですね。
>>917 ネタだと思うが、それは掃き出し法では?
ネタじゃないです
>>911 学校で習わなかった?教科書持ってない?
>>912 すいません、C言語で行列の計算ができないの間違いです。
行列の計算はできます。
>>922 じゃあ、式は書けるんだな。
それをmainの中に書いてみろ。
>>923 そう苛めてやるなよ。
> ガウスジョルダン法でやるんですか?
とか言ってる時点で分かってないことがバレバレなんだからさ。
今頃必死になって教科書を見直してるんだよ
>>911 は。
#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]); } } } ここまではあってます?
>>925 何があってるのかあってないのかがわからん。
>>925 多分間違ってはいないからつづけてください
925のやと、なぜforの二重ループが2つあるのかが不明ダナ……
行列の掛け算てfor文でやるんですか?
3次元同士ならfor使わんでもやれるが、forを使えば次数を変えたとき 対応が楽。どちらでもお好きなほうで
>>930 forを使わないとかなり大変じゃないですか?
>>933 2次正方行列同士の積を、for使わずに書いてみてよ
>934 一瞬テンプレートで生成できないか 考えてしまったではないか。
937 :
デフォルトの名無しさん :02/07/08 21:30
このファイル はCで書かれたプログラムの断片です.
これを理解しやすい形に書き改めなさい.
こういうのがありますが、全然わかりません。何をしたいプログラムか、どういう点が「理解しずらい」のか、「理解しやすい形にする」という観点で、
ヒントだけでも教えていただけませんか?
ソースは
>>936 に書きます。
>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;
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;
|a b ||e f | |ae+bg af+bh | |c d ||g h| = |ce+cg cf+dh | というか、コレを理解していれば 簡単に作れるのではなかろうか。
なんかコメント欲しかった。
>>943 ちなみに行列式のように見えるが、行列の積ということにしておいてくれ
>>938 ありがとうございます。
3次元の場合は長くなりますけどなんかいい方法ないですか?
>>946 まず、2次元の場合をforで書き直す。
(それから3次元に拡張すればよいので)
>946 A * B なら、Aの要素は縦に、Bの要素は横に見ていく
>948 ごめん、逆
誰か、、、HELPぅー
>>911 ところでさ、
>>925 では 3*3 の正方行列同士の積しか
考えてないようだけど、やりたいのは 3*3 の正方行列A と、
ある行列B との積なんでしょ?
>>950 インデントすれば見やすくなるんじゃない?
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
でいいんじゃん?
>>954 A[3][3] * B[3][X] = C[3][X]
あんまり気にしなくても良いと思うがな
登場人物の相関図って昔つくってなかったけか。
すみません、今になって
>>719-732 のテンプレ読ませていただきました。
わかると思いますが、もう一度書きます。
>>956 はCで書かれたプログラムです。
自分の実力は、、、全然ないんです(汗
大学の授業でCをやってるのですが、とにかく変な授業で、
履修している学生が全くプログラム関係をやるのが初めてなのに、
ろくに文法も説明せず、たんたんと演算式ばかりやっています。
そして出た宿題がこれで。。。
分かっているとは思うが、意味を取り違える可能性のある 書き方だったので書き直しとく。 (3*3)の行列A × (3*X)の行列B = (3*X)の行列C
あ〜〜いくらやってもエラーです。 誰か教えて下さいよ〜。
女キャラがいいという意見が多いから、次はえれなの姉妹とか? 名前は香苗(個人的願望)
・質問内容がちゃんと日本語になっていること。 ・自分で頑張る意志、もしくは自分の力で頑張ってみたことを伝えられる人。 ・どこまでわかったのかを書くこと。 ・できれば、自分の実力を書くこと こんくらい?
>>968 ・言語名を入れること
・マルチポストしない
ソースを書き込むとき、TABを全角空白数文字分と 置換するなどして見やすくして欲しい
誰かまとめてみませんか?(けっこう大変そう)
美砂子さんって恭祐さんが現れたあとに、他板でQAスレ作ってたね。 ホントは離婚なんだろう。えれなちゃんが「私って捨てられたんだ」 とかいじけないように死んだことになっているんだろうな。と、話を進めてみる。
>>965 頑張ってみます。
教えてぽーんっ★
ダメジャン
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;
}
リファクタリングの講義であるとかごまかしてそうだ。
>>978 すげー大雑把に言えば、「セミコロンを減らせ」って
問題だと考えていいと思うが。
>>975 >空行で区切られている部分ごとが1つの問題になっている訳ね。
そうでしたか(汗
それすらもわからないという罠。
もうダメかなぁ。
とりあえず文法書買ってきて眺めてますが、全然理解できない。
演算子と演算練習しかやってないのに、どうしてこんな問題出すかなぁ。
>>984 ダメダメなのは講師だという罠。
・・・いや、マジで。
☆ チン 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < 次スレまだ〜? \_/⊂ ⊂_ ) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
>>985 提出は金曜日です。
今までの講義は、「Cパズルブック」という本で、
演算パズル系の問題しかやっていません。
今回の宿題のレベルがどれくらいかわからないですが、
今から文法を学んでも間に合わない!?
埋めるか。
1000取り合戦
マターリ
マターリ993
マターリ
マッタリ
マターリ996
人いない?
マターリ
マターリ
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。