宿題とか手伝えます

このエントリーをはてなブックマークに追加
1かおる
こんにちは。えれなの妹のかおるです。

前スレは恭祐さんの「ほう、宿題とはな。」です。
http://pc.2ch.net/test/read.cgi/tech/1024592344/
それ以前の人たちは、>>2-10あたりにかかれるでしょう。

宿題とか手伝いますけど、以下の事項は守ってほしいです。
・マルチポストは厳禁です。
・キーワードが分かっているなら、http://www.google.co.jp を活用すること
・質問内容がちゃんと日本語になっていること
・言語名を入れること。
・自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
以上です。このスレだけのおつきあいですが、よろしくおながいします。
2デフォルトの名無しさん:02/07/08 23:21
手助けはするな、助言はしてやれ。
3かおる:02/07/08 23:22
登場人物&過去スレ 1/2

●お姉さん
あなたの宿題、お姉さんが答えます
http://piza.2ch.net/tech/kako/972/972032579.html
で登場。

●麻衣
お兄ちゃんの宿題、私が答えるよ
http://pc.2ch.net/tech/kako/982/982853418.html
で初登場。可愛い妹キャラ

●お兄ちゃん(名称不明)
宿題見てやるよ
http://pc.2ch.net/tech/kako/1003/10038/1003838158.html
で初登場。しかし、女性がいいという影の圧力により
1以外には登場せず。

●怜
宿題みてあげるっ
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
で初登場。お兄ちゃんの恋人。
結構親切に答えてくれる年上キャラ。
今から考えると、僕の人生はvoidだった。
そう、何も作り出すことは出来なかった。
しかし、僕の中のstatic変数にはいろんな思い出がつまってる。
でももうダメだ。
いつの日からか発生したループは、スタックを食いつぶしながら
僕のメモリ領域をどんどん蝕んでいく。

もうダメだ・・・。

僕は決心して窓を開けた。

「このプログラムは不正な処理を行ったため・・・」
>>1



しかし、日曜にやっていたアニメを思い出した。欝だ詩嚢
>>1
乙。恭祐はかおるのパパだYO!
7かおる:02/07/08 23:22
登場人物&過去スレ 2/2
●えれな
宿題、手伝おっか?
http://pc.2ch.net/tech/kako/1011/10117/1011722640.html
で登場。お兄ちゃんのおさななじみ

●美砂子
あらあら、宿題なのね
http://pc.2ch.net/test/read.cgi/tech/1020785918/
で登場。えれなの母。持病で急死

●恭祐
ほう、宿題とはな。
http://pc.2ch.net/test/read.cgi/tech/1024592344/l50
で登場。えれなの父。美砂子の旦那。
>>2
激しく同意。

回答者は「宿題とはどういう意図の制度か?」を理解すべき。
9前スレの937:02/07/08 23:24
ごめんなさい、新スレ知らなくて、前スレに書いてました。
もう一度書きます。

>>985
提出は金曜日です。
今までの講義は、「Cパズルブック」という本で、
演算パズル系の問題しかやっていません。
今回の宿題のレベルがどれくらいかわからないですが、
今から文法を学んでも間に合わない!?
>>9
間に合うんじゃないか?
出されたソースがどのようなことをやっているのか
理解できれば、綺麗に書き直すことも出来るだろ。
宿題スレは、ある意味隔離スレであるといわれることがありますが、
丸投げ厨を隔離するだけでなく、知ったか教えたがり厨を隔離する効果も
あるのです。>2, 8
>>11
けどさ、宿題を見る以上、そいつの人生の片棒を担ぐって事だと思われ。
無責任に丸教えする事が許されるとは思わない。

何だったら教育板から何人か引っ張ってくる。
>>1
萌えキャラかと思ったのに最後の「おながいします」で台無し。
14前スレの937:02/07/08 23:29
>>10
わかりました。
頑張って文法を学びたいと思います。
自分でできるだけ頑張りますので、ダメだった場合はもう一度教えてください。
>>12
んなことはない
前スレを埋める意味が分からん。
17デフォルトの名無しさん:02/07/08 23:32
>>16
1000取り合戦
人物相関図?

   恭祐=美砂子(離婚?)
 −−− +−−−
|    |   |  幼なじみ
お姉さん 麻衣 「兄」−−−えれな
                   ↓妹
                   かおる
お父さんを「さん」づけで呼んだり、2chねらー的言葉づかいだったり、
展開次第では大化けしそうなキャラだと思われる。
結構宿題って同じ時期に似たような問題が出るから、そうそうに
dat落ちさせるのはどうかと思う
>>12
まあ、過去ログの教え方とかみてどうよ。
>>14
エラい! がんばれYO!
応援してるからな。
ところで「前スレの937」が女だと思うのは漏れだけ?
>>20
990くらいまで進んでたんじゃ、いつか誰かやるだろうけどね
>>18
あ、美砂子さんて麻衣の母でしたっけ?
それは失礼(>>7の元書いた人)
>>18
違うぞ。恭祐と美砂子の子供がえれな・かおる
>>18
怜もいれて
あらあらスレに
>(1) 名前: お母さん 投稿日:02/05/08 00:38
>麻衣の母、美砂子です。
>宿題、判らないところがあったら、遠慮しないで聞いてくださいね。
とあるが、、
>>12
漏れは別に教育者でもないし、増してや「教えてくれ」と言ってくる奴から
給料を貰っている訳でもない。

面白そうであれば、自分の欲望の赴くままに回答しているが、何か?
怜さんとかは、ある程度教えられる側の事を考えて教えていたイメージ。
相関図ver2。

   恭祐=美砂子(離婚?)
       |
 −−− +−−+
|    |   「兄」 =恋人= 怜
お姉さん 麻衣  |幼なじみ
           えれな →妹→ かおる
31デフォルトの名無しさん:02/07/08 23:42


ここは何のスレですかい?

>31
宿題を手伝う集団に関するスレだ。
こういうことは、ちゃんとしておかないと。
あとで揉めては困る。
34デフォルトの名無しさん:02/07/08 23:49
答える側のルールまで作るなハゲ

