1 :
お姉さん :
2000/10/20(金) 18:02 プログラミングの宿題で行き詰まったら私が相談に乗りましょう。 ただし、お姉さんを5分以上考え込ませる難解なものは受け付けません。 初心者のみお姉さんは歓迎します。
ハァハァ… (*´Д`)
初心者です、教えてください。 今日のプログラミングの課題で「おまんこをプログラミングせよ」 というのがありました。しかし僕は厨房なのでおまんこを見たこと もありません。おまんこを見せてくれませんか? また発展問題として「セクースをプログラミングせよ」というのも 出ました。発展問題を解くと成績が上がるのでぜひ協力してもらい たいのですが。セクースの相手になってくれますか?
4 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 19:24
内容もすげー
ヨガー
9 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 21:00
ブラスト
10 :
>7 :2000/10/20(金) 22:22
すげー
11 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 22:44
32ビットアプリ32ビットOSと 16びっと以下同じ 64ビット ってどうちがうんですか?
12 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 00:22
13 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 00:38
14 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 00:43
16 :
お姉さん :2000/10/21(土) 04:36
>11 知りません。ごめんね。
18 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 05:21
ハノイの塔ってどうやってとくんですか?
マトリクス並みのAIの作り方教えてください。
20 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 06:05
マジレス希望です。 C言語の関数に"strncpy"ってありますが、 この関数を自分で作れという問題がでました。 教えてください。
>>20 char* strncpy(char* dest , char* src , LONG length)
{
int i;
for(i=0 ; i<length ; i++) dest[i]=src[i];
return dest;
}
char* strncpy(char* dest , char* src , LONG length)
{
memcpy(dest , src , length);
return dest;
}
23 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 06:32
char* strncpy(char* d,char* s,int c) { for(;c!=0 && *s!='\0';c--) *d++=*s++; } もっと短くならんかなぁ...
char* いらねぇ void(;_;
25 :
お姉さん :2000/10/21(土) 08:53
みんな、協力ありがと! 20のような初心者歓迎です。
26 :
お姉さん :2000/10/21(土) 08:54
>18 ネット上にソースのってるでしょ? 自分で探そう。見つからなかったら また来てね
27 :
お姉さん :2000/10/21(土) 08:55
>19 AIについてはlispを少し知ってるくらいなので 知りません。ごめんね。
ヤクニタタネー
>27 ぴか虫なみの低脳。
同意>28&29
lisp も知らん。
char* strncpy(char* d,char* s,int c){ while( (c--) && (*d++=*s++) ); }
char *strncpy(char * dst, const char * src, size_t count) { char *start = dst; while (count && (*dst++ = *src++)) count--; if (count) while (--count) *dst++ = '\0'; return(start); }
34 :
18 :2000/10/21(土) 15:03
みつかんないですー。
35 :
お姉さん :2000/10/21(土) 16:13
>18 yahoo.comでhanoi.cで検索してください。 >31 LISP知らないなら私の勝ちじゃん。
4人も書いていながら正しいのは33だけってのもすげえな。 もっとも33はVC++のcrtのソースあたりからの抜粋に見えるが。 以下はFreeBSDのSTRCPY(3)からの抜粋 The strncpy() copies not more than len characters into dst, appending `\0' characters if src is less than len characters long, and not termi- nating dst if src is more than len characters long.
37 :
お姉さん :2000/10/21(土) 17:55
なんで32と33はchar型なのかなあ? voidでいいんじゃない?
38 :
32 :2000/10/21(土) 19:20
いや、strncpyなんだからcharの方が自然でしょ。
39 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 19:59
残ったバイトを0フィルする必要ってあるの?
40 :
20 :2000/10/21(土) 20:04
みなさん真面目に答えてくれてありがとうです。 本当にネタではないです。 みなさんはプログラムを簡単にされてますが、 strncpyはn個の文字だけ複写します。文字列s2がnより短い場合は、 s1の後ろをn文字までNULLで埋めます。s2の長さがn以上であればNULLで終了する 結果は出ません。s1を返します。 という条件で char *strncpy(char *,char *,int n); main() { char a[512]; strncpy(a,"itteyosi",4); printf("%s",a); } char *strncpy(char *s1,char *s2,int n) { int x; char *p; p = s1; } 肝心な関数の部分が分かりません。 2ちゃんの頭脳よHELP!!!
41 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 20:10
こんだけたくさんヒントやサンプルが出てるのにまだわからないの? キミはぜんぜんやる気ないのかな?
>>37 「voidでいい」もなにも、strncpyは「ANSI/ISO C標準ライブラリ関数」
なんだよ。
>>40 目が悪いのか?
それと、strncpyの仕様を良くみれば分かることだが、通常は
strncpyの後で、文字列をNULターミネートしてやる必要がある。
strncpy(a, "itteyosi", 4);
の後では、a[0]からa[3]には'i', 't', 't', 'e'が入り、a[4]以降は全く
変更されない。この場合はaは自動変数だから、この部分の内容は不定。
従って、これを次の行でprintfに渡した結果も同様に不定だ。
43 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 21:48
VC++です 読み込んだファイルのバイナリデータをメッセージボックスかなにかで表示する ようはバイナリエディタの表示だけできるようなものが作りたいのですが アドバイスお願いします。できればサンプルのようなモノがあれば紹介してほしいです。 ファイルを読み込む部分まではできました。表示する部分とユウのが見当もつかない状態です。
44 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 22:20
ファイル読み出しのような処理ができるのに バイナリ⇒16進文字の変換ができないのか? 近頃の初心者はホント謎だな‥ sprintfのヘルプ読め!
>43 コンソールアプリにするなら44と同意見。 ウィンドウに表示したいならとりあえずMFCかSDKか教えてくれ。
46 :
43 :2000/10/22(日) 00:23
バイナリ⇒16進はできます。sprintfのヘルプも何回も見ました。 MFCです。何か部分部分はわかるのだけれどいざ組んでみると つまずいてしまうのです。 具体例をあげてもらえると嬉しいです。
16進数に変換できないんじゃなくて ウィンドウに表示する事が出来ないのネ・・ 質問は状況をわかりやすく!
48 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 00:59
49 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 01:07
1.バイナリ⇒16進とsprintfを使って表示したい 1行分の内容をひとつの文字列に作れますか? 3.文字列を、画面(ウィンドウ)に表示できますか? 2.その方法を繰り返しファイル全体に適用できますか? というふうにステップごとに解決しないと 自分がどこでつまづいてるのかがわからないの ではないかな?
50 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 01:34
Win32で、ある特定のプロセスだけGetVersionExの 値を本来のOSバージョンとは違う値を返すようにしたいんですができますか? ちなみに、その対象となるプロセスのソースコードはありません。 たとえば osver 4.0 foobar.exe みたいにして、foobar.exeで呼ばれる GetVersionExとGetVersionのmajorとminorを それぞれ、4と0に指定したいってことなんだけど…。 kernel32.dllにはいっちゃってるしやっぱり無理?
51 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 01:47
バイブとハイブって親戚かなにかですか? 教えてください。
バブーも合わせて三兄弟です。
簡単に・・・ CStirng TempStr ; TempStr.Format("変数A:%08X\n変数B:%08X",a,b) ; AfxMessageBox(TempStr) ;
ハブも合わせてななかんおうです
55 :
お姉さん :2000/10/22(日) 05:08
>40 これで出来ると思うけど。。解決しちゃってたらごめんね。#include<stdio.h> void strncpy(char *,char *,int n); main() { char a[512]; strncpy(a,"itteyosi",4); printf("%s",a); } void strncpy(char *s1,char *s2,int n) { int i; for(i=0;i<n;i++) s1[i]= s2[i]; s1[i]='\0'; }
>55のお姉さん ネタだろ?頼むから、ネタだといってくれ。お願いだ〜。
57 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 06:12
これが本物の実装に最も近いのでは? void strncpy(char *s1, const char *s2, const size_t n) { size_t count = n; while (n--) *s1++ = *s2++; }
58 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 06:15
違う違う。こうだ。 char *strncpy(char *s1, const char *s2, const size_t n) { char *r = s1; size_t count = n; while (count--) { if (*s2) { *s1++ = *s2++; } else { *s1++ = '\0'; } } return r; }
59 :
ブチ :2000/10/22(日) 06:17
>>40 ,55
42 で言われてますが、変数 a は512バイトのメモリを確保はしたものの内容が不定です。
文字列としてデータを扱うためには文字列の最後に NULL ('\0')を
置くことでプログラムはそこが最後だと認識します。
内容が空の場合は 先頭が NULL なわけですね。
それを踏まえると a は配列の先頭にまず NULL を置くことが義務になります。
そうしないとNULL が 512 バイトの中になければ
実装されている strncpy であっても確保していないメモリ領域への上書き(メモリ破壊ももありえます。
一般的には、'\0'をNULLと呼ぶのは誤り
61 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 06:32
本当はこうだったりして。 char *strncpy(char *s1, const char *s2, size_t n) { memcpy(s1, s2, n); return s1; }
62 :
お姉さん :2000/10/22(日) 06:37
>56 ネタじゃないよ。マジだよ。
63 :
お姉さん :2000/10/22(日) 06:40
なにがいけないのよう。
>>63 itteyosi の部分じゃないの?
プログラムはあってんじゃない?
65 :
お姉さん :2000/10/22(日) 07:18
mainの部分は私が書いたんじゃないもん。
66 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 08:21
67 :
いちろうくん :2000/10/22(日) 09:23
>>55 おねいさん、ちがうよ。
n=1で呼ばれたときに、S1に何文字書き込まれるか考えてみ。
68 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 09:50
strcpy を定義して、ヘッダとして呼び出すのにはどうしたらいいんでしょうか? つまり、他のファイルからの(オリジナル)関数呼び出し参照方法 はどうすればいいのでしょう? hoge.c aaa.h <これ? でhoge.cの中身のヘッダに #include<aaa.h> とかいて、呼び出せばいいという認識でよろしいいのでしょうか?
69 :
お姉さん :2000/10/22(日) 10:09
>>68 #include"aaa.h"です。
>>いちろうくん
一文字プラス\0で二文字。だめ?
70 :
お姉さん :2000/10/22(日) 10:10
ところで質問した人は解決したの? どの案を採用したの?
71 :
20=40 :2000/10/22(日) 11:57
みなさんありがとうございまます。 2ちゃんでまで説教されるとは思わなかったですが、 41さん42さんに言われた通り、ちょっと教えて君(死語)になってました。 申し訳ない・・・。 55さん,57さん,58さん方のソースは自分でも出来ました。 自分が出したいプログラムは基礎の丁寧なものなので、 皆さんにとってはバカらしいものかもしれませんが、 ”文字列s2がnより短い場合は、 s1の後ろをn文字までNULLで埋めます。 s2の長さがn以上であればNULLで終了する 結果は出ません。” の部分が解決していません。 プログラムは人それぞれなので、一概に正解とかはないと思いますが、 もう少し自分で考えてみます。 大変参考になりました。 時間ある人がいたら、別ソースも見せてください。
72 :
さらしあげ :2000/10/22(日) 11:58
>お姉さん@ぴか虫レヴェル
>>55 void strncpy(char *s1,char *s2,int n)
{
int i;
for(i=0;i<n;i++)
s1[i]= s2[i];
/* おいおいせっかくコピーしたものを '\0' で上書きかい */
s1[i]='\0';
}
/* n = 3 のとき、 s1[0]=='\0' , s1[1]=='\0' , s1[2]=='\0' */
73 :
お姉さん :2000/10/22(日) 12:34
>>72 n=3のとき
for(i=0;<n;i++)
s1[i]=s2[i];
このループを抜ける時点でs1[0]=i s1[1]=t s1[2]=t
s[i]='\0'
ここでiは一インクリメントされているので4,
s[4]='\0'
結果s1=itt\0
何がいけないのよ。
s[i]='\0'の部分はループに入ってないかんね?
74 :
お姉さん :2000/10/22(日) 12:37
間違った、iは一つインクリメントされてるので3. s[3]=\0のまちがいね。
75 :
72>お姉さま :2000/10/22(日) 12:47
失礼。インデントが無いんで見間違えた。自虐あげ。
77 :
あなたのうしろに名無しさんが・・・ :2000/10/22(日) 13:23
>お姉さん@ぴか虫レヴェル>>>>>>72>みじんこ
ここまできて33以外正解がないとは…。なんだかなぁ。 33以上の簡潔さには、なかなかなりようがないからしょうがないが。
79 :
お姉さん :2000/10/22(日) 14:02
>>77 あはは。
私の前に何が来るのかが問題だけど。
>>78 出されたものほとんどが動くようですが、質問者のいう条件をすべて満たしてないよう
です。
80 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 14:06
>お姉さん あなたのもね。 これじゃ駄目? #include<stdio.h> void strncpy(char *s1,char *s2,int n) { int i; for(i=0;i<n,s2[i]!='\0';i++){ s1[i]=s2[i]; } for(;i<n;i++){ s1[i]='\0'; } return; } int main(void){ int i; char s1[] = "abcdef"; char s2[] = "xyz"; strncpy(s1,s2,5); for(i=0;i<7;i++){ printf("%d : %c : %d\n",i,s1[i],s1[i]); } return 0; }
81 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 14:09
まんこ見せてください
82 :
お姉さん :2000/10/22(日) 14:21
>>80 これならばnがs2よりも大きかった場合に対応しますね。
あと空白の部分を\0で埋めますね。
これで質問者の意図にはあってるんでしょうか。
84 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 14:35
>>71 「NULLで終了する 結果は出ません」←これ意味不明だが…
char *strncpy ( char *s1, char *s2, size_t n )
{
char *r = s1;
while( n-- && (*s1++ = ((*s2)?(*s2++):('\0'))) );
return r;
}
>>78 予想通りだが、33はVC++のstrncpy実装そのものだった。
しいて言えば、手書きのコードならば0埋めにはmemsetを使うのが普通だろう。
>>82 良く見ろ。戻り値がvoidだ。仮引数もANSI C的には正しくないがな。
それにしても、33という正解が既に出ていながらなぜここまで引っ張る?
86 :
84訂正 :2000/10/22(日) 14:41
char *strncpy ( char *s1, char *s2, size_t n ) { char *r = s1; while( n-- ) *s1++ = ((*s2)?(*s2++):('\0'))); return r; }
87 :
お姉さん :2000/10/22(日) 14:54
>>85 何で戻り値がvoidじゃいけないのか教えてください。 多分他に質問が無いからじゃないですか・・・?<なぜ引っ張る
88 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 15:17
>>85 (=36=42)
あんたこそ要求されている仕様を良く見てくれ。
33のプログラムは、string.hのstrncpyとは働きが同じだけど、
いま要求されてる仕様(40や71)は満たしてない。
仕様変更には迅速に対応しませう。
ついでにいえば、宿題の答としては返り値のchar *やら
引数のconstやらsize_tやら使わない方が
いかにも自分で考えて作ったみたいでいいでしょ?(<中途半端に親切)
>>86 括弧多いよ。
89 :
80 :2000/10/22(日) 15:18
ゴメン、89=80ね。
90 :
80 :2000/10/22(日) 15:20
又間違った。 80=88=89=90です。 欝だ氏能。
91 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 15:36
import java.awt.*; import java.awt.event.*; import java.applet.Applet; class CardPanel extends Panel { ActionListener listener; Panel create(LayoutManager layout) { Button b = null; Panel p = new Panel(); p.setLayout(layout); b = new Button("one"); b.addActionListener(listener); p.add("North", b); b = new Button("two"); b.addActionListener(listener); p.add("West", b); b = new Button("three"); b.addActionListener(listener); p.add("South", b); b = new Button("four"); b.addActionListener(listener); p.add("East", b); b = new Button("five"); b.addActionListener(listener); p.add("Center", b); b = new Button("six"); b.addActionListener(listener); p.add("Center", b); return p; } CardPanel(ActionListener actionListener) { listener = actionListener; setLayout(new CardLayout()); add("one", create(new FlowLayout())); add("two", create(new BorderLayout())); add("three", create(new GridLayout(2, 2))); add("four", create(new BorderLayout(10, 10))); add("five", create(new FlowLayout(FlowLayout.LEFT, 10, 10))); add("six", create(new GridLayout(2, 2, 10, 10))); } public Dimension getPreferredSize() { return new Dimension(200, 100); } } public class CardTest extends Applet implements ActionListener, ItemListener { CardPanel cards; public CardTest() { setLayout(new BorderLayout()); add("Center", cards = new CardPanel(this)); Panel p = new Panel(); p.setLayout(new FlowLayout()); add("South", p); Button b = new Button("first"); b.addActionListener(this); p.add(b); b = new Button("next"); b.addActionListener(this); p.add(b); b = new Button("previous"); b.addActionListener(this); p.add(b); b = new Button("last"); b.addActionListener(this); p.add(b); Choice c = new Choice(); c.addItem("one"); c.addItem("two"); c.addItem("three"); c.addItem("four"); c.addItem("five"); c.addItem("six"); c.addItemListener(this); p.add(c); } public void itemStateChanged(ItemEvent e) { ((CardLayout)cards.getLayout()).show(cards, (String)(e.getItem())); } public void actionPerformed(ActionEvent e) { String arg = e.getActionCommand(); if ("first".equals(arg)) { ((CardLayout)cards.getLayout()).first(cards); } else if ("next".equals(arg)) { ((CardLayout)cards.getLayout()).next(cards); } else if ("previous".equals(arg)) { ((CardLayout)cards.getLayout()).previous(cards); } else if ("last".equals(arg)) { ((CardLayout)cards.getLayout()).last(cards); } else { ((CardLayout)cards.getLayout()).show(cards,(String)arg); } } public static void main(String args[]) { Frame f = new Frame("CardTest"); CardTest cardTest = new CardTest(); cardTest.init(); cardTest.start(); f.add("Center", cardTest); f.setSize(300, 300); f.show(); } public String getAppletInfo() { return "Demonstrates the different types of layout managers."; } }
92 :
85 :2000/10/22(日) 17:01
>> 88 で? > strncpyはn個の文字だけ複写します。文字列s2がnより短い場合は、 > s1の後ろをn文字までNULLで埋めます。s2の長さがn以上であればNULLで終了する > 結果は出ません。s1を返します。 「NULLで終了する結果は出ません」が意味不明だが、これは善意に解釈して 「NULターミネートされません」という意味だろう。 だとすればこれはANSI/ISO標準のstrncpyの仕様そのものだ。 最後の「s1を返します」をあんたはちゃんと見たのか?
なんか車輪の再発明(改悪版)を一生懸命やってるやつがいるなぁ。 仕様の理解のために、自分で実装してみるのは、学習過程で有効なことだが、 未熟なくせに偉そうにしてる、脳味噌空っぽ君が一人二人まざってるよ。 こういう害虫が、世の中悪くするんだよねえ。
94 :
20=40 :2000/10/22(日) 17:18
すいません。 >「NULLで終了する結果は出ません」 というのは、文字列の最後にNULLを入れないとゆう意味です。
あたらしい質問待ち。
96 :
あなたのうしろに名無しさんが・・・ :2000/10/22(日) 18:43
あたらしいひつもん… 尾根遺産はおいくつですか。 彼氏いますか。
97 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 18:44
お姉さん教えてください SQLを使ってある表中の行をコピーしたいのですが INSERT INTO 表 VALUES((SELECT * FROM 表 WHERE 列=値)); でできますか? そもそも行のコピーってSQLでできるんでしょうか?
>>97 なんでいきなりSQL。。(^_^;)
この形式だとSELECT以下の条件を満たす値を含む行を複数行
他の表からコピーできると思います。
行のコピーはSQLのオペレーションの中でも最重要だと思いますが。
99 :
お姉さん :2000/10/22(日) 19:30
最重要ってわけでもないか。訂正。割と大切。
100 :
お姉さん :2000/10/22(日) 19:36
SELECT以下で特定のコラムを指定することもできます。 joinを使って二つ以上の表から値を持ってくることも出来ます。 今日はここまで。
101 :
おやじ :2000/10/22(日) 19:59
>>97 SQLでVALUES() 内に副問い合わせってかけたっけ?
コピーするときってVALUESつかったっけ?
あれれ?
忘れた
102 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 23:05
Insert into Table1 select * from Table2 where... 俺はValues使わないでこうやってるよ。 97の場合に動くかどうかは知らない。
103 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 23:15
A表の行の値をA表にInsertするときは、 Insert into Table1 select * form Table1 where 列=値; でOK?
104 :
80 :2000/10/23(月) 00:57
>>85 なんか今更ですが
今、ここを見てちょっと考えたら
貴方の言ってることが全面的に正しいとわかりました。
なんで標準のstrncpyで確かめなかったんだろう?>自分
人にちゃんと読めとか言う資格ないです。
高圧的な態度になったのも何か頭が壊れていたようです。
気を害された85の人申し訳ありませんでした。
とにかく謝っておきたくて。
105 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 01:05
>ANSI/ISO標準のstrncpyの仕様 には >s1の後ろをn文字までNULLで埋めます は、ないと思うんだけども‥
106 :
>80 :2000/10/23(月) 01:10
> for(i=0;i<n,s2[i]!='\0';i++){ カンマ演算子じゃダメだろ for(i=0;i<n&&s2[i]!='\0';i++){ こうしたかったのか?
107 :
いちろうくん :2000/10/23(月) 01:15
ああ、流れがはやいや‥ おねいさんごめんなさい、おへんじおそくなっちゃいました。 strncpyに1文字コピーしてねって頼んだのに 2文字分書き込まれちゃうのはいけないとおもいます。 いまさらな気もするけども‥
108 :
お姉さん :2000/10/23(月) 07:45
>103 >Insert into Table1 select * form Table1 where 列=値; >でOK? 最初のtable1がコピーされる方で次のがコピーする方ですね。 form じゃなくてfrom です。列じゃなくて行=値じゃないですか? >いちろうくん nullターミネーターを入れて二文字です。
109 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 12:25
>>105 MSDNから引用
> string2 の最初の count 文字数を string1 にコピーしてから string1 を返し
> ます。count がstring2 の長さ以下の場合は、コピーした文字列に自動的に
> NULL 文字 (\0) を付けません。count が string2 より長い場合は、string1
> には count の長さまで NULL 文字が埋め込まれます。コピー元の文字列とコピー
> 先の文字列が重なり合っている場合の strncpy 関数の動作は未定義です。
これが、ANSI/ISO標準に完全に準拠してるかどうかはわからないが、
> s1の後ろをn文字までNULLで埋めます
に相当する記述は少なくともここにはある。
110 :
いちろうくん :2000/10/23(月) 13:03
だからおねいさん、2文字かきこんじゃいけないんだよぉ
111 :
お姉さん :2000/10/23(月) 15:09
うーん。 そこら辺は上に何個か出ているstrncpyの仕様を見て判断してくだ さいな。。(脱落)
112 :
じろうくん :2000/10/23(月) 15:26
逃げちゃダメだよぅ、おねいさん。 ‥‥‥と思ったけど、5分以上考え込む問題みたいだから、 おねいさん的には逃げてもいいんだね。
113 :
お姉さん :2000/10/23(月) 16:12
...超初心者のみ歓迎。
114 :
じろうくん :2000/10/23(月) 16:40
弱いよ。弱すぎるよ、おねいさん。 あと、超初心者と言っても、低レベルな質問をするとは 限らないんだけどそれでもいいのかい、おねいさん?
115 :
初心者 :2000/10/23(月) 16:45
Cでのプログラミングをはじめて1ヶ月なんですが、 逆行列を計算するプログラムを作るという宿題が出ました。 手始めに4×4行列の逆行列を作ることが宿題です。 おねいさんお願いします。
116 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 16:56
>>115 逆行列ってなんだっけ?
何となく、高校の時に習ったと思うけど、記憶が曖昧なんでよくわからん。
あとは、行列をどのように表現するかによって実現方法が変わりそうな気がする。
まあ、普通は2次元配列を使うんだろう、この場合。
117 :
お姉さん :2000/10/23(月) 17:47
線形代数で出てくるあれかな? 表を対角線上にひっくり返すやつ?
118 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 17:47
119 :
いちろうくん :2000/10/23(月) 17:55
おねいさんたら、もう。こまったなぁ‥ どうしようか? じろうくん。
120 :
お姉さん :2000/10/23(月) 18:13
>118 思っていたのと全然違った(汗) 二行二列なら簡単だけどそれ以上だと 拡大して面倒くさい操作をするんだったね。 ・・・・今日はこれにて退散。
121 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 18:17
スパース行列だったら鬱になりそう(-_-;
122 :
じろうくん :2000/10/23(月) 20:17
>>115 ダメだよおにいさん。
おねいさん、あんまり頭良くないから、そんな難しい
問題訊いたら頭が爆発しちゃうよ。
123 :
お助け君。 :2000/10/23(月) 20:31
奥村のアルゴリム辞典に詳しく載ってるよ。 ちなみに逆行列 2393|1000 3432|0100 3322|0010 2344|0001 ↓ 1000| 0100| ここが 0010| 解答 0001| 確か大学1年くらいの問題。
124 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 23:21
108>お姉さんありがとう! >>Insert into Table1 select * form Table1 where 列=値; ? >>でOK? >最初のtable1がコピーされる方で次のがコピーする方ですね。 >form じゃなくてfrom です。列じゃなくて行=値じゃないですか? 行=値でした ごめんでしゅ ORACLEで実際に打ってためしてみましゅ
125 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 23:35
C言語を習い初めて少しなのですが、 三角形の辺の長さabcをキーボードから入力し、 入力された値で三角形が作れるかどうかを判断する プログラムを作れ。 という宿題が出ました。 どうか教えてください。
>125 それの どの部分がわからないのかおしえてください。
ぶはははは! 確かにその通り。>126
三角形の三辺の条件公式?ってどんなのだっけ? 125じゃないよ!
129 :
125 :2000/10/23(月) 23:56
128さんのいうとおり三角形の公式がどうも・・・ ifを使うようなのですがいまいち・・・
abs(a-b) < c < a+b こうかな?
if( a+b>c && b+c>a && c+a>b )
>>129 公式って教科書に載ってないのか?
C^2=A^2+B^2 みたいなやつ。(これは直角三角形だけど)
三角比を使用して求める公式(数式)あるだろ?
それを教えたらプログラムしてやる。
そんなもん小学生でもわかるぞ
>125 A1「三角形の任意の2辺の長さの合計は他の一辺の長さより大きい」 A2「if(条件)文; //条件が非0ならば文が実行される」 これでバッチリだよね。
125
お姉さんへ。 ボクは元ネタを知らないので、教えてください。 125の人が大阪電気通信大学なのですか? それとも、 125の学校を調べようとした人が大阪電気通信大学なのですか?
後者だとは思うけど。
139 :
名無しさん@お腹いっぱい。 :2000/10/24(火) 06:32
OZAKIが尾崎であるかぎり、勝ちつづけなきゃならない 正しいものは何なのか それがこの胸に解るまで 僕は街にのまれて 少し心許しながら この冷たい街の風に歌い続けてる
142 :
ひよこ名無しに逝け :2000/10/24(火) 10:50
削除依頼にでてるよ。 問題出した本人だってさ。 実名UPきぼんぬ。
一応ここプログラム技術板 なんだからほっといてやれよ
管理人さんの方にも削除願い出しました。 スイマセンでした。こちらの問題はすべて解決しました。 みなさんご迷惑おかけしてスイマセンでした。
プログラムが一発で動いた〜!! わーい!わーい!
146 :
名無しさん@お腹いっぱい。 :2000/10/24(火) 15:23
まんこ見せてください
時かっ串tろ言えk>お姉さん
陰線処理の方法としてmax-min法が主流だとは思いますが その他のやり方って何かあるんでしょうか? ご存じの方、ぜひ教えていただきたいのですが??
149 :
名無しさん@お腹いっぱい。 :2000/10/24(火) 16:43
150 :
名無しさん@お腹いっぱい。 :2000/10/24(火) 17:04
い、陰線……ハァハァ… (*´Д`)
>150 病気だ! 医者逝け!
削除依頼?
>148 Zバッファとか?
>150 激しく同意!
>153 >Zバッファとか? ってもう少し詳しく教えていただけないでしょうか? 私なりにも、少し調べてみたいと思いますが・・・ お手数かけて申しわけないです。とほほ・・
156 :
お姉さん :2000/10/25(水) 04:06
> 145 よかったですね。どのプログラムですか?
157 :
名無しさん@お腹いっぱい。 :2000/10/25(水) 09:23
min-max法が主流っていつの時代よ
>157 アルゴリズムの本などを見るとmin-max法しか 載っていなかったのですが…
159 :
名無しさん@お腹いっぱい。 :2000/10/26(木) 02:47
似たような話題がありましたが getpixel この関数を自分で作るとどうなるのでしょう?
161 :
159 :2000/10/26(木) 04:27
宿題ですといったら…
宿題なら自分でやんな。 人に聞かずに自分で調べるのも宿題のうちだ。
>>162 お姉さんが宿題を教えてくれるスレッドらしいから別にいいのではないかな。
それじゃあ勉強にならないという点は激しく同意だが。
164 :
名無しさん :2000/10/26(木) 15:28
お姉さん逝ってよし
>>163 TPOをわきまえぬ発言でした。逝ってきます。
イカセテあげよう
167 :
159 :2000/10/26(木) 19:46
宿題ではないです。 この関数に似た関数をつくりたかったので 色々と意見を伺おうと思ったのです。 お願いします。
168 :
名無しさん@お腹いっぱい。 :2000/10/26(木) 20:01
郵政省系のサイトから郵便番号と住所の対応ファイルをダウンロードしてきました これを使って、Webブラウザのフォームから入力された住所から郵便番号(7桁) をサーチするCGIプログラムを作れと言われました。PostgreSQLを使っても いいそうですがドキュソでチュ〜な僕にはなにがなんだかわからないよ! たすけて!おねいさん、クラスのみんな!
名前もわからない人にクラスのみんな呼ばわりされてもなぁ‥
grep実行するshell scriptで十分じゃねーの?
>>168
172 :
お姉さん :2000/10/27(金) 07:14
>168 わかりません!
174 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 10:14
>>167 (159)
何に対してgetpixelするのか判らないとね…。
基本的には座標をx,yで指定してgetpixelする
グラフィックイメージの幅がwなら
w * y + x
だよね。
あとは、pixelフォーマットによって多少変形
する事になる。
8bbp,16bpp,32bppだったら、char,short,long
配列に対して上記の式でいいけど1bppや4bpp
だとシフトやマスクの必要もでてくる。
1bppで配列がchar(8bit)の場合、
(((w+(8-1))/8) * y + (x / 8)) & (0x80 >> (x % 8))
とかかな?検証はしてない。
175 :
クラブT :2000/10/27(金) 10:41
void Normalize(LPTSTR szFimeName) { static char ProhibitChara[] = "\\/:,;*?\"<>|"; char trBuffer[MAX_PATH]; DWORD nCount = sizeof(ProhibitChara) - 1; char *pSrcCurrent = trBuffer; char *pDesCurrent = trBuffer; BOOL Found; wcstombs( trBuffer, szFimeName, MAX_PATH); for (;*pSrcCurrent != '\0'; pSrcCurrent++) { Found = FALSE; for (DWORD n = 0; n < nCount; n++) { if (*pSrcCurrent == ProhibitChara[n]) { Found = TRUE; break; } } if (Found != TRUE) { *pDesCurrent = *pSrcCurrent; pDesCurrent++; } } *pDesCurrent = '\0'; mbstowcs( szFimeName, trBuffer, MAX_PATH); }
176 :
クラブT :2000/10/27(金) 10:43
>>175 ファイル名に使えない文字を取り去る関数ですが、
これで出来てるでしょうか?
177 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 10:55
新しい関数作ったらASSERT使ったテスティングコードを書いてみな。 void assertNormalize(char *s1, const char *s2) { char buf[765]; strcpy(buf, s1); ASSERT(strcmp(buf, s2)==0); } void testNormalize(void) { assertNormalize("test.txt", "test.txt"); assertNormalize("test\\.txt", "test.txt"); ... assertNormalize("\\/:,;*?\"<>|", ""); } あとProhibitCharaはやめれ ~~~~~
void assertNormalize(char *s1, const char *s2) { char buf[765]; strcpy(buf, s1); Normalize(buf); /* 肝心なのを入れ忘れた */ ASSERT(strcmp(buf, s2)==0); } あと変換前・変換後のバッファをわけた方がいいかも。 同じバッファを指定したときのみ上書きするとかね。
179 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 11:01
>>176 ざっと見た感じで言うと、
ファイル名に日本語コードが含まれてる時の処理が入ってないッス。
あと、wcstombs()に LPTSTR の引数を渡すのは、気持ち悪い感じがします。
>>175 1)
こういう特殊な目的にしか使えない関数ではなく、
指定した文字群 szCharSet に含まれる文字を szSrc から削除する関数
void Squeeze(LPTSTR szSrc, LPCTSTR szCharSet);
のようなものを書いた方が設計としては良い。
2)
wcstombsを使うのは#define UNICODEされていることを確認してからでも
遅くはない、というかそうすべき。とはいうものの、このケースに限っては
そもそもWCS <-> MBCSのコンバートは不要である。TCHARの配列を
保持しておき、TCHARのまま判定すれば良い。
TCHARポインタのインクリメントにはtcsincを使え。
3)
このような検索処理にはtcschrが使える。使えるものは使え。
181 :
クラブT :2000/10/27(金) 12:01
うわぁー、みなさんすごいですー! 私なんかがぜんぜん考えてないことを指摘して下さいますね。 でも、ちょっと難しいですー じっくり考えてみます!
182 :
ななし :2000/10/27(金) 12:25
質問です。 文字列たとえばx[10]="nanashi"が あったとします。これを右寄せにする、プリントしたときに " nanashi"となるような関数はありますか? こないだの質問答えてくれた人ありがとう。
183 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 12:55
>>182 printf("%10s", x);
でどう?
184 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 12:58
185 :
>182 :2000/10/27(金) 12:59
printf("%-10s",x); printf("%10s",x); どっちか。。。
3人、かぶったか。。。 しかも、俺が1番、馬鹿。。。
187 :
182 :2000/10/27(金) 14:23
c++ですのでprintfは使えません。 他の方法ありますか?
189 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 14:33
C++でもprintfは使えるわよ。 標準C++ライブラリでやるなら std::cout << std::setw(10) << std::setiosflags( std::ios_base::right ) << std::setfill(' ') << x; かしら。メンドウだから試してないの。調べてみてちょうだい。
>187 sprintfでメモリ上に出した後で あんたが好きなやりかたで表示しろや それともwinでtextoutで表示したいのか?
191 :
182 :2000/10/27(金) 14:37
んー ファイルに書き出すのでprintfじゃないです。 今はoutfile<<record1<<record2<<.....って感じで やってるのですが、recordの何個かが(全部ではない)右寄せ にしなくてはいけないんです。こういう場合はどうするんでしょう?
適当なコトを書いたが、良く考えたら175のケースでは 単純に汎用テキストマッピングを利用するのはまずいな。 以下は普通にWCS用に書いたコードだが、これと全く同じアルゴリズムを MBCSに適用することは出来ない(SBCSではOK)。インクリメント 部分にwcsincを使用するとしてもダメだ。 void Normalize(wchar_t *s) { static const wchar_t *set = L"\\/:,;?\"<>|"; wchar_t *t = s; for (; *s; ++s) if (!wcschr(set, *s)) *t++ = *s; *t = 0; } どうしてもLPTSTRを使いたいのなら、UNICODE, MBCSといったシンボルが 定義されているかどうかで処理を分けるしかないだろう。
193 :
182 :2000/10/27(金) 14:45
でも、実際、coutとprintfを混在させるって、 いいプログラミングって言えるんですかねえ。
なんか、いろいろわかってなさそうな事だけはわかった
printfでsprintfやfprintfを思いつかなかったり(つーか190で)。
196 :
182 :2000/10/27(金) 14:48
>>189 標準C++ライブラリでやるなら
std::cout << std::setw(10) << std::setiosflags( std::ios_base::right )
<< std::setfill(' ') << x;
かしら。メンドウだから試してないの。調べてみてちょうだい。
ファイルに書き出すのでstd::coutではないですよね、このばあいは
ここの部分はどうなるのでしょう?std::ofstreamオブジェクト名で
いいのかな?
197 :
182 :2000/10/27(金) 14:51
>>195 思いつきました
でもすでにoutfile<<rec1<<rec2.....の形式でやってるので
一貫した方法を採りたいんです。
198 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 14:52
sprintf(),fprintf(),CString.Format() どれでもできるよ・・・>182 MSDNで、調べてみ。 それから、C++はとりあえず、Cの関数は全部準拠だよ。
199 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 14:55
outfile << sprintf()で作った文字列 じゃダメなのかね
200 :
182 :2000/10/27(金) 14:55
教わったやり方が嫌、或いは調べるのが嫌なら 自分で考えるか自分で作るかすれば〜
203 :
168 :2000/10/27(金) 15:24
>171 ありがとうございます!
204 :
182 :2000/10/27(金) 15:38
みなさんありがとうございました。 何とかやってみます。
もちろん、Give & Take ってコトバはご存じよね? 初心者のころ、こうやって身も知らぬ他人にいろいろ教えて もらったことは、よーく覚えておいてちょうだいね。 つまりアナタも近い将来人に教えられるくらいの知識を身につけて、 ちゃんと後輩の質問に応えてあげないってことよ? 「人に教えられるくらいの知識が身に付く自信がない」っていうなら、 こういうところで質問しないでちょうだいね。 カネ払って講習会に行ってちょうだい。 アタシたちもヒマじゃないんだから。って仕事中に2chに書き込み しながら言っても説得力ないわね。
どうでもいいが、189はお姉さんなのか?なのか?
それよりも、205はお姉さんなのか?なのか?
ひろみ。この頃すこしお生意気ではなくて?
お姉さんが答えますスレなんだから 答える人はみんなおねいさんになるべきだと思う おねいさんじゃない答え禁止。
やっぱり成りきったほうがいいんだろうなあ
>209 オマエモネー # これでいいのかしら?
212 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 21:57
500〜1000行位で高度な数学は使わなくてC言語の入門は そろそろ卒業ってレベルの課題を誰かだしてくれない?
213 :
>212 :2000/10/27(金) 22:01
c2htmを作るのだ! 下の方に強調構文表示されたソースを、 上の方にそのソース内の変数・関数のプロトタイプのリストと ソースへのリンクを張る。 でもあんまりCの機能は使わないか
>>211 違う!! もっとおねいさんみたく喋ってよ!!
>>212 500行以上なんて見るきもせんよ。
215 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 22:14
>>212 ファイルの中で、階層的に使えるファイルシステムみたいなの、
作ってみ。ある程度つかえるヤツができれば、多分、入門は卒業。
216 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 23:36
>215 どうやってコーディングするか以前にどーゆー物かが分かりません。 索引編成ファイルみたいなのを作るんですか? >214 全部見てもらおうとは思ってません。勉強中なんだけど書きたいコードが 思いつかないくて。。。 >213 とりあえずそれを作ってみます。 ありがとうございました。
アナタモネー >211 今日は宿題もないみたいなんで、もう寝ます。 みんな、おやすみ!
218 :
名無しさん@PG見習い :2000/10/28(土) 04:19
------------- Help Me --------------- 教えてください!! 半径が5ドットの筆先でA−B間を描画する最も効率の良い方法は? WindowsAPIは無しです。 ( ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ A B 両隅が丸くなる感じの線です。 ABの位置は自由です。斜めだったりもします。 またCDなどの制御点を含む曲線(ベジエ曲線)だったりもします。
219 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 04:37
>>218 APIは無しって事は、
なにか、グラフィック系のコントロールとかライブラリを使うって事?
220 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 04:55
>> 212 UNIX つかってんだったら web サーバ書いてみ. inetd から起動する奴だったら手頃でしょ.
221 :
名無しさん@PG見習い :2000/10/28(土) 05:00
>>219 BYTE Image[800*600*3] みたいにメモリを確保しておいてそのメモリ上に描画する。
Image[800*600*3] は 「横800ドット・縦600ドット・RGB」 って意味。
座標(200,100)に赤を塗る場合、
Image[ (200+100*600)*3 ] = 255;
Image[ (200+100*600)*3+1 ] = 0;
Image[ (200+100*600)*3+2 ] = 0;
表示する時はメモリをDCにコピーする。
表示部分はAPI使う。(完成してる。)
222 :
名無しさん@PG見習い :2000/10/28(土) 05:02
>>221 補足:要するに描画部分はすべて自分で書く。
223 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 06:18
>>222 まず自分はどう考えたか、どこまでやってるのか書いてみ。
自分でもある程度はやってるんだろ?
224 :
ウンコランナー :2000/10/28(土) 06:25
225 :
名無しさん@PG見習い :2000/10/28(土) 06:42
>>223 ブラシパターンみたいなのを BYTE Pen[10*10*3] に作っておいて、
線分の経路?を1ピクセルずつ計算し、そこにペイントしていく。
この方法だと遅い!同じピクセルに何度も書きこむので無駄だらけ。
一応ある程度のスピードは確保したい。
もっとスムーズにやる方法ないですか?
輪郭線を計算して輪郭線から内部判定して一気にペイントとか。
そういうアルゴリズムで書かれてるソースが見たい。
ライブラリ(バイナリ変換済み)などはダメ。自分でソース書かないといけないから。
> PG見習いさん 同じピクセルに何度も描かないようにすれば速くなるわよ。 ブラシの移動のあいだを間引くのもいいわね。 > ウンコランナーさん となりに行って、アタマのいいお兄さんにきいてちょうだい! ‥って、これじゃあんまりね。 DLLにはしたくないみたいだし‥ どうして全部VBでやるわけにはいかないの?
たらい回しjapan(笑)
>>226 (1)
>DLLにはしたくないみたいだし‥
いえ、DLLじゃしたくないとはいってませんよ。
DLLの作成の仕方を教えてくださいませんか?
(VCでしかできないのか?、その他のコンパイラでも可能か?)
も分かっていない状態なので、かなり面倒だとお思いますが。(笑)
(2)
>どうして全部VBでやるわけにはいかないの?
全部VBでやると、
1.わざわざCで作ったのをVBに直さないといけない→面倒
2.高速だと思うから。60!くらいの処理を行う予定だから。
(3)
VBに*.exeから値を得る、渡す、という行為自体そもそも可能なのか?
不安になってきた。
229 :
お姉さん :2000/10/28(土) 10:08
ただいま引き篭もり中。 話しかけないでね。
230 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 11:08
218は線幅のある直線描画機能ぐらい作りこんでるでしょ それなら幅5ドットの直線を引いて、円を両端に描画すればおわりだよ 計算量も軽くて速いぞ。ちなみに結構有名な方法なので特許は無理だ
231 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 11:25
>>224 コマンドラインで起動できるプログラムなら、Shell関数で
起動すればおっけー。
結果はどう出力されるのかわからないけど、GetExitCodeProcess()
で取得するか、リダイレクトしてファイルから読みこむか。
まあ。DLLにした方がいいと思うけどね。
>ウンコランナーさん (1) VC以外でもDLLができるかどうかを気にしてるようだけど いったいどこのコンパイラを使ってるの?ヘルプでDLLを調べてね。 (2) じゃ、いっそのこと全部Cで書いてみればどう? (3) VBとCのプログラム間での値のやり取りはいろんな方法があるけれど DLLでなければ、ファイルでやり取りするのが一番簡単かしら?
233 :
いちろうくん :2000/10/29(日) 01:09
きくだけきいてお礼も言わないやつがいるな‥ ぼくらのおねぇさんをなんだとおもってるんだ!
234 :
初心者 :2000/10/29(日) 10:29
JIS の文字列をシフトJISに変換するにはどうしたらいいですか? char *jis2sjis(char *JISstring, char *SJISstring) みたいな関数を作りたいんですけど。 教えて、お姉さん。
235 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 13:34
236 :
初心者 :2000/10/29(日) 16:27
235さんありがとお。 でもぼくはCでどうするのか知りたいんです。 教えてください235さん。
自分で考えたり努力するつもりのないやつは死んでください
ごめんなさい。 でもぼくは235さんの書いたコードが見てみたいんです。 なんとなく面白そうで。
240 :
お姉さん :2000/10/29(日) 20:17
私の代わりに回答してくれてるみんな、ありがとうー。 >>初心者くん んー。アルゴリズムをもらったんだからそこからcのコードに 発展させるくらいのことはやらなくちゃ、勉強にならないぞん。 >>いちろうくん ありがとー。・・って私お礼言われるほどの回答をほとんど してない気もするけど・・あは。
BASICが読めないとは思わなかったんだ。スマン。 とりあえずさっきのページからほぼベタ移植。 改行コードの変更は本質的な問題でないんで省略しといた。 char* Jis2Sjis(char* JISstring,char* SJISstring) { unsigned char uByte,lByte; unsigned char* Sjis = (unsigned char*) SJISstring; unsigned char* Jis = (unsigned char*) JISstring; int JisFlg=0; while(*Jis){ if(*Jis=='\x1b'){ if( Jis[1] == '\x24' && (Jis[2] == '\x42' || Jis[2] == '\x40')){ JisFlg = !0; Jis += 3; }else if( Jis[1] == '\x28' && (Jis[2] == '\x42' || Jis[2] == '\x4A')){ JisFlg = 0; Jis += 3; } } if(JisFlg){ uByte = *Jis++; lByte = *Jis++; lByte += uByte & 1 ? 0x1F : 0x7D; if( lByte >= 0x7F) lByte++; uByte = (uByte - 0x21) / 2 + 0x81; if( uByte > 0x9F) uByte += 0x40; *Sjis++ = uByte; *Sjis++ = lByte; }else{ *Sjis++ = *Jis++; } } *Sjis = '\0'; return SJISstring; }
239の注文の多さは、もはやワガママというよりは確信犯と思うが 241の親切さは泣けるな。
だいじょぶ 親切を装って239を貶めている確信犯なので 気にしないでくれたまい 他にも参項にする人がいるかもしれないしさ‥
これこれ、他人の番号を騙るでない‥まあいいか ところで、241では、元のページのBasicのプログラムからある 小さな(しかし場合によっては致命的な)問題を解決していません。 何がその問題なのかはあえて書かないでおくので がんばって直してくれたまい。 初心者向けにはおもしろい問題かもね。
さては234、Basciのページなんか紹介されたもんだから 235はCが書けないもんだと思い込んで一転して煽りに入ったな‥
s/Basci/Basic/
247 :
初心者 :2000/10/30(月) 01:24
ありがとうございます、どうしてもわかりませんでした。 実はもう一つわからないことがあって教えて欲しいんです。 COBOLのパック10進形式の文字列をASCIIキャラクタ形式に 変換したいんですが、どうすればいいでしょう? 言語はCで関数プロトタイプは char *Pack2Ascii(char *AsciiDec, char *PackDec, size_t n) nバイトのPackDecにはパック10進形式の数値が右詰で入っており、 余った桁は0パディングされている。 これをAsciiDecに左詰で変換したキャラクタを格納する。 符号はマイナスの時のみつける。 これがどーしても解りません。 教えて下さい235さん。
248 :
お胸おっぱい :2000/10/30(月) 06:51
>>235 じゃないけどね。
char *Pack2Ascii(
char *AsciiDec,
char *PackDec,
size_t n
)
{
int p, a;
for (p=0; p<n && ! PackDec[p]; p++)
; /* Skip leading zero */
for (a=0; p<n; p++)
a = a + sprintf(AsciiDec + a, a? "%02x": "%x", (unsigned char)PackDec[p]);
AsciiDec[a] = '\0';
}
符号は考慮してない&動くかどうかは試してないけど。
249 :
お胸おっぱい :2000/10/30(月) 06:53
だ、だせぇ… > a = a + sprintf( … は > a += sprintf( … ね。 最近ちょっと BASIC やってて…ああ言い訳にしか聞こえんよ…
sprintfやってるなら最後の AsciiDec[a] = '\0'; って無駄じゃないの?
251 :
>248 :2000/10/30(月) 12:33
そもそもsprintfなんか使うなよ…
252 :
>247 :2000/10/30(月) 13:28
・Pack2Asciiは何を返す? ・nバイトのPack10進数とは 数値までの値なのか、符号までを含めた値なのか? ここらへんが明確でないとコードは書けません。
>>252 まあ何だ、初心者は235を
愛して
しまったようだから、そっとしといてやってくれ。
254 :
トライAPI :2000/10/30(月) 17:04
WindowsでAPIを使ってプログラムをしています。 ファイルを列挙しているのですが、時間でソートして列挙するには どうすればいいのでしょうか? VCを使っています。
>>254 system( "COMMAND /C DIR /OD" );
256 :
名無しさん :2000/10/30(月) 17:38
>>255 お、UNIX使いがここにいる・・・。
ナゼ、Windowsアプリのソースって、こう言ったシェル呼び出しが少ないんだろうね。
あ、DOS呼び出すからか・・・。
257 :
名無しさん@お腹いっぱい。 :2000/10/30(月) 18:45
>>256 DOSのコマンドは、プログラムから呼び出すには使いにくい仕様の
物が多いし、外部コマンドはシステムに入ってるって保証がないし。
258 :
お姉さん :2000/10/31(火) 11:56
さっどんどん盛り上がってこ!
259 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 12:34
>>254 FindFirstFile FindNextFile WIN32_FIND_DATA qsort
260 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 13:06
実はDOS使いじゃねーの
261 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 13:31
>>256 そう? UNIX使えるなら opendir() 使いそうなもんだが。
(それから並べておいて qsort())
それが面倒な場合は glob() を使う(しかしこれはファイルが
多すぎてメモリが足りない場合にできない)。
262 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 13:32
ls の出力を popen() で受け取るという方法もあるね。 DOSも dir でこの手法が使えるんじゃないか? 実際には 内部でファイルにリダイレクトしてそれをオープンするの かも知れないが。
263 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 15:17
お姉さんは美人? 美人だったら教えてほしいことがあるんだけど・・・
なにかしら?
265 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 16:53
ばかもの 俺は国津慎吾だ おまえは、ねかまだろう 天才 国津慎吾のめはふしあなではないぞ ばかもの
ぼくらのおねいさんをばかにするな!たたかうぞ!
>>262 俺も性能が非常に問題になる場合以外は popen("ls -t") を使うと思う。
Win32には本物のパイプがあるから、popenは32bit版のVC++にはある。
しかし、fd 0, 1をopenしていなければ使えない
(むろんコンソールアプリケーションならこの条件は満たされるが)。
Windows Applicationの場合は、いっそNamedPipeを使う方が良いかも。
どうでもいいがスレ立て逃げはヤメレ>国津慎吾
まんこみせてください
270 :
トライAPI :2000/11/01(水) 10:05
一発で解決してくれる関数はないみたいですし、 パイプは未経験で難しそうなので、 リストに1つ1つ挿入することにしました。 どうもありがとうございます。
バイブは未経験なので試させて下さい
272 :
tetete :2000/11/01(水) 13:18
教えてください。 void func(引数,引数) { struct AAA *p; if(( p = malloc(sizeof(struct AAA))) == NULL){ エラー処理; } p->メンバ = なんか; . . . } この関数は、問題ないのでしょうか? つまり、関数の中で宣言したstruct AAAのポインタを この関数の外で使うことは文法的にOKなのですか? もちろん、どこかでfree()してやるとして。
>>272 外で使ってみたら?と言いたいけど、おねいさんにまかせよう。
274 :
>272 :2000/11/01(水) 13:45
>関数の中で宣言したstruct AAAのポインタを >この関数の外で使うことは文法的にOKなのですか? OKです。 戻り値がvoidなので、引数でpを返そうとしていると推察しますが C言語ですと引数は全て値渡しなので取り扱いに気をつけてください。
ごめん、言葉が変だ。後半は無視してくれ。 ある関数内で確保したエリアのポインタを 他の関数へ引き渡すことは可能です。
276 :
tetete :2000/11/01(水) 14:44
>274 この関数を出たあとで、struct AAA *pにアクセスして問題ないのですね? そうですか。 有り難うございます。 malloc()してようがしてまいが、 関数内で宣言したものは、関数を出たらそれっきりなのかと思ってました。 戻り値で返すか、 引数としてstruct AAA *pを受け取って処理すべきなのだと思っていました。
277 :
お姉さん :2000/11/01(水) 14:46
>272なんか意味が分からないけど、使えるんじゃない?使って みようとしたが出来なかったとか具体例をあげてもらわないと。。 嵐のみんな、おうちに帰ってカレーの王子様でも食べてなさいね。
278 :
sage :2000/11/01(水) 14:54
>>272 は、なまえ :---> もの(object)
の関係を理解しているのかな?この両者を一緒にしちゃいけないよ。
なまえのスコープ(有効範囲)と、ものの有効範囲は違うよ。
このばあい、pという名前自体は、ブロックスコープを持つので、
この関数から出ると無効になるんだけど、
pで指されているところの「もの」は、mallocでヒープ上に確保した
以上、freeするまでは存在するんだ。274が言っているのは、
このことさ。
じゃあね。
↑ ああ、ぼくは なまえ :----> E-mail(省略可) をまちがえてしまったよ。 じゃあね。
なーるほど。 何がわかっていなくてわからなかったかがわかった気がする。 どーもでした。
一見もっともらしいけれども、すごくいい加減なうそっぱちを 書いたのに誰も突っ込んでいないな。 まあいいか。
282 :
初心者 :2000/11/01(水) 21:36
あるファイルの中にある全角英数字を、半角に置き換えるプログラムを作りたいんですが、 どういう風に作ればいいんでしょうか? 使える言語はCかPerlです。Perlで作ろうとしましたが、 文字列の置換がうまくいきません。全部を「$a[i]=~/A/A/;」とやっていくんでしょうか? 詳しい方よろしくお願いします。
283 :
*名無しさん++ :2000/11/01(水) 21:59
284 :
nanasii :2000/11/01(水) 23:22
それいっちまったらnkfいれろ→。
285 :
名無しさん@お腹いっぱい。 :2000/11/01(水) 23:50
286 :
鏝半 :2000/11/01(水) 23:52
Perlにyとかtrちゅうのがないけ?>282 Scopeとextentを混同してるちゅうことかいな?>281(278)
287 :
nanasii :2000/11/02(木) 00:01
288 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 00:12
最大最小を求めるプログラムを教えてください。
289 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 00:13
#include <stdio.h> #include <math.h> main() { int n,i,a,b,c,d,p,x,y; double data[100],sum,mean,bunsan,hensa[100],stddev; printf("Input Number!\n"); scanf("%d",&n); printf("Input Data!\n"); for(i=0;i<n;i++){ scanf("%lf",&data[i]); } sum=0; for(i=0;i<n;i++){ sum=sum+data[i]; } mean=sum/n; printf("mean=%f\n",mean); sum=0; for(i=0;i<n;i++){ sum=sum+pow(data[i],2); } bunsan=sum/n-pow(mean,2); stddev=sqrt(bunsan); printf("stddev=%f\n",stddev); for(i=0;i<n;i++){ hensa[i]=((data[i]-mean)/(stddev))*10+50; } printf("no data mean+- hensachi rank\n"); printf("----------------------------------------------------------\n"); a=b=c=d=0; for(i=0;i<n;i++){ printf("%2d %10.5f %+10.5f %4.2f ",i+1,data[i],data[i]-mean,hensa[i]); if(hensa[i]>=70){printf("A\n");a++;} else if(hensa[i]>=60){printf("B\n");b++;} else if(hensa[i]>=50){printf("C\n");c++;} else{printf("D\n");d++;} } printf("A=%d,B=%d,C=%d,D=%d",a,b,c,d); printf("\nハミコケテヘハフソヘソス\n"); printf("A|"); for(p=0;p<a;p++){printf("*");} printf("\nB|"); for(p=0;p<b;p++){printf("*");} printf("\nC|"); for(p=0;p<c;p++){printf("*");} printf("\nD|"); for(p=0;p<d;p++){printf("*");} printf("\n"); }
290 :
ぎこるび :2000/11/02(木) 01:14
>>290 ぎこるびさん、ありがとうございます。
さっそくやってみます。
>>290 のリンクをブックマークしようとしたんですが、
403forbiddenと出てしまいます。時間をずらしてまたいってみます。
293 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 01:55
begin 644 bk.jpg.zip
M4$L#!!0 $,>82FL91_UX $ . ! & ! 8FLN:G!G!2<, %I0251*
M4$5'1TM/3O_8_^ $$I&248 0$! $@ 2 _]L 0P (!@8'!@4(!P<'"0D(
M"@P4#0P+"PP9$A,/%!T:'QX=&AP<("0N)R B+",<'"@W*2PP,30T-!\G.3TX
M,CPN,S0R_\ "P@ #P / 0$1 /_$ !\ $% 0$! 0$! ! @,$
M!08'" D*"__$ +40 (! P,"! ,%!00$ !?0$" P $$042(3%!!A-180<B
M<10R@9&A""-"L<$54M'P)#-B<H()"A87&!D:)28G*"DJ-#
[email protected] $149'
M2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@X2%AH>(B8J2DY25EI>8F9JB
MHZ2EIJ>HJ:JRL[2UMK>XN;K"P\3%QL?(R<K2T]35UM?8V=KAXN/DY>;GZ.GJ
M\?+S]/7V]_CY^O_: @! 0 /P#T.;0?%=]JD=S+K%W:07&IW(FBM7"FVMEV
M?9W3<S*23:IN4J01=2C:O-=1X?2TBTGR;*]N[R"*XN(_-NY7DD#+,ZLA9_F(
M5@4!.>%')ZFQJNE6.N:7<:9J=M'<V=PFR6)^C#^8(."".00",$5Q_@GPIJ7A
MPZ(TT^I2&33)VU476H-,OVR22&3A"Q7.3/\ ,HYYR23D_P#_V5!+ 0(4!Q0
M $,>82FL91_UX $ . ! & ! !B:RYJ<&<%
E)PP 6E!)5$I014='2T].4$L%!@ ! $ 1 !0" !B
end
すいません、こういうカキコがあったのですが
これってなんですか?
294 :
nanasii :2000/11/02(木) 02:35
uuencode death.
>>292 本当ですね。メンテ中なのかも。
リンク先には、
ソースファイルのエンコードはEUCにして、jcode.plのtrを使いましょう
てなことが書いてあります。つまりこんな感じ。
require 'jcode.pl';
$str = "012ABC";
jcode::tr(\$str, "a-zA-Z0-9", "a-zA-Z0-9");
296 :
ああっ名無しさまっ :2000/11/02(木) 02:54
>293 懐かしいな・・・。 でも詳しくは教えない。 乱用されかねないから・・・。
297 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 04:03
a
本文がありません!
299 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 04:06
begin 644 bk.jpg.zip
M4$L#!!0 $,>82FL91_UX $ . ! & ! 8FLN:G!G!2<, %I0251*
M4$5'1TM/3O_8_^ $$I&248 0$! $@ 2 _]L 0P (!@8'!@4(!P<'"0D(
M"@P4#0P+"PP9$A,/%!T:'QX=&AP<("0N)R B+",<'"@W*2PP,30T-!\G.3TX
M,CPN,S0R_\ "P@ #P / 0$1 /_$ !\ $% 0$! 0$! ! @,$
M!08'" D*"__$ +40 (! P,"! ,%!00$ !?0$" P $$042(3%!!A-180<B
M<10R@9&A""-"L<$54M'P)#-B<H()"A87&!D:)28G*"DJ-#
[email protected] $149'
M2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@X2%AH>(B8J2DY25EI>8F9JB
MHZ2EIJ>HJ:JRL[2UMK>XN;K"P\3%QL?(R<K2T]35UM?8V=KAXN/DY>;GZ.GJ
M\?+S]/7V]_CY^O_: @! 0 /P#T.;0?%=]JD=S+K%W:07&IW(FBM7"FVMEV
M?9W3<S*23:IN4J01=2C:O-=1X?2TBTGR;*]N[R"*XN(_-NY7DD#+,ZLA9_F(
M5@4!.>%')ZFQJNE6.N:7<:9J=M'<V=PFR6)^C#^8(."".00",$5Q_@GPIJ7A
MPZ(TT^I2&33)VU476H-,OVR22&3A"Q7.3/\ ,HYYR23D_P#_V5!+ 0(4!Q0
M $,>82FL91_UX $ . ! & ! !B:RYJ<&<%
E)PP 6E!)5$I014='2T].4$L%!@ ! $ 1 !0" !B
end
300 :
お姉さん :2000/11/03(金) 16:11
さー盛り上がってこー
もりsage
おねいさんのいうこときけないやつは バカですうんこです逝っちゃえです。
303 :
たけし :2000/11/04(土) 00:34
288=289 早く教えてお姉さん!
アナタモネー(素振り)
305 :
お姉さん :2000/11/04(土) 02:29
>>303 288=289だったのか。289で解決してるのかと思ってた。 ちょっと待ってて。
お兄さんに質問はないかな?
307 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 06:05
> おにいさん おねいさんのほうがいいです。
偏差値が一番たかいひとと低いひとキボン。
309 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 07:58
血のつながっていない妹は?
310 :
お姉さん :2000/11/04(土) 12:31
>308 偏差値一番高いのは私ですけど、何か? おにいさんも協力してくれるの?わーい。 289は頼んだよー。
311 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 14:39
こんにちは。 質問なんですけど、Javaかなんかで使われてる ADT (Abstract Data Type)ってなんですか? 後、ADT (Abstract Data Type)って日本語でなんて言うんですか?
312 :
ウンコランナー :2000/11/04(土) 19:12
313 :
名無しさん@優しい人 :2000/11/04(土) 19:20
>>311 ADT
日本語でいうと総称型だよ。
C++での実装はtemplate、
Javaでいうとinterfaceか?
Cでも(void*)使えば一応書ける。
わかりやすく言うと、型を意識しないで書くデータ構造やアルゴリズムだな。
あ、おねいさまじゃなくてごめんな。(藁
314 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 19:58
>>311 こういうのじゃないの?
C++:
class X
{
virtual void hello( void ) = 0;
};
Java:
interface X
{
public void hello();
}
Objective-C:
@protocol X
- (void)hello;
@end
315 :
314 :2000/11/04(土) 20:00
Abstract *Data* Typeだから違うかも。。。ごめん。 誰か教えて。
>>311 そのまま直訳で「抽象データ型」だよ。
例えば、中身は配列で実装されてるんだけど、init,push,popの手続き
でアクセスするようになっていれば、抽象データ型「スタック」という
わけだ。
317 :
名無しさん@優しい人 :2000/11/04(土) 23:36
1のおねいさん、教えてください。 (おにいさんや騙りは返答不可です。無視します。) 2chパフォーマンスの技術についてです。 ギコ猫も数パターン書きました。 モナーも数パターン書きました。 「オマエモナー」のタイミングもばっちりでした。 質問系スレに対する解説も完璧でした。 2chなのに誉められました。 スレ違い/板違いも実行しました。 厨房に対する反撃も完璧でした。 痛い固定ハンも演じてみました。 むかつくスレへの荒らし強行(否コピペ)にも成功しました。 1日でスレを壊滅まで追い込みました。 理論攻め荒らしも成功しました。 多重人格レスもばらまきました。 煽動もひっそりと完了しました。 粘着系荒らしも最低限のレスで食い止めました。 「放置プレイ、開始」も皆の協力で成功しました。(かにみえたが、邪魔が入った…。) エロ画像収集厨房に何時の間にかナニーを手伝わされてました。 あとなにか楽しいことありますか? もしかしてわたしは2ch卒業ですか? プライドが許さないのでいままで避けてきましたが、 あと残ってるのは2chの華、コピペorAA荒らしぐらいですか…? 5,4,3,2,1,
318 :
名無しさん@優しい人 :2000/11/04(土) 23:36
くあ、いま飼い猫(三毛猫@メス@風邪気味)が体に上ってきて身動きが取れません。 背中でゴロゴロいってかわいいやつです。 やっぱりコピペ荒らしは面白くないので止めときます。 他に、これぞ2ch、っていうパフォーマンスを教えてください。
>318 >他に、これぞ2ch、っていうパフォーマンスを教えてください。 コテハンで暴れた後、バスジャック。
320 :
311 :2000/11/05(日) 00:55
>313、314、316 ご返信ありがとうございます♪
トホホお兄さんじゃダメか
ごめんなさい、おにいさん。 でもおねえたんの方が好きだから…。ごめんね☆
323 :
名無しさん@優しい人 :2000/11/05(日) 02:40
おねいさんへ 来ないみたいなので、今日はあきらめます。 また明日、待ってます。
324 :
a :2000/11/05(日) 05:59
a
325 :
お姉さん :2000/11/05(日) 05:59
>307 プログラミング以外の質問はお断りですよ。 エサやりなさい、エサ。<猫
お姉さんとおねいさんは別人です。 1に応えてほしいなら「お姉さん」にきいて下さい。>317
327 :
>317 :2000/11/05(日) 06:51
自ら煽りや乱暴な言葉遣いを禁じ手としてみると 新たな2chの楽しみ方が見えてきます。 お悟りが降りるまでは辛抱が大事です。
328 :
初心者 :2000/11/05(日) 07:10
#include stdio.h ってどーゆー意味ですか? .hって形で別ファイルを参照するの? .hって、ヘッダファイルって聞いたけど、ヘッダファイルって何? グローバル関数と、変数、と#defineの宣言のリストのこと? コンパイル時にリンクさせた、別の.cファイル(モジュール?) の関数って、どうやって使うの? 〜.c/関数名 ? それとも、external 関数名 で最初に宣言? これを.hで宣言するの? 不要?
329 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 07:16
あと、int data[2000][2000]って作れますか? 大きすぎるとダメなんでしょうか? 問題なし? 全体のデータをシンプルにまとめたいけど、メモリを食うなら 躊躇うんですが………。 データ自体を保存する方法と、必要に応じた部分だけ読み込んでおく 方法ってありますか?
330 :
235>328 :2000/11/05(日) 07:20
ヘッダファイルには通常同名の.cファイルに含まれている グローバル変数や関数(C++ならクラスも)の宣言を書いておきます。 コンパイル時にリンクする別の.cに含まれている関数や変数を 参照するときにはそのヘッダファイルをインクルードします。 これはあくまでも一般的な使い方であって、Cの文法的には ヘッダファイルに何を書くかは全くの自由で特に定義はされていません。
331 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 07:26
>328 イヤミで言ってるんじゃないけど 一度C言語入門みたいな本を読んだ方がいいぞ。 やすーい奴でいいから。
332 :
235>329 :2000/11/05(日) 07:27
int data[2000][2000]が作れるかどうかは処理系によります。 16ビットのコンパイラだとできないこともあるでしょう。 32ビットの処理系ならたぶん問題なく作れると思います。
>>329 int data[2000][2000] グローバル、スタティックなら可能。
スタックはヤバイのでは?(よくわからん)
int *data;
data=(int*)malloc(2000*2000*4);
free(data);
なら良い。
334 :
235 :2000/11/05(日) 07:48
ああ!そうか、ローカルに作っちゃう可能性もあるね!
335 :
328 :2000/11/05(日) 07:51
>みなさん ありがとうございます♪ この辺の関連がごちゃごちゃになってて困ってたんです。 すごく助かります。 intについてはよく分からなかったのですが、大きすぎるのは やはり不向きでしょうか? あと、やっぱり僕は基礎力不足ですね。 ご指導の通り、基礎から読み直してきます。
336 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 07:54
>data=(int*)malloc(2000*2000*4); は data=(int*)malloc(2000*2000*sizeof(int)); の方が良いとおもう、 またヘッダファイルに対応するのは どっちかとゆーと.libファイルだと思う。 揚げ足取りでみたいでごめん。
337 :
おねいさん :2000/11/05(日) 08:04
(おにいさんがこたえてくれないので) 配列から最大値を取り出す関数 最小値もこの応用で作ってね。 #include <limit.h> int getmax(int data[],int count) { int i,max; max=INT_MIN; for(i=0;i<count;i++){ if(data[i]>max)max=data[i]; } return max; }
338 :
>336 :2000/11/05(日) 08:07
>data=(int*)malloc(2000*2000*sizeof(int)); には賛成。 > ヘッダファイルに対応するのはどっちかとゆーと.libファイル だとすると.objの立場は? ヘッダファイルに対応するのは外部関数や外部変数全てだと思う‥
339 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 14:37
Win32だとスタックは通常1MBまで。MSの処理系だとリンカオプションで 増やせるけど、あんまりそれに頼らない方がいい。
340 :
超初心者 :2000/11/05(日) 15:08
if(flag){ } elseif(flag){ } else{ }
341 :
超初心者 :2000/11/05(日) 15:08
で文法あってましたか
「elseif」じゃなくて「else if」では?
コンパイル成功しました。 どうもです。
344 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 15:58
>338 .libファイルは複数の.objをマージして作ることが出来るの。 実行ファイルを作るときリンカーは.libの中から使う関数の ある.objを選び出してくれるので、 関数毎に.cを作ってコンパイルして各.objを作って.libにまとめて ヘッダーは.lib単位にまとめたのを作って提供するの。
おーい、
>>325 >>307
>プログラミング以外の質問はお断りですよ。
>エサやりなさい、エサ。<猫
307とおれは違うよ。
>>326 >お姉さんとおねいさんは別人です。
>1に応えてほしいなら「お姉さん」にきいて下さい。>317
もはやどっちでもいいです。
>>327 そうだねー、うん一度試してみるよ。
346 :
>337 :2000/11/05(日) 16:44
なるべくポインタを使いましょうね。 int getmax(int *data,int count) { int i,max; max = *data++; for(i=1; i < count; i++){ if(*data > max) max = *data; data++; } return max; }
347 :
>346 :2000/11/05(日) 16:46
そんなのオプティマイザにまかせなって
348 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 17:13
/* 32bitのlongに変数を格納 それを8つの4bit値に分割し、8つのchar変数の配列の それぞれ下位4bitに格納していくプログラム. */ int count; long int i; unsigned long bit; /* bit検査 */ unsigned char a[8] = {0,0,0,0,0,0,0,0}; /* これらの下位4bitに格納していく */ i = I; for(bit = 1,count = 0;bit != 0;bit = (bit << 1),++count){ if(i & bit != 0) a[count / 4] |= (1 << (count % 4)); else continue; } やろうとしてもchar配列が皆同じ値になっているみたいです。 どこが間違っているのでしょうか? お願いします。
349 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 17:41
>>348 日本語もプログラムもよくわかんない(;´Д`)
32bitsのlong値を4bitsずつに分割してcharの配列に代入するってことでいいの?
で、元の32bitslongの値ってどれ?
i = I; ってなに?
/4と%4はなに?
350 :
名無しさん@優しい人 :2000/11/05(日) 17:41
>>347 >そんなのオプティマイザにまかせなって
可読性が落ちない範囲なら良い心がけだと思うぞ?
必ずしも良い環境で動かせるとは限らないからな。
351 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 17:51
何をやりたいかは知らんが、 原因はここだろ。 if(i & bit != 0)
>>348 unsigned long bit;
int i;
char a[8];
for( i = 0; i < 8; ++i ) a[i] = (bit >> (i*4)) & 0xf;
bit を 4ビットに分解して a[] に入れるならこう。
>>350 いまどきいちいち注意するほどのことじゃないよ。
354 :
>346 :2000/11/05(日) 18:01
ポインタ使うならカウンタも削った方がよいのでは? さすがにdata+countは最適化してくれるでしょ int getmax(int *data, int count){ int *p = data; int ret = *p++; for(; p < data+count; p++){ if(ret > *p) ret = *p; } return ret; }
355 :
名無しさん@優しい人 :2000/11/05(日) 18:13
>>348 なにがやりたいのかいまいちわからん。
が、一応想像してみた。
こういう事じゃないのか?
void bitset(unsigned char *bits, size_t i, int on) {
if (on)
bits[i >> 3] |= 1 << (i & 7);
else
bits[i >> 3] &= ~(1 << (i & 7));
}
356 :
348 :2000/11/05(日) 18:15
>351 if((i & bit) != 0) でうまくいきました。どうもです。 >352 そういうやり方もあるのですね。 勉強になります。
352は分割の仕方が違うんじゃないか? 0,8,16,24bitと 1,9,17,25bitの形にするんじゃない? int i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 8; j++) { if (number & 1) a[j] |= 1 << i; number >>= 1; } }
358 :
おじいさん :2000/11/05(日) 19:03
bits[i >> 3] って何ですか?使ったことないなあ。
359 :
346 :2000/11/05(日) 19:31
>>350 ありがとん。組み込み系はつらいのよん
>>354 なるへそ。でも今使ってるコンパイラは「data+count」を最適化してくれないの。
>「data+count」を最適化してくれないの。 マジデスカ? 組み込み系は安定性最重視って事なのかな 一応改訂版(こっそりバグ修正版)。 心もち可読性が落ちてきたような... int getmax(int *data, int count){ int *p = data, *last=data+count; int ret = *p++; for(; p < last; p++){ if(ret < *p) ret = *p; } return ret; }
361 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 22:34
関数プログラミングのHaskellについての質問なんですけど、 例えば下のようなテーブルがある場合、 tm = [" X \n"] ++ [" X \n"] ++ ["X "] >Main putStr tm X X X このテーブルを(Int,Int,Int)のような型に変えて表示したい場合、 ((x,y,z) x=列 y=行 z=もし'X'があるなら1、ないなら0) (0,0,0),(0,1,1),(0,2,0),(0,3,0) (1,0,0),(1,1,0),(1,2,1),(1,3,0) (2,0,1),(2,1,0),(2,2,0),(2,3,0) いったいどのようなファンクションを作ったらいいのでしょうか? とりあえず頑張ってこんな↓アウトプットが出るファンクションを作ったんですが、 [[" X "],[" X "],["X "]] 後はこれをどうやってこんな↓風なアウトプットを出すのか知りたいのですが、 [[(0,0,0),(0,1,1),(0,2,0),(0,3,0)],[(1,0,0),(1,1,0),(1,2,1),(1,3,0)],[(2,0,1),(2,1,0),(2,2,0),(2,3,0)]] どなたかご存知でしたら教えて下さい。アルゴリズムでも結構です。
362 :
361 :2000/11/05(日) 22:40
スペースが消えてますね。ごめんなさい。'.'がスペースだとすると、 tm = [".X..\n"] ++ ["..X.\n"] ++ ["X... "] >Main putStr tm .X.. ..X. X...
363 :
名無しさん@優しい人 :2000/11/05(日) 23:04
>>358 おじいさんへ
void bitset(unsigned char *bits, size_t i, int on) {
if (on)
bits[i / 8] |= 1 << (i % 8);
else
bits[i / 8] &= ~(1 << (i % 8));
}
364 :
名無しさん@優しい人 :2000/11/05(日) 23:18
ついで。 int bitget(unsigned char *bits, size_t i) { return (bits && (bits[i >> 3] & (1<<(i & 7)))) ? 1 : 0; }
365 :
名無しさん@優しい人 :2000/11/05(日) 23:24
ついで。 int bitget(unsigned char *bits, size_t i) { return (bits[i >> 3] & (1<<(i & 7))) ? 1 : 0; }
366 :
名無しさん@優しい人 :2000/11/05(日) 23:28
>>364 お、何故か失敗したと思ったやつが書込まれてる。
鬱だ…
367 :
名無しさん@優しい人 :2000/11/05(日) 23:30
365で書き直した理由は、先のbitsetでbitsの正当性チェックしてなかったから。
あぷりけーしょんがつくりたいなー あぷりけーしょんがつくりたいなー あぷりけーしょんがつくりたいなー あぷりけーしょんがつくりたいなー あぷりけーしょんがつくりたいなー
373 :
おじいさん@早起き :2000/11/06(月) 07:12
優しい若者よ、ありがとう。 bits[i / 8] |= 1 << (i % 8); <<の使い方が未だにわからんのじゃが、、、 大小を比べているわけでもないしのお。 ま、きにせんでくれ。ありがたや。
375 :
お姉さん :2000/11/06(月) 16:16
さっ、今週も張り切っていこ!
ハラキリ
VC++スレの優しい人です。 このスレの優しい人とは、別人です。 まぁそれだけ・・・
378 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 19:02
おねえさん僕の悩みを聞いてください 僕はいま学生で、プログラマ目指してます。 ちょと大き目のプログラムを書いてると、 あとで「この機能を追加したい」とか、 思ったときとても苦労します。 最近しりあいになったプログラマに聞いたら、 UMLを勉強してみたら?っていわれたんですけど やっぱりお姉さんも設計とか勉強すべきだと思いますか? どうもUMLで絵を書いてると、頭が痛くなってコードを さっさと書いてしまいたくなります ちなみに知り合いのプログラマは年上(24)の女性で、 年上なのにかわいらしくて、好きになってしまいました ところが最近知ったのですが、なんと彼女はすでに結婚していて、 子供がいるそうです (ばつ一だそうですが) 告白するべきかどうか悩んでます
379 :
ミトコンドリ子 :2000/11/06(月) 19:50
お姉さんじゃないけど、オカマだから口調はおねぇさんなので大目にみてね。 アタシはUMLとか使うべきだと思うわ。使ってるしね。 何度か苦労しているみたいだから、プログラムの規模が大きく なるとすぐに手に負えなくなることはよくわかるでしょう? 図形的に構造を表現してゆくと、コーディングを始める前に 多くの問題に気付くわよ。 新しい言語を覚えたつもりで書いてみることね。 それから職場での不倫はオススメしないわ。オンナなんて 腐るほどいるんだからさっさと次の恋を探しなさいよ。 不倫はもうちょっと経験を積んでから、オトナのたしなみよ。 ほほほ
>378 うおおおお!燃えているな若者! 愛とは!愛とは!愛とは奪い取るものじゃあ! わかったか?わかったかあ!?わかったら逝け!
>380 ふんどし先生みたいだな(笑 このキャラで若人の深〜い悩みを 解決してやってくれ(感涙
>>377 確かにおれとあんたは別人だが、
VC++スレ、って何処の事だ?
まあいいけど…
383 :
>378 :2000/11/07(火) 08:51
UMLで告白すれ え?どうやって? 自分で考えよう
384 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 10:28
愛のコンパイル
385 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 11:59
コンストラクタで構造体メンバの初期化は どうやってやればいいんですか?
386 :
お姉さん :2000/11/07(火) 13:23
プログラミングの質問以外はどっか行ってね!!
387 :
お姉さん :2000/11/07(火) 13:25
>>385 普通に初期化するのと同じ要領ですが・・
388 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 15:08
>>385 hoge というクラスに i, j というメンバがあったとして、
それぞれ 10, 20 という値をセットしたいとき、
(1) class hoge::hoge() : i(10), j(20){}
(2) class hoge::hoge(){ i=10; j=20; }
(1)は「初期化」
(2)は「代入」 と言う。
メンバ変数に const な変数があったら「代入」が使えない。
そういった場合は「初期化」を用いて値をセットすべし。
詳しくは『Effective C++』第2版の12項を参照。
389 :
おねーさん :2000/11/07(火) 15:09
プログラミングの質問以外は私がお相手するわよー!!
>>384 コンパイルしたら、以下のエラーが発生しました
Unsatisfied symbols:彼女(data)
*** error 1
どうやったら、正しくコンパイルできるのでしょう?
391 :
お姉さん :2000/11/07(火) 17:21
>>388 この二つ、そういう違いがあったんだ。同じかと思ってたよ。
勉強になりました。
392 :
385 :2000/11/07(火) 18:25
もしわけないです、ありがとうございます。 class hoge::hoge() : i.a(10), i.b(20){} ってやればいいんですね。
393 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 18:42
>ミトコンドリ子さん、380さんありがとうございました。 UMLを新しい言語を覚えるつもりで真面目に取り組んでみます。 彼女のことはもうちょっと冷静に考えてみます。 (ここで書くべき内容ではなかったです。すいませんでした) アドバイス嬉しかったです。 すこし落ち着けました。 >お姉さん どうもすいませんでした。 変なことを書いてしまいました。 昨日はいろいろあって思い詰めてしまって、 ちょっと冷静さを欠いていたみたいです。 反省しています。
394 :
初心者 :2000/11/07(火) 20:29
二次方程式の解を求めるプログラムをCで書けといわれました。 「ax^2+bx+c=0」で、a,b,cの値を入力し、判別式を利用して、解の存在を確かめるんですが、 判別式を0より小さいか大きいかで分けなければなりません。 Cのプログラムでは、絶対値がどれくらい小さな値で0に近似されるのでしょうか? また、ルートの出し方がわかりません。 √(b^2-4ac)の答えを出すにはどうすればいいでしょうか?
395 :
388 :2000/11/07(火) 21:31
>>385 あ、ごめん、タイプミス。分かってると思うけど、
>class hoge::hoge() : i.a(10), i.b(20){}
は
>hoge::hoge() : i.a(10), i.b(20){}
だね。class はいりません。スソマンソ。
あと、構造体のメンバでポインタ関連の問題が無ければ、
typedef struct S{
int a;
int b;
}tagS;
class hoge {
public:
tagS i;
hoge(tagS argI) : i(argI){}
};
int main()
{
tagS s = {10, 20};
hoge h(s);
cout << h.i.a << " " << h.i.b << endl;
return 0;
}
としたほうが、わかりやすかもね。
あと構造体ではなくクラスを用いて、
コピーコンストラクタを作ってやるのもいいかもしれませんよ。
396 :
ハノイの塔 :2000/11/07(火) 21:35
仕組みが未だに良くわかりません 再帰関数使ってるみたいですが どういう順番で処理してるんでしょう?
397 :
ミトコンドリ子 :2000/11/07(火) 22:03
>>392 え、そのコードでコンパイル通る? こっちで試したけど通らないわよ。
コンストラクタの初期化部分で、メンバ変数のメンバの初期化はできないんじゃ
ないかしら?
398 :
ミトコンドリ子 :2000/11/07(火) 22:05
>>396 再帰を理解してらっしゃらない方に文章で説明するのは至難の技ね。
動くコードを探してきて、途中経過をプリントアウトしまくって、ながめて
ちょうだい。
それでわかんなかったら、いくら説明されてもわかんないんじゃないかしら。
がんばってね。
399 :
ミトコンドリ子 :2000/11/07(火) 22:21
>>394 sqrt って関数を調べてごらんなさい。
400 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 23:38
401 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 01:36
errno.h 見てみたが under-flow というのはなかった。 394の言うように0に切捨てになるのかな? 数値表現の範囲は俺の環境だと /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/float.h に書いてる。
402 :
ミトコンドリ子 :2000/11/08(水) 09:53
>>394 0への丸めは浮動小数点の規約でいろいろ決まっていて結構メンドウだったと思うわ。
ただ、浮動小数を使って計算する限り必ず演算誤差が入るので、
floatで表現できる最小値だけを考えても見積もりとしては甘くなる
場合が多いことを覚えておいてね。
とくに引き算は有効桁数が大幅に減ることがあるので(桁落ち)、
b^2-4ac > 0 じゃなくて b^2 > 4ac で判定したほうが精度は高いわよ。
(数値計算の常識,伊理正夫著,共立出版,1985,ISBN4-320-0134-3)
各組込型の表現できる最大値や計算時の丸め方法などの情報にプログラム的に
アクセスするなら 401さんの仰るfloat.hや、C++ならstd::numelic_limits<T>
を使うといいわよ。
>>394 >402
を見てて思ったんだが...
a, b, cは整数なのか?
整数ならばb^2-4acも整数なので浮動小数点の丸め誤差はなくなる
>floatで表現できる最小値
普通は浮動小数点を使うならdoubleじゃないか?
>>403 >普通は浮動小数点を使うならdoubleじゃないか?
仰るとおり。いまdoubleを使いたくない環境で作業しているので、ついクセで...
鬱ね氏ぬわ。
#係数を整数にするなら、オーバーフローに気を付けてね。
405 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 17:55
exeとかの実行ファイルどうやったらプログラムをみれますか?
406 :
にょだ :2000/11/08(水) 18:06
FreeBSDなんですけど プログラムをずっとじっこうしてると実行がおそくなるんですよね アイドルがあるのに。 スケジューリングってどういうふうになってるのかなぁ〜 めっちゃお馬鹿なしつもんでごめんちゃい
man nice
408 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 19:14
409 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 19:16
リバースエンジニアリング?
あなたのいっている意味がよく分かりません。 もう少し分かりやすく話してくれないと誰も答えられないと思います。
411 :
お姉さん :2000/11/08(水) 19:38
お姉さんから質問があるんですが lisp詳しい人いますか?
exeファイルはあるのですが、そのexeのソースファイルは どうすれば見ることが出来るのでしょうか?
414 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 20:13
>>413 無理です。
逆アセンブラ使えばアセンブラレベルでは見ることが可能。
Visual C++で読み込めば同様にアセンブラでステップ実行などが出来る。
415 :
385 :2000/11/08(水) 20:21
>>388 遅くなりました、
タイプミスは気づきませんでした(^^;;;;;;;ホソマ スソマンソ。
hogeクラスメンバの初期化ですが、その方法はよさそーです!
ありがとうございました!
416 :
にょだ :2000/11/08(水) 21:12
>407 man niceって優先度をかえたいんじゃなくて スケジューリングのアルゴリズムをしりたかったんです 言い方がたりませんでしたね。 なんか古い実装のままの奴だとユーザの入力がないと 実行優先度がCPU時間に反比例しておちていくってのを 聞いたんで〜〜ほんとかな?って
417 :
にょだ :2000/11/08(水) 21:15
バイナリエディタでみれるでしょ? それがいやならディスアセンブラ
418 :
優しい名無しさん :2000/11/09(木) 07:34
>>417 バイナリファイルではソースは見れない。
WIN32API tte?
>>413 そのexeを作ったとこの開発チームに入れば見れる
423 :
お姉さん :2000/11/09(木) 18:37
>>412 ありがとうございました。lispのスレッドがあったんですね。
早速行ってみます!
>>394 で二次方程式の質問をしたものです。
暖かい回答ありがとうございました。
誤差やルートなど、大変勉強になりました。
また、お礼が遅れて申し訳ありません。
425 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 15:42
さいころの出た目を数えるプログラムです。 #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> int saikoro(); int main() { int s1,i,no; int kaisu[6]; for(i = 0; i <= 5; i++){ kaisu[i] = 0; } printf("何回振る?\n"); scanf("%d",&no); srand(time(NULL)); for(i = 1; i <= no; i++){ s1 = saikoro(); kaisu[s1-1] += 1; } for(i = 1; i <= 6; i++){ printf("%2d= %5d\n",i,kaisu[i-1]); } (void) getch(); return 0; } int saikoro() { return rand() % 6 + 1; } 僕はs1 = saikoro();の s1を使って、a,b,c,の初期化0でswitch(s1) case 1:a++ case 2:b++ case 3:c++・・・ 最後にprintf("%d = %d\n",i,a);・・・というふうにしたんですが、 これのkaisu[s1-1] += 1の意味がわかりません。kaisu[s1-1]の [s1-1]ってなぜ1引くんですか?それと+=1はkaisu[s1-1] =kaisu[s1-1] + 1;ということは わかるんですが、どうして1足すんですか。教えておね〜さ〜ん。マジで。
>kaisu[s1-1]の[s1-1]ってなぜ1引くんですか? さいころの出目が1〜6でkaisuは0〜5までだから >どうして1足すんですか さいころの出た目を数えるプログラムだから >kaisu[s1-1] += 1; のかわりに switch(s1) { case 1:kaisu[0]++;break; case 2:kaisu[1]++;break; case 3:kaisu[2]++;break; case 4:kaisu[3]++;break; case 5:kaisu[4]++;break; case 6:kaisu[5]++;break; } でも間違ってはいないが冗長だ
お姉さんだーーーーーーいすき♪\(○w○)))))))
428 :
お姉さん :2000/11/13(月) 16:37
>>425 > kaisu[s1-1]の[s1-1]ってなぜ1引くんですか?
> それと+=1はkaisu[s1-1] =kaisu[s1-1] + 1;
> ということは わかるんですが、どうして1足すんですか。
それはね、コーディングした人が素人だからだわ。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define saikoro() (rand() % 6)
int main()
{
int i, count;
int hindo[] = {0, 0, 0, 0, 0, 0};
printf("何回振る?\n");
scanf("%d", &count); /*あまり勧められないわ*/
srand(time(NULL));
for(i = 0; i < count; i++)
hindo[saikoro()]++;
for (i = 0; i < 6; i++)
printf("%2d = %5d\n", i + 1, hindo[i]);
return 0;
}
429 :
JSDK2.0〜 :2000/11/13(月) 18:08
あのぉ、つかぬことをお聞きしますが、、、 JSDK2.0〜はどこでDL出来るんでしょうか? SUNのページに行っても無いのですが。。。 どうかこの3日間探し回っている厨房にお教えください。
430 :
JSDK2.0〜 :2000/11/13(月) 18:11
↑すんません、すれ違いでした。。。
431 :
お姉さん :2000/11/13(月) 18:54
んんん?(・・;) まあいっか。
どうもありがとうございました。425です。 scanfって、あまり使われないという話を聞くんですが何でですか。 ところで、今ポインタをやってるんですが、これってよく使いますか? 関数へ配列渡す時とか、戻り値が1つじゃない時くらいしか使い道がないんじゃないか って思いますし、非常に難しいです。出来ればつかいたくないっす。 **ptr ポインタのポインタなんてまるで解からないよ〜。 int *ptrの読み方は「int ポインタptr」って読むんですか。*は何て読むの?
433 :
初心者ですいません :2000/11/14(火) 20:02
2次元配列で12x12の迷路を作り、それを通り抜けるっているプログラムを書けって言われました。 壁は*、床は・、通った跡にXを表示し、一歩進むたびに迷路を再表示するプログラムなんですけど、 どうしたらいいのかさっぱりなんです。 ひとつ隣に移動したり、通った跡にXを表示させるにはどうしたらいいでしょうか。 どなたか教えてください。よろしくお願いします。
434 :
>433 :2000/11/14(火) 20:15
その2次元配列そのものに *・Xを書き込めばよか
>>432 >scanfって、あまり使われないという話を聞くんですが何でですか。
前回作成したプログラムの「何回振る?」の後に
0〜9以外の文字を入力してみてください。
# scanfの後に取得した回数を表示して見ると良いかもしれません。
>ところで、今ポインタをやってるんですが、これってよく使いますか?
>関数へ配列渡す時とか、戻り値が1つじゃない時くらいしか使い道がないんじゃないか
>って思いますし、
代表的な使われ方は上記の通りです。
Cでは上記のような場合、ポインタを使用しないと実現しにくいです
グローバル変数を使えば可能ですが、それは
不必要にgoto文を使用することと同じくらい好ましくありません。
>非常に難しいです。出来ればつかいたくないっす。
確かにC言語でポインタが理解できなくて挫折する人が多いという話は聞きます。
しかし、Cはポインタをよく使う言語でありポインタからは逃れられません。
また、Javaなどの言語もポインタは隠蔽されているだけであり、
ポインタを知ることにより、Javaなどの言語も深く理解できると信じています。
逃れられない以上積極的に学ぶのが上達の早道ではないでしょうか?
私もできる限り応援したいと思います
>int *ptrの読み方は「int ポインタptr」って読むんですか。*は何て読むの?
「ポインタ」、「アスター」、「スター」ですね
私は「アスター」と呼びます
「*」を「ほげ」とよんでるオレは逝ってよしですか? 例: int * = いんとほげ
* は「アス」がえっちでええのお
C++で出来ること教えてチョソマゲ。Borland C++ Compiler。 勉強(リファレソス?)ぺぇじとか。 イッテヨシ?(´Д`;)
>438 それ以前にアンタ何作りたいのさ?
API SendMessage使ってF1キーを押させるとこうなるのじゃ。 SendMessage( hWndTarget,WM_KEYDOWN,VK_F1,0); しかし、CtrlキーShiftキーAltキーができないのじゃよ・・ keybd_event(VK_CONTROL,0,0,0); keybd_event(inputkey,0,0,0); keybd_event(inputkey,0,KEYEVENTF_KEYUP,0); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); みたくできる方法はdoするの?
おねえさん、マムコ見せて下さい。
お返事どうもありがとうございます。425です。 やっぱりポインタは大事ですか。非常にとっても難しいけれどがんばります。 恐らく今度は構造体で質問する予定です。これも難しいですね。 ところで、windowsのプログラムって覚えるのに時間掛かりますか。 もうすぐCが一通り終わるし、ゲーム作ると覚えが早いと言っていたので、 テトリスとかオセロとか作ってみたいんですが。
444 :
hash :2000/11/15(水) 21:16
ハッシュ値と名前が順番に表示されるようにしたいのですが、上手く行きません。 どうしたらいいですか?おねえさん、お願い! /*オープンアドレス法*/ #include <stdio.h> #include <string.h> #define Tablesize 50 #define MEIBO "namefile" FILE *fp; int hash(char *); int rehash(int); struct Mtable{ char name[20]; int fulg; }dat[Tablesize]; void main(void) { int h,i,last; char a[20]; fp=fopen(MEIBO,"r"); while(fscanf(fp,"%s",a)!=EOF){ h=hash(a); i=h; last=(i+(Tablesize-1))%Tablesize; while(dat[i].fulg==1&&i!=last) i=rehash; if(i!=last){ strcpy(dat[i].name,a); dat[i].fulg=1; } else printf("%s \n",a); } for(i=0;i<Tablesize;i++){ printf("%d %d\n",i,dat[i].name); } for(;;){ scanf("%d",a); if(a[0]=='0')break; h=hash(a); i=h; last=(i+(Tablesize-1))%Tablesize; while(strcmp(a,dat[i].name)!=0&&i!=last) i=rehash(i); if(i!=last) printf("%d%20s\n",i,dat[i].name); else printf("%20s\n",a); } } int hash(char *s) { int n,i,sum=0; n=strlen(s); for(i=0;i<0;i++){ sum+=s[i]; } return (sum%Tablesize); } int rehash(int h) { return (h+1)%Tablesize; }
445 :
お姉さん :2000/11/16(木) 05:47
私はアスタリスクと読みます。英語風に 最初のアはエとアの中間で発音します。
446 :
お姉さん :2000/11/16(木) 05:52
外人プログラマの間ではスターと読んでいるようです
447 :
お姉さん :2000/11/16(木) 06:05
>>433 char meiro[12][12]
一つ右に移動 meiro[i][j++]='X';/*現在地meiro[i][j]とする*/
左 meiro[i][j--]='X';
上 meiro[i--][j]='X';
下 meiro[i++][j]='X';
一つ移動する度に更新された迷路全体をプリントするのですか?
だったら普通にループで出来ますよお
448 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 07:15
具体的に書くと SCANという関数を用意する。調査位置をX,Yとする 1)4方向を調べて、空白が4の数を調べ SPC_COUNTに代入 2)SPC_COUNT==1なら空白の方向にX,Yを更新 3)SPC_COUNT>1ならすべての空白の位置に移動してみてはSCAN(つまり自分)を呼び出す 4)SPC_COUNT==0ならRETURNする(行き止まりまたは到着)
449 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 10:31
>>436 ほげ、最高!
俺もほげと呼びます。
すばらしい名称ですね。
450 :
** ほげほげ :2000/11/16(木) 13:12
WindowsSDKの質問です。 複数のウィンドウプロシージャがあるにもかかわらず WinMainではメインのウィンドウプロシージャにしかメッセージを ディスパッチしていません。子ウィンドウにはどのようにして メッセージが渡されるのですか? またメッセージキューには子ウィンドウとメインのウィンドウのメッセージ がごちゃまぜになっているのですか?
451 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 13:43
ドキュンな質問で申し訳ないのですが VBやExcelで 1.5 - 1.0 - 0.5 = 0 は ture なのですが、 1.6 - 1.0 - 0.6 = 0 は false になるのはなぜですか? 本当に初心者の質問で申し訳ありませんが どうかご教授願えればと思います。 正直困っていますので、どうかよろしくお願いします。
452 :
>451 :2000/11/16(木) 13:47
float(double) だから?
INT() を使って整数化して判定すればー
454 :
451 :2000/11/16(木) 14:23
452さん、453さん 早速のレスありがとうございます。 453さんのおっしゃるとおり、int()をつかったり 型の宣言をすれば問題無いと、解決策は見つかったのですが なぜ、バリアント型だと上手くいかないかの理由がわかりません。 しかも、1.5 - 1.0 - 0.5 = 0 は ture になるのに・・・・。 どうか理由がお分かりでしたら、教えてください。 お願いします。
455 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 15:09
456 :
>454 :2000/11/16(木) 15:14
ヒントとして 0.5000は2進数で書けば0.10000000... 0.6000は2進数で書けば0.10011001... つまり無限少数になりますね
457 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 15:25
こいつのエラ−が取れません誰か助けてください #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class strtype { char *p; int len; public: strtype( char *ptr ); ~strtype() { delete [] p; } friend ostream &operator << ( ostream &stream, strtype ob ); }; strtype::strtype( char *ptr ) { len = strlen( ptr ) + 1; p = new char [ len ]; if( !p ) exit( 1 ); strcpy( p, ptr ); } ostream &operator << ( ostream &stream, strtype &ob ) { stream << ob.p; return stream; } int main() { strtype ob_1( "hello!!" ), ob_2( "good morning!!" ); cout << ob_1 << endl << ob_2 << endl; return 0; }
458 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 15:28
すんません フレンドの宣言の2つ目の因数の参照の&はついてる物として下さい
459 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 15:31
こんなえら−がでます :\Windows\デスクトップ\プログラム\新しいフォルダ\K2.cpp(26) : error C2248: 'p' : private メンバ (クラス 'strtype' で宣言されている)にアクセスできません。 C:\Windows\デスクトップ\プログラム\新しいフォルダ\K2.cpp(8) : 'p' の宣言を確認してください。 C:\Windows\デスクトップ\プログラム\新しいフォルダ\K2.cpp(34) : error C2593: 'operator <<' があいまいです。 cl.exe の実行エラー
true
461 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 15:44
まずフレンドにしているのになぜ非公開めんばにアクセスできないのですか?
なんか、むずかしそうなしつもんがふえてきたきがするな。 お姉さんもこれじゃちょっとこまるかも。
friendなんて使ったこと無いなー 演算子のオーバーライドも使ったこと無いなー はい次の人
464 :
迷路の質問をしたものです :2000/11/16(木) 18:09
一応書いてみました。壁とかは今のところ無視しています。 どこが違うのかまったくわからないのですが、移動ができないんです。(T_T) 添削お願いします。 #include <stdio.h> main() { int a; int i, j; char *p; char maze[12][12] = { {'*','*','*','*','*','*','*','*','*','*','*','*'}, {'S','.','.','.','.','.','.','*','.','.','.','*'}, {'*','*','.','*','.','*','.','.','.','*','.','*'}, {'*','*','.','*','.','*','*','*','*','*','.','*'}, {'*','*','.','*','*','.','.','.','.','*','.','*'}, {'*','.','.','.','*','.','*','*','.','*','.','*'}, {'*','*','*','.','*','.','*','*','.','*','*','*'}, {'*','.','*','.','.','.','*','.','.','*','.','E'}, {'*','.','.','.','*','.','*','.','*','*','.','*'}, {'*','*','*','*','*','.','*','.','*','*','.','*'}, {'*','.','.','.','.','.','*','.','.','.','.','*'}, {'*','*','*','*','*','*','*','*','*','*','*','*'} }; for(i=0; i<12; i++) for(j=0; j<12; j++) { printf("%c ",maze[i][j]); if(j==11) printf("\n"); } p = &maze[1][0]; *p = 'X'; while(1) { printf("Which direction do you want to go?\n"); printf("up :1\ndown :2\nleft :3\nright:4\n"); scanf("%d",&a); switch(a) { case 1: /*up*/ p = &maze[i--][j]; *p ='X'; for(i=0; i<12; i++) { for(j=0; j<12; j++) { printf("%c ",maze[i][j]); if(j==11) printf("\n"); } } break; case 2: /*down*/ p = &maze[i++][j]; *p = 'X'; for(i=0; i<12; i++) { for(j=0; j<12; j++) { printf("%c ",maze[i][j]); if(j==11) printf("\n"); } } break; case 3: /*left*/ p = &maze[i][j--]; *p = 'X'; for(i=0; i<12; i++) { for(j=0; j<12; j++) { printf("%c ",maze[i][j]); if(j==11) printf("\n"); } } break; case 4: /*right*/ p = &maze[i][j++]; *p = 'X'; for(i=0; i<12; i++) { for(j=0; j<12; j++) { printf("%c ",maze[i][j]); if(j==11) printf("\n"); } } break; default: printf("Input again\n"); break; } } }
465 :
451 :2000/11/16(木) 18:09
455さん、456さん レスどうもありがとうございました。 おかげさまで、どうにか理解することができました。 本当にこんなくだらない質問に答えていただいて 感謝しております。 また、何かあったときはどうかよろしくお願いします。 452さん、453さん、455さん、456さん、 ありがとうございました。
466 :
464です :2000/11/16(木) 18:10
見難くてすいません。
467 :
お姉さん :2000/11/16(木) 19:18
あああ 質問がたくさんで対応しきれないよう みんな出てきて、いちろうくん、じろうくん、おじいさん、おねいさん、 おにいさん、姐さん、家族のみんな。
468 :
赤ちゃん :2000/11/16(木) 19:31
>>457 コンパイラ通って実行できたでちゅ。
L:\src\CPP_SOURCE\temp>bcc32 friend.cpp
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
friend.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
L:\src\CPP_SOURCE\temp>friend
hello!!
good morning!!
使ってるコンパイラとバージョンを教えて欲しいでちゅ。
469 :
>464 :2000/11/16(木) 19:35
case 1: /*up*/ p = &maze[i--][j]; ここのi, jがループ毎に初期化されてまってます。 別の名前の変数を宣言して、ループで初期化されへんようにしてね。 他のcaseも同様に。 *p ='X'; for(i=0; i<12; i++) { for(j=0; j<12; j++) { printf("%c ",maze[i][j]); if(j==11) printf("\n"); } }
470 :
>>464 :2000/11/16(木) 20:07
ソ−ス書いてみました一応動きます 壁チェックもしてます #include <stdio.h> #define SIZE 12 char maze[SIZE][SIZE] = { {'*','*','*','*','*','*','*','*','*','*','*','*'}, {'S','.','.','.','.','.','.','*','.','.','.','*'}, {'*','*','.','*','.','*','.','.','.','*','.','*'}, {'*','*','.','*','.','*','*','*','*','*','.','*'}, {'*','*','.','*','*','.','.','.','.','*','.','*'}, {'*','.','.','.','*','.','*','*','.','*','.','*'}, {'*','*','*','.','*','.','*','*','.','*','*','*'}, {'*','.','*','.','.','.','*','.','.','*','.','E'}, {'*','.','.','.','*','.','*','.','*','*','.','*'}, {'*','*','*','*','*','.','*','.','*','*','.','*'}, {'*','.','.','.','.','.','*','.','.','.','.','*'}, {'*','*','*','*','*','*','*','*','*','*','*','*'} }; int a; int i, j; char *p, *p_ch; void show() { for( i = 0; i < SIZE; i++ ) { for( j = 0; j < SIZE; j++ ) { if( &maze[ i ][ j ] == p ) printf( "X " ); else printf( "%c ", maze[ i ][ j ] ); }printf( "\n" ); } } void main() { p = p_ch = &maze[ 1 ][ 0 ]; while( 1 ) { show(); printf("Which direction do you want to go?\n"); printf("up :1\ndown :2\nleft :3\nright:4\n"); scanf("%d",&a); switch( a ) { case 1: p_ch -= SIZE; break; case 2: p_ch += SIZE; break; case 3: p_ch--; break; case 4: p_ch++; break; } if( *p_ch == '*' ) { p_ch = p; puts( "input ererr!!" ); continue; } p = p_ch; if( &maze[ 7 ][ 11 ] == p ) { puts( "END" ); break; } } }
471 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 20:12
おねえさん
>>457 の質問答えて下さいお願いします
_(._.)_ _(._.)_ _(._.)_ _(._.)_ _(._.)_ _(._.)_ _(._.)_
472 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 20:15
>>467 コンパイラはVC++6.0のすたんだ−とです
473 :
472 :2000/11/16(木) 20:16
>>468でした荒らしてしまってすんまそん
474 :
赤ちゃん :2000/11/16(木) 22:00
475 :
472 :2000/11/16(木) 22:13
>>474 いいえ僕じゃないです それにしても457のそ−すはみごとにそのバグにはまってますね 奇遇です
x^50=(x^2)^25 y^25=y*y^24=y*(((y^2)^2)^2)^3 こんなふーに冪乗の計算回数をなるべく節約して 冪乗の計算をして来いと言われました。 このプログラムを改造してください。再帰呼出を使ってくださっても 結構です。やる暇が無いので宜しくお願いします。 メアドにくださっても結構です。 #include <stdio.h> main() { double x; int n; double beki(double x,int n); while(1){ scanf("%lf %d",&x,&n); if(x==0 && n==0){ break; } printf("%g^%d=%.15g\n",x,n,beki(x,n) ); } } double beki(double x,int n) { int i; double s,t; s=x; t=1; if(n>0){ for(i=1;i<n;i++){ s=s*x; } return s; }else if(n==0){ return 1; }else { for(i=1;i<-n+1;i++){ t=t/x; } return t; } }
x^50=(x^2)^25 y^25=y*y^24=y*(((y^2)^2)^2)^3 こんなふーに冪乗の計算回数をなるべく節約して 冪乗の計算をして来いと言われました。 このプログラムを改造してください。再帰呼出を使ってくださっても 結構です。やる暇が無いので宜しくお願いします。 メアドにくださっても結構です。 #include <stdio.h> main() { double x; int n; double beki(double x,int n); while(1){ scanf("%lf %d",&x,&n); if(x==0 && n==0){ break; } printf("%g^%d=%.15g\n",x,n,beki(x,n) ); } } double beki(double x,int n) { int i; double s,t; s=x; t=1; if(n>0){ for(i=1;i<n;i++){ s=s*x; } return s; }else if(n==0){ return 1; }else { for(i=1;i<-n+1;i++){ t=t/x; } return t; } }
478 :
名無しのエリー :2000/11/17(金) 01:27
>>477 ひとつツッコミいれると、そんなの展開するのダルイよ。
基本的に意味無いし。
素因数分解しないと最適化できないけど素因数分解なんてするくらいなら
素直に pow 関数でも使った方が速いよ!
どーしてべき乗を表現するのに^使うの? ^はビット演算子ざんしょ?
<479
>>477 のソースがCだからそういうツッコミもアリだと思うけど・・・(ニコッ
481 :
名無しさん@お腹いっぱい。 :2000/11/17(金) 02:10
ん〜、たしかに^やら~やら知らないCプログラマっているよね。
482 :
迷路の質問をした者です :2000/11/17(金) 02:19
434さん,448さん,469さん,470さん、 教えてくれてどうもありがとうございました。 なんとか完成させることができました。 やっぱりポインターって難しいですね。 頭がパンクするかと思いました。 また質問することがあると思いますが、 そのときもまたよろしくお願いします。 おやすみなさい。m(_ _)mzzzzz
483 :
名無しさん@お腹いっぱい。 :2000/11/17(金) 04:12
>>477 つーか、この技法はセオリー。宿題はきれいに解こう。
この技法が単純に n 回乗算するよりも計算量以外に優れている点を
考察してレポートに書くと評価があがるかも。
学生時代を思い出すよ。
double ipow(double x, int n)
{
int n2;
double r;
for( n2 = abs(n), r = 1; n2; n2 >>= 1 ) {
if( n2 & 1 ) r *= x;
x *= x;
}
if( n >= 0 ) return r; else return 1 / r;
}
484 :
悩めるプログラマ :2000/11/17(金) 22:56
スプライン補間のソースありませんか?
powは使っちゃ逝けねえからきいてんだぼけえ
486 :
名無しさん@お腹いっぱい。 :2000/11/18(土) 18:17
age
487 :
山有り谷あり :2000/11/18(土) 18:20
お姉さんへ、Javaのメリット、デメリットを教えてください。 あとスリーサイズと、初体験の年齢
488 :
岡あり谷あり :2000/11/18(土) 20:03
おねーさん、ぼくにCを教えてください。それとおねーさんは、 プロですか?アマチュアですか?ぼくも、プロ・グラマーになりたい
C初体験は19の春でした。 たしかBSD-Cだったわ‥♪
40近くないかえ?
491 :
おねいさん :2000/11/18(土) 21:15
だってぇ、学校にはそれしかなかったんだもん。
492 :
>483 :2000/11/18(土) 23:54
ありがとうございます。がんばります。
493 :
厨房アマチュアグラマ :2000/11/19(日) 00:27
LINUXをつかってプログラミングの勉強をしてるんですが、 LINUXでのプログラミングの解説サイトあったらおしえてください。
∧ ∧ ────── (゚Д゚ ) < >> 一発殺ラセロー ⊂⊂\────── \ 〜 ──── <- し し ─────
495 :
おじいさん :2000/11/19(日) 06:17
BDS-C か、懐かしいのう。 Optimizing C-86 とか HiTech-C とか Power-C というのも あったのう。 わしは Lattice C 2.11 が C 初体験じゃった。
496 :
名無しさん@お腹いっぱい。 :2000/11/19(日) 06:20
セクースしてぇ、でへでへ。(よだれだらだら)
497 :
おじさん :2000/11/19(日) 11:25
初体験はα-Cだったなぁ‥Z用。
498 :
名無しさん@お腹いっぱい。 :2000/11/19(日) 18:38
for(n2=abs(n),r=1;n2;n2>>=1){ if(n2&1) 477です。調べてみたのですが483さんの abs(n)というのがよくわかりません。 n2&1というのは論理積というものでしょうか n2が1なら真になるということでしょうか
499 :
498 :2000/11/19(日) 18:49
>n2が1なら n2が0以外なら
500 :
SAGE :2000/11/19(日) 21:16
> n2が0以外なら n2が奇数なら
501 :
お姉さん :2000/11/19(日) 22:27
私の年齢? 花も恥じらう45歳。
>501 そりゃ花じゃなくても恥ずかしい年だな。 妄想してる奴が可哀相だから、そんな数字書くな。
503 :
名無しさん@お腹いっぱい。 :2000/11/19(日) 22:48
C++でC言語の free ptr に対応するのは delete [] ptr らしいの ですが、delete abc に対応する C言語の命令はなんなのでしょうか。
504 :
>498 :2000/11/19(日) 22:56
Cの&はビット演算子です。ビットごとの論理積をとります。 論理演算子の論理積は&&ですのでお間違えなきよう。
>>502 45なんてうそにきまってるでしょ.本当は20歳!(hexで)
506 :
お姉さん :2000/11/19(日) 22:57
何なんでしょう?私も知りません。
>>502 冗談です。本当はそれマイナス20歳です。
507 :
お姉さん :2000/11/19(日) 22:59
>503の名無しさん CのfreeとC++のdeleteは同等のものではないの。 C++でもmallocなんかで確保したメモリはfreeで開放します。 deleteはnewで確保したメモリに使います。 new〜[]で確保したメモリはdelete[]で開放。そゆこと。
509 :
お姉さん :2000/11/19(日) 23:01
なあああるほどね。
>>502 6進数で45歳なら10進数で29歳。まだまだ。
>503 new==malloc+コンストラクタ起動 delete==デストラクタ起動+free です。 deleteとdelete[]の違いは、そのオブジェクトをnewしたのが 単体か配列かによって。
512 :
お姉さん :2000/11/19(日) 23:03
お姉さん待機中。質問待ってます
あ、あくまでイメージね。 実装はどうなってるのか知らんよ。
あ、誤解しないでくださいませ。 イメージがそうであるってことで、 細かい事はもうちょっと違うかも。 そのへんよう知らんので、突っ込み勘弁。
newがmallocを間接的に呼び出すかどうかは実装によります。 freeとデストラクタを明示的によんでも、正常にdeleteできる 保証はぜんぜんありません。 特にnewは演算子オーバーロードされて期待とは全く違う動作に なっていることもあるのでご用心あれ。
516 :
498 :2000/11/19(日) 23:14
C習って1ヵ月くらいなのですがまったく??です。 どなたか完璧に説明してくれませんか。 ちなみに配列と関数の書き方しかしりません。 だれかおせーて
517 :
名無しさん@お腹いっぱい。 :2000/11/19(日) 23:19
あしたまでなんだよー あしたまでなんだよー あしたまでなんだよー あしたまでなんだよー
∧ ∧ ────── (゚Д゚ ) < >> 一発殺ラセロー ⊂⊂\────── \ 〜 ──── <= し し ─────
>516 504の回答じゃ、わからなかったのかな? abs(n)は、nの絶対値。 if(n2&1)は、n2の最下位ビットが1なら真です。
させたげません。おあずけ。 > ズレギコちゃん
数の表現の理解は大丈夫かの?簡単におさらい。 まず x の10乗と−10乗を求めることを考えよう。 −10乗の場合 は乗数の性質から 1 / (x の10乗)で求められる。 これから、負の乗数の場合も正の乗数を求めることに置きかえることができる。->abs で 10 は二進数であらわすと 1010 。 1*8 + 0*4 + 1*2 + 0*1 = 10 これはべき乗を最短の形で表しているよね。 それぞれのビットが求める答えになっているでしょう。 n の10乗 = 8乗×2乗 これから1、2、4、8乗を求めていき、n2 のビットが立っているところの 乗算値を答えの値にかけていけば良い。 for の条件式が n2 なのは乗数がオール0のとき終了することを意味し、 ループの中では n2 の最下位ビットを & 演算で調べ、1なら答えに掛ける。 次の演算のために x = x * x で x の2乗を求めて、 次のビットに着目するため n2 を1ビットシフトする。 最後に n の正負を調べ、負なら 1 / r を返す。
522 :
名無しさん@お腹いっぱい。 :2000/11/20(月) 02:15
おねいさま、503の名無しです。お答えありがとうございますです。 VisualC++のソースコードデバッガでトレースすると int* ptr = new int[100]; に対して delete ptr; も delete [] ptr; も同じ関数を(中身はfreeだけ)呼んでるので、 本当に違いがあるのかなと疑問に思ったのでした。 それともこれはオブジェクトが単純型だからなのかな?
デストラクタ呼んでる回数が違うんじゃない? delete[]だと、配列に入ってるオブジェクト全部にデストラクタ 起動していて、deleteだと先頭だけになっちゃうとか。
524 :
名無しさん@お腹いっぱい。 :2000/11/20(月) 02:52
つまり、intやcharみたいに最初からデストラクタがない型の場合は どちらを使っても同じと考えていいということでしょうか。
同じと考えては逝けません。 あなたの使っているコンパイラのあなたの使っているバージョンの あなたが使っている現在のそのライブラリなどを含めた環境だけで たまたまそうなっていたと考えるのが安全です。
526 :
名無しさん@お腹いっぱい。 :2000/11/20(月) 03:37
intやcharにはデストラクタが無いというのは C++の言語仕様に入っているの?
こんな厨房に何度も詳しく教えてくださってありがとうございます。 プログラマめざしてがんばります。感謝です。
理解できました!
529 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 01:41
WindowsのSDK(Win32API)のプログラムなんだけど 複数のWindowを作成するにはどうすれば良いかな? 複数のWindowというのは、親Window内に子ウィンドウを作ったり ダイアログボックス(モーダル・モードレス)を作ったりという 意味じゃなくて、親Windowと同等のWindowを複数作りたいんだけど。 子ウィンドウだと、親ウィンドウ内でしか表示できないし、ダイアログだと 制限あるし、困ってます。
530 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 04:39
親ウィンドウと同じクラス名でCreateWindowしろや、ボケ SDKで組むんだったらエキストラバイトの使い方くらい しっとるんやろな?ドアホ
531 :
529 :2000/11/21(火) 07:15
>530 エキストラバイトって、初めて聞きました。(w このスレの1には初心者って書いてあったので この程度なら良いかなと思ったんだけど、初心者過ぎたかな。 インスタンスハンドルに何を設定すれば良いのか、分からないのです。 ウィンドウハンドルは、親とは別のものを定義していますが インスタンスハンドルは、どのように取得すれば良いですか? 現在は HINSTANCE hInstance; hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); のようにしてますが、これじゃ親と同じですな。(w; +1とかしてみても駄目だし。 インスタンスハンドルは、どのように取得したら良いですかね?
>>531 CreateWindowに呉れてやるhInstanceのことを云っているのなら、
これはApplicationやDLLなどのモジュールのインスタンスハンドル
なのだから、親と同じなのは当然ぢゃないか。
面倒ならグローバル変数にでも保存しておき給え。
>親と同じなのは当然ぢゃないか。 あら、そうなのですか。 親と同じインスタンスハンドルを渡してるんですが。 では、ウインドウが作成できない理由は他にあるのか・・・。 とりあえず、がんばってみます。 ありがとう。
534 :
りょう :2000/11/21(火) 10:50
text/plainの送受信ができる、iモードのようなメーラーをCで作ってみたいんですが、 ヒントを下さい。お願いします。
535 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 12:19
>534 とりあえずTCP/IPの情報調べて、SMTPとPOPだけ覚えなされ。 ソケットつかってアプリ層だけ作るならたいしたことじゃない。
536 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 12:51
537 :
お姉さん :2000/11/21(火) 12:52
盛り上がってるな、よしよし。 なんか初心者向けの質問が少ないねえ・・こたえらんないよ。
>>537 という事は、みんなが努力しているうちにお姉さんよりレベルが上がって、
『お姉さんが、この板のレベルよりも低いレベル』になったの?
えと、一応ご報告。 複数Windowの表示出来ました。 532さんの言う通り、インスタンスハンドルは同じもので出来ました。 530、532の両氏、ご助言ありがとう。 ただ、未だに「エキストラバイト」ってわからないんですが。(w 複数の検索エンジンにかけても、それらしき結果が見当たらないのですが。 マジで、「エキストラバイト」ってなんですか?
540 :
名無しさんi486 :2000/11/21(火) 19:00
>>538 このスレッドの最初の方を見ましょう。
元々、お姉さんはレベルが低いのです。
プッ
543 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 20:01
>>539 もっとよく調べんかボケ!おまえのように一つのクラス名から
たくさんのウインドウを開くときに必要な技術だアホ!
CMyWindow *object = new CMyWindow;
::SetWindowLong(hWnd, GWL_USERDATA, (LONG) object);
hWndにobjectを結び付けておけば、必要なときに
object = (CMyWindow *) ::GetWindowLong(hWnd, GWL_USERDATA);
でhWndに関連する情報がとってこれるだろアホ。。。え?まだわからん
ってか!おまえどうかしてるぞ!!
char window_data[1024];
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, WPARAM wPrm, LPARAM lPrm)
{
if (uMsg == WM_KEY)
window_data[count++] = wPrm;
....
とかやって、同じウインドウを何枚も開くとwindow_dataがどうなるかわ
かるだろアホ!だから、
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, WPARAM wPrm, LPARAM lPrm)
{
CMyWindow *object;
object = (CMyWindow *) ::GetWindowLong(hWnd, GWL_USERDATA);
if (uMsg == WM_KEY)
object->window_data[object->count++] = wPrm;
....
こうやって、エキストラバイトを使うんだろが!ボケナス!こんだけ教えてやりゃー
ウインドウ・クラスライブラリーがスクラッチできるからやってみろやオオボケ野朗!
(素直にMFCでも使いやがれボケ!じゃナイト新しい機能が使えないぞドアホ!)
544 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 20:10
それとWM_KEYは、WM_CHARの勘違いだ大ボケ野朗!わかったか。 もう5年くらいWinDo$は、やってねぇーんだよ!
543は乱暴だけども、すごい親切だよな、ぜひコテハン化きぼん。
>545 コテハンは「おとうさん」あたりがしっくりきそう
カミナリオヤジってのはどだ?
>543 ああ、何か分かったような、分からないような…。 勉強します。 Windowを沢山作れたけど、マルチスレッドとかよく分からないから それぞれのWindowでの処理が上手くいかなくて、結局また悩んでます。 ダメジャン>俺。 っていうか、詳しいResありがとう。感謝します。 しかし、お姉さんからは難しいって言われるし、一方では ボケって言われるし、板ばさみだな。(w; この板のレベルが掴めない。
549 :
名無しさん@お腹いっぱい。 :2000/11/21(火) 21:22
別に複数ウインドウとマルチスレッドは直接関係ないんでは?
>>545 短気そうだからHNは『カルシウム不足』で十分だろう、彼には。
551 :
名無しさん@お腹いっぱい。 :2000/11/22(水) 01:36
C覚えたら次は何をすべきでしょうか。 アプリケーションとかゲームとか作りたいんですが、 visual C++とか覚えないと作れないんでしょうか。
どうもピントがあわない質問だな‥ ホントにC覚えた?
入門書読破したぜ! 完璧だ! 失礼な事聞くんじゃねえ!
芸風がビル・ジョブズみたいだぞ
555 :
名無しさん@お腹いっぱい。 :2000/11/22(水) 04:41
551は今日大人になったってことだろ?
556 :
お姉さん :2000/11/22(水) 04:54
>>538 そういえばこのごろ努力を怠っている気がするなあ。
>>540 うん、ギコ猫のがよく知ってるよ。
>>541 だからあここはあ初心者の館なの。わかった?よって私もそれほどレベルは
高くありません!
557 :
りょう :2000/11/22(水) 11:49
>>535 ,536
アドバイスありがとうございます。早速、SMTPとPOPについて勉強はじめたいと思います。
どこか参考になるような、サイトとかありますか??
私の理想??っていうのも変ですが、老人や子供(小学生)が簡単に扱えるような
構成のメーラーを作るっていうのが目標なんです。
頑張ってみます。
558 :
じろうくん :2000/11/22(水) 12:00
559 :
お姉さん :2000/11/22(水) 12:05
じろうくんだ。登場ありがとう! これからも頼むよ!
じろうくんずるいや。ぼくがいないあいだにお姉さんにとりいって!
561 :
名無しさん@お腹いっぱい。 :2000/11/22(水) 15:39
メーラーは日本語の扱いとかが非常に面倒だから やめたほうがいいぞ。
なんか変なキャラクターがどんどん増えていくな・・・
それより 単発の初心者質問に答えてやってくれ(;´Д`)
564 :
お姉さん :2000/11/23(木) 04:11
初心者質問ってどれかしら。。見あたらないのだけど。。
565 :
初心者 :2000/11/23(木) 13:48
あさんぶらをやってみたいんだけど、今のアセンブラってもう人間が理解できない 世界にいっちゃてるみたいで。。。。。 なんかいい方法ありませんか?
566 :
初心者 :2000/11/23(木) 13:49
おねーさんは幾つですか?根釜ですか?
567 :
初心者 :2000/11/23(木) 13:50
LINUXのディストリビューションはなにがいいですか?
568 :
初心者 :2000/11/23(木) 13:50
C#っていけてるの?
569 :
初心者 :2000/11/23(木) 13:51
これから一番稼げる言語はなんですか?
570 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 15:08
英語。
571 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 15:30
567>Vine 568>5年後に分かります 599>英語です
中国語も強そうだゾ。
573 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 18:57
>565 あせんぶらの何を勉強したいのかは知らないが 86系はとりあえずそこまでとんでもないことにはなっていないぞ。 「勉強したい」というレベルならとりあえず困らないだろう。 パイプラインとかキャッシュや予測分岐など、最初の86に比べると ややこしいことにはなっているけども、ゴリゴリの最適化とかを 考えない限りそういうことは当分気にする必要ナシ。
574 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 23:34
>>572 中国語はあまりおすすめしない。理由は
・「中国語」は文字でしか存在しない。
(会話は地方によって全く別言語。選ぶとしたら広東語か?)
・コンピュータを使う階層は大抵エリートだから英語ぐらいできる。
・こすっからい中国人と交渉するのに相手のネイティブ言語を使うのは不利。
575 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 01:13
2shutorebapuroguramatositeyatottekuremasuka?
576 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 01:56
//main.c #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> struct buf { int number; struct buf *prebuf; }; struct *buf input(); //ここがいけないみたいですけど・・ void change(); void display();void main(){ input(); change(); display(); }
577 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 02:09
UNIXのコマンドラインのカーソル表示/非表示を切り替える一般的な方法ってあるんでしょうか? 全てのUNIXマシンで稼動することと標準的なLIBしか使っていないGCCでコンパイルできることが条件です。よろしく。
ネタなのかマジなのか 空気が読めないっ
579 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 02:23
>578' 577です。 まじで知りたいです。僕が調べた限りではどうやらないような・・・気がしないでもないんですが
580 :
576 :2000/11/24(金) 02:33
です。あれはちょっとだけ融通の利くsortプログラムの一部です。かなり基本的な間違いなのでしょうけど、基本的だからこそ分からないとまったく先に進めません。なにとぞよろしく・・・・
581 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 03:01
576> こうしたらどうでしょうか? #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> typedef struct{ int number; void* prebuf; } buf; *buf input(); //ここがいけないみたいですけど・・ void change(); void display(); void main(){ input(); change(); display(); } んで、bufのなかのprebufはして使うとか・・・
582 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 03:02
↑ んで、bufのなかのprebufはtypecastして使うとか・・・
583 :
>575 :2000/11/24(金) 03:12
kannjiganyuuryokudekinaiuchihamuridesu.
584 :
> :2000/11/24(金) 03:18
> struct *buf input(); struct buf *input(); でないの? あと > struct buf { > int number; > struct buf *prebuf; > }; これは通ったか? struct buf; struct buf { int number; struct buf *prebuf; }; でないと、通らない処理系もあるぞ。
585 :
576 :2000/11/24(金) 04:03
>581,584さん ありがとうございました!無事コンパイルできました。深く感謝します。
586 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 04:13
>>577 Use tcgetaddr/tcsetaddr. See termios(4).
587 :
初しむ者 :2000/11/24(金) 10:47
588 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 10:50
バイナリって何でしょう?
>>587 えらー、そんな板orスレッドないです。
591 :
>588 :2000/11/24(金) 11:35
あなたが会員になる。そして会員を2人紹介するだけ。 それだけで半年後、あなたは大金持ち。・・・・という夢のようなシステムですよ
>>テキスト以外のファイル 『でもテキストファイルをバイナリで読み込めば、バイナリファイル』 なんつったりしてぇ
595 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 21:49
割り算を他の単純な演算に変換する手段がありましたら教えてください。
すぐ思い付くのは、割る値を2の乗数に限定すれば、
それを -1 して立ったビットを数えて、それを右シフトすれば出ますが、
例)割る値(denom)を2の乗数(2,4,8,16,32,64,128,256,...)に限定したdiv()
static const int = bitcnttbl[0xf] = {
0+0, 0+1, 0+1, 0+2, //bin 0000 0001 0010 0011
1+0, 1+1, 1+1, 1+2, //bin 0100 0101 0110 0111
1+0, 1+1, 1+1, 1+2, //bin 1000 1001 1010 1011
2+0, 2+1, 2+1, 2+2, //bin 1100 1101 1110 1111
};
div_t mydiv2(int num, int denom) {
div_t d;
int mask = denom - 1;
int maskbitcount
= bitcnttbl[mask&0xf] + bitcnttbl[(mask
>>4 )&0xf]
+ bitcnttbl[(mask
>>8 )&0xf] + bitcnttbl[(mask
>>12 )&0xf] //;//16bitならここまで
+ bitcnttbl[(mask
>>16 )&0xf] + bitcnttbl[(mask
>>20 )&0xf]
+ bitcnttbl[(mask
>>24 )&0xf] + bitcnttbl[(mask
>>28 )&0xf];
d.quot = num >> maskbitcount;
d.rem = num & mask;
return d;
}
こういった方法を他の半端な値にたいしても行ないたいのです。
本来の割り算より効率が良くなければ意味が無いのですが。
#上の方法もbitの数える部分で効率が良いとはとても言えないけど…
596 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 21:56
あ、595の >static const int = bitcnttbl[0xf] = { は static const int = bitcnttbl[0x10] = { の間違いでした。
597 :
>595 :2000/11/24(金) 22:22
598 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 23:06
抜きたいなー
599 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 23:07
抜きたいなー
600 :
お姉さん :2000/11/25(土) 02:08
そうか。。初心者じゃなくてウルトラ初心者って 書けばよかったんだ。。
お姉さん、どうか初代ウルトラマンの役やってた人教えてくださいっ
それはウルトラ上級者になってから。
まんこ見せてください。
604 :
名無しさん@お腹いっぱい。 :2000/11/25(土) 06:56
。 (|) *
605 :
お姉さん :2000/11/25(土) 11:03
初代ウルトラマンの役?谷隼人。
606 :
ちゅーぼー :2000/11/25(土) 11:08
お姉さんは美人ですか?
馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ
馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ馬鹿バッカリ
さて、続けようか。
BCBで使えるプロファイラってありませんか?
611 :
名無しさん@お腹いっぱい。 :2000/11/26(日) 02:14
>>604 わーい、まんこだまんこだ。
ありがとう。
612 :
名無しさん@お腹いっぱい。 :2000/11/26(日) 02:51
こんどマルチプロセッサのタスクスケジューリングとそれに用いる遺伝的アルゴリズムのプログラムを製作しないといけません。〆きりが今週の水曜です。アドバイスください。
614 :
>612 :2000/11/26(日) 03:41
『遺伝的アルゴリズム』ってゆー言葉がイマイチわからんちんなので コメントの仕様がありません。いかんともしがたい気分です。
しめきりが今度の水曜なのはよくわかった。 で、そのしくだいはいつ出されたのかと 自分でどこまで調べたり作ったりしたのかいうてみ。
616 :
名無しさん@お腹いっぱい。 :2000/11/26(日) 12:12
APIって何? どうやって使うんですか? リファレンスみたいなのってありますか?
>APIって何? えぴーあいという意味でございます >どうやって使うんですか? >リファレンスみたいなのってありますか? お買いあげになった方だけが分かるのでございます
618 :
名無しさん@お腹いっぱい。 :2000/11/26(日) 13:49
なんのAPIが知りたいのか知らないが WinならMNDN逝け
MSDNか? API本は高いぞ
>>617 もとネタは謎の老婆グッズシリーズだな?
622 :
名無しさん@お腹いっぱい。 :2000/11/27(月) 00:48
全然関係ないけど、お姉さんはクリスマスは仕事ですか? 私は仕事です。クリスマスまで、PCとにらめっこは苦痛です。鬱だなぁ。
623 :
おねいさん :2000/11/27(月) 01:36
がんばってね! >622
624 :
ぱくぱく名無しさん :2000/11/27(月) 09:50
誰か私の宿題を手伝ってください。int dealの後Return文を書かなければ ならないのですが、書き方がわからないのです。(今までVoidしか使った事がなかったので。) これは英語のプログラミングですが、よろしくおねがいします。一応、 ブラックジャックを学ぶためのプログラミングです。 #include <conio.h> #include <iostream.h> #include <stdlib.h> /* int deal(void) //ここに1から11のランダムナンバーがでるようなファンクションを入れる。 */ void main(void) {int Knowledge[31],Card1, Card2, Hit, Score, Previous, Games, P; char Answer; for(P=0;P<31;P++) Knowledge[P]=1; cout<<" カードのナンバーを2つ入れよ。真中にスペースを忘れずに。"<<endl; for(Games=0;Games<16;Games++) {cout<<"私のカードは何?";cin>>Card1>>Card2; Card1=rand()%11+1; Card2=rand()%11+1; cout<<"私のカードは"<<Card1<<" "<<Card2; Score=Card1+Card2; Previous=Score; while ((Score<22) && (Knowledge[Score]>0)) // Ask for hit if not busted, // or have not yet learned to stand on this score {cout<<"Hit me";cin>>Hit; Hit=rand()%11+1; cout<<" "<<Hit; Previous = Score; Score = Score + Hit; } cout<<endl; if (Score<22) Answer='y'; else Answer='n'; cout<<"I stand, 私は勝った? (y/n)"; cin>>Answer; if (Answer == 'y') Knowledge[Previous]++;// Reward the machine else Knowledge[Previous]--; // Punish the machine } cout<<"My knowledge base contains the following numbers "<<endl; for (P=0;P<22;P++) cout<<"Cell "<<P<<" contains "<<Knowledge[P]<<endl; for (P=0;P<22;P++) cout<<Knowledge[P]<<" "; cout<<endl; }
>>624 > int dealの後Return文を書かなければ
> ならないのですが、書き方がわからないのです。(今までVoidしか使った事がなかったので。)
関数の書き方が分からない、と推察します。
1から11のランダムな数値を返す関数をdealとした場合、
以下のような書き方になります。
// 関数の宣言
int deal( void );
void main( void )
{
// 中略
Card1 = deal();
// 中略
}
// 1から11のランダムな数値を返す関数
int deal( void );
{
return rand() % 11 + 1;
}
626 :
622 :2000/11/27(月) 23:06
その感じだったら、お姉さんはお休みかぁ〜いいなぁ〜 彼氏といちゃいちゃするんだろうなぁ〜いいなぁ〜
おねいさんはその日は海外の予定。お仕事は早めに終わらせておくの。 代休もたまってるし‥ハァ‥
628 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 09:23
>627 平日のそんな時間にここ見てるなんて おねいさん、かなり可哀相な環境なのね。
年末にまとめて休みとるために、ここんとこちょっと無理してます。 ちなみにブラインドタッチはできるけどどっちでもいいと思ってる派。 そ〜ゆ〜問題じゃないか‥はぁ‥
630 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 13:06
#include <iostream> #include <fstream> using namespace std; void main() { cout.seekp( 3, ios::beg ) << "hello\n"; } こうしてもディスプレイからの出力はし-くされません ファイルでなくディスプレイからの出力で 最初や途中から上書きするにはどうすればいいのですか? 文字べ-すでてとりすやいんべ-だを作りたいのですが それに必要です、できればC++で教えてもらいたいのですが Cでもいいです、誰かたすけてください
631 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 14:02
入力された整数が2の累乗であるかどうかを判断するには どうすればいいでしょうか 1日考えてもわからない俺ってアホですか?(TT
>>631 switch(num){
case 1:
case 2:
case 4:
...
case 1073741824:
case 2147483648:
break;
}
半分ネタだけど、半分マジだからね。 整数の範囲を限定してしまっているけど、それは実装に合わせて。
int random( int m, int n ); n-mの範囲の値を返す関数。
>>631 while (num > 1 && num % 2 != 0) num /= 2;
この結果 num == 1 になれば numは2の累乗。
>>635 while (num > 1 && num %2 == 0) num /= 2;
の書き間違い。失礼しました。
>>631 if((double)num == pow(2,(int)(log((double)num + 0.1) / log(2.0))))
0.1をプラスしているところがミソ
639 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 16:24
入力をyとして x=1から初めて xを2倍しながら xとyが 一致するかどうかチェック。 x>yになったらそうでない
640 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 18:03
>>631 浮動小数点に変換して fxtractで仮数部が値1かどうか確認する
641 :
612 :2000/11/28(火) 21:18
>615 あんまり当てにしてないで適当に書いたんですけど、真面目にレスくれてありがとうございました。しかしあしたはもう水曜、ノートに計画は書いたのですけどプログラム自体は0%、お・て・あ・げ。
642 :
>612 :2000/11/28(火) 22:07
折角相手して貰ったのにねえ 自分が悪いんだからしょうがないね でも、何かでっちあげるには十分な時間だぞ さあ時計を見て、でっちあげられる事を考えろ
643 :
612 :2000/11/28(火) 23:27
>642 それがですねぇ〜・・・3人でそれぞれプログラム作ってて共通部分もありますがアルゴリズムや手法がそれぞれ違うので基本的には一人でつくらなければならない・・・にもかかわらず3人が3人とも現時点でまだファイルの入出力やらをやっているのです。おまけにうちの助教授は講義でずーと座って本を説明するくらいやる気の無い人物で夜型でひきこもりでアニヲタでガンヲタで棚には声優のCDが満載で綾波で・・なので1週間の遅れくらいどーってことないと自分達高をくくっています。 それでもやっぱり期日には仕上げたいなァ〜というのが心情で612書いたのですけど・・・・うちの研究室やばいなぁ〜・・
>>632 -640
の方々、ありがとう〜
こんなにまともなレスがつくとはビックリです(失礼
>>632 -633
さすがにそれを実装するのはちょっと(^^;
しかし、そんなに数は多くないのでできなくはないですね
ただ機種依存しそうなんで
>>634 ?
>>635 -636
これは一番わかりやすくて、安心して使えますね
計算時間もたいしたことはないので十分つかえますね
>>637 こ、これは何をやってるんでしょうか?
試したところちゃんとなりましたけど、どうしてなるのか誰か証明してください(w
ループを使ってないところが凄いです
>>638 コーディングの仕方がわかりません(T−T
誰か教えて〜
>>639 これは考え方としては635さんの逆バージョンですね
>>640 これもコーディングがわかりません〜
fxtractってアセンブラじゃないですか?アセンブラはわかりませ〜ん
結構いろいろな方法があるんですね、勉強になりました
>>644 y = a^x ←→ x = log_a y = (log y / log a)
というlogの性質を使うのが
>>637 の方法。
y = a^x において、a = 2かつx = int xなら、
y = 2^x = 2^(int x) = 2^(int(log_2 y)) = 2^(int(log y / log 2))
が成り立つ。0.1を足しているのは浮動小数点演算の誤差対策。
>>645 書き込もうと思ったら先を越された。その通りです。
補足するなら、ある整数nが整数aで割り切れるか、を調べたいとき、
(% とか MOD とか使えない場合ね)
if(n == (n / a) * a)
で調べられるでしょ。それを累乗に応用しただけ。
ちなみに、0.1を足さなかったら、私のテストした環境 BC3.1 では、
16384が2の累乗じゃ無いって事になるんだなあ。
647 :
名無しさん@お腹いっぱい。 :2000/11/29(水) 16:38
あるデータの集合に対するポインタがリスト状に(線形に)あり、そのポインタの中からランダムにひとつを選びたいのですけど、どのようにすればよいでしょうか?
648 :
名無しさん :2000/11/29(水) 16:47
for (list<hogehoge>::itetarator it = x.begin(); time(NULL) % radomkansuu(); it++); //だろうね
649 :
647 :2000/11/29(水) 17:01
Cでお願いします
650 :
名無しさん :2000/11/29(水) 17:06
{node *p; for (p = root; time(NULL) % RANSUU % YOUSOSUU; p = p->next);}
651 :
名無しさん :2000/11/29(水) 17:08
条件(counter < YOUSOSUU)で ループ終端でcounter++だった。
652 :
647 :2000/11/29(水) 17:23
すいません、どのようにして乱数が作用しているかわかりません。
653 :
名無しさん :2000/11/29(水) 17:30
リスト辿っててランダムに中止する。 乱数とって割り算のあまりとって確立調整。 二で割ってあまり0なら50%。 で末端超えないように回数の上限どっかにおく。 殴り書きでスマセン。
>>644 648の実装例
int bitcount(unsigned x)
{
int b;
for(b = 0; x != 0; x >>= 1) {
if(x & 01) b++;
}
return b;
}
>653 なるほど!わかりました!ありがとうございました。
おねえたん
な〜に?
659 :
かも :2000/11/30(木) 23:34
3元連立方程式をLU分解で解くプログラムを教えて。C言語でね。
661 :
あげ :2000/12/01(金) 00:04
文字列検索で入力した文字を1文字ずつ照らし合わせていくプログラム を教えてください。
662 :
あげ :2000/12/01(金) 00:09
っていうか構造体のメンバで定義したcharの配列に入ってる1文字1文字のアドレスの 指定の仕方がわかりません。
663 :
あげ :2000/12/01(金) 00:38
っていうか分かんねぇんだよゴルァ!! 今すぐ1から10まで教えろ。
664 :
名無しさん@お腹いっぱい。 :2000/12/01(金) 00:53
っていうかマジデわからんのでよろしく頼む。661はミス。 662を頼む。 厨房ですまん。
665 :
あげ :2000/12/01(金) 01:13
っていうかわかったのでもうよし。
LPC(線形予測)のコードを教えて下さい。 または所在のリンクでも良いです。 C言語で宜しくお願いします。
自分で考えろゴルァ!!
668 :
名無しさん@お腹いっぱい。 :2000/12/01(金) 02:53
666うざい逝ってよし
669 :
名無しさん@お腹いっぱい。 :2000/12/01(金) 03:06
獣の数字だね。>666
671 :
647 :2000/12/02(土) 19:02
タスクスケジューリングでタスクを構造体で作ろうとしているのですが、今一つきまりません。 次のタスクをさすメンバがもちろん必要なんだろうと思うんですけど、2つ以上さす場合はいったいどうすればいいか悩んでます。あと前のタスクをさすメンバは必要なのかということについても悩んでいます。どなたか詳しし方いらっしゃりませんか? C言語で書いています。
672 :
名無しさん@お腹いっぱい。 :2000/12/02(土) 19:15
削除とか挿入を容易にしようと思ったら、双方向にすべきでないかい?
673 :
名無しさん@お腹いっぱい。 :2000/12/02(土) 19:23
というより配列にするだろ。 そういう低レベルな処理だと安定性と高速性を重視
674 :
名無しさん@お腹いっぱい。 :2000/12/02(土) 19:29
>672 ひとつのタスクが複数のタスクをさす場合はどうすればいいですか? >673 おれはデータをファイルから格納するとき構造体の配列にするということですか?
675 :
674 :2000/12/02(土) 19:39
”おれは”じゃなくて”それは”です。
676 :
673 :2000/12/02(土) 20:07
>>647 きみは
>>612 ではないのか?
まあそれはおいといて
文字通り、動作中も配列にすればよかろうという事だ
677 :
名無しさん@お腹いっぱい。 :2000/12/02(土) 20:12
VCで簡単に使える、正規表現のライブラリってないですか? ワイルドカードレベルのパターンマッチングができればいいのですけど。
678 :
673 :2000/12/02(土) 20:28
>676 ご名答、612です。 締め切りはあやふやになりました。
679 :
673 :2000/12/02(土) 20:37
具体例お願いします!
680 :
673 :2000/12/02(土) 21:29
struct task{ int number; int size; struct task *predecessor; struct task *successor; }; こういう感じにした場合、どういう問題点があるのでしょう?
閑古鳥がないている
ポロッポー
>>?-680 配列とリストの組み合わせ。 つーか、そんなコンテナの構造なんて隠蔽しとけ!
684 :
名無しさん@お腹いっぱい。 :2000/12/03(日) 00:09
>683 い。。隠蔽とは!!? 初心者厨房なのでもうさっぱりです。
デザインパターンの本でも読め。>684
686 :
名無しのエリー :2000/12/03(日) 03:46
そんな酷なァ・・・初心者にそれはあんまりだ・・
687 :
ギコハト :2000/12/03(日) 03:55
酷、言うな。初心者なら勉強シロ。 無いならとりあえず図書館で借りるか、買っとけ。入門書買うより損は絶対に無いから。 ついでに、隠蔽のメリットはあとですげ替え可能な点ね。
ここは相談スレだから少なくても単なるオシエテ君以外にはわかるように教えてやろうや。
>688 じゃあまずおまえがおしえてヤレ
C++ なら private で隠せってことかな? この辺はC++の「クラス」ってのを調べればわかるんじゃないかと。 C でやれつうのならよくわからん。俺も勉強不足ゆえにな。 別にギコハトの言ってることは至極最もだと思うし共感するが 見てるとクレイマーに見えそうなのでな。 書き方が素っ気無いのは別にいいのだが。
>690 たとえば〜〜〜 リストのルートへのポインタを非externのgrobalにすれば、 同一ソースファイルの外からはアクセスできません。 そのグローバル変数にアクセスする関数だけを同一ソース ファイルに作成し、外部参照できるようにしておけば、 簡易隠蔽完成!っす。
>690 privateどうこうじゃなくてC/C++に限らず、コンテナの実装を隠せっていってるの。 とりあえず固定配列でもなんでもいいから動くようにして、 あとで最適なデータ構造にすげ替えれる余地を作れ、と言いたかったわけ。
隠蔽というより抽象化といったほうが良かったかもね>ギコハト
昔見たCのソースで 外部にはvoid*で保持させて 内部で任意の構造体のポインタにキャストして使う ってやり方をしているのがあったよ
|| (,,゜д゜) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|| /_ノ _) <
>>694 Cなら当たり前だな
||__//y_y____ \__________
||~~~~~~~~~~
696 :
名無しさん@お腹いっぱい。 :2000/12/03(日) 13:54
>>694 俺の場合はそのケースで「キャスト」は使わないことが多いな。
↓みたいにする。
後は、Windowsの世界だと、void*ではなく、それのtypedefである
HANDLEを使うことも多い。
int foo(void *cookie)
{
struct cookie_t * cp = cookie;
:
}
697 :
>694 :2000/12/03(日) 14:19
今、そのやり方で作った所だ というかCだと別ファイルならキャストせずにそのまま使える DLLとかで公開する時には便利。 利用者に情報を公開しなければ確実にインターフェース関数を 呼んでくれるからな
698 :
名無しさん@お腹いっぱい。 :2000/12/04(月) 21:08
入力した数値をランダムに指定した数に分割するプログラムをつくりましたのですけど、分割数がおおきくなるとメモリエラーがでます。解決方法をおしえてください。 //devide.c #include <stdio.h> #include <stdlib.h> #include <time.h> int randomizer(int a); typedef struct p{ int a; int error; }proc; void main() { int bunnkatu; proc *x; int yousosuu; int i; int temp; x = NULL; printf("要素数を入力してください\n要素数="); scanf("%d",&yousosuu); printf("分割値をいれてください。\n"); scanf("%d",&bunnkatu); x = (proc *)calloc(bunnkatu,sizeof(proc)); if(x == NULL)exit(-1); for(i=0;i<bunnkatu;i++) { if(i== (bunnkatu -1)){ (x+i)->a = yousosuu; break; } temp = randomizer(yousosuu); (x+i)->a = temp; yousosuu = yousosuu - temp; } printf("結果!!!\n"); for(i=0;i<bunnkatu;i++)printf("%d\n",(x+i)->a); free(x); }//end of main int randomizer(int i){ int a; srand((unsigned)time(NULL)); a = rand()%i + 1; return a; }
> 分割数がおおきくなるとメモリエラーがでます。 > 解決方法をおしえてください。 根本的な解決方法は残念ながらありません。 しかし、メモリエラーを出しにくくする方法はあります 1.物理メモリを増やす 2.確保する構造体のサイズを小さくする、 または、構造体の要素数に制限を持たせる
700 :
698 :2000/12/04(月) 21:41
>699 しかしこのプログラムで用いているメモリの量はたいしたことないように思えますけど。使用するメモリは数十キロバイトとかではないのでしょうか?
>698 具体的にどのくらいの値にするとエラーになんの?
>>698 > 使用するメモリは数十キロバイトとかではないのでしょうか?
なぜ、数十キロバイト?
callocで指定している値はscanfから取得しているんで
INT_MAXも指定できると思うが?
sizeof(int) == 4の場合、多分INT_MAX = 約2G byteだから
そんな値を入力したら、数百M byte位しか実メモリを積んでいない
パソコンは大概メモリ確保エラーになると思う
それとも、数十キロバイトでメモリ確保エラーが起きるってこと?
703 :
698 :2000/12/04(月) 22:15
>701 8くらいから起きます。 >702 数十キロバイトというのは、ほかのこれよりかなり小さいプログラムで、友達が使用するメモリはせいぜい数十キロバイトくらいだろうと言っていたのでそう書きました。 たくさんメモリを確保する必要がある場合はどのようにすればいいでしょうか?
本当にメモリ確保でエラーになっていたのか? 俺が確認したところ、いきなり0除算のせいで、floating exception が発生した(関数randomizerに0が渡るためだ)。 そもそもこの仕事にはメモリ確保は不要であるし、 randomizerの中で毎回srandを呼んでいるなど、好ましくない点は多い。 以下のは適当に書いた例だが、ちゃんと自分で理解した上で 自分の力で書き直してみるとよいだろう。 #include <stdio.h> #include <stdlib.h> #include <time.h> int randomizer(int max) { return rand() % max + 1; } int main() { static const char *tab[] = { "要素数", "分割値" }; int i, val[2], youso, bunkatsu, tmp; srand(time(NULL)); for (i = 0; i < 2; ++i) { printf("%sを入力してください\n%s = ", tab[i], tab[i]); if (scanf("%d", &val[i]) != 1) { fputs("入力エラー\n", stderr); return 2; } } youso = val[0], bunkatsu = val[1]; puts("結果!!!"); for (i = 0; i < bunkatsu && youso > 0; ++i) { printf("%d\n", tmp = randomizer(youso)); youso -= tmp; } for (; i < bunkatsu; ++i) puts("0"); return 0; }
705 :
698 :2000/12/04(月) 22:39
実はこのプログラムの機能自体はどうでもいいんです。いまつくっているプログラムでメモリ操作がうまくいかなくて、同じようなメモリ確保をするプログラムをつくってみたのです。
706 :
花と名無しさん :2000/12/04(月) 22:45
>> 698 > 分割数がおおきくなるとメモリエラーがでます。 こう判断したことが誤りです。実は除算エラー(ゼロで割った)が起こっています。 エラーメッセージの意味を正しく読み取る努力をする、とか デバッガなどの道具でエラーが起こった場所を特定するとか、 そういう努力をするとこの山を越えられるぞ。 今日のところは、実行中の変数の様子を表示する printf を突っ込んで いろいろ実行してみな。 例) for() ループの末尾(じゃなくてもいいけどさ)の様子を見る。 // ... (x+i)->a = temp; yousosuu = yousosuu - temp; printf("ループの[i = %d] ... temp = %d 取り分けるぞ。あと %d 残ってるぜ。\n", i, temp, yousosuu); // これを追加 } ついでに乱数を使ってどんな値を作っているかも覗いておく。 srand((unsigned)time(NULL)); printf("ramdomizer(%d) ... %d での剰余、ってのは %d で割る、ってことだぜ。\n", i, i, i); // これを追加 a = rand()%i + 1; ※ いろいろな値で実行すれば、下の方の printf には、じつは「答え(失敗の理由)」が書いてあることが判ってもらえると思う。
707 :
706 :2000/12/04(月) 22:47
704に先を越されてた。ハヅカシー(藁
>>705 そういうことは最初から言えよ...
それと、メモリ確保がどういう形でエラーになっているのか
(カーネルに殺されているのかcalloc/mallocがNULLを返しているのか)
と、環境(OS)も書くべきだ。
それと、以下のプログラムはどういう挙動を示す?
int main()
{
size_t block;
for (block = 1024; malloc(block); block += 1024)
fprintf(stderr, "%ld\n", block);
return 123;
}
709 :
名無しさん@お腹いっぱい。 :2000/12/04(月) 22:52
>>705 「同じような」ってエラーの出方も本当に同じかい?
上で指摘された 698 での誤りを見ると、本当にメモリの確保のやり方が
失敗しているとは思えんぞ。
>>704 すまん↑のmallocの引数は1024にしてくれ。
あまりにも時間がかかりすぎてイライラするようであれば
100K単位とか1M単位にすればいいだろう。
711 :
698 :2000/12/04(月) 23:16
エラーメッセージは ”例外 unknown software exception(0x0000094)がアプリケーションの0x0000027で発生しました” が2回と ”例外 unknown software exception(0x0000027)がアプリケーションの0x77f0c518で発生しました” が一回です。 これが除算エラーですか? 708さんの問題には手も足もでません。まだ超初心者ですので・・・ わからないもの size_t,mallocのこの場合の使い方,fprintf,stderr(スタンダードエラーと読めそうだけど使い方さっぱり),%ld,123
>>711 708は別に「問題」のつもりじゃなくて、「動かして見れ」という
つもりだったんだが....。
わがんねんなら説明すると、単純にエラーになるまでメモリを要求
しつづけるプログラム。
まあでも、原因は「メモリ確保エラー」じゃなくてやはり
バグのようだから、試さなくていいぞ。デバッガ使うなどして、
ちゃんと調べるんだね。
# それにしても上の710は俺なんだけど何をトチ狂ったか"204"に
# なってるな。スマソ。
>709 エラーメッセージの16進数を読もうとしてないんです。最近ランタイムエラーに悩まされて毛嫌いしていて・・・
>708 しかしエラーでて動きませんが・・・
715 :
onegai :2000/12/05(火) 11:21
10個の整数値をキーボードから読み込んで、それらの合計、平均値、最大値、 最小値を求めるプログラムを作成せよ.配列を使用すること.
717 :
onegai :2000/12/05(火) 11:26
cです。
>>715 なにがわからないのでしょう?
・10個の整数値をキーボードから読み込む処理
・それらの合計、平均値、最大値、 最小値を求める処理
・配列の使い方
・全部
719 :
onegai :2000/12/05(火) 11:35
全部です。ど素人に愛のてを
>>719 #include <stdio.h>
#define MAX_DATA 10
#define ArrayOf( ary ) sizeof (ary) / sizeof (ary[0])
static int sum( const int *, const size_t );
static int avg( const int *, const size_t );
static int max( const int *, const size_t );
static int min( const int *, const size_t );
int main( void )
{
int data[MAX_DATA];
int cnt;
for ( cnt = 0; cnt < ArrayOf( data ); ) {
cnt += scanf( "%d", &data[cnt] );
fflush( stdin );
}
printf( "sum %d\n", sum( data, ArrayOf( data ) ) );
printf( "avg %d\n", avg( data, ArrayOf( data ) ) );
printf( "max %d\n", max( data, ArrayOf( data ) ) );
printf( "man %d\n", min( data, ArrayOf( data ) ) );
return 0;
}
static int sum( const int *dat, const size_t num )
{
int cnt;
int tmp;
tmp = 0;
for ( cnt = 0; cnt < num; cnt++ )
tmp += dat[cnt];
return tmp;
}
static int avg( const int *dat, const size_t num )
{
return sum( dat, num ) / num;
}
static int max( const int *dat, const size_t num )
{
int cnt;
int tmp;
tmp = dat[0];
for ( cnt = 0; cnt < num; cnt++ )
if ( dat[cnt] > tmp )
tmp = dat[cnt];
return tmp;
}
static int min( const int *dat, const size_t num )
{
int cnt;
int tmp;
tmp = dat[0];
for ( cnt = 0; cnt < num; cnt++ )
if ( dat[cnt] < tmp )
tmp = dat[cnt];
return tmp;
}
721 :
onegai :2000/12/05(火) 12:48
エラー102個と出ましたけど・・
722 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 14:09
>#define ArrayOf( ary ) sizeof (ary) / sizeof (ary[0]) 前々から思っているんだが、こういう類の危ないDEFINE使うのは いい加減止めてほしい。専門学校の提出課題じゃないんだから。
723 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 14:32
>>722 > こういう類の危ないDEFINE使うのはいい加減止めてほしい。
マクロにはいろいろな副作用がある事は認めますが、
このマクロにはどのように危ないと思ったのでしょう?
724 :
>723 :2000/12/05(火) 14:45
名前が気に入らないのでは? ArraySize とかならokだったとか・・・・
725 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 14:46
いや、関数の引数の時にどうなるかってことじゃないかな?
726 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 14:52
まさか、 static int sum( const int *dat ) { int cnt; int tmp; tmp = 0; for ( cnt = 0; cnt < ArrayOf( dat ); cnt++ ) tmp += dat[cnt]; return tmp; } こう書く奴もいるかも知れないってこと? # こんなことする奴の方がアホだと思うが
ArrayOf --> ARRAY_OF ary --> _ary ならどうよ?
728 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 14:59
#include <stdio.h> int main(int argc, char* argv[]){ char a[10]; char* b; char c; printf("A:%d B:%d C:%d \n", sizeof(a),sizeof(b),sizeof(c)); } HP-UXのCCでA=10,B=4,C=1。 B/C=4になるよ。危なくて使えないよ。
マクロは括弧でくくる
730 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 15:08
>>726 でも言っているが
> B/C=4になるよ。危なくて使えないよ。
B/Cをやる奴がアホ
ポインタと配列の違いが解らない人は使わないほうが良い。
731 :
725 :2000/12/05(火) 15:56
>>726 ちがうよ。 その最初の行が
static int sum(int dat[32] )
だったらどう?
このマクロが32を返すように思う人が居ても責められないと思うが?
732 :
725 :2000/12/05(火) 15:58
でもアムナイとは思わないな。 実際オレも使うし だいたいがアムナイのがC言語らしい使い方じゃないの? 安全が好きならpascalでどうぞ
void test(int arg[5]) { int array[5]; printf("arg = %d array = %d\n", sizeof(arg), sizeof(array)); }
違いが分からなくて危ないって言う奴は sizeof演算子は使わないほうがいい。
735 :
715 :2000/12/05(火) 16:36
715ですけども これってどれぐらいのレベルでしょうか?? 全くのど素人が出来るんでしょうか?? しかも、これは1番の問題であと4題あります。
736 :
助けてください。 :2000/12/05(火) 16:52
このプログラムはどうやってつくればいいですか? ∫4÷(1+a×a) (∫の上限は1、下限は0) 台形法およびシンプソン法で 円周率の小数点第6位まで一致させるのに 必要なn(整数)の値を決定するプログラムを作りなさい。 提出期限が明日までなのに全然出来てません。 C言語です。助けてください。
737 :
>735 :2000/12/05(火) 17:20
母集団にもよりますね コン専学校なら、出来るか出来ないかのレベルは中央値でしょう 工業系の大学ならこれが出来ないのは2σ付近 この板を覗いてる人の中では3σ付近ではあるまいか
738 :
>736 :2000/12/05(火) 17:23
素直に それぞれの方法でnを増やしながら発見させればよろしいのでは? もし台形法やシンプソン法のレベルでわからないというのなら、 何か芸を見せなさい。後は芸の出来如何です
739 :
735 :2000/12/05(火) 18:18
735です。 理工学部です。2σ付近 ←意味が分かりません??
>>735 >715ですけども
>これってどれぐらいのレベルでしょうか??
これがまったく解らなかったら
プログラマはあきらめた方がいい
741 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 18:33
>739 偏差値70以上の人という意味じゃない?
つまりコン専>工業大>2chって事? それともマイナス3シグマか
743 :
>736 :2000/12/05(火) 23:23
まず 1/(1+a^2) の不定積分は判るね? --->atan(a) だから答えは 4(atan(1)-atan(0))=πだろうと予想がつく で、その問題は、やっぱりnを大きくしていって誤差が収まるnを求めればいい そのためには、シンプソン法,台形法のそれぞれ nを引数にして求める関数を作っておく あとはnを大きくしていってその誤差が 1E-6以内に収まるところをでっちあげればいい 適当にでっちあげると #include <stdio.h> #include <math.h> double func(double x){return 4.0/(1.0+x*x);} double daikei(double a,double b,int n) { int i; double dx=(b-a)/(double)n; double y0=func(a); double sum=0; for(i=1;i<n;i++) sum += func( a+=dx ); return (sum*2+(y0+func(b)))*dx/2.0; } int test( double (* sum)(double a,double b,int n) ) { int nmax=10000; int i; double end=sum(0,1,10*nmax); for(i=10;i<nmax;i++)if( fabs(sum(0,1,i)-end)<0.0000001 )return i; return 0; } int main() { int d1=test(daikei); printf("台形法では n=%d で %12.8f\n",d1,daikei(0,1,d1) ); return 0; }
744 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 23:28
visualbasicで立体の表面積を計算するプログラムを教えてくださいマジデ
745 :
>744 :2000/12/05(火) 23:30
その立体のデータ構造はどう入力されるのよ
746 :
744 :2000/12/05(火) 23:36
>>745 すいませんよくわからないんです。。
立体の表示まではできているんですけど。。(というかそこまでは教科書にあった)
747 :
744 :2000/12/05(火) 23:38
そのプログラムが今手元にないのでまた来ます。。 ありがとうございました。よろしくお願いしますです。。
748 :
>744 :2000/12/05(火) 23:41
3次元中の3角形の面積を求める公式は知ってる?
749 :
744 :2000/12/05(火) 23:49
>>748 面積= (Sqr((2) * b(3) - a(3) * b(2)) ^ 2 + (a(3) * b(1) - a(1) * b(3)) ^ 2 + (a(1) * b(2) - a(2) * b(1)) ^ 2)) / 2
でよろしいんでしょうか?
750 :
744 :2000/12/06(水) 00:48
Dim nf As Integer Dim a(3), b(3) For j = 1 To nf /* 構成面数だけ繰り返す */ s = 0 /*面積sの初期化*/ For i = 1 To (fnv - 2) /*いくつの三角形ができるか*/ s = (Sqr((a(2) * b(3) - a(3) * b(2)) ^ 2 + (a(3) * b(1) - a(1) * b(3)) ^ 2 + (a(1) * b(2) - a(2) * b(1)) ^ 2)) / 2 /*三角形の面積を求める式*/ s = s + s Next i Next j Print (s) こんな感じだと思うんですけれど、うまく動いてくれないんです…。
がんばれ下げ
752 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 04:37
おねえさん、教えてください。 正の数 n を正の数 m で割り算して、答えを正の無限大へ 収束させるにはどうしたらいいですか? / はつかってもいいけど、% を使うのはダメみたいなんです。
753 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 04:39
まちがえました、収束じゃなくて、丸める、です。
754 :
752 :2000/12/06(水) 04:45
unsigned divv( unsigned n, unsigned m) { unsigned d = n / m; if( n - d * m ) d++; return d; } あまり・・スマートじゃないですよね・・ すぱっと解決できないものでしょうか
無事解決しました 失礼しました
三角形ABCの面積Sって ベクトルの内積を使えば 4S^2 = (|AB||AC|)^2 - (AB・BC)^2 ヘロンの公式を使えば S^2 = s(s-BC)(s-CA)(s-AB) where 2s = BC+CA+AB 消防風には 底辺×高さ÷2 じゃなかったけ? (^^;
757 :
>744 :2000/12/06(水) 10:23
3次元中で1つの点は3つの値の集合で示される 3角形は3つの点で示される よって、3角形は3次元中では9つの値の集合で示される しかしその公式では6つの値しか出現していない 如何?
758 :
Visual名無しさん :2000/12/06(水) 12:52
頂点のうちどれか一個が原点になるようにシフトしとけば
>>749 の (→OA × →OB)÷2 で合うだろう。
>>750 がまずいのは s を使い回しすぎてたり
a,b がどっから出てくるのか謎なとこだと思うが・・・
#include<stdio.h> #include<conio.h> void main(void){ int a,b,c,i; printf("整数を2つ入力せよ"); scanf("%d,%d",&a,&b); printf("%d から %d までの積を計算する\n",a,b); c=1; if(a<=b) for(i=a;i<=b;i++) c=c*i; else for(i=b;i<=a;i++) c=c*i; printf("答え:%d\n",c); getch(); } この問題をC++で関数(引数)って言うんですか? を使って書き換えろ って問題なのですが、どうやったらいいのかわかりません。 どうか教えてください。知識は0に等しいです。 よろしくお願いします。
>>759 あなたのE-mail欄を見てなんか知らないけどむかついたので
教えて君に認定いたします。
761 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 15:45
762 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 20:10
すいませーん!二つの値を入力し、それらのビットごとの論理積 をとった値を出力せよという課題が出ていて明日がシメ切りで朝 からがんばってみたんですけどやっぱりできませんでした。誰か 優しいお方がいたら是非お願いします!
763 :
762です。 :2000/12/06(水) 20:17
連続カキコですみません!プログラミング言語はこんな感じのや つです。 read a read b L_1: load a jump L_2 load b jump L_2 load answer add ONE save answer L_2: load a shift 1 save a load b shift 1 save b load COUNTER sub ONE save COUNTER jump L_3 load answer shift 1 save answer jump L_1 L_3: load answer write answer jump 0 COUNTER: lit 7 ONE: lit 1 a: decl 1 b: decl 1 answer: decl 1
764 :
じろうくん :2000/12/06(水) 20:45
>>760 わかってないなあ。
ここは、教えて君だろうがなんだろうが、お姉さんが優しく教えてくれるスレッドなんだよ。
765 :
質問 :2000/12/06(水) 20:58
ユーザーがこっちの考えている以上の文字を入力してきたときに、 あまりを切り捨てたいんですが、どうすれば良いですか? char a[5] cin >> a[5]; の時、hokkaidoならhokkaまでを入力して残りを切り捨てたいのですが。
766 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 21:03
>>765 int i,c;
char a[6];
for (i = 0; i < (sizeof(a) - 1); i++) {
if ((c = getchar()) == EOF) break;
a[i] = c;
}
a[i] = '\0';
767 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 21:12
>>759 これはファイル名の *.c を *.cpp にするよりはマシな回答だが、
何も考えてないアホな回答でもある。ファイル名はたとえば
seki.cpp という風に .cpp にする。
#include <stdio.h>
#include <conio.h>
class MyClass {
public:
MyClass() {
int a,b,c,i;
printf("整数を2つ入力せよ");
scanf("%d,%d",&a,&b);
printf("%d から %d までの積を計算する\n",a,b);
c=1;
if(a<=b)
for(i=a;i<=b;i++)
c=c*i;
else
for(i=b;i<=a;i++)
c=c*i;
printf("答え:%d\n",c);
getch();
}
}
MyClass mc;
int main() {}
768 :
744 :2000/12/06(水) 22:57
みなさま、たくさんのお答えありがとうございます。 参考にさせていただきます。 もう一度、頭を整理して考えてみます。
769 :
うら :2000/12/06(水) 23:00
C言語の「直接挿入法」ってなんですか? 簡単に教えてください。
馬鹿ソートの一種、基本挿入法じゃないのか
771 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 23:15
クイックソートってどうやるの? qsort 関数じゃなくて自分で書きたいんだけど・・・ クイックソートを分かりやすく解説してるページってない?
772 :
SAGE :2000/12/06(水) 23:58
773 :
うら :2000/12/06(水) 23:58
774 :
名無しさん@お腹いっぱい。 :2000/12/07(木) 00:00
>>765 5文字に制限したいのなら、'\0'のエリアが必要なので
char a[5 + 1]; → char a[6]; となる
>>766 のループのほかに
fgets( a, sizeof a, stdin );
を使う方法もある
776 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 02:34
すみません。まだ途中なのですがこれはどこが間違っているのでしょうか? 関数のところがよくわかりません。 #include <stdio.h> #include <string.h> struct hito{ char name[14]; }; void sort(struct hito dt); main() { int i; struct hito goru[50]; printf("input name\n"); for(i=0;i<50;i++){scanf("%s",goru[i].name);} sort(goru); } void sort(struct hito dt) { int i,j; char taihi[14]; for(i=0;i<50;i++){ j=i+1; if(strcmp(dt[i].name,dt[i].name)>0){ taihi=dt[i].name; dt[i].name=dt[i].name; dt[i].name=taihi; } } }
777 :
訂正 :2000/12/09(土) 02:44
選択ソートのとこは これでした。 void sort(struct hito dt) { int i,j; char taihi[14]; for(i=0;i<50;i++){ j=i+1; if(strcmp(dt[i].name,dt[j].name)>0){ taihi=dt[i].name; dt[i].name=dt[j].name; dt[j].name=taihi; } } }
778 :
できましたが。 :2000/12/09(土) 03:09
なんでdt[]をつけなきゃいけないの?
配列の名前が表してるのは「配列の先頭要素のアドレス」なのねん 小技(構造体にいれる等)使わないと配列の一括代入はできないねん つーか、配列名は定数なので代入できんのねん
780 :
なるほど納得 :2000/12/09(土) 03:37
ありがとうございました。
781 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 03:59
コムソートってどういう方法のアルゴリズムでしょうか。 知っている人がいたら教えてください。 (昔、噂で聞いただけなのでどういう物かは良く分かりませんでした。) スピードはどれぐらいかなあ
782 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 04:49
784 :
781です :2000/12/09(土) 05:41
>782 なんか電波な感じのページでしたが、有難うございました。 検索の仕方にも寄るんだとおもいますが、 ほとんど引っかからないんですよ。>コムソート bit誌に載ってたそうですね。そっちを図書館行って見た方が早いかな。 >783 そうです。聞いた方が早いって場合もありますもんね!
785 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 06:14
おねえさん、カム、バクゥゥ!
786 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 06:39
おねえさんは根鎌です
ガーン!
おねえさん、ちんぽ見せてください
791 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 10:23
遅まきながら、よかったらお使いください。 /* combsort.c */ #define SIZE 100000 int a[SIZE]; main() { int i, d, done = 0; for(i = 0; i < SIZE; ++i) a[i] = rand(); for(d = SIZE-1; d > 1; d = (10*d + 3) / 13) for(i = d; i < SIZE; ++i) if(a[i-d] > a[i]) { int x = a[i-d]; a[i-d] = a[i]; a[i] = x; } while(!done) { done = 1; for(i = 1; i < SIZE; ++i) if(a[i-1] > a[i]) { int x = a[i-1]; a[i-1] = a[i]; a[i] = x; done = 0; } } }
792 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 02:56
アプリケーションやゲームを作りたいと思っています。Cげんごしかしらないのですが これ以外にどんな言語を学んだらよいの?
793 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 03:07
日本語
C++は知っといた方がよいぞよ。
795 :
名無し娘。 :2000/12/11(月) 03:13
>>792 英語はマジで覚えた方が良い。
資料はほとんど英語だから
おねえさんのチンポしゃぶりたい
ツマンネーンダヨ!
798 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 20:15
>>797 真面目な答えだから面白くはないかモナー
799 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 21:54
>797 正解だしナー
800 :
ヒロヒト :2000/12/11(月) 23:17
800
801 :
優しい名無しさん :2000/12/11(月) 23:35
まだこれあったのか。
しつこいなー。
>>795 英語はできないときつい。
主要なリファはすべて英語だよ。
なんでMSDNって一部英語なの? どうして日本語に訳してくんないの? なんか裏事情とかあるの?
803 :
優しい名無しさん :2000/12/12(火) 03:59
馬鹿を省くためです。
804 :
名無し娘。 :2000/12/12(火) 04:09
805 :
優しい名無しさん :2000/12/12(火) 04:30
そうか、めんどくさいのか。 だからこそ、英語は必要。
806 :
新之助 :2000/12/13(水) 00:55
うちの学校で下のような問題が出たんですが、 さっぱり判らなくって・・・。 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Q.ソフトウェア開発に関する下記の課題に回答しなさい。 問題1. ソフトウェアを企画してから、作られたソフトウェアが寿命を終えるまでの過程(ライフサイクル)を述べなさい。 問題2. ソフトウェアを構成するプログラムの作成にあたり、既に稼動しているプログラムであっても、同一部分をあちこちにコピーして使うとどのような技術的問題点が起きるかについて述べなさい(ヒント:試験・改良などライフサイクルの観点から)。 問題3. ソフトウェア・コピーに関してA君とB氏がとった下記のような行動の倫理的な問題点を列挙しなさい。つぎに、その各問題点は、「情報処理学会倫理綱領」、「ソフトウェア・エンジニアリングのための倫理規範」のどの条項に反するかについて述べなさい。 「A君は会社が受注したソフトを開発中だが、納期が迫ったのにそのソフトは一向に動き そうにない。みかねた上司のB氏はA君に、ソースが公開されている他社製Cソフトのプ ログラムの一部をコピーして使うようにと指示した。A君はいわれるがままにプログラム の一部をコピーし、そのブランドを信用してコピーした部分のデバッグはほとんどしない で納品した。しかし、B氏は試験報告書には十分に試験したと記載した。」
1>運用目標の設定→ソフトウェアの設計、作成、デバッグ、テスト →運用→ソフトウェアの陳腐化→新しい目標の設定→古いソフトウェアの統合、廃棄 2>デバッグ、改良のときすべてのコピー部分の修正が必要→リスク、コスト増大 3>Cソフト社のリエンジニアリング規定の無視および違反、 高度な技術に関する特許に関する無視および違反 試験報告書の虚偽
808 :
新之助 :2000/12/13(水) 01:24
すごい。 すごい。 すご〜〜い。 しらんけどさん。あなたを愛しそうです。 本当にありがとうございます。
あのねぇ・・てきとーに答えたってわかるよね? 3は、情報処理学会倫理綱領やソフトウェア・エンジニアリングのための倫理規範も 調べる必要あるから A君が 1.社会人として 1.3 他者の知的財産権と知的成果を尊重する 2.専門家として 2.1 たえず専門能力の向上に努め,業務においては最善を尽くす. 2.2 事実やデータを尊重する. B氏は 3.組織責任者として 3.1 情報システムの開発と運用によって影響を受けるすべての人々の要求に応じ,その尊厳を損なわないように配慮する. 3.3 情報システムの開発と運用について,資源の正当かつ適切な利用のための規則を作成し,その実施に責任を持つ. あたりなんじゃないの? がんばって自分でも考えてこなしてください。
君のレポートが807と同じだったら、評価はつけませんよ。(by 評価担当者)
807は自分の経験と知識を元にした自分の言葉だよね。 でも、公文書を一字一句間違いなく覚えることが評価されたり するんだよね。くだらんけど。
812 :
名無しさん@お腹いっぱい。 :2000/12/15(金) 15:28
お姉さん、ちったぁ働けや!age!
813 :
おねいちゃん :2000/12/15(金) 23:38
>>806 問題1は一般に・・・ってゆーかあ情報処理試験で出るような問題の解答なら、
設計・コーディング・デバッグ・メンテナンスの4つに大別されてるのねえ。
問題3だけど、他社製Cソフトのソースがいかなる使用規定に
基づいたものか明らかでないので、「再利用条件」を自分で
考えて書くといいのね。その条件がどんなものかは、実際の
規定を調べてねん。
設計の前に仕様策定ってないの?
815 :
テル :2000/12/16(土) 09:29
例えば、 First name, Last name, Tel number, Gender(M or F) の書式で書かれたデータがすでにあったとして、そのデータをプログラム中から 読んだり、書き換えたりするにはどうしたらいいんでしょうか。 また、いくつあるかわからない、上に書いたようなデータを表示するにはどうした らいいでしょうか。 誰か教えてください。よろしくお願いします。
おねいさんはクリスマス休暇を取るために多忙中です。 ちゅうか、ここのとこおねいさんの出番がいるような 宿題がないようだけども‥ あ、学生さんはもう冬休みかぁ‥いいなぁ‥
>815 なにがしたいのか、言語や環境がわからないから、たいしたアドバイスできないけど‥どういう形式のデータなのかな? なにかのデータベースなら、それの使い方を テキストファイルとかなら、ファイルの入出力をお勉強してみてね。 いくつあるかわからないなら、数えてみるのはどうかな? それとも、とりあえず何個か読んでみて、そこまで表示してしまう。 続が見たいときは、さらに何個か読んで‥という方法じゃダメなのかな?
お姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さんお姉さん
819 :
テル :2000/12/16(土) 18:32
>817 細かいことを書くの忘れてすいません。言語はC言語です。 テキストファイルの入出力なんですけど、fopen か何かを使うらしいんですが。 struct を使って形式を決められるって言うのも使えるんでしょうか。 その場合、テキストファイルの中に書き込むデータの形式は決めておかないと いけないんでしょうか。あと、データはどこに置いておかなければいけないとか あるんでしょうか。 データの数は最大100なんですが、もし100個なかった場合はどうすればいいですか? 何個か読んでっていうのは使えそうですね。 よろしくお願いします。
820 :
名無しさん@お腹いっぱい。 :2000/12/16(土) 18:33
>815 Cよりはperl向けだよ。 open(FILE,"filename"); foreach $x(<FILE>){ @cell=split(',',$x); print "FirstName:$cell[0],LastName:$cell[1],TN:$cell[2],Gen:$cell[3]\n"; } close(FILE); Cではひょろっと答えるには面倒な長さになるね。
そうね、Cよりもほかの言語向きかも‥ でも宿題だったらそうも言ってられないだろうし 他の言語のお勉強も面倒よね。 データの内部保持にstructを使ってるなら、まずはその構造体を ひとつ書き出す関数と、ひとつ読み込む関数を作ってね。 形式はテキストがお勧め。バイナリだとあとから困るかもしれないゾ
822 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 00:44
>お姉さん クリスマスの予定はありますか? ボクはありません。 モテナイ工学部の学生です。 デートして!
お姉さんは寝釜って結論が出てる筈ですが。 それでも?>822
824 :
822 :2000/12/17(日) 01:28
>824 「ボク」はモテナイ工学部の学生で、実は女子大生・・・ 逝ってよし♪
826 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 13:57
寝釜でなくて真性という意見は?
827 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 21:08
僕のティムポをinclude
828 :
名無番長 :2000/12/17(日) 23:04
コマンドプロンプトでdelしようとすると、よろしいですか(y/n)?って聞かれるんですけど、どう答えればいいんですか?
コマンドプロンプトでdelしようとすると、よろしいですか(Y/y)?って聞かれるんですけど、どう答えればいいんですか?
YOROSHII か YOROSHIKUNAI と ローマ字で答えろ(藁
831 :
828≡ :2000/12/18(月) 10:16
>
832 :
828 :2000/12/18(月) 10:19
>830 一応やってみたけど、当然ムリか。 つーかNTならそんなこと訊かれないのに。 2kは変わってるのか?
833 :
>832 :2000/12/18(月) 11:11
del c:\*.* /s の様にワイルドカードを指定すると訊かれる。 /q付けると訊かれなくなる。
ワイルドカードじゃなくて*.*おんりーじゃなかったっけ? /qはどのWin2K依存のスイッチ? つーか >(Y/y)? の時点でネタだと思ってたんだけどなー
835 :
828 :2000/12/18(月) 18:24
>>834 829は偽者です。828が本物なんで。つーかそんなネタが書いてあること自体気付かなかった。
今試してみたところ、ファイルだと(Y/n)って訊かれないんですけど、フォルダごと消そうとすると、よろしいですか?(y/n)訊かれるみたいです。
どう答えればいいんでしょうか?
消していいファイルなら y(Enter) 消すとまずいファイルなら n(Enter)
>836 それで消えないから困ってるんです。 フォルダごと消すのってムリなの?
838 :
名無しさん@お腹いっぱい。 :2000/12/18(月) 19:32
>>837 何を消そうとして、どんなコマンドを打ち込んだかを示すべし。
OS名も書くように。
ちなみに、Win9x だと
del [フォルダ名]
だと、フォルダの中身のファイルは消せるが、
フォルダ自体と、フォルダの中のフォルダは残る。
フォルダの中のフォルダがなければ、del した後で、
rd [フォルダ名]
とすればそのフォルダは消える。
NTなら、
del /S [フォルダ名]
で、ばっさり消せるんだけどね。
どっかから、
rm -rf *
で、ばっさり消せる道具を拾ってくるのが吉。
839 :
名無しさん@お腹いっぱい。 :2000/12/18(月) 19:36
deltree
840 :
1000 :2000/12/18(月) 23:57
void g_debug(int a, char *format, ...) { va_list argp; if (gnut_lib_debug>=a) { pthread_mutex_lock(&_g_debug_mutex); fprintf(stderr,"%li > ", (long) pthread_self()); va_start(argp,format); vfprintf(stderr,format,argp); va_end(argp); pthread_mutex_unlock(&_g_debug_mutex); } }pthread_t pthread_self() { // this is only used for debugging, so it's okay to lie here return (pthread_t) GetCurrentThreadId(); } このプログラムについて教えてください! ずっと考えたんですが、超初心者な私にはさっぱりです。 お願いします!!
841 :
1000 :2000/12/18(月) 23:59
pthread_t pthread_self() のところが、読みにくくなってしまいました。 すみません。 お願いします!
ネカマのお姉さん、チンポ舐めてください
843 :
名無しさん@お腹いっぱい。 :2000/12/19(火) 01:00
>>840 デバッグメッセージ出力用関数。
1つめの引数はメッセージの重要度で、小さい数ほど重要なメッセージであることを示す。
gnut_lib_debug に設定されている値よりも重要な(=値が小さい)メッセージだけが出力される。
2つめ以降の引数はprintfの第1引数〜と同じように書く。
pthread_ほげほげ を使っているのは、
この関数が複数のスレッドから同時に呼び出されたときに
出力が混ざらないようにするため、出力開始から終了までの部分を
同時実行できないようにロックを掛けている。
844 :
840 :2000/12/19(火) 10:15
どうも有難う御座います。 ようやく理解できました。
845 :
名無しさん@お腹いっぱい。 :2000/12/19(火) 19:21
BASICである行列の逆行列を求めよという問題を教えてください。 おねがいします
>>845 ガウス消去法とかCG法とかLU分解とかで検索しよう
847 :
840 :2000/12/20(水) 23:58
uchar conf_hash_struct(void *arg) { conf_key_pair *ckp; int i,len; uchar ret; ckp=arg; len=strlen(ckp->key); for (i=0,ret=0; i<len; i++) { ret+=ckp->key[i]; return ret; } ここでretはどういう意味でしょうか? keyのi文字目を+していくというのがよく分かりません。
848 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 00:00
uchar conf_hash_struct(void *arg) { conf_key_pair *ckp; int i,len; uchar ret; ckp=arg; len=strlen(ckp->key); for (i=0,ret=0; i<len; i++) { ret+=ckp->key[i]; return ret; } ここでretはどういう意味でしょうか? keyのi文字目を+していくというのがよく分かりません。
849 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 00:05
2重カキコすみません
850 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 00:11
hash値作ってるわけだろ>848 アルゴリズム関係の本でも読んでみ?
851 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 00:12
多分名前を見るにキー文字列からハッシュコードを作成 する関数だねえ。(ハッシュテーブルの事が分からんと 何でこんなことしてるのか分からんと思う。) キー文字列の文字コード番号を頭から順番に加えつづけてる &retがucharなのですぐオーバーフローするけど気にしない。 文字列全部の分のコード番号をたし終わった後の下位1バイト (かどうかしらんが)をハッシュコードとして返してるって 事じゃないでしょうか。
ハッシュコード調べます。明日がんばります。 報告だけなので、さげ
853 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 03:36
ウルトラ初心者スレが時空のはざまにあるのでこっちに質問させてください。 仮にa->b->cとあって、そのcとある値を何度も比較するとき、そのまま参照して比較するのと一時的に変数に代入してそれを比較するのとではやはりスピードに差が出るでしょうか?
遅くなるかどうかはOS処理系コンパイルオプションを含めた 環境によると思います。 一時変数を使うことで遅くなることはないとは思いますが 参照しているのは実体ではなく過去のコピーであることには 注意してください。 (他のタスクで書き換えられないのかとか 値を書き換えるときに実体に描きこむのを忘れるとか‥)
855 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 10:37
>>853 従って、実際どうなるかは流して速度計るとか、
アセンブラレベルで眺めてみるしかないです。
とはいえ、最近のコンパイラなら、勝手にその辺
最適化してしまう「はず」だけど。
856 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 11:13
>>853 そんなのは普通は気にしないでいいよ。
>>854 が言っているように、
正しい動作をするコーディングかどうかがまず大切。
「正しい動作をするプログラム」ができあがったら、速度を見てみる。
遅くなければ、めでたしめでたし。
遅い場合は、「どこが遅いのか」を調べて(自分が思いもよらなかった
箇所で遅くなっていたりするので)、一番足を引っ張っているところの
高速化の手段を考えて適用する。適用した後でまた速度を見てみる。以下繰り返し。
>>853 おいおい、全部で100秒かかる処理で、そこの所が
0.1msかかるのか10msかかるのか気にしてもしょうがないだろ。
858 :
>853 :2000/12/22(金) 15:01
もしかしてPSやDCのプログラムやってる?
859 :
名無しさん@お腹いっぱい。 :2000/12/23(土) 01:13
それがぐるぐるループのど真ん中にあるので心配してるのかも…?
860 :
名無しさん@お腹いっぱい。 :2000/12/23(土) 01:49
静的変数 動的変数(スタック変数) ヒープ変数 アクセス速度に違いってあるの?
やはりCPUやコンパイルオプションなどの環境によります。 古いCPUなら間接参照のない静的変数が速いでしょう。 あなたが古い8ビット16ビットCPUのためのプログラミングをして いるのなら静的変数を多用して速度を稼ぐのは効果的かもしれません。 しかし比較的新しいCPUにおいては、間接参照は速度をおとす直接的原因 にはなりません。 それよりもキャッシュのミスヒットのほうが大きなペナルティとなるので 静的変数のほうが遅いなんて事も起こります。 (スタックメモリはキャッシュにおさまっていることが多いのです)
862 :
名無しさん@お腹いっぱい。 :2000/12/23(土) 06:52
VC では register も無視、だっけ・・・? 今どきはユーザよりコンパイラの最適化のほうが賢くなってるかもしれない。
863 :
名無しさん@お腹いっぱい。 :2000/12/23(土) 06:59
話が違うかもしれないけど、ペンティアム系のCPUは 難しいけど短い命令より 簡単だけど長い命令の方が早く処理する と聞いたことがある。
864 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 17:16
while(1) sleep(1); return 0; } という文がプログラムの最後にでてきたのですが、 よく意味がわかりません。 無限ループはわかるのですが、 sleepが分かりません。 初歩的なのですが教えてください。
866 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 18:26
>865 そこみてもわからないのです。ごめんなさい
867 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 00:36
>>866 ----------------------------------------
sleep() は、現在のプロセスを seconds 秒間または無視されないシグナルが到着するまで休止する。
----------------------------------------
って書いてあるじゃん?
とりあえず
main()
{
sleep(10);
return 0;
}
とかってプログラムして実行してみたら?
10秒間ほど帰ってこないから
868 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 00:45
>>864 それ間違ってないか?
> while(1) sleep(1);
無限ループでスリープして何になる?
システムに負荷かけずに無限ループしてるんでは。 DOS厨房が書いたサンプルでしょ。
870 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 04:14
pause(); と同じに見えるんですけど違うの・・?
871 :
お姉さん :2000/12/26(火) 05:20
ごぶさたお姉さんです。 なんかこのスレ私がいなくてもどんどん続いちゃってるみたいね 今javaに浮気中です!
872 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 09:39
868>そうです。そこで悩んでいたのです。 870>そういうことなのかなあ、とかってに納得させました。 一度実行してみます。
873 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 19:43
浮気中って事は お姉さんの本命は誰ですか?
874 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 21:48
888を書いた人がパート2作るということにしましょう。
さあ
>>888 は誰だ?
>>874 え゛、まだやるの
「ウルトラ初心者の質問スレ」とかぶらない?
# ここシモネタ多いし...
ウルトラ初心者の質問スレとちがうところは ここは宿題丸投げでも許すところです。
877 :
じろうくん :2001/01/15(月) 19:10
なんだかすたれてるなあ。 かわいそうだから、あげてみるよ。
878 :
デフォルトの名無しさん :2001/01/19(金) 02:48
宿題丸投げさせていただきます。超初心者です。 なにぶん初心者な者で//多めでお願いしまう。 VC++6.0で、MFCを使ってもかまいません。 (お題) テキストファイルの数値データを、配列に読み込みなさい。 2.5 2.5 2.5 2.5 2.7 2.5 2.5 2.5 2.835 2.633 2.5 2.5 2.911 2.748 2.546 2.5 こんな感じで、空白と改行で数値が区切られてます。 行数と1行のデータ数が、ファイルごとに違います。汎用性を持たせなければなりません。 ただし、同じファイル内では、1行のデータ数は変わりません。 最終的には、読み込んだデータを元に2次元グラフ(時間t-地点xグラフ)を描いて動かさなければなりません。 例えば、1行目なら、左から順にx=0,1,2,3地点のデータです。 そして、1行目が1コマ目のデータで、2行目が2コマメで、、、といった感じです。 とりあえず、データをファイルに取り込むとこまでやりたいです。 よろしくお願いします。
879 :
878 :2001/01/19(金) 02:52
>>878 間違えました。
時間t−地点xグラフではなく、y−xグラフです。
数値データがyです
880 :
デフォルトの名無しさん :2001/01/19(金) 02:54
>878 きっと100行越すね。 眠いから無理。
881 :
878 :2001/01/19(金) 03:02
>>880 そーですか、わかりました。コメントありがとうございます。
どなたか目が冴えてる方お願いできませんか。
>>878 >とりあえず、データをファイルに取り込むとこまでやりたいです
あー、データを配列にの間違えだ。すみません。
私も眠いのかな。
883 :
初心者教育係 :2001/01/19(金) 03:20
fgets で行単位でとりこんで sscanf でパターンにもっともマッチするものを採用して 配列にほうり込んでください。
884 :
878 :2001/01/19(金) 04:05
>>883 むう、、、そのヒントだけで私にできるとは、、、むう、、、
でも初心者教育係さんありがとうございます。
やっぱ丸投げってのは考えが甘すぎましたかねえ、、、
885 :
デフォルトの名無しさん :2001/01/19(金) 05:19
open FILE, $filename or die "ERROR" undef @data; while (<FILE>){chop; $data[i]=[split(| |)]; i++;} close FILE; print $data[x][y]; てきとー
886 :
878 :2001/01/19(金) 05:30
>>885 シャレですよね、、、もしかして本物のコードですか?
ってレベルの知識しかない初心者なんです。
月曜が期限なんですよね。はー、寝れないよー。
手抜きなやりかた FILE * fp; double exp_data[4]; if( (fp = fopen("hogehoge","r")) == NULL ) printf( "can't open hogehoge\n"); else { char buffer[4096]; double tmp[4]; int exp_type; while( fgets( buffer, sizeof(buffer), fp) != NULL ) { exp_type = 0; // どれにもあてはまらない // case 1 を調べます if( sscanf( buffer, "%lf %lf %lf %lf", tmp, tmp+1, tmp+2, tmp+3) == 4) { exp_type = 1; exp_data[0] = tmp[0]; exp_data[1] = tmp[1]; exp_data[2] = tmp[2]; ... } // case 2 を調べます if( sscanf( buffer, "%lf %lf %lf", tmp, tmp+1, tmp+2) == 4) { exp_type = 2; exp_data[0] = tmp[0]; exp_data[1] = tmp[1]; exp_data[2] = tmp[2]; } } // てきとーに処理してちょーだい }
あー 寝ぼけてる・・ いろいろミスがあって調整が必要なので・・ハイ・・
889 :
デフォルトの名無しさん :2001/01/19(金) 11:41
最近お姉さんここ見ているのか?
890 :
困っった :2001/01/19(金) 23:01
昨日からjavaの勉強はじめたんですけど MS-DOSの表示を画面一杯にしちゃって 不便なので元に戻したいのですが どなたか教えて頂けないでしょうか?
891 :
デフォルトの名無しさん :2001/01/19(金) 23:03
892 :
卒業間近女子大生 :2001/01/19(金) 23:29
学校の宿題で大変困っています、助けて下さいー。 「=まで入力された数式を計算し、結果を出力するプログラム」 電卓を作れ、という課題なんですが…。 C言語の授業で死にそうです、誰かヒントでもわかる方教えて下さい。
893 :
>892 再帰降下型構文解析 :2001/01/19(金) 23:38
894 :
878 :2001/01/19(金) 23:40
>>887 初心者教育係さん、どうもありがとうございました。
動的な配列ではないようですが、参考にさせていただき自力でがんばってみます。
他の皆様、引き続きまるなげ解答お待ちしております。
895 :
890 :2001/01/20(土) 00:19
>>891 ありがとうございます。
参考書ができるWindows98なもので。
896 :
890 :2001/01/20(土) 00:20
>>891 ありがとうございます。
参考書ができるWindows98なもので。
897 :
名無しさん :2001/01/20(土) 00:37
ちょっと質問させてください。 typedef struct { union { int i; float f; } } DATATYPE; DATATYPE d[] = { 1, 2, 3, 4.5678f, 5, 6.789f, 0, }; このような変数dをint型float型マゼコゼで初期化したいのですが、 コンパイルすると、float型部分がint型に初期化されてしまいます。 構造体内部を union { float f; int i; } とすると、float型に初期化されます。 何かいい手はないですか?
>>892 ネカマでなければ容姿にもよるが、一発やらせてくれるなら、
手取り足取り教えてやる。
899 :
デフォルトの名無しさん :2001/01/20(土) 01:14
>897 16進数にして初期化。 0x00010135 とか。 float も一応4バイトの擬似整数?の16進で表現できるから。 でも面倒だよ。
つーか、設計ミス。データ構造を再考せよ。
901 :
デフォルトの名無しさん :2001/01/20(土) 01:33
>>897 共用体の初期値式は同じ型の単一の式か、あるいはその共用体の最初のメンバー
に対する大カッコ付きの初期値式のいずれかである。〜K&R第2版A8.7初期化より〜
あー、意味がつかみにくいのー。
ともかくそういう仕様らしい。
共用体使う場合だと、どのメンバが有効かどうかを示す識別用の変数を使うのが多いと思うが、
ソレが入ってるならば、共用体やめるのがいいんじゃないか。
902 :
初心者教育係 :2001/01/20(土) 01:44
>897 それで初期化すると1がfloatの1.0なのかintの1なのか 不明瞭なのでは。素直にfloatにしてintには変換してはいかがですか?
903 :
デフォルトの名無しさん :2001/01/20(土) 01:47
DATATYPE d[10]; d[0].i=1; d[1].i=2; d[2].i=3; d[3].f=4.5678f; d[4].i=5; d[5].f=6.789f; d[6].i=0; ってやれば(藁 こういう風に書きなおすプログラム作ってコンピュータにやらせりゃ良いじゃん。 っていうか int と float の共有体の配列ってどういう場合に使うの? なんかものすごく使いにくい気がする。 int と float ってメモリ的には全然互換性ないし。(サイズは同じだけど)
904 :
名無しさん :2001/01/20(土) 02:30
>>899 -903
ありがとうございます。
用途としては、
#define END 0, 2,
#define SETPOSITION(x,y,z) 1, 5, x, y, z
#define GOTO_LABEL(L) 2, 3, L
#define LABEL(L) 3, 3, L
//1番目の引数 = SETPOSITION識別用
//2番目の引数 = マクロのデータサイズ
//3番目以降の引数 = 不定(可変)
のようなマクロを作り、インタープリタのような制御したいのです。
//スクリプト
DATATYPE a[] =
{
GOTO_LABEL(100)
SETPOSITION(1.23f, 4.56f, 6.78f)
LABEL(100)
END
};
//制御プログラム
DATATYPE *p = a;
DATATYPE *q;
switch (*p)
{
case 0: //END
break;
case 1: //SETPOSITION
SetPosition(p[2], p[3], p[4]); //関数
p += p[1];
break;
case 2: //GOTO_LABEL
q = a;
while (TRUE)
{
if (q[0] == 3 && q[2] == p[2])
{
//ラベルかつ引数が同じならば、pはラベルの次のデータを指す
p = q + q[1];
break;
}
q += q[1];
}
break;
}
こんな感じです。
今は解決方法として、
>>902 さんの方法をとっていますが、すっきりしないので、
もっとスマートな方法は無いのかと思い、質問させていただきました。
データ記述部もマクロを工夫すればなんとかなりそうですね。
大変参考になりました。
もう下げよーよ。 根釜の彼もやるき無いみたいだし。 お姉さんときたから、次はなんだろ。妹とか、おばさん?w
906 :
デフォルトの名無しさん :2001/01/20(土) 04:47
断然 妹キボーン そこらへんの兄ちゃんよりできる妹 萌え
907 :
デフォルトの名無しさん :2001/01/20(土) 05:13
でも一人称で「妹」とは言わないしなあ。>906 演じるのはむずかしいぞw
908 :
892 :2001/01/21(日) 21:27
ネカマと言われてもしょうがありませんよね。 でも東京○×館短期大学情報社会学科のバカ女子大生です。 マジ宿題困ってます、単位ヤバイんです。 善意のある方ヒントでいいんで助けて下さい…。
909 :
デフォルトの名無しさん :2001/01/21(日) 21:59
>>908 まぁ、どっちでもいいや、助けてやろう。
朝一で本屋に走って、
「C言語による最新アルゴリズム事典」奥村 晴彦 著(技術評論社)
を買いなさい。
99ページの「式の評価」に該当コードがあるので参考にするなり、
コピーするなりしなさい。
あとは、lex&yaccという手段もあるが、宿題ならダメッポイ。
一応ネットで調べる事をオススメする。
電卓ということは、演算子の優先順位とかはなくていいのかな?
911 :
デフォルトの名無しさん :2001/01/21(日) 22:20
RPN電卓なら簡単だけど、宿題ならダメかもな。
あ
>>892 は=あるからRPNじゃダメか。
912 :
デフォルトの名無しさん :2001/01/21(日) 23:00
電卓プログラムをパクってきた。結構難しいんだね。 ええと、全角スペース→半角スペース2個の変換をしてね。 #include "stdio.h" #include "string.h" #define PARSE_OK 1 #define PARSE_ERR 0 #define NUMBER '0' #define ERRSYM '9' void getsym(void); void factor(int *val); void term(int *val); void expression(int *x); int syntax(char *str,int *val); char sym; int symval; char *buff; void getsym(){ int val=0; char ch=*buff; if('0'<=ch && ch<='9'){ sym = NUMBER; while('0'<=ch && ch<='9'){ val=val*10+(ch-'0'); buff++;ch=*buff; } } else { sym = ch;buff++; switch(ch){ case '+': case '-': case '*': case '/': case '(': case ')': case '\0': break; default: sym=ERRSYM; } } symval=val; } void factor(int *val){ int val1; if(sym=='-'){ getsym(); if(sym==NUMBER){ val1=symval*(-1); getsym(); } else goto ERROR; } else if(sym==NUMBER){ val1=symval; getsym(); } else { if(sym!='(')goto ERROR; getsym(); expression(&val1); if(sym!=')')goto ERROR; getsym(); } *val =val1; return; ERROR: sym=ERRSYM; return; } void term(int *val){ int val1,val2,op; factor(&val1); while(sym=='*'||sym=='/'){ op=sym; getsym(); factor(&val2); if(op=='*')val1*=val2; else { if(val2!=0)val1/=val2; else sym = ERRSYM; } } *val = val1; return; } void expression(int *val){ int val1,val2,op; term(&val1); while(sym=='+'||sym=='-'){ op=sym; getsym(); term(&val2); if(op=='+')val1+=val2; else val1-=val2; } *val = val1; return; } int syntax(char *str,int *val){ buff = str; *val = 0; getsym(); expression(val); if(sym=='\0')return PARSE_OK; return PARSE_ERR; } void main (){ char str[255]; int val,i; scanf("%s",str); for(i=0; i<strlen(str); i++) if(str[i] == '=') str[i] = '\0'; while(strcmp(str,"end")!=0){ printf("%s",str); if(syntax(str,&val)==PARSE_OK){ printf("=%d\n",val); } else printf(".. error\n"); scanf("%s",str); } }
913 :
デフォルトの名無しさん :2001/01/21(日) 23:21
>>892 つまらんプログラムですがよろしかったらお使いください。
/*
<expr> ::= <term> <expr'>
<expr'> ::= '+' <term> <expr'> | '-' <term> <expr'> | ε
<term> ::= <fact> <term'>
<term'> ::= '*' <fact> <term'> | '/' <fact> <term'> | ε
<fact> ::= 整数 | '(' expr ')'
*/
#include <stdio.h>
#include <ctype.h>
char buf[200];
int pos = 0;
match(char c) { if(buf[pos] != c) err(); else ++pos; }
err() { fprintf(stderr, "syntax err\n"); exit(1); }
main() { int v;
fgets(buf, 200, stdin); v = expr(); match('='); printf("%d\n", v); }
expr() { int v = term(); return expr1(v); }
expr1(int v) {
switch(buf[pos]) {
case '+': match('+'); return v + term();
case '-': match('-'); return v - term();
case '=': case ')': return v;
default: err(); } }
term() { int v = fact(); return term1(v); }
term1(int v) {
switch(buf[pos]) {
case '*': match('*'); return v * fact();
case '/': match('/'); return v / fact();
case '=': case ')': case '+': case '-': return v;
default: err(); } }
fact() { int v = 0;
switch(buf[pos]) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
while(isdigit(buf[pos])) { v = v * 10 + (buf[pos] - '0'); ++pos; }
return v;
case '(': match('('); v = expr(); match(')'); return v;
default: err(); } }
914 :
892 :2001/01/21(日) 23:26
ありがとうございます!! さっそく参考にしてみます。 そして本屋にも走ってみます。 突然すみませんでした!!
915 :
デフォルトの名無しさん :2001/01/22(月) 00:47
転送速度を計算するプログラムを作ったんですが、 サイトからの転送速度って、サイトに対するダウンロード要求 アップロード要求により変わってくるのでしょうか? つまり大量のファイルをダウンロード中のサイトからの ファイルをダウンロードする際の転送速度は やはり遅くなるのでしょうか? 卒論のテーマの一貫なので、教えていただければ・・・ 他にサイトからの転送速度を遅くする方法はどんなのがありますか?
916 :
デフォルトの名無しさん :2001/01/22(月) 00:47
>>828 名無番長
echo y>yyy
del \*.* < yyy
917 :
915 :2001/01/22(月) 00:49
すれ違いだったかもしれませんが、 他に聴くところ&詳しそうなところが わからなかったもので・・・・ 助けてください。
>915 ネットワーク板向きじゃないの?
919 :
915 :2001/01/22(月) 00:59
ネットワーク板逝ってきます
920 :
マジレスさん :2001/01/23(火) 22:47
お姉さんお願い。 万年カレンダーC言語で作っています。 日にちの改行のとところがうまくいきません。 どうしたら良いですか?
921 :
ひげ :2001/01/23(火) 22:59
>>920 質問の仕方が悪いですよ。
お姉さんもテレパシーを受信できるわけではないので、
きちんとソースを提示してからお願いしましょうね。
922 :
デフォルトの名無しさん :2001/01/24(水) 00:32
こんにちは。 a*(bのθ乗)を計算するプログラムを作ったのですが、 これを、θの値を変動させたときの結果をグラフにして だしたいのですが、どのようなコマンドを 打てばいいのでしょうか?gnuplotだった と思うのですが使い方がわかりません。 論文締め切り2日前であせってます。 厚かましいですが、くわしめに教えてください。
923 :
デフォルトの名無しさん :2001/01/24(水) 00:33
osはdebianです。
924 :
nana :2001/01/25(木) 15:10
超初心者です。丸投げさせていただきます。 C言語です。 (課題) ポインタ渡しの手法を用いて以下で示すプログラムにおいて ● 「各配列のメモリ確保」の部分 ● 「各行列」の部分 ● 「行列C=A*Bの計算」の部分 ● 「各行列の表示」の部分 を関数化しそれぞれ汎用的に用いられるように、プログラムを修正せよ。 #include<stdio.h> #include<stdlib.h> void main() { int i,j,k; double value,**a,**b,**c; /*----各配列のメモリ確保----*/ a=(double **)malloc(3*sizeof(double *)); b=(double **)malloc(3*sizeof(double *)); c=(double **)malloc(3*sizeof(double *)); for(i=0 ; i<3 ; i++){ a[i]=(double *)malloc(3*sizeof(double)); b[i]=(double *)malloc(3*sizeof(double)); c[i]=(double *)malloc(3*sizeof(double)); i++; } /*-----------行列のAの入力--------------*/ printf("input values for matrix A\n"); for(i=0 ; i<3 ; i++){ for(j=0 ; j<3 ; j++){ printf("A(%d,%d)=",i,j); scanf("%lf",&value); a[i][j]=value; } } /*-----------行列のBの入力--------------*/ printf("input values for matrix B\n"); for(i=0 ; i<3 ; i++){ for(j=0 ; j<3 ; j++){ printf("B(%d,%d)=",i,j); scanf("%lf",&value); b[i][j]=value; } } /*-----------行列のC=A+Bの計算--------------*/ for(i=0 ; i<3 ; i++){ for(j=0 ; j<3 ; j++){ c[i][j]=0; for(k=0 ; k<3 ; k++){ c[i][j] += a[i][j]*b[i][j]; } } } /*-----------行列のAの表示-------------*/ printf("A="); for(i=0 ; i<3 ; i++){ for(j=0 ; j<3 ; j++){ printf("\t%f", a[i][j]); } printf("\n"); } /*-----------行列のBの表示-------------*/ printf("B="); for(i=0 ; i<3 ; i++){ for(j=0 ; j<3 ; j++){ printf("\t%f", b[i][j]); } printf("\n"); } /*-----------行列のCの表示-------------*/ printf("C=A*B="); for(i=0 ; i<3 ; i++){ for(j=0 ; j<3 ; j++){ printf("\t%f", c[i][j]); } printf("\n"); } } なにとぞよろしくお願いします。
925 :
924 :2001/01/25(木) 15:15
補足させていただきます。 上のプログラミングは2個の3×3の行列の要素をキーボードから入力し 行列の乗算を行うものです。
馬鹿ですか?
>>924 #include <stdio.h>
#include <stdlib.h>
double** malloc_matrix(int x)
{
double** p = (double**)malloc(x * sizeof(double*));
int i;
for(i = 0; i < x; i++)
{
p[i] = (double*)malloc(x * sizeof(double));
}
return p;
}
void free_matrix(double** p, int x)
{
int i;
for(i = 0; i < x; i++)
{
free(p[i]);
}
free(p);
}
void input_matrix(double** p, int x, const char* name)
{
int i, j;
double d;
printf("input values for matrix %s\n", name);
for(i = 0; i < x; i++)
{
for(j = 0; j < x; j++)
{
printf("%s(%d,%d)=", name, i, j);
scanf("%lf", &d);
p[i][j] = d;
}
}
}
void calc_matrix(double** p, double** p1, double** p2, int x)
{
int i, j, k;
for(i = 0; i < x; i++)
{
for(j = 0; j < x; j++)
{
p[i][j] = 0;
for(k = 0; k < x; k++)
{
p[i][j] += p1[k][j] * p2[i][k];
}
}
}
}
void print_matrix(double** p, int x, const char* name)
{
int i, j;
printf("matrix %s values: \n", name);
for(i = 0; i < x; i++)
{
for(j = 0; j < x; j++)
{
printf("\t%f", p[i][j]);
}
printf("\n");
}
}
int main()
{
int x = 3;
double** a = malloc_matrix(x);
double** b = malloc_matrix(x);
double** c = malloc_matrix(x);
input_matrix(a, x, "A");
input_matrix(b, x, "B");
calc_matrix(c, a, b, x);
print_matrix(a, x, "A");
print_matrix(b, x, "B");
print_matrix(c, x, "C");
free_matrix(a, x);
free_matrix(b, x);
free_matrix(c, x);
return 0;
}
929 :
デフォルトの名無しさん :2001/01/26(金) 00:13
質問させてもらいます。 Cの画像処理プログラムで、 「与えられた濃淡画像の中から最も面積の大きい領域を抽出するプログラム」 がどうしても作れません。 どなたか出来る人いませんか? #include <stdio.h> #include <math.h> #define line 80 #define L 300 #define M 300 FILE *fin,*fout; char c[100]; int f[400][400]; int g[400][400]; void initfile(void); void scandata(void); void hajidata(void); main() { int i,j; initfile(); scandata(); hajidata(); for(i=1;i<L+1;i++) { for(j=1;j<M+1;j++) { /* g[i][j] = ??? */ fprintf(fout,"%4d",g[i][j]); } fprintf(fout,"\n"); } } void initfile(void) { int i; fin = fopen("image1.pgm", "r"); fout = fopen("idou.pgm","w"); for(i=0;i<4;i++) { fgets(c,line,fin); fputs(c,fout); } } void scandata(void) { int l,m; int N; for(l=1,m=1;l<L+1;m++) { fscanf(fin,"%d",&N); f[l][m]=N; if(m==M) { l=l++; m=1; } } fclose(fin); } void hajidata(void) { int i,j; for(i=1;i<M+1;i++) { f[0][i] = f[1][i]; f[L+1][i] = f[L][i]; } for(j=1;j<L+1;j++) { f[j][0] = f[j][1]; f[j][M+1] = f[j][M]; } f[0][0] = f[1][1]; f[L+1][0] = f[L][1]; f[0][M+1] = f[1][M]; f[L+1][M+1] = f[L][M]; }
930 :
デフォルトの名無しさん :2001/01/27(土) 05:46
おねえさんにそんなむつかしいことさせないでください
931 :
デフォルトの名無しさん :2001/01/27(土) 05:59
>829 教えてもいいけど・・・ 幾ら出す? 説明はだるいからコードプレゼントしてあげるよ。
932 :
デフォルトの名無しさん :2001/01/27(土) 16:07
(JAVAプログラムで)n次行列の行列式を求めるアプリケーションを作れっていう課題を大学で出されたんだけど全然分からないよー。 誰か助けて!
まずどこがわからないのかをはっきりさせよう 人に聞くのはそれからだ
935 :
デフォルトの名無しさん :2001/01/28(日) 01:30
age
>>935 ageても
>>932 は助けてもらえないよ、たぶん。
高校の問題解けない大学生かまって暇あったら、煽ってたほうがいいしさ。
定期ageならご苦労様です。
937 :
デフォルトの名無しさん :2001/01/28(日) 02:11
いじめカッコ良い!
932はソース全部の答え以外は期待していないんだろう
939 :
デフォルトの名無しさん :2001/01/28(日) 03:10
ちゅうか、掃き出し法で一発では・・・
940 :
デフォルトの名無しさん :2001/01/28(日) 05:01
こうなってくると932が大学生かどうかも怪しくなってきた。
>>940 関係無い事書くならsageろや。
大学生の宿題くらいしか依頼出してまでやるような事じゃない気はするが、
知能的にアヤシイな、確かに。
942 :
デフォルトの名無しさん :2001/01/28(日) 14:22
(JAVAプログラムで)n次行列の行列式を求めるアプリケーションを作れっていう課題を大学で出されたんだけど全然分からないよー。 誰か助けて!
>942 どんなレスがついたら満足なんだ? ソースファイル全部とか。あほか。宿題の意味ないだろが。
>>942 あ゛ー、テメェ本当にウゼェよ。あちこちに書くんじゃねぇ。
そもそも、何が解んないんだよ?
「n次行列の行列式を求める」アルゴリズム?
「JAVAプログラム」自体?
前者なら単位落とせ。バカは勉強シロ!
後者ならどこまで作ったかソース出せ。場合によっては助けてやる。
本買って勉強したか?してないならそっから始めろ。
誰か答えてあげたら?
946 :
デフォルトの名無しさん :2001/01/28(日) 23:52
LISP関係で 「計算機プログラムの構造と解釈 第二版」 って言う本の答えがあるページ知らない?
>>942 さすが大学ですね。
こんな難しい問題が出るなんて。
>>945 わからないので答えられません。
948 :
デフォルトの名無しさん :2001/01/29(月) 00:32
>>942 public class ドキュソ学生
{
public ドキュソ学生()
{
Syste.out.println("逝ってよし");
System.exit(1);
}
public void main(String args)
{
new ドキュソ学生();
}
}
なにげにコンパイルエラー
951 :
しんじ :2001/01/29(月) 03:26
>>942 し〜りた〜い〜?
し〜りた〜い〜?
し〜りた〜い〜?
ちんたいば〜〜〜ん!
952 :
デフォルトの名無しさん :2001/01/29(月) 03:29
知りたいらしい。
953 :
デフォルトの名無しさん :2001/01/29(月) 06:30
朝です
954 :
デフォルトの名無しさん :2001/01/29(月) 07:38
おしえてよ〜〜
いいから、ソースファイルよこせ!! わかんねぇんならいちいち口出しするんじゃねー!
一応T大です。
957 :
デフォルトの名無しさん :2001/01/30(火) 12:48
age
>956 さすがドキュソ(藁 行列式なんて余裕でもとまるじゃん。 一応さあ、線形代数とかやってんだろ?
一応高校です。
一応、小学生です。
>927 どうもありがとうございました。 大変感謝しています。
962 :
デフォルトの名無しさん :2001/02/02(金) 07:25
VB6.0でabcdとか入力したらdcbaとか表示されるプログラムってどうやるんですか?
963 :
デフォルトの名無しさん :2001/02/02(金) 10:59
VBにはrevないのんか?
string1 = "逝ってよし" string2 = "" For i = Len(string1) To 1 Step -1 string2 = string2 + Mid(string1, i, 1) Next MsgBox string2
965 :
名無しさん :2001/02/04(日) 00:11
f(x)=x^2-4x+3において、f(x)=0をニュートン法と2分割法で解く方法がわかんないんです。 力を貸していただきたいのですが。
966 :
名無しさん@電話にはでんわ :2001/02/04(日) 00:33
f(x)=(X‐1)(X‐3)
967 :
デフォルトの名無しさん :2001/02/05(月) 13:31
進級課題に参ってます。 ある程度ソースができてるならまだしも、問題をみてもどーしていいかも わからない。だから、ここで聞くともできない。 配列ってかなり嫌いだ!
968 :
デフォルトの名無しさん :2001/02/05(月) 13:34
967です。 ちなみに。C++です。
969 :
sage :2001/02/05(月) 15:51
>>967 プログラミングの才能ないんだよ
まぁ世の中プログラミングができなくても
生きていけるから頑張って
(進級はどうなるか知らないけど・・・)
973 :
C言語独習3ヶ月目 :2001/02/06(火) 00:37
の問題のプログラミングが全然できません。助けてください。 A*A−sinA=0 の実数解を以下の5通りの方法で、 小数点第7位が一致する精度で解き、 その精度が得られる計算回数とともに示す。 ただし初期値 A1=1 (1)ニュートン法 (2)ベイリー法 (3)二分法 (4)10等分法(区間縮小法) (5)逐次代入法(反復法)
>>972 おいおい、そんな宿題出すところなら図書館に数冊置いてあるだろ。
一番わかりやすいやつ、っつーか
サンプルコードが載ってるやつを奪取する。
>>973 (5)以外はやり方忘れた。で、(5)だが、まずはテイラー展開
(注)d/dxは本当は偏微分。
f(x)=x*x-sinx=0
f(x)=f(x(n-1)+x(n)-x(n-1))
f(x)≒f(x(n-1))+(x(n)-x(n-1))*(d/dx)*f(x(n-1))
∴x(n)=x(n-1)-{x(n-1)*x(n-1)-sin(x(n-1))}/{2*x(n-1)-cos(x(n-1))}
あとはx(n-1) に初期値1を代入してx(n)を求める。
次に、求めたx(n)をx(n-1)に代入してまた、x(n)を求めるというのを繰り返す。
小数点第7位以上が変動しなくなったら終了。読みにくくてスマソ
976 :
名無しさん@お腹いっぱい。 :2001/02/06(火) 10:56
#include <math.h> #include <stdio.h> main(int argc,char *argv[]) {   double diff;   double x, xn;   double hoge;   diff = xn = 1.0;   for (i = 0; (diff < 1e-7) || (i > 1e4); i++) { hoge = (xn*xn) - sin(xn); hoge /= (2*xn - cos(xn)); x = xn - hoge; diff = x - xn; xn = x;   }   printf("counter = %d", i);   printf("x = %f",x); } 間違ってったら訂正頼みます。
そろそろ1000こえるぞ。 このスレの常連の奴は、パート2を作れよ。
お姉さんが作らないなら、終了でいいだろ。 似たようなスレがあるし。
diffはABSしましょう。鬱だ。
動作検証してみた。鬱すぎた。逝きます。 #include <math.h> #include <stdio.h> main(int argc,char *argv[]) {    int i;    double diff;    double x, xn;    double hoge;    diff = xn = 1.0;    for (i = 0; (diff > 1e-7) && (i < 1e4); i++) {      hoge = (xn*xn) - sin(xn);      hoge /= (2*xn - cos(xn));      x = xn - hoge;      diff = x - xn;      diff = (diff < 0) ? (-diff) : (diff);      xn = x;    }    printf("counter = %d\n", (i-1));    printf("x = %10.8f\n",x);    hoge = x*x-sin(x);    printf("f(x) = %f\n",hoge); }
981 :
C言語独習3ヶ月目 :2001/02/06(火) 16:37
>>980 実行しようとしたんですけど、
undefined symbol: cos
undefined symbol: sin
って出るんですけど。MS−DOSプロンプトにて。
>>981 MSはわかりません。UNIX(g++)なら動いたけど・・・
#include <math.h>
は記述した?
>>981 食後で気分良いからVC++で動かしてみた。
全然問題なし。やっぱり1行目かいてないだろ。
ただし、細かいところは修正してね。(diff > 1e-7)とかだめだよ。
984 :
デフォルトの名無しさん :2001/02/09(金) 21:17
(JAVAプログラムで)n次行列の行列式を求めるアプリケーションを作れっていう課題を大学で出されたんだけど全然分からないよー。 誰か助けて!
またか1!!
亀レスだし、どうでもいいんだけどさ。 984のいってる意味わかる人いる?n次行列の行列式もとめろ?
987 :
お姉さん :2001/02/21(水) 17:54
超久しぶりに来てみたら、まだスレがあって驚きました。 どうせなら1000行ってもらいたいね。 >984 n痔行列の行列式って、なんですか??
988 :
260 :2001/02/21(水) 19:03
>984 ab AB aA+bC aB+bD ( cd )( CD ) = (cA+dC cB+dD) とかっていうやつの のn痔になったやつ?
989 :
デフォルトの名無しさん :2001/02/21(水) 19:05
そろそろ新スレ作ろうぜ
990 :
お姉さん :2001/02/21(水) 19:11
984の書き込みは二週間前なのでもうできているでしょう(無責任) 次いってみよ!
991 :
厨房 :2001/02/21(水) 22:44
階乗を求めるプログラム教えてください! C言語です。とりあえず作ってみたものの ちゃんと答えがでないんですよ。 for文の中身が悪いんだと思うんですけど・・・お願いします。 #include<stdio.h> int mona,giko,kaijyo; int main(void) { printf("数字 => "); scanf("%d",&mona); if ( mona == 1){ giko = 1; } else { for ( giko = 1; giko <= mona; giko++){ kaijyo = ( giko - 1 ) * giko; } } printf("階乗 = %d\n",kaijyo); }
992 :
デフォルトの名無しさん :2001/02/21(水) 23:17
for(giko = mona, kaijo = 1 ; giko > 0 ; giko--){ kaijyo *= giko } かな?
993 :
デフォルトの名無しさん :2001/02/21(水) 23:19
kaijyo = ( giko - 1 ) * giko; のうしろに printf("kaijo=%d giko=%d\n",kaijo,giko); をいれてその出力をみてればすぐわかるよ。 (*=演算子を使えばカンタン)
994 :
厨房 :2001/02/21(水) 23:49
あ、上手くいきました!! ありがとうございます。 やっと次に逝ける・・・(TT)
995 :
デフォルトの名無しさん :2001/02/21(水) 23:55
>>994 巧くいったことはどうでもいいから、どうして巧くいかなかった
のかをちゃんと考えた方がいいぞ。
それが厨房脱出の近道〜〜〜。
996 :
デフォルトの名無しさん :2001/02/22(木) 00:07
>>991 つうかデバッガつかえよ。ブレークポイント張り&ステップ実行は、
プログラマ初心者ならはまる事請け合い。
997 :
デフォルトの名無しさん :2001/02/22(木) 03:02
>994 オーバーフロー対策しなくていいの? ついでに言うと、表引きにした方がいいんじゃないっすか?
998 :
見習い :2001/02/22(木) 15:00
pasteのソースファイルを教えてpasteのソースファイルを教えてpasteのソースファイルを教えてpasteのソースファイルを教えてpasteのソースファイルを教えてpasteのソースファイルを教えてp
>998 ソースじゃなくてソースファイルね。 paste.cpp でどう?
1000 :
デフォルトの名無しさん :2001/02/22(木) 17:02
1000age!!
1002 :
お姉さん :2001/02/22(木) 21:30
誰か新スレ立ててお願い!旧スレのリンクの仕方とかしらないから。
1000,,Over 1000 Thread,このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 ,
1005 :
1000,,Over 1000 Thread,このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 , :