2 :
デフォルトの名無しさん :02/07/08 23:21
手助けはするな、助言はしてやれ。
今から考えると、僕の人生はvoidだった。 そう、何も作り出すことは出来なかった。 しかし、僕の中のstatic変数にはいろんな思い出がつまってる。 でももうダメだ。 いつの日からか発生したループは、スタックを食いつぶしながら 僕のメモリ領域をどんどん蝕んでいく。 もうダメだ・・・。 僕は決心して窓を開けた。 「このプログラムは不正な処理を行ったため・・・」
>>1 乙
しかし、日曜にやっていたアニメを思い出した。欝だ詩嚢
>>2 激しく同意。
回答者は「宿題とはどういう意図の制度か?」を理解すべき。
9 :
前スレの937 :02/07/08 23:24
ごめんなさい、新スレ知らなくて、前スレに書いてました。
もう一度書きます。
>>985 提出は金曜日です。
今までの講義は、「Cパズルブック」という本で、
演算パズル系の問題しかやっていません。
今回の宿題のレベルがどれくらいかわからないですが、
今から文法を学んでも間に合わない!?
>>9 間に合うんじゃないか?
出されたソースがどのようなことをやっているのか
理解できれば、綺麗に書き直すことも出来るだろ。
宿題スレは、ある意味隔離スレであるといわれることがありますが、 丸投げ厨を隔離するだけでなく、知ったか教えたがり厨を隔離する効果も あるのです。>2, 8
>>11 けどさ、宿題を見る以上、そいつの人生の片棒を担ぐって事だと思われ。
無責任に丸教えする事が許されるとは思わない。
何だったら教育板から何人か引っ張ってくる。
>>1 萌えキャラかと思ったのに最後の「おながいします」で台無し。
14 :
前スレの937 :02/07/08 23:29
>>10 わかりました。
頑張って文法を学びたいと思います。
自分でできるだけ頑張りますので、ダメだった場合はもう一度教えてください。
前スレを埋める意味が分からん。
17 :
デフォルトの名無しさん :02/07/08 23:32
人物相関図? 恭祐=美砂子(離婚?) −−− +−−− | | | 幼なじみ お姉さん 麻衣 「兄」−−−えれな ↓妹 かおる
お父さんを「さん」づけで呼んだり、2chねらー的言葉づかいだったり、 展開次第では大化けしそうなキャラだと思われる。
結構宿題って同じ時期に似たような問題が出るから、そうそうに dat落ちさせるのはどうかと思う
>>14 エラい! がんばれYO!
応援してるからな。
ところで「前スレの937」が女だと思うのは漏れだけ?
>>20 990くらいまで進んでたんじゃ、いつか誰かやるだろうけどね
>>18 あ、美砂子さんて麻衣の母でしたっけ?
それは失礼(
>>7 の元書いた人)
>>18 違うぞ。恭祐と美砂子の子供がえれな・かおる
あらあらスレに >(1) 名前: お母さん 投稿日:02/05/08 00:38 >麻衣の母、美砂子です。 >宿題、判らないところがあったら、遠慮しないで聞いてくださいね。 とあるが、、
>>12 漏れは別に教育者でもないし、増してや「教えてくれ」と言ってくる奴から
給料を貰っている訳でもない。
面白そうであれば、自分の欲望の赴くままに回答しているが、何か?
怜さんとかは、ある程度教えられる側の事を考えて教えていたイメージ。
相関図ver2。 恭祐=美砂子(離婚?) | −−− +−−+ | | 「兄」 =恋人= 怜 お姉さん 麻衣 |幼なじみ えれな →妹→ かおる
31 :
デフォルトの名無しさん :02/07/08 23:42
ここは何のスレですかい?
>31 宿題を手伝う集団に関するスレだ。
こういうことは、ちゃんとしておかないと。 あとで揉めては困る。
34 :
デフォルトの名無しさん :02/07/08 23:49
答える側のルールまで作るなハゲ 作られてもその時の気分で勝手に答えるけど♥
こういう事ってどういう事? 登場人物の人間関係? それとも、教え方のポリシー?
まあさ、丸写しできるコードを出すのはやめようよ。 コード書いてやるにしても、部分的にぬいてやるとか、伏せておくとかで 理解しないと完成できないような仕様に。
>部分的にぬいてやるとか、伏せておくとかで 宿題の宿題ですか?(藁
>>36 そんな面倒なことするくらいなら全部書いちゃう♥
結局、「兄」の名前って未定のままだっけ? 「ひろゆき」案は却下されたのか。
自分で考える気もないくせにしつこく答えを迫ってくるような奴は さっさと追い払いたいし、マルチウザイので答え出す。
>>30 ああ、そういう家族関係なのか。で、怜ちゃんは
最近お兄ちゃんとうまくいってないんだっけか。
ルールどおりに答えなかったらごちゃごちゃ言うんだろ? なんでそんな面倒なことするんだ。 好きにさせれや。
教える側は、コテハンでキャラを作らないとダメってルールは無し?
なんとか仲直りさせてやりたいものだが
>>12 みたいなおせっかいは自分の知り合いだけにしてくれ。
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | いっそのこと AAスレにしてみるとか \  ̄ ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧ ∧ (( (Д゚#,) U | | @ .U U  ̄ ̄ ̄ ̄
>>48 A
(゚o゚)<なんでやねん
(ー)ー
))
見ず知らずの他人の宿題なんだから答えようが放置しようがどうでもいいんじゃネーノ? このスレに隔離しておければそれでいいじゃねーか。
>>35 人間関係。
まあ、レスのポリシーはちゃんと理解しようとしてるヤシ(そういうのは内容で分かる)は
理解してもらえるようにレスするし、丸投げ房は放置かコードのみを投げる。
>>50 どーい。
とにかく解答者にまでルール作るのやめてくれ。
それぞれの好きなように答えていいだろ。
54 :
デフォルトの名無しさん :02/07/09 00:06
何で人間関係が必要なんだよボゲ
一度ルールを作ると、ルール違反かそうでないかを巡って無駄な論争が起きる。 こういうスレは適当が一番だよ。
>>54 ばかやろう。このスレで一番大切なのは人間関係だ。
>>57 Σ(゚Д゚ )y-~~ マヂデ !?
人間関係は別として、変なルールを巡って無駄な労力を使うのは止めようや
>>60 賛成。でも次の宿題まではこのままだったりして。
いいからさっさと宿題を持ってこい!
63 :
デフォルトの名無しさん :02/07/09 00:14
おまいらみんなあほ。 ひきこもりがなれあってんじゃねぇ。
どうでもいいことでスレを消費しすぎ。
ま、適当に。ってことで。 個人的要望としては、女性キャラを活用してほしい(w
(´-`).。oO(宿題こないかなあ・・・)
宿題があったら持ってきてね。
心配するな。 教えて君は場の空気なんてお構い無しに質問してくるし、 教える側は空気なんてそもそも気にしない。
70 :
デフォルトの名無しさん :02/07/09 00:16
プログラマってキモイネ。
いま、教える側が供給過多になっている
そういえば、前スレの行列はどうなったのかしら
今、宿題を投げると激しく答えてもらえそうな予感。
74 :
デフォルトの名無しさん :02/07/09 00:18
C言語です。 2^1000はどうやって計算したらいいのでしょうか。 オーバーフローします。
nの中身を表示するプログラムを教えてください。
76 :
デフォルトの名無しさん :02/07/09 00:19
宿題です教えてください。 九九の表を出すプログラムをMINDで書けといわれますた。 MINDってなぁに?
>>74 言語名を書いている。教えて君度-300。
解答者が突然質問者になった予感
これから夏休みの宿題がいっぱい出てくるのかな。 ちなみに俺もそのときの気分で適当に答える派〜
てけとー てけとー
こたえてよぉ〜
>>74 #include<stdio.h>
main(){
printf(2^1000 = 10715086071862673209484250490600018105");
printf( "61404811705533607443750388370351051124");
printf( "93612249319837881569585812759467291755");
printf( "31468251871452856923140435984577574698");
printf( "57480393456777482423098542107460506237");
printf( "11418779541821530464749835819412673987");
printf( "67559165543946077062914571196477686542");
printf( "167660429831652624386837205668069376");
}
>>1 俺のティムィテムの宿題手伝ってくれるかのー
2の1000乗を求めようとしたんですが、答えが0になってしまいます。 どうしたらいいですか?
>>83 計算するだけだから、結果を表示しなくてもいいよ
87 :
デフォルトの名無しさん :02/07/09 00:24
>>83 printfは一回呼べばいいだろ。
printf("2^1000 = 10715086071862673209484250490600018105"
"61404811705533607443750388370351051124"
/* ちゅうりゃく */
"167660429831652624386837205668069376");
88 :
デフォルトの名無しさん :02/07/09 00:24
89 :
デフォルトの名無しさん :02/07/09 00:24
91 :
デフォルトの名無しさん :02/07/09 00:25
93 :
デフォルトの名無しさん :02/07/09 00:26
>>86 オーバーフローするから、内部で独自表現しなければいけない。
そこで、内部で2進数表示する。で配列をもって各配列が各桁を表してる。
で、2倍するのは、一つシフトすることだから、1000回シフトしてあげる処理
をすればいい。簡単だね♪
94 :
デフォルトの名無しさん :02/07/09 00:27
>>75 は放置ですか?
宿題の提出期限は明日までなんです!!
もうネタか宿題か区別がつかん
97 :
デフォルトの名無しさん :02/07/09 00:28
>>96 ほぼ確実にネタだ。
くだらなくてもいいから本物の宿題きぼん。
漏れのも答えてよぉ〜
101 :
デフォルトの名無しさん :02/07/09 00:29
暇つぶしになる面白い宿題こないかなー
>>100 スマソ
漏れはMINDやったこと無いんだよ
104 :
デフォルトの名無しさん :02/07/09 00:30
>>101 それでもこんなエラーが出ます。
警告 W8070 shukudai.c 11: 関数は値を返すべき(関数 main )
107 :
デフォルトの名無しさん :02/07/09 00:31
C++で分数を表すクラスを作って、四則演算と不等号に関する演算子の定義をしろとか言われました。 意味不明です。助けてください。
>105 警告じゃん。
109 :
デフォルトの名無しさん :02/07/09 00:31
>>100 Xは1
Yは1
Xを9回繰り返す
Yを9回繰り返す
X*Yを表示する
>>105 スネーク、それはエラーではなくワォーニング(ワラだ。
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | 結局みんな暇なんだね \  ̄ ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧ ∧ (( (Д゚#,) U | | @ .U U  ̄ ̄ ̄ ̄
115 :
デフォルトの名無しさん :02/07/09 00:36
>>112 ありがとうございます。
ただ、できればJavaではなくて、C++でお願いしたいのですが・・・。
先生が「こういうことはJavaではできないウンヌン」言ってたのが気になります。
116 :
デフォルトの名無しさん :02/07/09 00:36
117 :
デフォルトの名無しさん :02/07/09 00:38
なんか、逆にこのスレの人間に宿題を出すスレになりそうで怖いw
118 :
デフォルトの名無しさん :02/07/09 00:39
Cの標準ヘッダーファイルを好きなように書き換えろという宿題が出ました。 でもどうやっていいのか分かりません。。。
121 :
デフォルトの名無しさん :02/07/09 00:40
関数ポインタを使ってなんかしろ、っていう宿題が出ました。 どういった処理に使えばいいんでしょうか?
122 :
デフォルトの名無しさん :02/07/09 00:41
================== 一時停止 ==================
124 :
デフォルトの名無しさん :02/07/09 00:42
>>118 #define M main
#define D #define
#define F for
#define W while
#define S switch
これで提出してみ。先生が褒めてくれるよ。
================== 早送り ==================
================== 再生 ==================
127 :
デフォルトの名無しさん :02/07/09 00:44
Javaがコンパイルできません。たすけて〜。 メモ帳で作って、Hello.javaでCドライブのtmpホルダに 保存しました。 そして、C:\tmp>javac Hello.java でコマンド又はファイル名が違います。とでますた。 C:\tmp>dirで見てみたら、ちゃんとHello.javaが あります。どしてコンパイルできないの?
パスがとおっていない
スレ消費しすぎ。
Hello.java.txt
132 :
デフォルトの名無しさん :02/07/09 00:45
133 :
デフォルトの名無しさん :02/07/09 00:45
>>127 Javacへのパスが多分通ってません。
Javaのインストールの仕方を書いたページをあさって、がんがってください。
134 :
デフォルトの名無しさん :02/07/09 00:46
暇だったらプログラムコンテストの問題でもやってみるか?w
>>127 tmpにパスはとおしていますか。
JDKはインストールしてますよね。
137 :
デフォルトの名無しさん :02/07/09 00:47
>>135 tmpはカレントなんだからパスを通さなくてもいいだろ
>136 ナイスキーワード(そのものずばりだが)
140 :
デフォルトの名無しさん :02/07/09 00:49
オイオイまだ3時間も経って無いのに130レスかよ
みなさんありがとうございます。
>>136 さんのURLをじっくり読んでみます。
javacへのパスは確かに取っています。 メモ帖でtest.javaって保存して、エクスプローラでもtest.javaって ファイルがあることを確認しました。 でも、そのフォルダに移動して javac test.java ってうっても、 エラー: test.java を読み込めません。 エラー 1 個 ってでてしまいます。どうすればいいでしょうか?
143 :
デフォルトの名無しさん :02/07/09 00:50
>142 .txt
145 :
デフォルトの名無しさん :02/07/09 00:51
>>137 そだね。環境変数のことをいいたかったけど、こりゃ伝わんねーわ。(W
ねます。
147 :
デフォルトの名無しさん :02/07/09 00:52
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | やっと落ち着いたか \  ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧ ∧ ( ゚Д゚)y━~~ U | 〜| | U U  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
答える気満々な時は質問がなく、たまたまちょっと覗いただけの時は 質問が滞ってるのはなぜですか? A4レポート用紙3枚程度にまとめないといけないです。 言語は日本語です。
cout<<"(゚ω゚=)";
漏れは日本語はパスだな〜
「いけないです」って言い回しより「いけません」のほうが 好きだなぁと、昔、学部学生のレポートを添削していたときに 思ったのを149を読んで思い出した。
>>154 だったら前者のほうが好感度高いじゃないか
「〜しなければならない」
「いけないです」って日本語として正しくない気がするのだが。
>>149 よくわからないので、とりあえず歌ってみたいと思います。
真夜中過ぎに目がさめて 君のくれたメ〜ル読みかえす
まだ見ぬ その笑顔 僕の中で膨らむ
夢はモデムに託すもの ハ〜ドディスクは愛のLogだらけ
二人を 繋いでる 赤いモジュラ〜ケ〜ブル
チャットしていたい Ah− 君と朝が来るまで
あふれる文字 時を止める 燃えるハ〜ト抑えきれずに
悲しみの NIFTY-Serve 逢いたいけれど
君の 住む街はとても遠く
悲しみの NIFTY-Serve PAGE 送るよ 今日も
スクラコ〜ドは 二人のイニシャルさ
プログラムが動かないのですが、 関数を作るときに全てvoid XXXXXX(){〜〜〜〜〜〜〜〜} としてはいけないのでしょうか? 何が悪いのか分からなくて4時間もちまちまいじってます…。(TT) いろいろな部分を置き換えても一向に動く気配がないので、 初心者の陥りやすいミスを教えてください…。お願いします。 あと3時間で課題終わらせなくてはいけないので…。
動かぬソースの一部を晒して
162 :
デフォルトの名無しさん :02/07/09 01:11
>>159 コンパイルし忘れて、ソースファイルで起動しようとしてる
原因と思われる場所を晒します…。 void fie() { for(i=0;i<12;i++){ for(j=0;j<4;j++){ pic = f[i][j]; sp_set(sp,pic,64*j+32,i*32+32,1); } sp_set(sp,HIDARIAO,288,i*32+32,1); sp_set(sp,MARUAO,320,i*32+32,1); sp_set(sp,MIGIAO,352,i*32+32,1); } for(j=0;j<4;j++){ sp_set(sp,SARA,64*j+32,416,2); } } 中略 そして、mainの中です。↓ while(!(GetKeyState(VK_ESCAPE) & 0x80)){ fie(); sp_set(sp,MARUAKA,320,point*32,2); fieが全く認識されません…。(つд`;) お願いします…。
>>162 うちの祖母でもそんなことはしでかさない
コンパイルは通りました。 あと3時間ていうのは学校が遠いのに早朝に締めきりがあるんです…。 発狂しそうです。。゚・(つд`)・゚。
>>163 単体でfie()を呼んでみる
whileの条件が妥当か検討する
マジ質問?
while の中身が実行されてないのでは。
>166 この場合のwhileの条件式は、Escキーが押されていない場合ですよね? なら、条件は間違ってないのですが…。 >168 なぜか文字入力だけ出来ました…。 画像は数値を変えたりしましたがダメでした。(;;
埒があかねぇな。どっかのうpろだに固めてぜんぶあげてみ。
173 :
デフォルトの名無しさん :02/07/09 01:48
>>172 > int main(char *argv)
これはないだろ
>>172 #include "stdio.h"
同じフォルダにstdio.hなんて入っていないようだが?
あう、それなんですが、 私が受けている授業では変則的なコンパイラを使っているらしく、 その形から省略できないとの事です。(つд`) int 以外の部分を削るとエラーが出ました…。すみません…。
>>175 あなたはタナカヒサテルさんではないのね?
うう、授業で習ったことはいいかげんなことだったんでしょうか(;; #include "stdio.h" …も、おまじないみたいなものだから入れておくようにと指示がありました。 いろいろとお騒がせしました…。ごめんなさい。 もう一度テキストとにらめっこしながらここの助言を参考に頑張ります…。 >176 違いますよ? タナカさんってどなた?
#include <stdio.h>
なんかそら恐ろしい授業だなぁ。
VC6でコンパイル通ったぞ。 どんなコンパイラ使ってるんだ? 頭の"stdio.h"は<stdio.h>に直せ。 それからtime.hがいる。
181 :
デフォルトの名無しさん :02/07/09 02:13
ageとこう
include を "おまじない" で済ましちゃう授業なんて有るのか。
おまじないはまだ許せるけど""で括るように教えてるのは。。。
180だが。 なんだコンパイルは通ったのか・・・ でももう消しちゃった。
これってDirectX使ってるの? VCもbccもFatalがでる。libが開けないらしい。
俺も同じく。 lib開けないらしい
libへのパスが通ってないとか、じゃなく?
>>188 パスじゃなくてファイルそのものが無かった。
あらま。
c言語でコメント(/*…*/)を削除するプログラムを作りたいのですが printf("コメントは/*…*/で表記する"); といった2重引用符中の/**/を消しちゃあまずいわけで、 こういった場合はどう処理すればいいでしょうか? IN or OUT をとる関数stateを作り、 入力が"かつstate=OUTの場合stateをINに、 入力が"かつstate=INの場合stateをOUTとして state=INの場合にはコメントは削除しない。 state=OUTの場合にはコメントを削除する。 として見たところ上の例ではうまく作動しますが printf("\"");/*…*/ となると\"の"でOUTになってしまい、うまくいきません。 "の直前が\の場合にOUTにはしないと条件を加えてたところ printf("\\");/*…*/ を出力したい場合に誤作動することになってしまいます。 何かスマートな方法があれば御指南願います。
>>192 色が変わるエディタの画面をキャプチャして解析すれ
>>192 stateを2つに限らず、4つとか5つにしてもいいっしょ。
なるほど、オートマトンってこういうときに便利なんですね。 しかしながらC言語の宿題な訳で、 受理する受理しないをプログラムで、といわれても それこそワケ・ワカ・ラン!な状態です。
>>197 とりうる状態をオートマトンで書いてみれ。
"だけではなくて、\も特殊文字として扱ってあげてください。
取り敢えず、 1)最初の"/" 2)最初の"*" 3)二番目の"*" 4)二番目の"/" 5)最初の'"' 6)二番目の'"' 7)最初の"\" 8)二番目の"\" 8つのstateを用意してやってみ。
201 :
デフォルトの名無しさん :02/07/09 04:08
こんな時間に人いっぱいいますね
皆様。かんしゃぁ〜
>>196 殿
そういうことも考えたのですが、
printf("\t\\\\\\\\\\\\\\\"");
みたいな状況(かなり無茶苦茶ですが)の時
\の個数が偶数かつ\"で…とか
もしくは\\\"となったときの"は…
など状況毎にstateを作ると
あまりに非効率な気がした物で。
これをオートマトンでやれば効率がいい
というのは十分理解できるのですが、
オートマトン履修中の身で、かん移図
描いてみても、かなり怪しい気がします。
197に書いたようにプログラムにすると…
あと、C言語歴は4月からです。
>>202 いや・・・・状況毎にstateを作る、まさにそれが「決定性有限状態オートマトン」
なわけですが。それしか方法ないです。
こういう状態遷移が起きるものは、 オートマトンの考え方を使えば 頭の中を整理してプログラムを作れて良いよってこと。
嘔吐マン
スレのスピードと自分の思考が追いつかないです(;´Д`)
\をどう処理すべきかな訳ですね。
\t\nと\\\nの\の状態を単純に
IN OUT の状態で判断できるのかな?むぅ
って感じで、別の状態として考えるべきか
と考えつつ、むぅぅぅう??です。
>>203 殿
自分は状態が不完全な形で
やっていた訳ですな。
とりあえず○○×を受理する場合。
とか状態数が少ない場合を
じっくり考えつつやってみようかと思います。
スレを返してくれた方々サンクスコ!
>>206 > スレを返してくれた方々サンクスコ!
いやいや、どういたしまして。
とりえあず、 スレを返すってなに? と自分でつっこんでおきます。
159です。みなさん、ありがとうございました〜。 提出はできなかったけど(おかげで完成はできましたけどね)、 プログラムが嫌いにならないですみました。 本当に感謝です。
>>206 単に\が来たら次の文字を読みとばす、とかじゃダメですか?
眠いのでおかしなこと言ってたらすまそ
提出が午前4時迄ってなんかすごいね
212 :
デフォルトの名無しさん :02/07/09 10:10
すみません、課題で余因子行列を使って逆行列をもとめる Cのプログラムを作っているのですが、プログラムで 余因子行列をどうやって求めればいいかわかりません。 教えてくださいです。
>>212 余因子行列の求め方自体は知っているのか?
>>213 一応知っているのですが、どうやってプログラムとして書けば
いいのか、うまいこと思いつかないです。
>>214 配列に放り込んで求めるってのじゃだめ?
スマートな方法は良くわからん。
>>215 配列を使って行列を入力してそこから余因子行列をどうやって
求めればいいかわからないでのですが、
>>216 それは公式で求められるでしょ。
よく公式に使われるi,jを配列の要素と考えれば。
で、i,jの回数分forで回す。
それとも俺が余因子行列を勘違いしてるのかな・・・。
(´-`).。oO(余因子行列というものが分からなくて力になれない)
>>217 説明不足でした。
公式で求めようとすると、for文をどこで使えばいいかがわからないのです。
連続性がわからないと言うか
220 :
デフォルトの名無しさん :02/07/09 11:19
>>219 スキップするところは、if と continue で。
3x3だったら全部の要素を書いちゃえば? 一般に作るなら、行列式を求める部分と i行j列を省く部分を作ればいいかな
>>224 i行j列を省いてどのように作ればよいのでしょうか?
>>225 省いた列(j列)には 単位行列の列(j列)をぶち込めば良いんじゃないのか?
A[i][j]の余因子は、行列A の j列において i行のみが 1 となる行列の行列式だろ? サラスで行列式を求め、あとはクラメルの公式を使って 行列A の逆行列を求めれば良いのでは? もう行列なんて覚えてないから自信ないけどさ……
宿題を、全部やれ、と。
yes
232 :
デフォルトの名無しさん :02/07/09 14:23
for文のプログラム sum:=0; for i:=1 to 10 do begin sum:=sum+i end ; while文のプログラム sum:=0; i :=1; while i<=10 do begin ( ) end; 同じ働きをするには( )になにを記入すればいいんですか?
いまどきPascalで授業してるところがあるのか。。。
sum = sum + i じゃないの?
つか、コンパイルとおらないし。
237 :
デフォルトの名無しさん :02/07/09 14:54
こんなのも出来ないの?ここの人達
ほう、これが煽りですか。
相当低ラベルですね。
Writeln( 'こんな単位いらんぞグゥオラ!' ); i:=10000;
ママ、サンタクロースはいるの?
昨年末、住居不法侵入で逮捕されて獄中なのよ。
Pascalはインクリメントって無いんだよね? i:=1になるのか?
おい、お前ら! リストとツリーの違いを教えてください。 おねがいします。
sum := sum + 1; i := i + 1; 漏れ天才。
漏れ凡才?
sum:=55
sum := sum + i; i += i + 1; 漏れ秀才。
漏れ低脳発覚。 i := i + 1;
みんな、暇だからネタでやっているんだよね?
>>249 最初ので良かったんじゃないの?
Pascal知らんけど
>253 だめぽいじゃん
馬鹿ばっか┐(;´〜`)┌
おい! 俺の質問にも答えてください。 おねがいします。
>>256 貴殿の考えをとりあえず書きなされ。
みんなが総力あげて叩く
おい! メリークリトリス!!
保守。
260 :
デフォルトの名無しさん :02/07/09 15:24
tree_baka
>>256 根本的に違う。データ構造という以外に共通点はない。以上。
ママ、クリトリスってなぁに?
根本的にデータ構造という共通点があるんじゃねえの?ゲラ
最近はスレ立てたキャラが出てこないんだな。
ネタスレ
くりとりす(゚д゚)ウマー
リストとツリーの解説なら、30分くらいがんばって検索すれば 見つかるんじゃねーの?
>269 よそで聞き始めたから、検索する気ゼロっぽいですな
すみません、行列を入力して行列式を計算して、そのあとに余因子行列を表示して 逆行列を表示して、行列と逆行列の掛け算を表示するように作ったのですが、 どこが間違っているかわりますか? float mat2[3][3],e[3][3]; int a[3][3],mat[3][3],i,j,x,y,z; for(i=0;i<3;i++) {for(j=0;j<3;j++){ scanf("%d",&a[i][j]);}} for(i=0;i<3;i++){for(j=0;j<3;j++){mat[i][j]=0;mat2[i][j]=0.0;}} x=0;y=0;z=0; y=a[0][0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*a[2][0]+a[0][2]*a[1][0]*a[2][1]; z=a[0][2]*a[1][1]*a[2][0]+a[0][1]*a[1][0]*a[2][2]+a[0][0]*a[2][1]*a[1][2]; x=y-z; for(i=0;i<3;i++){ printf("%4d %4d %4d \n",a[i][0],a[i][1],a[i][2]);} printf("行列aの行列式は%dです。\n",x); else{ mat[0][0]=a[1][1]*a[2][2]-a[1][2]*a[2][1]; mat[0][1]=a[0][1]*a[2][2]-a[0][2]*a[2][1]; mat[0][2]=a[0][1]*a[1][2]-a[0][2]*a[1][1]; mat[1][0]=a[1][0]*a[2][2]-a[1][2]*a[2][0]; mat[1][1]=a[0][0]*a[2][2]-a[0][2]*a[2][0]; mat[1][2]=a[0][0]*a[1][2]-a[0][2]*a[1][0]; mat[2][0]=a[1][0]*a[2][1]-a[1][1]*a[2][0]; mat[2][1]=a[0][0]*a[2][1]-a[0][1]*a[2][0]; mat[2][2]=a[0][0]*a[1][1]-a[0][1]*a[1][0]; for(i=0;i<3;i++){for(j=0;j<3;j++) mat2[i][j]=mat[j][i] / x;} or(i=0;i<3;i++) {printf("%4d %4d %4d \n",mat[0][i],mat[1][i],mat[2][i]);} printf("逆行列a^-1です。\n"); for(i=0;i<3;i++){ printf("%4.2f %4.2f %4.2f \n",mat2[i][0],mat2[i][1],mat2[i][2]);} for(i=0;i<3;i++) {for(j=0;j<3;j++) e[i][j]=0.0;} for(i=0;i<3;i++){for(j=0;j<3;j++){ e[i][0]+=a[i][j]*mat2[j][0]; e[i][1]+=a[i][j]*mat2[j][1]; e[i][2]+=a[i][j]*mat2[j][2];}} printf("aの行列と逆行列の計算です。\n"); for(i=0;i<3;i++) {printf("%4.2f %4.2f %4.2f \n",e[i][0],e[i][1],e[i][2]);}
激しく読みたくねぇ
わかるません。
>>271 とりあえず、ifが見あたらないのにelseがあるのはどういうことか説明してくれ。
or(i=0;i<3;i++)
xが0の時とかどうなんの?
mat2[i][j]= mat[j][i] / x; キャストしてやれ
move -1.23456e+01 -9.999999e+05 ↑のような文字列から-1.23456e+01だけを取り出して double型に変換して使いたいんですがどうすればいいかわかりません. あほな質問ですがどうぞよろしく. ちなみに-1.23456e+01は %e で表示されているようです.
>>279 double a, b;
sscanf("move %e %e", &a, &b);
atof
%le じゃねーの? double なんだろ。 漏れが昔ハマったんだが。
>>282 そうだね。printf()系は"l"を付ける必要はないんだが、scanf()系は
付けないとfloatになってしまう。
>>271 printf("行列aの行列式は%dです。\n",x);
else{ ←これ
mat[0][0]=a[1][1]*a[2][2]-a[1][2]*a[2][1];
この else は、ifを持たない else なのでおかしいです。
誰か、10桁の素数割り出しプログラム作ってください。
>286 手伝うぐらいならかまわんが。
>>286 ・質問内容がちゃんと日本語になっていること
・言語名を入れること。
・自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
粘着くん登場
三つ目が人で終わってるのに思わず笑った。
3×3行列の逆行列を出力するプログラムを教えてください。 お願いします。
>>292 簡単な奴だと二通りある。
1)掃き出し法(ガウス・ジョルダン消去法)で求める。
2)余因子行列から求める。
本に書いてある逆行列を求める関数を丸写し。 void int(double a[NN][NN]) { int i, j, k; double p, q; for (k = 0; k < NN; k++) { p = a[k][k]; a[k][k] = 1.0; for (j = 0; j < NN; j++) a[k][j] /= p; for (i = 0; i < NN; i++) { if (i != k) { q = a[i][k]; a[i][k] = 0.0; for (j = 0; j < NN; j++) a[i][j] -= q * a[k][j]; } } } }
>>292 余因子行列は、行列式を求めてから計算しなければいけないが、
3×3までの行列なら公式で導ける。それ以上になると行列式を
求めるのが面倒。
掃き出し法は手計算が面倒だが、コンピュータ向き。
>>295 に例を
示した。
>>296 全角スペースを半角スペースにしてください。
>>298 voidとintを両方指定することはできません。ってでるんですけど・・・。
>>299 プロトタイプ宣言が抜けている。
ヘッダファイルのインクルードの後に次の一行を入れれ。
void int(double a[NN][NN]);
>>301 > プロトタイプ宣言が抜けている。
そういう問題じゃないだろ。
関数名が予約語(int)になってるのがまずいのでは?
ぐわあああああああーーーーーースンマソン!!!!!! int()は写し間違えた。指が勝手に動いて・・・・・ inv()と書くつもりでした。ごめんごめんごめん。
>>306 さすがに今度はコンパイルして確かめてみたよ。あとエラーが出るとすれば
#define NN 3
を付けてないことぐらいかな?
#define NN 3
void inv(double a[NN][NN])
{
int i, j, k;
double p, q;
for (k = 0; k < NN; k++) {
p = a[k][k];
a[k][k] = 1.0;
for (j = 0; j < NN; j++) a[k][j] /= p;
for (i = 0; i < NN; i++) {
if (i != k) {
q = a[i][k];
a[i][k] = 0.0;
for (j = 0; j < NN; j++) a[i][j] -= q * a[k][j];
}
}
}
}
>>307 でないっすよ
任意次元の行列式を求める方法が分かっていても、 それをプログラムに直すことが出来ない。
>>308 -=・=- -=・=-
気になる。エラーメッセージをコピペしてくれ。
まさか・・・・・・とは思うが、main()関数を書いてないのか? そこまではフォローしきれんぞ。誰か後をたのむ。
>>313 parserエラー?内部エラーじゃないの?コンパイラは何?
>>315 ちょっと待ってて。Cmachineはさすがに入れてないから取ってくる。
Cmachine バージョン2.00ならエラー出なかったぞ。 #define NN 3 void inv(double a[NN][NN]); int main(void) { double mat[NN][NN]; inv(mat); return 0; } void inv(double a[NN][NN]) { int i, j, k; double p, q; for (k = 0; k < NN; k++) { p = a[k][k]; a[k][k] = 1.0; for (j = 0; j < NN; j++) a[k][j] /= p; for (i = 0; i < NN; i++) { if (i != k) { q = a[i][k]; a[i][k] = 0.0; for (j = 0; j < NN; j++) a[i][j] -= q * a[k][j]; } } } }
int main(void) { double a[3][3]; a[0][0] = 1; a[0][1] = 1; a[0][2] = 1; a[1][0] = 1; a[1][1] = 2; a[1][2] = 3; a[2][0] = 2; a[2][1] = 4; a[2][2] = 5; int i, j, k; double p, q; for (k = 0; k < 3; k++) { p = a[k][k]; a[k][k] = 1.0; for (j = 0; j < 3; j++) a[k][j] /= p; for (i = 0; i < 3; i++) { if (i != k) { q = a[i][k]; a[i][k] = 0.0; for (j = 0; j < 3; j++) a[i][j] -= q * a[k][j]; } } } int c,d; for(c=0;c<=2;c++) { for(d=0;d<=2;d++) { printf("inv a[%d][%d] = %d\n",c,d,a[c][d]); } } return 0; } エラーは出ないが、正しい値が求まらない
0で割ってますとか出てくるんだけど
>>318 doubleの表示は"%f"です。
>>319 if文の位置が本では間違っていたようです。次に正しいプログラムを
書きます。
#include <stdio.h> int main(void) { double a[3][3]; int i, j, k; double p, q; int c,d; a[0][0] = 1; a[0][1] = 1; a[0][2] = 1; a[1][0] = 1; a[1][1] = 2; a[1][2] = 3; a[2][0] = 2; a[2][1] = 4; a[2][2] = 5; for (k = 0; k < 3; k++) { p = a[k][k]; a[k][k] = 1.0; for (j = 0; j < 3; j++) a[k][j] /= p; for (i = 0; i < 3; i++) { q = a[i][k]; a[i][k] = 0.0; if (i != k) for (j = 0; j < 3; j++) a[i][j] -= q * a[k][j]; } } for(c=0;c<=2;c++) { for(d=0;d<=2;d++) { printf("inv a[%d][%d] = %f\n",c,d,a[c][d]); } } return 0; }
>>321 > doubleの表示は"%f"です。
は・・・恥ずかしい・・・
a[0][0] = 2;
a[0][1] = 1;
a[0][2] = -1;
a[1][0] = -1;
a[1][1] = -3;
a[1][2] = 2;
a[2][0] = 0;
a[2][1] = 2;
a[2][2] = -1;
が正解
>>320 LU分解ですね。クラウト法により下三角行列、上三角行列に
分けて計算する方法です。大きな行列では特に速度が向上
します。
3×3程度の行列ではかえって煩雑です。それよりも、a[0][0] = 0
のような行列が解けない問題があるので、ピボット選択について
考慮した方がいいかもしれません。
こんなんどうですか。 #include <stdio.h> #include <memory.h> int determinant(int a[3][3]); int main(void) { int a[3][3],b[3][3],detA;// a:元行列 b:余因子行列 detA:行列Aの行列式 int c[3][3],i,m,k;// temp double r[3][3];// 結果 a[0][0] = 1; a[0][1] = 1; a[0][2] = 1; a[1][0] = 1; a[1][1] = 2; a[1][2] = 3; a[2][0] = 2; a[2][1] = 4; a[2][2] = 5; // 行列式を表示するモナー detA = determinant(a); printf("detA = %d\n",detA); // 余因子行列を表示するモナー for(i=0;i<=2;i++) { for(m=0;m<=2;m++) { memcpy(c,a,sizeof(a)); for(k=0;k<=2;k++) { if(k==i) { c[k][m]=1; }else{ c[k][m]=0; } } //r[i][m] = determinant(c) / detA; b[i][m] = determinant(c); printf("b[%d][%d] = %d\n",i,m,b[i][m]); } } // 逆行列を表示するモナー for(i=0;i<=2;i++) { for(m=0;m<=2;m++) { r[i][m] = b[m][i] / detA; printf("r[%d][%d] = %f\n",i,m,r[i][m]); } } return 0; } // 行列式を求める関数モナー int determinant(int a[3][3]) { return a[0][0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*a[2][0]+a[0][2]*a[1][0]*a[2][1] -a[0][2]*a[1][1]*a[2][0]-a[0][1]*a[1][0]*a[2][2]-a[0][0]*a[2][1]*a[1][2]; }
>>326 ご苦労様でした・・・・・余因子行列を求める部分は再帰的に適用すれば
もっと大きなプログラムにも使えるでしょう。しかし大変ですね。
>>328 うむ。バケットソートの説明としては恐ろしく分かりにくい。
バケットソートしたいだけならキューなんか使わず配列でやれ。
ila(20:47 PM) : あー、やっと7-1おわった hila(20:47 PM) : また書いて hila(20:48 PM) : 質問しといてなんですが なんとかわかりました(笑)
hila(20:48 PM) : とかってなんだったんだろ
333get!!
今度はマージソートで、またあるサイトを見ながらやってるのですが 条件分岐でわからないところがあります。
336 :
デフォルトの名無しさん :02/07/11 03:13
>えれなさん あなたぴたテンとかみてますか?
まちがえました >かおるさん
>>335 重くて見れんぞ。それに、マージソートはリスト構造向き。
配列でやろうとすると苦労する。
ごはんとかできます
340 :
デフォルトの名無しさん :02/07/11 17:29
冷やし中華始めました。
かおるタンが作ってくれるのか? 宿題ばかりでなく料理まで・・・ハァハァ
>>335 わかったよ。マージソートは、2つのラン(ソート済み配列)をボトムアップ
的に併合してソートする方法で、このプログラムではそのランとは、
1.i は p〜q
2.j は p+1〜r
をインデックスするようになっている。したがって i と j がそれぞれの範囲を
はみ出してしまうと、同じ値が2度以上書き込まれてしまうので、j>rとi<=q
という条件が必要なのです。特に j は範囲を上へはみ出すと配列外を指して
しまうのでまずい。
>>345 スマソ。
× j は p+1〜q
○ j は q+1〜r
です。
う〜このBBS訂正がきかないので困るな〜。 × j は q+1〜r ○ j は q+1〜r-1
>>351 おつかれ。
でも、反射神経で質問じゃなくて脊髄反射でないかい?
>>352 修正しときますた。にしても試しにVS.NETでHTML編集をしてみたんですが、
案の定、滅茶苦茶見難いソースに変換されますた。
Meta name="description" が涙でよく見えない。。。
>>349 蜂蜜がけはかなりエロイイ!よ。
でも風呂場とかでやらないと後始末大変。
357 :
デフォルトの名無しさん :02/07/12 20:46
ps |grep の実行結果をkillしたいのですが うまくいきません。 よろしくおねがいします。 main() { int x[1000]; int *px; px=&x[0]; *px=system("ps |grep ppppp "); system("kill %s",px); }
358 :
デフォルトの名無しさん :02/07/12 21:01
入力した2つの数字を足して出力するという単純なプログラムなんですが、 何故か入力ルーチンの挙動がおかしいです。 言語は8086アセンブラです。 mainprocnear mov ax,Data mov ds,ax ;-------------------------------------- mov bl,31h LOOP_1: mov ah,02h ;何回目かの入力を出力 mov dl,bl int 21h mov ah,09h ;→を出力 mov dx,offset P_1 int 21h call Input inc bl cmp bl,33h jnz LOOP_1 ;-------------------------------------- mov ax,4C00h int21h mainendp ;-------------------------------------- Inputprocnear mov cx,03 IN_LOOP:mov ah,01h int 21h cmp al,0dh jz IN_EXIT sub al,30h mov ah,00 push ax loop IN_LOOP mov ah,09h mov dx,offset E_1;改行してます int 21h IN_EXIT:ret Inputendp ;-------------------------------------- Codeends endmain アセンブラで申し訳ないんですが何方か助言をお願いします。
さてと、恒例だが、
>>357 うまくいかないってなんだ。
環境は何を使ってるんだ。
アセンブラを教えてる学校ってあるんだ
ミスってる・・・ 正しくは mainprocnear→main proc near mainendp→main endp Inputprocnear→Input proc near Inputendp→Input endp Codeends→Code ends endmain→end main です。
>>357 system("kill %s",px);
ってなんスか?
>>360 なんか入力する数字によっては、CPUが不正な命令を検出しました
とか画面がバグったりするんです。
>>361 うちの学校もやってたよ。聞くところによるとまだやってるらしい。
>>359 レスどうもです。
一度目のsystem()の実行はうまくいっているのですが、
systemの実行結果を配列に格納する作業がうまくいっていないようです。
環境はred hatです。
>>363 現在実行中のpppppというプロセスを
killコマンドで強制終了させたいのです。
>>366 実効がうまくいってるっていうのはどうやって確認できたの?
つか、コンパイルできないとおもうんだけどな、、 あ、宣言なしはint system(...);の規則が適用されてるのか。
>>367 、
>>368 コンパイルエラーはでなかったので、a.outで実行を確認できました。
systemの次の行にprintfを入れて配列の中身を見ようとしたんですが、
何も入っていないので、そこが悪いようです。
だからsystemの実行結果を配列に格納する方法を教えてもらえると
ありがたいです。
370 :
デフォルトの名無しさん :02/07/12 21:40
Matlabっていうプログラムの質問よろしいですか? 余弦波のDFT時間とFFT時間を求めるときってどういうコマンドで良いのでしょうか? リスト。 N=2048; f=0.1; A=1.0; n=0:1 :N-1; x=A*cos(2*pi*f*n); …このあとどうしたら良いのでしょう。fft(x)やdftmtxなどでやるのでしょうか? お願いします。
>369 systemでは、リダイレクトファイルを開くぐらいしか 方法がないような。ふつー、popenとかつかうが、、
>>369 system関数って戻り値は結果じゃないでしょ?
SJFスケジューリングのアルゴリズムをc言語で 実現したものを教えてください。
短い順にソート
これじゃダメすか? { int M = 0; int i; for(i = MIN_PID; i < last_pid; i++) if ((pcb_table[i].time_start <= clock) && (pcb_table[i].state == READY)) { if(pcb_table[M].period_required > pcb_table[i].period_required) { M = i; return M; } } return -1; }
376 :
デフォルトの名無しさん :02/07/13 00:30
DFT時間ってなんじゃらほい?
377 :
デフォルトの名無しさん :02/07/13 01:32
すんません。 DFTというのは離散時間フーリエ変換のことで、FFTは高速フーリエ変換のことです。 信号処理なんかで使われるものなんですが、ここにわかる人がいらっしゃらないなら板違いだったということですか…。 Matlabがわかる信号処理系の人いませんかねぇ…困ったなぁ。
いやそうじゃなくて、 DFT時間 ってのはなんだ? DFTにかかる時間か??
シミュ板にMATLABスレあるけど返事がいつ返ってくるかは謎 下手すると年単位
fft()じゃなにがいけないんだ? そのためのMATLABだろう荷…
381 :
デフォルトの名無しさん :02/07/13 01:47
visual C++6.0を使っているのですが、 GetCurrentDirectoryのような関数から stringクラスに値を入れるにはどうすればよいのでしょうか? 方法としては、char配列にいったん取得してから代入は できるのですが、一度char配列を経由しないで、 直接stringオブジェクトに入れることはできないのでしょうか?
> main() > { > int x[1000]; > int *px; > px=&x[0]; > > *px=system("ps |grep ppppp "); > system("kill %s",px); > } 1、何故 int 型が 1000 個も必要だと思ったのかが分からない。 2、px の存在意義が分からない。 3、何故 system の返り値が int* だと思ったのかが分からない。 4、ps | grep ppppp の返り値がプロセス番号になるとも思えない。 5、system("kill %s",px);ってなんスか?
383 :
デフォルトの名無しさん :02/07/13 01:53
じゃさっさとパパの下半身の宿題手伝え屋小娘が!!
>>1
384 :
デフォルトの名無しさん :02/07/13 02:43
>378 正直な話書き込んだ私も困ってます。DFT時間って何?と 問題文はそうしか書いてなくて、まぁ私は初心者ですからここにきてる人なら言葉の意味もわかるかと思ったのですが…。 おそらくDFTにかかる時間とFFTにかかる時間の違いを見るということだと思います。 いや、そのことに意味があるのか…。 それ以前に、教科書のその章で出てきているのはfft(x)とdftmtx(N)だけなので それを使うとしても、振幅スペクトル等で使うしかないのではと思うのです。 う〜む、どうしたものか。 >379 じつはここに来る前にシュミ版(Matlab)へ書いたのですがお返事はいずこへ…。 いやきっとあの板の人も???と思っているのだと。 とりあえず教科書がアポーンなこと書いているかもしれないので、近いうち先生にも聞いてみます。
>おそらくDFTにかかる時間とFFTにかかる時間の違いを見るということだと思います。 じゃあfft(x)とdftmtx(N)をつかって時間の違いをみてくれ。 >いや、そのことに意味があるのか…。 dftとfft似かかる時間の違いをみるんだろ? dftはO(n^2)だし、fftは。。。忘れた・ >それ以前に、教科書のその章で出てきているのはfft(x)とdftmtx(N)だけなので それを使うとしても、振幅スペクトル等で使うしかないのではと思うのです。 う〜む、どうしたものか。 振幅スペクトルとかは関係ないだろ?かかる時間をしらべるだけなんだから
>>357 #!/bin/sh
kill `ps | grep ppppp | grep -v grep | awk '{print $1'}`
間違い。 #!/bin/sh kill `ps | grep ppppp | grep -v grep | awk '{print $1}'`
>>381 これは合法か?
std::string dir;
dir.resize(MAX_PATH);
dir.resize(GetCurrentDirectory(MAX_PATH, &s[0]));
391 :
デフォルトの名無しさん :02/07/13 14:47
fftは(N/2)log2N
メールのスレッド表示をさせるための アルゴリズムを教えてください。 メッセージIDとReferencesヘッダの中身がそれぞれ 順番に配列に入ってると仮定した場合、どうすればいいでしょうか?
394 :
わからない :02/07/13 18:55
間違えてCスレで聞いてしまいました。 どう説明していいかわからないのですが、「a^63をコンピューターに計算させようとしたとき、最低何回乗算すれば求まるか」という問題で、僕は答えが8回だと思ったのですが、解答を見ると10回になっていました。 ↓具体的に考えた例を挙げておきます。 a^3 = a^1 * a^1 * a^1 a^7 = a^3 * a^3 * a^1 a^21 = a^7 * a^7 * a^7 a^63 = a^21 * a^21 * a^21 ↓模範解答ではこうなっていました。 a^1 * a^1 = a^2 a^2 * a^2 = a^4 a^4 * a^4 = a^8 a^8 * a^8 = a^16 a^16 * a^16 = a^32 a^32 * a^16 = a^48 a^48 * a^8 = a^56 a^56 * a^4 = a^60 a^60 * a^2 = a^62 a^62 * a^1 = a^63 一体僕の解答のどこがおかしいのか教えてください。
>>394 で、あっちでの回答はすべて無視か。死んだ方が良いぞ。
>>394 間違っていないが、模範解答は累乗は対数時間でできることを
言いたかったのだと思う。
コンピュータでは先のような最適化は困難。
>>395 あっちの解答全部間違ってるし、ツッコミ済みだと思うが。
死んだ方がいい395ハケーン
|ω・`)つ ○⊂(Φω| アリガト・・・
-=・=- -=・=-
lispで電卓を作る課題を書き上げないといけないんです。 できれば後置記法の方で作成したいんです。 誰かCで後置記法による電卓プログラム(sincosあって括弧しようできるくらい)の ソースを持っている方はいらっしゃいませんか? いや、Lispでも越したこと無いんですが 普通Lispで電卓作らないと思う・・・。 同じような課題出されたことある人っていらっしゃいます?
404 :
デフォルトの名無しさん :02/07/14 00:22
C++のコードを例外を用いて書かないといけないのですが、 Visual Studio .NETだと、メモリ確保に失敗すると、0を返してくると聞いたのですが、 どうすればbac_allocをthrowしてくれるのでしょうか?
405 :
デフォルトの名無しさん :02/07/14 00:54
>>404 無理。
どうあがいてもbac_allocはthrowされない。
>>405 どうもありがとうございました。
ということはgccとかを使うしかないですね・・・
>>406 戻り値のチェックすればいい話では?
そこでthrowすれば解決。面倒だけど。
>>405 6.0だとbad_allocなげる方法があるけど、.netだとその方法は使えないの?
>>407 勝手にやってくれると便利だと思ったんですが、
それしか無理ならそれでやってみようと思います。
>>408 .NETから入ったもので、6.0は分からないのですが、
検索してみてもmicrosoftのバグの説明のサイトやら
日記のサイトやらでなかなか肝心な方法が分からないのですが、
よろしければ御教授いただけないでしょうか。
410 :
デフォルトの名無しさん :02/07/14 02:28
403と似たような質問なんですけど、 バイト先でJavaの勉強してるんですけど 社員から電卓を作るように言われました。 その際に、UMLの静的モデルを書けと言われたんですが どんな感じにしたらベストでしょうか?
>>409 set_new_handler()で、bad_allocを投げるハンドラを設定する。
412 :
デフォルトの名無しさん :02/07/14 07:25
>>409 bad_allocはなげれるけどbac_allocはなげれないのよ
>>410 調べれば良かろう。
シャインに聞けば良かろう。
漏れは放置ですか?(´・ω・`)ショボーン
>>414 push ax に対応する pop は?
>>415 レスありがとうございます。
popは後の計算ルーチンで使ってます。
因みに試しにスタックセグメントの使用を止めて
データセグメント領域に入れるようにしたら、バグのパターンが変わりました。
何故でしょうか?
>>418 漏れもそう思ったのですが、スタックは512b確保してますし・・・
stack segment stack
dw 100h dup(?)
stack ends
あと入力値によっては、CPUが不正命令を検出しました。とか
入力が終了せずに1回目と2回目の入力がループするのですが、
これもメモリ破壊で起きる現象なんでしょうか?
ご教授お願いします。
>>419 ret がスタックを使うというのは知ってる?
>>420 さん
おぉぉぉ、その突っ込みはかなりクリティカルです!
今調べたのですが、サブルーチンをcallすると
IPレジスタがpushされて、retでIPレジスタがpopされるんですね?
で、サブルーチンでアホなスタックの使い方をするとプログラムが飛ぶと、
謎はすべてとけました!!420さんありがとうございました!!
>>411 ありがとうございます。そんな手があったんですね。
早速やってみました。
>>412 最初に指摘されたときも全然気づきませんでした。
恥ずかしい・・・
>>416 もうアフォさ丸出しですねすいません。
課題終わらせてから首吊ってきます。
課題では中置記法でもいいので頭の中でまざってました。
結局中置記法でガリガリ書きました。
それにしてもLispって括弧が多くて閉じる場所がわかりにくくてきついです。
TSC?
425 :
デフォルトの名無しさん :02/07/15 17:16
>>403 後置記法はこんな感じ。Schemeだけど
(f '(9 8 +)) -> 17
(define (f read) (g read '()))
(define (g read stack)
(if (null? read) (car stack)
(let ((x (car read))
(read (cdr read)))
(cond ((number? x) (g read (cons x stack)))
((eq? x '+) (g read (cons (+ (cadr stack) (car stack)) (cddr stack))))
((eq? x '*) (g read (cons (* (cadr stack) (car stack)) (cddr stack))))
((eq? x '-) (g read (cons (- (cadr stack) (car stack)) (cddr stack))))
((eq? x '/) (g read (cons (/ (cadr stack) (car stack)) (cddr stack))))
((eq? x 'sin) (g read (cons (sin (car stack)) (cdr stack))))
))))
426 :
デフォルトの名無しさん :02/07/16 12:54
学期末age
!!!
学生はそろそろ夏休みだからしばらくはこのスレも暇になるのかな? 夏休みが終わる頃には活躍しそうだけど。
次の関数を再帰関数にしたものを 教えてください。 void add_node(node *p,node *cp) { while(p->nextp != NULL) p = p->nextp; cp->nextp = p->nextp; p->nextp = cp; }
ループの条件で分岐。 ループするときは再帰、しないときはループ後の処理。
void add_node_rec(node *p, node *cp) { if (p->nextp == NULL) { cp->nextp = p->nextp; p->nextp = cp; } add_node_rec(p->nextp, cp); }
一方向リストの最後に一つ追加するだけだろう。 再帰にする意味なし。てゆうかリソースの無駄使い。
見事…(藁
>>432 そうそう再帰になんかする意味ないよね。
間違えることもあるし。
>>423 うるせぇー 禿 お前の名前鶴○やろー
屑 かす ぼけー インポ 核廃棄物
ごめん。
439 :
デフォルトの名無しさん :02/07/16 20:41
age
ウゼェきえろ・・・
∧_∧ _ _ .' , .. .∧_∧
( ´_ゝ`) _ .- ― .= ̄  ̄`:, .∴ ' (
>>435 / '' ̄ __――=', ・,‘ r⌒> _/ /
/ /\ / ̄\-―  ̄ ̄  ̄"'" . ’ | y'⌒ ⌒i
_| ̄ ̄ \ / ヽ \_ | / ノ |
\ ̄ ̄ ̄ ̄ ̄ ̄ \__) , ー' /´ヾ_ノ
||\ \ / , ノ
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ / / /
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| / / ,'
|| || || / /| |
!、_/ /
>>429 ,
>>431 まあ、どうでもいいけど、俺なら...
> cp->nextp = p->nextp;
は、cp->nextp = NULL; と書く。
私も
445 :
デフォルトの名無しさん :02/07/17 17:53
/⌒彡 /⌒\ /冫、 ) / ∧ `./⌒ i ` /ゝ / ノ > ( < ( \\  ̄~⌒ ̄ ̄~ \`つ ⌒ _)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
最近このスレ暇だね。
試験期間もしくは夏休みだからじゃないの?
夏休みが終わりに近づくと忙しくなると思われ
450 :
デフォルトの名無しさん :02/07/17 18:39
誰か、先生になってください。
452 :
▽・w・▽ :02/07/17 19:03
453 :
デフォルトの名無しさん :02/07/17 19:44
C言語の初心者なんですが、 西暦と月を入力して、その月を出力するようなプログラムを、 作りたいんですけど、詳しく教えてくれる方もしくは、 分かりやすいサイトを教えてください。
454 :
デフォルトの名無しさん :02/07/17 19:53
その暦は、グレゴリウスの改暦とか、カエサルの改暦による 混乱したあたりのことを考慮するのか? まず、そこをきかせてもらえないかな?
初心者ということであんまり難しいこと考えなくていいような気もする。 man 3 ctime してみれ。manがない環境だったら、標準関数mktimeあたり調べてみれ。 簡単に作れるが、time_tがあらわせる範囲でしかカレンダー作れないけどな。
457 :
▽・w・▽ :02/07/17 20:52
誰も相手にしてくれない・・。
>>453 1月を前年の13月に
2月を前年の14月に
460 :
▽・w・▽ :02/07/17 21:01
459>> やさしいね♪ レスありがとう。
463 :
デフォルトの名無しさん :02/07/17 23:07
明後日テストがあるんです。 大体範囲の勉強は終わったんですが、ハッシュってのが良くわかりません。 サンプルプログラムはもらったんですが、ネットで検索して勉強してもよくわかりません。 誰か教えてください。できないと単位落としてしまいます。死んでしまいます。 サンプルを書いておきます。 わからないのは、m[DATA_NUM][JAP_LEN]あたりからです。 これって2次元配列なんでしょうか? #include <stdio.h> #include <string.h> #define DATA_NUM 5 #define ENG_LEN 10 #define JAP_LEN 30 int hash(char *s){ int i=0; int h=0; while(s[i] != '\0'){ h=(h*256+s[i])%DATA_NUM; i++; } return h; } int main(void){ int i; char s[ENG_LEN]; char m[DATA_NUM][JAP_LEN]; for(i=0;i<DATA_NUM;i++) strcpy(m[i],"nodata"); printf("string ->"); scanf("%s",s); while(strcmp(s,"end") != 0){ printf("Japanese ->"); scanf("%s",m[hash(s)]); printf("string ->"); scanf("%s",s); } printf("string ->"); scanf("%s",s); while(strcmp(s,"end") != 0){ printf("%s\n",m[hash(s)]); printf("string ->"); scanf("%s",s); } return 0; }
> #define DATA_NUM 5 > #define JAP_LEN 30 これの意味は分かってるよな?
465 :
デフォルトの名無しさん :02/07/17 23:18
>>464 すいません、、、そこからわかりません。
>>465 > #define DATA_NUM 5
DATA_NUM を 5 と定義する
もしかして漏れ……ネタにマジレスしてた?  ̄ ̄ ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧∧l||l /⌒ヽ) 〜(___)
469 :
デフォルトの名無しさん :02/07/17 23:34
あ、いや、ネタじゃないです。 DATA_NUMとJAP_LENはプログラム中どういう意味で使われてるのでしょうか?
scanf("%s"ってのがいかにも学校の課題という感じだな。
472 :
デフォルトの名無しさん :02/07/17 23:40
>>463 結論を逝ってやる。
あ き ら め ろ
>>471 まあ、今はいいではないか。本質的ではないし
まーたしかに二次元配列なんだが、これに限っては、 「文字列の配列」と見る方が理解しやすい筈。
475 :
デフォルトの名無しさん :02/07/17 23:43
>>463 hashつーもんは、
・あるデータに対して数字を割り当てる。この数字をhash値という
・その数字のあるところにデータを格納する
とデータを溜め込んでおいて、あるデータを検索したい時には
・そのデータに対するhash値を計算する
・格納場所のhash番めのところからデータを引っ張ってくる
という風に高速にデータを引き出せるようにしたものだ。もちろん、
hash値は高速に(あと、入力データのばらつきに対して十分にばらけるように)
生成できる関数でなければならない。
で、
>>463 の例でいうと、
・hash値はhash()関数で計算している。
hash値は0からDATA_NUM未満の数値を返すようになってる(値を必ず % DATA_NUMしてる)
・格納場所はmという配列で、DATA_NUM個格納できる。
・格納するデータは文字列で、たかだか JAP_LEN-1 バイトと仮定している
・(多分)英単語のhash値を求めデータベースに格納してるのは(たぶん)日本語
・だから検索するときには英単語を指定し、出力は日本語になる
まあたったこれだけのデータ数でhashを使うのはどうかなとも思うが、例題なのでいいだろう。
ただし、なんにしろこのコードには致命的な欠点がある。例題の癖にひどい問題だ。
それは、全然違うデータでhash値が重なった場合のことを考慮してないことだ。
たとえば
stupid ヴァカ
goddamn 氏ね
なんて入力があってたまたまstupidとgoddamnのhash値が等しかったら、
あとから格納したほうで上書きされてしまう。
>>475 そうそう。ハッシュなのにリストがなくてちょっととまどった。
教官はしのにむって言葉を知らないのかしら。
477 :
デフォルトの名無しさん :02/07/17 23:48
色々なソースコードが見れるサイトのようなものがあったら教えてほしいのですが。
478 :
デフォルトの名無しさん :02/07/17 23:49
みんな高度なことやってるんだね。すごいな。
480 :
デフォルトの名無しさん :02/07/17 23:49
>>476 こういうのを考慮したところまでコードを書いて初めてハッシュと言うんだよね。
あと
・日本を表すのにJAPなんてのはやめれ
ともいっておこう(w
482 :
デフォルトの名無しさん :02/07/17 23:51
かぶった...
>>480 高度だと思ってやめたんだろうね。
ならハッシュなんて例題にするなよ(笑)
>>484 普通、構造体やって、リンクリストやって、その使用例として
ハッシュをやるもんだろう。早すぎると思うよ(w
define 分かってないのにハッシュをやるとは如何なものかと
そうですね、もう少し具体的に書きます。 ソースコードが長すぎず(ワードにはっつけて二枚程度) そして面白い(抽象的ですいません。) かつ、ソースコードの解説が載っていればさらに嬉しいです。 お願いします。
>>489 宿題の工程の大半をここに委ねたわけですな。
>(ワードにはっつけて二枚程度) ここ、笑った。おもろい。
>>486 ¥4000/hでどうっすか(w
つか、実際にこの値段でプログラミング教えてまっす。
475は日本語にかなり難ありだなあ。急いで書いたから許せ。
>>490 言い訳ではないですが、ネット上からダウンロードして解説する
という宿題なんです。(笑
494 :
デフォルトの名無しさん :02/07/18 00:08
495 :
デフォルトの名無しさん :02/07/18 00:11
463と475を一ページずつコピペして提出したら?
>>477
と思って最新版をみてみたら、ずいぶん複雑になってるなあ。
499 :
デフォルトの名無しさん :02/07/18 00:14
>>497 ひー、本気にすんな。
ま、このスレで宿題を聞く分にはタダだからそれで我慢すれ(w
501 :
デフォルトの名無しさん :02/07/18 00:15
>>497 ウチは\5000/dだ。安すくて質もいいぞ
こっちへこいワンコロ。
502 :
デフォルトの名無しさん :02/07/18 00:16
504 :
デフォルトの名無しさん :02/07/18 00:16
>494 javaに使えるんだったらokです。 >495 今見ましたが、さっぱりわかりません。 どこを写せばいいのかすら解りませんでした。 すみませぬ
>>475 やっぱりそうですよねー。
はぁ。教えてくれる人がほしい・・。
507 :
デフォルトの名無しさん :02/07/18 00:19
>>503 すごく面白いコードだけど、解読が無理だろう(笑)
>507 その通りです。(笑 やっと配列や条件分岐について理解したところですから… 解説が日本語で載っていれば嬉しいです。
>>509 言語はJavaだとさ。
477にJavaに書き直せるだけの力が有ればいいけど。
>509 解りました。どうもありがとうございました。
>511 あ、ほんとだ。c言語だ。書き直す力はないです…
514 :
デフォルトの名無しさん :02/07/18 00:30
>>510 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| お前犬だろ。ネコのサイトになんて行くなや
\_ __________
|/
∧ ∧
(;゚Д゚)y━~~
U |
〜| |
U U
>515 提出明日です。
どこの学校かしらんがJavaなんて教えるなヴォケ!
Javaから入ってそのあとC++を学ぶと、メモリがリークしまくりそうで 愉快だね。
>521 いえ、18です。
誰かJava使いがいたら練習用に書いたコードでも貼り付けてあげて・・・
>>477 がんばってね!
宿題ある人はいいなー・・。
>525,526 ありがとです。 >527 はっつけてコードの解説すればいいのでそんなに大変ではないんですが、 なにしろ適当なソースがなかなかないもんで…
>>529 なんでもっと早くやっておかなかったのかと、小一時間問い詰めたい
……ところだが、時間がなくなるので勘弁しておく。
いっそのこと、自分で適当なゲーム作って(3目並べとか)
適当に解説つければ?
>>477 ttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/ なんかどだ?
干支の換算をjava化したげたよ。
/*
void eto(char *kan, char *shi, int year)
{
static char *k[10] = {
"甲","乙","丙","丁","戊","己","庚","辛","壬","癸" };
static char *s[12] = {
"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥" };
if (year < 4) year = 4;
strcpy(kan, k[(year - 4) % 10]);
strcpy(shi, s[(year - 4) % 12]);
}
*/
public class eto {
static String[] k = {
"甲","乙","丙","丁","戊","己","庚","辛","壬","癸" };
static String[] s = {
"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥" };
static void etoCalc( StringBuffer kan, StringBuffer shi, int year )
{
if (year < 4) year = 4;
kan.append( k[(year - 4) % 10] );
shi.append( s[(year - 4) % 12] );
}
public static void main( String[] arg ) {
if (arg.length>0) {
StringBuffer kan = new StringBuffer();
StringBuffer shi = new StringBuffer();
StringBuffer res = new StringBuffer();
res.append(arg[0]).append(" : ");
etoCalc( kan, shi, Integer.parseInt(arg[0]) );
res.append(kan).append(shi);
System.out.println(res.toString());
}
}
}
533 :
デフォルトの名無しさん :02/07/18 02:25
535 :
デフォルトの名無しさん :02/07/18 02:42
>>532 Javaもstrcpyを呼ばないといけないの?
あ、上はCか・・・
もうちょっと面白いものがいいっていう要望があれば、なんかかくよ(java)。
こんなのは? 四則演算で10になるのを解くプログラム。 import java.lang.*; import java.util.*; public class TenTree{ int mType; /* 5…葉、1…+、2…-、3…*、4…/ */ int mValue; TenTree mLeft; TenTree mRight; TenTree(int i){ mType = 5; mValue = i; mLeft = null; mRight = null; } TenTree(int op, TenTree left, TenTree right){ mType = op; mLeft = left; mRight = right; } public double getValue(){ if(mType == 1) return mLeft.getValue() + mRight.getValue(); if(mType == 2) return mLeft.getValue() - mRight.getValue(); if(mType == 3) return mLeft.getValue() * mRight.getValue(); if(mType == 4) return mLeft.getValue() / mRight.getValue(); return (double) mValue; } public String toString(){ if(mType == 5) return Integer.toString(mValue); if(mType == 1) return mLeft.toString() + " + " + mRight.toString(); if(mType == 2) { if( mRight.mType == 1 ) return mLeft.toString() + " - ( " + mRight.toString() + " )"; return mLeft.toString() + " - " + mRight.toString(); } if(mType == 3) { String left = mLeft.toString(); String right = mRight.toString(); if( mLeft.mType < 3 ) left = "( " + left + " )"; if( mRight.mType < 3 ) right = "( " + right + " )"; return left + " * " + right; }if(mType == 4){ String left = mLeft.toString(); String right = mRight.toString(); if( mLeft.mType < 3 ) left = "( " + left + " )"; if( mRight.mType < 4 ) right = "( " + right + " )"; return left + " / " + right; } return ""; }
public boolean isTen(){ double ans = getValue(); return ( ans > 9.99999 && ans < 10.000001); } public static void check(Vector list){ if(list.size() == 1){ TenTree temp = (TenTree)list.get(0); if(temp.isTen()){ System.out.println( temp.toString() ); } return; } int m, n, op, i; for(m = 0; m < list.size(); m++){ for(n = 0; n < list.size(); n++){ if( m == n ) continue; for(op = 1; op < 5; op++){ if((op == 1 || op == 3) && m > n) continue; TenTree newitem = new TenTree(op, (TenTree)list.get(m), (TenTree)list.get(n)); Vector newlist = new Vector(); for(i = 0; i < list.size(); i++){ if(i != m && i != n) newlist.add(list.get(i)); } newlist.add(newitem); check(newlist); } } } } public static void main( String[] arg ){ int i; try{ Vector list = new Vector(); for(i = 0; i < 4; i++){ list.add( new TenTree(Integer.parseInt(arg[i])) ); } check(list); }catch(Exception ex){ System.out.println("java TenTree 1 2 3 4 というように実行して下さい。"); } } }
微妙に間違ってるし 35行目 if( mRight.mType < 3 ) return mLeft.toString() + " - ( " + mRight.toString() + " )"; 48行目 if( mRight.mType < 5 ) right = "( " + right + " )";
思ったんだが、
>>517 みたいなキャラいいよな。
誰が飼ってるかでもめそうな気もするが、
わんちゃんは気持ちいいキャラだよ。
その調子で書いてくれ。
面白い宿題を提示してくれたら喜んでああでもないこうでもないと考えてあげちゃうよ。
はじめはビーグルかと思って警戒してたんだけどそうじゃないみたいだし。
このスレのペットとして活躍してくれ。
>>541 なんかうれしい・・・。
もっと言語勉強して、宿題だせるようにがんばるよー
543 :
デフォルトの名無しさん :02/07/18 17:23
皿仕上げ
すいません。助言いただけますか。 たとえば、「ケーキを食べる」→「ケーキを食べる」→「ケーキを食べる」と 同じ選択肢を連続して三回選んだ場合、5キロ太るというようなプログラムを書きたいのですが、 なにを使ったらいいのかわかりません。 「ケーキを食べる」→「ダイエット」→「ケーキを食べる」→「ケーキを食べる」というような 途中でなにか別の選択肢を選んだときは連続して三回とは数えないようにしたいんですが。
>>544 変数を一つ持ってケーキを食べるを選んだときに+1して=3かどうか
確認。別の選択肢を選んだときにゼロクリアする。
ぐらいしか思いつかない。
>>544 ケーキを食べた回数を記録する変数を用意して、ケーキを食べたら+1すれば?
で、他の選択肢を選んだら0に戻すと。
値が3になったら5kg増えるようにすればよいし。
ほぉー。なるほど。
Cで電卓(×、÷を優先し四則演算ができる程度)を作れという 初心者にはさっぱりな宿題が出たんですが 何方かご教授願えますか? 私が作ったところ一桁の計算しかできず困ってます。
▽・w・▽ は男だよな??
552 :
デフォルトの名無しさん :02/07/19 00:13
>>550 コマンドライン電卓ってこと?
それともウイソドウズかなにかつかうの?
>>550 例えば
3 * 4 と入力したら 12を、
9 / 3 と入力したら 3 を出力するコンソールアプリを
作れということじゃないのか?
スマソ。優先順位どうこう言ってるってことは 3 + 6 * 2 のような入力を処理しろということか・・・
556 :
デフォルトの名無しさん :02/07/19 00:21
くノ一!
男を出せってんだよワショーイ... ∧ ∧ ∧ / ヽ / ヽ_ / .∧ / `、 _/ `、⌒ヾ⌒ヽ/ ∧ /  ̄ ̄/ u (.....ノ(....ノ / ヽ l::::::::: | u .:(....ノノ |:::::::::: -=・=- / ̄ ̄ヽ ::::::::::::::/`ヽ .|::::::::::::::::: \_(___..ノ u ::::::::::::::::::::(....ノノ ヽ::::::::::::::::::: \/ヽ u ::::::::::::::::::::::::::::ノ
えと553さんのとうりです。すいません言葉不足で。 6+4*5=26 というみたいに積と商を先に計算するものです。 おねがいします〜
560 :
デフォルトの名無しさん :02/07/19 01:12
>>558 結構めんどくさいような、それ...
入力文字列をパースする
左から順番に見ていって、積と商を計算しておく
もう一度左から順番に見ていって、和と差を計算する
てな順番だな。パース下ものをどういう構造で展開するかがかぎだな。
ちょっと待ってな、作ってみるから。
561 :
デフォルトの名無しさん :02/07/19 01:14
つか、スタックと逆ポーランド。
562 :
デフォルトの名無しさん :02/07/19 01:21
>>561 それじゃあ、6+4*5=26とかの入力は計算でけんだろう。
それともおれが間抜け?
563 :
デフォルトの名無しさん :02/07/19 02:16
565 :
デフォルトの名無しさん :02/07/19 02:32
>>563 よくわからんので教えてくれ。
逆ポーランドってのは、
・数がきたらスタックにpush
・オペレータがきたらスタックからふたつpopして、計算結果をpush
するんだよね。だから、たとえば 2 3 4 * + とか言う風なものがきたら、
計算結果は14だよね。この理解は合ってる?
で、オペレータを数字の間に置く記法(上の例だと、3 * 4 + 2)を逆ポーランドに
変形する方法って、えーとあるんだろうけど、簡単な方法ってあるのかな。
566 :
デフォルトの名無しさん :02/07/19 02:38
お願いします。私もがんばってみます。 564さんちがうみたいですw
>>564 これだと、たとえば
1 + 2 * 3
の計算結果が9になるような気がする。
でも、>558の場合は7にならなきゃならんよね。
どうもおれ一人が間抜けのような気もするな…
569 :
デフォルトの名無しさん :02/07/19 02:39
>>563 逆ポーランド式だとうっかり34*2+とスペースをいれずに入力してしまうと変な答えになってしまうからやめた方がいいと思う。
俺も一度作ろうとしたことがあったけど、これに気づいてやめた。
571 :
パイの魅学園 :02/07/19 02:46
/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| \_/ / <
http://csx.jp/~madrix/ /| /\ \__________
知ってる人間とか出題者だと 1.再帰下降解析して逆ポーランド記法に直す 2.スタックを使って計算する という戦略を想定しているだろうけど、ここは出題者の思惑を外して 再帰下降解析からいきなり計算するという、たどたどしい解法を やってみるのはどうだろうか? きっと他の学生とバッティングしないレポートになること請けあい。
573 :
デフォルトの名無しさん :02/07/19 02:54
>>572 プログラムの中で逆ポーランド式に直すの?
書いてあることがよく分からない素人ですがTT 先生にばれなかったらなんでもいいですw
てっきり逆ポーランド式でユーザーに入力させるのかと・・・・ 逆ポーランド式に直すのなら、結局は3*4+2という通常の式を解析しないといけないよね? それならひとつずつ足したり引いたりかけたりした方が手っ取り早いような・・・
576 :
中置記法から後置記法への簡単な変換方法 :02/07/19 03:10
入力した数式が正しいと仮定するなら 数字のトークンはそのまま素通しで出力。 演算子のトークンの場合は スタックトップにある演算子より優先順位が高ければそのままその上にPUSH スタックトップより優先順位が低いときはPUSHできるようになるまでPOPしてからPUSH このときPOPした演算子は出力。 EOFになったらスタックに溜まっている演算子を全部POPして出力。 ってやると再帰降下するまでもなく逆ポーランドに変換できるよ。 括弧は優先順位最低の擬似的な演算子としてPUSH 括弧閉じを検出したら擬似括弧演算子までにあるほかの演算子を全部POP&出力 したあとに出力せずに取り除く ってやれば括弧の対応も簡単。 出力のかわりにそのまま答え計算するのもアリか?
こんな時間まで大変だねー
578 :
デフォルトの名無しさん :02/07/19 03:21
>>576 ,577
どうして?
とかいって、以前祭りになったことがあったな(w
で、
>>576 うわ、そんなアルゴリズム知りませんでした。
つうかアルゴリズムをあんまり勉強してないんです。
すごく勉強になりました。
あう〜 一桁のみ計算可能しかできないよ〜TT 優先順位もめちゃくちゃだし・・・
yaccを使うとかは禁止?
yaccなんてまだ習ってないですTT
フライングする。
あははw 了解です。よろしくお願いします。
584 :
おねげえします :02/07/19 04:25
587 :
おねげえします :02/07/19 04:27
ホンと誰かおながいします(T_T
588 :
おねげえします :02/07/19 04:29
うう;。
>>587 どういう結果を望んでいて、現在どういう結果しか出ないのかを
書いてくれ。
590 :
おねげえします :02/07/19 04:31
えっと円グラフがもっといっぱい線が入ってるはずなんです(TT 平均値もなんか変のようなきがします。。 答えはわからないんですがどこがまちがってるかもわからないんです
BASICの実行環境が無いので確かめていないけど、平均値は あっているっぽくない?
592 :
おねげえします :02/07/19 04:34
ホンとですか?じっこうしたら14.3なったっす。。
593 :
おねげえします :02/07/19 04:36
後 成績ランク別人数が AA:0 A:0 B:1 c:0 xx:19 となります 、、、なんかかたよりすぎですよね、、
>>592 点数の合計が1440点で、人数が20人だから、平均は72点だよなぁ
なんかへんだね。
>>593 出力結果(文字の部分だけ)を丸ごと貼ってくれるかい?
596 :
おねげえします :02/07/19 04:42
はい、。、 エラーはでないんです 点数(ソート済み) 76 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 3 となります
あと、ためしに210行を 210 REM GOSUB *SORT 'ソート にしてみてよ。
yacc使ったら駄目っぽいですTT
599 :
おねげえします :02/07/19 04:44
うおおおおおおおおおおおおおおおお
>599 どうした?
601 :
おねげえします :02/07/19 04:46
キターーーーーーーーすげえええええええええ 平均点72! ソートもばっちし!!!さすが!!! ありがとうございます!!!!円グラフも多分おっけーだと思います!!! 神!!
>>601 いや、待て!
解決したわけじゃない。
これでソートしている部分がおかしいことが分かっただけ。
603 :
おねげえします :02/07/19 04:48
え?
210行をためしに変更したのは、ソート部にバグがあって、こいつが 入力データを破壊していると推測してREMで呼び出しをコメントしただけ。 だから、ソートは行っていない。 ソートを行わない場合に平均が正しくもとまったので、予想通り ソート部にバグがあることが判明しただけ。
605 :
おねげえします :02/07/19 04:51
成績ランク別人数 a:2 a:4 b:7 c:4 xx:3になって エングラフガ 赤くろ水色緑紫に別れました(色だけしかないです)
210行をREM化した場合、 点数(ソート済み) の出力がソートされていないはず。
607 :
おねげえします :02/07/19 04:55
??どういうことですか?
210行をREMに変更したときの 点数(ソート済み) の部分の出力を貼ってみてよ
609 :
おねげえします :02/07/19 04:56
点数(ソート済み) 76 63.。。。。。 79 74.。。。 とでてます
今の議論とは関係ないが、400 行の LOCATE 48.5 はピリオドじゃなくカンマでは? *SORT はバブルソートだよな。他のアルゴリズムはダメなの?
>>609 それは入力されたデータの並び順(440・450行)と同じでしょ?
ちゃんとソートされていたら、大きい順とかに並ぶはず
612 :
おねげえします :02/07/19 04:58
点数(ソート済み) 76 63 82 56 78 75 68 32 94 87 79 74 66 85 27 98 77 65 88 70 です
C初めて2ヶ月しか経ってないのに 計算機作れなどという課題は理不尽だと思いませんか〜? と、愚痴をこぼしてもしかたないか・・・TT がんばるか・・・
615 :
おねげえします :02/07/19 05:00
カンマにしたら円グラフの上に 成績ランク別人数とでました!!
616 :
おねげえします :02/07/19 05:01
ぐああ>614
ああ、560行がおかしい。 560 T(K-1)=T(K) だ。
もう一桁のみ計算可能計算機で出したほうが いいとおもいますか?TT
210行を元に戻して、560行を
>>618 のように直して実行してみて。
>>611 =614
いいです。代わってもいいですが、
ぼくは *SORT にバグがあるように見えないんですよ。
ぼくが「おねげえします」だったら PRINT でデバッグ出力しまくるんですが。
>>おねげえします
提出期限とかあるの? やっぱ今日だろ?(w
622 :
おねげえします :02/07/19 05:06
なにもかわらないっす。。。
>618 なるほど! 漏れの目はfusianasanだった。
625 :
おねげえします :02/07/19 05:08
今日です(^^;;
>>624 swapなんかは処理を予測してしまうのでコードを読まないよね。
なかなか気づかなかったよ。
627 :
おねげえします :02/07/19 05:08
おおおおおおお ソートがちゃんと高い純から!!!!!!
しかしいまどきN88-BASICなのか。懐かしいな。
629 :
おねげえします :02/07/19 05:10
なんかしょぼい情報の教科とっちゃったんです(文型です)>628
>623 やっぱりそうですよね。 もうちょっと手直しして出しますTT いろいろとご教授ありがとうございました。
>626 そうそう。FOR のとこだけ目を凝らして、 「バブルソートは完璧なんだよな……」と思い込み。 「(K)」と括弧までちゃんとあるのが余計にはまりやすい。
633 :
おねげえします :02/07/19 05:12
もしかしてこれで完璧!!!? 本当にありがとうございました!!! すごいっすね これからプログラム勉強してみようかと重いマッス!
>>初心者 数値の読み込みってどうやってるのよ? scanf 系が使えれば何桁でも読めるよな。 getchar とかで読んでるの?
636 :
おねげえします :02/07/19 05:14
すいませんこんな遅くまで。。 今日提出してきます(^^)ノ でわ〜!!
getcharで読んでます。
>>初心者 scanf が使えない理由があるの? (まだそこまで習ってない、とか) 数値を読んでるところのコードを貼ってみてください。 インデントのない BASIC スパゲッティはきつい。
>>637 さっきのおねげえしますさんみたいに、ソースを丸ごと上げてもらえると
アドバイスしやすいかと。まあ、量が多いとは思うが。
>>638 どうでもいいが、さっきのはループの脱出にGOTO *LOOPとしていたのが
つらかったよ。
いえいえ、流石にもうこれ以上ご迷惑はかけられません。 scanf使ってやってみます。
>>641 がんばってください。
わし(610さんじゃないほう)はそろそろ寝させていただきます。
>642 おやすみ。 >640 でもブロック IF がないからしょうがないんだろうね。 (まあこの程度なら1行にまとめてもよさそうだが) >>初心者 うまく行ったら行ったで報告キボンヌ。
寝る前に一言。 せめて、GOTO *LOOPENDにして欲しかったってことっす。
>>641 char c;
int num;
c = getchar();
num = c - '0';
で一桁の数字が得られるのは分かるよね?
あとはこれを繰り返せば何桁でもいける。
>>641 おれ、今
>>576 のアルゴリズムを使って書いてみてるよ。
競争だ、頑張れ(w
にしても、久々にCのコードを書いたからつまずくつまずく(汗
ううぅ・・・ 何か文字を1文字ずつ認識しているよTT
やっぱり、パーサだけでいいから貼ってくれた方が…… うぷろだは「おねげえします」のと同じところでもいいんじゃない?
650 :
デフォルトの名無しさん :02/07/19 06:20
>>647 できたYO!!
ちょい整形するから待っててね。
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> typedef struct { enum {t_value, t_operator, t_stop} type; union { char operator; double value; } d; } token;
/* * スタック */ typedef struct { token *buf; size_t size; int tail; int idx; } stack; /* 新しいスタックを作る */ stack *stack_new() { stack *s = malloc(sizeof(stack)); if (!s) { return NULL; } s->buf = NULL; s->size = 0; s->tail = -1; return s; } /* スタックを壊す */ void stack_destroy(stack *s) { free(s->buf); free(s); }
/* スタックにpushする。tはコピーする */ token *push(stack *s, const token *t) { token *old; s->tail++; if (s->size == s->tail) { old = s->buf; s->size++; s->buf = realloc(s->buf, s->size * sizeof(token)); if (!s->buf) { s->size--; s->tail--; s->buf = old; return NULL; } } s->buf[s->tail] = *t; return &s->buf[s->tail]; } token *pop(stack *s) { if (s->tail < 0) { return NULL; } return &s->buf[s->tail--]; }
token *peep_tail(stack *s) { if (s->tail < 0) { return NULL; } return &s->buf[s->tail]; } token *stack_begin(stack *s) { s->idx = 0; return &s->buf[s->idx]; } token *stack_next(stack *s) { s->idx++; if (s->tail < s->idx) { return NULL; } return &s->buf[s->idx]; }
/* * 入力解析してRPN式化する */ const char *skip_space(const char *str) { while (*str && isspace(*str)) { str++; } return str; } const char *skip_digit(const char *str) { while (*str && isdigit(*str)) { str++; } return str; }
stack *make_rpn(const char *str) { token tok, *tail; const char *p; stack *op, *rpn; rpn = stack_new(); op = stack_new(); if (!rpn || !op) { free(rpn); free(op); return NULL; } for (p = skip_space(str); *p; p = skip_space(p)) { switch (*p) { case '+': case '-': tok.type = t_operator; tok.d.operator = *p; for (tail = peep_tail(op); tail; tail = peep_tail(op)) { if (tail->d.operator == '/' || tail->d.operator == '*') { push(rpn, pop(op)); } else { break; } } push(op, &tok); p++; break; case '*': case '/': tok.type = t_operator; tok.d.operator = *p; push(op, &tok); p++; break; default: if (isdigit(*p)) { tok.type = t_value; tok.d.value = atof(p); push(rpn, &tok); p = skip_digit(p); } else { stack_destroy(op); stack_destroy(rpn); return NULL; } } } for (tail = peep_tail(op); tail; tail = peep_tail(op)) { push(rpn, pop(op)); } stack_destroy(op); return rpn; }
/* * 逆ポーランド計算機 */ double eval(token *vv, token *ww, token *op) { double v = vv->d.value, w = ww->d.value; switch (op->d.operator) { case '+': return v + w; break; case '-': return v - w; break; case '*': return v * w; break; case '/': return v / w; break; } }
/* rpn: error 0, succeed 1 */ int rpn(stack *s, double *result) { token *t, tok, *v1, *v2; stack *r; int succeed; r = stack_new(); for (t = stack_begin(s); t; t = stack_next(s)) { if (t->type == t_operator) { v1 = pop(r); v2 = pop(r); if (!v1 || !v2 || v1->type != t_value || v2->type != t_value) { return 0; } tok.type = t_value; tok.d.value = eval(v2, v1, t); push(r, &tok); } else { push(r, t); } } t = pop(r); /* スタックに何か残っていたり、頂上が数でなかったらエラー */ if (peep_tail(r) || !t || t->type != t_value) { succeed = 0; } else { *result = t->d.value; succeed = 1; } stack_destroy(r); return succeed; }
int main(int argc, char * argv[]) { char buf[512]; stack *s; double result; for (; ; ) { if(!fgets(buf, sizeof(buf), stdin) || *buf == '\n') { break; } s = make_rpn(buf); if (!s) { puts("式に変な文字が入ってるYO!!\n"); } else if (!rpn(s, &result)) { puts("式が変だYO!!\n"); } else { printf("%f\n", result); } } return 0; }
うひー、連続投稿制限に引っかかったよ。 でもこれで全部だ。 以上、なんだけど、長すぎたな、スマソ。 やり始めて3つ目くらいでまずいかな、と思い始めた。 すごくやばかった(汗
ど、どうもです・・・ こんな時間までどうもありがとうございます。 自分のソースと比べて直してみます。
576乙です。ほんとすごいYO!
って直すどころじゃないのが現状でし・・・TT
666 :
デフォルトの名無しさん :02/07/19 07:29
整数のみだけど再帰で #include <stdio.h> int expression(void); int term(void); int factor(void); int expression(void) { int term1 = term(); int ch; while ((ch = getchar()) == ' ') ; while ((ch == '+') || (ch == '-')) { int term2 = term(); if (ch == '+') term1 += term2; if (ch == '-') term1 -= term2; while((ch = getchar()) == ' ') ; } ungetc(ch, stdin); return term1; }
int term(void) { int factor1 = factor(); int ch; while((ch = getchar()) == ' ') ; while ((ch == '*') || (ch == '/')) { int factor2 = factor(); if (ch == '*') factor1 *= factor2; if (ch == '/') factor1 /= factor2; while((ch = getchar()) == ' ') ; } ungetc(ch, stdin); return factor1; } int factor(void) { int i; int ch; while ((ch = getchar()) == ' ') ; if (ch == '(') { i = expression(); while ((ch = getchar()) != ')') ; } else { ungetc(ch, stdin); scanf("%d", &i); } return i; } int main() { printf("%d\n", expression()); return 0; }
>>666 うわーん、おれよりずっとずっとずっとエレガントじゃないか。
完敗です。すばらしい。
精進します。
解説 factorが数字の読み込みとカッコの処理(expressionを呼んでるだけ) termが掛け算、割り算の処理 expressionが足し算、引き算の処理 上の方が優先度が高くなります。 下から上へ関数を呼び出してます。 factorでカッコのときexpressionを再帰呼び出し、 普通の数字のとき終端です。
>>669 666はコンパイラの入門書みて書き移しただけだから。
御二方すごすぎです〜 うらやましいな〜 何か秘訣みたいなものありますか?w
>>671 ドラゴンブックでしょうか? まだ読んでないんですよ。
やっぱ読むべきだよなあ。
今年の目標はドラゴンブックとSICPだな。
いや〜おかげさまで助かりました。 私も精進していつに日か・・・ 乱文悪しからず それでは、皆様おやすみなさい
>>670 factor -> term or primary
term -> factor
じゃないかと思うんだが?
もう一つ作ったよ #include <stdio.h> void chomp(char *s) { size_t len = strlen(s); if (0 < len && s[len - 1] == '\n') { s[len - 1] = '\0'; } } int main(int argc, char * argv[]) { char buf[512]; FILE *pf; for (; ; ) { if(!fgets(buf, sizeof(buf), stdin) || *buf == '\n') { break; } chomp(buf); pf = fopen("temp.c", "w"); if (!pf) { return 0; } fprintf(pf, "#include <stdio.h>\nint main(void){printf(\"%%f\\n\", (double)%s); return 0;}", buf); fclose(pf); system("gcc -o temp temp.c"); system("./temp"); } return 0; }
みんなお疲れ様でした。
>>678 stdinはデフォルトでテキストモードなんで、\rは考えなくていいはずです。
つまりDOSもUNIXも改行は\nでいける、はず。
>>679 いい子だ。頭をなでてあげよう。
おじさんは、もう眠いから寝るよ。
おやすみなさい。
フィールド名 salary // 給料 managerAllowance // 管理職手当 メソッド名 setsalary // 給与を設定する getsalary // 給与を取得する raises // 昇給処理(昇給は給料の1.1倍を新しい給与とする。) setmanagerAllowance // 管理職手当を設定する() getmanagerAllowance // 管理職手当を取得する() // W2101xxx 川崎 太郎 public Class W2101xxx{ public static void main(String[] srgs) { .......... .......... ........... ........... System.out.println("管理者給与は" + .........); System.out.println("管理職手当は" + ........); System.out.println("管理者昇給後の給与は" + ......); .......... } } // 従業員クラス class Employee { .......... .......... .......... } // 管理職クラス class Manager extends Employee { .......... .......... .......... } javaです。 お願いします。
>>683 すいません。説明が無いですね。
public Class W2101xxx{
public static void main(String[] srgs) {
..........
..........
...........
...........
System.out.println("管理者給与は" + .........);
System.out.println("管理職手当は" + ........);
System.out.println("管理者昇給後の給与は" + ......);
..........
}
}
// 従業員クラス
class Employee {
..........
..........
..........
}
// 管理職クラス
class Manager extends Employee {
..........
..........
..........
}
上の・・・・・・のところにプログラムを入れて
完成させてほしいのです。
大学のテスト問題です。
お願いします。
685 :
デフォルトの名無しさん :02/07/19 10:01
試験問題丸投げか、おめでてーな
終了しました。
お騒がせしました。
>>685 はい、そうですね。おめでたいです。
687 :
デフォルトの名無しさん :02/07/19 11:06
C言語で電卓ってどうやって作るんですか?
GUIがなければ単純な文字列解析と、再帰が必要かな。
>> 687 こんなかんじかな? #include "stdafx.h" #include <process.h> int main(int argc, char* argv[]) { system( "C:\\Windows\\System32\\calc.exe" ); return 0; }
>>690 687はWindowsとは言ってないし、
なぜ、そのパスにcalc.exeがあると言い切れる?
などと、マジに突っ込んでみる
今日は誰もいないんだね・・。
696 :
デフォルトの名無しさん :02/07/20 00:00
ガッコの選択授業でBACICとかなんだけどありですか?
バカしか来ないだろ。
699 :
デフォルトの名無しさん :02/07/20 00:16
>>687 はい
printf("式?>");gets(buf);
if(strcmp(buf,"1+1") == 0) printf("%d",2);
if(strcmp(buf,"1+2") == 0) printf("%d",3);
if(strcmp(buf,"2+1") == 0) printf("%d",3);
if(strcmp(buf,"2+2") == 0) printf("%d",4);
・・・・
中学でBASICか・・・まあ、妥当っちゃあ妥当か。
俺も中学の頃からPG言語勉強してれば良かったなあと思ってみただけだよ。
なんか、かんじわるいよねぇ〜
▽・w・▽ が逆立ちしたザリガニに見える……鬱だ寝よう
△・M・△
>>711 俺はスターウォーズエピソード1のボートレースの一場面に見える。
713 :
△・M・△ :02/07/20 01:45
ω ∋目∈ ▽・w・▽ ザリガニ
>>713 ・・。
でもなんか、少しかわいい・・。
>>702 BACICは難解だぞ。中学生には無理。漏れには全然分からん。
>>715 中学生でも理解しやすい言語ってあるのかな?
COBOLは・・・無理か。そもそも英語もわからんだろうし(オレモナー)。
後はCASLぐらいか?
中学生なんかプログラムできなくてもぜんぜんOK 日本語文書入力がストレスなくできて、Web検索ができれば 200点だと思う。 BASICなんかやってへんなくせつけるな。といいたい。
>>718 BASICはプログラムとはなんぞや。
を覚えるにはいい言語だと思うよ。
問題はCの構造化がいかに便利かに気づけるかどうか。
大昔の8ビットパソコンの 起動即=開発環境=実行環境 ってのは余計な環境まわりでつまづかなくて 最初のとっかかりとしてはすごくよかった気がする。 ところで今BASICの授業ってなにでやるんだろ。 ポケコン?
>>720 windowsの上で98エミュだったりして(w
722 :
デフォルトの名無しさん :02/07/20 16:08
>>720 QuickBasicじゃないか?
コンパイルも出来るらしいし・・・
(´-`).。oO(POKE命令もPEEK命令もないBASICなんて・・・)
724 :
デフォルトの名無しさん :02/07/20 17:17
725 :
デフォルトの名無しさん :02/07/20 18:05
中一の後輩がいきなりVC++だとよ、哀れ
>>725 万が一使いこなせてしまった場合君の立場は消滅だ。
正直、「いきなり〜」とか無いと思うんだが。 何か段階踏む必要あるんかね。
728 :
デフォルトの名無しさん :02/07/20 19:13
>>726 >>725 はただの2ちゃんねらーだ!
だから中1の後輩がどうなろうと、その立場はゆるぎないのだ!
▽・w・▽ さん、上の紛らわしい名前使ってもいいですか? しばらく・・・。
あ、あの頭の方、強く打たれましたか?
じゃ、漏れは以下略
かおるタンが犬を調教するスレですか?
夏休みの宿題出たんですが この問題だけ解けませんでした。 誰かといてください。 式 0.011÷100の値はどれか。(全部2進数です。) ア、0.00001 イ、0.000011 ウ、0.11 エ、1.1 どう考えても0.0000011になるんですが・・・。
>733 で、10進数の割り算の理屈はもちろんわかってるよな? ついでにいうと、選択肢はどれもハズレだけど。 写し間違いがないか確認せい!
>>733 100で割るという事は、2ビット右シフトするに等しい。
よって
0.011÷100 = 0.00011
n÷1 = n n÷10 = n/2 (1 ビット右シフト) n÷100 = n/4 (2 ビット右シフト) ですな
738 :
デフォルトの名無しさん :02/07/21 06:07
C言語で教えて欲しいことがあります プログラム途中の計算ででた結果xをつかって配列を宣言したいのですが、今まで int *var x=なんちゃら・・・ var=(int *)malloc(x * sizeof(int)); とやっていたのですが、配列の大きさが一回決めれば変わらないので x=なんちゃら・・・ { var[x]; ・・・ }とやってみたのですが、このように変更したところで特に困る事ってありますか? こんなやり方ってあまり聞かないもので心配になって・・・ なんかへんな質問ですがよかったら教えてください。
なんちゃら・・・
740 :
デフォルトの名無しさん :02/07/21 06:51
ナンチャラ ∧ ∧ ナンチャラ / ヽ ./ .∧ / `、 / ∧ /  ̄ ̄ ̄ ヽ l::::::::: .l |:::::::::: -=・=- -=・=- | .|::::::::::::::::: \___/ | ヽ::::::::::::::::::: \/ ノ ナンチャラ
>>738 Cの新しい標準ではサポートされたけど
伝統的なCでは動的に配列の大きさを指定することはできないよ
デントウ ∧ ∧ Cジジイ / ヽ ./ .∧ / `、 / ∧ /  ̄ ̄ ̄ ヽ l::::::::: .l |:::::::::: -=・=- -=・=- | .|::::::::::::::::: \___/ | ヽ::::::::::::::::::: \/ ノ ISO/IECワショーイ...
>>743 allocaみたいな処理をコンパイラが出来るようになったってことだね。
スタックの操作なんてコンパイラにやらせるのが筋だろうに、
今まで出来なかった方が不思議といえば不思議だ。
もっとも配列はautoでとるな、staticに取れ、
って言われてたちょっと前までの環境だと(DOS出身です)あってもいらねえ、って感じか。
あ、でも規格書その他読んでないからしらないんだけど、
size_t n = 64;
static char a[n];
みたいなことできちゃったりする? まさかね。
γ⌒ヾミ ⊂(・∀・)⊃ 《 ゚Д゚》 彡 / ̄ ̄ ̄ ̄ ̄ ⊂| |つ < エアロスミス!! し'^J \_____ ナンチャラ
747 :
デフォルトの名無しさん :02/07/21 16:05
月曜朝締め切りの宿題とかありそうだからageてみたりして。
748 :
デフォルトの名無しさん :02/07/21 16:13
欠点が改善されるとCらしくないということは Cらしい所は欠点の部分と言うことだな。
>>749 うむ。
次のCはstring型が採用されますようにw
751 :
デフォルトの名無しさん :02/07/21 16:53
次のCはVariant型が(略)
>>746 読みました。とってもわかりやすかったです。感謝。
多次元配列とかsizeofとか面倒な問題があったとは気づかなかった。
特にsizeofの実装は面倒そうだなあ。
あと
>static f(int p1[static 10]);
>少なくとも 10 個はアクセスでき、p1 は NULL ではないことを保証
ってのにはビックリした。
staticにまた別の意味をもたせますか、って頭痛くなったよ。
これを加えてCではstaticに3つの別々の意味が生じちゃったのね。
・大域変数と関数のファイル外不可視化
・ローカル変数の寿命をプロセスの寿命と同じにする
・static f(int p1[static 10]); のstatic
C++もいれると・・・
754 :
デフォルトの名無しさん :02/07/21 23:34
C#を使っています。 MDIアプリケーションで親ウィンドウを閉じようとした時に 普通に閉じようとしてもまず子ウィンドウが順番に閉じていって 全部しまりきると、親ウィンドウが閉じるようになってしまうのですが 一斉に閉じるようにするにはどうすればよろしいのでしょうか?
>>755 文章が分かりずらくて申し訳ありません。
親ウィンドウの閉じるをクリックすると子ウィンドウが一個ずつ、
つまり子ウィンドウが三個ある場合は三回クリックで子ウィンドウが閉じ
四回目で親ウィンドウが閉じるようになってしまいます。
どうかよろしくお願いします。
おもしろい仕様じゃないか。
>>757 // 登録
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
// 何もしない
}
この様に何もしないように設定してもだめなのでC#ではデフォルトでは
このようになっているのだと思います。
何か自然に終了できるようにするためにはどうすればよろしいのでしょうか?
C#嫌いー
760 :
デフォルト名無しさん :02/07/22 00:14
なにならOK? どんなわけでそういうの? >> 759
っつーかWINDOWZ消えてくれ
>>754 宿題じゃないだろうし、C#相談室の方がレスもらえるかもよ。
>>762 確かにそちらの方がいいですね。どうもありがとうございます。
>>87 C言語ですよね。
int printf(format,...);
関数構文自体が間違ってますよ。
765 :
デフォルトの名無しさん :02/07/22 01:30
>>764 俺は87だが、どこが間違っているのかと小一時間問いつめたい。
まさかマジレス?
たしかCは "..." "..." とすると文字列をくっつけたと思います。
>>768 正解。隣接する文字列は一つに結合される。
というわけで
>>764 はstring concatinationについて小一時間調べて来てくだちい。
s/concatination/concatenation/
漢字の書き取りが30ページあるんですけどここなら手伝ってもらえるんですか?
773 :
デフォルトの名無しさん :02/07/23 00:22
漢字の書き取りが30ページあるんですけどここなら手伝ってもらえるんですか? おながいしますよ〜。どうしてもまにあわないんです。
ジャポニカ学習帳で 3 ページ分くらいならやってあげるよ。>> 772
777 :
デフォルトの名無しさん :02/07/23 05:12
777 フィーヴァー!!
VC++あたりだと "..." "..."のように分けた場合と "......"のようにくっつけた時で、 埋め込める文字列の最大長が変わったりする。
780 :
素人です。 :02/07/23 16:16
Text2にkensaku対象キーワードをいれ、そのキーワードを指定したText1から探し、 その個数を出力するプログラムを作ろうとしているのですが、 全然うまくいきません。 結果を出力するためのボタンはこのように作ってみましたがクラッシュしてしまいます。 ど素人ですので至らない点あるかもしれませんが、 手直し、助言等いただけませんでしょうか? Private Sub Command1_Click() On Error GoTo Err_Command1 Dim FileName As String FileName = Text1 kensaku = Text2 k = 0 j = 0 Open FileName For Input As #1 Dim str As String str1 = FireName1 Dim i As Integer Do Until EOF(1) i = InStr([j], str1, kensaku) If i <> 0 Then k = k + 1 j = i + 1 End If Loop Text3 = i Close #1 Exit Sub Err_Command1: MsgBox Err.Description End Sub
781 :
VBド素人 :02/07/23 16:32
キーワードを入力させて、その数を指定したファイルから検索し、その数を出力するプログラムを作ろうとしています。 Text1にキーワードを読み込ませて、 指定したファイルをLabel1に出力させています。 そして下のものが実行ボタンの中身です。 ・・・・しかしクラッシュしてしまいます。 手直し、助言等いただきたく書き込みします。 ド素人ですので、質問内容に至らない点があるかもしれませんがご了承願います。 よろしくお願いします。 Private Sub Command1_Click() On Error GoTo Err_Command1 Dim FileName As String FileName = Label2 kensaku = Text2 k = 0 j = 0 Open FileName For Input As #1 Dim str As String str1 = FireName1 Dim i As Integer Do Until EOF(1) i = InStr([j], str1, kensaku) If i <> 0 Then k = k + 1 j = i + 1 End If Loop Text3 = i Close #1 Exit Sub Err_Command1: MsgBox Err.Description End Sub
>>781 とりあえずOn Error Go Toをはずせ。
>>781 スレ違い。
っとマジレスしてみるテスト。
VBじゃこたえる気にもならん
785 :
デフォルトの名無しさん :02/07/24 13:41
すげぇ。夏休みと共にスレの流れが・・・
786 :
▽・w・▽ :02/07/24 13:46
みんながんばれー
ざこ
X(i+1) = a * X(i) + c により、[0,1]の一様乱数を発生させるプログラムをつくれ。 a=32771 c=1234567891 X(0)=0 m=2^31 とする。 おねがいしまーす。
const unsigned m = 0x80000000; unsigned rand_nextint(unsigned seed) { static const unsigned a = 32771; static const unsigned c = 1234567891; return ( a * seed + c ) % m; } int main() { int i; unsigned seed = 0; for(i = 0; i < 10; ++i) { printf("%f\n", (double)(seed = rand_nextint(seed))/m); } return 0; } とかは?
>>789 2の31乗ってことです。
>>790 おお〜、ちょと教科書みて検討してみます。ありがとうございます。
む〜
seed ってなんなんだ〜
乱数の種っす。
教科書にのってない。鬱だ。 あと、m=0x80000000 ってなってますが、これは? 質問ばっかですいません。
2の31乗ってことです。(16進数)
天才ですか?
普通です。
おまえら漫才してますか ワラタヨ
(a)M個(M=50000〜100000)の粒子を原点x=0に置く (b)順に1つの粒子を選び、各々2分の1の確率で+1または-1だけ、そのx軸上の位置を移動させる。これをすべての粒子について行う。 (c)(b)を時間の1ステップ(Δt)をし、これを繰り返すことにより、粒子をランダムウォークさせる。 むずい・・・さっきの問題のつづきなんですが・・・
時刻t=500Δt t=1000Δt t=2000Δt における粒子の空間分布関数f(x,t)をもとめ、xの関数をしてプロットする。
Cでプロットまでするの?それとも座標列を出力してgnuplotとかで 表示させてもいいの?
むずすぎ、この課題。 Cでプロットとかできるんですか?
>>799 こんなもんか。未コンパイルだが
#define T1_COUNT 500
#define T2_COUNT 1000
#define T3_COUNT 2000
#define M_COUNT 100000
typedef struct {
int x;
int y;
} pair;
unsigned randomWalk(
unsigned seed,
pair pairs[],
int pair_count)
{
int i;
pair *p;
for ( i=0 ; i<pair_count ; i++ )
{
p = &pairs[i];
seed = rand_nextint(seed);
p->x += (seed&0x01) ? 1 : -1;
seed = rand_nextint(seed);
p->y += (seed&0x01) ? 1 : -1;
}
return seed;
}
int main()
{
unsigned seed = 0;
pair pairs[M_COUNT];
for ( i=0 ; i<M_COUNT ; i++ )
{
pairs[i].x = pairs[i].y = 0;
}
for ( i=0 ; i<T1_COUNT ; i++ )
{
seed = randomWalk(seed,pairs,M_COUNT);
}
// pairs[] に結果があるから統計取るなりプロットするなり
for ( ; i<T2_COUNT ; i++ )
{
seed = randomWalk(seed,pairs,M_COUNT);
}
// pairs[] に結果があるから統計取るなりプロットするなり
for ( ; i<T3_COUNT ; i++ )
{
seed = randomWalk(seed,pairs,M_COUNT);
}
// pairs[] に結果があるから統計取るなりプロットするなり
}
できんことは無いがちょっと大変。 あと、そんなに難しくはないから大丈夫
おおう、main()にint i;を忘れてる。
学校でならってないし、教科書にもかいてないからやりかたが全然わからないんですが。 本見てしらべたらいいんだろうけど、ほかの試験もあって、なかなか時間が…
関数 'rand_nextint' は定義されていません。int 型の値を返す外部関数と見なします がでた。チェックしよ
というか、
>>790 が乱数生成関数は作ってるだろ。
あほすぎw コピーペしてはりつけますた。
統計とるのはどうしたらいいのですか?
-tからtまでの 2t+1個のx座標に関して、その座標上にある点の数を数えたら?
コピーぺしたら、全角スペースを直してね。
ただの統計値なら、 1.まずはpairのx,yの最大・最小値を検索。 2.その値で配列を確保。 3.その配列で度数分布集計。 あとは平均取るなり分散取るなり標準偏差取るなり・・・ 統計値だし5%棄却域を求めるのもいいかも。 プロットするならベジエ曲線でも作るか?
ベジェとか言い出したらC言語さんが吐血するし止めとき
>>815 グラフィックライブラリだけだと思うぞ。問題は。
>>816 点列からベジェにするのはちょっと大変じゃん
うっ、全然意味がわからんw うえーん、やべぇーよー
>>818 気にしないでよい。
どこまでできたの?
関数をプロットするやりかたがわからないっす。 Gnuplotの使い方が・・・
プロット以外の部分はすべて解決したの?
>>819 大丈夫、おぢさんたちの軽い冗談だから。
ちなみにベジエ曲線ってのは任意の点を結んでソレっぽい曲線を計算して描く手法。
似たようなものとしてスプライン曲線もある。
お絵かきソフトで点を打っていって曲線を描くツールがあるでしょ。あれ。
なるほど・・・ベジエ曲線はわかりますたw でもプロットできねー。 ちょいがんばってみます。 うう。
*で表示してみたけど。rand()使って #include <stdio.h> #include <stdlib.h> #define M 50000 #define STEP 20 #define LINE 1000 int table[M]; int t; int cmp(const void *x, const void *y) { return (*(int*)x<*(int*)y)?-1:(*(int*)x==*(int*)y)?0:1; } void printTable(void) { int i, j; int copy[M]; for (i = 0; i < M; i++) copy[i] = table[i]; qsort(copy, M, sizeof(int), cmp); i = 0; for(j=copy[0]; j < copy[M-1]; j+=STEP) { int num = 0; for (; copy[i] < j+STEP; i++) num++; printf("%4d - %4d:", j, j+STEP-1); for (num /= LINE; num--;) printf("*"); printf("\n"); } printf("\n"); }
void randomWalk(int dt) { int i; for (;t < dt; t++) for (i = 0; i < M; i++) table[i] += (rand()&2) ? 1 : -1; printf("t = %d\n", dt); printTable(); } int main(void) { randomWalk(500); randomWalk(1000); randomWalk(2000); return 0; }
プロットするところまで、プログラムで書かないといけない? テキストで吐き出して、Excelでグラフ作るとかでもありだったりする?
830 :
デフォルトの名無しさん :02/07/25 12:42
昨日の続き・・・わかんねー。
うう。バイトがあるからこの時間しかむりだー。
平均二乗変位<x^2(t)> (< > はM個の粒子についての平均)を時間の関数としてプロットせよ。
tの大きいところでは<x^2(t)>はtに比例し、1次元の場合
<x^2(t)>=2Dt+const
で与えられる。
Dはいくらか?
>>799 のつづきです。 全然わからん・・うう
t=0で原点を出発した粒子が、原点を中心とした半径lの球を初めて通過する時間τを初通過時間という。
>>799 でえられた粒子の軌跡を用いて、τの分布関数P(τ)をl=10,20の場合について求めよ
>>C言語 それだけの量だと、提出は盆休み明けでしょう?
明日までなんですが・・・w やべー(・∀・)
昨日の夜中にこればよかったのに。
>>834 は最小二乗法使うかねぇ?
昨日の夜中はバイトでした。。 バイトせなやっていけないので(;´д`) 最小二乗法・・・むずー。 プログラムくめなさげw
まずは799がんばろ。よっしゃ。
ウヒ(゚д゚)できねー
842 :
デフォルトの名無しさん :02/07/25 16:37
全部
844 :
デフォルトの名無しさん :02/07/25 16:55
>>843 本人かどうか知らないが、やる気なさそうだ。
799がわからんので、ほかもわからない状態です。はぁ〜
847 :
デフォルトの名無しさん :02/07/25 17:09
799のどこがわからんのだ?
848 :
デフォルトの名無しさん :02/07/25 17:15
for(i = 0; i < M i++) x[i] += (rand() >= RAND_MAX / 2) ? 1 : -1;
ランダムで+1or-1させる。 x[i]がx座標を表す。 Mが粒子の個数
>>834 ある任意の時間内に生じた,粒子の位置の変位の確率分布がガウス分布に
なるとき,平均二乗変位は時間に比例します.
を確認しろという問題だね。
問題のランダムウォークは実際、二項分布になるはずだから、充分に回数が
大きければ正規分布つまりガウス分布を近似することになる。
その「平均二乗変位は時間に比例」の係数(角度)をグラフから求めろという
ことだよ。
だから横軸を時間、縦軸を平均二乗距離(各粒子の原点からの距離の平均
を取ってその二乗)としてプロットしてその角度を測れば良いわけだ。
・・・いや、本当に二項分布になるのか?
ちと自信ないが、藁を掴む気で信じてみるのも一興ではないか(w
>>835 は・・・また別に説明を考えてみる。
851 :
デフォルトの名無しさん :02/07/25 17:29
結構むずいな・・・
いやー、問題の背景とか、意図はわかるんですけどね、プロットの仕方とか、プログラムの組み方がわからないんです(笑)
でも、今はインターネットがあるんで調査もらくちんだ♪
で、無視かいな
>>852 だから、前に書いたプログラムで各pairで
sqrt((double)(p->x*p->x+p->y*p->y))
とやって距離を求めて、それの平均を取って二乗したものを、その時間
の縦軸として出力。それを3点で行ってプロット。
一直線になってたら、その直線を2Dt+constに当てはめてDを求める。
でいいじゃん。
っか、比例係数ならグラフ書かなくてもいいな。
856 :
デフォルトの名無しさん :02/07/25 17:42
白黒(256階調)のjpeg画像を2値化するプログラムを 教えてください。 濃度分布の平均値による2値化をしたいのです。 C言語です。
858 :
デフォルトの名無しさん :02/07/25 17:47
jpegのデコードはめんどいので libjpegでもつかってくれ
うお・・・しまった、1次元だったのね。
pairいらないじゃない。
>>848 for文の中の;が抜けてたりと、ネタかと思ってた・・・謝罪。
>>859 うお!ほんとだ鬱…
>for文の中の;が抜けてたりと
ということは、他にもネタっぽいところがあるんだろうが
どこだか教えていただけると助かるです
一番処理しやすい画像の種類?(jpegとかgif)は何ですか?
.BMP
>>862 jpegはアメリカのForgentという会社が特許を主張しているので
未来はありません。
>856 濃淡画像でよいならPGM
1行に書かれた2桁までの2つの数の四則演算の式の値 を求めることができるプログラムを作る。 課題でこれを配られただけです。 Cでつくってこいとのことだが自分はプログラムさっぱりなんで わからないです。 Cについて知っているようでしたら教えてください。 分からないようでしたらそう返事ください。 おねがいします。
>>861 いや、こっちも二次元ランダムウォークだというとんでもない大ボケをかまして
いまして、「なんで1次元なんだ?あ、;も抜けてるし」という流れで無視してました。
>>868 そうでしたか。
ちなみに俺のやってることって、
やっぱ間違ってるんでしょうか?
レスまったくつかないので。。。
#質問者じゃないのに質問してるし。。。
Cはじめて二ヶ月くらいです。
870 :
デフォルトの名無しさん :02/07/25 18:16
871 :
デフォルトの名無しさん :02/07/25 18:17
>>867 すいませんC言語は全くわかりません。
でも、Cなら教えられます。ハァハァバコバコ
>867 #include <stdio.h> main(void){ printf( "式を入力してください:" ); getchar(); printf( "答えを入力してください:" ); getchar(); puts( "ありがとうございました" ); }
ヒプ
ヘイポー
875 :
デフォルトの名無しさん :02/07/25 18:24
>>867 scanf関数の使い方を調べると良いよ。
876 :
デフォルトの名無しさん :02/07/25 18:25
エイホー
877 :
デフォルトの名無しさん :02/07/25 18:25
(30万円を年利率5%の福利で借りたとする。二年後に返済するとすると、返済金額はいくらになるか? float型を使って計算すること。) って課題を出されたんですが誰かわかりませんか??^^; よろしくおねがいします・・
30万 x 1.05 x 1.05 ですか?
879 :
デフォルトの名無しさん :02/07/25 18:28
#include <stdio.h> int main(void) { puts("ハサーン\n"); return 0; }
なんかいろいろ参考になります。 ありがとうございます。
881 :
デフォルトの名無しさん :02/07/25 18:33
>>834 以下の結果でプロットしてみたら5500回あたりからなんとなく直線に
なってるみたいだし、これから角度を計算してDを求めてみて。
例によって乱数ルーチンは抜いてあるから注意。
[ソース]
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define M_COUNT 100000
unsigned randomWalk(
unsigned seed,
int x[],
int x_count)
{
int i;
for ( i=0 ; i<x_count ; i++ )
{
seed = rand_nextint(seed);
x[i] += (seed&0x01) ? 1 : -1;
}
return seed;
}
double msd(
int x[],
int x_count)
{
int i;
double ret = 0;
for ( i=0 ; i<x_count ; i++ ) ret += abs(x[i]);
ret /= (double)x_count;
return ret*ret;
}
int main()
{
int i;
unsigned seed = 0;
int x[M_COUNT];
for ( i=0 ; i<M_COUNT ; i++ ) x[i] = 0;
for ( i = 1 ; i<=10000 ; i++ )
{
seed = randomWalk(seed,x,M_COUNT);
if (0==(i%500)) printf("%d\t%f\n",i,msd(x,M_COUNT));
}
return 0;
}
scanf関数の使い方を調べると良いよ。 これを調べればなんとかなるんじゃないんですか??
884 :
デフォルトの名無しさん :02/07/25 18:43
>>883 たしかにそうかも。
でも、こんなとこでつまずいてるようじゃ、
scanfの使い方わかっても、そのさきに進まないだろう。
それより、おじさんとCしようじゃないか、ハァハァ
それはちょっと・・・・・ 見本のプログラムとかはおしえてはもらえないでしょうか?
886 :
デフォルトの名無しさん :02/07/25 18:45
>>867 諦めるの早すぎ。
こんなのじゃ駄目?
[ソース(calc.c)]
#include<stdio.h>
#include<stdlib.h>
void main( int ac, char *av[] )
{
int l,r,res;
if ( ac<3 )
{
puts( "calc.exe 左数値 (+|-|*|/) 右数値\n" );
exit(0);
}
l = atoi(av[1]);
r = atoi(av[3]);
switch ( *av[2] )
{
case '+':
res = l+r;
break;
case '-':
res = l-r;
break;
case '*':
res = l*r;
break;
case '/':
res = l/r;
break;
default:
puts( "calc.exe 左数値 (+|-|*|/) 右数値\n" );
exit(0);
}
printf( "%d %c %d = %d\n", l, *av[2], r, res );
}
[実行例]
>calc 1 + 2
1 + 2 = 3
>calc 5 - 2
5 - 2 = 3
>calc 5 * 2
5 * 2 = 10
>calc 15 / 2
15 / 2 = 7
>calc 5 / 2
5 / 2 = 2
>>887 × if ( ac<3 )
○ if ( ac<4 )
>>887 calc.exe 2 / 3
calc.exe 100 / 0
とかはどうすればいいですか?
教えてくれたらCしてあげます
890 :
デフォルトの名無しさん :02/07/25 19:07
UMLがわかりません・・・ 教えてもらえませんか?
ねっしー
UMA
ムリっすっか?
すいません・・・ どこにあるんですか?
897 :
デフォルトの名無しさん :02/07/25 19:49
HTMLがわかりません・・・ 教えてもらえませんか?
900 :
デフォルトの名無しさん :02/07/25 20:18
みんな宿題がんばれ!
おねがいします!!
>898 ネ申 は 死 ん だ
>>898 京都コンピュータ学院に言いつけていいですか?
>>903 もう無理やり女の子をさらってこなくてもいいんじゃない?
>>898 1.2. クラスGakuseiをJava風の言語で表せ。
public class Gakusei {
String namae;
int yuugaku_year;
public void sotsugyo(void) {}
public int getGakunen(void) {]
}
あとは無理。図なんてかけない。
public int getGakunen(void) {] が}のかわりに]になってるのでさらに減点。
最近の女の子、非協力的よね。
えれなの祖母ヨシエ(83)です このスレ限りで人生ともおさらばになりそうですが どうかよろしくおねがいします
えれなタン・・・ハァハァ ・・・ムリ ぃっτょι
|| ∧||∧ ( ⌒ ヽ ∪ ノ ヨシエか ∪∪
えれなタンは若いよ
ヨシエの妹のヨモギ(81)です この(略)おさらば(略)ですが どうか(…ゴフッ)よろしく(略)
アンタも ぃっτょι
偽者が多いんですね・・・ どーもありがとうございました。 参考になります。
次はこいつでどうよ? > ▽・w・▽
923 :
デフォルトの名無しさん :02/07/26 23:31
暇だ・・・宿題出してくれ
プログラム以外の宿題でもいいれすか?
925 :
デフォルトの名無しさん :02/07/26 23:43
ライブラリとかマシンとかサーバとかドメインとかにエロゲのキャラ名あてる感覚が イ ヤ だ。
>>926 それがエロゲのキャラ名とわかってしまうあんたもな(w
928 :
デフォルトの名無しさん :02/07/27 00:20
宿題いい?
いいんじゃない?
930 :
デフォルトの名無しさん :02/07/27 00:30
Cなんだけど、正規表現ライブラリ作れといわれた。 どうつくんのよ?え? 漏れ初心者だよ? 関数形は、 int m(char *src,char *mat); src:対象文字列、mat:正規表現文字列 char *s(char *src,char *mat,char *plc); src:対象文字列、mat:正規表現文字列、plc:置換文字列 だってよ。もうわけわかんねーよ。
931 :
デフォルトの名無しさん :02/07/27 00:31
C言語の宿題です。 問題1 文字列strの長さを返す関数mystrlenをつくれ。 プロトタイプはlong mystrlen(const char *str)とする。 問題2 文字列s1の後ろに文字列s2を連結する関数mystrcatを作れ。 プロトタイプはvoid mystrcat(char *s1,const char *s2)とする。 全然分かりません。よろしくお願いします。
932 :
デフォルトの名無しさん :02/07/27 00:32
とりあえず、単純マッチだけ出来たけど。 int m(char *src,char *mat) { while (*src){ }
全部書く前に、ぼたんおしちゃった。スマソ
934 :
デフォルトの名無しさん :02/07/27 00:32
>>930 どの程度の正規表現使えるようにするの?
.と*だけとか、[]もいるとか。
というか宿題でそんなのだすか普通(w
936 :
デフォルトの名無しさん :02/07/27 00:35
>>935 うちの会社は新卒の入社試験で出します。
long mystrlen(const char *str) { return strlen(str); }
938 :
デフォルトの名無しさん :02/07/27 00:35
>>935 Perl互換でお願いしますですです。。。
>>930 今すぐ
定本 Cプログラマのためのアルゴリズムとデータ構造
近藤嘉雪 著 ソフトバンク パブリッシング
を買ってこい
>>935 とりあえず、
m(str,"moji");
m(str,"a*");
m(str,"(a|b)");
これはできるようにしろということだ。
>>931 mystrlenは文字列の先頭から一文字ずつ見ていって、
'\0'が出てくるまでの文字数を数えれ。
mystrcatは、mystrlenでs1の長さを求めて、
それを利用してポインタをs1の末尾にセットして、
あとは一文字ずつs2をコピーしろ。'\0'が出てきたら終わり。
つうか、
void mystrcat(char *s1, const char *s2)
{
strcat(s1, s2);
}
でもいいかもな。
先生に殴られてもしらんけど(w
>>938 Perlのregexp.c(だっけか?)をとって来い(w
943 :
デフォルトの名無しさん :02/07/27 00:43
単純マッチ int m(char *src,char *mat) { char *bs = str,buf[256]; int l=strlen(mat),sl = strlen(str); for (j = 0;j < sl-l;j++){ if (*src == *mat){ bs = src; for (i = 0;i < l;i++){ buf[i] = *src; src++; } buf[i] = '\0'; if (strcmp(buf,mat) == 0){ return 1; } src = bs; } src++; } return 0; }
945 :
デフォルトの名無しさん :02/07/27 00:46
単純マッチってどんなの?
946 :
デフォルトの名無しさん :02/07/27 00:46
>>944 yaccもlexも使ってないのか。驚いた。
>>948 yaccやlexつかったらライブラリとして駄目じゃない?
Emacs使ってるっぽくて、タブとスペースが混在してるよ〜 しかも途中でインデントが2のところもあるし・・・
951 :
デフォルトの名無しさん :02/07/27 01:01
とりあえず上の2つに対応。(m("moji")、m("a*")) int m(char *src,char *mat) { char *bs,buf[256],mbuf[256]; int l,sl = strlen(str),i=0,j; bs = mat; while (*mat){ if(*mat == '*') break; mbuf[i] = *mat; mat++; i++; } mbuf[i] = '\0'; l = i; mat = bs; for (j = 0;j < sl-l;j++){ if (*src == mbuf[0]){ bs = src; for (i = 0;i < l;i++){ buf[i] = *src; str++; } buf[i] = '\0'; if (strcmp(buf,mbuf) == 0){ return 1; } src = bs; } src++; } return 0; }
>>931 long mystrlen(const char *str)
{
long i;
for(i=0;str[i]!='\0';i++);
return i;
}
void mystrcat(char *s1,const char *s2)
{
long i,j;
i=mystrlen(s1);
j=mystrlen(s2);
memcpy(s1+i,s2,j+1);
}
>952 memcpy使うんかい!って話やな void mystrcat(char *s1, const char *s2) { while ( *s1 != '\0' ) s1++; while ( *s2 != '\0' ) *(s1++) = *(s2++); *s1 = '\0'; }
954 :
デフォルトの名無しさん :02/07/27 01:33
削れ削れ。 void mystrcat(char *s1, const char *s2) { while (*++s1); while (*s1++ = *s2++); }
955 :
デフォルトの名無しさん :02/07/27 01:37
削れ削れ void mystrcat(char *s1, const char *s2) { strcat(s1,s2); }
956 :
デフォルトの名無しさん :02/07/27 01:37
void mystrcat(char *s1, const char *s2) { while (*s1) s1++; while (*s1++ = *s2++); }
957 :
デフォルトの名無しさん :02/07/27 01:38
削れ削れ #define sc(s1,s2) strcat(s1,s2); void mystrcat(char *s1, const char *s2) { sc(s1,s2); }
void (*mystrcat)(char *s1, const char *s2) = strcat; みたいにできたかな?
959 :
デフォルトの名無しさん :02/07/27 01:40
>>958 宿題内容は関数をつくれってことだからそれは駄目。
960 :
デフォルトの名無しさん :02/07/27 01:40
#define mystrcat(s1,s2) strcat(s1,s2) ;書いていいの?
お前ら全員クビ!
962 :
デフォルトの名無しさん :02/07/27 01:42
strcatはchar *を返すぞ。
963 :
デフォルトの名無しさん :02/07/27 01:44
strcatと同じようにする場合は、s1の内容をあらかじめ他の変数に待避しておいて、
>>954 みたいにし、その待避した値を返すのが一番いい?
それとも添え字を使った方がいい?
>>962 キャストするまで。
void (*mystrcat)(char *s1, const char *s2) = (void (*)(char *, const char*))strcat;
>>951 そりゃ正規表現じゃなくてワイルドカードだな。
それとiの初期化。
967 :
デフォルトの名無しさん :02/07/27 01:54
968 :
デフォルトの名無しさん :02/07/27 01:56
>>967 俺だったら
for(;*s1;s1++) ;ってやるな
俺はやらんが s1 += strlen(s1);
こんなんどうかな。 char *strend(char *s){ while (*s) s++; return s; } size_t strlen(char *s) { return strend(s)-s; } char *strcpy(char *s, const char *t) { char *u = s; while (*u++ = *t++); return s; } char *strcat(char *s, const char *t) { strcpy(strend(s), t); return s; }
正規表現は非決定性有限状態オートマトン(NFA)をしらないと プログラムできない。
非決定性有限状態オートマトン(NFA)をしらなくても 自分で考えつければプログラムできる。
/* 問題1 文字列strの長さを返す関数mystrlenをつくれ。 プロトタイプはlong mystrlen(const char *str)とする。 */ long mystrlen(const char *str) { return *str ? mystrlen(str+1)+1 : 0; } /* 問題2 文字列s1の後ろに文字列s2を連結する関数mystrcatを作れ。 プロトタイプはvoid mystrcat(char *s1,const char *s2)とする。 */ void mystrcat(char *s1,const char *s2) { if (*s2) { s1 += mystrlen(s1); s1[0] = *s2; s1[1] = 0; mystrcat( s1, s2+1 ); } } void main( int ac, char *av[] ) { char str[11]; printf( "%d\n", mystrlen("1234567890") ); str[0] = 0; mystrcat( str, "12345" ); mystrcat( str, "67890" ); puts( str ); }
>>973 わははは。ワラターヨ
何でそこでそんな飛び道具使う(w
975 :
デフォルトの名無しさん :02/07/27 05:16
if (*s1) s1 += mystrlen(s1); if (*s2) { s1[1] = *s1; *s1 = *s2; mystrcat(s1, s2+1); }
*s1++ = *s2++; mystrcat(s1, s2);
これ動くかな? void mystrcat(char *s1,const char *s2) { if (*s1) s1 += mystrlen(s1); if (*s1++ = *s2++) { *s1 = 0; mystrcat(s1, s2); } }
978 :
デフォルトの名無しさん :02/07/27 06:39
コラッツの予想が1<n<=10000について正しいことを確かめよ またnに対してこの操作を施す回数をp(n)と表し、このp(n)の最大値と それを与えるnを求めるc言語のプログラムを作成せよ という宿題で大変困ってます c言語というかプログラミング自体ほぼ初めてで 「初めてのc言語」片手に努力しましたがどうにもならず書き込みしました 誰か代わりに作っては頂けないでしょうか。
コラッツの予想てなんじゃ?
ある正の整数nに対して、nが偶数なら2で割る。nが奇数なら3倍 して1を加えるという作業を繰り返すといつか必ず1になるという予想です。 例えば3→10→5→16→8→4→2→1のようになるというものです
>>978 コラッツの予想は
ttp://www.gt.sakura.ne.jp/~nyagy/integer/collatz.html か。こんな名前ついてるの知らなかったよ。
プログラムはこんな感じかな。
#include <stdio.h>
#include <ctype.h>
#define even(n) (!((n) & 1))
unsigned long collatz(unsigned long n)
{
unsigned long p = 0;
while (n != 1) {
p++;
if (even(n)) {
n /= 2;
}
else {
n = n * 3 + 1;
}
}
return p;
}
int main(int argc, char * argv[])
{
unsigned long i, n, r, max = 0;
/* オプションのチェック */
if (argc < 2 || !isdigit(*argv[1])) {
fputs("数字を指定してYO!\n", stderr);
return 3;
}
n = strtoul(argv[1], NULL, 10);
for (i = 1; i <= n; i++) {
r = collatz(i);
if (max < r) {
max = r;
}
}
printf("%lu\n", max);
return 0;
}
って、プログラム書いてる間に、同じサイトが出てたね(w
ありがとうございます ただp(n)とかその最大値とかをどう扱ったらいいんでしょう。
本当にありがとうございました 本当に助かりました
>>985 そのものずばりのコードを書いたのはよくなかったかも。
将来プログラマになるつもりがあるのなら、
よくコードを読んで何をやってるのか理解してくれ。
難しいことは一切やってないから。
>>986 そのものずばりのつもりだったのか。
1 < n <= 10000 ではないし、nも求めてないが。
>>982 オーバーフローチェックもやった方がいいかも。
989 :
デフォルトの名無しさん :02/07/27 10:54
990 :
デフォルトの名無しさん :02/07/27 14:29
なぜ、行列積のループ順を変えると演算時間が変わるのです? キャッシュミスとかが絡んでくると思うんだけど、誰かわかりやすく 教えてくれませんか?
単純に考えたのは for(i=0;i<n;i++) for(j=0;j<n;j++) tbl[i][j] = tbl[j][i]; てのがあったとして jのループの中でtbl[i]は一定だから最適化しても tbl[j][i]をいちいち求めてると遅くなる。 tbl[0][i]からポインタ演算してくれるコードをはいてくれると 速度的には変わらないかなと思うが。
>>990 ページを超えてジャンプしたら遅いんじゃないの?
次スレ
>>990 キャッシュミスがどうとかいうんなら、
ソース、コンパイルオプション、実行環境のスペック等を教えてもらわんと。
n次元ベクトルの内積を求める関数 double inprod(doble a[],double b[],int c); はどのように書けばいいのでしょうか? ご教授おねがいします
>>995 すでに数学の領域かと。宿題なら習っただろうて。
997 :
デフォルトの名無しさん :02/07/27 16:22
double inprod(doble a[],double b[],int c) { return c == 0 ? 0.0 : *a * *b + inprod(a + 1, b + 1, c - 1); }
999 :
Rina ◆tI333vNE :02/07/27 16:26
非再帰ならこれでいいかと. double inprod(double a[], double b[], int n) { int i; double tmp = 0; if (n == 0) { return 0.0; } for (i = 0 ; i < n ; i++) { tmp += a[i] * b[i]; } return tmp; } 全角スペース→半角スペースに変えてください.
あ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。