作られてもその時の気分で勝手に答えるけど♥
こういう事ってどういう事?
登場人物の人間関係?
それとも、教え方のポリシー?
まあさ、丸写しできるコードを出すのはやめようよ。
コード書いてやるにしても、部分的にぬいてやるとか、伏せておくとかで
理解しないと完成できないような仕様に。
人間関係だろ?
>>30が正解だと思うけど。
>部分的にぬいてやるとか、伏せておくとかで
宿題の宿題ですか?(藁
>>36
そんな面倒なことするくらいなら全部書いちゃう♥
結局、「兄」の名前って未定のままだっけ?
「ひろゆき」案は却下されたのか。
自分で考える気もないくせにしつこく答えを迫ってくるような奴は
さっさと追い払いたいし、マルチウザイので答え出す。
>>30 ああ、そういう家族関係なのか。で、怜ちゃんは
最近お兄ちゃんとうまくいってないんだっけか。
ルールどおりに答えなかったらごちゃごちゃ言うんだろ?
なんでそんな面倒なことするんだ。
好きにさせれや。
>>42
喧嘩中らしい
教える側は、コテハンでキャラを作らないとダメってルールは無し?
なんとか仲直りさせてやりたいものだが
>>12みたいなおせっかいは自分の知り合いだけにしてくれ。
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | いっそのこと AAスレにしてみるとか
  \
     ̄ ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

     ∧ ∧ 
   (( (Д゚#,)    
     U  |
     |  @
     .U U
     ̄ ̄ ̄ ̄
>>48
   A
  (゚o゚)<なんでやねん
  (ー)ー
   ))
見ず知らずの他人の宿題なんだから答えようが放置しようがどうでもいいんじゃネーノ?
このスレに隔離しておければそれでいいじゃねーか。
>>35
人間関係。

まあ、レスのポリシーはちゃんと理解しようとしてるヤシ(そういうのは内容で分かる)は
理解してもらえるようにレスするし、丸投げ房は放置かコードのみを投げる。
>>51
人間関係は>>30で確定でいいんでないかな。
>>50どーい。
とにかく解答者にまでルール作るのやめてくれ。
それぞれの好きなように答えていいだろ。
54デフォルトの名無しさん:02/07/09 00:06
何で人間関係が必要なんだよボゲ
>>54 ネタ&隔離スレだから。
一度ルールを作ると、ルール違反かそうでないかを巡って無駄な論争が起きる。
こういうスレは適当が一番だよ。
>>54
ばかやろう。このスレで一番大切なのは人間関係だ。
そう、適当が一番。はげ同だ。 >>56
>>57
Σ(゚Д゚ )y-~~ マヂデ !?
人間関係は別として、変なルールを巡って無駄な労力を使うのは止めようや
>>60 賛成。でも次の宿題まではこのままだったりして。
いいからさっさと宿題を持ってこい!
63デフォルトの名無しさん:02/07/09 00:14

おまいらみんなあほ。
ひきこもりがなれあってんじゃねぇ。
どうでもいいことでスレを消費しすぎ。
ま、適当に。ってことで。
個人的要望としては、女性キャラを活用してほしい(w
>>64
オレもおもた
(´-`).。oO(宿題こないかなあ・・・)
68かおる:02/07/09 00:15
宿題があったら持ってきてね。
心配するな。
教えて君は場の空気なんてお構い無しに質問してくるし、
教える側は空気なんてそもそも気にしない。
70デフォルトの名無しさん:02/07/09 00:16
プログラマってキモイネ。
いま、教える側が供給過多になっている
72かおる: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。
解答者が突然質問者になった予感
>>76
MINDかよ! (w
これから夏休みの宿題がいっぱい出てくるのかな。
ちなみに俺もそのときの気分で適当に答える派〜
てけとー
  てけとー
8276:02/07/09 00:22
こたえてよぉ〜
>>74
#include<stdio.h>
main(){
 printf(2^1000 = 10715086071862673209484250490600018105");
 printf( "61404811705533607443750388370351051124");
 printf( "93612249319837881569585812759467291755");
 printf( "31468251871452856923140435984577574698");
 printf( "57480393456777482423098542107460506237");
 printf( "11418779541821530464749835819412673987");
 printf( "67559165543946077062914571196477686542");
 printf( "167660429831652624386837205668069376");
}
84オヤジ:02/07/09 00:23
>>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
>>83
エラーがでたけどなんで?
89デフォルトの名無しさん:02/07/09 00:24
>>88
"が足りない
>>83
forを使えと言われました。
91デフォルトの名無しさん:02/07/09 00:25
>>90
for(;0;) ;
このあとに>>83
>>90
次に来る回答が読めるね。
93デフォルトの名無しさん:02/07/09 00:26
>>86
オーバーフローするから、内部で独自表現しなければいけない。
そこで、内部で2進数表示する。で配列をもって各配列が各桁を表してる。
で、2倍するのは、一つシフトすることだから、1000回シフトしてあげる処理
をすればいい。簡単だね♪
94デフォルトの名無しさん:02/07/09 00:27
>>75は放置ですか?
宿題の提出期限は明日までなんです!!
>>83
エラーがでます。たすけてください
もうネタか宿題か区別がつかん
97デフォルトの名無しさん:02/07/09 00:28
>>94
とりあえず、宿題の全文書いてください。
>>96
ほぼ確実にネタだ。
くだらなくてもいいから本物の宿題きぼん。
>>96
いや、全部ネタだと思われ
10076:02/07/09 00:29
漏れのも答えてよぉ〜
101デフォルトの名無しさん:02/07/09 00:29
>>88>>95
2^1000の前に"をいれてください。
暇つぶしになる面白い宿題こないかなー
>>100
スマソ
漏れはMINDやったこと無いんだよ
104デフォルトの名無しさん:02/07/09 00:30
>>73のひとことが・・以下略
>>101
それでもこんなエラーが出ます。
警告 W8070 shukudai.c 11: 関数は値を返すべき(関数 main )
>>102
PHPでもいい?
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
スネーク、それはエラーではなくワォーニング(ワラだ。
>>106 ノ〜!PHP知らないや。
>>106
いいよ
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | 結局みんな暇なんだね
  \
     ̄ ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

     ∧ ∧ 
   (( (Д゚#,)    
     U  |
     |  @
     .U U
     ̄ ̄ ̄ ̄
115デフォルトの名無しさん:02/07/09 00:36
>>112
ありがとうございます。
ただ、できればJavaではなくて、C++でお願いしたいのですが・・・。
先生が「こういうことはJavaではできないウンヌン」言ってたのが気になります。
116デフォルトの名無しさん:02/07/09 00:36
>>107
わかった。
117デフォルトの名無しさん:02/07/09 00:38
なんか、逆にこのスレの人間に宿題を出すスレになりそうで怖いw
118デフォルトの名無しさん:02/07/09 00:39
Cの標準ヘッダーファイルを好きなように書き換えろという宿題が出ました。
でもどうやっていいのか分かりません。。。
>>118
とんでもない宿題だのう。
121デフォルトの名無しさん:02/07/09 00:40
関数ポインタを使ってなんかしろ、っていう宿題が出ました。
どういった処理に使えばいいんでしょうか?
122デフォルトの名無しさん:02/07/09 00:41
>>121
qsort,bsearch
================== 一時停止 ==================
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が
あります。どしてコンパイルできないの?
パスがとおっていない
スレ消費しすぎ。
>>128
速いな (w
Hello.java.txt
132デフォルトの名無しさん:02/07/09 00:45


すべては>>73のせいだ!

133デフォルトの名無しさん:02/07/09 00:45
>>127
Javacへのパスが多分通ってません。
Javaのインストールの仕方を書いたページをあさって、がんがってください。
134デフォルトの名無しさん:02/07/09 00:46
暇だったらプログラムコンテストの問題でもやってみるか?w
135 :02/07/09 00:46
>>127
tmpにパスはとおしていますか。
JDKはインストールしてますよね。
137デフォルトの名無しさん:02/07/09 00:47
>>135
tmpはカレントなんだからパスを通さなくてもいいだろ
13874:02/07/09 00:48
ごめんね。>>73の甘い言葉に誘われて(略
>136
ナイスキーワード(そのものずばりだが)
140デフォルトの名無しさん:02/07/09 00:49
オイオイまだ3時間も経って無いのに130レスかよ
141127:02/07/09 00:49
みなさんありがとうございます。
>>136さんのURLをじっくり読んでみます。
142応用例:02/07/09 00:49
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
>>144
はやいね
146135:02/07/09 00:51
>>137
そだね。環境変数のことをいいたかったけど、こりゃ伝わんねーわ。(W
ねます。
147デフォルトの名無しさん:02/07/09 00:52
>>143
Σ(´□`;)
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |  やっと落ち着いたか
  \
     ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧ ∧
  ( ゚Д゚)y━~~
   U  |
 〜|  | 
   U U
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
答える気満々な時は質問がなく、たまたまちょっと覗いただけの時は
質問が滞ってるのはなぜですか?
A4レポート用紙3枚程度にまとめないといけないです。
言語は日本語です。
cout<<"(゚ω゚=)";
漏れは日本語はパスだな〜
>>149
しらん
「いけないです」って言い回しより「いけません」のほうが
好きだなぁと、昔、学部学生のレポートを添削していたときに
思ったのを149を読んで思い出した。
>>153
前者は幼稚な感じを受けるからだろ。
>>154
だったら前者のほうが好感度高いじゃないか
「〜しなければならない」
「いけないです」って日本語として正しくない気がするのだが。
>>149
よくわからないので、とりあえず歌ってみたいと思います。


真夜中過ぎに目がさめて 君のくれたメ〜ル読みかえす
まだ見ぬ その笑顔 僕の中で膨らむ
夢はモデムに託すもの ハ〜ドディスクは愛のLogだらけ
二人を 繋いでる 赤いモジュラ〜ケ〜ブル

チャットしていたい Ah− 君と朝が来るまで
あふれる文字 時を止める 燃えるハ〜ト抑えきれずに

悲しみの NIFTY-Serve 逢いたいけれど
君の 住む街はとても遠く
悲しみの NIFTY-Serve PAGE 送るよ 今日も
スクラコ〜ドは 二人のイニシャルさ
プログラムが動かないのですが、
関数を作るときに全てvoid XXXXXX(){〜〜〜〜〜〜〜〜}
としてはいけないのでしょうか?
何が悪いのか分からなくて4時間もちまちまいじってます…。(TT)
いろいろな部分を置き換えても一向に動く気配がないので、
初心者の陥りやすいミスを教えてください…。お願いします。
あと3時間で課題終わらせなくてはいけないので…。
動かぬソースの一部を晒して
>>159
あと3時間と言う当たりが怪スィな
162デフォルトの名無しさん:02/07/09 01:11
>>159
コンパイルし忘れて、ソースファイルで起動しようとしてる
163159:02/07/09 01:13
原因と思われる場所を晒します…。

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
うちの祖母でもそんなことはしでかさない
165159:02/07/09 01:15
コンパイルは通りました。
あと3時間ていうのは学校が遠いのに早朝に締めきりがあるんです…。
発狂しそうです。。゚・(つд`)・゚。
>>163
単体でfie()を呼んでみる
whileの条件が妥当か検討する
マジ質問?
while の中身が実行されてないのでは。
170159:02/07/09 01:26
>166
この場合のwhileの条件式は、Escキーが押されていない場合ですよね?
なら、条件は間違ってないのですが…。

>168
なぜか文字入力だけ出来ました…。
画像は数値を変えたりしましたがダメでした。(;;
埒があかねぇな。どっかのうpろだに固めてぜんぶあげてみ。
172159:02/07/09 01:37
http://isweb34.infoseek.co.jp/play/sage2/up/0061.lzh
まだ全然まともじゃないですし、お手数かけますがお願いします…。
173デフォルトの名無しさん:02/07/09 01:48
>>172
> int main(char *argv)

これはないだろ
>>172
#include "stdio.h"

同じフォルダにstdio.hなんて入っていないようだが?
175172:02/07/09 01:56
あう、それなんですが、
私が受けている授業では変則的なコンパイラを使っているらしく、
その形から省略できないとの事です。(つд`)

int 以外の部分を削るとエラーが出ました…。すみません…。
>>175
あなたはタナカヒサテルさんではないのね?
177172:02/07/09 02:05
うう、授業で習ったことはいいかげんなことだったんでしょうか(;;
#include "stdio.h"
…も、おまじないみたいなものだから入れておくようにと指示がありました。

いろいろとお騒がせしました…。ごめんなさい。
もう一度テキストとにらめっこしながらここの助言を参考に頑張ります…。

>176
違いますよ? タナカさんってどなた?
#include <stdio.h>
なんかそら恐ろしい授業だなぁ。
VC6でコンパイル通ったぞ。
どんなコンパイラ使ってるんだ?

頭の"stdio.h"は<stdio.h>に直せ。
それからtime.hがいる。
181デフォルトの名無しさん:02/07/09 02:13
ageとこう
include を "おまじない" で済ましちゃう授業なんて有るのか。
おまじないはまだ許せるけど""で括るように教えてるのは。。。
しかし >>172 はもう見てないのかね
180だが。
なんだコンパイルは通ったのか・・・
でももう消しちゃった。
これってDirectX使ってるの?
VCもbccもFatalがでる。libが開けないらしい。
俺も同じく。
lib開けないらしい
libへのパスが通ってないとか、じゃなく?
>>188
パスじゃなくてファイルそのものが無かった。
あらま。
191189:02/07/09 02:40
こんなのみつけた。
ttp://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq3.html
DirectXなんて使ったことなかったから知らなかったよ。
なんとかコンパイルは通ったけど、もう寝る。
がんばれよ。
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
そこまで行って、なぜ・・・
>>192
色が変わるエディタの画面をキャプチャして解析すれ
>>192
stateを2つに限らず、4つとか5つにしてもいいっしょ。
なるほど、オートマトンってこういうときに便利なんですね。
しかしながらC言語の宿題な訳で、
受理する受理しないをプログラムで、といわれても
それこそワケ・ワカ・ラン!な状態です。
>>197
とりうる状態をオートマトンで書いてみれ。
199かおる:02/07/09 04:01
"だけではなくて、\も特殊文字として扱ってあげてください。
取り敢えず、

1)最初の"/"
2)最初の"*"
3)二番目の"*"
4)二番目の"/"
5)最初の'"'
6)二番目の'"'
7)最初の"\"
8)二番目の"\"

8つのstateを用意してやってみ。
201デフォルトの名無しさん:02/07/09 04:08
>>192
2文字ずつ取ってみたら?
202192:02/07/09 04:10
こんな時間に人いっぱいいますね
皆様。かんしゃぁ〜

>>196殿
そういうことも考えたのですが、
printf("\t\\\\\\\\\\\\\\\"");
みたいな状況(かなり無茶苦茶ですが)の時
\の個数が偶数かつ\"で…とか
もしくは\\\"となったときの"は…
など状況毎にstateを作ると
あまりに非効率な気がした物で。

