すみません誰か教えてください、、、unixです、、、 キーボードから円を入力すると,ドルに変換するプログラムを作成しなさい。 なお,変換レートは本日分の値を使用し, 変換値の表示は小数点第1位までとすること。 角度を−90〜90度まで5度ステップで変化させ, そのときの正弦関数と余弦関数の値をディスプレイに並べて表示する プログラムを作成しなさい。 なお,正弦関数と余弦関数の値は,小数点以下3桁で表示しなさい。 下記の指示にしたがって解答しなさい。 1 キーボードから1より大きい整数値nを入力して, その階乗n!を計算し,結果を表示するプログラムを作りなさい。 その際,nが1以下の時には, nが1より大きい値となるまで入力を繰り返し求めるようにする。 また,階乗の値は double 型とする。 n!=2×3×4×・・・×(n−1)×n 2 作ったプログラムをコンパイルし,正しく動作することを確認したら, 15!を求め,画面に表示された通りを答えなさい。
>>19 最初の問題だけです。
(defun yen$ (x &optional (rate 130))
(format t "~,1F~%" (/ x 130)))
>>19 すぐ上で「言語もちゃんと書けよ」って言われた直後にそれかい。
あと、画面に表示する課題がでてるけど、xlib? GTK+? Tcl/TK?
それとも、コンソール画面で * とかを表示して?
for(i=-90;i<=90;i+=(90+90)/5){ printf("sin(%d):%.3f\n",i,sin(i)); printf("cos(%d):%.3f\n",i,cos(i)); } ------------------ int p(int n) { if(0==n)return 1; return p(n-1)*n; } int main() { int n; do{ scanf("%d",&n); }while(n<=0); printf("%d\n",p(n)); return 0; }
>>20 の修正
(defun yen$ (x &optional (rate 130))
(format t "~,1F~%" (/ x rate)))
(defun inputyen ()
(yen$ (read)))
なるほど。言語はCだったか。
>>26 他スレまでチェックしてなくてスマソ。(w
>確認するテスト なるほど。つまりこの後に本命が来るわけか。 # C言語系のBBSにもポストしてるんだろーな。きっと
>>29 > # C言語系のBBSにもポストしてるんだろーな。きっと
fjにポストしたらどうなるんだろう
31 :
デフォルトの名無しさん :02/01/23 15:06
えれな、喋り方がいつもと違うぞ。 語尾のぁぃぅぇぉ具合が足りない。 誰も怒らない。普段の喋り方でいい。
ごめんラジアンね。
>>6 お姉さんのスレ・・・わざとなのか?
あのお姉さんの頼りなさ・・・。
なんか自作自演っぽい所も含まれてるし・・・。
怜スレ作ったのも同一者なのだろうか。
36 :
デフォルトの名無しさん :02/01/23 18:36
>33 >>5度ステップで変化させ >i+=(90+90)/5 は、 i+=5だよっ。
38 :
デフォルトの名無しさん :02/01/23 19:11
39 :
デフォルトの名無しさん :02/01/23 23:39
C言語で簡易版の商品管理システムプログラムを ご教授ください。 プログラムの仕様は以下のとおりです。 ------------------------------------- 1、概要 このプログラムは登録、更新、削除、復旧、終了、表示、保存の機能を持った商品管理プログラムです。 各情報は商品コード、価格、商品名、登録日、有効フラグを持っています。 登録データは不定数である為、メモリアロケーションを行います。 削除されたデータは削除テーブルに移動し、商品コードを開放する。 削除テーブルのデータは普及コマンドで普及された場合に新しい商品コードで再登録する。 2 商品のデータテーブル情報 商品コード:一意(10〜100) 価格(100〜1000万) 商品名(半角50文字まで) 登録日 →以上のデータを構造体商品情報として設定する。 3 起動オプション 引数として、データファイルを指定する。 ファイルが指定された場合はファイルの内容をテーブルに展開する。 4 機能 <コマンド> add (A) : 登録 change (C) : 更新 delete (D) : 削除 undelete (U) : 普及 end (E) : 終了 print (p) : 表示 save (S) : 保存 read (R) : 読出 help (?) : コマンド表示 <
40 :
デフォルトの名無しさん :02/01/23 23:40
↑ 続き <登録> 商品名、価格を入力 入力された情報が正当化判定する。 商品情報テーブルの領域を確保する。 入力された情報を設定する。 商品コード、日付を取得し、設定する。 <更新> 商品コードを入力し、商品名、価格の入力を行う。 入力されたコードが正当化判断する。 入力されたコードのテーブルを入力された商品名と価格で上書きを行う。 登録日を取得し上書きする。 <削除> 商品コード名を表示する。 入力されたコードのテーブルを削除テーブルに移動する。 入力されたコードのテーブルのフラグを未使用にする。 <復旧> 削除済み情報を表示する。 情報番号の入力を求める 新しいコードを取得設定する。 <終了> プログラムの終了を行う。メモリの開放なども行う。 入力情報を保存するか聞く 保存ファイル名の入力を求める。 <表示> 抽出条件(等しい、以上、以下)を設定し、対象項目を設定 ソート項目の設定、昇順、降順を設定する。25件毎に入力待ちを行う。 入力項目を抽出条件で検索する。 検索結果のソートを行い、25件ごと表示する。 <保存> ファイル名の入力を求める。 現在のデータを保存する。 <読出> ファイル名の入力を求める。 ファイルからデータを読み出す
41 :
デフォルトの名無しさん :02/01/23 23:46
↑ 続き 5 画面イメージ 起動後最初に画面をクリアする。 <起動画面> 商品管理システムVer0.01 コマンドを入力してください(HELPは?) <登録> 登録:商品名を入力してください XXXX 登録:価格を入力してください(半角) xxx <更新> 更新:更新する商品コードを入力してください(半角) xxxx 更新:商品名を入力してください。 XXX 更新:価格を入力してください(半角) xxx <削除> 削除:削除する商品コードを入力してください XXXX <復旧> 番号 商品名 価格 --------------------------------- XXXX XXXXXX XXX XXXX XXXXXX XXX 復旧する番号を入力してください(キャンセルはC) XXXX
42 :
デフォルトの名無しさん :02/01/23 23:48
↑ 続き <表示> 表示:抽出項目番号を入力してください 1 商品コード 2 商品名 3 価格 4 登録日 XXXX 表示: 抽出条件を入力してください 1 以上 2 等しい(商品名は等しいのみ) 3 以下 XXXX 表示:条件を入力してください XXXXXXX 表示:ソート項目番号を入力してください 1 商品コード 2 商品名 3 価格 4 登録日 xxxxx 昇順、降順を選んでください 1 昇順 2 降順 xxxx 画面をクリアする 商品コード 商品名 価格 登録日 ------------------------------------------------ xxxxxxx XXXXXXXXX xxxxx xxxxxxxx xxxxxxx XXXXXXXXX xxxxx xxxxxxxx 次の情報を表示します。リターンを押してください。 <終了> 入力データを保存しますか? ファイル名を指定してください XXX <保存> ファイル名を指定してください XXX <読出> ファイル名を指定してください XXX
>>39 で、あんたは何が分からないの?
というか何なら分かるの?
どこまでプログラム作った?
問題文はちゃんと読んだか?
とりあえずな、氏ね。
(´-`).。oO(
>>1 に丸投げヤメロとは書いてないな、丸投げありかい… )
44 :
デフォルトの名無しさん :02/01/23 23:50
>>43 氏ねは無いだろう。
でも他は同意、結構面倒だと思うんだけど
全部やれと言うの?
>>39
46 :
デフォルトの名無しさん :02/01/23 23:54
>>39-42 DBはSQL鯖とか使っていいの?
つーかOSは?
ここら辺教えてくんないと、何も教えれないのだが。
>>45 > 氏ねは無いだろう。
いーや、逝って良し。
丸投げにも程がある。つーか、銭出してやって貰え。
48 :
デフォルトの名無しさん :02/01/24 00:03
すみません、皆様。 もっと勉強して出直します。 ちなみに環境はUNIXです。DBは使用しません。 まことに申し訳ありませんでした。
>>47 確かに。
スレタイもあくまで"手伝おっか?"であって"私がやってあげる"
ではないからな。
50 :
デフォルトの名無しさん :02/01/24 00:28
>>39-43 まずこんな構造体を作る。
typedef struct t_data{
char m_id; // 商品コード
int m_price; // 価格
char *m_name; // 商品名
int m_y,m_m,m_d; // 日にち
}TABLE;
あとはこれに対して、入出力処理を行う。
分かった?
51 :
デフォルトの名無しさん :02/01/24 00:33
>>50 >char *m_name; // 商品名
よりも
char m_name[]; // 商品名
のほうがいいような気がするんだけど・・・
ポインタにする意図がわからん。
これって俺が未熟なだけ?
>>50 > 商品名(半角50文字まで)
なんで、
char m_name[51];
の方が、管理が楽ちんかな。
…という風に、問題切り分けて聞けば
ここに居る暇人は答えてくれるのよ
>>1
…なんで1やねん。
ここは単発質問スレ違うわー!>漏れ
×ここに居る暇人は答えてくれるのよ
>>1 ○ここに居る暇人は答えてくれるのよ
>>39
54 :
デフォルトの名無しさん :02/01/24 00:38
>>51-52 メモリが有効に使えるから。
新しいレコード作成時に
・・・
data->m_name = malloc(sizeof(name));
・・・
とするの。
16ビット開発がメインだったので、どうしてもメモリの無駄遣いが許せない。
>>54 > 16ビット開発がメインだったので、どうしてもメモリの無駄遣いが許せない。
気持ちはわかる。
ただ文字列を配列に格納しておけば、ファイルとの入出力も楽だしなぁ…
メモリに置かずにファイル操作を主体にして、必要分を読み込むとか。
どんどん本題と外れてく…
>>54 char m_name[]; で宣言してreallocするのはだめですか?
>>56 あなたの意図するところと外れているかもしれないけど、
スタックとヒープって分かる?
>>56 だめじゃん、俺何を言ってるんだろう。
激勘違いです。
reallocは取得したメモリブロックの先頭のポインタを返すわけで、 char m_name[51]にはポインタを格納する場所が無い・・・ m_nameは配列の先頭のポインタを返すだけで、 ポインタを格納できる変数では無い・・・ と、言うことでいいのでしょうか?
>>59 58で“だめじゃん”と書いたのは、
char m_name[10];
m_name = realloc(m_name, 51);
まさかこんな感じのコードがコンパイル通らなかったから、
とか言わないよね?
char* ptr = (char*)realloc(m_name, 51);
これならコンパイル通っちゃうけど、駄目というのは分かるよね?
61 :
デフォルトの名無しさん :02/01/24 01:07
後々ソートするんなら、リスト構造作っといたほうがイイか? typedef(略 struct t_data *next; (略
62 :
デフォルトの名無しさん :02/01/24 01:09
昇順・降順があるなら双方向リストか? typedef(略 struct t_data *next,*prev; (略
63 :
デフォルトの名無しさん :02/01/24 01:16
>>60 >m_name = realloc(m_name, 51);
m_name は左辺値じゃないから・・・ですよね?
>char* ptr = (char*)realloc(m_name, 51);
reallocはmallocとかcallocとかで取得したポインタ用に作られてるからですか?
的外れな答えだったらごめんなさい。
マジでC初めて一ヶ月にも満たない初心者なんです。
もし違ったら、どこが違うのか教えてください。
66 :
デフォルトの名無しさん :02/01/24 01:21
m_name[]で宣言されるとスタック(静的)領域 alloc系はヒープ(動的)領域にメモリが確保される
67 :
デフォルトの名無しさん :02/01/24 01:24
すいません、VBAで「もしxが整数なら」というのは どう表現すればいいのでしょうか? If TextBox1.value= ?? また、テキストボックス内の20000000のような数字を 20,000,000のようにカンマ表示にするにはどう記述すればいいのでしょうか?
>>64 > >m_name = realloc(m_name, 51);
> m_name は左辺値じゃないから・・・ですよね?
m_nameに代入できない、という意味ではその通り。
> >char* ptr = (char*)realloc(m_name, 51);
> reallocはmallocとかcallocとかで取得したポインタ用に作られてるからですか?
まぁ、そういう事。
realloc()に渡すポインタには、ヒープに確保したメモリブロックを指す物を使う。
先のカキコ見て、ちと心配になったでおせっかい。
>>66 ヒープ領域って、
newとdeleteとかのアレですか?
スタック領域って、
char a[]="abc";
とかやったときの、"abc"っていう文字列定数が入るところですよね?
ありゃ?そういえば、staticとかの宣言をした変数はどっちに入るんだろう・・・
うう、だめだ。知識無さ過ぎる。
>>67 if textbox.value = int(textbox.value) then
カンマ表示
stringに変換して、右よりスキャンしながらカンマを挿入していく。
71 :
デフォルトの名無しさん :02/01/24 01:30
そのnewがmallocを呼んでいたりする。
>>69 > うう、だめだ。知識無さ過ぎる。
うん、でも始めて一ヶ月なら仕方ないよ。
とりあえず、“文字列定数”はスタックには置かれない。
スタックに確保されるのはここでいえばa[]とかのローカル変数ね。
(そういう意味で逝ってるのだと思うけど)
本読んで勉強しちくり。
皆さん、やさしい。 スレをあげまくって一方的に質問してるにもかかわらず、 愚かな厨房に対してこんなに親切に教えてくれて・・・感激です。 プログラム板って凄いんですね。 (今までプログラムいじってなかったのでこの板を訪れることは無かったのです) 2chってなんか、どす黒い印象があったんですけど、 この板は凄いです!そういえば、Unix板とかも伝説になってますし、 プログラマの人たちって本当に偉大ですね。 私もプログラマの卵として、誇りに思いたいです。 そして、早く偉大な先輩たちに追いつけるよう、よりいっそう努力します。 今日は本当にありがとうございました。 最後は穏やかにsage...
75 :
デフォルトの名無しさん :02/01/24 01:50
>>67 ,70
VBAでもFormat使えるでしょ?
>>70 >>75 ありがとうございます。
Formatって
MyStr = Format(5459.4, "##,##0.00")みたいなやつですよね?
再度の質問で恐縮ですが、Excelのセルと同じように
1の位から3桁ごとにカンマをつけるにはどうすれば良いでしょうか。
77 :
デフォルトの名無しさん :02/01/24 02:28
すいません、PHPで複利計算のプログラムの宿題が出たのですが サッパリ方法がつかめません。 PHPエキスパートの方、是が非にご援助お願いします。 「100万円銀行から借りると一ヶ月で一割の利子がつく。一年経ったら 金額は幾らになるか?」 フォームとかはいらないので計算結果のみが 表示されれば大丈夫です。PHP習って50日も経ってないのに・・・
78 :
デフォルトの名無しさん :02/01/24 02:32
79 :
デフォルトの名無しさん :02/01/24 02:33
>67 GetCurrencyFormat ,GetNumberFormat API みたいなのを使ったら便利かも。 >77 <? $br = 100*10000; for( $i=0; $i< 12; $i ++) $br += $br/10; echo "$br"; ?> でいいのかな?
echo round($br); の方がいいかもよ。
ぐるが「えれな・・・頼む、えれな・・・」 ズダーン・・・ ぐるがは逝った。
83 :
PHP厨房77です :02/01/24 04:37
>>80 そ、それです!!
ワタシも説明不足でした。
宿題提出して逝って来ます
100万円→110万円→121万円→133,1万円
複利方式でした・・・
84 :
麻衣派 ◆COx/Mai. :02/01/24 09:23
5回でまわすのかと思ってたよ…。
これでどうですかっ!!
>>37 for(i=-90;i<90;i+=5){
printf("sin(%d):%.3f\n",i,sin(i*3.14/180));
printf("cos(%d):%.3f\n",i,cos(i*3.14/180));
}
M_PI使え。
86 :
デフォルトの名無しさん :02/01/24 10:08
>>85 同意。
>>84 1問目はそんなもんでしょう。
2問目は.....。
問題は良く読みましょうねっ!
87 :
ダダダダーん! :02/01/24 10:34
どうかこれも人助け。クラ−メルの公式をCでやってください。こら、そこのあなた簡単っだって笑わない!
88 :
麻衣派 ◆COx/Mai. :02/01/24 10:49
>>86 >その際,nが1以下の時には,
ごめーん…。
なにがわからないのかな? 行列?行列式?公式? Cで表現するところ? 締め切り間近で、答えがほしいのかな? ところで、どういうふうに入力するの?
90 :
デフォルトの名無しさん :02/01/24 12:24
>>88 おおっ! それは気付きませんでした。
それに、謝らなくていいです。楽しませてもらってるので。
(問題を書きこんだ人はどう思ってるか知らないけど。)
int main() { int n; while (scanf("%d", &n) == 1) { if (n > 0) { double fact = 1.0; int i; for (i = 0; i < n; fact *= ++i); printf("fact(%d) = %.0f\n", n, fact); return 0; } } return 1; }
92 :
デフォルトの名無しさん :02/01/24 12:53
93 :
ダダダダーん :02/01/24 13:02
見ましたー!完璧っす!感謝感激雨あられ!!!!!先生ありがとー!
94 :
麻衣派 ◆COx/Mai. :02/01/24 13:03
96 :
ダダダダーん :02/01/24 13:10
締め切りやばくて答えがほしいんです。Cあらわせないんです。キーボードでおねがいします。
97 :
ダダダダーん :02/01/24 13:13
93は間違いです。ごめんなさい。
>>96 おまえはもう書き込むな。
仕様(問題)の説明もできないのに、教えろ教えろって連呼しても無駄だよ。
っていうか迷惑。
99 :
デフォルトの名無しさん :02/01/24 13:16
宿題を作るプログラムを教えてください。
>99 こんな感じかな? int main() { printf("宿題は以下の通り: 宿題を作ること。\n"); return 1; }
>>99 printf("宿題\n");
while(1){
printf("%d*%d=",rand(),rand())
}
>>87 C++でもいいなら
TVector Cramer(TMatrix A, TVector B)
{
TVector result( 0 );
double dA=A.determinant();
if (dA==0) return result;
result.SetLength(B.size() );
for(int i=0 ; i<B.size() ; i++)
{
TMatrix C= A.displaceCramer(B,i) ;
result.setValue( i , C.determinant()/dA );
}
return result:
}
>>101 97を弁護する気は全くないが、一応言っておくと、
確かにクラメルの公式で解を求めるのはダルイが、
計算機でやるぶんには全く問題無い。
>>97 宿題はあきらめて、まともに質問できるくらいの知識を得てこい。
105 :
デフォルトの名無しさん :02/01/24 17:42
こんばんは、以前アドバイスいただいたものです。 その後先生に提出して、アドバイスをもらい、コンパイルはできたのですが、 プログラムとして正常に動くのかどうかは判断できません。 どなたか評価していただけないでしょうか? 特にaはcharで宣言しましたが、これでいいのかどうか。 また、iの使い方などをチェックしていただけたらと思います。 #include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; char a; int da[100]; double hi[100]; double lo[100]; int i, j, max, min, n; if ((fp = fopen("Temp.dat","r"))==NULL) { printf("file open error!!\n"); exit(1); } i = 0; a = fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]); while ( a != EOF ) { ++i; a = fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]); } max = 0; for (i = 1; i < n; i++) { if (hi[max] < hi[i]) { max = i; } } printf("最高気温, 日付=%g\n, %g\n", hi[max], max); min = 0; for (j = 1; j < n; j++) { if (lo[min] > lo[j]) { min = j; } } printf("最低気温, 日付=%g\n, %g\n", lo[min], min); fclose(fp); }
>>105 いや、動くかわからないんじゃなくて、ためしに動かしてみるものじゃ
ないのか? こういうデバッグ作業も課題のうちだよ。
何十年前みたくコンパイルして実行したら何時間も待たないといけない
ような時代じゃないんだし。
値が割り当てられていない ローカルな変数 'n' に対して参照が行われました。
108 :
デフォルトの名無しさん :02/01/24 18:35
>>106 ありがとうございます。
確かにおっしゃる通りだと思います。
楽しようと考えてしまいました。
ですが、実際にdatファイルがあり、それを読み込むというの習っていないし
テキストにも載っていないので、ヒントだけでもいただけないでしょうか?
temp.datを作って、デスクトップに置いたのですが、読み込まれませんでした。
>>107 ありがとうござます。
nは使っていないので削除しました。
109 :
デフォルトの名無しさん :02/01/24 18:40
ちなみに問題は以下です。 ******************************** 次のように、一行に日付けとその日の最低気温、 最高気温が記録されたファイル(ファイル名:temp.dat)があるとする。 _____________________ 1 10.0 30.0 2 12.1 28.8 3 11.3 25.2 4 10.5 27.4 5 13.1 28.0 ・・ ・・・・ ・・・・ _____________________ このファイルを読み込んでファイルの中での最高気温が最も高い日の 日付と最高気温、 同様に最も低い最低気温とその日付を表示するプログラムを作成せよ。
>>108 Temp.datの中身はちゃんと書いた?
空のファイル作ったって読み込めないよ。
あとデスクトップに作ってもだめかもね。
111 :
デフォルトの名無しさん :02/01/24 18:44
>>108 ファイルから読めないんだったら、
double hi[100]={1.0, 2.0, ... };
のようにすればいいよ。
nについては....。
もっとよく考えてみたら?
>>105 > 特にaはcharで宣言しましたが、これでいいのかどうか。
駄目。
113 :
デフォルトの名無しさん :02/01/24 19:08
>>110 はい。書きました。
どこに置けば。。。
>>111 その方法で考えたら訳わからなくなってしまいました。
できればファイルを読みこむかたちで作動させたいです。
nは使ってましたね。ご指摘ありがとうございます。
あせっております;;
>>112 えっっ;;
これはどういう宣言をしたらいいのでしょうか?
配列でもないですし、、。
もしかして、このプログラム、もっと大きな部分で間違ってます?
>>113 実行可能ファイルはどこに?
それと同じ場所においておけばいいとおもう。
115 :
デフォルトの名無しさん :02/01/24 19:18
116 :
デフォルトの名無しさん :02/01/24 19:21
吉祥寺にある大検・大学受験予備校の中央高等学院
ここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院
学歴詐称、経歴詐称、合格実績詐称、デタラメ授業、
http://www.chuo-school.ac/ http://chs-f.com/index.html 中央高等学院福岡校
司法浪人の田中校長は ↑ また司法試験に落ちましたが
HP上では下らない見栄を張っています
117 :
C言語教えてください :02/01/24 19:23
次の問題わかる人いますか? 15個以内の点数を入力し、その最高点・最低点・合計点・平均点を出力する関数 (tensu)を作成せよ。ただし、点数=9999の入力で終了とする。 条件 while文を使用すること。 入力するデータ 80,75,98,29,35,50,100,0,61,88 出力結果 最高点 =====> 100点 最低点 =====> 0点 合計点 =====> 616点 平均点 =====> 61.6点
118 :
デフォルトの名無しさん :02/01/24 19:26
> 次の問題わかる人いますか? 試してるのか?(w
120 :
C言語教えてください :02/01/24 19:34
こんな簡単な問題も分からないんですか?とても本題には入れませんね。 ではさようなら。
>>117 #include <stdio.h>
int main(void)
{
printf("出力結果 最高点 =====> 100点\n");
printf(" 最低点 =====> 0点\n");
printf(" 合計点 =====> 616点\n");
printf(" 平均点 =====> 61.6点\n");
while(0);
return 0;
}
122 :
デフォルトの名無しさん :02/01/24 19:44
>>120 さようなら。
それにしても 117 の問題文はちょっと変ですね。
即興で作ったのだろうか?
124 :
デフォルトの名無しさん :02/01/24 19:46
125 :
デフォルトの名無しさん :02/01/24 19:47
>>120 いつも学校でそう言われてるのか。(w
プログラミングが苦手だったら、LOGOからはじめるといいぞ。
do{ ・・・・ }while(0); にすれば何ら問題無い、全然ひねくれてないね w
>120 こんな簡単な問題で試そうと思ったのですか?話になりませんね。 ではさようなら。
>>124 入力も入れてみた
static intint input(int *s, int n) { int i; printf("入力するデータ ");
for(i = 0; i < n && scanf("%d,", &s[i]) && s[i] != 9999; i++);return i; }
static int max(int *s, int n) { int i, r = INT_MIN;
for(i = 0; i < n; i++) if(r < s[i]) r = s[i]; return r; }
static int min(int *s, int n) { int i, r = INT_MAX;
for(i = 0; i < n; i++) if(r > s[i]) r = s[i]; return r; }
static int total(int *s, int n) { int i, r = 0;
for(i = 0; i < n; i++) r += s[i]; return r; }
static double avg(int *s, int n) { return (double)total(s, n) / (double)n; }
int main(void)
{ int s[15], n;
n = input(&s[0], sizeof s / sizeof *s);
printf("出力結果 最高点 =====>%6d\n", max(s, n));
printf(" 最低点 =====>%6d\n", min(s, n));
printf(" 合計点 =====>%6d\n", total(s, n));
printf(" 平均点 =====>%6.1lf\n", avg(s, n));
while(0);
return 0;
}
129 :
デフォルトの名無しさん :02/01/24 20:36
何度もすいません。
105です。
>>114 実行可能ファイルというのはなんでしょう?
環境としては、学校のPCでテラタームを使って
プログラミングしております。
programfiles>Ttermpro
の中には入れることができませんでした。
>>115 読みました。
数を返すということはintでいいのでしょうか。
>>130 テラタームっていうのは、別のパソコンにログインして、そのパソコン
を操作するソフト。
面倒なので説明は省くが結論としては、テラタームでプログラム書いた
のと同じように、テラタームでデータファイルつくりなされ。
>>130 > 実行可能ファイルというのはなんでしょう?
コンパイルが正常終了したときにできるファイル
Unixだとa.out Winだとexeファイルのこと
134 :
デフォルトの名無しさん :02/01/24 20:51
>>130 ということは、Unix系のOSですね?
プログラムをコンパイルすると実行形式のファイルができるのですが、
あなたの使っている環境にはインタプリタでも入っているのでしょうか?
データファイルはカレントに作ればよいでしょう。
それから fscanf ですが、返り値の意味はわかりますか?
>>132 おおありがとうございました。
muleでtemp.datを作ったら、実行できました。
結果からみると
最高気温, 日付=15
, 4.24399e-314
最低気温, 日付=5
, 0
ミスがあるようなので、考えてみます。
datファイルは以下のとおり
1 15 5
2 14 4
3 13 3
4 12 2
5 11 1
ともあれ一歩前進して嬉しいです。
#include "stdafx.h" #include "math.h" #define EPS (0.00001) #define N (9) void cpy(float a[N][N],float b[N][N],int n) { int i,j; for (i=0; i<n; i++) for (j=0; j<n; j++) a[i][j]=b[i][j]; } void del(float a[N][N],int k,int n) { int i,j; for (i=k; i<n; i++) for (j=0; j<n; j++) a[i][j]=a[i+1][j]; for (j=0; j<n; j++) for (i=0; i<n; i++) a[i][j]=a[i][j+1]; } float dat(float a[N][N],int n) { int k; float ret=0.0,e[N][N]; if (n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0]; for (k=0; k<n; k++){ cpy(e,a,n); del(e,k,n); if (k % 2) ret -= a[k][0] * dat(e,n-1); else ret += a[k][0] * dat(e,n-1); } return ret; }
int main(void) { int n,i,j,k; float a[N][N],b[N],c[N][N],d; printf("n=?"); scanf("%d",&n); if (n > N){ printf("%d > %d .\r\n",n,N); return 0; } for (i=0; i<n; i++) for (j=0; j<n; j++){ printf("a%d%d=?",i+1,j+1); scanf("%f",&(a[i][j])); } for (j=0; j<n; j++){ printf("b%d=?",j+1); scanf("%g",&b[j]); } d=dat(a,n); if (fabs(d) < EPS){ printf("|a| = 0\r\n"); return 0; } for (k=0; k<n; k++){ cpy(c,a,n); for (j=0; j<n; j++) c[k][j]=b[j]; printf("x%d=%g\n",k+1,dat(c,n)/d); } return 1; }
141 :
デフォルトの名無しさん :02/01/24 20:58
あっそうです。 >データファイルはカレントに作ればよいでしょう。 >それから fscanf ですが、返り値の意味はわかりますか? 学校が時間切れのようなので、 また、明日にでも考えてみます。
みなさん、ありがとうございました。
>>133 >コンパイルが正常終了したときにできるファイル
正確に言うとコンパイルとリンクね。
146 :
デフォルトの名無しさん :02/01/25 04:13
画像処理で顔画像から眉毛だけ抜き出すなんかいい方法ありませんか?
とりあえずどこか無くしてみて、なんかちょっと怖かったら、そこはまゆげです。 それ以外を無くすと、ものすご怖いです。
>>147 わかりやすい!
けどコンピュータで怖いかどうか判断するのは眉毛だけ抜き出すのよりも難しいと思うわれ。
チン毛じゃなかったら眉毛。
う〜ん、age
151 :
麻衣派 ◆COx/Mai. :02/01/25 14:13
>>146 目を捜す。(白黒白のパターン?)
その上のほうにある眉毛色っぽい領域がそれ。
逆立ちしているときは、、、
どうしよう…。
先生、宿題じゃないけど質問です! 文字列をunsigned char型に「数値として」格納したくて下のようなプログラム書いたのですが 無駄が多い気がするので、よろしければご指導おねがいします!言語はC/C++です! char num[]="ff"; //入れたい数値。 char head[]="0x"; strcat(head,num); unsigned long numul=strtoul(head,NULL,NULL); unsigned char numuc=(unsigned char)numul;
153 :
麻衣派 ◆COx/Mai. :02/01/25 14:23
>>152 なにをしたいのかよくわからないけど…
unsigned char n=0xff;
じゃ、ダメなの?
>>151 目をつむっているときは、、、
どうしよう…。
>>152 無駄とかなんかそんなことより
> strcat(head,num);
これはいいのか?
>>153 ,154
すいません。ここではchar num[]="ff"; と固定して書いたんですけど、
ホンとはこのnumにいろんな値が入ってくるのですよ。
・・・で、strtoulで16進と認識してもらうために"0x"つけたのですが・・・
やばいっすかねぇ・・・。
sscanf
undumpって事かな? isxdigitと組み合わせて、ループまわした方が簡単そう。
158 :
麻衣派 ◆COx/Mai. :02/01/25 14:43
>>152 あー、文字列で表された数字ね。
でもそれってstrcat()していいんですか。
それと、strtoulの第3引数はintです。
>>154 たしかに strcat が head[]の配列境界を越えて
書き込んでしまうね。
たぶん
>>152 の期待する添削結果は
char num[] = "ff";
unsigned char numuc = strtoul(num, NULL, 16);
だと思うな。
>>154-159 ありがとうございます。おかげさまで出来ました!
最終的には159さんの方法でやらせていただきました。
>>154 ご指摘の通りです。うっかりしてました。
>>156 sscanf(num,"%x",numuc);でうまくできそうですね。ありがとうございます。
>>157 undumpっていうんですか。・・・・知りませんでした。鬱
161 :
デフォルトの名無しさん :02/01/25 15:53
宿題で検索サイトを作れと言われたんですけど 何から始めればいいのかわかりません。 まず最初に何をすればいいのかを誰か教えてください。
>>161 「何の」検索サイトを作れと言われたのか。
それがわからないと誰もアドバイスしようもない。
また、それは「何の」授業の中でいわれたのか。
C の授業中に言われたのと perl の授業中に言われたのじゃ全然違う。
低能プログラマー共、こんな所で油売ってないで仕事しろ 屑
>>163 自称SIの実態は屑セールスマンな人ですか?
情死す板にでもお帰りやがりください。
#include<stdio.h> #include<math.h> int n=10; int func(int n){ if(n==1) return 1; else return(n*func(n-1)); } double func1(double x){ int i,a; double z=1.0; for(i=1;i<=n;i++){ a=func(i); z+=1.0/a*pow(x,i);} return z; } main(){ double x,z; printf("please input x:"); scanf("%lf",&x); z=func1(x); printf("f(x)=%lf",z); } はeのx乗をもとめるものだがnがでかくなるとなぜオーバーフローするのか? おしえてちょ。
型の上限を越えるから
ダブルは何桁までだっけ?
ソフトを作りました。公開するときにジャンルを書きたいと思います。 「メモリクリーナとシステムリソースの表示・アラーム機能etc」などの 機能をもったソフトはどのようなジャンルに分けられるのでしょうか? 具体的なジャンル名などありましたら教えてください。
ユーティリティ
皆さんのおかげで、どうやら完成したようです。 本当にありがとうございました。 もちろん参考資料として2ちゃんねるプログラム板を挙げておきます。 ******************************************** #include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; int k,a,n; int da[100]; double hi[100]; double lo[100]; int i, j, max, min; if ((fp = fopen("temp.dat","r"))==NULL) { printf("file open error!!\n"); exit(1); } i = 0; a=fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]); while ( a != EOF ) { ++i; a=fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]); } max = 0; for (k = 1; k < i; k++) { if (hi[max] < hi[k]) { max = k; } } printf("最高気温, 日付=%g\n, %d\n", hi[max], max+1); min = 0; for (j = 1; j < i; j++) { if (lo[min] > lo[j]) { min = j; } } printf("最低気温, 日付=%g\n, %d\n", lo[min], min+1); fclose(fp); } ******************************************************** 最高気温, 日付=15 , 1 最低気温, 日付=1 , 5
だからなんで、一旦配列にしまうんだろう。 それから、最低気温と最高気温の表示、まちがってるじょ。 da[i]は、どこへいっちゃったんだ?
考えてくださってどうもありがとうございます。 目とか眉とか口とかそれ以外(鼻の穴とか)を 黒い部分(暗い部分)としては認識できるんですけど、 それらをどうやったら眉とかに分類してくれるんでしょうか?
>>172 リファクタリングしてみようか
・同じことは2度書くな
・初期化、条件判定、カウントがあるならforの方がすっきり書ける
> i = 0;
> a=fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]);
> while ( a != EOF ) {
> ++i;
> a=fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]);
> }
for(i = 0; fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]) != EOF; i++)
;
また、これでaの変数はいらなくなる。
>>173 > だからなんで、一旦配列にしまうんだろう。
あとで平均気温とかの仕様追加が発生したらとか考えると
微妙な問題だな...
>>173 ,175
173さんいう配列にしてしまうというご指摘は、
175さんのご指摘と同じですか?
あとda[]が・・。
提出したのに・・(泣)
また送ろう、しょうがない。
↓なら完成ですよね。
**************
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int k,a,n;
int da[100];
double hi[100];
double lo[100];
int i, j, max, min;
if ((fp = fopen("temp.dat","r"))==NULL) {
printf("file open error!!\n");
exit(1);
}
i = 0;
a=fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]);
while ( a != EOF ) {
++i;
a=fscanf(fp, "%d %lf %lf", &da[i], &hi[i], &lo[i]);
}
max = 0;
for (k = 1; k < i; k++) {
if (hi[max] < hi[k]) {
max = k;
}
}
printf("最高気温, 日付=%g\n, %g\n", hi[max], da[max]);
min = 0;
for (j = 1; j < i; j++) {
if (lo[min] > lo[j]) {
min = j;
}
}
printf("最低気温, 日付=%g\n, %g\n", lo[min], da[min]);
fclose(fp);
}
>>174 黒い部分同士の位置関係(他の部分との角度や距離)を、「典型的と思われる」データと比較するってのは、ど?
180 :
デフォルトの名無しさん :02/01/25 19:06
>>178 そんなこと言い出したらきりないよ。
そのうち、もうちょっとましなコードが書けるようになるよ。
(経験つめばね。)
>>180 そうですね。
がんばります。
長らくお世話になりました。
みなさんお元気で。
182 :
デフォルトの名無しさん :02/01/25 22:15
とある二つの四角形が重ならないようになるプログラムってどんな感じなんでしょう? 教えてください!C++でお願いします!
>>182 意味不明。
四角形が二つ与えられて、それが重なっているかいないかを判定したいのか?
それとも四角形を動かして、重ならないようにしたいのか?
そのときに何か条件はないん?
あと、自分でどれくらいまで考えたかも書くように。
>182 どんな感じと問われても… 割とシンプルだよね。 洗練されてるかどうかは、設計によるんじゃないかな。 そんな感じ。
185 :
デフォルトの名無しさん :02/01/25 22:32
△が重ならないように・・・・? printf("△▽\n"); とか?
186 :
デフォルトの名無しさん :02/01/25 22:34
先生!!ちょっと俺の手に負えないので質問させてください →Z ___________ | | > | >R | > | | =C ) | )L | ) | _________|_____| 上の回路でR=10KΩ、L=20mH、f=10KHzとしたときに C=10pfから500pfまで5pf感覚で変化させたときの入力インピータンスZと Zが最大になるときのCの値をプログラムで求めなさいと言う問題なのですが… できますか?
> 185 それだ! って、そりゃ三角形だよ!! ヽ(`Д´)ノ
188 :
デフォルトの名無しさん :02/01/25 22:37
>>182 申し訳無いです、4角形を動かしてです。
ゲームとかで使うような押し合い判定って言うのかな?
そんなかんじです。
自分では、二つが重なっているかいないかを判定する所まではできたのですが・・
190 :
デフォルトの名無しさん :02/01/25 22:40
>>182 半年前くらいに似た奴をやったけど
もう、データ削除してしまった…
スマソ
191 :
デフォルトの名無しさん :02/01/25 22:40
192 :
デフォルトの名無しさん :02/01/25 22:41
>>186 ? 公式知ってんなら簡単だろ?
オレ、公式忘れちゃったもんねぇ〜。
一応大学なんですけど 落ちこぼれなんで高校生みたいなもんです
大学生か。
>>188 つまり、四角形を押して動かすってことか・・。
どのくらい物理的に正確にやる必要があるの?
>>186 Rのインピータンスは?
Lのインピータンスは?
このとき、RLのインピータンスは?
C=xとしたときの、Cのインピータンスは?
このときの、入力インピータンスは?
順に考えてみてください。
うーん…どうプログラミングしたらいいのかが分からないんですよ 例みたいなものもないし、先生は絶対教えてくれませんから
> 191 int zmax = 0 ; int ans = 0 ; for (int c = 10; c <= 500; c += 5) { int z = 公式(c); if (zmax < z) { zmax = z; ans = c; } } intでいいのかfloatやdoubleが必要なのかは氏らね。 画面に出すともファイルに吐くとも書いてないんで出力の事も氏らね。
200 :
デフォルトの名無しさん :02/01/25 22:52
>>198 お〜っと、重症ですねぇ〜。
あなた一度でもプログラム組んだことあるの?
201 :
デフォルトの名無しさん :02/01/25 22:53
とりあえずは…
>>198 この回路の入力インピータンスをあらわす式はわかるってこと?
じゃあ、まずいままでの最大のZを与える変数を用意しておく。
Zmaxと名前付けとくとする。で、これに十分小さい値をいれとく。
で、for文で、cを10から500まで5ずつ変化させて、そのときの入力
インピータンスZを計算させる。
このとき、ZがZmaxより大きければ、Zmaxを更新して、このときのCの値を
記憶しておく。
で、最後に記憶していたCを表示させればいい。
。。とここまで書いたら199氏がプログラム例示してくれてますね。
203 :
デフォルトの名無しさん :02/01/25 22:55
>>190 いえ、その心意気だけでありがたいです。
>>196 そんなに正確でなくともいいかと、指定されなかったものですので。
えれなたんってあんまし来ないね〜。
>>203 だったら、一番簡単なのは、Aを動かしてBと重なったときに、
BをAが動いたのと同じ方向に動かすとして、どれくらい動かせば
重ならないか計算すればいい。
206 :
デフォルトの名無しさん :02/01/25 23:05
>>203 と言うことは、一次元でもいいのかな?
この手のものは、位置情報を保存するための
仮想マッピングテーブルを用意するといいのでは?
四角はどうやって表現するつもり?
呼んだ〜? x軸とy軸で分けて考えるといいよ。 +-------+ +--------+ っていうのがあったら、重なってる部分だけ、どっちかの 四角形をずらしちゃう(半々でも、かたっぽを固定してもいいかな)。 (四角形が速度とかもってたら、その反対方向に、 速度に比例するように分配するとか。その場合は、 衝突で速度を交換したりするひつようもあるんじゃないかな)
重心を求めて互いに反対方向にずらせばいいんじゃねぇの?
とりあえず、
>>199 さん
>>202 さんの助言で
直列回路の場合の入力インピータンスは求められるようになりました
後は上記の図の場合どうすればいいか分かれば何とかなりそうです
>>199 さん
>>202 さん
ありがとうございます
並列回路の場合のインピータンスの求め方が分かる方がいらっしゃいましたら
ぜひご教授ください
>>209 >>197 を見てどこまでわかるか答えてみなされ。
まあ、AとBが並列だったら1 / (1 / A + 1 / B)
211 :
デフォルトの名無しさん :02/01/25 23:28
>210 複素演算の話でねーの?
(R+jωL)//(1/jωC) j^2=(-i)^2=-1 a//b=1/(1/a+1/b) ω=2πf
213 :
デフォルトの名無しさん :02/01/25 23:40
四角形の件にレス下さったみなさんありがとうございます! これからじっくり考えて理解しようと思います。 どうもでした!
>>207 スレ作成者がsageでいいの?
っていっても"sage"でなしに" sage"だから関係ないのか。
関係あったみたいだね。 2chのシステムなら当然か。
01234 56789 幅5で上の様に並べる場合、x=n%幅 y=n/幅で済みますが、 0259 148C 37BE 6ADF の様に斜めに並べる場合のスマートな式が何も思い浮かびません。 どなたか知恵を貸しては頂けませんでしょうか。
x += y
>216 こんなのかな?えれな、泥臭い方法しか思いつかないよ。 #include <stdio.h> #define X 4 #define Y 5 int main() { int x, y, yy,i=0; int p[Y][X]; for( y=0; y<Y; y++) for( x = 0, yy=y; yy>0; x++,yy-- ) p[yy][x] = i++; i=X*Y-1; for( y=Y-1; y>0; y--) for( x=X-1, yy=y; yy<Y; x--,yy++) p[yy][x] = i--; for( y=0; y< Y ; y++ ){ for( x=0; x< X; x ++ ) printf("%2x ",p[y][x] ); printf("\n"); } }
あやや。ループの条件があやしいよ、、、 しかもXとYが離れすぎると破綻しちゃうし こんどこそ、大丈夫かな? #include <stdio.h> #define X 7 #define Y 5 int main() { int x, y, yy; int p[Y][X]; int i = 0; for( y=0; y<Y+X; y++) for( x = 0, yy=y; x<X && yy>=0; x++,yy-- ) if( yy < Y && x < X ) p[yy][x] = i++; } for( y=0; y< Y ; y++ ) { for( x=0; x< X; x ++ ) printf("%2d ",p[y][x] ); printf("\n"); } }
>>216 一番左の数は、n行目の時(n-1行目の左端+n)だ。
次の行のあたまの数未満の間は、(x(n-1)+1, y(n-1)-1)を繰り返せばいい。
半分まで配置したら、こんどは
>>216 の例でいうと6-9の対角線でひっくり返した座標でFから順に配置だ。
>>218-219 有り難うございます。
幅X・高さY時、n のx・y位置が欲しいのですが、
正直、最悪、その用な手法でiが一致したらbreakしようかと思っていました^;
なんとなく図にして眺めてみると、スマートな式で簡単に
求められる様な気がしてならなく、すっきりしません(;´Д`)
対角線じゃないな、180度回転だな。
>>220 どもです。。。現在理解&検証中(;´Д`)
はしょって書いたから、伝わりずらかったかな? ま、わかんなかったら聞いてね、もっと丁寧に説明するから。
理解出来ませんでした。。。恥ずかしいヨウ(;´Д`) 眠気が吐き気に変わってきたので起きてからもう一度考えてみます。。 記憶の断片 if (n<W*H/2) x=n-左端 y-=x 左端の数字とyが抜けてるなぁ(;´Д`)
>220 それって、幅が高さに比べ2以上多いときとか、 真ん中の方が余ったりしないかな? >幅X・高さY時、n のx・y位置が欲しいのですが、 それを最初にかいてほしかったなー。 安直に、逆変換テーブルをつくるとかもあるよね。
>>226 >>216 が理解すれば、そういうのは対応できると思われ。
nの最大数によって好きな方使えばええよ。
/*ためしてみたけど、ぜんぜんスマートじゃないや、ゴメソ。では、細密充填リストで…*/ void left(int n, int* pi, int* pt){ int i=1, t=0; while(1){if(t+i>n){*pt=n-t;*pi=i-*pt-1;break;} t+=i++;}return;} void position(int n, int xl, int yl, int* px, int* py){ int r, cn, m ; if(xl<=yl) cn=xl*(xl+1);else cn=yl*(yl+1);cn/=2; if(cn>n){left(n, &r, &m);*px=m;*py=r ;} else if(xl*yl-cn<=n){left(xl*yl-n-1, &r, &m);*px=xl-m-1;*py=yl-r-1;} else{m=n-cn; if(xl<yl){*px=m%xl;*py=xl+m/xl-(m%xl);} else{*px=m/yl+1+m%yl;*py=yl-m%yl-1;}} return;} #include <stdio.h> #define X 8 #define Y 9 main(){int i, x, y ;int a[X][Y]; for(i=0;i<X*Y;i++){position(i, X, Y, &x, &y) ;a[x][y]=i;} for(y=0;y<Y;y++){for(x=0;x<X;x++)printf("%3d", a[x][y]);printf("\n") ;}}
えれなたんは沙夜たん・・・(;´Д`)ハァハァ
#include<stdio.h> #include<stdlib.h> #include<math.h> float func1(int *a){ int sum=0,i; float ave; a=a+1; for(i=1;i<=100;i++){ sum=sum+*a; a++; } ave=(float)sum/100; return ave; }main(){ int a[110],i; float ave,std; for(i=1;i<=100;i++){ a[i]=rand()%100+1; } for(i=1;i<=100;i++){ printf("%3d",a[i]); if(i%10==0) printf("\n"); } ave=func1(a); printf("ave=%f",ave); } 4行目をvoid func1(int *a){ としてはいけないのはなぜですか? そもそもvoidってなんですか?
231 :
デフォルトの名無しさん :02/01/26 18:15
>>230 関数にはぁー、型とぉー、返り値があってぇー、
返り値がいらないときはぁー、void 型にするのぉー。
つまりreturnで返すときはvoidは使わないということですか?
233 :
デフォルトの名無しさん :02/01/26 18:23
>>232 使わない、と言うかぁー、使えない。
void は型がないと言う意味だからぁー、
返り値の大きさ(使用されるメモリサイズ)がぁー、
わからないんですぅー。
void とは 「無」です。
void@(以下略)
#include<stdio.h> void func(float a[10][10],int n){ int i,j,k; float c[10][10]; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ c[i][j]=0; for(k=1;k<=n;k++){ c[i][j]+=a[i][k]*a[k][j]; } } } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ a[i][j]=c[i][j]; } } } main(){ float a[10][10]; int i,j,n; printf("please input n:"); scanf("%d",&n); printf("please input a\n"); for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ printf("a[%d][%d]=",i,j); scanf("%f",&a[i][j]); } } printf("\nA=\n"); for(i=1;i<=n;i++){ printf("|"); for(j=1;j<=n;j++){ printf("%4.1f",a[i][j]); } printf("|"); printf("\n"); } func(a,n); printf("\nA^n=\n"); for(i=1;i<=n;i++){ printf("|"); for(j=1;j<=n;j++){ printf("%4.1f",a[i][j]); } printf("|"); printf("\n"); } } これだとAの2乗が求まりますが、n乗にするにはどうすればいいですか?
void *
>>239 そういう時は2乗関数ではなくて
c=a*b となる関数を作って あとはバイナリ分解で計算するのが定石
242 :
デフォルトの名無しさん :02/01/26 19:25
>>239 Aのn乗求めるのにこんな長いコードが必要とは思えないが。
解読する気にもならん。
for(i=1;i<N;i++) func(a,n); カナ?
244 :
デフォルトの名無しさん :02/01/26 19:57
memcpy(b,a,sizeof(a)); for(i=1;i<N;i++) func(a,b,n); くらいにしなきゃだめでしょう。 2乗じゃなくて掛け算する関数を作ればいい。
>>244 計算量の問題があるから、
Aのn/2乗を計算してから、Aのn乗を計算するような感じで再帰的にやりたいね。
>>245 tail recursion にしないとね。
247 :
デフォルトの名無しさん :02/01/26 21:03
厨な質問で申し訳ないんですが、C言語で#ifとif文はどう違うんですか? #えれなちゃんに答えてもらうと嬉しいな(ワラ
早坂日和>>>>>>>>>>璃月沙夜>神岸あかり>>>>>>> >>>えれなたん>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>氷川菜織
怜さん、麻衣タンにも復活希望。
>>249 えろげネタはえろげ板でやって欲しい風味。
253 :
デフォルトの名無しさん :02/01/27 09:17
宿題age
254 :
デフォルトの名無しさん :02/01/27 10:31
そろそろ卒研も終わりか...
255 :
デフォルトの名無しさん :02/01/27 20:19
すみません、お恥ずかしい限りなんですが、お聞きします Q.次の方程式の解をニュートン法によって求めなさい sinΘ-cosΘ=0 ただし 0<=Θ<=2π と言う問題です、できますでしょうか?
>>255 sinΘ-cosΘ=0
sinΘ=cosΘ
sinΘ/cosΘ=1
Θ=π/4,5π/4
でよろしいですか?
>>248 と言われてもわからないんですが…
#ifとifの大きな違いというのは?
誰か詳しく教えてください!
>258 … > if > プリプロセッサ用のif プリプロセッサ>コンパイル前に処理される。 if文 制御構造>実行時の処理の流れを制御する。
すみません、説明不足でした… C言語を使って求めないといけないんです ごめんなさい
えれなを出せ
>>258 実際にプログラム書いて、
プリプロセッサを通してみな。
263 :
デフォルトの名無しさん :02/01/27 21:44
264 :
デフォルトの名無しさん :02/01/27 21:48
えれなたん… 出てきて… 会いたいよ…
#include <math.h> void foo(double x) { printf("sin(%f)-cos(%f)=%f\n", x, x, sin(x)-cos(x)); } int main(void) { foo(atan(1.0)); foo(atan(1.0)+M_PI); return 0; }
266 :
デフォルトの名無しさん :02/01/27 22:23
「ニュートン法とは、実際に値を代入して方程式を解く方法です。」 だって。 単純に考えれば、for でまわせばそのうち答えがわかる、ということかな。 でも、精度の問題があるから、そんなに簡単には行かないと言うところか。 とりあえず、何がしかのコードを提示すれば、アドバイスもらえるんじゃないの?
>>255 求められてる精度は?
問題に書いてない?
268 :
デフォルトの名無しさん :02/01/27 22:53
>>267 書いてありません…
漠然ととけと書いてあります
とりあえず、いま友人にプログラムを見せてもらいました
ただ、そのプログラムですと
sinとcosをつかうとエラーがでてしまいます
ですから、sinとcosをつかっても動けるように改良していただけますか?
#include <stdio.h>
#include <math.h>
#include <conio.h>
float f (float); /*関数fの定義*/
float fd ( float ); /*関数の微分用の関数fdの定義*/
int main(void)
{
float x, xd, ep, eps = 0.0001; /*関数の設定*/
int n, nmax=50; /*計算回数と最大反復回数の設定*/
scanf(" %f",&x); /*初期値の入力*/
for(n=1; n<=nmax; n++){ /*規定回数内での繰り返し*/
xd=x-f(x)/fd(x);
ep=xd-x; /*収束の度合いを計算*/
printf("n=%2d x=%8.5f xd=%8.5f ep=%8.5f\n",n,x,xd,ep); /*計算の結果を表示*/
x=xd;
if( fabs ( ep ) < eps ) break;/*収束値が出たら計算を終了*/
}
printf( " 収束値 = %8.4f \n",x); /*収束値を表示する*/
getch(); /*結果をウィンドウに表示する*/
return 0; /*値を返す*/
}
float f ( float x ) /*関数fの計算*/
{
return sin * x - cos * x; /*計算式*/
}
float fd ( float x ) /*関数fdの計算*/
{
return 1-1; /*計算式*/
}
>>267 Cの文法を理解せよ。
sin * xはsinという変数とxという変数を乗ずる意味で、sin xの値を求めていない。
もう1個おまけだ xd=x-f(x)/fd(x); で float fd ( float x ) /*関数fdの計算*/ { return 1-1; /*計算式*/ } だと、0除算だ。
return sin(x)-cos(x); と言うような書き方でよいのでしょうか?
>>268 conio.hなんかインクルードするなよ・・・
getch(); /*結果をウィンドウに表示する*/ ここらへんがイイ! DOS時代を知らないんだろうな。
276 :
デフォルトの名無しさん :02/01/27 23:40
>>273 それでいいよ。
fd()はなにやってるの?
提出前にコメントは消しといたほうが無難だな
278 :
デフォルトの名無しさん :02/01/27 23:43
fd()ってのは、df/dxのことだろ? 微分計算できねーのか? なんで1-1なんだよ?
そのプログラムを見せてくれた友人とは縁を切ることをお勧めする
すみません…
281 :
デフォルトの名無しさん :02/01/27 23:59
>>280 君が謝る必要はない。
君が負うべき責は唯一つ、2chに聞きにきたことだ。
しかし、気づかずなかったことも事実な訳で 実質上同レベルかと…半年もやってるのに 今やってみたらなんかとんでもない数値が出ました
>>255 まずは関数ポインタを受け取って微分の近似値を計算する部分からだな
やってみるなよ(ワラ で、もうオケーなの?
大まじめ
駄目みたいです、今日はそろそろ寝ます
290 :
デフォルトの名無しさん :02/01/28 00:18
>>289 なんで?
ニュートン法が分からんの?Cが分からんの?
単純な漸化式なんで両方分かってればいけるはずだが。
ここは、えれなたんが降臨しなくては。
>>255 こんな感じ、あまりうまく作れなかった。
#include <math.h>
#include <stdio.h>
#define FRST_DEVI 1e-4
#define ERR_RANGE 1e-8
#define LOOP_MAX 1000
double cal_error(double x, double y){
return fabs(x-y) ;}/*ここは手直しせよ(相対誤差にするべき)*/
double d(double (*func)(double), double x) /*funcのxでの微分係数を計算*/
{
int c=0 ;
double h, ret, prev ;
h = FRST_DEVI ;
ret = (func(x+2*h) - func(x)) / (2*h) ;
do {
prev = ret ;
ret = (func(x+h)-func(x))/h ;
c++, h/=2 ;
} while(cal_error(prev, ret)>ERR_RANGE && c<LOOP_MAX) ;
return ret ;
}
double newton(double (*func)(double), double x) /*初期値xでfuncのニュートン法*/
{
int c=0 ;
double prev_x ;
do {
prev_x = x ;
x = x - func(x)/d(func, x) ;
c++ ;
} while(cal_error(prev_x, x)>ERR_RANGE && c<LOOP_MAX) ;
return x ;
}
double f(double x){ /*ターゲット関数*/
return cos(x)-sin(x) ;}
void main(void){
printf("%lf\n", newton(f, 0)) ;}
>>285 ここは自分の技術を披露するスレじゃないぞ。
暇だから丸投げ大歓迎。分かる範囲で
295 :
デフォルトの名無しさん :02/01/28 01:22
>>292 つーか、ニュートン法は単なる漸化式なんでそこまでやる必要は無いと思うぞ。
double f(double x){
return (sin(x)-cos(x));
}
double fd(double x){
return (sin(x)+cos(x));
}
この二つを定義して、あとは友達のループでいけるぞ。
297 :
デフォルトの名無しさん :02/01/28 18:35
#include <math.h> #include <stdio.h> #define VAL_ans 0.0 #define VAL_div 10.0 void sub( double t1,double t2 ); double func( double t ); int main() { sub( 0.0, M_PI*2.0 ); return 0; } void sub( double t1,double t2 ) { double a1,a2,step; char wk1[ 20 ],wk2[ 20 ]; step = ( t2-t1 ) / VAL_div; while( t1 < t2 ) { a1 = func( t1 ); a2 = func( t1+step ); if( ( a1 < VAL_ans && a2 > VAL_ans ) || ( a2 < VAL_ans && a1 > VAL_ans ) ) { sprintf( wk1, "%17.14f", t1 ); sprintf( wk2, "%17.14f", t1+step ); if( !strcmp( wk1, wk2 ) ) { printf( "ans = %s\n", wk1 ); break; } sub( t1, t1+step ); } t1 += step; } } double func( double t ) { return sin( t ) - cos( t ); }
↑なにがしたいのかわかりまてん。
299 :
デフォルトの名無しさん :02/01/28 20:49
お願いです!この問題を解いてください。 問題 学生番号と点数を読み込んで上位10名分のデータを次のように 出力するプログラムを作成せよ。 @1@@A95B@@@100 @2@@A95B@@@@94 @3@@A95E@@@@70 @:空白 @3@@A95B@@@@65 @5@@A95D@@@@48 ・ ・ ・ ・
ここは「手伝おっか?」スレで「やってあげる」スレではありまてん。
%2d%6X%6d
>>299 #include <stdio.h>
int main(void) {
const char* data[] = {
" @1@@A95B@@@100 ",
" @2@@A95B@@@@94",
" @3@@A95E@@@@70 @:空白",
" @3@@A95B@@@@65",
" @5@@A95D@@@@48",
" ・",
" ・",
" ・",
" ・",
NULL
};
const char** p = data;
while(*p) puts(*p++);
return 0;
}
だって“何処から”読み込むとも書いてへんしなー
>>299 言語は? 特に指定がないなら
sort -k 3,3 infile | head -n 10
宿題を頼むやつって、どうしてこう、問題の説明もできないバカばっかり なんだ?
>>304 「宿題丸投げしたらやってあげる!」
なんてスレは無いと思われ…
なんか「教えて君」がかわいく思えてきた今日この頃...
下へさがりまーーーす。
>299 全角・半角混合プログラムはちょっとむつかしいかな? 入力はぜんぶwchar_tに変換して、さらに、ぜんぶ半角に してからとりあつかうと、簡単だよ。さいごには、 wchar_t to_wider(wchar_t ch) { if( L'A' <= ch && ch <=L'Z' ) return ch - 'A' + L'A'; if( L'a' <= ch && ch <=L'z' ) return ch - 'a' + L'a'; if( L'0' <= ch && ch <=L'9' ) return ch - '0' + L'0'; if( ch == L' ' ) return L' '; return ch; } みたいなのをループさせて、出力をみんな全角化すれば、 あとは普通にやればいいとおもうよ。
struct car { char make[20]; int year; }; car * input(void); int main() { car * ps; ps = input(); cout << "Make: " << (*ps).make <<"\n"; cout << "Year: " << ps->year << "\n"; delete [] ps; return 0; } car * input(void) { car * ps = new car; cout << "Please enter the make: "; cin.get(ps->make, 20); cout << "Please enter the year made: "; cin >> ps->year; return ps; } このステートメントをループさせたいのですが ステートメントをintにする方法教えてください
例えば最初にループの数きいて Car#? Please enter make ????? please enter year ???? って感じにできますでしょうか?
>311のソース、newにたいしてdelete[]発行してるよっ。 >312 こうかな?car*で扱う必要性はないんだけど‥‥ typedef std::vector<car*> carArray; carArray input(void) { int loop=0; cout <<"Car#?" cin >> loop ; carArray arr; for( int i=0; i<loop; i++) { car * ps = new car; cout << "Please enter the make: "; cin.get(ps->make, 20); cout << "Please enter the year made: "; cin >> ps->year; arr.push_back( ps ) } return arr; }
>>313 見よう見真似で本の例題見ながら練習問題解いてて
つまってたとこです
それを参考に考えて見ます
315 :
デフォルトの名無しさん :02/01/28 23:20
\0とNULLの具体的な違いを教えてくれませんか?
違います(笑) ここだけの話し、時間かけてVisual Studio落としたんで 時間に見合うだけ遊んでみようかと・・・・
ware?
>>315 \0とNULLはまったく違うぞ?
'\0'とNULLならまだわかるが・・・
320 :
デフォルトの名無しさん :02/01/28 23:33
>話し はなしし? は置いといて。 MSDN会員、と言うわけでもなさそうだな‥‥
MSDN会員ならそんなくだらない質問はしないと思われ
323 :
デフォルトの名無しさん :02/01/28 23:36
>>321 'はなし'を変換してみてください。ちゃんと'話し'って出ますよ。
>>323 意味が違う。
私が話します。
私の話。
325 :
デフォルトの名無しさん :02/01/28 23:39
日本語の話は別スレでしてきます。 ところで\0とNULLの具体的な違いを教えてくれませんか?
326 :
デフォルトの名無しさん :02/01/28 23:42
おなじ。
'\0' -> (char)0 L'\0' -> (wchar_t)0 文字コードとしての0をあらわす。 NULL文字とも言ふ。 NULL -> 0 or (void*)0 ポインタがどのオブジェクトもさしていないことをあらわす。
328 :
デフォルトの名無しさん :02/01/28 23:44
>>325 お前がこの違いを知ったところで何もできん。
同じと思ってろ。
329 :
デフォルトの名無しさん :02/01/28 23:47
高卒で良いから 犯罪犯すなよ (笑
332 :
デフォルトの名無しさん :02/01/28 23:51
>>327 初心者が勘違いしそうな点があったので、
ちょっと補足させてくれ。
>文字コードとしての0をあらわす。
文字コードの0x00の事です。
数字の0じゃないからね。
>>329 '\1'や'\2'も試してみれば理解できるかと。
'\0'はただCがそれを文字列の終端と認識するだけで、それ以外は他の文字と何の代わりもない。
334 :
デフォルトの名無しさん :02/01/28 23:54
>>333 >'\1'や'\2'
え?まじ?
こんな命令あったの?
知らなかった・・・
335 :
デフォルトの名無しさん :02/01/28 23:55
<html> <MARQUEE direction="right" scrollamount="5"> -= ∧_∧<BR> -=≡ ( ・∀・)<BR> -=( つ┯つ<BR> -=≡/ / //<BR> -=≡(__)/ )<BR> -= (◎) ̄))<BR> </MARQUEE> </html> 上の10行をメモ帳に書く。 ↓ 名前を付けて保存。 ↓ 保存したファイルの拡張子を.htmlに変更。 ↓ ブラウザで開く。 ↓ (・∀・)走る。
(・∀・)イィ!
337 :
デフォルトの名無しさん :02/01/29 00:57
ここは暇人も多いみたいだし、丸投げ専用スレでも作る?
丸投げはよくないよ。 本人のためにもIT業界のためにも。
出来るだけトリッキーなコードで応える○投げスレなら、おもしろそう。
340 :
デフォルトの名無しさん :02/01/29 01:13
だってココに質問しに来る奴って、 ○○教えてください ↓ 詳しく書けやゴルァ ↓ すみません。もうきません。 ↓ そして誰もいなくなった・・・・。 だもん。 根性無しが多いから、人のソース読む(解析する)だけでも 少しは力つくから、まずはそこからということで。
>>340 解析するならいんだけど、丸写しされて提出という可能性があるから。
それに、丸投げするにしても詳しく書いてくれないと・・・
丸写し提出オッケーよーん。 同類出現の連座で零点でも知らんけど
>339
えれなたんの
>>310 も、かなりキてるな‥‥
えれなたんにはかつての怜たんのような勢いがないのう・・・。 日下部殿も何処かに行きよったし・・・。 あの頃が懐かしいのう・・・。
345 :
デフォルトの名無しさん :02/01/29 01:54
懐古主義者は逝ってよし。
,〜((((((((〜〜、 ( _(((((((((_ ) |/ ~^^\)/^^~ヽ| | _ 《 _ | (|-(_//_)-(_//_)-|) | 厶、 | cout<<"このスレは無事に正常終了した。\n" \ |||||||||||| / <<"私が最後の仕事をするとしよう。\n"; |\___/::\ /丶 / / \ return 0; /,': // ヽ \} / /´ ̄ ̄ ̄ ̄ :::::: \-、 / _/ :: 、 ゙ `\ / ~_/`'' : 、` ゙ヽ / __/`'' ___ ::丶 \:: ヽ、 ヽ / / ` ヽ、{丶 ヽ :::ヽ | / ~ヽ、ヾ\ ゙i | 。 -´/ /ゝ、 ` _ ヽ、/X ヽノ :::|/// ~` ''' `' / ヽ | , | | :::| / | 〃 \ | {~ ヘ___ \ 。 .:::ノ /_/| | :::| | 丶ノ \__ `- 、_____, -´イイ_| | ::::| | | { | \___ \ノ イ_ | | :::| | { ´|ヽ、 ,,`i` // \ノ |丶 :丿 | {´_|_ `'''''´ l //ノヾ,ノ`ゝヽ____ /ヽ,、 | | i `'''ー-''~ }= ノ ヾ /〃 | ヽ} ヽゝ、_ } = ヾ | ノ |
,〜((((((((〜〜、 ( _(((((((((_ ) |/ ~^^\)/^^~ヽ| | _ 《 _ | (|-(_//_)-(_//_)-|) | 厶、 | cout<<"すまない。冗談だ。\n" \ |||||||||||| / |\___/::\ /丶 / / \ /,': // ヽ \ / /´ ̄ ̄ ̄ ̄ :::::: \-、 / _/ :: 、 ゙ `\ / ~_/`'' : 、` ゙ヽ / __/`'' ___ ::丶 \:: ヽ、 ヽ
怜たん>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>えれなたん
怜タンハァハァ…
351 :
デフォルトの名無しさん :02/01/29 10:07
もっともりあげるれす えれなたんれてきてくらしゃい
怜たん萌え萌えゲームでも作るか・・・。 麻衣たんも入れるか・・・。
>>354 勘弁してくれ、今はそんな暇はない。
いつか暇ができたら作るか・・・ということで。
まあ、
>>353 のような書き込みをしてしまうくらいに
萌え尽きない状態で終わってしまった怜たんスレを残念に思うわけだ。
,〜((((((((〜〜、 ( _(((((((((_ ) |/ ~^^\)/^^~ヽ| | _ 《 _ | (|-(_//_)-(_//_)-|)セミコロンを付け忘れていた。 | 厶、 | ; \ |||||||||||| / |\___/::\ /丶 / / \ /,': // ヽ \ / /´ ̄ ̄ ̄ ̄ :::::: \-、 / _/ :: 、 ゙ `\ / ~_/`'' : 、` ゙ヽ / __/`'' ___ ::丶 \:: ヽ、 ヽ
#include<stdio.h>//標準的な出し入れでエッチをインクルード #include<stdlib.h>//標準的な図書館でエッチをインクルード #include<conio.h>//出し入れ制御の為の意思の操作卓をインクルード int main(void) { const int Ore=0,Reitan=1; int Orgasmus[]={0,0}; while(getch()=='i')//ティムポを入れる。偽なら途中でやめる。 { switch(Orgasmus[Ore]+Orgasmus[Reitan]) { case 0: printf("怜「あっ・・・。」\n"); Orgasmus[Ore]=(++Orgasmus[Reitan]); break; case 2: printf("怜「あっ、はあっ、ああ・・・。」\n"); Orgasmus[Ore]=(++Orgasmus[Reitan]); break; case 4: printf("怜「ああんっ、はっ、はあッ・・・!」\n"); Orgasmus[Ore]=(++Orgasmus[Reitan]); break; case 6: printf("怜「あッ、んふうッ、あはあッ・・・!」\n"); Orgasmus[Ore]=(++Orgasmus[Reitan]); break; case 8: printf("怜「はあッ・・・ああッ!はあん!」\n"); Orgasmus[Ore]=(++Orgasmus[Reitan]); break; case 10: printf("怜「ああん!い、いっちゃう!ああッ!はぁッ!」\n"); Orgasmus[Ore]=(++Orgasmus[Reitan]); break; case 12: printf("怜「あッ、はあ、あああはぁぁッ!!」\n"); printf("俺と怜たんは共に絶頂を迎えた。\n" "怜たんの中はとても気持ち良かった。\n"); while(!(getch()=='o'));//ティムポを出す return 0; } while(!(getch()=='o'));//ティムポを出す if(Orgasmus[Reitan]<=2) printf("ちゅっ・・・。\n"); else if(Orgasmus[Reitan]<=4) printf("ちゅくっ・・・。\n"); else if(Orgasmus[Reitan]<=5) printf("ちゅくちゅっ・・・。\n"); else printf("ちゅくちゅくっ・・・\n"); } printf("俺は途中でエッチをやめた。\n" "怜たんの悲しそうな表情が痛かった・・・。\n"); return 1; } /*こうして怜たんと図書館で普通にエッチをしましたが、満足できません。 どうすればよいのでしょうか?*/
age
360 :
デフォルトの名無しさん :02/01/30 01:05
なれ合いUZeee! もはや全然宿題と関係ねーし。 pinkbbsにでも逝ってよし!
>>360 ならば何故ageる?
仲間に入りたいのか(藁
つーか、ム板全体に厨房がなだれ込んでる気がするが・・・。 他のスレッドもいきなり荒れてきたぞ。 (おそらく受験終わった工房・春休みに入った大学生がなだれ込んでるんだと思うが)
それもあるけど、monazillaスレがあちこちに紹介された 影響も結構あるように思う。
>>362 それはあまり関係がないように思うが。
ただ、確かに少し荒れ模様だな。
不定期でときに起こる一時的な荒れだとは思うが。
>>358 これからチョクチョク顔出すようにするから、そういうのやめてね・・・
えれな?怜?そんなものはどうでもいい。 宿題タンよ、来い来い。
来んでいいよ、もともと隔離スレでしょうに、ここ。 こんなタイトルのスレがあるから、勘違いした丸投げや作って君が横行する。
なければないで、新しいクソスレができるだけでは?
メモリの確保のやり方か、データのやり方がおかしいので、 実行時にメモリーリークを起こしているみたいなのですがどこが おかしいのでしょうか。 /* factorization.c 因数分解する */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <math.h> /* 求める因数の下限 */ #define FACTOR_LOWER_LIMIT (2) typedef struct Factor_tag Factor; struct Factor_tag { int value; Factor * next; /* 末端はNULL */ }; typedef struct Header_tag { int size; /* Factorのリストのサイズ */ Factor * head; } Header; static Factor * addition(int value, Factor * current, Factor ** head); void factorization(const int number, Header * const pheader) { Factor * head = NULL, * current = NULL; int loop, dest; { int tmp; tmp = ceil(sqrt(number)); dest = (tmp > FACTOR_LOWER_LIMIT) ? tmp : FACTOR_LOWER_LIMIT; } if(number == dest * dest) { current = addition(dest, current, &head); ++pheader->size; } for(loop = FACTOR_LOWER_LIMIT; loop != dest; ++loop) { if(number % loop == 0) { current = addition(loop, current, &head); current = addition(number / loop, current, &head); pheader->size += 2; } } pheader->head = head; #ifdef DEBUG printf("prcessing %d is over.\n", number); #endif /* DEBUG */ }
Factor * addition(int value, Factor * current, Factor ** head) { Factor * store; store = malloc(sizeof(Factor)); store->value = value; store->next = NULL; if(NULL != current) { current->next = store; } if(NULL == * head) { * head = store; } return store; }
Factor * addition(int value, Factor * current, Factor ** head) { Factor * store; store = malloc(sizeof(Factor)); store->value = value; store->next = NULL; if(NULL != current) { current->next = store; } if(NULL == * head) { * head = store; } return store; }
同じでした…
解放するところを見ないとわかりません。
sizeof(Factor) が、アヤシイと見たが…
あ、んなことねーか
コンパイル、実行できる最小限のソースじゃないと…
void processbody(Factor * factor) { Factor * post; if(NULL == factor) return; post = factor->next; free(factor); factor->next = NULL; // finalize(post); processbody(post); } void finalize(Header * pheader) { processbody(pheader->head); } int main(void) { Header header; Factor * current; int i; factorization(100, &header); current = header.head; for(i = 0; i != header.size; ++i) { printf("\n%d: %d ", i, current->value); current = current->next; printf("%d ends.", i); } printf("\n"); printf("finalize begins.\n"); finalize(&header); printf("finalize ends.\n"); return 0; }
//int main()にHeader headerの初期化を入れる。 header.size = 0; header.head = NULL;
人の話を聞けよ>リスト垂れ流してるだけの猿
382 :
麻衣派 ◆COx/Mai. :02/01/30 14:04
void processbody(Factor * factor) { Factor * post; while(NULL!=factor){ post=factor->next; free(factor); factor=post; } } 再帰使わないといけない理由があるの?
383 :
麻衣派 ◆COx/Mai. :02/01/30 14:07
>free(factor); >factor->next = NULL; こ、これはなに、、、
header.sizeはどこで初期化するの?
>>381 さま、すみませんでした。
369に追加をくっつけるとコンパイルできると思います。
実行時エラーは「"hogehoge"の命令が"0x000000000"のメモリを参照しました。
メモリが"written"になることはできませんでした。」です。
>>382 さま
再帰を使う理由はありません。しかし、main()からfinalize()を呼ばなくても
エラーはでます。だから、factorization()かaddition()に間違えがあると考
えているのですが。
379を書き直しました。 int main(void) { Header header; Factor * current; int i; //int main()にHeader headerの初期化を入れる。 header.size = 0; header.head = NULL; factorization(100, &header); current = header.head; for(i = 0; i != header.size; ++i) { printf("\n%d: %d ", i, current->value); current = current->next; printf("%d ends.", i); } printf("\n"); printf("finalize begins.\n"); finalize(&header); printf("finalize ends.\n"); return 0; }
387 :
麻衣派 ◆COx/Mai. :02/01/30 14:29
>>free(factor); >>factor->next = NULL; >こ、これはなに、、、 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ | なんで見てくれないんだろう… | \ /  ̄∨ ̄ ̄∨ ̄ ̄ ̄∨ ̄ ̄ ̄∨ ̄ | |\|/ | | | |∧ ∧ |/⌒ヽ、| ∧_∧ | ∧∧ | |(,,゚Д゚) ||,,゚ Θ゚)|(; ´Д`)|(=゚ω゚)|
>>383 あ、あー、こ、これでした…
なんとも、複雑な気持ちです。みなさま、本当にありがとうございました。
C言語での個人情報ファイルの作り方を教えてください。(ソート、検索が可能でレコードの追加、削除、訂正、新規などの操作ができるもの )
(○投げのくせに、内容の説明が出来ないようなやつ、なにかいい呼び方ない?)
392 :
麻衣派 ◆COx/Mai. :02/01/30 14:39
麻衣派は信用されないのか…
>>389 麻衣さんも、怜さんも、こころからお慕いもうしております。
すこし、焦り気味だったもので、申し訳ありませんでした。
>>391 謎かけクン
・・・う〜〜んいまいち。
つーかどのスレみても質問してるやつでまともな説明できてるやつのほうが少ない。
説明できるやつはそもそもこんなところに聞きに来ないかも。
>390 PRO*CをつかってSQLを投げるといいよっ。
>>395 そーね、たしかに。
でも、ほら、問題丸写しのほうが、よっぽど答えやすいし。
そういえば、問題をスキャナで取って、あぷろどしただけってやつもいたなぁ。
謎かけといえば、俺の小学生の頃は、「まっくろう」→「影マン」→「シャドーマン」
ってかんじだったなぁ…
「エメリアン、入りま〜っす」っすかね。
398 :
デフォルトの名無しさん :02/01/30 16:06
宿題が割れてしまいました。誰か助けて
>>398 シアノアクリレート系の接着剤がおすすめ。
計算幾何学のプログラムつくらにゃいけないんだけど、 何か面白い題材ない? 凸包、領域探索、三角形分割、線分交差 程度の 基礎的なアルゴリズムを使うものできぼん。
>>396 390とは関係無いけど、Pro*ってフリーでありましたっけ?
402 :
デフォルトの名無しさん :02/01/30 18:55
Turbo C++って、今お店に売ってないんでしょうかね?
403 :
デフォルトの名無しさん :02/01/30 19:31
>402 2年位前に秋葉で見た
2年も前ですか… 最近は売ってないんですかね…
405 :
デフォルトの名無しさん :02/01/30 20:18
>>402 英語版のTurbo C++ 1.0 なら
ボーランドのサイトでフリーダウンロードできるよ。
リブルラブル作れ
>>400 余裕があるなら対戦型ダンシングアイに発展させれ
リブルとラブルで囲もう 見つけてバシシ♪
>>405 高校時代に学校でWindows版のTurbo C++を使っていました。
それと同じ物が欲しいんですが…
たぶん、
>>409 のURLにある Borland C++4.5J with D/E が、
TC++forWinに一番近いものだと思う。
つーか、使っていたコンパイラとOWLのバージョンは何よ?
そこが肝心。
>>400 海腹川背の、ちゃんとブロックの角や辺にそってゴムがびにょーんと
伸びるやつ・・・あぁ、なんて表現したらいいのか・・・
やっぱリブルラブルでお願いします。
川背さんだろ。海原川背「さん」!
19歳か‥‥
>>412 おっしゃるとおりです。川背さん、ごめんなさい。
415 :
デフォルトの名無しさん :02/01/31 23:21
誰か聞けよage
☆ チン マチクタビレタ〜 マチクタビレタ〜 ☆ チン 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < 丸投げ君、まだ? \_/⊂ ⊂_ ) \________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | .知ったか君. |/
このシリーズスレもそろそろ終わりを迎えそうだな。
はるになれば、すがこもとけて、またどっさり丸投げ燻がくるさ。
すがこ??
420 :
デフォルトの名無しさん :02/02/01 19:23
こんばんわ、失礼します。 身長 h (m),体重 w (kg)を入力して,ローレル指数 R を求めよ。 ただし,R = W × 10 / h3 + 0.5である。 また,「 R が114以下なら痩せている」, 「 R が136以上なら太っている」という基準から R の値に応じて, 「太っている」「普通」「痩せている」の判断結果を出力せよ。 という問題なのですが、一応作ってみたのですが、 何故か上手に行きません… 皆さんのご指摘をお願いしたいです。 /*2-9*/ #include <stdio.h> main() { float a,b,R; printf("あなたの身長と体重を教えてください。\n"); printf("身長(m)は?"); scanf("%f",&a); printf("体重は(kg)?"); scanf("%f",&b); R=b*10/(a*a*a)+0.5 ; printf("あなたのローレル指数は,%fです。\n",R); if(R>=136){ printf("あなたは太っています。"); } else{ if(R<=114){ printf("あなたは痩せています。"); } else{ printf("あなたは普通です。"); } } }
>>420 詳しく読んではいないが、
下から9行目の
else{
と
一番下の
}
は、あきらかにいらない。
こんなの書くな。
>>420 VC6で確認済み。
変更したところ
・括弧の数があってない(笑)
・浮動小数定数に fをつけた(10 → 10.0f)
・if 〜 else if の構文を整理
・最後のキー入力待ち
#include <stdio.h>
int main(void)
{
float a,b,R;
printf("あなたの身長と体重を教えてください。\n");
printf("身長(m)は?");
scanf("%f",&a);
printf("体重は(kg)?");
scanf("%f",&b);
R=b*10.0f/(a*a*a)+0.5f ;
printf("あなたのローレル指数は,%fです。\n",R);
if(R>=136.0f){
printf("あなたは太っています。");
}
else if(R<=114.0f){
printf("あなたは痩せています。");
}
else {
printf("あなたは普通です。");
}
getchar();
getchar();
}
またscanf問題か。整数で取り込んだらどう?
太ってる… 鬱死
425 :
デフォルトの名無しさん :02/02/01 19:52
420です。早速レスありがとうございました。 421> ご指摘ありがとうございました。 とりあえず、消しておきました…。 422> 421>さんと同じ方でしょうか? もし違ってましたら、すみません… ご回答のほう、ありがとうございました。 違う場所までご指摘、本当にありがとうございます。 勉強になります。 これでなんとか課題のほうが提出できそうです。 423> アドバイス、ありがとうございます。 424> 私も太っていますでした…。
旧スレの891クンへ。 何か間違いが多くて、ネタ? とか思ってしまったわ・・。まあ、折角だから 添削ね。 まず、 scanf("%c",&retu); まず、この場合retuは配列だから&はいらないの。 それにこれだと一文字しか、受け付けられないから、for文で100回繰り返す とかいうことをしないといけないかな。 まあこういう処理に、個人的にはあまりscanfを使うのはお勧めしないかな。 getchar()で一文字ずつ、配列に読み込んでいくのがいいと思うな。 次に if(mozi(retu)==a) っていうのは、mozi()関数が返してきた結果がaと一致してるか調べてる ことになるよね。aは初期化されていないから何が入ってるかわからないし。 何か変だよね。 で、次に関数の宣言で、 int mozi(int x[]) で、int型の配列として引数を受けてるけどこれはまずいのね。mainの中で retu[]は、char型の配列として定義されたよね? だから、それを受け取 るにはchar型の配列として受け取らないと。 それで、これだと、いつもN番目の文字がjに入ってることになるよね。 jに代入するうなら、for文の中で j = x[i]; みたくしないと。 mozi内でreturnしているところで、return bって返すのはちょっとね。bも 定義してから初期化されていないから、何が入っているかわからないから。 普通は、真なら1を偽だったら0を返すようにするわ。 で、このままだと、大文字がみつかったら0を小文字が見つかったらbを返し てるよね? この場合、jが小文字だったら1を返して、違ったら何もしないで、関数の 最後で(for文を抜けた後ね)0を返すようにしないと。for文の中で一度 もreturnされないということは、一度も小文字が見つからなかったって ことだから。、
せっかく前スレで答えてみたら、 怜たんがこのスレに誘導したみたいだな。 とりあえず、解答例だ。 /*受け取った文字列の中に小文字が含まれているかどうかを判定する関数の入ったプログラムを作成する*/ #include<stdio.h> #define N 100 int mozi(char x[]); int main(void) { char retu[N+1]; printf("何か100字以内で文字列を入力してください\n"); scanf("%s",retu); if(mozi(retu)) printf("小文字が含まれています\n"); else printf("大文字だけです\n"); return 0; } int mozi(char x[]) { int i,j; for(i=0;i<N;i++) { j=x[i]; if(j>=0x61&&j<=0x7a) return 1; } return 0; } これでいいだろう。君はC言語自体理解していない。 次からは、自分自身で進んで取り組むことだ。 そうしないと、後が苦しくなるだけだろう。 高校生より。 ちなみに、このままコピペした状態でコンパイラに通さないように。 全角空白でインデントしてあるからな。
あ、今気が付いた・・・。 scanfは%c以外の書式では空白を無視するんだったな。
文字コードはASCIIを仮定していいの?
>>429 今回の丸投げ君はASCIIコードと仮定してソースを書いていたからな。
それに従ったまで。
まあ、ソース自体ネタだったのかもしれんが。
431 :
デフォルトの名無しさん :02/02/03 17:44
旧スレと紛らわしいのでage
学生さんはお休みかな。 羨ましいかな。
え?どうしたのカナ?どうしたのカナ?
>433 カナ坊は葱板に(・∀・)カエレ! かえれよぅ。
漏れに宿題を見て欲しかったら、 「若菜の恥ずかしいコードを見てください」 と切なげに囁け(w
若菜たんってそんなに人気あるのか?
>>435 次からそれね!
わかったか、丸投げ君どもよ!
次から頼むぜ!
charの配列で、文字列とバイナリデータを連結したいのですが、 バイナリデータに0x00をいれると終端と認識されるのかstrcat等がうまくいきません。 この場合、地道にすべてのデータを1バイトずつ格納していくしか無いのでしょうか? アドバイスおねがいします。 ちなみに言語はC++です。
440 :
くそスレの1です。 :02/02/04 10:56
mov ax,99 mov ax,98 add ax,99 mov [0120],ax int 20 という簡単なアセンブラ語を書いて、それをところ どころ変更してデバッグした時に出るエラーを調べる 宿題が出たのですが、MS−DOSでどうやったら アセンブラ語が書けるのかが分かりません。(恥ずかしい) 教授に聞けば良いのですが、もう時間が無いので みなさん、助けてください。m(__)m
C:\>debug -a 3506:0100 mov ax,99 3506:0103 mov ax,98 3506:0106 add ax,99 3506:0109 mov [0120],ax 3506:010C int 20 3506:010E -g プログラムは正常に終了しました.
442 :
くそスレの1です。 :02/02/04 11:12
>441 ありがとうございました。
>>439 stringってつかったことないので良く分から無いのですが、
これ使うと、0x00のあとに連結できたりするのですか?
>>438 文字列の '\0' のある位置に memcpy でバイナリをコピーすればいい。
std::vectorはどうよ?
・・・度々、すいません。
>>444 逆の場合はどうなんでしょう?例えば、
0x01,0x00,0x02などと続いた後、"hoge"などをコピーしたい場合です。
447 :
デフォルトの名無しさん :02/02/04 12:35
教えてください! MS-DOSで「イベント処理」か「スレッド処理」をつかって プログラムを作りたいんですが全然わかんないんです。 かなり簡単なのでいいので、サンプルつくっていただけないですか?
>>446 バイナリサイズをどっかで覚えておけば、そのサイズ分ずらしてstrcpyかな?
char buf[1024] = "\x01\x00\x02";
int size = 3;
strcpy(&buf[size], "hoge");
とか。
>>447 普通ではできない。
そういうのをサポートしてるライブラリや言語をひろってくるしかないね。
500!
450だった...
452 :
デフォルトの名無しさん :02/02/04 13:13
>>449 ありがとうございます。
そのままパクれるところってないですか?
どこからか全部もってきたら全然使えなかったんですが・・。
>>448 ナ、ナルホドー・・
ありがとうございます!やってみます。
>>452 言語は何でもよいなら、スレッドはDOS版のRubyとか。
イベントドリブンのライブラリは、昔のTurboC++についていたような
記憶がある。
そういやinterrupt修飾子ってあったな。懐かしい。
456 :
デフォルトの名無しさん :02/02/04 14:08
457 :
デフォルトの名無しさん :02/02/04 14:10
>>454 ありがとうございます。
早速いってみます。
JAVA言語なんですけど大丈夫ですか?
459 :
デフォルトの名無しさん :02/02/04 14:20
>>458 え?動かないんですか?
DOSでJavaプログラムを作らないといけないんですけど・・。
あれ?なにか勘違いしてますかワタシ・・。
どうせ DOS プロンプトのことだろ…
>>459 純粋なDOS上で動くJava環境は寡聞にして俺はしらない。
どっかがが組み込み用に作っててもおかしくはないが、、、
462 :
デフォルトの名無しさん :02/02/04 14:27
>>460 ああ、そうです。
それで「イベント処理」を使ってプログラミングを。
まあ、Javaの動く環境なら、イベントドリブンもスレッドも 動きます。 サンプルは検索すれば、山ほど見つかりますし、本屋に行けば Javaの本もたくさんあります。
465 :
デフォルトの名無しさん :02/02/04 14:37
>426様、427様 どうもありがとうございました。 ただ426様に教えていただいたやり方で実行したところ、大文字しか入力してないのに「小文字が含まれている」と表示されたのですが、あなたのパソではどうでしたか?
↑ああっごめんなさい426様じゃなくて427様です
427のコードにはバグがあります。 それはどこにあるのか。自分で考えるのも 勉強と云うものではないでせうか。
>>467 変だな。俺の環境では上手くいったんだが・・・。
俺もまだまだ初心者ということか。
精進しないとな。
ちょっと外れるけど、 printf("何か%d字以内で文字列を入力してください\n",N); なんの為にNが定義してあるのか。
islower()萌え
ASCIIコードにのみ対応では駄目? mozi関数内でislower関数でも使った方が(・∀・)イイ? まあ、最初からislower使えばよかったんだろうけどさ・・・。
>>473 そういう問題じゃないんだが...
> 変だな。俺の環境では上手くいったんだが・・・。
ほんとかいな?
どういう環境でもバグるだろ。
>>474 ふーむ、どういう場合にバグるのか教えていただきたい。
普通に大文字だけを入力しても「大文字だけです」と
出力されるんだが。
>>475 scanfの前に
memset(retu, 'a', sizeof retu);
を入れてやって見ろ。
>>475 1文字しか入力されてなくても100文字分チェックしてるじゃん。
strlen()萌え
>>476 なるほど。
俺もてっきり見落としていた。
retuを定義した後、
memset(retu,'\0',sizeof retu);
と記述した。
これでいいよな?
>>475 パソコンの機嫌によってうまくいくこともあればうまくいかないこともある。
君の場合はたぶん日頃の行いが良かったのだろう。
>>479 > これでいいよな?
駄目
現象を修正しているだけで原因を修正してない。
# チェックする範囲は「配列のサイズ」ではなく、「文字列長」だろ?
入力した文字列の長さを調べて、 その情報をもとにfor文を記述したほうがよかったか。 そうすればmemset関数など使う必要もないしな。
/*受け取った文字列の中に小文字が含まれているかどうかを判定する関数の入ったプログラムを作成する*/ #include<stdio.h> #include<string.h> #define N 100 int mozi(char x[]); int main(void) { char retu[N+1]; printf("何か100字以内で文字列を入力してください\n"); scanf("%s",retu); if(mozi(retu)) printf("小文字が含まれています\n"); else printf("大文字だけです\n"); return 0; } int mozi(char x[]) { unsigned int i,j; size_t length=strlen(x); for(i=0;i<length;i++) { j=x[i]; if(j>=0x61&&j<=0x7a) return 1; } return 0; } これでよろしいか?
>>485 全角文字で出力したかったってことで。
と、いうかそこは前スレの981のソースをできるだけ
そのままにしておこうと思って放っておいたところだから。
すまなかったな、前スレの981。 偉そうな物言いをしてしまって・・・。 本当に理解できていなかったのは俺だったのかもしれない。 これからも精進していきたいと思う。 どうもありがとう。
>427様 いいえわざわざ教えたいただいたのだからこちらこそ感謝感謝です。 >469様 forの中ですか…明日また学校でやってみます。ご指南ありがとうございました。 >484様 unsigned int ですか…?”unsigned"なるものはまだ習ってないのではたして使ってよいものやら… strlenは習ったのですが…
>いいえわざわざ教えたいただいたのだからこちらこそ感謝感謝です。 優しいのだな・・・。俺などに感謝してくれるとは・・・。 今思うと何であんなソースを書いてしまっていたのか・・・。 とんでもないボケをかましてしまったものだ。すまない。 >unsigned int ですか…?”unsigned"なるものはまだ習ってないので >はたして使ってよいものやら… 今回については、文字列長が最高でも100文字なので、 mozi関数内の変数は全てint型で定義してくれて構わない。 安心してくれ。
>484 size_t i; char j; であるべきなのでは?
>>490 確かに、jはchar型であるほうが文字コードを代入するという意味が
明確になると思う。
size_tがunsigned intと同義でない環境もあるのか?
ならば、iもsize_t型で定義したほうがいいだろうな。
俺はtypedef unsigned int size_t;と仮定した上で、
size_tはその名の通り、文字列のサイズ(やや語弊ありか)を格納する
変数に用い、他の用途・・・例えば反復子などには普通にunsigned intを
用いるという考えで記述したのだが。
なんか突っ込める場所をわざと残してるように見える
もしもし、あのーさっき注文した林田ですけど 宿題まだですかー?
ちょーど今、出たところですぅ
なんだ・・・agaってきたから宿題かとおもった。
なんだ…レス増えてたから宿題かとおもった、おれもか…
なるほど、strlenがないと、(Nー入力された数)分だけ勝手に配列されてしまうわけですね。 皆さんどうもありがとうございました。おかげ様で課題を終えることができました。
なんだ…レス増えてたから宿題かとおもった。 誤爆か…
なんだ・・・agaってきたから宿題だとおもたら・・・ 出前か…
VC6.0で作成したプログラムに、ACCESSで作ったデータベースを ODBCでつなげたいんですけれども。 以前に、作成したプログラムに ACCESSをつなげるにはどのような 手順でやればいいのでしょうか? ACCESS単品のODBCのつなげ方はわかるのですが・・・ 既存のプログラムにデータベースサポートのつけ方どうか 教えてください!!調べてもなかなかみつからなくて 泣 お願いします!
501 :
ポケコンで :02/02/05 22:23
連立方程式を解くプログラムって 御存知の方いらっしゃいますか? もしいらっしゃれば 何卒、 漏れにご教授いただけませんでしょうか? お願いします 漏れは今SHARPのPC−G830 使ってます BASICでお願いします ネタなんかじゃありません
>>502 ありがとうございます
これに行番号付けて入力すればいいんですよね?
504 :
デフォルトの名無しさん :02/02/06 06:14
JAVA言語で乱数によって「○」と「×」を配列にいれ1行で表示せよ また、表示させるボタンと表示を消すボタンつくり、表示させている間の 時間を計測する関数を組み込みなさい。 まったくわからないんですが、 なにか参考になる情報教えてもらえないでしょうか?
>>504 あなたが何が出来て何が出来ないか、
プログラムの開発経験はあるのかJAVAを使った事はあるのか、
まったくわからないんですが、
なにか参考になる情報教えてもらえないでしょうか?
>>504 コツは1行で表示せよとは書いてあるが、何文字表示せよとは書いてないこと。
char[1]に適当に○×入れて文字一個だけ表示しちゃえ。
さらに表示させるボタンと消すボタンは作っても、表示時間の計測にそれを利用する必要が無いのも味噌。
プログラム側で固定してしちゃえば楽勝♪
計測しても表示しろとは書いてないから、なにもしないが正解。
>>505 検索は、かけたんですが
どうも、いいのがヒットしなくて、、
というか、ヒットしてても良くわかってないだけなのかもですが、、
>>506 あ、すみません。
開発経験はないというか、まだ高校生なので、、、
授業で2,3回JAVAはやったのですが、それもよくわからなくて。。
>>507 それいい考えですね^^
と思ったんですが、一応2、30文字くらいと聞いた気がします。
>>506 JAVA以外は?
プログラミング自体の経験がどの程度かわからないと・・・。
最近は高校の授業でJavaをやってるのかい?
JAVA以外は、Cを構造体の前くらいまでやってました。 というか、それ以上は理解不能になってしまいまして、、TT JAVAは、ちょうど私たちの年から取り入れることになったそうです
>>512 クラスってわかる?オブジェクトってわかる?インスタンスってわかる?イベントは?
判らなかったらセンセんとこ殴りこみに行ってできるわけねだろゴルァ!
えっと、、一応見よう見まねでランダムで配列に入れて表示するみたいなのを つくってみたんですが、コンパイルはできるんですが実行されないみたいで、、 わかる人がみたら、かなりへんてこなんでしょうね、、、 ○をTに、×をFにしてるんですが、、難しいですね、、 import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; import java.awt.Graphics; public class atest extends Applet { String S; public void main(String arg[]){ int i; double rnd; char word[]= new char[30]; for(i = 0; i < 30; i++){ rnd = Math.random(); if(0.0 <= rnd && rnd < 0.5){ word[i]='T'; } else{ word[i]='F'; } } S = new String( word ); } public void paint(Graphics g) { g.drawString(S,30,30); } }
>>514 そんなことゆーたらこのスレの存在意義が・・・
大体こんなスレに聞きにくるやつでPGになろうと思ってるやつなんかどうせいないんだから答えてやってもいいじゃん。
自分で必死に調べたってどうせ無駄になるんだし。
あ、、importってこんなにいらないんですよね? 最初は、いっぺんにいろんなことやろうとして 失敗して、消すの忘れてました。。。
>>514 Appletってmainだっけ?initだったかrunだったかどっちかだった気がするんだけど・・・?Javaよく知らない。
あと背景色や文字の色もいちおセットしたほうがいいかなぁ?
Randomは・・・まぁそれでもいっか、個性でてるし。
>>518 そだね。
初期化処理は
public void init()
でよろしく。
>>506 すげぇなぁ、結構本格的な課題だのう。
まぁこの時期だから、最後のまとめみたいなもんなのか。
>>515 とりあえず、ボタン作らなきゃいけないので、Appletに
直drawString()しないで、
1.○×を表示するPanel(ここでdrawString()する)
2.表示ボタン
3.非表示ボタン
をAppletにadd()する方向で。
あとは、ボタンにActionListener(を継承したサブクラス)を
追加(addActionListener())すると、ボタンが押された時ActionListenerの
actionPerformed()が呼ばれるので、呼ばれたら上の1.に対して、
表示するメソッドや非表示にするメソッドを呼ぼう。
がんばれ
>>515 すまーん。
ActionListenerを継承したクラス
じゃなくて、
実装したクラス
です。
ひまだー
>>515 とりあえず、一番簡単そうな実装法書くね。
atestクラスのメンバ変数として、現在表示か非表示かを表す変数を持つ。
で、paintメソッドで表示状態なら、文字列を書くようにすればいいね。
で、表示、非表示のbuttonをaddして。
で、ボタンを押されたときに、(atestクラスの)action()関数でイベント
を受け取って、表示、非表示なら上で言ったメンバ変数を書き換える。
表示のボタンが押された場合は、そのときの時間を記憶(これもメンバ変数
として持ってないとね)。非表示のボタンが押されたときは、記憶した時間
からどれくらい経っているかを計算。
actionの最後で、repaint()を呼ぶの忘れないでね。
こんな感じで。っていっても、ここで書いたの全部理解して貰えるとも思
ってないので、わからないところはどんどん聞いてね。
親切にありがとうです^^ でいきなりわからないのですが、 現在表示か、非表示か表す変数をどう組み込むのかわからないのですが、、 無知ですみません、、がんばってはいるんですが、、
String S; と同じように(同じ位置で) boolean flag; と宣言して。 最初の状態で表示したいなら、 flag = true; って、init()の中で書くのね。 もし表示させたくないときは、 flag = false; ね。 で、paint()の中で if(flag){ (文字を書く処理) } みたくすればいいと思うわ。
結局、“えれな”ではなく“怜”な罠(w
import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; import java.awt.Graphics; public class atest extends Applet { String S; boolean flag; public Button tButton, fButton; public void init(){ int i; double rnd; char word[]= new char[30]; flag=false; tButton = new Button( "表示" ); tButton.setBackground( Color.lightGray ); add( tButton ); fButton = new Button( "消去" ); fButton.setBackground( Color.lightGray ); add( fButton ); for(i = 0; i < 30; i++){ rnd = Math.random(); if(0.0 <= rnd && rnd < 0.5){ word[i]='○'; } else{ word[i]='×'; } } S = new String( word ); } public void paint(Graphics g) { if(flag){ g.drawString(S,30,80); } } public boolean action( Event evt, Object obj ) { if( obj.equals("開始") ) { flag=true; } else if( obj.equals("終了") ) { flag=false; } repaint(); return true; } }
↑教えていただいたとおりにやると、見事うごきました^^ ほんと感謝です!! ただ、コンパイル時にactionのところが推奨されないとでます。 アプレットは、ちゃんと動くのですが、、、 あと、表示を押して、消去を押して、再び表示を押すと また新しい文字列にするには、どこで初期化したらいいんでしょうか? 今のままだと、表示して、消去して、また表示おすと、同じものが出てきてしまうので、、 何度もすみません。。><
>>529 推奨されないって出るのは古いやり方だからなのね。
回避するためには、
>>520 さんの言ったようにやればいいのかな?
まあ、課題だったら今のままでも問題ないと思うよ。
if( obj.equals("開始") ) {
flag=true;
}
この部分で、再び表示を押した処理をしているのだから、
ここで、initでやったようにもう一度Sを決めなおせばいいと思うよ。
速レスありがとうです〜無事できました^^ ここで、忘れていたのですが、時間を入れないといけなかったんですね、、 時間はsetTimeというメソッドをつかうのでしょうか? これを、表示のボタンと消去のボタンに組み込んで 最後に引き算すれば大丈夫なんですかね? あ、でも、引き算ってできるんでしょうか、、、
プログラムのほうに時間を測る関数をくみこみました。 表示押した時に start = System.currentTimeMillis(); 消去を押した時に stop = System.currentTimeMillis(); で時間を計算する関数を public long getTime(){ t=stop - start; return t; } のようにしてみました。 後は、これを表示させるだけなんですが、 終了の時に表示させたいんですが、この時は表示に何を使えばいいんでしょうか? アプレットに表示させることが、どうしてもできなくて、、 ご教授おねがいします。
>>532 ○×表示するのと同じでいいやん。
さすがにこれ以上は教えてクンの仲間入りだぞ。
>>533 ありがとう。
忘れていた何かを思い出した気がするよ(´Д`)
常に0が表示されるのは単にgetTime呼び忘れてるだけ。
怜タン…ハァハァ …はっΣ(゚Д゚ )
537 :
宿題おしえてください。C言語です。 :02/02/07 16:13
英文テキストを読み込んで,母音の数を数えて, その個数および全文字に対する比率を計算するプログラムを書きなさい. C言語初心者な文系人間にこの課題はできそうにありません。 char がほとんど理解できていないので... 誰か教えてください。宜しくお願いします。
>>537 > 誰か教えてください。宜しくお願いします。
まず、英文テキストを読み込んで
・文字数をカウントするプログラム
・aの文字数をカウントするプログラム
を作ってみよう。
539 :
デフォルトの名無しさん :02/02/07 16:42
>>537 どこまで分かってるんだ?
fopen()は分かるか?
作ったよ。 って、fopen使わなきゃ駄目なの? 標準入力から読みこみにしたけど。
>>540 本地さんがこんなところにも(^^;
っていうか本物?
543 :
デフォルトの名無しさん :02/02/07 17:59
数学板で相手にされなかったのですが 連立微分方程式をとく(数値計算で)プログラム どこかのサイトにありませんか? 検索したのですがみつからなくて・・ こんなかんじです. a*(b+c*x)dy/dt=d*(e-y)-(f-c*y)*z dx/dt=-1/a*z z=g*(w(y)-i) 定数(a,b,c,d,e,f,g,i) 未知数(x,y,z) 独立変数t w(y)はyによって決まる定数. 境界条件 t=0,x=3 t=0,y=28
>>544 ありがとうございます.
これはFORTRANですよね.
がんばってみます.
546 :
デフォルトの名無しさん :02/02/07 19:29
JAVAで アプレットのテキストフィールドに文字を入力して、 ボタンを押すとファイルに書き込まれるようにするには、どうしたらいい? 誰か、教えてほすぃYo! お願いしま〜
>>546 Javaアプレットではセキュリティの関係上
ファイルに書き込むことはかなり面倒
面倒って事は、どうにかすればできます? どうにかして書き込みたいんですが、、
あ、いきなり誤爆、、 回線切っ・・・
>>548 んー、そういう話題はJavaスレの方がいいかも。
私は余り詳しくない、というかやろうとしたことないから知らないん
だけど、サーバ側で(アプレットとは別に)ファイルを書き込む処理をす
るものを走らせて、Appletがそこと通信するとかかな?
まあ、しばらくたって反応ないようなら、Java系のスレで聞いてみて
ね。
551 :
デフォルトの名無しさん :02/02/07 22:24
>>546 IE 限定技。そのアプレットを置く Web サイトを「信頼するサイト」に
登録し「信頼するサイト」の Java セキュリティレベルを「サンド
ボックス」から「有効」にする。これでアプレットの全てのセキュリティが
外れる。
もう一つ、サーバ側でサーブレットや CGI を作ることが出来るなら 有効な技。アプレットからサーブレット (CGI) に保存したいデータ を渡す (URLConnection を使用)。サーブレットそのデータをメモリ なりファイルなりに保管する。アプレットは showDocument() を 使用してもう一度サーブレットを起動する。サーブレットは Content-Type: application/octet-stream でも付けて保存したい データを返す。これでブラウザの「名前を付けて保存」機能を使用 することが出来る。
みなさま、ありがとうです〜 いろいろ試してみたいと思います
555 :
537です。 :02/02/07 23:26
英文テキストを読み込んで,母音の数を数えて,
その個数および全文字に対する比率を計算するプログラムを書きなさい
>>538 文字数のカウントの仕方がわかりません。文章をよみこむところまでできました。
>>539 fopen()って習ってないので使えないです…。
検索かけて調べてみましたが、イマイチ使い方がわかりません。
∧_∧ < `ш´> <ちょっとだけヒントだ int i,vowel = 0; ... /* 母音の数を数える */ for(i=0;text[i]!='\0';i++){ if(text[i]>='A'&&text[i]<='Z') vowel++; }
∧_∧ < `ш´> <間違えた、、、
それは大(以下略
int i,vowel = 0; ... /* 母音の数を数える */ for(i=0;text[i]!='\0';i++){ if(strchr("aiueo",text[i])) vowel++; }
"aiueoAIUEO"じゃない?
さすが超先生、ここでも日本語間違えてるし(w こうでしょ。 int is_vowel(const int c) { cosnt char vowel[] = "aiueoAIUEO"; int i; for(i = 0;i < (signed int)strlen(vowel);i++) if(c == vowel[i]) return 1; return 0; }
> for(i = 0;i < (signed int)strlen(vowel);i++) 最悪。
∧_∧ < `ш´> <#define c_strlen(t) (sizeof(t)/sizeof(t[0])-1) /* 文字列定数の文字数ゲット */
皆様、憶えていらっしゃるでしょうか。生徒Bです。
>>160 にて私、
>sscanf(num,"%x",numuc);でうまくできそうですね。
などと、とんでもない事を書いていたので、訂正にまいりました。
numucはunsigned charなのでこれ、至極おもしろい事になるような、ならないような。
ということで、
int numi;
sscanf(num,"%2x",&numi);
numuc=(char)numi;
printf("えれなタンをだせー!!");
あ〜、すっきりage。
> for(i = 0;i < (signed int)strlen(vowel);i++) こういう書き方する人ってVBかなにかでプログラム覚えた人?
>>566 pascalかも pascalのfor文は最初の1回しか評価しないから
ところで、>562は何のためにstrchrの劣化版を再生産しているんですか?
勉強とは先人の歩んだ道のりを辿ることに他ならない
素人にかぎって「こんなの自分で作っても簡単だよ」と言って、 標準関数の劣化版を作りたがる。
母音の数を数えるなら、strcspn()使うのが速いのかな? それから sizeof(char)==1 は保証されてないんだっけ??
ワイドキャラのリテラルというワナ。
574 :
デフォルトの名無しさん :02/02/10 12:54
age
575 :
( ´∀`) :02/02/12 23:31
この漏れはCの独学で毎日泣きをみているドキュンだ。 自己紹介はここらで終わって早速糞な質問に答えてくれる やさしいお前らにお願いです。 言葉足らずな参考書に変わってmalloc関数とfree関数の 使い方、書き方を説明してくれ。 褒美は後日レス600のヤツがしてくれると思う。
free(malloc(0));
>>575 態度がデカい割には可愛い顔してるんだな(w
p = malloc(必要なバイト数) p は voidへのポインタ、NULL が帰ってきたら領域が確保できてない。 この確保した領域は free(p) で開放する。 exit で抜けた時に領域が開放されるので free が必要ないという輩がいるが、それはけしからん話。 坊主が人殺しして「でも仏に仕える気持ちは本物なので私は聖職者」と言っているくらい本末転倒。
また拗れそうな話を(w exit(プロセス終了時)にプロセスが確保したメモリが解放されるのは事実でしょ。 free()しない事の問題点を理解できてれば呼ばなくても。 でもfree()の呼び出しコストが問題にならないならmalloc()系とfree()は対で呼び出すべき。
>>579 いや、「メモリが最終的に開放される/されない」は関係ない。
例外は少ないほどいい。例外を許すという事はそれだけ混沌が増えるという事。
可能な限り一般的な方法を用いるべし、という意識を小手先のテクニックのために
わざわざ低下させるような事は好ましくないと思う。
age てしまった。スマソ。
ほら拗れた(w
>578 チョパーリのボージはニクダベルヨ
>>583 チョッパリのジーボは肉田ベル代?
意味がわからん。
田代の肉ボーはベリチョルパッジ
> 例外は少ないほどいい。例外を許すという事はそれだけ混沌が増えるという事。 例外は全く許さないのか? > でもfree()の呼び出しコストが問題にならないならmalloc()系とfree()は対で呼び出すべき。 とフォローしているだろ。 なんで教条主義者は人の話を聞かないのか。
えれなタン…このスレを救ってくれ…
588 :
デフォルトの名無しさん :02/02/16 16:38
age
malloc/calloc/realloc と free が対? あほなことを…
590 :
デフォルトの名無しさん :02/02/17 19:23
次の数式を定義する文法に属性に関する式を追加して、逆ポーランド記法の中間言語を出力する属性文法を作成せよ。 文法 G = (T, N, S, P) T = {+, *, (,), a} N = {E, T, P} S = E P = {E → E+T, E → T, T → T*P, T → P, P → (E), P → a} スレ違い気味ですが助けてください、、、
具体的にどこがわからないのか説明しなさいよ。
失礼しました。ぶっちゃけて全くわからんのですがとりあえず属性文法ってゆうのからお願いします。 ぁ、もちろん検索はしたんですがさっぱりなのです。。
594 :
デフォルトの名無しさん :02/02/17 19:53
いや、そこ読んだんですがあまり理解できず… 問題にどうやって活かしたらいいのか、と。
>>594 んーと、私も属性文法って全く知らないんだけど、
>>593 を読んで理解した
範囲で説明ね。
例えば、ビット列の場合、継承属性と合成属性っていうのを使っているん
だけど、逆ポーランド記法の場合は、継承属性は無くても大丈夫じゃないか
な? というのも、ビット列の場合、「それが何桁目か」っていう情報が重
要だけど、逆ポーランド記法の場合は重要じゃないから。
まず、与えられた式を文脈自由文法で解釈するっていうのは、それは木を
作っているのに等しいっていうのはいい?
このときに、この木を計算するには、ビット列みたくこれが木のどの位置に
あるかていうのが重要でなければ、基本的には葉から順に計算してけばいい
わけね。
このときに、例えば、E→E+Tというプロダクションをしたときに、これは
逆から見れば、EとTというノードをまとめて、Eというノードにしたってこ
とだよね? このとき、右側のEのが取る値をSyn(E1)として、Tが取る値を
Syn(T)とすれば、左側のEが取る値はSyn(E1)+Syn(T)になるよね?
まあ、こんな感じで定義していけばいいんじゃないかな。
ちょっと、属性文法に関しては
>>593 の知識だけで話してるので、間違っ
てるところあったらフォローくれたら嬉しいな。
596 :
デフォルトの名無しさん :02/02/17 20:25
>怜さん すいません、お詳しいようなのでちょっと甘えてみたいのですが、、、 熟読させていただきましたがどーにも、、、 とりあえずこの辺の知識でわかってることを整理してみますと 逆ポーランド記法ってのが ab+c* みたいに書くものであることと たとえば式からa*aという語を導出する際には E > T > T*P > P*P > a*P > a*a とやることぐらいで、、、 この場合問題の答え方もわからんです、、、
>>596 ごめん、ごめん、すごくうそ書いてたかも。
数式を解釈して、逆ポーランド記法にするのね。
何か誤解してた。説明全面的に書き直すからちょっと待っててね。
>>596 俺も属性文法ってのは知らんが
文脈自由文法まわりの話をきちんと理解してるかどうかがまず先だね。
それが分かってれば
>>593 のところのページを読むだけで分かる。
まず滅茶苦茶大雑把にイメージで言ってしまえば、
1)与えられた文法に従って導出木を作ってから、
2)木のてっぺんから末端へ向かって継承属性を繰り返し全ての末端にいたるまで適用し、
3)今度は末端から木のてっぺんへ向かって合成属性を繰り返し適用する、
という流れで、属性文法が適用される。
1)の作業ルールを決めるが文脈自由文法で、
それに2)と3)の作業ルールを追加したものが属性文法(と
>>593 のページに書いてある(藁))。
文法使って木ができる、というあたりのイメージはちゃんと頭にあるかい?
あくまでメインはキミで、このスレはちょっとしたサポートなんだからな。 このスレだけの回答だけで宿題の回答を作ろうとするなよな。 勘違いするなよな。
実は、この辺全然詳しくないの・・・ 無理して説明してみるから苛めないでね>識者の方 a*aの例で説明してみるね。 E > T > T*P > P*P > a*P > a*a という風に解釈するわけよね? これは、数式を木に直したのと同じなわけね。つまり、 E−T−T−P−a | P−a って木にしたってことね。 じゃあ、この木を逆ポーランド記法で表したいっていうのが今の問題ね。 ちょっと、このままでは説明しにくいから、ノードに番号ふるね。 E1−T1−T2−P1−a1 | P2−a2 としとくね。ここで、例えばT1を表す逆ポーランド記法をSyn(T1)と書く ことにするの。 このとき、P2を表す逆ポーランド記法は、a2と同じ、つまりaでいいよね? これはP→aというプロダクションだったら、Syn(P)=a っていうことになるんだと思う。P1も同様ね。 次にT2→P1って変化について考えるね。 これは、T→Pってプロダクションで生成されたものだよね? このとき、T2とP1のポーランド記法は一緒だということで、 T→Pってプロダクションのときは、Syn(T)=Syn(P) ということになるわけで。 で、T1→T2,P2と分岐しているとこあるよね? これは、 T→T*Pというプロダクションで生成されたものね。このとき、 T1はaa*って表して欲しいわけで。 つまり、 Syn(T) = Syn(T)Syn(P)* って感じになるのかな。 うーん、本当にこういうものなのかな・・不安。
怜たんのちょっぴり頼りない一面ハケーン・・・(;´Д`)ハァハァ いいYO!怜たん!(・∀・)イイ!
すいません。考えながら読んでたら亀レスで、、 >T2とP1のポーランド記法は一緒だということで、 >T→Pってプロダクションのときは、Syn(T)=Syn(P) >ということになるわけで。 というところがよくわからんのですが、、
あ、ちゃんと木書いてみたらわかりました。 怜さんのおっしゃることは理解できた…つもりになりました。 みなさまご協力どうもです。
怜たんが駄目なのならえれなたんしかいない! 確か違うオッサンが演じてたよね?
>>602 えーと、まず文脈自由文法周りは理解してる?
その上でこの問題において、E,T,Pはどういう状態を表しているかは
わかる?
あ、終わったのか
って、スレ違い・・・・。
608 :
デフォルトの名無しさん :02/02/17 21:49
怜たんって学校どこ?
んー・・・大学名は秘密。 今M1です。みなさんよりちょっと年上ってくらいだね。 (ちょっとじゃないって突っ込み入りそう・・・)
と・・年下・・・ハァハァ
611 :
Kanai :02/02/17 23:26
C言語で、下記の表をあらわすにはどうしたらよろしいでしょうか? (例:行を6列に指定した場合。N行の場合はどうなるのでしょうか) # ##### ## #### ### ### #### ## ##### #
そうか。オッサンじゃなかったのか。こりゃ失礼。
>>611 NxNじゃないのは間違いじゃないのかとか、
「行を6列」って表現が気にならないでもないけど、
char m[N-1][N+1];
としておいて
m[j][i]=((i-1==j)?(' '):('#')); /*0オリジン*/
で、forすればどう?
コスト的には全部埋めてから違うとこだけ書くほうが
いいと思うけど、何回もやらなければこれでもいいかな?
614は怜たんっぽい
>>612 それは怜タンの設定であって・・・
大学名が秘密なのは考えるのが面倒だったんだと思われ
>>617 そういうわけではない、というのが1行目の書き込みに対してなのか
2行目の書き込みに対してなのかわからないんだが・・・
もしかして演じている貴方も大学生なのかい?
それとも演じて自体いないとか・・・そうだったら(;´Д`)ハァハァだYO!
>もしかして演じている貴方も大学生なのかい? >それとも演じて自体いないとか・・・そうだったら(;´Д`)ハァハァだYO! どちらかはご想像に任せます(笑)
そろそろageても良い時間帯だろう。
怜ちゃんは可愛いな・・・。 いつか怜ちゃん萌え萌えゲームでも作る予定にしておこう。
えれなはどこいった?
質問です。 ストリーム系のオブジェクトを引数として受け取り、 大文字の文字列を小文字に変換して返すクラスを作れ といわれました。 ファイルからもキーボードからも読み込めることが条件です。 どういうことなのかサッパリです。
class toUpper {public: void operator()(FILE *in, FILE*out) { int ch; while( ch = fgetc( in ), ch != EOF ) fputc( tolower(ch), out ); } };
627 :
デフォルトの名無しさん :02/02/23 15:11
C++何ですけどどなたか教えてくれませんか? APIでビットマップをファイルから読み込んで、読み込んだファイルに 反転とか原色とかのエフェクトをかけるプログラムを作成したいんで すけどどうやったらいいんですか?もうさっぱりです。
Googleで調べな。 その手については根気よく調べれば必ずヒントは見つかるはず。
>>625 ありがとうございます。
>>626 JAVAです。アプレットではなく。
ファイルからも、キーボードからもというのがわかりません。
先生がインターフェースを提供するとかなんとかいってました。
VC++でプログラムを作っているのですが、(ダイアログベースで作っています。) ダイアログのエディットボックスのデータを別のダイアログのエディットボックスに 移すにはどうしたらいいのでしょうか?教えて下さい。
>>631 エディットコントロールに入ってるテキストをゲットする関数、
えーと、GetWindowText()だっけ?でテキスト取得して、
なにかしらの方法(メッセージを定義して、SendMessage()?)
で他のダイアログのプロシージャに送って、SetWindowText()で
エディットコントロールにセットする感じでよろ。
>>632 SendMessage()はいりません。
GetWindowText()とSetWindowText()だけでOK
>>633 フォローさんきう。
ちなみに、それって別ダイアログ(のエディットコントロール)の
ウインドウハンドルを送信元が知ってることが前提ということでいいのかな?
ありがとうございます。詳しく申しますと下のようになります。宜しくお願いします。 いま卒業研究をやっていまして、質問があります。 ダイアログベースで、親ダイアログのエディットボックスにファイルパスを 入れて、子ダイアログのエディットボックスにファイルの内容を表示して、 入力不可にするには親ダイアログのボタンにどのようなコーディングをすれ ば、よいのでしょうか?教えて下さい。宜しくお願い致します
637 :
デフォルトの名無しさん :02/02/27 22:58
宿題募集age
>>637 よろしかったらJAVAスレの方に来ていただけますか?
あちらに宿題を貼っております。
どうか助けて下さい、お願いします。
639 :
デフォルトの名無しさん :02/02/28 01:10
c言語でエノン写像 x(n+1)=1-1.4x(n)~2+y(n) y(n+1)=0.3x(n) のリヤプノフスペクトラムのデータを出したいんですが どうすればいいんでしょうか? #include <stdio.h> #include <math.h> const long N=1000; main() { long i; double x, x1, x2, y1, y2; double lambda; x = 0.2; x1 = 0.001; y1 = 0.001; lambda = 0.0; for(i = 1; i <= N; i++) { x2 = -2.8*x*x1+y1; y2 = 0.3*x1; lambda = lambda+log(sqrt(x2*x2+y2*y2)/sqrt(x1*x1)); printf("%lf\n",lambda/i); x1 = x2; y1 = y2; lambda = lambda; } }
>>639 うーん、リヤプノフスペクトラムって何かわかる人ってかなり限られちゃう
と思うから、その辺説明していくれないと答え期待できないんじゃないかな。
私もわからないし。
VC++で、Memory Assumption の測り方分かる人いますかね? 具体的な数字で出したいんっすけど、HELP使ってもどこにあるのやら。 多分メモリー測るファンクションを二つ使って(メモリー使う前後に)、その数字を後から差し引く って方法だとは推測できるけど、どんなファンクション使ったらいいのやら。 誰か分かる人いたら教えてください。
642 :
デフォルトの名無しさん :02/03/02 09:04
>>641 MSDN で allocMemDF とか _CrtMemCheckPoint とか CMemoryState とか ‘診断サービス’ とか調べてみれ。
>>641 ついでに GlobalMemoryStatus() も見とくか?
あるWebサイトにあるHTML文書内の指定された箇所に書かれている文字列を抜き出す方法をご存知でしたら教えてください。 例えば・・・ Yahooファイナンスを使って、ある企業AとBの本日の最高株価を抜き出して、それをエクセルのセル(0,A)、セル(0,B)に表示する というような事をしたいのです。 使えるプログラムはJavaとVBEです。 よろしくお願いします。
すいません、ageで。
SGMLパーサとか、HTML-DOMとか使え。 invalidなHTMLなら、その担当をうらみつつ、 パターンマッチで切り抜けろ。
|\ /|`、 | | \ / | | | | \_____/ .| | |レ ´ \| | ヽ | ヽ | ,,,,;;::'''''ヽ | ,,,,;;::::::::::::::: __ ヽ | " __ :::: '"ゞ'-' | | - '"-ゞ'-' ::::::... | | ::::::: ヒつ | | ヒつ ( ,-、 ,:‐、 | | | | __,-'ニニニヽ . | .. | ヾニ二ン" / ヽ / ー――――――l――l――‐´ /、 || | | / | || | | | | | | | | | | | | | / | | _ | |ー 、 / /  ̄  ̄ー- _/> `ー ´ 嘘は嘘であると見抜ける人でないと (怜たんの消息を知るのは)難しい
648 :
デフォルトの名無しさん :02/03/06 12:53
ageとく
SQLを実行させようと思いまして下記の様にコーディングしましたが、 "\'m_Com1\'" を読み取ってくれません。シングルコーテーションの中では なくて、’’も含めて読み取りたいのです。どなたか教えて下さい。 ちなみに、m_Com1はメンバ変数です。全体はこのコードで大丈夫でしょうか? 心配です。 CString strSql = "Select timem,exp,tostn from jikoku where "; if(m_Com1 == ""){ strSql+= "Stn = " + "\'m_Com1\'" + " AND "; }else if(m_Com2 == ""){ strSql+= "Goto = " + "\'m_Com2\'" + " AND "; }else if(m_Com3 == ""){ strSql+= "Day = " + "\'m_Com2\'" + " AND "; } strSql+= "Timeh = " +m_ji; m_Recordset.Open(CRecordset::dynaset,_T(strSql)); UpdateData(true); m_Recordset.Requery();
>>650 よくわかんないけど、
if(m_Com1 != "") {
strSql = "Stn = " + "'" + m_Com1 + "'" + " AND ";
} else ....
って感じじゃない?
>>1002 よくわからないが、
while(1)
puts("\a
>>1 は怠け者");
って感じでは?
653 :
デフォルトの名無しさん :02/03/12 17:54
C言語でシェルスクリプトみたいに、あらかじめ決めておいたコマンドを 順番通りに実行するにはどうすればいいですか? 例えば、chmod 700 a.out → ./a.outという具合に。
>>653 main(){
system("chmod 700 a.out");
system("./a.out");
}
>>654 どうもです。
あと、もう一つ質問があるんですが、コマンドの実行結果をテキストファイルに
出力するにはどうすればいいんですか?
例えばsystem("ls")とやるとlsの実行結果がls.txtに書き込まれるということをやりたいのですが。
>>655 アホなの?アホなのかな?
system("ls > ls.txt");
ネタかも!ネタにマジレスかも!
・・・ハズカシイ
>>655 main(){
system("ls > ls.txt");
}
>>656 main(){
printf("結婚してください\n");
}
>657 ケコーンする?ねえケコーン?
狂った怜
>>658 ("結婚してください\n ←この\nがいいね。
暇な人へ問題: X(1) + X(2) + ... + x(n) = C C、N、X、は全て0以上の整数。(Nは1以上) CとNはユーザー入力から。 この全ての場合をアウトプットするアルゴリズムを記せ。 例)C = 3, n = 3 (User input) 1, 3 + 0 + 0 2, 0 + 3 + 0 3, 0 + 0 + 3 4, 1 + 2 + 0 5, 1 + 0 + 2 6, 0 + 1 + 2 7, 0 + 2 + 1 8, 2 + 1 + 0 9, 2 + 0 + 1 10, 1 + 1 + 1 簡単そうで、難しかった〜(*_*) 因みに私はC++でソース書きましたん☆
>>663 難しい?(^^;
1分でかけそうだけど。
えらそうに書きつつ5分かかってしまった。鬱
forで回して合計がCになるのだけ出力とか言うのは駄目なの?
for で回すけど、どうやって回すかが問題。 N がユーザー入力だからね。 全ての場合を出力するのがキー。 ループする回数もなるべく早めに終わらすのが重要。 分かった人、解答簡単に書いてみて。それが俺のより早いから どうか比べる。(BIG(O)Notation)
X(1) + X(2) + ... + x(n) = C x(n) を0〜C として 残りを C:=C-x(n) として n:=n-1) 再帰
と思ったけど それだと数は簡単に数えられるけど 総覧はメンドクサイな
>>666 #include<stdio.h>
#include <iostream.h>
void showres(int *a, int n){
int i;
for(i = 0; i < n; i++){
printf( "%d" , a[i]);
if(i + 1 < n) printf(" + ");
}
printf("\n");
}
void func(int k, int n, int c, int *a){
int i;
if(k + 1 == n){
a[k] = c;
showres(a, n);
}else{
for(i = 0; i <= c; i++){
a[k] = i;
func(k + 1, n, c - i, a);
}
}
return;
}
int main(){
int c, n;
int *a;
cout << "C = ";
cin >> c;
cout << "n = ";
cin >> n;
a = (int*)malloc(n * sizeof(int));
func(0, n, c, a);
free(a);
}
>>668 ループで書いたヤツもアップしてみてよ。
再帰がよくわからん人が参考にできるかもしんないから。
コメント遅れてスマセン。
>>671 アップしてくれてありがとね。
っていうか、俺のアルゴリズムとRecursion 使うってのは
ほとんど一緒です。誰かIteration でやらないかな〜って思ってね。
今考えているけど、明日、明後日テストなので、Iteratioin で
出来次第アップします。お許しあれ。
>>671 にしても、俺の場合Recursion のプログラムになるとどうしても
時間かかってしまいます。まだBeginnerだと自分で思います。
Recursion のアルゴリズムのこつとかありますかね?
(5分で出来たあなたはすごい。)
強引にグルグルまわすプログラムなら5分でできたが、 あまりに強引すぎて10 10くらいでも終わらなかった。
676 :
デフォルトの名無しさん :02/03/19 13:27
>>674 再帰のプログラムは慣れです。とにかく色々やってみましょう。
計算量のオーダーが多項式で抑えられないときは、再帰使わないとまず無理だと
思いますよ。
>>676 アドバイスありがとうございます。
これからまた色々な言語を勉強すると思いますが、
再帰のプログラム色々やって慣れるようにしますね。
みなさんは、何の言語が一番得意なんでしょうか?
そして、根本的な基盤となる言語は何と思います?(個人的に)
根本的な基盤となる言語はマシン語だろ。
一番得意なのはC。次がアセンブラ。 基盤となってるのもこの2つ。
668ではないですが。 長くてすいません。 #include <stdio.h> #define SSIZE 1024 #define LIMIT 256 typedef struct { int rest; int pos ; // 数字のおき場所 int list[LIMIT]; } Table; Table stack[SSIZE]; int sp = 0; int sum, count; Table pop(void) { return stack[--sp]; } void push(Table *t) { stack[sp++] = *t; } void print_answer(Table *t) { int i; for ( i = 0; i < count - 1; i++ ) printf("%d + ", t->list[i]); printf("%d\n", t->list[i]); }
void make_expression(void) { int i; Table now = {0, 0, {0}}; now.rest = sum; push(&now); while ( sp > 0 ) { now = pop(); if ( now.pos >= count ) { print_answer(&now); } else { if ( now.pos < count - 1 ) { int pos = now.pos; int rest = now.rest; now.pos++; for ( i = 0; i <= rest; i++ ) { now.rest = rest - i; now.list[pos] = i; push(&now); } } else { now.list[now.pos] = now.rest; now.pos++; push(&now); } } } } int main(void) { printf("合計 個数 :"); scanf("%d %d", &sum, &count); make_expression(); return 0; }
682 :
デフォルトの名無しさん :02/03/22 15:59
助けを求める人を求めてage
683 :
助けてください。 :02/03/22 16:02
notepadで書いたIntel系のアセンブラ語のプログラムを MS-DOS Promptでアセンブル、リンク、実行する方法を 一歩一歩優しく教えてください。
684 :
デフォルトの名無しさん :02/03/22 16:06
>>683 まずはアセンブラは何?
1、MASM
2、TASM
3、GAS
4、NASM
それとも
5、Debug で直接書くの?
685 :
助けてください。 :02/03/22 16:08
686 :
デフォルトの名無しさん :02/03/22 16:10
>>685 じゃあ TASM(ボーランドのターボアセンブラ)はインストール出来てるんだね?
プロンプトで
tasmか tasm32 として改行してみて 最初の1行目を教えて
687 :
助けてください。 :02/03/22 16:14
実は今自分のうちから2ちゃん使ってまして(汗 ガッコのパソコンがどうなってるか良くわからないんです。
688 :
助けてください。 :02/03/22 16:15
学校のパソコンはWin98でPentiumIIを使っています。
まず、おちつけ。 そして、がっこ逝け。
>>688 tasmがインストールされていなかったら、tasmは使えん。
そんなのに大してコメントしろってほうが無理だ。
家からネットワークに繋げるなら、家でもできることをやったらどうだ?
691 :
助けてください。 :02/03/22 16:19
オレの友達は2ちゃんねらーだけなんだぁー。。。
そうだな 家で出来そうな方法としては 1)TASMの代わりに NASM をダウンロードしてやってみる 2)Debugの使い方を覚えて、Debugでやる どっちがいい? 2の方が教える方は簡単なんだが
693 :
助けてください。 :02/03/22 16:25
NASMの使い方を教えてください。
696 :
助けてください。 :02/03/22 16:32
なんか英語がいっぱいでどこをクリックすればよいのかわかりません。。。
少しは読む努力しようよ、downloadくらい読めるだろう。
>>696 おまえはクリックするとまずいようなことあるのか?
とりあえずできるまでやっとけ。
まってたけど、ダウンロードまだかい? 1、メモ帳を開いて 以下の入力をする 空白は全部 半角空白にする事 org 100h section .text start: mov ax,cs mov ds,ax mov dx,txt_hello mov ah,09h int 21h mov ax,4c00h ;終了 int 21h section .data txt_hello: db 'みなさんこんにちは' db 13,10 ;13,10は改行コードです db '$' ;終端文字は $ です 2、メモ帳保存する時に HELLO.ASM と名前を付ける事 3、dos窓から nasmw -fbin hello.asm -ohello.com と入力して改行する 4、DOS窓から HELLO.COM と入力して実行する
丁寧に有難うございます。頑張ってダウンロードします。
>>700 この例は windows版NASMで DOS16ビットアプリを作った場合ね
DOS版のNASMなら nasmw -> nasm と読み替える事
それから 16bitアプリでなく Win32bitアプリを作りたい場合はだいぶややこしい
でもアセンブラだけで win32アプリを作れなんて課題は絶対ない筈
.COM ではなく .EXE を作る場合は、少しややこしい。
NASMはリンカ一体(アブソリュートアセンブラ)なのでEXEヘッダをアセンブラ内で
生成するようにする。 でもNASMの解説サイトを読めば判るだろう
俺にとってはWin32のほうがわかりやすかったり。 .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD .data DlgName db "SAMPLEDLG", 0 AppName db "win32 assemble", 0 .data? hInstance HINSTANCE ? CommandLine LPSTR ? buffer db 256 dup(?) .const IDD_EDIT equ 101 .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL invoke ExitProcess,eax DlgProc proc hdwnd:HWND, message:UINT, wParam:WPARAM, lParam:LPARAM .if message==WM_COMMAND mov eax,wParam .if al == IDCANCEL invoke EndDialog, hdwnd, NULL mov eax, 1 ret .elseif al == IDOK invoke GetDlgItemText, hdwnd, IDD_EDIT, ADDR buffer, 256 invoke MessageBox, hdwnd, ADDR buffer, ADDR AppName, MB_OK mov eax, 1 ret .endif .endif mov eax, 0 ret DlgProc endp end start
703 :
デフォルトの名無しさん :02/03/23 15:51
C言語です。 配列の、0クリアして右から順位付けするやり方がいまいちわからないのです。 #include<stdio.h> main(){ int i=0; int j=11; char data[]={1,3,5,5,7,9,9,10}; char juni[11]; /*10番目と11番目を用意する*/ for(i=0;i<=11;i++){ /*iが11以下の間繰り返す*/ juni[i]=0; /*配列 juni[i]を0でクリア*/ } for(i=0;i<8;i++){ /*iが8より小さい間繰り返す*/ juni[data[i]]++; } juni[j+1]=1; for(i=j;i>=j;i--){ juni[i]+=juni[i+1]; } printf("得点 順位\n"); for(i=0;i<8;i++){ printf("%d %d\n",data[i],juni[i]); } } 間違ってるとこを訂正してもらえると助かるっす。
706 :
デフォルトの名無しさん :02/03/28 11:48
age
>>704 juni[]のクリアのところで、配列をオーバーしとるやん。
708 :
デフォルトの名無しさん :02/03/28 12:49
>>704 char juni[11]; /*10番目と11番目を用意する*/
これだと11個用意することになるんよ。
>>704 #include <stdio.h>
#define DATSIZ (8)
static void getJuni(const char *, char *, int);
int main(void)
{
int i;
char data[DATSIZ] = {1, 3, 5, 5, 7, 9, 9, 10};
char juni[DATSIZ];
/* 順位付けを行う,得点はソートされている必要がある */
getJuni(data, juni, DATSIZ);
printf("得点 順位\n");
for(i = 0; i < DATSIZ; i++) {
printf("%4d %4d\n", data[i], juni[i]);
}
return 0;
}
static void getJuni(const char *data, char *juni, int size)
{
int i;
int j;
int p;
p = 128; // CHAR_MAX かな ?
for(i = size - 1, j = 1; i >= 0; i--, j++) {
if(p > data[i]) {
juni[i] = j;
p = data[i];
}
else if (p == data[i]) {
juni[i] = juni[i + 1];
}
}
}
>static void getJuni(const char *, char *, int);
juniはintのほうがいいと思う。
712 :
デフォルトの名無しさん :02/03/28 13:47
713 :
デフォルトの名無しさん :02/03/28 14:50
Javaを助けてください。
長くなるかも知れませんがお願いします。
頭がわるいもんでずーーーっとつっかえてます。
今Lsystemをいろいろとみてあるいてます。
http://www.asahi-net.or.jp/~pd4s-hgwr/lsystem/ ここでソースを落としてみたんですが
Rule.javaをコンパイルすると以下のようなエラーがでます。
Rule.java:104 : class Rule で宣言されたメソッドjava.util.Enumeration.values()は、
class.java.util.Hashtable で宣言された同じシグニチャーのメソッドをオーバーライドできません。同じ形の戻り値を持たなければなりません。
public Enumeration values(){
^
誰か落としてヘルプしてくれる人います?藁
Rule.java長くないんですが 読みやすいように書くと1000文字越えちゃう・・・
本当にいっぱいいっぱいです。助けて・・・
>>713 エラーの意味は、「同じ引数の型(シグネチャ)を持つメソッドを
オーバーライドするときは、戻り値の型も元のメソッドのと
同じじゃなきゃいかん」ってことだね。
で、今調べてみたけど、
jdk1.1系にはjava.util.Hashtableクラスに、values()って
メソッドは定義されてなかったので、Rule.javaでvalues()を
定義してもオーバーライドではなかったわけだけど、
java2では残念ながらvalues()っつーのがすでに定義されてるので、
上記のエラーとなるわけだ。
715 :
デフォルトの名無しさん :02/03/29 10:46
>>714 と言うことは・・・
簡単に言えばvalues()がかぶっちゃってる(オーバーライド)ってことですよね。
なら単にvalues()を違う名前で定義すればOKなのかな??
そんな簡単なもんじゃない??
yattemire
宿題じゃないのですが助けてちょ、矢印が引きたいのよ いまは drawLine(from, to) ってやると from から to にむけて矢印 がひけるのね、これを from から to にむけた → って矢印にしたい。 最初に考えたのは from.x, from.y と to.x, to.y を使って、from-to 線分の傾きを出して、それに対して 30 度くらいの回転をかけた直線を to を通るように from の方向へちょびっとづつ書こうと思った。 けど、それってなんかチカラで押さえ込んでいるみたいで、もっとシンプ ルな方法があるのではないかなー? と思ったりした。 動作環境は Java 1.0.2 で JavaApplet として作ってます。 古い JavaMachine (JVM じゃなくて)で動かすので Java 1.1 以降は利用 できません。 とりあえず具体的なコードでもアイデアだけでもいいんですが、助けて。
ある日付から、通算の食事の回数を入力して、 その時点の年月日を出力するプログラムって、どう組めばよいですか。 C言語です。うるう年の分け方やループの仕組みはわかるんですが、 scanfで入力データに対応した日付を書き出す方法がわからないのです。 よろしくおねがいします。
720 :
デフォルトの名無しさん :02/03/29 20:47
>>717 どのくらいの精度が欲しいのかわからんが、5度刻みで矢の
画像を持っておいて、最も角度が近いものを描画したらどうだ?
5度刻みだと18パターン、矢の角度を計算するよりは楽。
722 :
デフォルトの名無しさん :02/03/31 04:45
./a.out 192.168.1.1と入力して192.168.1.1にpingを打てるようにしたいの ですが、./a.out %sと実行されてしまってうまくいきません。 よろしく頼みます。 #include<stdio.h> int main(int argc,char *argv[]) { int i=0; while(i<3){ system("ping %s",argv[1]); i++; } }
>>722 sprintf( hoge, "ping %s", argv[1]);
system(hoge);
>>722 は、いいがそのプログラムに何の意味が?
[CTRL]+[D}しない限りping回り続けるだろ・・・。
725 :
デフォルトの名無しさん :02/03/31 10:51
問題。 Web掲示板のプログラムを作るとして、以下の3つの 数値が分かっているものとします。 (1) 現在のページで表示を開始する投稿番号 x (2) 1ページに表示する投稿数 y (3) 全投稿数 z とする時、現在のページが何ページ目かを算出するには どのような式になるでしょう? 回答は PHP, Perl, Java いずれかの 言語で答えること。 1ページに表示する投稿数が「5」件で、全投稿数が「15」件 あったとします。現在のページでは投稿番号「6」から表示 するとします。このとき 1ページ目: 投稿番号「1〜5」が表示される。 2ページ目: 投稿番号「6〜10」が表示される。 3ページ目: 投稿番号「11〜15」が表示される。 つまり答えは「2」ページ目になります。
728 :
デフォルトの名無しさん :02/03/31 13:50
VBで以下の動作をするものをつくりたいのですが・・初心者なんでサパーリです どなたか教えてくらはイ お願いします 数字を入力し、「実行」ボタンを押すと、1から入力された数値までの合計数を表示する。 ただし、入力されたものが数値でなかった場合、「数値を入力してください」というエラー メッセージを表示する。 「終了」ボタンを押すと、プログラムが終了する。
1から入力された数値xまでの合計数=x*(x+1)/2
マルチって何?
>725 なぜ「z」が必要なの?混乱させるため? use POSIX; $page_number = int ($x / $y + 0.5)
733 :
ダメリーマン :02/03/31 18:28
どうやっても思いつきません。どなたか助けてください。 もう2CHだけが頼りです。C言語初級講座です。 コマンドライン引数に指定されたファイルすべてに対して、 改行文字以外の各行を、逆さまにして表示するプログラム を書いてください。 このプログラムを a.out とすると実行結果としては、 以下のようになります。 % cat text text1 text2 text3 % ./a.out text 1txet 2txet 3txet 逆さまに表示する部分は、以下のようにすると簡単にできます。 1.文字列の最後に改行文字があれば、そこに「\0」を代入 2.文字列の最後の文字から先頭に向かって、順に 1 文字ずつ表示 3.1で改行文字があったならば、改行文字を表示
>>73 丸投げするのに「思いつかない」っていうなよ。
はずかしいかぎりです。 自分でやってみます。
自分なりに組んでみたんですが、goto文で、入力データとcountが一致したらループを抜ける。とさせたいんですがうまくいきません。何か言い方法はありませんか。おねがいします。 #include<stdio.h> main(){ int i=0,j=10,k=0,count=0,year=1800; char nen[20]; char getu[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char niti[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; char shokuji[3]; while(1){printf("count= "); scanf("%d",&i); year++; while(k<12){ switch(k+1){ case(1):case(3):case(5):case(7):case(8):case(10):case(12): while(j<31){ while(i<3){ i++;count++; if(count=&count){ goto end; }}i=0;j++;}break; case(4):case(6):case(9):case(11): while(j<30){ while(i<3){ i++;count++; if(count=&count){ goto end;}}i=0;j++;}break; case(2): if((year%4==0&&year%100!=0)||(year%400==0)){ while(j<29){ while(i<3){ i++;count++; if(count=&count){ goto end; }}i=0;j++;}} else{ while(j<28){ while(i<3){ i++;count++; if(count=&count){ goto end;}}i=0;j++;}}break; } /*switch文の終わり*/ j=0;k++; } /*while(k<12)の終わり*/ k=0; } end:; printf("count= %d,date= %d. %d. %d\n",count,year,hako[k],kan[j]); }
そもそもgotoなんざ使うなってーの。
> if(count=&count){ ??
741 :
デフォルトの名無しさん :02/03/31 22:53
>733 まぁいちおうベタなコードとしては 適当にバッファを用意して1行づつ読み込む。 バッファのケツは\nになるはずなのでそこまでポインタを進める。 その後ポインタをバッファの頭までデクリメントしつつstdoutに投げる。 最後に\nをつける。 次の行へ というような感じになるんじゃないかな。
ファイルポインタを終端に持ってく。 先頭までループしながら、 読む、書く。 遅そうだ
しかも問題を勘違いしている。 最悪だ。
744 :
デフォルトの名無しさん :02/03/31 23:19
>719 738をコピペしてコンパイルしたんだけど最後のpirntfの引数hako, kanをgetu,nitiにしただけでコンパイル通っちゃったよ。 一見してこんなのコンパイル通るわけないと思ったんだけど。ある意味すごい。 とりあえず740の指摘したif (count = &count)がおかしい。intにint *を代入しているし そもそも代入文でいいのかと思うのだが、後でじっくり見てみようかな。 >そもそもgotoなんざ使うなってーの。 などという言葉に耳を貸してはいかん。Switchから抜けようと思えば仕方ない。 しかしネストが3段以上になるのは何か基本的におかしいぞ。 それから変数の名前の付け方のセンスがなっていない。コメントがない。 enumを使え。 nitiという配列だけど、 niti[0] => 1, niti[1] => 2, .... , niti[30] => 31 という配列はナンセンスだとおもう。 それより、 getu[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} の方が意味があるとおもわない?
>>719 ととととと (;´Д`) とりあえず
> while(j<31){
> while(i<3){
> i++;count++;
> if(count=&count){
> goto end;
> }}i=0;j++;}
みたいなコードが都合 4 回も出てますが,
これを一つにまとめるべきだと思ったです。
ヒントとしては,先頭の行の while の部分に注目。
while (i < days) の days の部分が年や月によって少しずつ違うだけっすね。
>>744 さんのヒントの gatu[] も併せて考えて,うるう年にもちょっと気をつけるって方向で。
あと,if (count = & count) の部分がわりとオシャレな事になってますが,
ナニがどうなれば end ラベルにジャンプしたいですか? (;´Д`)
誤 : 744 さんのヒントの gatu[] 正 : 744 さんのヒントの getu[]
みなさん、いろいろな助言をありがとうございます。 if(count=&count)は、もうひとつ変数scan_countを作って、 if(count==scan_count)としました。 いろいろ自分で考えて手を加えてみた結果、 いちおう、入力データが小さいうちは、正常に動作しました。 入力データがかなり大きい数になると、countの表示がマイナスになるのですが、 なにか改善策はありますか?
748 :
デフォルトの名無しさん :02/04/01 00:01
>719 いまさらだけど元の仕様を読んだのだけどはっきりしない点を確認。 「ある日付から通算の食事の回数を入力する」というのはどう有意味? なんかcountとdateを表示するんだけどさっぱり意味がわからない。 もしかしてたとえば 「ある日にちから10回食事した。ある日にちとは今日から何日前か? ただし1日3回食事をとることにして今日はまだ食事をしていないとする」 なら答えは出せる。今回投稿したものは正しくないようだけどいきなり 1801. 1.12なんて答えが返ってくるんだけど。 プログラムを走らせるとcountを聞いてきて計算結果を表示するけど たとえばcount = に3を入力するとどんな答えが返ってきてほしいの?
749 :
デフォルトの名無しさん :02/04/01 00:45
>747 >if(count=&count)は、もうひとつ変数scan_countを作って、 >if(count==scan_count)としました。 これは要するにscanf("%d", &scan_count)という意味ですか? 仕様がわからないから断言はできないが変数のネーミングにセンスがなさすぎる。ふつうi,j,kって言ったら単なる ループカウンタで単にMAXの回数だけループという使い方をする場合が多いのだけれど この場合は i < 3 1日3食? j < 29, 30, 31 ひと月の日数に関係がある? k < 12 月に関係がある? という風にi, j, kに何らかの意味がありそうだからそれなりの変数名にするべきなんじゃ無いだろうか。 その割にはcountなんて言う何をカウントしているんだかわからない変数があるし。 ふつう仕様が舌足らずでもプログラムを見ればたいてい意図していることはわかりそうなものだが 738のコードを見ても何がしたいのかさっぱりわからない。 しかしやる気は感じるので応援はするよ。 とりあえず仕様をよろしく。何を入力したらどういう答えが返ってきてほしいのか はっきりさせてちょ。
>>733 #include <stdio.h>
#include <string.h>
void main()
{
int i, j;
int n;
char c;
char *(aa[3]);
aa[0]= "text1";
aa[1]= "text2";
aa[2]= "text3";
for (i=0 ; i < 3 ; i++)
{
n= strlen(aa[i]);
for (j= 0 ; n / 2 ; j++)
{
c= aa[i][j];
(aa[i])[j]= (aa[i])[n - j - 1];
(aa[i])[n - j - 1]= c;
}
}
for (i= 0 ; i < 3 ; i++)
printf("%s\n", aa[i]);
なぜか動かない、問題でもあるかなぁ〜。
751 :
デフォルトの名無しさん :02/04/01 03:54
>>750 mainの{を閉じてないから。
と、一応つっこんでおく。
752 :
デフォルトの名無しさん :02/04/01 09:12
>719 自分でも物好きだと思うけどコードを読んでみた。 もしかしてやってることはこんなことか? 食事をした回数まで1から数えていく。 3回カウントしたら1日をカウントアップ。 以後同様にして1800年の1月1日(なぜこの日付?)から何日目たっているかを表示。 もしやりたいことが上のようなことなら上に書いてあるものそのままをコーディング してみたら。 もう少しいうとすぐに日付を求めるのではなくまず何日たったかを出せばいいのではないかな? 例えば300日経過していたとして西暦1800年の300日目は何月何日になるかということを 考えればよい。とりあえず閏年は考えないで2月は28日まで1年は365日として コーディングする。その後閏年に対応することを考えればよい。 西暦X年のY日目は何月何日かという関数を考えてもイイかも。 もし後で閏年に対応できないようなコードなら元のコードに問題がある。
753 :
デフォルトの名無しさん :02/04/01 09:39
>750 751のmain閉じはコピぺみすだとしてコンパイルは通るけどメモリエラーで 落ちるということだよね。 とりあえず文字列の配列の宣言部は char *(aa[3]); ではなくて char *aa[3]; じゃないかな? 前者は (aa is array(element3)) is pointer to char 後者は aa is array(element3) of pointer to char aaはcharへのポインタの配列(要素数3)という感じで読むんだけど。 前者は私には自然に読めないな。
>752 グレゴリオ暦、ユリウス暦、太陽太陰暦、イスラム暦、 ユダヤ暦、和暦、などなどに対応したい、とかいわれたら、 格好の練習問題といえそうですね :-)
755 :
デフォルトの名無しさん :02/04/01 09:51
>>753 char *(aa[3]); も char *aa[3]; も同じ意味じゃない?
756 :
デフォルトの名無しさん :02/04/01 10:41
>754 それはいいかもね。各暦に対応した変換関数を考えればいいわけだからね。 >750 とりあえずfor (j= 0 ; n / 2 ; j++)はループの中でnが変化しないからnが0じゃなければ 無限ループするよ。 なんか文字列の先頭からとケツから人文字づつとって入れ替えようとしているみたいだね。 それなら aa[j][i] = aa[n - j - 1][i] になるような気がする。
これで通る。 #include <stdio.h> #include <string.h> void main() { int i, j; char *str[3]; char temp; int len; str[0] = "test1"; str[1] = "test2"; str[2] = "test3"; // それぞれについて処理 for (i = 0; i < 3; i++){ len = strlen(str[i]); for (j = 0; j < len / 2; j++){ temp = str[i][j]; str[i][j] = str[i][len - j - 1]; str[i][len - j - 1] = temp; } printf("%s\n", str[i]); } }
758 :
デフォルトの名無しさん :02/04/01 10:47
>char *(aa[3]); も char *aa[3]; も同じ意味じゃない? 勘違いだったみたいです。混乱させてごめん。 756もちょっと変だった。 超手抜きだけどこんな感じになるのでは #include <stdio.h> #include <string.h> int main(void) { int i, j, k; int length; char c; char *aa[3]; char temp[6]; /* ダサいバッファ*/ /* 文字列の初期化 */ aa[0]= "text1"; aa[1]= "text2"; aa[2]= "text3"; for (i = 0 ; i < 3 ; i++) { length = strlen(aa[i]); /* 文字列の長さを取得 */ /* * aa[i]のNUL文字を除く文字を後ろから一文字づつ * tempバッファにコピー */ for (j = length - 1, k = 0; j >= 0; j--, k++) temp[k] = aa[i][j]; temp[5] = '\0'; strcpy(aa[i], temp); /* tempをaa[i]にコピー */ } for (i = 0 ; i < 3 ; i++) printf("%s\n", aa[i]); return 0; }
…って、見直してみたら殆ど変わってないな。
適当に見て、最初から書き直したのが惡かったスマン。
>>756 が言っているとおり、ループが終わらないのが原因。
確保されてない領域まで交換しようとしてる。
>>758 tempがダサい。
for (j = length - 1; j >= 0; j--){
putchar(aa[i][j]);
}
putchar('\n');
761 :
デフォルトの名無しさん :02/04/01 12:56
>tempがダサい わかってたんだけどさ。 反転させてコピーって方がわかりやすいかなと思って。 だめ? あんまり変わらないかな?
真っ当なコード。 char buf[BUF_SIZE]; while( fgets(buf,BUF_SIZE, stdin) ) { buf[BUF_SIZE-1] = '\0'; int length = strlen(buf); for( int i=length-1; i>0; i++ ){ fputc(buf[i], stdout); } fputc('\n', stdout); }
>>761 temp が temporary以上の役割をしているので、rev_strとでもしたほうが
可読性があがります。また、入ってくる文字数を決め撃ちするのも
どうかと思います。temp[length + 1]に '\0' を入れたほうが。
>>762 インクリメント/デクリメントの方向が真っ当では無い気がします。
char *p="AAAAAA"; *(p + 2)= 'B'; printf("%s\n", p); なぜかこのプログラムが動かない。なぜでしょうか…? 簡単なプログラムなのに…。概念も間違っていないのに…。
>>764 > char *p="AAAAAA";
char p[] = "AAAAAA";
こう直してみましょう。
766 :
デフォルトの名無しさん :02/04/01 16:49
>764 そのコードが通ってしまう環境もあるだろうけどエラーになるのが全うだと思うよ。 pは初期値で文字列リテラルを指している。文字列リテラルは書き込み禁止領域に 確保されているとここの値を書き換えようとするとエラーになるっちゅうわけだ。 対処としては765のようにするかヒープに領域を確保しよう。 ちなみにchar p[]="AAAAAA"; はchar p[] = {'A','A','A','A','A','A','\0'};のシンタックスシュガーで 文字列リテラルの扱いとしては例外的なので間違えやすいところです。
>>764 ,
>>765 ありがとうございます。無知そのものでした…。
さすがに恥ずかしいデス。C言語いつからしているのか…(鬱。
for( int i=length-1; i>0; i++ ){ って for( int i=length-1; i>=0; --i){ ??
769 :
デフォルトの名無しさん :02/04/01 17:08
宿題より俺のオナニー手伝ってくれよ。そう、その手で
それはオナニーじゃなくて、手コキだ。
771 :
デフォルトの名無しさん :02/04/01 18:17
手古希きもちいいYO
#include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { if (argc < 0) { int c, r; c = getc ((FILE *)argv); if (c == EOF || c == '\n') return c; r = main (argc, argv); putchar (c); return r; } else if (argc > 1) { FILE *fp = fopen (argv[1], "r"); if (!fp) { perror (argv[1]); return EXIT_FAILURE; } while (main (-1, (char **)fp) != EOF) putchar ('\n'); fclose (fp); return main (argc - 1, argv + 1); } return EXIT_SUCCESS; }
774 :
デフォルトの名無しさん :02/04/04 17:05
JavaのAppletについての問題です。 1 テキストボックスをAppletに配置します。 そのテキストボックスに何かメッセージを入れます。 入れた後に、エンターキイを押す。 そうするとgetSizeを使ってキャンバスの中央にそのメッセージが現れるようにする。 2 ボタンとプルダウンのチョイスボックスを設置。 その中にはなんでもいいので適当な名前を入れる。 1つの名前を選択してボタンをクリックするとその選択された名前が キャンバスに中央に現れるようにする。 getTextとgetSizeを使用。 ボタンなどの設置の仕方は問題ないのですが。 以上の2つ、特にキャンバスにそれぞれ選択したものを現れるようにするところで かなりつまずいております。 どなたか助けて!
>>774 Graphics取得して、がつっと描画しちゃえばいんじゃない?
でもふつーは、update()をオーバーライドしといて、repaint()呼ぶかな。
>>775 repaint()でどうにかできました。ありがとう。
それで、もう1つ。
ボタンやチャックボックスなどをパネルにまとめてアプレットの上(North)に置きます。
はい、これは全く問題ないです。
それで今度はキャンバスをアプレットのセンターに置きます。
ここで問題が発生。
参考書の例をみながらやっているのですが
その参考書と私の浅はかな知識からすれば
まず、キャンバスを宣言。
private DrawOn canvas = new DrawOn()とかなんとか。
それで次にadd(canvas, "North")でちゃんといくと思うんですが上手くいきません。
動かして見るとキャンバスがボタンやチェックボックスなどのすぐ下の左上によってしまいます。
これはどうしてでしょうか?
参考書などでは綺麗にセンターによっているんですが・・・
もう1度お助けください。
>>776 ソースが見れれば一撃なんだが、とりあえず憶測で。
1.setLayout(new BorderLayout()) し忘れている。
2.キャンバスにsetSize()でサイズを明示的に指定してみる。
3.キャンバスをPanelにつっこんで、Panelをadd()してみる。
4.マジボケで"Center"じゃなくて"North"と書いている。
>>775 3を試したらできました。ありなとう。
でもなんで????
add(canvas, "center")でいかないの?
教えて君になってしまってますが、最後にもう1つだけ。 JavaでAppletのサイズってどうやって変えれるのですか? もちろんhtmlのAppletのWidhtとHeightで変えるのではないです。 htmlファイルで決めたAppletの大きさ以内なら変えられるとのことなんですが・・・ Dimensionとかresizeを使うらしいんですが完全に分かりません、はい、全く・・・ お願いします!!!!
>>779 アプレットのサイズはコード量を減らせば必然的に小さくなります。
>>779 漏れはやったことないけど、Appletは、Componentを継承してるから、
ComponentクラスのsetSize()メソッド使って、
this.setSize(new Dimension(10,10));
でいんじゃないの?
いちおう、サイズ変えた後 repaint()呼んどいたほうがいいかも。
782 :
デフォルトの名無しさん :02/04/06 13:02
宿題手伝ってくれるんですか?お願いします。 練習問題 西暦のカレンダーを作成する。 @年はエラーとする。 A月は「1〜12」以外はエラーとする。 うるう年の条件 @西暦の年数が「4」で割り切れる。 A西暦の年数が「100」で割り切れない。 B西暦の年数が「400」で割り切れる。 計算するにあたり、西暦1年は1月日は「月曜日」とする。 y年m月の求め方 a=365*(y-1)+(y-1)/4-(y-1)/100+(y-1)/400 うるう年のによるづれをもとめる。 b=month[1]=31,month[2]=28,month[3]=31month[4]=30,month[5]=31,month[6]=30 month[7]=31,month[8]=31,month[9]=30,month[10]=31,month[11]=30,month[12]=31 c=(a+b)%7 y年m月1日の曜日 c=0なら日曜日、c=6なら土曜日 正直、まったくC初めてでこの問題はつらいです。すいません。
783 :
デフォルトの名無しさん :02/04/06 13:06
>>782 >@年はエラーとする。
>A月は「1〜12」以外はエラーとする。
ユーザーに年月を入力させて、その月のカレンダーを出力するって
ことかいな?
「年はエラーとする」って意味がわからん。
この時期に宿題って、会社の研修?
>784 勉強のために、自分自身に課題を課しているのでは?
786 :
デフォルトの名無しさん :02/04/06 13:29
>>785 それにしても、文章の解読の方が難しい。
787 :
デフォルトの名無しさん :02/04/06 13:43
>>786 わかりやすい文章を書けた時点でプログラミングの半分は終わったと思われ。
>>781 ありがとう。そんな感じに使うんだと思う。
でも、試したところちょっとやりたいことと違うとこが・・・
えーと、textfieldとcheckboxをパネルに入れてNorthにキャンバスをCenterに設置します。
setLayout(new BorderLayout());
Panel bar = new Panel();
bar.add(text);
bar.add(boxes);
add(bar, "north");
add(canvas, "center");
それでcheckbox(サイズsmall, large, etc)を選んだら
Appletのサイズが変更されるようにしたいのです。
でも、教えてもらった方法だとどうもCanvasのサイズだけが変更されます
Northのbar(textfieldとcheckbox)はそのままのサイズで大きさが変わりません。
どうしてでしょうか?
最初のPanelとかの設定がおかしいのでしょうか?
いま読み返したら、 >練習問題 >西暦のカレンダーを作成する。 >@年はエラーとする。 この(1)の時点で、意味不明ですね。 782さんのその後のフォローも無いし。 ネタ決定ですか?
>>789 Applet(のオブジェクト)に対してsetSize()しなさい。
>>782 どこまでできてて、どこでつまずいてるの?
もしまだ1行も書けてない&UNIX使ってるんなら、
#include <stdlib.h>
int main() {
system("cal");
return 0;
}
てなのはどうかね。
>>781 すいません、そのやり方が分からないのですが・・・
どうやってやるんでしょうか?
>>794 UNIXなら、viかemacsでcalendar.cというファイル名でセーブして、
cc -o calendar calendar.c
でコンパイルして、
calendar
で実行。
797 :
デフォルトの名無しさん :02/04/07 09:07
Cなんだけど、 ESCで終了するように while((c=getche())!='\x1b) てやったら空リターン受け付けないんだけど、どうすればいい?
CR('0x0d')も取れ。 #include <stdio.h> #include <conio.h> void main() { int c; while (1){ c = getche(); switch (c){ case 0x1b: // escape putchar('\n'); goto loop_end; case 0x0d: // carriage return putchar('\n'); break; default: printf("%c", c); } } loop_end: }
799 :
デフォルトの名無しさん :02/04/07 22:03
>>798 サンクス!CRを'\n'だと思ってタヨ。
厨房でスマソ。
800 :
デフォルトの名無しさん :02/04/07 23:05
782です、申し訳ないです。まさしく研修中で、 C++をよく理解していないまま、この問題を渡されました。 訂正箇所は、 西暦のカレンダーを作成する。 @年は「0」はエラーとする この箇所だけです。すいませんでした。
>>800 「800getズッザー」が抜けてます。
803 :
デフォルトの名無しさん :02/04/07 23:37
誰か
>>800 の宿題解いてあげて下さい。漏れは風呂入ってくるけど、
あがって誰も解いてなかったら作ってみるか。
久しぶりに登場してみようかな。 とりあえず最初から置いていかれると、どんどん辛くなっていくから、 頑張ってついていかないと大変だと思うよ。 やっぱ、ネットだと教えににくいところもあるから、同僚でできる人 と友達になって教えてもらうのがいいんじゃないかな。お礼はすると してね。まだ、働いたことのない私がいうのも何ですが・・。 で、y年m月のカレンダーを作るときには、その1日が何曜日かわから ないとできないよね? それを計算しようというのがヒントに書いて ある話ね。 西暦1年1月1日(1が抜けてたけどそう?)の曜日がわかってるって ことで、1年1月1日からy年m月1日まで何日あるかえを調べたいわけね。 まず、西暦1年1月1日から、y年1月1日まで何日あるかって計算し てみると。 365*(y-1)+(y-1)/4-(y-1)/100+(y-1)/400 ってなるのね。なんで、この式になるかは考えて理解してみてね。 整数/整数の場合は、答え整数になる。9/4=2みたいにね、念のため。
で、次にy年1月1日から、y年m月1日まで何日あるかって考えると month[1]=31,month[2]=28,month[3]=31month[4]=30,month[5]=31,month[6]=30 month[7]=31,month[8]=31,month[9]=30,month[10]=31,month[11]=30,month[12]=31 とmonthに代入した後に、 int b = 0; int i; for(i = 1; i < m; i++) b = b + month[i]; ってことをしてあげればbにその日数が入るのね。これが何をしてるかはわかる? で、そうすると 1年1月1日からy年m月1日まで何日、あるかは上の2つを足したものになるよね。 で、これを7で割った余りをみれば、y年m月1日が何曜日かはわるよね? とりあえず、ここまで理解できたら続きを書くね、
807 :
デフォルトの名無しさん :02/04/07 23:59
782です。805さんの言うとうり1が抜けてました。すいません。 たしかに、forの式でbの値はわかりますよね。ifを使ってうるう年の 条件をだすんですか?
>>807 ああ、そういえばうるう年忘れてました。
ええ、ifを使ってiが2のとき、うるう年かどうか調べてください。
809 :
デフォルトの名無しさん :02/04/08 00:20
>>807 うるう年の判定をif文を使わずに計算で出そうとしている模様。
しかし、
> a=365*(y-1)+(y-1)/4-(y-1)/100+(y-1)/400 うるう年のによるづれをもとめる。
これは気を付けないと、365*(y-1)の部分でオーバーフローしやすいぞ。変数は
longで宣言しておくべきだな。もっとも、intが16ビットの処理系もマイナーになっ
てきたが。
>>809 多分うるう年のときの、3月以降のカレンダーを出す場合の話。
811 :
デフォルトの名無しさん :02/04/08 01:02
782です、了解です。なんとか形になってきました。 ありがとうございます。やれるとこまでやって明日 聞いてみます。しかし、文系出の初心者には大変です。 5日前に初めてC++の参考書開いたのに今週で覚えろ なんて・・・これって普通なんですかね?? 私には酷なんですけれども。
酷だと思いますよ。システム系の会社だったら、ある程度は勉強してきた んだろう、という前提で研修をしているのかもしれません。
>>811 それはひどすぎ。最低でもプログラミング研修3ヶ月はある。
ゲーム業界とか特殊な企業は除くけど・・
>>811 他スレでは4.5年かかるとか書いてあったよ
1週間で覚えたらスゴイ
age
816 :
デフォルトの名無しさん :02/04/09 12:32
Cで整数の引数のビットを文字列として表示するってどうやればいーの? たとえばbit(60);ってやったら 11-1100 みたいに4文字ごとに区切り文字を入れろって言われたんだけど・・・ 教えてくださーい
>>816 下位ビットから見ていく処理でーす。
参考にして考えてみてね。
わからなかったら、また書き込んで。
unsigned int n = xxx;
while (n!=0) {
if (n & 1) ビットが立っている
else ビットが立っていない
n >>= 1;
}
818 :
デフォルトの名無しさん :02/04/09 12:44
以下のように CWinApp *Application から操作しようと考えているのですが、 どうしても、WinMain.cppの3行目のif文で真となってしまい終了してしまいます。 何か基本的なことが分かっていないと思うのですがどうかよろしくお願いします。 (WinMain.cpp)------------------------------------------- #include "CWinApp.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if(Application == 0) return -1; //Application->Init(hInstance, lpCmdLine, nCmdShow); の様に続く } (CWinApp.h)------------------------------------------- #ifndef __CWinApp #define __CWinApp class CWinApp { public: CWinApp(); ~CWinApp(); ・・・省略 } // class CWinApp終了 extern CWinApp *Application; //CWinApp.cppの2行目で宣言 #endif (CWinApp.cpp)------------------------------------------- #include "CWinApp.h" CWinApp *Application; CWinApp::CWinApp() { Application = this; } CWinApp::~CWinApp() { Application = 0; }
消防の頃、手探りでBASIC覚えてる時、論理演算も2進数の存在も知らずに、 if (n>=128) { b[0]=TRUE; n-=128;} if (n>=64) { b[1]=TRUE; n-=64;} if (n>=32) { b[2]=TRUE; n-=32;} //BASICの文法忘れた とかやってた。 もう馬鹿かとアホかと。
>>818 それじゃCWinAppのコンストラクタが実行されないよ。
821 :
デフォルトの名無しさん :02/04/09 14:34
unsigned char data[4] = {0x31, 0x32, 0x33, 0x00}; と宣言した変数dataに 10進数の20を16進数に変換した数字をdata[1]に入れたい場合、どうすればよいでしょうか? 自分なりに以下のようにやってみましたが、うまくいきませんでした。 int main() { unsigned char data[4] = {0x31, 0x32, 0x33, 0x00}; char temp[1]; sprintf(temp, "%x", 20); //20を16進数に変える。tempには14が入る。 memcpy(&data[1], temp, 1); cputs(data); cputs("\r\n"); return 0; } 結果 113 となってしまいます。20を16進数に変える方法がよくないんだと思いますが、 なにかアイデアあれば、教えてください。
書き忘れましたが、環境はwindowsNT、TurboC++ ver.3.0です。
>>821 どう説明したらわかってもらえるかわからないけど、
10進数とか16進数っていうのは、ソースに記述したり
外部にテキスト形式で出力したりするときに関係してくる
もので、コンピュータの内部では常にバイナリで処理されてます。
はい。
いえ、あのつまり、0x31, 0x32, 0x33, 0x00は、 asciiコードで言えば、それぞれ1,2,3,nullですよね? それで、20を16進数に変えますと14ですから、これを表示すると、 Π こんなようなマークが表示されるわけですよ(14のアスキーコードが見つかりませんでした) これでも勘違いしていますか?
>>825 もしかして、charを他の言語の文字列型と同じように思ってる?
(temp[]の要素数が1だし)
charは、文字列型ではなくて文字型だから一文字しか入らないよ。
char temp[3];
sprintf(temp, "%x", 20);
"14"を変数に入れたかったら、temp[3]にしないとだめ。
827 :
助けてください :02/04/09 15:10
Fortran で、バイト文字をアスキー型に変換する関数を教えてください。 もしくは、その辺に詳しいサイトを紹介してください。 m(_ _)m
>>826 ありがとうございます、こんな質問に付き合っていただいて。
言葉足らずで申し訳ありません。
20を16進数に変えた後、その配列には最終的にはこうなってもらいたいんです。
{0x31, 0x14, 0x33, 0x00} //変数dataの中身
826さんのおっしゃるようにやりますと、
14という数字の1の部分(1バイト分)がその配列の先頭に入るだけになってしまいます。
つまり、
{0x31, 0x32, 0x33, 0x00} となり、結局中身は変わらないです。
説明不十分で826さんがミスリーディングしてしまいましたら、申し訳ないです。
829 :
デフォルトの名無しさん :02/04/09 15:25
>>821 最近までBASICやってたような質問だねぇ
>>828 そうしたいなら、これでいいけど。。。
int main()
{
unsigned char data[4] = {0x31, 0x32, 0x33, 0x00};
data[1] = 20; /* data[1] = 0x14;と同等の処理 */
cputs(data);
cputs("\r\n");
return 0;
}
>>830 ちょっと、こちらで実行してみます。それから返事します。どうもです。
>>830 できました。なんか拍子抜けしてしまいました。
単純にこれでいいんですね。ありがとうございました。
834 :
デフォルトの名無しさん :02/04/09 17:12
だね
DirectInputについて勉強しているのですが、 これを使うとキーボードなのの反応が早くなるとならいました。 実際どうやって初期化するか、キーの状態を取得するか は分かったのですが、どこで取得するのがいいのでしょうか? メッセージを処理するCALLBACKの所で取得すると、DirectInputを 使わない時と変わらなくなってしまうので、メッセージループの部分で やるとなると毎回呼び出す分、負担が大きくなってしまうと思うのですが、 それ以外に方法が思いつきません。 どうかよろしくお願いします。
必要になったときに取得しろ そもそもDirectInputを使う必要があるのかどうかよく考えろ
>>835 ゲームのループってーのは、ディスプレイのリフレッシュレートに
あわせて回すのが一般的です。
例えば、リフレッシュレートが60Hzの場合、画面は1秒間に60回しか
書き換わらないので、それ以上の速度でVRAMを書き換えても、
無駄です。
なので、普通は1ループ終了後(すなわち、キーを一回読み込み、
必要な処理をし、バックバッファに次のVRAMイメージを描画し終った後)、
ダブルバッファをフリップするタイミング(垂直帰線期間の開始)までウェイトします。
つーことで、CALLBACKやループでキーを読み出すのではなく、
垂直帰線期間が開始したら、1回分読み出せばOKです。
(DirectDraw使ってるなら、LPDIRECTDRAWSURFACE3のFlip()呼ぶ時に、
Flip(NULL, DDFLIP_WAIT)みたいにDDFLIP_WAIT指定すれば、
勝手に垂直帰線期間までウエイトしてくれるんじゃないかなぁ?
まちがってたらスマン。)
そもそも、ノートとか垂直同期検出不可能な環境もあるから、 現在はタイマで待つのが一般的かと。
C言語で、BMPファイルのグラフィクデータを直接いじるやり方ってどうやるのでしょうか。 調べましたが、どうにもアドレスでどうにかするしかないらしいのですが・・・
>>840 アドレスでどうにかするんじゃないとしたら、どんなふうに直接
いじりたいの???
getColor(bmp,x,y)とかsetColor(bmp,x,y,color)みたいなかんじ?
842 :
デフォルトの名無しさん :02/04/17 12:52
不定期アゲ
>>835 ちゃんとスレッドを作って実行してる?
>>840 直接操作しないとパフォーマンスが悪いよ
844 :
デフォルトの名無しさん :02/04/17 22:08
すいません、教えてください。 Cなんですが 宿題で、ANK文字や漢字1バイト、漢字2バイトを 見分けなければならないのですが、 どうやって見分ければいいのでしょうか? 教えてください。
>>846 魚でなく釣り竿を渡す。大岡越前のようです。
漏れは消防の頃、大岡越前をおおおかこしまえと読んでいました。
わかんない(汗 ctypeはしらべてわかりましたが やっぱ漢字を見分けるのが出来ません。 どなたか簡単に教えてください〜
そんな事も自分で調べられないなら 元々プログラマに向いてないでしょ。
>>844 その課題、それを分別してから、単語ごとに区切ってクイックソートしたりする?
856 :
デフォルトの名無しさん :02/04/23 19:52
fortranの参考書を本屋で探したんですが、どこにも売ってませんでした。 先生も文法をたいして教えずに課題を出しやがる。 問題は1、2、3、・・・20の等差数列の和を出すプログラムを書けをいうものです。 どなたかまじで助けてください。
1から20までの総和 01 c 02 c 03 c 04 s=0. 05 do i=1,20 06 s=s+i 07 end do 08 c 09 write(*,*) 's=',s 10 c 11 end
>>856 Σn=(n+1)*n/2
n=20として 21/20/2=21*10=210
よって
INTEGER ANS
ANS=210
WRITE(*,*) '答えは',ANS
END
の4行で終わりかと
859 :
デフォルトの名無しさん :02/04/23 20:43
ほんとありがとうございました。 まんま書いてもなぜかできなかったんですが、 この前授業でもらったプリントと重ねあわせてやってみたところ。 下のやつで出来ました。 n=0 do i=1,20 n=n+i end do write(*,*) 'n=',n stop end 注文した参考書が届いたらちゃんと勉強したいと思います。
860 :
デフォルトの名無しさん :02/04/26 16:47
答えを整数型で表示する次のプログラムを、実数で表示するようにかえてください。 言語は見ての通りCです。お願いします。 #include <stdio.h> #define INPUT_FORMAT "%d" #define SUM_FORM "%d" void input(int); void sum(int); int M[100],n,m,l,s=0; main() { printf("数を入力してください。結果を出したいときは数字以外のものを入力してください\n"); input(n); sum(n); m=s/6; l=s%6; printf("商="INPUTF_ORMAT"\n",m); printf("あまり=" SUM_FORM"\n",l); } void input(int n) { for(n=0; n<100; n++) { if( scanf(INPUT_FORMAT,&M[n])!=1 ) break; printf("M[%d]="SUM_FORM"\n",n,M[n]); } return (M); } void sum(int n) { for(n=0;n<100;n++) s+=M[n]; return (n); }
>>860 void の関数でreturn(M)とかやって、コンパイルとおるのか?
それ以前に、 void input(int n) { ...(略) return (M); } void sum(int n) { ...(略) return (n); } って何よ。
>861 VC++6のデフォルトなら、 「warning C4098: 'input' : 戻り値の型が 'void' で宣言された関数が、値を返しました」 とか言われるけど、コンパイルはできる。 なんかCのイヤなところを見てしまった気分
>861さん 863さんの言う通りコンパイルは出来るんですよ。 ただこのプログラムを実数表示にしようとするともう頭が・・・・。 何とかなんないでしょうかね?
printf("商=%d.0\n",m); printf("あまり=%d.0\n",l);
866 :
デフォルトの名無しさん :02/04/26 17:06
>>864 main()
{
printf("数を入力してください。結果を出したいときは数字以外のものを入力してください\n");
input(n);
sum(n);
printf("商=%g\n",s/6.0);
printf("あまり=%d",l%6);
}
あんたの意図がいまいちわからんけど、
実数表示ならこれでいいと思う。
input()もsum()も引数をとる意味が無いような…
>865さん >866さん ありがとうございます。今からやってみます。ちなみにdefine文は書き 換えなくてもいいのでしょうか?それとこのプログラムの正しい戻り値っ てどうすればいいのでしょう?気になったもので。 >867さん 僕にも意味はわかりません(笑
先生曰く「戻り値が正しくないから駄目です。やり直し。」 誰か〜、戻り値教えてください〜(泣
870 :
デフォルトの名無しさん :02/04/26 17:41
>>869 もしかして教室から?
int input(int n)
int sum(int n)
>870さん 回答ありがとうございます!コンパイルできました!ちなみにただ今授業の 真っ最中です。コソーリ書き込んでます。 で、新たな問題が・・・865さんと866さんの教えてくれたプログラムに 書き換えたんですけど、入力で実数の4.5とか入れるとその時点で終わってしま います。この解決方法はどうすればいいのですか?
>>871 「答えを整数型で表示する次のプログラムを、実数で表示するようにかえてください。 」
って言ってたじゃん・・・
>872さん !!(;´Д`) すみません!どうやら間違いがあったようです。 正しくはさっきのプログラムに実数を入力しても正しく動くようにして ください、ってことです。たとえば5.4と8.3と9.4を入力すると商に3、 あまりに5.1を表示できるように、ということです。文章力&プログラム力 なくてすみませんがよろしくお願いします。
874 :
デフォルトの名無しさん :02/04/26 18:15
875 :
デフォルトの名無しさん :02/04/26 18:30
>>873 授業料500円払えや!
(って仕様を読み違えてる可能性有り)
#include <stdio.h>
#include <math.h>
int input(float M[], int);
float sum(float M[], int);
main()
{
float M[100], s;
int num;
printf("数を入力してください。結果を出したいときは数字以外のものを入力してください\n");
num = input(M, 100);
s = sum(M, num);
printf("商=%g\n", s / num);
printf("あまり=%g\n",fmod(s, num));
}
int input(float M[], int max)
{
int i;
for(i=0; i<max; i++)
{
if( scanf("%f",&M[i])!=1 )
break;
printf("M[%d]=%g\n",i,M[i]);
}
return i;
}
float sum(float M[], int num)
{
int i;
float s = 0.0;
for(i=0;i<num;i++)
s += M[i];
return s;
}
>>875 さん
お礼が遅れてすみません!ありがとうがざいました!
遅れた言い訳→授業中にネットをやっているのがばれて先生に激怒され、今日まで
演習室に立ち入り禁止処分を食らったため・・・・。しかも宿題増やされるし。
欝だ逝ってきます。
>>144 > 正確に言うとコンパイルとリンクね。
正確に言うと、プリプロセス -> コンパイル -> アセンブル -> リンク ね。
>>233 >使わない、と言うかぁー、使えない。
return そのものは使えるよ。
void func(void){
if(....){
........
return;
}else{
........
........
}
}
とか。
途中で処理を打ち切るのに使ってる。
>>390 > C言語での個人情報ファイルの作り方を教えてください。
>(ソート、検索が可能でレコードの追加、削除、訂正、新規などの操作ができるもの)
K&R の 5 章と 6 章に殆どそのものが載ってる。
880 :
デフォルトの名無しさん :02/04/28 19:44
c++で1234と表示するプログラムなんですが、 kazu.cpp: In function `int main (...)': kazu.cpp:21: no matching function for call to `kazu::setkazu (const char[5])' kazu.cpp:7: candidates are: void kazu::setkazu (const int *) というエラーがでてうまくいきません。intとcharに関連したエラーだという ことはわかるのですが、始めたばかりでどう直せばよいのかよくわかりません。 よろしく頼みます //ヘッダファイル"kazu.h" class kazu { int a [20]; public : virtual void setkazu (const int *p_a); virtual void putkazu(); }; //"kazu.h"END //mainファイル"kazu.cpp" #include<stdio.h> #include<string.h> #include<iostream.h> #include"kazu.h" void kazu::setkazu(const int *p_a) { for(int i=0;p_a[i]!='\0';i++){ a[i]=p_a[i]; } } void kazu::putkazu() { cout<<a\n; } void main() { kazu ka; ka.setkazu("1234"); ka.putkazu(); }
881 :
デフォルトの名無しさん :02/04/28 19:48
C言語で、+・−の演算子を使わずに、加算・減算ができるプログラムを 作りたいのですが・・・。教えていただけますか?インクリメント・デクリメントの 使用はOKらしいです。
>>880 setkazu に数字の配列を渡してるつもりなんだろうけど
"1234"は文字列(charの配列)だぞ。
の割には a[i]!='\0' って書いてあったりするんだね。 わかってるのか、わかってないのか・・・
>>883 intとcharの違いがわかってないと読んだ。
>>881 元の上位=A
元の下位=B
後の上位=C
後の下位=D
として
C=A and B
D=A xor B
とすれば加算になる。
これを桁数分だけ繰り返す。
>>882 なるほど・・・では数字の配列として渡すにはどうすればいいですか?
1ビットずつね
頭悪い回例
int add( int left, int right )
{
for( int i=0; i<right; i++ )
left ++;
return left;
}
ところで、型がdoubleだったら面倒だよな。
>>880 int nums[]={1,2,3,4,5,0};
ka.setkazu(nums);
とか
>>887 というか、このクラスのコンセプトは?
もともと数を文字列で持つつもりで作ったんじゃないの?
>>881 こんなんどう?
int add( int i, int j)
{
_asm
{
mov eax, i
add eax, j
mov i, eax
}
return i;
}
893 :
デフォルトの名無しさん :02/04/28 20:35
漏れも昔、他人のレポート丸写したから、べつにいいんだけどね。 たしかに授業でやるにはちと難かしいかも。
>892様 既出でしたか。すいませんでした。リンク先を参考にしてみます。
896 :
デフォルトの名無しさん :02/04/29 12:31
C言語の質問なんですが、int型の配列に、キーボードからの入力を格納していくにはどうすればいいですか?
>>896 getchar()で一文字ずつ取得するってのはどぉ?
>>896 char buf[MAX];
int k=0,n[N] ;
while(fgets(buf,MAX,stdin) && k<N){
/*ここでbufの内容が(scanfに)適正かチェック*/;
sscanf(buf,"%d",n+(k++));}
みたいな
a.rea1+jimag b.real+b.imag に対し、 a+b, a-b, a*b, a/b , eのa乗, aの絶対値 を求めるプログラムを教えて!ヒントキボンヌ
>>899 君は『人に何かを伝える』とはどういうことか、考えた事はありますか?
>を求めるプログラムを教えて!ヒントキボンヌ 無理に2ch用語使わなくてもいいんだよ?
やべっ漏れマジでe^a忘れた。 だれかe^aだけでいいから教えてくれよ。
>>902 a = x + iy
e^a = e^x * e^iy = e^x * ( cos(y) + i * sin(y) )
良く見ると
>>899 は…複素数か?
C99 で _Complex 型を使うってのはどうだ?つーか、言語何よ?
>>903 サンクス。
指数の加算は分離できるんだったね。
実数を一つ入力して(%lf)、全体の桁数を10桁として、それぞれ小数以下を 3桁、2桁、1桁で表示するプログラムを作りなさい。(%10.3f、***、***) *** は各自決定せよ。 という問題があるのですが誰かわかりませんか?
>>906 printfで%10.3fだと13桁にならない?
%*.*fを使うとよいかも。
>>906 私はわかりますが、決定するのはあなたです。
910 :
デフォルトの名無しさん :02/05/01 16:27
問題文見て答えが推測できなきゃダメ。
912 :
デフォルトの名無しさん :02/05/01 16:31
>>911 だって〜まだ初めて一週間もたってないんですよ
たのみますよ〜
913 :
デフォルトの名無しさん :02/05/01 16:33
#include <stdio.h> void main(void) { double a; scanf("%d",&a); printf("%10.3f%10.2f%10.1f\n"); } のどこが悪いかわかりません
始める前でもある程度予想つきそう。
>>908 には手伝ってもらわないほうがいいでしょう。
916 :
デフォルトの名無しさん :02/05/01 16:36
>>914 つかないっすよ〜
プログラムなんて初めてなんだから
>>915 (^_^;)
>>916 #include <stdio.h>
int main()
{
double d;
int keta;
scanf("%lf",&d);
for(keta=3;keta>0;keta--)
printf("%10.*f\n",keta,d);
return 0;
}
919 :
デフォルトの名無しさん :02/05/01 18:08
次スレの女の子の名前は?
>>918 理解しにくい、プログラムの見本だな。出力結果も3行になるし、やっぱ
こいつには手伝って欲しくないよ。
921 :
デフォルトの名無しさん :02/05/01 18:16
>>918 お〜すごいです〜!!!
欲を言うとFor関数習ってないので使わないでできるでしょうか?
”のえみ”でどうよ?
>>920 なんで三行になってはいけないのよ・・・・
>>921 #include <stdio.h>
int main()
{
double d;
scanf("%lf",&d);
printf("%10.3f %10.2f %10.1f\n",d,d,d);
return 0;
}
forは関数じゃない。
924 :
デフォルトの名無しさん :02/05/01 18:20
>>923 mathematicaと混同したw
まじでありがとうございます!!!!!!!!!!!!!!!!!!!!!!!
神!!
(・∀・)/I
少ないですがこれで
10.3fだと9桁しか出ないという罠
>>920 この程度のプログラムで、理解しにくいってどのへん??
もしかしてネタなのか・・・
>>929 なるほどね。
で、俺的にはfor()のあとには{}付けてほしいってくらいだけど、
他になんか気になる点ある?
>>929 もしかしてエラーチェックしていないってこと?
そんなの省略したに決まっているじゃない。
>>931 エラーチェックしてないことが、理解しにくいってことにはならないだろ。
理解しにくいってのは、記述やアルゴリズムの問題。
漏れは
>>920 じゃ無いから、べつに理解しにくいとは思わないけど。
む・・・
すると
>>920 はやはりネタなのか・・・。ムカツク野郎だな。
935 :
デフォルトの名無しさん :02/05/02 16:59
スマソ、 VBマガジン11月号の記事みてちとやってみたらクイックソートがうまくいかなんだが ちと知恵貸してくれんかのう・・・ まずクラスモジュール定義して・・・ 'qsort class Option Explicit Public Event compare(ByVal x As Long, ByVal y As Long, ByRef flag As Long) Public Event swap(ByVal x As Long, ByVal y As Long) Public Sub sort(ByVal startPos As Long, ByVal endPos As Long) Dim i As Long Dim j As Long Dim xPos As Long Dim compareflag As Long i = startPos j = endPos xPos = (startPos + endPos) \ 2 Do RaiseEvent compare(i, xPos, compareflag) While (compareflag < 0) i = i + 1 RaiseEvent compare(i, xPos, compareflag) Wend RaiseEvent compare(j, xPos, compareflag) While (compareflag > 0) j = j - 1 RaiseEvent compare(j, xPos, compareflag) Wend If (i <= j) Then RaiseEvent swap(i, j) i = i + 1 j = j - 1 End If Loop Until (i > j) If (startPos < j) Then sort startPos, j If (endPos > i) Then sort i, endPos End Sub
936 :
デフォルトの名無しさん :02/05/02 17:00
次に Option Explicit Private WithEvents objQSort As qsort Dim data(4) As Long Private Sub Command1_Click() data(0) = 10 data(1) = 3 data(2) = 30 data(3) = 6 data(4) = 2 Set objQSort = New qsort objQSort.sort 0, 4 Dim i As Long For i = 0 To 4 Debug.Print data(i) Next End Sub Private Sub objQSort_compare(ByVal x As Long, ByVal y As Long, ByRef flag As Long) flag = (data(x) - data(y)) End Sub Private Sub objQSort_swap(ByVal x As Long, ByVal y As Long) Dim temp As Long temp = data(x) data(x) = data(y) data(y) = temp End Sub とやってるのだが、これだと 2 3 10 6 30 の並びなってうまくいかんのだが、どこがおかしいんだか教えてくれんかキボーン
VBか・・・配列は?
オレなら、
>>923 のprintfを3つに分割するか、関数化して3回呼ぶかな。
941 :
デフォルトの名無しさん :02/05/03 19:38
>>938 ところで、改行してはいけないってどこに書いてあるんだ?
>>941 バカか、お前。
> 質問の本質と違うところで変な変更するなよ。しかも、動きまで違うし。
> バグ作りこむ前に氏ね。
おまえもなぁ〜〜〜。
宿題はSCHEMEもやってくれるんですか?
>>943 schemeでもかまわないが、まるまるやってはやらんぞ。
どこまで自分でやって、どこでつまずいてるか教えてね。
久しぶりに来てみたが・・・怜ちゃんはいるのか?
スレを読めば分かることだと思いますが?
>946 久しぶりに名前を出したかっただけだ、ageてすまない。
ぐはっ
シェルの作成についての課題なのですが、 MyshellはCshellと違って、Cで実行できていたコマンドや機能のうち 働かないものがある。これらを調べ、どのような機能が実行できないか、 なぜできないか、どのような機能を追加すればいいか? 例えば次のが実行できない エイリアス、ヒストリー、ワイルドカード、ファイルへのリダイレクト、 shellプログラミング、ディレクトリー操作(popd、pushdなど) これらから4つほど(エイリアス、ヒストリーは必須)をmyshellに追加せよ。 という課題です。助けてください、お願いします。できればソースを、、。
>>949 Myshellは一般的なものじゃないので、それがどんなものか
教えてくれないとわかんないよーん。
>>950 様、これです#include<stdio.h>
#define MAXARGS 10 /* 許されるコマンドの引数の最大の数 */
#define LINELENGTH 80 /* コマンドラインの最大文字数 */
#define CONTINUE 1
#define EXITCOM 0
main(int argc,char* argv[])
{
char linebuf[LINELENGTH];
int hist;
for(hist=1; ;hist++){
printf("myshell[%d] ",hist);
gets(linebuf);
if(exec_one_command(linebuf)==EXITCOM) break;
}
}
char *skipspace(char* s)
{
while(*s==' ') s++;
return s;
}
int getcl(char* line,char* argmv[]) { int argnum=0; do{ line=skipspace(line); if(*line=='\0'){ argmv[argnum]=NULL; return argnum; } argmv[argnum++]=line; while(*line!='\0' && *line!=' ') line++; if(*line=='\0'){ argmv[argnum]=NULL; return argnum; } *line='\0'; line++; }while(1); } int exec_one_command(char linebuf[]) { int argnum, status; char *argmv[MAXARGS]; argnum=getcl(linebuf,argmv); if(argnum==0) return CONTINUE; if(strcmp(argmv[0],"exit")==0){ return EXITCOM; } if(fork()==0){ execvp(argmv[0],argmv); printf("Error at execvp\n"); exit(); } wait(&status); return CONTINUE; }
>>951 おぉぉ。おもしろいね。コレ。
で、まず
エイリアス:
1.exec_one_command()で、alias っていうコマンドが来たら、第2引数(エイリアス名)と第3引数以降(コマンド)を何か(alias_bufと名づけよう)に保存。
2.exec_one_command()で、alias_bufに登録してあるエイリアス名を探して、存在すれば、保存してあるコマンドを代わりに実行する。
ヒストリ:
1.exec_one_command()で、コマンドを実行するたび、何か(history_buf[hist]としよう)に保存していく。
2.exec_one_command()で、!数字 っていうコマンドが来たら、代わりにhistory_buf[数字]に保存しといたコマンドを実行する。
でできるよ。簡単簡単。
あと簡単そうなのは、shellプログラミング(制御構造が無い、batファイルみたいな単純なの)と、
ディレクトリ操作かなぁ。ワイルドカードも、そんなに難しくないかも。リダイレクトは、ちと難しい。
>>950 様
丁寧な説明、ありがとうございます!
おもしろい、、のでしょうか?(汗
僕もそう思える日がくればいいなぁ、、。
(冗) <フムフムソレカラ?
956 :
デフォルトの名無しさん :02/05/06 00:47
ageてみるか
957 :
デフォルトの名無しさん :02/05/06 00:54
そろそろ新スレを誰か。
ワシの出番か・・・
>>958 玉三郎が宿題を教えてくれても、あまり嬉しくないぞ
こら誰が金玉三郎じゃヽ(`Д´#)ノ
玉三郎は、金玉三郎と… φ(.. )
962 :
デフォルトの名無しさん :02/05/06 01:12
そういや、えれながいつのまにか消えたな・・・
最多真鯛の宿題か…
えれなや怜って演じてる奴何回くらい変わってんだろ?
>962 呼んだ?
#include<stdio.h> void main(void) { int a; a = 10; } 上のプログラムを実行すると「aの値は10です」と 出力するようにするにはどうしたら良いのでしょうか? (%dを使って)
>>970 %dとまでいってて、何がわからないの?
もしかして全角でってこと?
972 :
デフォルトの名無しさん :02/05/07 22:50
その前にニホンゴができてないな。 母国語なんだろうけどいいたいことを正確に伝えられない 言語障害者はプログラミング言語をつかっても駄目なこと多いよ。
簡単なアルゴリズムを教えてください。 問題は 「キーボードから文字列を読み込んで, 読み込んだ文字列を逆にした文字列を表示する」解答 I94==>49I という問題なのですが。。配列でやったのですが。。。
>>973 スタック使え...。多分これだけでは、ちんぷんかんぷんだろうから、
スタックを配列で作れ。とまでは言っておこう。
配列でやったならあとは一文字ずつ...
>>971 自分、超初心者なんで%dも良く分からないです。
全角でとは、どういう事ですか?
文字を入力してカウントするプログラムで main() { int i=0,j; while(j=getchar()){ if(j==EOF)break; i++; } printf("文字数は%dです。\n",i); } と記述したのですが、 どうしても文字数+1となります。 なぜでしょうか?
973ですが、スタックってキューとかって 実際今まで使ったことがないのでわかりません。 基本情報を勉強したときに障った程度です。 配列でいこうと思っているのですが。。。
printf("aの値は10です\n%d%c%c",a,0x08,0x08); あってる?
getchar() で開業コードもカウントされるからですかな。 と書いてみるテスト。
>>980 どうやって回避すればいいのでしょうか?>改行コード
printf("",i-1);
とすると何も入力しないとき-1が帰ってくるので困ってます。
>>973 #define MAX_LINE 2000
int ri;
char line[MAX_LINE];
while(1){
fgets(line,MAX_LINE,stdin);
for(ri = strlen(line)-2;ri>=0;i--)
putchar(line[ri]);
putchar('\n');
}
//toka
strlen とか使えばいいのではないかしら。
>>983 すみません。getcharつかうのが前提なんです。(・∀・;)
>>984 なら、改行コード('\n')のときは i++ しないってので、どぉ?
while(j=getchar()){ if(j==EOF)break; else if(j=='\n')continuel i++; } //違ったらごめん
l → ;
>>982 エラー: 'i' が未定義です。
警告: MAX_LINE より MAX_CHARS のほうがより良いと思います。
警告: プログラムが終了できない可能性があります。EOF を入力したら
ちゃんと終了するように作りましょう。
#define MAX_LINE 2000 int ri; char line[MAX_LINE]; while(fgets(line,MAX_LINE,stdin) > 0){ for(ri = strlen(line)-2;ri>=0;ri--) putchar(line[ri]); putchar('\n'); } //tekito desuga dozo
>>986 それでいけました。ありがとです。ヽ( ´ー`)ノ
continueてのは初めて聞きましたよ。
>>973 #include <stdio.h>
rev_put(ch)
{
if (ch != '\n') {
rev_put(getchar());
putchar(ch);
}
}
main()
{
rev_put(getchar());
}
mov cx,200 hoge: mov ah,07h int 21h push loop hoge mov cx,200 hogehoge: pop dl mov ah,02h int 21h loop hogehoge あってる?
>push
push al ね。
なにがやりたいのかわからん
1000!!!!
1000!!!! !
ほいしょ。 せん。
はいはい
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。