これをオートマトンでやれば効率がいい
というのは十分理解できるのですが、
オートマトン履修中の身で、かん移図
描いてみても、かなり怪しい気がします。
197に書いたようにプログラムにすると…
あと、C言語歴は4月からです。
>>202
いや・・・・状況毎にstateを作る、まさにそれが「決定性有限状態オートマトン」
なわけですが。それしか方法ないです。
こういう状態遷移が起きるものは、
オートマトンの考え方を使えば
頭の中を整理してプログラムを作れて良いよってこと。
嘔吐マン
スレのスピードと自分の思考が追いつかないです(;´Д`)

\をどう処理すべきかな訳ですね。
\t\nと\\\nの\の状態を単純に
IN OUT の状態で判断できるのかな?むぅ
って感じで、別の状態として考えるべきか
と考えつつ、むぅぅぅう??です。


>>203殿
自分は状態が不完全な形で
やっていた訳ですな。


とりあえず○○×を受理する場合。
とか状態数が少ない場合を
じっくり考えつつやってみようかと思います。

スレを返してくれた方々サンクスコ!
207205:02/07/09 04:32
>>206
> スレを返してくれた方々サンクスコ!
いやいや、どういたしまして。
とりえあず、
スレを返すってなに?
と自分でつっこんでおきます。
209159:02/07/09 04:37
159です。みなさん、ありがとうございました〜。
提出はできなかったけど(おかげで完成はできましたけどね)、
プログラムが嫌いにならないですみました。
本当に感謝です。
>>206
単に\が来たら次の文字を読みとばす、とかじゃダメですか?
眠いのでおかしなこと言ってたらすまそ
提出が午前4時迄ってなんかすごいね
212デフォルトの名無しさん:02/07/09 10:10
すみません、課題で余因子行列を使って逆行列をもとめる
Cのプログラムを作っているのですが、プログラムで
余因子行列をどうやって求めればいいかわかりません。
教えてくださいです。
>>212
余因子行列の求め方自体は知っているのか?
214212:02/07/09 10:19
>>213
一応知っているのですが、どうやってプログラムとして書けば
いいのか、うまいこと思いつかないです。
>>214
配列に放り込んで求めるってのじゃだめ?
スマートな方法は良くわからん。
216212:02/07/09 11:11
>>215
配列を使って行列を入力してそこから余因子行列をどうやって
求めればいいかわからないでのですが、
>>216
それは公式で求められるでしょ。
よく公式に使われるi,jを配列の要素と考えれば。
で、i,jの回数分forで回す。

それとも俺が余因子行列を勘違いしてるのかな・・・。
(´-`).。oO(余因子行列というものが分からなくて力になれない)
219212:02/07/09 11:18
>>217
説明不足でした。
公式で求めようとすると、for文をどこで使えばいいかがわからないのです。
連続性がわからないと言うか
220デフォルトの名無しさん:02/07/09 11:19
>>219
余因子行列の求め方を書け
>>219
スキップするところは、if と continue で。
222212:02/07/09 11:24
>>220
求め方が載っているページです。
http://aglaia.c.u-tokyo.ac.jp/~yamamoto/Math/system/node8.html
後、3×3行列の場合っていうのを忘れていました。
223212:02/07/09 11:25
こっちの方が説明がわかりやすいかもです。
http://www.ge.kochi-ct.ac.jp/~fujii/java/senkei/g1_71.htm
3x3だったら全部の要素を書いちゃえば?
一般に作るなら、行列式を求める部分と
i行j列を省く部分を作ればいいかな
225212:02/07/09 11:33
>>224
i行j列を省いてどのように作ればよいのでしょうか?
>>225
省いた列(j列)には 単位行列の列(j列)をぶち込めば良いんじゃないのか?
>>226
まじで?
A[i][j]の余因子は、行列A の j列において i行のみが 1 となる行列の行列式だろ?
サラスで行列式を求め、あとはクラメルの公式を使って
行列A の逆行列を求めれば良いのでは?

もう行列なんて覚えてないから自信ないけどさ……
229212:02/07/09 13:57
>>229
プログラム書いていただけませんか?
宿題を、全部やれ、と。
231212:02/07/09 14:03
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で授業してるところがあるのか。。。
234 :02/07/09 14:24
sum = sum + i

じゃないの?
>>234
それじゃ無限ループだろ
つか、コンパイルとおらないし。
237デフォルトの名無しさん:02/07/09 14:54
こんなのも出来ないの?ここの人達
ほう、これが煽りですか。
相当低ラベルですね。
Writeln( 'こんな単位いらんぞグゥオラ!' );
i:=10000;
ママ、サンタクロースはいるの?
昨年末、住居不法侵入で逮捕されて獄中なのよ。
Pascalはインクリメントって無いんだよね?
i:=1になるのか?
244ツリー:02/07/09 15:09
おい、お前ら!
リストとツリーの違いを教えてください。
おねがいします。
sum := sum + 1;
i := i + 1;
漏れ天才。
>>245
だめじゃん
247245:02/07/09 15:11
漏れ凡才?
sum:=55
249245:02/07/09 15:13
sum := sum + i;
i += i + 1;
漏れ秀才。
250リスト:02/07/09 15:14
>>244
同じところのほうが教えづらいよ
251245:02/07/09 15:14
漏れ低脳発覚。
i := i + 1;
みんな、暇だからネタでやっているんだよね?
>>249
最初ので良かったんじゃないの?
Pascal知らんけど
>253
だめぽいじゃん
馬鹿ばっか┐(;´〜`)┌
256ツリー:02/07/09 15:17
おい!
俺の質問にも答えてください。
おねがいします。
>>256
貴殿の考えをとりあえず書きなされ。
みんなが総力あげて叩く
258ツリー:02/07/09 15:18
おい!
メリークリトリス!!
保守。
260デフォルトの名無しさん:02/07/09 15:24
tree_baka
>>256
根本的に違う。データ構造という以外に共通点はない。以上。
ママ、クリトリスってなぁに?
263ツリー:02/07/09 15:27
根本的にデータ構造という共通点があるんじゃねえの?ゲラ
最近はスレ立てたキャラが出てこないんだな。
ネタスレ
くりとりす(゚д゚)ウマー
>>267
あまりおいしくなかったよ
リストとツリーの解説なら、30分くらいがんばって検索すれば
見つかるんじゃねーの?
>269
よそで聞き始めたから、検索する気ゼロっぽいですな
271212:02/07/09 16:30
すみません、行列を入力して行列式を計算して、そのあとに余因子行列を表示して
逆行列を表示して、行列と逆行列の掛け算を表示するように作ったのですが、
どこが間違っているかわりますか?
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
自分はどう思うのですか?
>>271
とりあえず、ifが見あたらないのにelseがあるのはどういうことか説明してくれ。
or(i=0;i<3;i++)

xが0の時とかどうなんの?
mat2[i][j]= mat[j][i] / x;
キャストしてやれ
279C言語:02/07/09 18:15
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
行列式を求める関数を作れ。
>>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
・質問内容がちゃんと日本語になっていること
・言語名を入れること。
・自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
粘着くん登場
三つ目が人で終わってるのに思わず笑った。
292291:02/07/10 15:03
3×3行列の逆行列を出力するプログラムを教えてください。
お願いします。
>>292
簡単な奴だと二通りある。

1)掃き出し法(ガウス・ジョルダン消去法)で求める。
2)余因子行列から求める。
294291:02/07/10 15:09
>>292
どちらが簡単ですか?
本に書いてある逆行列を求める関数を丸写し。

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];
   }
  }
 }
}
296291:02/07/10 15:15
>>295
エラーになるよ
>>292
余因子行列は、行列式を求めてから計算しなければいけないが、
3×3までの行列なら公式で導ける。それ以上になると行列式を
求めるのが面倒。

掃き出し法は手計算が面倒だが、コンピュータ向き。>>295に例を
示した。
>>296
全角スペースを半角スペースにしてください。
299291:02/07/10 15:23
>>298
voidとintを両方指定することはできません。ってでるんですけど・・・。
>>299
あとは自力でやれ
>>299
プロトタイプ宣言が抜けている。
ヘッダファイルのインクルードの後に次の一行を入れれ。

void int(double a[NN][NN]);
>>301
> プロトタイプ宣言が抜けている。
そういう問題じゃないだろ。
関数名が予約語(int)になってるのがまずいのでは?
ぐわあああああああーーーーーースンマソン!!!!!!

int()は写し間違えた。指が勝手に動いて・・・・・
inv()と書くつもりでした。ごめんごめんごめん。
>>304
反応が面白いので許す。
306291:02/07/10 15:52
>>304
それでもエラーが・・・
>>306
さすがに今度はコンパイルして確かめてみたよ。あとエラーが出るとすれば

#define NN 3

を付けてないことぐらいかな?
308291:02/07/10 16:10
#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
でないっすよ
任意次元の行列式を求める方法が分かっていても、
それをプログラムに直すことが出来ない。
>>306
なんてエラーが出てるんだ?
>>308
-=・=- -=・=-
気になる。エラーメッセージをコピペしてくれ。
まさか・・・・・・とは思うが、main()関数を書いてないのか?
そこまではフォローしきれんぞ。誰か後をたのむ。
313291:02/07/10 16:28
>>311
パーサーエラーってでるんですよ
>>313
parserエラー?内部エラーじゃないの?コンパイラは何?
315291:02/07/10 16:36
>>314
Cmachine
>>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];
}
}
}
}
318C勉強中@VB厨:02/07/10 16:46
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;
}

エラーは出ないが、正しい値が求まらない
319291:02/07/10 16:49
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;
}
323291:02/07/10 17:04
>>320
LU分解法は習ってないで・・・
324C勉強中@VB厨:02/07/10 17:06
>>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
のような行列が解けない問題があるので、ピボット選択について
考慮した方がいいかもしれません。
326C勉強中@VB厨:02/07/10 19:55
こんなんどうですか。

#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
ご苦労様でした・・・・・余因子行列を求める部分は再帰的に適用すれば
もっと大きなプログラムにも使えるでしょう。しかし大変ですね。
328hila:02/07/10 20:21
C言語でのバケットソートがわかりません。
普通にバケットソートでソートすればいいのですが・・・
Googleで検索して見つけたとこを見ながらやってるのですが
解説がないのでよくわかりません・・・
ここですが。
http://www.biwa.ne.jp/~ymatsu/program/C_Prog/bucket.txt

ポインタrearやbeforeの用途がよくわからないのですが・・・
全体のアルゴリズムを簡単にでも解説してくれればたすかります
hila(20:18 PM) :
これかいて
>>328
うむ。バケットソートの説明としては恐ろしく分かりにくい。
バケットソートしたいだけならキューなんか使わず配列でやれ。
330hila:02/07/10 20:51
ila(20:47 PM) :
あー、やっと7-1おわった
hila(20:47 PM) :
また書いて
hila(20:48 PM) :
質問しといてなんですが
なんとかわかりました(笑)
hila(20:48 PM) :
とかってなんだったんだろ
>>331
何かのメモっぽいけど……なんだろ。
333333:02/07/10 23:30
333get!!
334hila:02/07/11 03:03
今度はマージソートで、またあるサイトを見ながらやってるのですが
条件分岐でわからないところがあります。
335hila:02/07/11 03:11
ila(02:58 AM) :
今度はマージソートで、またあるサイトを見ながらやってるのですが
条件分岐でわからないところがあります。
http://www.biwa.ne.jp/~ymatsu/program/C_Prog/merge.txt
ここの関数mergeの中のif文の条件、j>rとi<=qは
何を意味するのでしょう?
確かにこれがないと上手くいかないのですが・・・
336デフォルトの名無しさん:02/07/11 03:13
>えれなさん

あなたぴたテンとかみてますか?
337336:02/07/11 03:14
まちがえました
>かおるさん
>>335
重くて見れんぞ。それに、マージソートはリスト構造向き。
配列でやろうとすると苦労する。
ごはんとかできます
340デフォルトの名無しさん:02/07/11 17:29
>>339
作ってくれぃ
>>339
いや是非俺に作ってくれ。
冷やし中華始めました。
>>342
ごまダレでおねがいすます。
かおるタンが作ってくれるのか?
宿題ばかりでなく料理まで・・・ハァハァ
>>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

です。
347かおる:02/07/11 18:36
>>344
私を料理してください。
う〜このBBS訂正がきかないので困るな〜。

× j は q+1〜r
○ j は q+1〜r-1
>>347
蜂蜜がけで宜しいですか?
>>347
うちのおかんと同じ名前で萎え萎え〜
http://scripts.s3.xrea.com/homework/
質問と回答もまとめようかと思いましたが、
あまり意味が無さそうな上に大変なので
後回しにしますた。

じゃあこのページの存在意義は?
>>351
おつかれ。
でも、反射神経で質問じゃなくて脊髄反射でないかい?
>>352
修正しときますた。にしても試しにVS.NETでHTML編集をしてみたんですが、
案の定、滅茶苦茶見難いソースに変換されますた。
Meta name="description"
が涙でよく見えない。。。
>>350
うちのおかんとも同じ名前〜
>>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
うまくいかないってなんだ。
環境は何を使ってるんだ。
>>358
挙動がおかしいって何?
アセンブラを教えてる学校ってあるんだ
362358:02/07/12 21:10
ミスってる・・・
正しくは
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);
ってなんスか?
364358:02/07/12 21:18
>>360
なんか入力する数字によっては、CPUが不正な命令を検出しました
とか画面がバグったりするんです。
>>361
うちの学校もやってたよ。聞くところによるとまだやってるらしい。
366357:02/07/12 21:19
>>359
レスどうもです。
一度目のsystem()の実行はうまくいっているのですが、
systemの実行結果を配列に格納する作業がうまくいっていないようです。
環境はred hatです。

>>363
現在実行中のpppppというプロセスを
killコマンドで強制終了させたいのです。
>>366
実効がうまくいってるっていうのはどうやって確認できたの?
つか、コンパイルできないとおもうんだけどな、、
あ、宣言なしはint system(...);の規則が適用されてるのか。
369357:02/07/12 21:39
>>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関数って戻り値は結果じゃないでしょ?
373アリアス:02/07/12 23:28
SJFスケジューリングのアルゴリズムをc言語で
実現したものを教えてください。
短い順にソート
375アリアス:02/07/12 23:38
これじゃダメすか?
{
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がわかる信号処理系の人いませんかねぇ…困ったなぁ。
378376:02/07/13 01:40
いやそうじゃなくて、
DFT時間
ってのはなんだ?
DFTにかかる時間か??
シミュ板にMATLABスレあるけど返事がいつ返ってくるかは謎
下手すると年単位
380376:02/07/13 01:45
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)へ書いたのですがお返事はいずこへ…。
いやきっとあの板の人も???と思っているのだと。
とりあえず教科書がアポーンなこと書いているかもしれないので、近いうち先生にも聞いてみます。
385376:02/07/13 02:53
>おそらくDFTにかかる時間とFFTにかかる時間の違いを見るということだと思います。
じゃあfft(x)とdftmtx(N)をつかって時間の違いをみてくれ。

>いや、そのことに意味があるのか…。
dftとfft似かかる時間の違いをみるんだろ?
dftはO(n^2)だし、fftは。。。忘れた・

>それ以前に、教科書のその章で出てきているのはfft(x)とdftmtx(N)だけなので
それを使うとしても、振幅スペクトル等で使うしかないのではと思うのです。
う〜む、どうしたものか。
振幅スペクトルとかは関係ないだろ?かかる時間をしらべるだけなんだから
>>384
趣味版ってどこよ?
>>357
#!/bin/sh
kill `ps | grep ppppp | grep -v grep | awk '{print $1'}`
388387:02/07/13 04:56
間違い。

#!/bin/sh
kill `ps | grep ppppp | grep -v grep | awk '{print $1}'`
389 :02/07/13 05:22
>>381
これは合法か?

std::string dir;
dir.resize(MAX_PATH);
dir.resize(GetCurrentDirectory(MAX_PATH, &s[0]));
>>385
FFTは確か、o(nlog(n))
391デフォルトの名無しさん:02/07/13 14:47
fftは(N/2)log2N
メールのスレッド表示をさせるための
アルゴリズムを教えてください。

メッセージIDとReferencesヘッダの中身がそれぞれ
順番に配列に入ってると仮定した場合、どうすればいいでしょうか?
393385:02/07/13 17:30
>>390-391
Thx!って折れに教えられてもなぁ
質問者はどっかいっちまったし
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ハケーン
>>394
|ω・`)つ○ マルアゲル
|ω・`)つ ○⊂(Φω| アリガト・・・
-=・=- -=・=-
>>401
お?何か言いたげだが・・・・?
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されない。
406404:02/07/14 02:06
>>405
どうもありがとうございました。
ということはgccとかを使うしかないですね・・・
>>406
戻り値のチェックすればいい話では?
そこでthrowすれば解決。面倒だけど。
>>405
6.0だとbad_allocなげる方法があるけど、.netだとその方法は使えないの?
409404:02/07/14 02:19
>>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
調べれば良かろう。
シャインに聞けば良かろう。
414358:02/07/14 08:15
漏れは放置ですか?(´・ω・`)ショボーン
415 :02/07/14 09:03
>>414
push ax に対応する pop は?
416 :02/07/14 09:04
>>403
後置記法なのに括弧が必要なのか?
417414:02/07/14 09:28
>>415
レスありがとうございます。
popは後の計算ルーチンで使ってます。
因みに試しにスタックセグメントの使用を止めて
データセグメント領域に入れるようにしたら、バグのパターンが変わりました。
何故でしょうか?
>>417
メモリ破壊してるんでは?
419414:02/07/14 09:58
>>418
漏れもそう思ったのですが、スタックは512b確保してますし・・・
stack segment stack
   dw  100h dup(?)
stack ends
あと入力値によっては、CPUが不正命令を検出しました。とか
入力が終了せずに1回目と2回目の入力がループするのですが、
これもメモリ破壊で起きる現象なんでしょうか?
ご教授お願いします。
420 :02/07/14 10:08
>>419
ret がスタックを使うというのは知ってる?
421414:02/07/14 10:52
>>420さん
おぉぉぉ、その突っ込みはかなりクリティカルです!
今調べたのですが、サブルーチンをcallすると
IPレジスタがpushされて、retでIPレジスタがpopされるんですね?
で、サブルーチンでアホなスタックの使い方をするとプログラムが飛ぶと、
謎はすべてとけました!!420さんありがとうございました!!
422404:02/07/14 13:05
>>411
ありがとうございます。そんな手があったんですね。
早速やってみました。

>>412
最初に指摘されたときも全然気づきませんでした。
恥ずかしい・・・
423403:02/07/14 15:57
>>416
もうアフォさ丸出しですねすいません。
課題終わらせてから首吊ってきます。

課題では中置記法でもいいので頭の中でまざってました。
結局中置記法でガリガリ書きました。
それにしてもLispって括弧が多くて閉じる場所がわかりにくくてきついです。
424>403:02/07/14 18:57
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
!!!
学生はそろそろ夏休みだからしばらくはこのスレも暇になるのかな?
夏休みが終わる頃には活躍しそうだけど。
429初心者:02/07/16 14:53
次の関数を再帰関数にしたものを
教えてください。

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
そうそう再帰になんかする意味ないよね。
間違えることもあるし。
435初心者:02/07/16 16:13
>>423
うるせぇー 禿 お前の名前鶴○やろー
屑 かす ぼけー インポ 核廃棄物
>>431
else忘れてんぞ
437431:02/07/16 16:17
ごめん。
438432:02/07/16 16:53
>>435
いんぽだけ正解です
439デフォルトの名無しさん:02/07/16 20:41
age
440 :02/07/16 20:44
ウゼェきえろ・・・
      ∧_∧          _ _     .'  , .. .∧_∧
     ( ´_ゝ`)   _ .- ― .= ̄  ̄`:, .∴ '     ( >>435
    /     '' ̄      __――=', ・,‘ r⌒> _/ /
   / /\   / ̄\-―  ̄ ̄   ̄"'" .   ’ | y'⌒  ⌒i
 _| ̄ ̄ \ /  ヽ \_              |  /  ノ |
 \ ̄ ̄ ̄ ̄ ̄ ̄ \__)              , ー'  /´ヾ_ノ
  ||\            \          / ,  ノ
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄          / / /
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||          / / ,'
  ||  ||           ||       /  /|  |
                       !、_/ /
>>429, >>431
まあ、どうでもいいけど、俺なら...
> cp->nextp = p->nextp;
は、cp->nextp = NULL; と書く。
>>441
俺も。
>>441
ワシも
444431:02/07/17 00:03
私も
445デフォルトの名無しさん:02/07/17 17:53

              /⌒彡
     /⌒\    /冫、 )
     /  ∧ `./⌒ i `  /ゝ
     /  ノ  > ( <     ( \\
  ̄~⌒ ̄ ̄~  \`つ    ⌒ _)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
最近このスレ暇だね。
>>446
いいことだ。
試験期間もしくは夏休みだからじゃないの?
夏休みが終わりに近づくと忙しくなると思われ
450デフォルトの名無しさん:02/07/17 18:39
誰か、先生になってください。
>>450
生徒もいないのに?
452▽・w・▽:02/07/17 19:03
>>451
生徒になるワン!
453デフォルトの名無しさん:02/07/17 19:44
C言語の初心者なんですが、
西暦と月を入力して、その月を出力するようなプログラムを、
作りたいんですけど、詳しく教えてくれる方もしくは、
分かりやすいサイトを教えてください。
454デフォルトの名無しさん:02/07/17 19:53
>>453
その月のカレンダーを作れってこと?
その暦は、グレゴリウスの改暦とか、カエサルの改暦による
混乱したあたりのことを考慮するのか?
まず、そこをきかせてもらえないかな?
初心者ということであんまり難しいこと考えなくていいような気もする。
man 3 ctime
してみれ。manがない環境だったら、標準関数mktimeあたり調べてみれ。
簡単に作れるが、time_tがあらわせる範囲でしかカレンダー作れないけどな。
457▽・w・▽:02/07/17 20:52
誰も相手にしてくれない・・。
>>453
1月を前年の13月に
2月を前年の14月に
>>457
なんか聞いてみたら?
460▽・w・▽:02/07/17 21:01
459>>
やさしいね♪
レスありがとう。

>>460
犬は好きなんだよ。
462▽・w・▽:02/07/17 21:11
>>461
犬でよかった・・。
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
       /⌒ヽ)
     〜(___)  
>>467
そんなこと無いと思うよ。たぶん
469デフォルトの名無しさん:02/07/17 23:34
あ、いや、ネタじゃないです。
DATA_NUMとJAP_LENはプログラム中どういう意味で使われてるのでしょうか?
>>462
そして君は>>461に美味しく食されるわけだが。
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
479▽・w・▽:02/07/17 23:49
みんな高度なことやってるんだね。すごいな。
480デフォルトの名無しさん:02/07/17 23:49
>>476
こういうのを考慮したところまでコードを書いて初めてハッシュと言うんだよね。

あと
 ・日本を表すのにJAPなんてのはやめれ
ともいっておこう(w
>>477
もうちょっと条件を書いたほうがいいんじゃない?
へたすると http://sourceforge.net/ とか出されてどれでも
見ろなんていわれるぞ。
482デフォルトの名無しさん:02/07/17 23:51
483481:02/07/17 23:51
かぶった...
>>480
高度だと思ってやめたんだろうね。
ならハッシュなんて例題にするなよ(笑)
>>484
普通、構造体やって、リンクリストやって、その使用例として
ハッシュをやるもんだろう。早すぎると思うよ(w
486▽・w・▽:02/07/17 23:58
>>485
先生になってください
define 分かってないのにハッシュをやるとは如何なものかと
>>487
激しく同感
489477:02/07/18 00:02
そうですね、もう少し具体的に書きます。

ソースコードが長すぎず(ワードにはっつけて二枚程度)
そして面白い(抽象的ですいません。)
かつ、ソースコードの解説が載っていればさらに嬉しいです。

お願いします。
>>489
宿題の工程の大半をここに委ねたわけですな。
>(ワードにはっつけて二枚程度)
ここ、笑った。おもろい。
492475:02/07/18 00:06
>>486
¥4000/hでどうっすか(w

つか、実際にこの値段でプログラミング教えてまっす。
475は日本語にかなり難ありだなあ。急いで書いたから許せ。
493477:02/07/18 00:07
>>490
言い訳ではないですが、ネット上からダウンロードして解説する
という宿題なんです。(笑
494デフォルトの名無しさん:02/07/18 00:08
>>489
Cの標準関数のソースコードはどうだ?
495デフォルトの名無しさん:02/07/18 00:11
>>493
これなんかどうだ(w
http://www.ring.gr.jp/archives/GNU/hello
463と475を一ページずつコピペして提出したら? >>477
497▽・w・▽:02/07/18 00:12
>>492
お願いします。
498495:02/07/18 00:13
と思って最新版をみてみたら、ずいぶん複雑になってるなあ。
499デフォルトの名無しさん:02/07/18 00:14
>>489
言語はなんでもいいのか?
500475:02/07/18 00:15
>>497
ひー、本気にすんな。
ま、このスレで宿題を聞く分にはタダだからそれで我慢すれ(w
501デフォルトの名無しさん:02/07/18 00:15
>>497
ウチは\5000/dだ。安すくて質もいいぞ
こっちへこいワンコロ。
502デフォルトの名無しさん:02/07/18 00:16
>>497
うちは女なら\0/月だ。
>>477
http://www.ioccc.org/
これは?
少なくとも面白いコードであることは確かだぞ(w
504デフォルトの名無しさん:02/07/18 00:16
>494
javaに使えるんだったらokです。

>495
今見ましたが、さっぱりわかりません。
どこを写せばいいのかすら解りませんでした。
すみませぬ
505▽・w・▽:02/07/18 00:16
>>475
やっぱりそうですよねー。
はぁ。教えてくれる人がほしい・・。
506▽・w・▽:02/07/18 00:18
>>501
ほんと?
507デフォルトの名無しさん:02/07/18 00:19
>>503
すごく面白いコードだけど、解読が無理だろう(笑)
508477:02/07/18 00:22
>507
その通りです。(笑
やっと配列や条件分岐について理解したところですから…
解説が日本語で載っていれば嬉しいです。
http://www.kumei.ne.jp/c_lang/index_c.html

普通に初心者向け解説サイト逝っとけ
510▽・w・▽:02/07/18 00:27
>>509
それ、解りやすい♪
>>509
言語はJavaだとさ。
477にJavaに書き直せるだけの力が有ればいいけど。
512477:02/07/18 00:27
>509
解りました。どうもありがとうございました。
513477:02/07/18 00:28
>511
あ、ほんとだ。c言語だ。書き直す力はないです…
514デフォルトの名無しさん:02/07/18 00:30
>>513
いつ出された宿題で、いつ提出するの?
>>510
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | お前犬だろ。ネコのサイトになんて行くなや
 \_ __________
    |/
 ∧ ∧
 (;゚Д゚)y━~~
  U  |
〜|  |
  U U 
517▽・w・▽:02/07/18 00:35
>>516
あ…。
518477:02/07/18 00:35
>515
提出明日です。
>>518
おいおいおい(汗
>>516-517
ワラタ
>>518
明日っていうのは7/19か?
どこの学校かしらんがJavaなんて教えるなヴォケ!
Javaから入ってそのあとC++を学ぶと、メモリがリークしまくりそうで
愉快だね。
524477:02/07/18 00:42
>521
いえ、18です。
誰かJava使いがいたら練習用に書いたコードでも貼り付けてあげて・・・
526▽・w・▽:02/07/18 00:44
>>477
がんばってね!
>>524
今日じゃん。あきらめるのも一興だよ。
528▽・w・▽:02/07/18 00:46
宿題ある人はいいなー・・。
529477:02/07/18 00:48
>525,526
ありがとです。

>527
はっつけてコードの解説すればいいのでそんなに大変ではないんですが、
なにしろ適当なソースがなかなかないもんで…
>>529
なんでもっと早くやっておかなかったのかと、小一時間問い詰めたい



……ところだが、時間がなくなるので勘弁しておく。
いっそのこと、自分で適当なゲーム作って(3目並べとか)
適当に解説つければ?
>>530
477は初心者だから作れないんじゃないか?

>>477
だよな?
>>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
>>533
ご苦労様
535デフォルトの名無しさん:02/07/18 02:42
>>532
Javaもstrcpyを呼ばないといけないの?
536535:02/07/18 02:42
あ、上は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みたいなキャラいいよな。
誰が飼ってるかでもめそうな気もするが、
わんちゃんは気持ちいいキャラだよ。

その調子で書いてくれ。
面白い宿題を提示してくれたら喜んでああでもないこうでもないと考えてあげちゃうよ。

はじめはビーグルかと思って警戒してたんだけどそうじゃないみたいだし。
このスレのペットとして活躍してくれ。
542▽・w・▽:02/07/18 17:16
>>541
なんかうれしい・・・。
もっと言語勉強して、宿題だせるようにがんばるよー
543デフォルトの名無しさん:02/07/18 17:23
皿仕上げ
544C言語:02/07/18 22:50
すいません。助言いただけますか。

たとえば、「ケーキを食べる」→「ケーキを食べる」→「ケーキを食べる」と
同じ選択肢を連続して三回選んだ場合、5キロ太るというようなプログラムを書きたいのですが、
なにを使ったらいいのかわかりません。
「ケーキを食べる」→「ダイエット」→「ケーキを食べる」→「ケーキを食べる」というような
途中でなにか別の選択肢を選んだときは連続して三回とは数えないようにしたいんですが。
>>544
変数を一つ持ってケーキを食べるを選んだときに+1して=3かどうか
確認。別の選択肢を選んだときにゼロクリアする。
ぐらいしか思いつかない。
>>544
ケーキを食べた回数を記録する変数を用意して、ケーキを食べたら+1すれば?
で、他の選択肢を選んだら0に戻すと。
値が3になったら5kg増えるようにすればよいし。
547C言語:02/07/18 22:58
>>545
ありがとうございますー。
548▽・w・▽:02/07/18 23:02
ほぉー。なるほど。
549C言語:02/07/18 23:06
>>546
ありがとうですー
>>548
カワイイ。
550初心者:02/07/19 00:10
Cで電卓(×、÷を優先し四則演算ができる程度)を作れという
初心者にはさっぱりな宿題が出たんですが
何方かご教授願えますか?
私が作ったところ一桁の計算しかできず困ってます。   
▽・w・▽ は男だよな??
552デフォルトの名無しさん:02/07/19 00:13
>>550
コマンドライン電卓ってこと?
それともウイソドウズかなにかつかうの?
>>550

例えば
3 * 4 と入力したら 12を、
9 / 3 と入力したら 3 を出力するコンソールアプリを
作れということじゃないのか?
554553:02/07/19 00:16
スマソ。優先順位どうこう言ってるってことは
3 + 6 * 2
のような入力を処理しろということか・・・
555▽・w・▽:02/07/19 00:20
>>551
すみません。女です。
556デフォルトの名無しさん:02/07/19 00:21
くノ一!


                 男を出せってんだよワショーイ...
       ∧         ∧          ∧
        / ヽ      / ヽ_       / .∧
     /   `、   _/   `、⌒ヾ⌒ヽ/  ∧
    /       ̄ ̄/  u (.....ノ(....ノ   / ヽ
    l:::::::::        |           u .:(....ノノ
   |::::::::::  -=・=- / ̄ ̄ヽ        ::::::::::::::/`ヽ
   .|:::::::::::::::::  \_(___..ノ   u  ::::::::::::::::::::(....ノノ
    ヽ:::::::::::::::::::  \/ヽ  u    ::::::::::::::::::::::::::::ノ
558初心者:02/07/19 00:31
えと553さんのとうりです。すいません言葉不足で。
6+4*5=26 というみたいに積と商を先に計算するものです。
おねがいします〜
559▽・w・▽:02/07/19 00:34
>>557
こわいよー・・。
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
>>562
スタック使えばできるよ
もしかしてここの学生さんかな?
ttp://isotope.sccs.chukyo-u.ac.jp/lecture/algo/summer-report.html
565デフォルトの名無しさん:02/07/19 02:32
>>563
よくわからんので教えてくれ。
逆ポーランドってのは、

 ・数がきたらスタックにpush
 ・オペレータがきたらスタックからふたつpopして、計算結果をpush

するんだよね。だから、たとえば 2 3 4 * + とか言う風なものがきたら、
計算結果は14だよね。この理解は合ってる?

で、オペレータを数字の間に置く記法(上の例だと、3 * 4 + 2)を逆ポーランドに
変形する方法って、えーとあるんだろうけど、簡単な方法ってあるのかな。
566デフォルトの名無しさん:02/07/19 02:38
↓ここの1(マジで♀)が今、野球拳挑戦者を募集中

野球拳で負けたら、裸うpしますです
http://wow.bbspink.com/test/read.cgi/hneta/1026743313/l50

ルールは
1のレス(グー、チョキ、パー)の直後にこちらから3レス連続で勝てれば
1枚ずつ衣服を脱ぎ、その様子をうpするというもの
現在、靴下、キャミソールの2枚目まで脱がせた模様
567初心者:02/07/19 02:38
お願いします。私もがんばってみます。        
564さんちがうみたいですw
>>564
これだと、たとえば

1 + 2 * 3

の計算結果が9になるような気がする。
でも、>558の場合は7にならなきゃならんよね。
どうもおれ一人が間抜けのような気もするな…
569デフォルトの名無しさん:02/07/19 02:39
>>563
逆ポーランド式だとうっかり34*2+とスペースをいれずに入力してしまうと変な答えになってしまうからやめた方がいいと思う。
570569:02/07/19 02:41
俺も一度作ろうとしたことがあったけど、これに気づいてやめた。
571パイの魅学園:02/07/19 02:46

  / ̄ ̄ ̄ ̄ ̄ ミ
  /   ,――――-ミ
 /  /  /   \ |
 |  /   ,(・) (・) |
  (6       つ  |
  |      ___  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |       \_/ /  <  http://csx.jp/~madrix/
/|         /\   \__________
572無責任:02/07/19 02:52
知ってる人間とか出題者だと
1.再帰下降解析して逆ポーランド記法に直す
2.スタックを使って計算する
という戦略を想定しているだろうけど、ここは出題者の思惑を外して
再帰下降解析からいきなり計算するという、たどたどしい解法を
やってみるのはどうだろうか?
きっと他の学生とバッティングしないレポートになること請けあい。
573デフォルトの名無しさん:02/07/19 02:54
>>572
プログラムの中で逆ポーランド式に直すの?
574初心者:02/07/19 02:54
書いてあることがよく分からない素人ですがTT
先生にばれなかったらなんでもいいですw
575573:02/07/19 02:57
てっきり逆ポーランド式でユーザーに入力させるのかと・・・・
逆ポーランド式に直すのなら、結局は3*4+2という通常の式を解析しないといけないよね?
それならひとつずつ足したり引いたりかけたりした方が手っ取り早いような・・・
576中置記法から後置記法への簡単な変換方法:02/07/19 03:10
入力した数式が正しいと仮定するなら

数字のトークンはそのまま素通しで出力。
演算子のトークンの場合は
スタックトップにある演算子より優先順位が高ければそのままその上にPUSH
スタックトップより優先順位が低いときはPUSHできるようになるまでPOPしてからPUSH
このときPOPした演算子は出力。
EOFになったらスタックに溜まっている演算子を全部POPして出力。

ってやると再帰降下するまでもなく逆ポーランドに変換できるよ。

括弧は優先順位最低の擬似的な演算子としてPUSH
括弧閉じを検出したら擬似括弧演算子までにあるほかの演算子を全部POP&出力
したあとに出力せずに取り除く

ってやれば括弧の対応も簡単。

出力のかわりにそのまま答え計算するのもアリか?
577▽・w・▽:02/07/19 03:09
こんな時間まで大変だねー
578デフォルトの名無しさん:02/07/19 03:21
>>576,577
どうして?
とかいって、以前祭りになったことがあったな(w

で、
>>576
うわ、そんなアルゴリズム知りませんでした。
つうかアルゴリズムをあんまり勉強してないんです。
すごく勉強になりました。
579初心者:02/07/19 03:23
あう〜
一桁のみ計算可能しかできないよ〜TT
優先順位もめちゃくちゃだし・・・
yaccを使うとかは禁止?
581初心者:02/07/19 04:19
yaccなんてまだ習ってないですTT
フライングする。
583初心者:02/07/19 04:23
あははw
了解です。よろしくお願いします。
584おねげえします:02/07/19 04:25
ttp://kari.to/upload/誰か教えてください
1610です
宿題なんです思うような結果にならないんです
何かおかしいところありますか?BASICです
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 'ソート
にしてみてよ。
598初心者:02/07/19 04:44
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
です
613初心者:02/07/19 04:59
C初めて2ヶ月しか経ってないのに
計算機作れなどという課題は理不尽だと思いませんか〜?
と、愚痴をこぼしてもしかたないか・・・TT
がんばるか・・・
614611:02/07/19 04:59
>>610
眠いのでかわってもらっていいかい?
615おねげえします:02/07/19 05:00
カンマにしたら円グラフの上に
成績ランク別人数とでました!!
616おねげえします:02/07/19 05:01
ぐああ>614
>>613
理不尽だとは思うよ。
ああ、560行がおかしい。
560 T(K-1)=T(K)
だ。
619初心者:02/07/19 05:06
もう一桁のみ計算可能計算機で出したほうが
いいとおもいますか?TT
210行を元に戻して、560行を>>618のように直して実行してみて。
621610:02/07/19 05:06
>>611=614
いいです。代わってもいいですが、
ぼくは *SORT にバグがあるように見えないんですよ。
ぼくが「おねげえします」だったら PRINT でデバッグ出力しまくるんですが。

>>おねげえします
提出期限とかあるの? やっぱ今日だろ?(w
622おねげえします:02/07/19 05:06
なにもかわらないっす。。。
>>619
何も出さないよりは、はるかにいいよ。
624610:02/07/19 05:07
>618
なるほど!
漏れの目はfusianasanだった。
625おねげえします:02/07/19 05:08
今日です(^^;;
>>624
swapなんかは処理を予測してしまうのでコードを読まないよね。
なかなか気づかなかったよ。
627おねげえします:02/07/19 05:08
おおおおおおお
ソートがちゃんと高い純から!!!!!!
628610:02/07/19 05:09
しかしいまどきN88-BASICなのか。懐かしいな。
629おねげえします:02/07/19 05:10
なんかしょぼい情報の教科とっちゃったんです(文型です)>628
>>627
よかったよ。

>>628
昔を思い出すよ。(文法は忘れたが。)
631初心者:02/07/19 05:11
>623
やっぱりそうですよね。
もうちょっと手直しして出しますTT
いろいろとご教授ありがとうございました。
632610:02/07/19 05:11
>626 そうそう。FOR のとこだけ目を凝らして、
「バブルソートは完璧なんだよな……」と思い込み。
「(K)」と括弧までちゃんとあるのが余計にはまりやすい。
633おねげえします:02/07/19 05:12
もしかしてこれで完璧!!!?
本当にありがとうございました!!!

すごいっすね
これからプログラム勉強してみようかと重いマッス!
>>633
ぜひがんばってくだされ。
635610:02/07/19 05:13
>>初心者
数値の読み込みってどうやってるのよ?
scanf 系が使えれば何桁でも読めるよな。
getchar とかで読んでるの?
636おねげえします:02/07/19 05:14
すいませんこんな遅くまで。。
今日提出してきます(^^)ノ
でわ〜!!
637初心者:02/07/19 05:16
getcharで読んでます。
638610:02/07/19 05:20
>>初心者
scanf が使えない理由があるの?
(まだそこまで習ってない、とか)

数値を読んでるところのコードを貼ってみてください。
インデントのない BASIC スパゲッティはきつい。
>>637
さっきのおねげえしますさんみたいに、ソースを丸ごと上げてもらえると
アドバイスしやすいかと。まあ、量が多いとは思うが。
>>638
どうでもいいが、さっきのはループの脱出にGOTO *LOOPとしていたのが
つらかったよ。
641初心者:02/07/19 05:25
いえいえ、流石にもうこれ以上ご迷惑はかけられません。
scanf使ってやってみます。
>>641
がんばってください。
わし(610さんじゃないほう)はそろそろ寝させていただきます。
643610:02/07/19 05:35
>642 おやすみ。
>640 でもブロック IF がないからしょうがないんだろうね。
(まあこの程度なら1行にまとめてもよさそうだが)
>>初心者
うまく行ったら行ったで報告キボンヌ。
644640:02/07/19 05:37
寝る前に一言。
せめて、GOTO *LOOPENDにして欲しかったってことっす。
>>641
char c;
int num;
c = getchar();
num = c - '0';

で一桁の数字が得られるのは分かるよね?
あとはこれを繰り返せば何桁でもいける。
646578:02/07/19 05:37
>>641
おれ、今>>576のアルゴリズムを使って書いてみてるよ。
競争だ、頑張れ(w

にしても、久々にCのコードを書いたからつまずくつまずく(汗
647初心者:02/07/19 05:41
>>578
がんばるぞ〜w
648初心者:02/07/19 06:06
ううぅ・・・
何か文字を1文字ずつ認識しているよTT
649610:02/07/19 06:17
やっぱり、パーサだけでいいから貼ってくれた方が……
うぷろだは「おねげえします」のと同じところでもいいんじゃない?
650デフォルトの名無しさん:02/07/19 06:20
>>645
char c;→int c;
では?
>>650
ですた。つい間違える。
652576:02/07/19 06:48
>>647
できたYO!!
ちょい整形するから待っててね。
653576:02/07/19 06:58
#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;
654576:02/07/19 06:59
/*
 * スタック
 */
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);
}
655576:02/07/19 06:59
/* スタックに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--];
}
656576:02/07/19 06:59
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];
}
657576:02/07/19 07:00
/*
 * 入力解析して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;
}
658576:02/07/19 07:01
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;
}
659576:02/07/19 07:01
/*
 * 逆ポーランド計算機
 */
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;
  }
}
660576:02/07/19 07:02
/* 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;
}
661576:02/07/19 07:02
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;
}
662576:02/07/19 07:15
うひー、連続投稿制限に引っかかったよ。
でもこれで全部だ。

以上、なんだけど、長すぎたな、スマソ。
やり始めて3つ目くらいでまずいかな、と思い始めた。
すごくやばかった(汗
663初心者:02/07/19 07:17
ど、どうもです・・・
こんな時間までどうもありがとうございます。
自分のソースと比べて直してみます。
664610:02/07/19 07:19
576乙です。ほんとすごいYO!
665初心者:02/07/19 07:19
って直すどころじゃないのが現状でし・・・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;
}
667666:02/07/19 07:29

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;
}
668578:02/07/19 07:30
>>652-662は576じゃなくて578でした。
恩人の名を騙るなんてもうだめぽ。
669578:02/07/19 07:35
>>666
うわーん、おれよりずっとずっとずっとエレガントじゃないか。
完敗です。すばらしい。

精進します。
670666:02/07/19 07:37
解説
factorが数字の読み込みとカッコの処理(expressionを呼んでるだけ)
termが掛け算、割り算の処理
expressionが足し算、引き算の処理
上の方が優先度が高くなります。
下から上へ関数を呼び出してます。
factorでカッコのときexpressionを再帰呼び出し、
普通の数字のとき終端です。
671666:02/07/19 07:40
>>669
666はコンパイラの入門書みて書き移しただけだから。
672初心者:02/07/19 07:49
御二方すごすぎです〜
うらやましいな〜
何か秘訣みたいなものありますか?w
673578:02/07/19 07:49
>>671
ドラゴンブックでしょうか? まだ読んでないんですよ。
やっぱ読むべきだよなあ。

今年の目標はドラゴンブックとSICPだな。
674初心者:02/07/19 08:20
いや〜おかげさまで助かりました。
私も精進していつに日か・・・
              乱文悪しからず
それでは、皆様おやすみなさい
>>670
factor -> term or primary
term -> factor
じゃないかと思うんだが?
>>675
再起だ再起だw
677578:02/07/19 08:24
もう一つ作ったよ

#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;
}
>>677
chompって\rも消してくれない?
679▽・w・▽:02/07/19 08:38
みんなお疲れ様でした。
680578:02/07/19 08:44
>>678
stdinはデフォルトでテキストモードなんで、\rは考えなくていいはずです。
つまりDOSもUNIXも改行は\nでいける、はず。

>>679
いい子だ。頭をなでてあげよう。

おじさんは、もう眠いから寝るよ。
おやすみなさい。
681▽・w・▽:02/07/19 08:52
>>680
ありがと。おやすみなさい。
682テスト中:02/07/19 09:17
フィールド名
   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です。
お願いします。
>>682
何をどうしたいのよ
684テスト中:02/07/19 09:50
>>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
試験問題丸投げか、おめでてーな
686テスト中:02/07/19 10:06
終了しました。
お騒がせしました。
>>685
はい、そうですね。おめでたいです。
687デフォルトの名無しさん:02/07/19 11:06
C言語で電卓ってどうやって作るんですか?
GUIがなければ単純な文字列解析と、再帰が必要かな。
689675:02/07/19 13:06
>>676
いや、用語の話よ。
>> 687
こんなかんじかな?

#include "stdafx.h"
#include <process.h>

int main(int argc, char* argv[])
{
system( "C:\\Windows\\System32\\calc.exe" );

return 0;
}
>>690
作ってないし・・・
>>690
687はWindowsとは言ってないし、
なぜ、そのパスにcalc.exeがあると言い切れる?

などと、マジに突っ込んでみる
693▽・w・▽:02/07/19 23:16
今日は誰もいないんだね・・。
>>693
みんな昨日頑張りすぎて力尽きたのかも
695▽・w・▽:02/07/19 23:46
>>694そっかー。でもみんなやさしいよねー
696デフォルトの名無しさん:02/07/20 00:00
ガッコの選択授業でBACICとかなんだけどありですか?
>>696
それくらいできないとバカになるよ。
バカしか来ないだろ。
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);

・・・・

>>696
がっこっつーと、高校か?
>>700
中学だろ。
中学でBASICか・・・まあ、妥当っちゃあ妥当か。
>>702
なんか感じ悪い。
704702:02/07/20 00:30
>>703
すまん。言い方が悪かったようだ。
705702:02/07/20 00:32
俺も中学の頃からPG言語勉強してれば良かったなあと思ってみただけだよ。
706姫 川`∀´):02/07/20 00:34
なんか、かんじわるいよねぇ〜
>>706
>>702はいいなおしているんだから、煽らなくていいよ
▽・w・▽ が逆立ちしたザリガニに見える……鬱だ寝よう
709▽・w・▽:02/07/20 01:05
>>708
あ・・。
710△・M・△:02/07/20 01:09
△・M・△
711▽・w・▽:02/07/20 01:16
>>710のばか。犬だもん。
>>711
俺はスターウォーズエピソード1のボートレースの一場面に見える。
713△・M・△:02/07/20 01:45
ω
∋目∈
▽・w・▽

 ザリガニ
714▽・w・▽:02/07/20 01:53
>>713
・・。
でもなんか、少しかわいい・・。
>>702
BACICは難解だぞ。中学生には無理。漏れには全然分からん。
716702:02/07/20 13:17
>>715
中学生でも理解しやすい言語ってあるのかな?
COBOLは・・・無理か。そもそも英語もわからんだろうし(オレモナー)。
後はCASLぐらいか?
>>716
日本語LOGO
中学生なんかプログラムできなくてもぜんぜんOK
日本語文書入力がストレスなくできて、Web検索ができれば
200点だと思う。
BASICなんかやってへんなくせつけるな。といいたい。
>>718
BASICはプログラムとはなんぞや。
を覚えるにはいい言語だと思うよ。
問題はCの構造化がいかに便利かに気づけるかどうか。
720じじいの繰り言:02/07/20 14:31
大昔の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の後輩がどうなろうと、その立場はゆるぎないのだ!
729▼・w・▼:02/07/20 20:31
▽・w・▽ さん、上の紛らわしい名前使ってもいいですか?
しばらく・・・。
あ、あの頭の方、強く打たれましたか?
731▽`w´▽:02/07/21 00:21
じゃ、漏れは以下略
かおるタンが犬を調教するスレですか?
733 :02/07/21 04:18
夏休みの宿題出たんですが
この問題だけ解けませんでした。
誰かといてください。

式 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 ビット右シフト)
ですな
737  :02/07/21 05:47
>>734
何度見返しても間違いは見当たりませんでした。
>>735
>>736
ありがとうございました
よくわかりました。
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ワショーイ...
>>741
つぅかCも賢くなったねぇ・・・。
>>743
allocaみたいな処理をコンパイラが出来るようになったってことだね。
スタックの操作なんてコンパイラにやらせるのが筋だろうに、
今まで出来なかった方が不思議といえば不思議だ。

もっとも配列はautoでとるな、staticに取れ、
って言われてたちょっと前までの環境だと(DOS出身です)あってもいらねえ、って感じか。

あ、でも規格書その他読んでないからしらないんだけど、

size_t n = 64;
static char a[n];

みたいなことできちゃったりする? まさかね。
  γ⌒ヾミ   ⊂(・∀・)⊃
  《 ゚Д゚》 彡   / ̄ ̄ ̄ ̄ ̄
 ⊂|  |つ    < エアロスミス!!
   し'^J       \_____
ナンチャラ
>>744
ttp://seclan.dll.jp/c99d/c99d04.htm#dt19990719
なんか読むとわかりやすいです。
747デフォルトの名無しさん:02/07/21 16:05
月曜朝締め切りの宿題とかありそうだからageてみたりして。
748デフォルトの名無しさん:02/07/21 16:13
>>743
Cらしくなくなったと思う。
欠点が改善されると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アプリケーションで親ウィンドウを閉じようとした時に
普通に閉じようとしてもまず子ウィンドウが順番に閉じていって
全部しまりきると、親ウィンドウが閉じるようになってしまうのですが
一斉に閉じるようにするにはどうすればよろしいのでしょうか?
>>754
超高速なCPU使う。
756754:02/07/21 23:41
>>755
文章が分かりずらくて申し訳ありません。

親ウィンドウの閉じるをクリックすると子ウィンドウが一個ずつ、
つまり子ウィンドウが三個ある場合は三回クリックで子ウィンドウが閉じ
四回目で親ウィンドウが閉じるようになってしまいます。

どうかよろしくお願いします。
おもしろい仕様じゃないか。
758754:02/07/21 23:55
>>757
// 登録
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
// 何もしない
}

この様に何もしないように設定してもだめなのでC#ではデフォルトでは
このようになっているのだと思います。
何か自然に終了できるようにするためにはどうすればよろしいのでしょうか?
759:02/07/22 00:11
C#嫌いー
760デフォルト名無しさん:02/07/22 00:14
なにならOK?
どんなわけでそういうの?
>> 759
761:02/07/22 00:15
っつーかWINDOWZ消えてくれ
>>754
宿題じゃないだろうし、C#相談室の方がレスもらえるかもよ。
763754:02/07/22 00:29
>>762
確かにそちらの方がいいですね。どうもありがとうございます。
764???:02/07/22 01:24
>>87
C言語ですよね。
int printf(format,...);
関数構文自体が間違ってますよ。
765デフォルトの名無しさん:02/07/22 01:30
>>764
俺は87だが、どこが間違っているのかと小一時間問いつめたい。
まさかマジレス?
767766:02/07/22 01:31
>>764
たしかCは
"..." "..."
とすると文字列をくっつけたと思います。
>>768
正解。隣接する文字列は一つに結合される。
というわけで>>764はstring concatinationについて小一時間調べて来てくだちい。
s/concatination/concatenation/
漢字の書き取りが30ページあるんですけどここなら手伝ってもらえるんですか?
773デフォルトの名無しさん:02/07/23 00:22
漢字の書き取りが30ページあるんですけどここなら手伝ってもらえるんですか?
おながいしますよ〜。どうしてもまにあわないんです。
ジャポニカ学習帳で 3 ページ分くらいならやってあげるよ。>> 772
Concatenation(>>764, >>770);
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
781VBド素人: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
みんながんばれー
787dty:02/07/24 13:47
ざこ
788C言語:02/07/24 15:24
X(i+1) = a * X(i) + c

により、[0,1]の一様乱数を発生させるプログラムをつくれ。

a=32771
c=1234567891
X(0)=0
m=2^31
とする。

おねがいしまーす。
>>788
>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;
}

とかは?
791C言語:02/07/24 15:44
>>789
2の31乗ってことです。

>>790
おお〜、ちょと教科書みて検討してみます。ありがとうございます。
む〜

792C言語:02/07/24 15:52
seed ってなんなんだ〜
793790:02/07/24 15:54
乱数の種っす。
794C言語:02/07/24 15:57
教科書にのってない。鬱だ。

あと、m=0x80000000
ってなってますが、これは?

質問ばっかですいません。
2の31乗ってことです。(16進数)
796C言語:02/07/24 16:02
天才ですか?
普通です。
おまえら漫才してますか
ワラタヨ
799C言語:02/07/24 16:54
(a)M個(M=50000〜100000)の粒子を原点x=0に置く
(b)順に1つの粒子を選び、各々2分の1の確率で+1または-1だけ、そのx軸上の位置を移動させる。これをすべての粒子について行う。
(c)(b)を時間の1ステップ(Δt)をし、これを繰り返すことにより、粒子をランダムウォークさせる。

むずい・・・さっきの問題のつづきなんですが・・・
>>799
結果の出力方式は?
801C言語:02/07/24 17:13
時刻t=500Δt t=1000Δt t=2000Δt における粒子の空間分布関数f(x,t)をもとめ、xの関数をしてプロットする。
Cでプロットまでするの?それとも座標列を出力してgnuplotとかで
表示させてもいいの?
803C言語:02/07/24 17:24
むずすぎ、この課題。
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;を忘れてる。
807C言語:02/07/24 17:29
学校でならってないし、教科書にもかいてないからやりかたが全然わからないんですが。
本見てしらべたらいいんだろうけど、ほかの試験もあって、なかなか時間が…
808C言語:02/07/24 17:36
関数 'rand_nextint' は定義されていません。int 型の値を返す外部関数と見なします

がでた。チェックしよ
というか、>>790 が乱数生成関数は作ってるだろ。
810C言語:02/07/24 17:41
あほすぎw

コピーペしてはりつけますた。
811C言語:02/07/24 17:46
統計とるのはどうしたらいいのですか?
-tからtまでの 2t+1個のx座標に関して、その座標上にある点の数を数えたら?
コピーぺしたら、全角スペースを直してね。
ただの統計値なら、
1.まずはpairのx,yの最大・最小値を検索。
2.その値で配列を確保。
3.その配列で度数分布集計。
あとは平均取るなり分散取るなり標準偏差取るなり・・・
統計値だし5%棄却域を求めるのもいいかも。

プロットするならベジエ曲線でも作るか?
ベジェとか言い出したらC言語さんが吐血するし止めとき
>>815
グラフィックライブラリだけだと思うぞ。問題は。
817無責任な煽り:02/07/24 18:16
一応、向学心を期待して
ttp://www.math.sci.osaka-u.ac.jp/~sakane/jikkebb2b/bezier.pdf

実装はJavaのやつがネット上にごろごろ。
夏休みだし、吐血ぐらいなら問題なし(w
若い時はそれくらい頑張ったほうが身になるし。
>>816
点列からベジェにするのはちょっと大変じゃん
819C言語:02/07/24 18:32
うっ、全然意味がわからんw
うえーん、やべぇーよー
>>818
気にしないでよい。
どこまでできたの?
821C言語:02/07/24 18:41
関数をプロットするやりかたがわからないっす。
Gnuplotの使い方が・・・
プロット以外の部分はすべて解決したの?
>>819
大丈夫、おぢさんたちの軽い冗談だから。

ちなみにベジエ曲線ってのは任意の点を結んでソレっぽい曲線を計算して描く手法。
似たようなものとしてスプライン曲線もある。
お絵かきソフトで点を打っていって曲線を描くツールがあるでしょ。あれ。
824C言語:02/07/24 18:52
なるほど・・・ベジエ曲線はわかりますたw

でもプロットできねー。
ちょいがんばってみます。
うう。
Gnuplot でよさげなページがあった。
ttp://art.aees.kyushu-u.ac.jp/members/kawano/gnuplot/

今まで使ったこと無かったんだけど、
せっかく(?)の休みだし、俺も遊んでみようかな。
*で表示してみたけど。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");
}
827826:02/07/24 19:30

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;
}
とりあえず分かった。

Gnuplotはデータファイルとスクリプトを入力として色々な出力を生成するツールだ。
データファイルとスクリプトはテキスト、出力は例えばPostScriptとか。

今回のような統計値の場合、テキストファイルとして度数分布を書き出しておいて、
それをスクリプト(グラフ化の手順を記したファイル)によって出力を作成する。

出力は宿題の内容によるが、画像ファイル(PostScript,GIF,PNG)としてなら
ttp://art.aees.kyushu-u.ac.jp/members/kawano/gnuplot/postproc.html
を参考にするのがよさそう。

データファイルとスクリプトの文法は
ttp://www.linux.or.jp/JF/JFdocs/gnuplot.html
かな。
プロットするところまで、プログラムで書かないといけない?
テキストで吐き出して、Excelでグラフ作るとかでもありだったりする?
830デフォルトの名無しさん:02/07/25 12:42
>>829
ガイシュツ。
831C言語:02/07/25 15:00
昨日の続き・・・わかんねー。
>>831
この時間はあまりひとがいないよ。
833C言語:02/07/25 15:10
うう。バイトがあるからこの時間しかむりだー。
834C言語:02/07/25 15:53
平均二乗変位<x^2(t)> (< > はM個の粒子についての平均)を時間の関数としてプロットせよ。
tの大きいところでは<x^2(t)>はtに比例し、1次元の場合
<x^2(t)>=2Dt+const
で与えられる。
Dはいくらか?

>>799
のつづきです。 全然わからん・・うう
835C言語:02/07/25 15:57
t=0で原点を出発した粒子が、原点を中心とした半径lの球を初めて通過する時間τを初通過時間という。
>>799でえられた粒子の軌跡を用いて、τの分布関数P(τ)をl=10,20の場合について求めよ
>>C言語
それだけの量だと、提出は盆休み明けでしょう?
837C言語:02/07/25 16:02
明日までなんですが・・・w
やべー(・∀・)
昨日の夜中にこればよかったのに。
>>834は最小二乗法使うかねぇ?
839C言語:02/07/25 16:06
昨日の夜中はバイトでした。。
バイトせなやっていけないので(;´д`)

最小二乗法・・・むずー。
プログラムくめなさげw
840C言語:02/07/25 16:08
まずは799がんばろ。よっしゃ。
841C言語:02/07/25 16:36
ウヒ(゚д゚)できねー
842デフォルトの名無しさん:02/07/25 16:37
>>831
どこがわからんのだ?
843C言語:02/07/25 16:44
全部
844デフォルトの名無しさん:02/07/25 16:55
>>843
すまん。それじゃ答えようがない。
>>843
本人かどうか知らないが、やる気なさそうだ。
846C言語:02/07/25 17:01
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;
849848:02/07/25 17:18
ランダムで+1or-1させる。
x[i]がx座標を表す。
Mが粒子の個数
>>834
ある任意の時間内に生じた,粒子の位置の変位の確率分布がガウス分布に
なるとき,平均二乗変位は時間に比例します.
を確認しろという問題だね。
問題のランダムウォークは実際、二項分布になるはずだから、充分に回数が
大きければ正規分布つまりガウス分布を近似することになる。

その「平均二乗変位は時間に比例」の係数(角度)をグラフから求めろという
ことだよ。
だから横軸を時間、縦軸を平均二乗距離(各粒子の原点からの距離の平均
を取ってその二乗)としてプロットしてその角度を測れば良いわけだ。

・・・いや、本当に二項分布になるのか?
ちと自信ないが、藁を掴む気で信じてみるのも一興ではないか(w


>>835 は・・・また別に説明を考えてみる。
851デフォルトの名無しさん:02/07/25 17:29
結構むずいな・・・
852C言語:02/07/25 17:31
いやー、問題の背景とか、意図はわかるんですけどね、プロットの仕方とか、プログラムの組み方がわからないんです(笑)
でも、今はインターネットがあるんで調査もらくちんだ♪
854848:02/07/25 17:36
で、無視かいな
>>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言語です。
>>856
閾値でわける。
858デフォルトの名無しさん:02/07/25 17:47
jpegのデコードはめんどいので
libjpegでもつかってくれ
うお・・・しまった、1次元だったのね。
pairいらないじゃない。

>>848
for文の中の;が抜けてたりと、ネタかと思ってた・・・謝罪。
860858:02/07/25 17:47
>>858>>856へのレスね
861848:02/07/25 17:49
>>859
うお!ほんとだ鬱…

>for文の中の;が抜けてたりと
ということは、他にもネタっぽいところがあるんだろうが
どこだか教えていただけると助かるです
862856:02/07/25 17:55
一番処理しやすい画像の種類?(jpegとかgif)は何ですか?
.BMP
>>862
jpegはアメリカのForgentという会社が特許を主張しているので
未来はありません。
>856
濃淡画像でよいならPGM
>>864
世知辛い世の中ですな。
867あや:02/07/25 18:06
1行に書かれた2桁までの2つの数の四則演算の式の値
を求めることができるプログラムを作る。

課題でこれを配られただけです。
Cでつくってこいとのことだが自分はプログラムさっぱりなんで
わからないです。
Cについて知っているようでしたら教えてください。
分からないようでしたらそう返事ください。
おねがいします。
>>861
いや、こっちも二次元ランダムウォークだというとんでもない大ボケをかまして
いまして、「なんで1次元なんだ?あ、;も抜けてるし」という流れで無視してました。
869848:02/07/25 18:15
>>868
そうでしたか。
ちなみに俺のやってることって、
やっぱ間違ってるんでしょうか?
レスまったくつかないので。。。
#質問者じゃないのに質問してるし。。。
Cはじめて二ヶ月くらいです。
870デフォルトの名無しさん:02/07/25 18:16
>>867
女の名前でも、吊れないよヒプ
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;
}
880あや:02/07/25 18:29
なんかいろいろ参考になります。
ありがとうございます。
881デフォルトの名無しさん:02/07/25 18:33
>>880
どの変が参考になりましたか?
>>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;
}
883あや:02/07/25 18:36
scanf関数の使い方を調べると良いよ。

これを調べればなんとかなるんじゃないんですか??
884デフォルトの名無しさん:02/07/25 18:43
>>883
たしかにそうかも。
でも、こんなとこでつまずいてるようじゃ、
scanfの使い方わかっても、そのさきに進まないだろう。










それより、おじさんとCしようじゃないか、ハァハァ
885あや:02/07/25 18:45
それはちょっと・・・・・
見本のプログラムとかはおしえてはもらえないでしょうか?
886デフォルトの名無しさん:02/07/25 18:45
>>885
マルチ氏ね
>>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 )
889あや:02/07/25 19:00
>>887
calc.exe 2 / 3
calc.exe 100 / 0
とかはどうすればいいですか?
教えてくれたらCしてあげます
890デフォルトの名無しさん:02/07/25 19:07
電卓なら
>>666
にあったが・・・
891000:02/07/25 19:14
UMLがわかりません・・・
教えてもらえませんか?
ねっしー
UMA
894000:02/07/25 19:41
ムリっすっか?
>>894
専用のスレに行きたまえ
896000:02/07/25 19:48
すいません・・・
どこにあるんですか?
897デフォルトの名無しさん:02/07/25 19:49
HTMLがわかりません・・・
教えてもらえませんか?
898神へ:02/07/25 20:10
900デフォルトの名無しさん:02/07/25 20:18
>>899
糞ページ薦めないでください・・・・
901▽・w・▽:02/07/25 20:29
みんな宿題がんばれ!
902898:02/07/25 20:33
おねがいします!!
>897
http://members.jcom.home.ne.jp/pctips/
笑い。

ところでぼちぼち次スレの女の子を攫ってこなければ
いけないとおもうのだがどうか。
>898
>>1
905ニーチェ:02/07/25 20:44
>898
ネ申 は 死 ん だ
>>898
京都コンピュータ学院に言いつけていいですか?
>>903
もう無理やり女の子をさらってこなくてもいいんじゃない?

>>898
1.2. クラスGakuseiをJava風の言語で表せ。
public class Gakusei {
String namae;
int yuugaku_year;
public void sotsugyo(void) {}
public int getGakunen(void) {]
}

あとは無理。図なんてかけない。
>>908
nが抜けてるので減点です。
910908:02/07/25 21:21
public int getGakunen(void) {]
が}のかわりに]になってるのでさらに減点。
最近の女の子、非協力的よね。
えれなの祖母ヨシエ(83)です
このスレ限りで人生ともおさらばになりそうですが
どうかよろしくおねがいします
>>912
このスレあと残り90切ってるよ
えれなタン・・・ハァハァ


・・・ムリ
ぃっτょι
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ ヨシエか
  ∪∪
えれなタンは若いよ
917898:02/07/26 00:12
>>908さん
ありがとうございます!!
ヨシエの妹のヨモギ(81)です
この(略)おさらば(略)ですが
どうか(…ゴフッ)よろしく(略)
アンタも
ぃっτょι
920あや:02/07/26 00:41
偽者が多いんですね・・・
どーもありがとうございました。
参考になります。
次はこいつでどうよ? > ▽・w・▽
>>921
いいかも。
923デフォルトの名無しさん:02/07/26 23:31
暇だ・・・宿題出してくれ
プログラム以外の宿題でもいいれすか?
925デフォルトの名無しさん:02/07/26 23:43
>>924
OK!
でも絵とか工作は不可
ライブラリとかマシンとかサーバとかドメインとかにエロゲのキャラ名あてる感覚が イ ヤ だ。
>>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){

}
933932:02/07/27 00:32
全部書く前に、ぼたんおしちゃった。スマソ
934デフォルトの名無しさん:02/07/27 00:32
>>932
えらぁ
>>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プログラマのためのアルゴリズムとデータ構造
近藤嘉雪 著 ソフトバンク パブリッシング

を買ってこい
940930:02/07/27 00:37
>>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
947930:02/07/27 00:49
>>944>>946
ありがd・・・。
こんなになるのか・・・。
ぜんぜんわけわからん。
>>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みたいにし、その待避した値を返すのが一番いい?
964963:02/07/27 01:44
それとも添え字を使った方がいい?
>>962
キャストするまで。

void (*mystrcat)(char *s1, const char *s2) = (void (*)(char *, const char*))strcat;
>>951
そりゃ正規表現じゃなくてワイルドカードだな。

それとiの初期化。
967デフォルトの名無しさん:02/07/27 01:54
http://users.powernet.co.uk/eton/kandr2/krx503.html
こんなの拾ったよ。K&Rの解答みたいだけど。
956がいいみたい。954は""な\0だけの文字列でダメになるよ。
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)をしらなくても
自分で考えつければプログラムできる。
973ボケ倒してみる:02/07/27 04:37
/*
問題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);
977975=976:02/07/27 05:30
これ動くかな?
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言語」片手に努力しましたがどうにもならず書き込みしました
誰か代わりに作っては頂けないでしょうか。
コラッツの予想てなんじゃ?
980978:02/07/27 07:03
ある正の整数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
>>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
983978:02/07/27 07:10
ありがとうございます
ただp(n)とかその最大値とかをどう扱ったらいいんでしょう。
>>983
p(n)の最大値は>>982のプログラムでprintfしてるよ。
985978:02/07/27 07:23
本当にありがとうございました
本当に助かりました
986982:02/07/27 07:25
>>985
そのものずばりのコードを書いたのはよくなかったかも。
将来プログラマになるつもりがあるのなら、
よくコードを読んで何をやってるのか理解してくれ。
難しいことは一切やってないから。
987 :02/07/27 09:46
>>986
そのものずばりのつもりだったのか。
1 < n <= 10000 ではないし、nも求めてないが。
>>982
オーバーフローチェックもやった方がいいかも。
989デフォルトの名無しさん:02/07/27 10:54
>>973
再帰マニアですか?
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
キャッシュミスがどうとかいうんなら、
ソース、コンパイルオプション、実行環境のスペック等を教えてもらわんと。
995 :02/07/27 16:14
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);
}
>>997
再帰好きだね
999Rina ◆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;
}

全角スペース→半角スペースに変えてください.
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。