ぼるじょあがC/C++の宿題を片づけますYO! 31代目
1 :
ぼるじょあ ◆yBEncckFOU :
04/09/13 20:41:18 (・3・)エェー 久しぶりに戻ってきたC++房のぼるじょあですYO!
わからない宿題を片づけますYO!
【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
問題文などの省きはやめ、全文を書きましょう。
・使用する言語(C/C++)や環境(CUI/ANSIとか
GUI/Windows32bitAPI など)は必ず書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか
くわしく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html 【歴代スレは
>>2-13 】
2 :
デフォルトの名無しさん :04/09/13 20:42:39
3 :
デフォルトの名無しさん :04/09/13 20:43:12
4 :
デフォルトの名無しさん :04/09/13 20:52:27
6 :
デフォルトの名無しさん :04/09/13 22:05:11
(;3;)エェー
9 :
デフォルトの名無しさん :04/09/13 23:53:21
11 :
デフォルトの名無しさん :04/09/14 02:13:50
12 :
デフォルトの名無しさん :04/09/14 02:16:25
13 :
デフォルトの名無しさん :04/09/14 04:58:46
ああんもうぼるじょあさんかわいい
14 :
デフォルトの名無しさん :04/09/14 19:53:19
15 :
デフォルトの名無しさん :04/09/15 00:12:33
とっとと宿題もってこいや
ネタスレだしな
ここは静かなインターネッツですね。
18 :
デフォルトの名無しさん :04/09/15 00:37:39
あーもう前スレで1000とりそこねたー
19 :
デフォルトの名無しさん :04/09/15 00:47:14
#include<stdio.h> #include<time.h> #include<stdlib.h> int OPPAI_ERO(int b) { int SEX 11072; srad(time(NULL)); while(1){ b=rand()%20000+1; if(SEX==b){ printf("めっちゃエロス\n"); break; } } return 0; }
・・・ここはネタスレという事に決定?
本スレにしようよ。 ネタはお控え。
22 :
デフォルトの名無しさん :04/09/15 01:32:24
・クイックソートを高速化する場合、部分数列の長さが10から20程度以下のときは挿入方を併用するとよいことが指摘されている(テキストP205)。 そこで下のデータ系列を100個程度の乱数とし、部分数列の長さが10以下になったときに挿入方を併用するプログラムをかきなさい なにをいってるのかサパーリ
>>22 何故ネタスレにしたがるかな
スレタイ気に入らなかったら自分で立てろよ
24 :
デフォルトの名無しさん :04/09/15 01:35:15
26 :
デフォルトの名無しさん :04/09/15 01:38:26
>>22 クイックソートは配列を並べ替えてから分割し、その分割された配列を並べ替えて分割し・・・と再帰的に繰り返してソートする。
で、その分割された配列の大きさがある程度小さくなったら(ここでは10以下)クイックソートではなく挿入ソートを使う。
ということ。
27 :
デフォルトの名無しさん :04/09/15 01:39:33
>>25 だから誤爆か?と聞いたんだよ。
誤爆じゃないみたいだな。
>>22 のどこがネタだよ。
ネタだな
>>27 オレのテキストP205にはそんな事書いてない
大体何のテキストだよ。どこがC/C++だ?無意味に上げまくるお前もネタか
30 :
デフォルトの名無しさん :04/09/15 01:45:42
>>29 > どこがC/C++だ?
あ、なるほど。
でもスレ違いなだけでネタかどうかわからないよ。
ちなみにsageは嫌いなんで。
みなさん冷たい・・・
>>31 おいコラ
レスあるのに冷たいだと?この野郎
50回ほど氏んでこい
・・・ダメだこりゃ
35 :
デフォルトの名無しさん :04/09/15 02:09:10
すんませ〜ん。ちょっとお願いなんですが、
http://www1.kcn.ne.jp/~robe/cpphtml/index.html ココのサイトのソースを読んでもらえませんか?
KMP法についてなんですけど、ちゃんと動作しなんですよ。
エラーはでなくて、問題なく動くことは動くんですけど、配列[1]目以降を検索対象にすると、
検索が出来なくなるんですよ。
で、間違っているのなら、その正しいソースを教えて頂きのです。
それが無理なら、KMPについてわかりやすく解説しているサイトを教えて頂きたいです。
ちなみに、他のスレに行ったら、宿題は取り扱っていないと言われ、ココにきました。
よろしくお願いします
C++教室とやらの尻拭いまでするのもいかがなものかと思うよな
38 :
デフォルトの名無しさん :04/09/15 02:16:57
>>36 それもしようかと、思ったんですが、
前にメールしたら返ってこなかったんですよね。
なので、お願いできませんか??
>>38 著者も相手にしたくない人を誰が相手にするの?wwww
40 :
デフォルトの名無しさん :04/09/15 02:22:48
<<39 プゲラ
41 :
デフォルトの名無しさん :04/09/15 02:22:58
宿題で無く申し訳ないですが、 良ければ教えていただけないでしょうか? 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。 というようなメッセージがビルドを行うとデバックメッセージに表示されます。 このシンボルが読み込まれていません。という表記がいまいち掴めません。 メッセージは無視すればよいのでしょうか? 解決する方法がありましたら教えて頂ければ幸いです。 失礼します。
すみません。
44 :
デフォルトの名無しさん :04/09/15 02:26:55
>>39 あなたには人に教える事が好きでココに来てるんじゃないんですね。
なら、あなたはココにいる必要はないと思います。
それとも、あなたにはわからない事がない天才さんですか?
>>44 あなたにはわからない事がない天才さんですか?
>>44 いくら宿題スレでも開き直りの馬鹿は要りません。出て行け(゚∀゚)アヒャヒャヒャヒャ
>>44 ここはぼるじょあが宿題を片付けるスレだからな
ぼるじょあ以外は回答する権利無いんだよ
基本式 Y=((x/5)+f*x)*U/x Uを0から10まで0.1ずつ変化させて さらにfを0〜100000まで変化させてYの値が最高値になるfであるfmaxを見つける 結果は U Zの最高値 Zが最高値になったときのf 0 ********* ********* 0.1 ********* ********* 0.2 ********* ********* みたいなかんじで出力します この問題をどなたかよろしくお願いします。
>結果は >U Zの最高値 Zが最高値になったときのf >0 ********* ********* >0.1 ********* ********* >0.2 ********* ********* 訂正です 半角スペースは2つならべるときえるのか。
>>48 手始めに、Zの計算式を教えてもらおうか。
ぐお >結果は >U Yの最高値 Yが最高値になったときのf >0 ********* ********* >0.1 ********* ********* >0.2 ********* ********* こうでした・・・すみません。
>>22 /* 挿入法 */
void insertion_sort(int* first, int* last)
{
ptrdiff_t length = last - first;
for(ptrdiff_t i = 1; i < length; ++i)
{
int temp = *(first + i);
int j = i - 1;
for(; j >= 0 && temp < *(first + j); --j)
*(first + j + 1) = *(first + j);
*(first + j + 1) = temp;
}
}
(続)
こんだけ書き間違いがあるってことは2chに投稿してるのをばれたくないのかな?
ぐおお すみません。 x=2*fです。
(
>>53 の続き)
次にinsertion_sortを使って
static const int insertion_switch = 10;
/* クイックソート */
void quick_sort(int* first, int* last)
{
ptrdiff_t length = last - first;
int m = *(first + length / 2);
int* left = first, * right = last - 1;
for (; ; )
{
if (length <= 1)
return;
if (length <= insertion_switch)
{
insertion_sort(first, last);
return;
}
while (*left < m) ++left;
while (*right > m) --right;
if (right <= left) break;
int temp = *left; *left = *right; *right = temp;
}
quick_sort(first, left);
quick_sort(right, last);
}
あとはint a[100];に対してquick_sort(a, a + 100);とすればいい。
最高値をだすプログラムが課題なんですが 基本式とかは自分で考えたのでちょっとまちがいおおかったです。ごめんなさい。
58 :
デフォルトの名無しさん :04/09/15 03:07:55
>>55 全部まとめて書き直せ馬鹿
>>48 あとはぼるじょあが出てくるまで待つといい
さすがにこの程度ならできるだろう
もうネタばっかだな
間違いが多かったのでので書き直しました。 基本式 x=2*f Y=((x/5)+f*x)*U/x Uを0から10まで0.1ずつ変化させて さらにfを0〜100000まで変化させてYの値が最高値になるfであるfmaxを見つけます 結果は U Yの最高値 Yが最高値になったときのf 0 ********* ********* 0.1 ********* ********* 0.2 ********* ********* みたいなかんじで出力します この問題をよろしくお願いします。
基本式がY = (f + 0.2) * Uとなるけれどもそれでいいのか?
はいよろしくお願いします。
64 :
デフォルトの名無しさん :04/09/15 03:16:22
#include<stdio.h> #include<math.h> #include<stdlib.h> int main(void) { double U,f; double Y_max=0,tmp,Y; double f_max; printf("U\tYの最高値\tYが最高値になったときのf\n"); for(U=0;U<=10;U=U+0.1){ for(f=0;f<=100000;f++){ Y=(1/5+f)*U; if(Y_max<Y){ tmp=Y;Y=Y_max;Y_max=tmp; f_max=f; } } printf("%lf\t%lf\t%lf\n",U,Y_max,f_max); Y_max=0;f_max=0; } return 0; }
ありがとうございました 助かりました。
#include<math.h> #include<stdlib.h> はけずっていいよ 流用したのがばればれだなw
この問題は式が Y=(1/5+f)*U; になってるから結果がつまらなすぎ
了解です〜 どうもありがとう。
70 :
デフォルトの名無しさん :04/09/15 03:41:53
電気回路の問題なんですが i=虚数 i*i=-1 R=1,L=0.001,C=0.0001 PI=円周率 基本式 w=2*PI*f s=i*w Z1=R+s*L Z2=1/(s*C) Z=(Z1*Z2)/(Z1+Z2) で周波数を0〜100000まで変化させてZの絶対値を求める。 結果は周波数(一列目)Zの絶対値(2列目)というふうに出力する。 この仕様をみたしたプログラムをCで書くという問題です。 よろしくお願いします。
やっと宿題おわりました。 いろいろありがとうございました。
#include <iostream> #include <complex> #include <iomanip> const double PI = 3.141592653589793238462643; typedef std::complex<double> Cd; int main() { double R = 1.; double L = 0.001; double C = 0.0001; for (int fi = 1; fi <= 100000; fi++) { double f = fi; double w = 2. * PI * f; Cd s = Cd(0, 1) * w; Cd Z1 = R + s * L; Cd Z2 = 1. / (s * C); Cd Z = (Z1 * Z2) / (Z1 + Z2); std::cout << std::setw(10) << fi << " " << std::setw(16) << std::scientific << std::setprecision(10) << std::abs(Z) << std::endl; } }
>>70 面倒くさいからC++で書いちゃった。ゴメソ。
要するに複素数の四則演算をCで書けばいいんだ罠。
struct Complex { double re, im; }; struct Complex cmpadd(const struct Complex a, const struct Complex b); struct Complex cmpsub(const struct Complex a, const struct Complex b); struct Complex cmpmul(const struct Complex a, const struct Complex b); struct Complex cmpdiv(const struct Complex a, const struct Complex b); struct Complex cmpadd(const struct Complex a, const struct Complex b) { struct Complex t; t.re = a.re + b.re; t.im = a.im + b.im; return t; } struct Complex cmpsub(const struct Complex a, const struct Complex b) { struct Complex t; t.re = a.re - b.re; t.im = a.im - b.im; return t; }
struct Complex cmpmul(const struct Complex a, const struct Complex b)
{
struct Complex t;
t.re = a.re * b.re - a.im * b.im;
t.im = a.re * b.im + a.im * b.re;
return t;
}
struct Complex cmpdiv(const struct Complex a, const struct Complex b)
{
struct Complex t;
t.re = (a.re * b.re + a.im * b.im) / (b.re * b.re + b.im * b.im);
t.im = -(a.re * b.im - b.re * a.im) / (b.re * b.re + b.im * b.im);
return t;
}
これで勘弁してくれ。後は
>>72 の四則演算をこれで置き換えればよいはず。
ところでf==0の時はエラーが出るので>72はf==1からにしてあるよ。
ありがとうございました。 とても助かりました。
すみません、ここで質問するべきものなのかどうかもわからずに 書き込みをしてるのですが、お相手お願いします。 今日いろいろなサイト回って調べたのですがどうしてもわからなかったので ここで質問させてもらいます。 dllファイルの内容を変えたい(編集したい)のですが、 可能な事なのでしょうか? 知っている方にはくだらない質問だと思うのですが、 回答のほうよろしくおねがいします。
>>77 無理に近い。
逆アセンブラを使えば確かに中身を編集できなくもないが。
リソースだけならWin32APIの中にそんなのがあった気もする。
どこぞのサイトからDLしてきたdllで、
元のファイル(dllになる前の何か?)もありません。
で、そのdllの中からいらないソース(?)を削り
他のソースをまた使用したいのです。
>>78 様のおっしゃってる事がなんとなくでしか理解できてないのですが、
がんばって探してきます。
詳しいやり方がわかる方がいましたらお教えください。
よろしくお願いします。
78の言ってる事が分からないようじゃまず無理 ソースが公開されてないのなら、位置から互換dllを作る方が楽だと思うよ もちろん規模によるけど
そもそもどんな宿題だか。 サイトで配布しているものなら配布元に問い合わせればいいじゃん。
なんだよ31代目は麻衣子かお姉さま復活じゃなかったのかよ! くそうぼるじょあめ!
Cトランスレータ通すんだ!
85 :
リツコ :04/09/15 16:15:29
虚数空間にシンジくんが入ってしまったんですけどどうすればいいですか?
86 :
デフォルトの名無しさん :04/09/15 16:38:39
愛をかければ実空間に現れますよ
本スレ汚すナヨ
本スレと認めない人が多いから仕方が無い
まあ
>>1 は氏ねという事だ
89 :
デフォルトの名無しさん :04/09/15 16:45:18
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| |
>>88 / ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
↑本スレってどこにあるの?
この!くまめ邪魔しおって!
92 :
デフォルトの名無しさん :04/09/15 17:27:48
たまにはこんな状態の本すれがあってもいいんじゃねー
こんなネタと煽りの多いスレがいいのかよ 馬鹿じゃないの?
96 :
デフォルトの名無しさん :04/09/15 18:19:51
97 :
リツコ :04/09/15 18:49:02
シンジくんの服しか見つからなかったんですけど、どうしたらいいのでしょうか?
>>94 歴代スレでも大概50〜150位までは荒れぎみになる。でその後何事もないように事が進む。
このスレもいつもどーりな感じ。
>>35 - while(pat[i] != 0 && src[i] != 0)
+ while(pat[j] != 0 && src[i] != 0)
100 :
デフォルトの名無しさん :04/09/15 19:32:25
質問です。 「入力端子が10個あって、それぞれの入力値(任意)に全て異なる 重みを掛けたものの総和を出力するプログラム」 をVisualC++6.0を使って作りたいのですが、うまくいかなくて困って ます。配列を使って作りたいのですがうまくいきません。 #include <stdio.h> void main(void) { static int x[10] = {2, 4, 3, 7, 9, 6, 1, 8, 5, 2}; static float w[10] = {0.2, 0.5, 0.8, 0.1, 0.6, 0.9, 0.7, 0.3, 0.4, 0.2}; int i,sum; sum = 0; for(i=0; i<10; i++) sum = x[i] * w[i]; printf("合計=%d\n",sum); } 自分で考えたプログラムですが、合計=0となって出力されてしまい ます。訂正箇所を教えていただけないでしょうか。お願いします。
>>100 sum += x[i] * w[i];
sumはもっと大きい変数のほうがいいぞ
というか小数点から切れるので誤差なんてもんじゃなくなるよな
>>100 sum = sum + x[i] * w[i];
にしないと加算されないよ。
NNの勉強につながる課題かな?
op=と書けるときはop=と書きましょう
105 :
デフォルトの名無しさん :04/09/15 19:46:55
sumがint型だからってことじゃないの?
>>100 sum を float型にでもしないと小数部が計算されない。
また、型を変更した場合は %d ではなく %f ね。
FFTをCで書けって脅されました。 書けないと明日には頃されるかもしれません。
Aドライブのファイル名を読み取って、拡張子が.txtの ファイルのファイル名だけ表示するプログラムお願いします。
>>111 system("dir A:\*.txt");
>>111 関数
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
int main()
{
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile("A:\\*.TXT", &fd);
do
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
_putts("%s\n", fd.cFileName);
while(FindNextFile(hFind, &fd));
FindClose(hFind);
return 0;
}
テキストファイル(a.txtとします)が以下のようになっています。 アドレス:データ 200 = 23, 201 = 24, 202 = 25, 203 = 26, 以下同じような感じで続く。 このテキストファイルを読み取って、使いやすいように 配列なりに格納したいんですがどういうやり方がいいでしょうか。
>>115 アドレスは200〜というのは決まっているのか
アドレスは絶対に1づつ増えてゆくのか
アドレスの飛び、抜け、重複は無いのか
fscanf
>>114 書き忘れてましたが残念ながら
#include <windows.h> とか#include <tchar.h> が使えない環境です。
言語はCです
・後になって問題につけたしをするのはやめましょう。 解いてもらっている方に失礼になってしまいます。
環境を言え、それが嫌なら総当たりでファイルが存在するか試せ
>>116 手元にファイルがないんで確認できませんが、
200からじゃないにしてもある固定値から始まり、
アドレスは1づつえ、とびや抜け、重複はありません。
言語はCです。
つえ
アドレスは1づつえ アドレスは1つづつふえ 訂正します。
126 :
デフォルトの名無しさん :04/09/15 23:10:32
次のプログラムを使って、test.datに書かれた 浮動小数点データを読み込もうとしたのですが、 run time errorが出てしまいます。 どこが間違いか分かりません。教えてください。。 #include <stdio.h> #include <stdlib.h> main() { int j; double u[10], t[10]; FILE *fp=fopen("test.dat","r"); for(j=0;j<10;j++) fscanf(fp,"%le%le",&t[j],&u[j]); fclose(fp); } test.datの中身 0.0 0.2 0.5 0.5 1.0 0.8 ... と10個並んでいます。
>>127 データ読み込み部分をはずして、
ファイルを開いて閉じるだけの作業は
実行できます。
129 :
デフォルトの名無しさん :04/09/15 23:20:57
ちなみにエラー内容は runtime error R6002 - floating point not loaded です。
>>128 だったら fp の戻り値を確かめたら?
>>128 ちゃんと出来てますよー。。
んで、検索してたら自己解決しました。
ttp://dokudamin.dyndns.org/diary/2003/2003_06.html ここによれば、浮動小数点であることを明示しないと、
動作しない場合があるそうです。
私の場合はちゃんと宣言してるんですが、動かない。。
そんな馬鹿な?と思い、データを読み込みを
for(j=0;j<1;j++){
u[j] = 0.0; t[j] = 0.0;
fscanf(fp,"%le%le",&t[j],&u[j]);
}
のように書いてあげたら、動きました。
学校のパソコンではちゃんと動いてたのに。。
はぁ
>>131 どうでもいいけど、そのページの日記に書かれている
>マイクロソフトのバカに教えてやらなければならないそうです
というのは単なる管理者の思い込み。
DWORDがどんな型であろうとそれがfloatやdoubleでない限り明示的に
キャストしなければならないのは自明。
>>134 偶然かと。
ソースかコンパイラに重大で厄介なメモリ・コード系のバグでもあるんじゃないの?
>>138 よくわからんが、float に対してなんで le なんだろ?
>>139 そのfloatは、どれの事を指しているのか、おしえてくれませんか?
141 :
デフォルトの名無しさん :04/09/16 02:01:16
144 :
100 :04/09/16 03:12:43
皆さんのお力で解決しました。ありがとう!
/::^'´::::::::::::i、::::::::::::::::::::::::::::\ ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶 /::::::::::::::/!i::/|/ ! ヾ リハ:|;!、:::::::l /´7::::::::::〃|!/_,,、 ''"゛_^`''`‐ly:::ト /|;ィ:::::N,、‐'゛_,,.\ ´''""'ヽ !;K ! |ハト〈 ,r''"゛ , リイ)| `y't ヽ' // ! ぃ、 、;:==ヲ 〃 そんなのどうでもいいよ `'' へ、 ` ‐ '゜ .イ `i;、 / l 〉 ` ‐ ´ l`ヽ
146 :
70 :04/09/16 11:32:18
こんにちわ、この前はお世話になりました。 あのあと応用問題がでてまた詰まってしまいました。 よろしければお助けください。 電気回路の問題で i=虚数 i*i=-1 R=1,L=0.001,C=0.0001 PI=円周率 基本式 w=2*PI*f s=i*w Z1=R+s*L Z2=1/(s*C) Z=(Z1*Z2)/(Z1+Z2) で周波数を0〜100000まで変化させてそれぞれのZの絶対値を求める。 そしてその中でZの絶対値が一番大きいfを求める。 結果はZの絶対値、そのときのfという風に出力する。 という問題です。よろしくお願いします。
詰まったというのなら詰まる前までのソースを提示して見てくださいね
148 :
70 :04/09/16 12:23:03
502.145とでました。
ごめんなさい途中で切れてました 上に #include<stdio.h> #include<math.h> #include<stdlib.h> #include <iostream> #include <complex> ってつけたんですが2つにわければよかった
>>70 あのね、どうして周波数が1500刻みでしかピックアップしないの?
それだと、fが0,1500,3000,…,99000のときの|Z|しか比較できないじゃないか。
もし、0〜1500の間に最大値があったらどうする?
(まぁ実際計算したらf=502.145のところに最大値があるのだけど。)
最大値を求めるアルゴリズムをもう一度考え直して見たら?
>あのね、どうして周波数が1500刻みでしかピックアップしないの? >それだと、fが0,1500,3000,…,99000のときの|Z|しか比較できないじゃないか。 >もし、0〜1500の間に最大値があったらどうする? >(まぁ実際計算したらf=502.145のところに最大値があるのだけど。) プログラミングの課題で最大値を求めるアルゴリズムが問題なので 正しい答えが目的ではないのでとりあえず1500きざみで最大になるのを さがそうとしました。 でももっとこまかいほうがいいっすね・・・ >最大値を求めるアルゴリズムをもう一度考え直して見たら? やっぱ最大値をのアルゴリズムがちがうっすか・・・ どうすればいいんでしょうか・・・?
>>153 |Z|の極大は0<f<100000において一つだから、
アルゴリズムの一例を挙げると、
g(f):=|Z|として、
ランダムに2つのf1,f2を用意し、その2点の中間点f3の値g(f3)を求め、
もしg(f3)がg(f3),g(f1),g(f2)の中で最大であれば、
g(f1),g(f2),g(f3)で最も大きい2点のfで同様の操作をする。
もし、g(f3)が最大でなければ、一つのランダムなfを新たに用意し、
g(f1),g(f2),g(f3)の中で最大の値であるfと、ランダムに用意したfで同様の
操作をする。
これらを十分な回数行えば最大値が求まる。
むずかしいっすねがんばって理解します。
>>154 マジか!
だとすると俺の組んだ姿勢制御プログラムを積んだロケットが危ない!
またH2Aが落ちるのかw
申し訳ないね。
ボケたこといってしまった。
別のアルゴリズムで実装しといたよ。(
>>158 )
おおどうもです。 なんかエラーがでてしまいました。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland kadai3333.cpp: エラー E2268 kadai3333.cpp 40: 未定義の関数 'exit' を呼び出した(関数 main(int,char * *) ) *** 1 errors in Compile ***
>>160 #include <stdlib.h>
も呼び出さないと。
なんかコンパイルもできてコマンドプロンプトもひらいたんですが rerere.exe アプリケーションエラー 例外unknown software exxeption(0xc000008e)がアプリケーションの 0x0040125e で発生しました。 プログラムを終了するには[OK]をクリックしてください プログラムをデバッグするには[キャンセル]をクリックしてください OK キャンセル というエラーがでてしまいました。(rerereはファイルにつけた名前です)
なんでだろう。
問題1 nの階乗を求めるプログラムを再帰関数を利用して作りなさい。 問題2 2つの整数のべき乗を求めるプログラムを作成しなさい。ただし、べき乗を求める部分を自作関数で作成しなさい。 この問題、お願いします。
階乗はやっぱコンパイルタイムでしょ template <int N> struct Factorial{ enum{ value = N * Factorial<N-1>::value }; }; template <> struct Factorial<0>{ enum{ value = 1 }; }; int main() { std::cout << Factorial<6>::value << std::endl; return 0; }
じゃ、べき乗もコンパイルタイムで。 template <int N> struct Power { int value; Power(int m) : value(m * Power<N - 1>(m).value) {} }; template <> struct Power<0> { int value; Power(int m) : value(1) {} }; int main() { std::cout << Power<6>(5).value << std::endl; return 0; }
No2 高速化は考慮してないから int bekijou(int a, int x) { int n, i = 1; n = a; while(i<=x){ a = a * n; i++; } return a; }
べき乗も再帰関数で。 unsigned Power(unsigned m, unsigned n) { return n ? m * Power(m, n - 1) : 1; } int main() { std::cout << Power(5, 6) << std::endl; return 0; }
べき乗忘れてた template <int N, int POW> struct Power{ enum{ value = N * Power<N, POW - 1>::value }; }; template <int N> struct Power<N, 0>{ enum{ value = 1 }; }; int main() { std::cout << Power<2, 10>::value << std::endl;  return 0; }
170 :
デフォルトの名無しさん :04/09/16 21:58:38
すいません、お願いします。 データを入力してください(100で終了) 001=80 002=30 003=20 004=50 005=100 件数5件 最高は001で80 最低は003で20 平均は45
172 :
デフォルトの名無しさん :04/09/16 22:27:39
C言語です。 エラストテネスのふるいを使って1000要素の配列を使って1から999までの間にある素数を見つけて表示するプログラムを作成せよ、とのことです。 #include <stdio.h> int main(void) { int i , n ; int kazu[1000] ; for ( i=1 ; i <= 1000 ; i++ ){ kazu[i] == 1 ; } この後がわかりません。教えてエロい人。
>>170 のだと件数は4件ですね。
001...005ってのはでprintfの出力
=80がscanfで入力
こういう説明で宜しいでしょうか。
#include <stdio.h> #include <stdlib.h> int main() { int *pData = NULL, i = 0, LargePos = -1, SmallPos = 0, Sum = 0; puts("データを入力してください(100以上で終了)"); for (;;) { char Buf[64]; pData = realloc(pData, sizeof (int) * (i + 1)); if (!pData) return 1; printf("%d=", i); fgets(Buf, sizeof Buf, stdin); pData[i] = atoi(Buf); if (pData[i] >= 100) break; if (LargePos == -1) LargePos = i; else if (pData[i] > pData[LargePos]) LargePos = i; if (SmallPos == -1) SmallPos = i; else if (pData[i] < pData[SmallPos]) SmallPos = i; Sum += pData[i]; i++; } (続く)
//改行制限ではみ出た部分。 printf("件数%d件\n", i); printf("最高は%dで%d\n", LargePos, pData[LargePos]); printf("最低は%dで%d\n", SmallPos, pData[SmallPos]); printf("平均は%d\n", Sum / i); // printf("平均は%f\n", (double)Sum / i); 小数点以下も表示したいならこっち。 free(pData); return 0; }
>>174-175 stdio.h以外の宣言は初めてです。
このまま出すと、明らかにバレそうなので
このプログラムの流れを見て勉強しなおします。
本当に有難うございます、精進します。
>>170 回その2
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(){
int i,indata;
int total = 0;
int min,mini,max,maxi;
max = INT_MIN;min = INT_MAX;
maxi = mini = 0;
for(i = 1; indata != 100; i++)
{printf("%03d=",i);
scanf("%d",&indata);
if(indata != 100)
{total += indata;
if(max < indata)
{max = indata;maxi = i;}
if(min > indata)
{min = indata;mini = i;}}}
i--;
printf("%s%d%s\n","件数",i,"件");
printf("%s%03d%s%d\n","最高は",maxi,"で",max);
printf("%s%03d%s%d\n","最低は",mini,"で",min);
printf("%s%.0f\n","平均は",(double)total/(i-1));
return 0;}
>> 172 #include <stdio.h> #include <math.h> #define SIZE 1000 int main(void) { int i, j; int kazu[SIZE]; for (i = 2; i < SIZE; i++) { kazu[i] = 1; } for (i = 2; i < SIZE; i++) { if (kazu[i]) { for (j = 2; i * j < SIZE; j++) { kazu[i * j] = 0; } } } for (i = 2; i < SIZE; i++) { if (kazu[i]) { printf("%d ", i); } } printf("\n"); return 0; }
>>178 #include <math.h>
は要りません.削ってください.
180 :
デフォルトの名無しさん :04/09/16 23:30:25
>>178 13行目と17行目の
if ( kazu[i] )
は if ( kazu[i] = 1 ) にしなくて良いのですか?
181 :
デフォルトの名無しさん :04/09/16 23:33:10
183 :
180 :04/09/16 23:37:45
失礼 if ( kazu[i] = 1 ) ではなくて if ( kazu[i] == 1 ) です。
184 :
デフォルトの名無しさん :04/09/16 23:42:13
>>183 if(kazu[i])はif(kazu[i]!=0)と同じ。
kazu[i]の値は0か1しかないからif(kazu[i])でいい。
185 :
デフォルトの名無しさん :04/09/16 23:42:56
187 :
デフォルトの名無しさん :04/09/17 00:01:50
>>185 C/C++ を修めるなら、このような記法は読めて当然でないといけない。
でも自分で書くときは(bool を除いて)比較の省略はオススメできない。
ちゃんと != 0まで書いたほうがわかりやすい。
つーか、そもそもbool(Cならbool的記法)で書くべきところだろ。
if(kazu[i])とif(kazu[i]!=0)では 判断の数が違います。
>>191 しかし、多くのコンパイラでは最適化されて変わらないかもしれない
i=9+2とi=5+4+2では計算の回数が違います。 と言っているようなものだな。 くだらない。
if( x ) を if( x != 0 ) と書くのは逆に見にくくて鬱陶しいと個人的に思うのですが、そんな漏れは少数派でしょうか?
whileの中とかな。
>>194 そりゃおめぇ、括弧の内側空けるから鬱陶しいんだよ。
つーか、ifの後こそ空けろや。
マシンAでa=4, b=5 a+bの計算をさせ、その答えをマシンBで受けc+9を計算せよ。 ここでc=1とする。また各2台のマシンは固定IPである。 よろしくおねがいします。ネットワークプログラミング分かりません。
ネットワークは環境依存だからOSは?
すいません、べき乗ですけどPower(double x,double y)です 再帰じゃ答えが違ってしまうようです x=Power(5.0,1/2); でxに2.2360679774997896964091736687313…が入るようにしたいんです
>>202 =164
>問題2
>2つの整数のべき乗を求めるプログラムを作成しなさい。ただし、べき乗を求める部分を自作関数で作成しなさい。
問題の意味をちゃんと書いてくれ。「2つの整数のべき乗を求める」と書いているからこそ2整数n, mが入力されたら
nのm乗 を出力すればいい、と思うんじゃないのか?
204 :
デフォルトの名無しさん :04/09/17 19:54:52
質問です。 #include <stdio.h> void main(void) { static float x[5][5] = {{2, 4, 3, 7, 9}, {4, 3, 7, 9, 6}, {6, 5, 9, 4, 1}, {8, 2, 6, 3, 7}, {7, 1, 3, 5, 9}}; static float w[5][5] = {{0.2, 0.5, 0.8, 0.1, 0.6}, {0.3, 0.7, 0.8, 0.1, 0.2}, {0.9, 0.3, 0.5, 0.7, 0.4}, {0.7, 0.1, 0.3, 0.5, 0.9}, {0.4, 0.2, 0.5, 0.1, 0.7}}; int i,j; float sum; for(i=0; i<5; i++){ sum = 0; for(j=0; j<5; j++){ sum = sum + x[i][j] * w[i][j]; } printf("合計=%f\n",sum); } printf("合計=%f\n",sum); } このプログラムだと、各行の計算結果のみ出力され、5行全て加算した結果 が出力されません。5行とも加算させるにはどこを訂正すればよいのか 教えてください。お願いします。
>>204 float sumsum;
を宣言して、
for(sumsum=0,j=0; j<5; j++){
の部分ていうふうにして、
はじめの
sumsum+=sum;
printf("合計=%f\n",sum);
にして、
最後の
printf("合計=%f\n",sumsum);
にする。
207 :
204 :04/09/18 01:51:23
#include <stdio.h> void main(void) { static float x[5][5] = {{2, 4, 3, 7, 9}, {4, 3, 7, 9, 6}, {6, 5, 9, 4, 1}, {8, 2, 6, 3, 7}, {7, 1, 3, 5, 9}}; static float w[5][5] = {{0.2, 0.5, 0.8, 0.1, 0.6}, {0.3, 0.7, 0.8, 0.1, 0.2}, {0.9, 0.3, 0.5, 0.7, 0.4}, {0.7, 0.1, 0.3, 0.5, 0.9}, {0.4, 0.2, 0.5, 0.1, 0.7}}; int i,j; float sum,sumsum; for(i=0; i<5; i++){ sum = 0; sumsum = 0; for(j=0; j<5; j++){ sum = sum + x[i][j] * w[i][j]; sumsum += sum; } printf("合計=%f\n",sum); } printf("合計=%f\n",sumsum); } すいません、こういうことでしょうか?まだ不具合が…。
何故 sum が j ループの外で初期化されているのか分かるか? そしたら sumsum の初期化(と +=sum の処理)をどこで行えばいいか分かるはずだ。
210 :
204 :04/09/18 02:58:20
久しぶりにきたけど まだ空白厨いるんだね。
212 :
デフォルトの名無しさん :04/09/18 14:28:36
昨日からVC++勉強し始めたんですが、
>>207 の出力がどうなればいいのか正解を教えていただけないでしょうか。
よろしくお願いします。
sumsumが毎行初期化されるのでsumsumが最初だけ初期化されるようにする
コピペして実行した結果が答えだよ
結果書くのめんどくさい書いてくれたら正解かどうか言う
#include <stdio.h> void main(void) { static float x[5][5] = {{2, 4, 3, 7, 9}, {4, 3, 7, 9, 6}, {6, 5, 9, 4, 1}, {8, 2, 6, 3, 7}, {7, 1, 3, 5, 9}}; static float w[5][5] = {{0.2, 0.5, 0.8, 0.1, 0.6}, {0.3, 0.7, 0.8, 0.1, 0.2}, {0.9, 0.3, 0.5, 0.7, 0.4}, {0.7, 0.1, 0.3, 0.5, 0.9}, {0.4, 0.2, 0.5, 0.1, 0.7}}; int i,j; float sum,sumsum; sumsum=0; for(i=0; i<5; i++){ sum=0; for(j=0; j<5; j++){ sum = sum + x[i][j] * w[i][j]; } sumsum += sum; printf("合計=%f\n",sum); } printf("合計=%f\n",sumsum); } 212です。sumsumは、合計=63.200001になりました。 合ってますでしょうか?よろしくお願いします。
それでもいいけどsumsumが4回もでるからprintfも出しちゃったほうがいいんじゃない?
sumsumは4回でないと思うよ
あ、ほんとだごめん正解です。
sumsumも足して、表示、足して、表示 させるんですね。 解決できました。 ありがとうございました。
あ、書いてるときにスレ伸びてました。 正解だったということ了解しました。 これからも、ちょっとずつ通わせていただきます。 では。
222 :
デフォルトの名無しさん :04/09/18 22:48:55
初期化処理(環境設定ファイル読み込み処理) 環境設定処理を読み込み、環境設定情報を環境設定情報管理テーブルに 保持するとはどーゆーことですか? プログラムを作る実習で初期化設定のモジュール作成 の担当になったのですが、何を作ればいいのかわからず、 困っています。
>>222 あの説明でわからなきゃどこで聞いてもいっしょだろ
>>222 3ヶ所渡り歩いてきたんだね。
だんだん可哀想になってきたよ
225 :
デフォルトの名無しさん :04/09/18 22:53:08
みなさんよくご存知で… どーもすいません。
環境設定ファイルってiniファイルのことその辺のやつみれ 管理テーブルってのはその情報を瞬時に利用できるようなもの あとえばwidthっていう値がほしいときに簡単に取得できる仕組みを作れってこった まあがんがれ
227 :
デフォルトの名無しさん :04/09/18 22:55:36
二週間C言語の勉強を講義で習って、 実習で実際のプログラムを作るってそんなの まったくの未経験のやつができるもんなのですか?
229 :
デフォルトの名無しさん :04/09/18 22:59:30
まぁやる気しだいでできるやつはできますよね…
>>227 できると思う。
学生が大学の講義で普通は半年でする内容だけど、
せいぜい週に1回の講義しかないわけでしょ?
15回*1〜2時間ほどしかしないわけだね。
2週間は長いねぇ。
231 :
デフォルトの名無しさん :04/09/18 23:03:24
実際はCは10日なんですが、変わらないですよね 何回読んでも仕様の意味が理解できないし、、、
何かこのスレ寒いな
少なくとも,仕様を理解できないお前さんが要約した内容では,誰も作成不可能。 >・問題はしっかりと解いてもらう方にわかりやすいように > 問題文などの省きはやめ、全文を書きましょう。
ファイルから文字列(複数行ありマルチバイト文字含み)を読み込んで それを1行づつ出力するプログラムを作りたいです 1行づつと言うのは 1行をひとくくりにして出力していくと言う意味です それは もちろんその1行づつをループなどでまわして 全体行を出力します 環境は CUIでコンパイラはgccを使います すいませんが よろしくお願いします
ちょっといきなりでは時間的に高度な内容ですね、実際の現場だったら できないと大変なさわぎなのでOJTを意識してるんでしょうね まぁ実際新卒はなんもできないですけどね
236 :
デフォルトの名無しさん :04/09/19 00:12:52
C言語って、簡単なの?
頑張れる人にとっては簡単だよ
238 :
234 :04/09/19 00:29:22
ちなみに 私はプログラムをやり始めたばかりで良く分からないで 以下のように書いたのですが コンパイルはとおったのに 実行して ファイル名をいれてみるとセグメンテーションフォルトといわれてしまいました セグメンテーションフォルトと言う意味も良く分からないです 以下のプログラムが なぜ動かないか指摘などもして頂けるとありがたいです すいませんがよろしくお願いします #include<stdio.h> #include<stdlib.h> #define STRING_SIZE 450 int main(void) { int val; int sum = 0; int cnt = 0; char FileName[30]; char string[STRING_SIZE]; FILE *fp; printf("Inpu Open FIle Name >>>"); scanf("%s", FileName); if( (fp = fopen( FileName, "r" ) ) == NULL) { printf( "%s Is Not Open File ", FileName); exit( EXIT_FAILURE); } while( fgets( string, STRING_SIZE, fp) ) { sscanf( string, "%s", &val); printf("%s",val); } fclose( fp); return EXIT_SUCCESS; }
長いと言われたので 複数行をくっつけて 読みにくくなってしまいました すいませんが よろしくお願いします
sscanf( string, "%s", &val); printf("%s",val);
>>239 sscanf( string, "%s", &val);
いらない
printf("%s", string);
一行でいいでしょ。
セグメンテーションフォルトってのは windowsでいうアプリケーションエラー 誠に申し訳ありませんっていってるやつw
| |3 ・ ) エェー ・・・ボルスレナノニ ボルジョアガイナイノハナゼダロウ・・・・・ |⊂
ぶるじょあの中の人も大変だな
>>240 ,241さん
どうも ありがとうございました
ちゃんと 動きました!!
良く考えてみると intにいれるのがおかしいですね
これは 始めリストから計算をするのを前に書いたので それを単にprintfするようにしただけだったので
良く考えなかったのが悪いようです すいません ありがとうございました
もう一度質問してしまうのですが
では 上記のようにstringからsscanfでとってprintfするようにするには どのようにかえたらいいんですかね?
始めの質問とは意図違いになってしまいますが 教えて頂けるとありがたいです
すいませんが よろしくお願いします
>>242 さ
ありがとうございます
アプリケーションエラー・・
あんまり Windowsは使ってませんし Windowsでプログラム書いたことが無いのでわかんないです・・
ようするに プログラムがおかしいので止めました みたいな感じでいいのですかねw
どうも ありがとうございました
247 :
デフォルトの名無しさん :04/09/19 00:56:32
マカー臭がする
正確には許可してないメモリにアクセスしようとして 抹殺されたってことです
>>245 あんたがやりたいことの場合,
sscanfじゃなく,strcpy, strncpy,もしかしたらstrdupも?,が模範解答。
>>234 #include <string>
#include <fstream>
#include <iostream>
int main()
{
std::cout << "input file name:" << std::flush;
std::string filename;
std::cin >> filename;
std::ifstream dat(filename.c_str());
if (dat)
{
std::string str;
while(getline(dat, str)) std::cout << str << std::endl;
return 0;
}
else
{
std::cout << "file open error!" << std::flush;
return 1;
}
}
レス遅くなってしまい申し訳ありません
私はMacユーザでもないですねw 触ったこと無いですしww
>>248 許可していないメモリ・・・ よくわからないです・・
>>249 そうですね strcpyなら そのままでいけますねぇw
後の2つは知らない関数です・・
>>250 ・・・
全く持って分かんないです…
インクルードファイルさえ何か分かんないですし 中身は全く分かんないし…
みなさん 本当にどうもありがとうございました
>>251 Cしか知らないのに何も書かなかった喪前も悪い
>>251 >許可していないメモリ・・・ よくわからないです・・
どこでも読み書きできたらセキュリティがなりたたんだろうが
>後の2つは知らない関数です・・
調べろ
>全く持って分かんないです…
>インクルードファイルさえ何か分かんないですし 中身は全く分かんないし
C++について調べろ
あれ? 久しぶりにこのスレに来たんだけど, どうやってぼるじょあになればいいんだっけ?
ぼるじょあ#ぶるじょあ で変身できるYO!
| |3 ・ ) コソーリ・・・ |⊂
258 :
ぼるじょあ ◆H6wikgcXIU :04/09/19 14:53:55
(・3・)
ヘンシンテスツ.それにしても宿題が少ない.
(・3・)エェー
| |3 ・ ) < エェー ヴィジュアルスタジオ入れたら沢山質問しに来るYO |⊂
ぼるじょあ#ぶるじょあ#ぶるじょあ#ぶるじょあ#ぶるじょあ#ぶるじょあ のように何回続けても良いYO!
#include<iostream> #include<iomanip> using namespace std; void PromptRead(int&,int&,float&); void CalcTotal(int,int,float&); void Display(int,int,float,float); const char SIGN = '$'; const char SPACE = ' '; int main () { int invNum, qNum; float uPri, tPri; PromptRead(invNum,qNum,uPri); CalcTotal(qNum,uPri,tPri); Display(invNum,qNum,uPri,tPri); return 0; }
void PromptRead(int& invNum,int& qNum,float& uPri) { cout << "Enter invoice number ==>"; cin >> invNum; cout << "Enter quantity ordered ==>"; cin >> qNum; cout << "Enter unitprice ==>"; cin >> uPri; } void CalcTotal(int qNum,int uPri,float& tPri) { tPri = qNum * uPri; } void Display(int invNum,int qNum,float uPri,float tPri) { system("cls"); cout<< "Invoice Number:" <<invNum<<endl; cout<< "Quantity Number:" <<qNum<<endl; cout<< "Unit Price:" << SIGN << setprecision(2) << fixed << uPri <<endl; cout<< "Your Total Price is"<<SPACE<<SIGN<< setprecision(2) << fixed <<tPri<<endl; } 上の続きです。 えーっと、個数と個数値を計算する単純なプログラムなのですが 自分でやってみてわからないところができたので質問させてください。 uPriかqNumに小数点入れても整数として計算されちゃいます。 どうすればいいでしょうか?
すげぇなぁ、関数じゃなくてサブルーチンだね。 CalcTotal()の引き数がintだから実数には成り得ない。
あ、簡単なところ見落としてました・・・。すいません><
宿題っていうか仕事依頼だな。
>>268 エクセルで作れよ
エクセルがなければopen officeとか
あれ? 仕事でいいんぢゃね? >宿題 勉強するのが仕事って言うであろう?
いいわけねえだよ
宿題に飢えてるので仕事でもなんでもいいだよ
いくら?
酢飯食え。ばかいくら。
反応がないのでもう一度お願いします。 テキストファイル(a:\\a.txtとします)が以下のようになっています。 ;アドレス:データ 009=0023 00a=00ff 00b=0e25 00c=3260 以下同じような感じで続く。 アドレスは16進表記で3桁です。データは16進表記で4桁です。 これを読み込んで、アドレスの示す配列の番地にデータを格納する (たとえばアドレス00cなら配列buf[12]に0x3260と格納)プログラム なんですが、お願いします。言語はCです。
>>278 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
FILE *fp;
char s[100];
char adr[4] = {0}, data[5] = {0};
int buf[1000], ia, id;
if((fp = fopen("a.txt", "r")) == NULL) exit(1);
while(fgets(s, 100, fp) != NULL){
strncpy(adr, s, 3);
strncpy(data, s + 4, 4);
sscanf(adr, "%x", &ia);
sscanf(data, "%x", &id);
buf[ia] = id;
}
return 0;
}
sscanf(s, "%x=%x", &ia, &ib); でいいだろうに。 つーか、桁数を制限するならちゃんと'='の位置を確認するべき。 それをサボるなら一旦adrやdataにコピーする必要はない。 それから、fgets()の第2パラメータはsizeof bufにしておく方が無難。 #あとでsのサイズを100以外にするときに修正漏れが起きる可能性があるから。
>>280 sscanf(s, "%x=%x", &ia, &ib);
目からうろこです。
精進いたします。
馬鹿でも回答者に回れるのが2chの神髄だしな
283 :
ぼるじょあ ◆yBEncckFOU :04/09/20 21:54:22
284 :
デフォルトの名無しさん :04/09/20 22:14:51
テトリスを作れ
M-x tetris
287 :
デフォルトの名無しさん :04/09/21 03:21:35
大学の課題でわからないので、代わりにお願いします。 課題の内容は、fstream.hのファイルの書き込み読み込みをするっていうのと、 双方向リスト構造で、クラスを使用して作れ、というだけで、特にコレを作れっていうのはありません。 で、自分としては初めにファイルが有無の判定をして、あれば、データをリストに代入していき、 なければ、そのまま次に進む。で、次はデータを入力で、char型とint型をデータを入力をするっていうのがいいです。 そのデータをファイルから代入して作ったリストの後ろに繋ぎます。次は、それらのデータをファイルに書き込みます。 これらの作業をひとつひとつ別々の関数でさせたいです。並び替えも出来たらお願いします。 自分の課題なんですが、お願いします!!
>>287 > fstream.hのファイルの書き込み読み込みをする
ヘッダファイルに書き込みするの?
> ファイルが有無の判定
ファイル「が」有無って何?
> データをリストに代入していき、
そのファイルがどういう構造をしているのか分からないと代入も
何もないんだけど?
質問は日本語で書こうね。
289 :
デフォルトの名無しさん :04/09/21 06:39:44
>>289 ファイルの中身はどういう風になっている?
292 :
289 :04/09/21 07:31:07
{ int n; ifstream Jin; ofstream Jout; Business_work* pFirst = this->pNext; Jin.open(FILE_NAME, ios::nocreate); if(Jin.is_open() == 0) n = 0; else { Jin >> n; Jin.close(); } Jout.open(FILE_NAME, ios::ate); Jout.seekp(0); Jout << n + 1 << endl; Jout.seekp(0, ios::end); for(; pFirst != this; pFirst = pFirst->pNext) { cout << "No.2" << endl; Jout << pFirst->pName << endl; Jout << pFirst->Monthly_salary << endl; Jout << pFirst->Time_salary << endl; Jout << pFirst->Service_days << endl; Jout << pFirst->Holiday_days << endl; Jout << pFirst->Time_Service << endl; } Jout.close(); return; } こんな感じで書き込みをします。pNameはchar型で、それ以外はint型でお願いします。
293 :
289 :04/09/21 07:41:19
すみません。訂正です。char型とint型のデータ全てを一つの1人と考えて、 ファイルの最初には必ず人数を入れます。で、ファイルの読み込みのときに、その人数分のデータを読み込むっていうやつです。 他に良い方法があれば、その方法でお願いします。
>>294 どう使うの?
% ./dotmaster255.exe
zsh: 実行形式エラー: ./dotmaster255.exe
298 :
デフォルトの名無しさん :04/09/22 09:00:57
大学の課題なんですが、vector<string>の指定された要素の後に 新しいstringを挿入する、というのをやるのはどうすればいいのでしょか?
>>300 イメージとしてはこんな感じ
実際にはエラー処理とかもしてね
void make_tree(Node* node,int n)
{
for(i=0;i<n;i++){
add_node(node,make_tree(make_node(),n-1));
}
}
t=6、s=-0.6、x=0.1*tでa=x+sを求めたいんだけど、 double t=6; double s=-0.6; double x=0.1*t; double a=x+s; だと、aが0にならないのは何故ですか? ちゃんとした計算結果が求まるように教えてください。
>>302 まず0.1や0.6を2進数で表現できるか紙に書いて確かめてみるといいです
>>300 start は NULLポインタ なので
mk_tree(start,S);
の前に
start = (NET*) malloc(sizeof(NET));
とか
>>303 2進数で表現できないとどうなるんですか?
306 :
デフォルトの名無しさん :04/09/22 12:57:14
っゆーか0になるy
>>302 0.1と0.6は2進表現にすると循環小数になってるから
コンピュータ内部では0.1、0.6ではなくそれらに近い数値であらわされている
だから掛けても0.6と0.1*6は一致しない
おれも0.000000になる 2進数で表現しきれない部分は、誤差となってあらわれます。
ということは、0にはできないんですね。
.00011001100110011001100110011001 : 0.1 110 110 110 110 ------------------------- .10011001 : 0.6 どこで桁を切り捨てるかによって値は変わる 0になったりならなかったり
クイックソートより早い検索ロジックを C++で考えなければならないのですが、 私には思いつきません。 教えていただけませんか?
クイックソートは検索ロジックではありません
313 :
デフォルトの名無しさん :04/09/22 15:08:50
>>311 ソートする数によってアルゴリズム換えりゃいいじゃん
>>311 ソート対象がそんな広くない整数だったら分布数えソートとか逆写像ソートとかがO(n)で済む
ソートでいいのか? 3分割クイックソートとかもよいぞ
316 :
デフォルトの名無しさん :04/09/22 16:37:14
>>311 入力に条件がなければ クイックソートが最も速いソートの一つ.
ちなみに、クイックソートより早いソートなんて 世の中に存在するんですか? 私にはあるとは思えません。
>>318 問題文はどうなってるの?
O(nlogn) より良いソートなら必ず条件が必要.
ランダムな整数型のデータが特定個集まった配列があります。 これを降順にした配列にする場合のプログラムを書きなさい。 但し、クイックソートよりも高速でなければいけません。 授業で↑の関数を作って来いと言ってましたが、 ありえないでしょう(w クイックソートは最速です。
>>314 さんが言ってる分布数えソートなら一瞬だな
分布数えソートって知らなくて調べたんですが、 maxとminが必要なんじゃないですか? それ調べてる間に、最強クイックに負けませんか?
調べてる間にっていうかそれでおわるんだけどソートが あとえば上位8ビット部分で分布数えしてあとクイックにしちゃうとかって手もある もっと複雑にしてもっと高速にすることもできる
325 :
デフォルトの名無しさん :04/09/22 18:11:54
radix sort 基数ソート で検索してみな
>>321 クイック君は早い時もあるけど、逆に遅い時もあるよ。
データの並び次第
クイックソートを並列化したら速くなりませんか?
radixソートは分布数えソートを各桁に拡張しただけじゃなかったか?
3分割クイックソートっていうのはマイナーだけどけっこう有効らしい 普通のクイックソートは大小にソートを再起的に分割していくんだけ ど、これを大小と同じ部分の3区画にするだけで比較回数が激減す るらしい
例. 12, 34, 45, 36, 64, 32 1の位に着目してソート 12, 32, 34, 64, 45, 36 10の位に着目してソート 12, 32, 34, 36, 45, 64 (3* のパターンの数は3つあるが, 1の位についてはすでにソートしてある) ↑ってのをネットで見つけたんですが、 本当に早いの?って疑問です。 ソートの比較を行う場合に 10000回ぐらい回して timeで計測するのはありですか? 実際にやってみたいんですが。
すんません。 ラディックスソートです。
数十程度だとシェルソートが早いです。 数千程度だとクイックソートが早いです。 数万程度だとラディックスが早いです。
十分な記憶容量があれば分布数えソートが最強です
ビンソートが良いであろう
337 :
デフォルトの名無しさん :04/09/22 23:22:35
こちらに移動して質問します 宿題に困っています。 お分かりの方、いらっしゃいましたら、よろしくお願いします。 1.iniファイルで指定されたフォルダにあるファイル名(例:abbccc)を取得 2.ファイル名を分解(例:a bb ccc) 3.msdeの行にadoを使ってインサートする(例:a bb cccとフィールドを分けて)
>>337 前回までの課題や授業内容に課題が依存してる。
その上,ファイル名分割のデリミタもわけわからん。
無理。
339 :
デフォルトの名無しさん :04/09/23 15:49:33
>>338 病欠していて、授業に出れませんでした。
ノート借りれる友達もいません・・・
ファイル名分割のデリミタは
iniファイル等で設定した文字数ごとに分割するです。
大変お手数ですが、よろしくお願いします。
そのまま落第しろ 以上。
うわぁ…もうなんか本当にどうしようもないって感じだな…… 落としたくなかったら教授に土下座する覚悟で突撃してみたらどうだ
>>339 もう一度落ち着いて、自分が書いた文で、どういうことをしたいのかが正確に
伝わるかどうかを客観的に見直してみてください。
Cの課題です。 1.xyz実数空間で与えられた4つの頂点で構成される三角錐の体積を求めるプログラムを作成。 2.xyz実数空間で与えられた複数の頂点の重心を求めるプログラムを線形リストを用いて作成。 お願いします。
そりは普通に数学の問題だろ
>>332 STLのsortとかは、基本的にはクイックソートなんだけど、
1. ピボットの選び方は配列の先頭・真ん中・末尾の3つの値の中央値
2. 再帰が深くなりすぎたときに挿入ソートに切り替える
3. 配列の長さが短くなったら(だいたい32〜64くらい)挿入ソートに切り替える
というロジックでやってる。
これで要素数が数十程度の場合でもシェルソートに負けることはほぼなくなるし、
最悪の場合でもO(n^2)になることはほとんどない。
>>343 三角錐の4つ頂点のベクトルをそれぞれ a, b, c, d として、
p = b - a, q = c - a, r = d - a とすると、
体積= (1/6)|p q r| ← p, q, r を並べた行列の行列式ね
N 個のベクトル a_i (i = 1, 2, .... , N) があったとして、
重心= (1/N) 農{i=1}^N (a_i)
>>346 ありがとうございます。それでなんとかやってみます。
348 :
339 :04/09/23 21:55:32
ファイル分割は 20040923_aaa であれば、2004 09 23 aaaに分割します。 それをデータベースの1行に登録します。 (フォルダに幾つかファイルがあって、1ファイルでデータベースの1行に登録します) わかりにくい文章で、すみません。
>>339 ファイル名分割の根拠が不明。「4文字・2文字・2文字・_・残り」で分割すんの?
フィールドって何?
MSDEに登録する手段は?そもそもadoって何よ?
…仮にプログラムを作ってくれる人がいるとして、その手元にMSDEがあることを前提にするなよ。
350 :
デフォルトの名無しさん :04/09/23 23:53:12
ファイルを読み込んで、文字とキーワード(unit 30) のような文字列をfgetsで読み込んで返した文字列の中からスペースの 後のキーワードを見つける方法を教えてください。
>>350 FILE * fp = fopen("theFile", "r");
char buf[EnoughSize];
fgets(buf, sizeof(buf), fp);
char keyWord[EnoughSize];
sscanf(buf, "%*s%s", keyWord);
352 :
デフォルトの名無しさん :04/09/24 00:24:43
sscanfですか! ありがとうございます!
353 :
デフォルトの名無しさん :04/09/24 09:22:36
nを入力し,フィボナッチ数列の値 F(n)を計算し表示する再帰プログラムfib.cを作成せよ. フィボナッチ数列 F(n)=F(n-1)+F(n-2) F(0)=2, F(1)=3
354 :
デフォルトの名無しさん :04/09/24 09:23:23
↑おねがいします。
ぐぐれ
int fib(int n){ if(n<3) return 1; else return fib(n-1)+fib(n-2); }
#include <iostream> int fib( int n ){ if( n <= 0 ) return 2; if( n == 1 ) return 3; return fib( n - 1 ) + fib( n - 2 ); } int main(){ int n; while( std::cout << "n=", std::cin >> n ) std::cout << "fib(" << n << ")=" << fib( n ) << std::endl; return 0; }
↑f(2) = 5
int fib(int n) { return n==0 ? 2 : ( n==1 ? 3 : fib(n-1)+fib(n-2) ); }
再帰を使う悪しき例だな n=50でもう重たい
ループ展開きぼんぬ
>>353 をテンプレートでやってみたんだけど、ちょっと不思議なことが。
template<int N> struct Fib { enum { value = Fib<N-1>::value + Fib<N-2>::value }; };
template<> struct Fib<0> { enum { value = 2 }; };
template<> struct Fib<1> { enum { value = 3 }; };
int fibfunc(int n) { return n<=0 ? 2 : ( n==1 ? 3 : fibfunc(n-1)+fibfunc(n-2) ); }
int main(int argc, char* argv[]) {
const intn = 40;
printf("%d\n", Fib<n>().value);
printf("%d\n", fibfunc(n));
return 0;
}
VC++6.0SP6 Win2k
これをビルド(Releaseモードでリビルド)するのは1秒もかからないのに、fibfunc関数の結果が表示されるは3〜4秒かかりました。
結果は両方とも同じ値でした。
計算をコンパイルタイムにやる方が速いのは何故ですか?
363 :
デフォルトの名無しさん :04/09/24 11:12:04
>>353 の問題ですが。
scanfを使いたいのですが。
365 :
デフォルトの名無しさん :04/09/24 11:37:31
夏休み明けで全然頭が働きません。 どうか助けてください。
>>362 当たり前だろ。実行時に計算量が多い方が遅いに決まってる。
頼むからネタと言ってくれ・・・・・
>>367 あーそういう意味か。失礼した。
要するにコンパイル時の方が評価が速いって事ね。
Fib<40>()、Fib<39>()・・・・Fib<2>()の一時オブジェクトがコンパイル時に
内部で生成され、一度生成されたら次回の使用時に再計算せずにその
一時オブジェクトの値をそのまま使ってるからだろ。
fibfunc()でも内部にstaticの配列を持っておき、一度でも評価されたnについ
ての関数の値をストアして行き、次回から同じnで呼ばれたら配列から値を
返せば当然速くなる。
>>362 テンプレートの方は最適化によってコンパイル時に即値に展開されている可能性がある。
ワロツァw
>>368 ああなるほど。
std::map<int, int>m;
int fib(int n) {
std::map<int, int>::const_iteratorit = m.find(n);
return it != m.end() ? it->second : m.insert(std::pair<int, int>(n, fib(n-1) + fib(n-2))).first->second;
}
int main(int argc, char* argv[]) {
const int n = 40;
m.insert(std::pair<int, int>(0, 2));
m.insert(std::pair<int, int>(1, 3));
printf("%d\n", fib(n));
return 0;
}
としたら劇的に速くなりました。
>>372 しかしこの方法でもアッカーマン関数は重いんだよねえ・・・・・
果てしない再帰関数ですよあれは。
374 :
デフォルトの名無しさん :04/09/25 15:50:22
入力された整数を16進表記に変換し、それをASCIIコードで出力しなさい (例) 入力←123 出力→37 42
int a = 123; char h = a >> 4; char l = a & 0x0f; printf("%d %d\n", h, l);
>>375 出力が 7 11
になってしまいます・・・
#include <stdio.h> #include <string.h> int main() { unsigned int num; unsigned char s[sizeof(unsigned int)*2 + 1]; int i; scanf("%u", &num); sprintf(s, "%X", num); for(i = 0; s[i] != '\0'; i++) printf("%2X ", s[i]); printf("\n"); return 0; }
>>377 ありがとうございました m(_ _)m
379 :
デフォルトの名無しさん :04/09/25 21:05:38
合計を求めるところの関数を再帰関数にしろという問題です。 お願いします。ペコリ #include <stdio.h> int main(void) { int m,n,s; scanf("%d",&m); scanf("%d",&n); s=gou(m,n); printf("合計は%d\n",s); return 0; } int gou(int m,int n) { int i,s=0; for(i=m;i<=n;i++){ s=s+i;} return s; }
380 :
379 :04/09/25 21:13:22
どうも、お世話になります。 もう1問あったのでお願いします。ペコリ 九九の表を2次元配列を利用して表示させなさい。(だそうです。
int gou(int m,int n) { return m <= n ? m + gou(m+1, n) : 0; } テストしてないから微妙
382 :
379 :04/09/25 21:28:01
>>381 様ありがとうございます。
380の問題もやっていただければ光栄なのですが。。。
お願いします。ペコリ
for(i=0; i<9; i++){ for(j=0; j<9; j++) printf("%d ",i*j); printf("\n"); }
384 :
379 :04/09/25 21:38:20
たびたび申し訳ありません。 381のreturn m <= n ? m + gou(m+1, n) : 0;の ↑のあたりの「?」と↑の「:」の意味が分かりません。 できれば私、初心者向きな作り方でお願いできませんか? 基本の基本でお願いします。たびたび申し訳ありません。ペコリ
>>384 意味を調べて自分で書き換えてみようとか思わん?
人に頼ってばっかだと脳が腐っちゃうよ。
どんどん馬鹿が増えとるな。自覚のない馬鹿が。 日本の教育が衰退していくのがわかる。
>九九の表を2次元配列を利用して表示 383はちがうよね(w
388 :
マイク ◆yrBrqfF1Ew :04/09/25 21:45:53
>?: 三項演算子って結城本にあっただろ。
return A ? B : C;
=
if(A) return B;
else return C;
>>386 学生なめんなYO!
>>389 おうおう粋がっちゃって・・・・
(´-`).。oO(社会に出てから苦労するタイプだな)
391 :
379 :04/09/25 22:25:29
すみません。 言い分けみたいですが、本当に時間が無くて。。 本当に自分でも「自分で調べてやれよっ」って感じです。 その調べる時間がなくて、、、こうやってカキコしている時間もアセアセで・・・ スミマセン。。。。
393 :
379 :04/09/25 22:38:59
>>392 (ップ
もういい加減さっさと答え晒して終わろぉぜw
int kuku[9][9]; for(i=0;i<9;i++) { for(j=0;j<9;j++) { kuku[i][j] = (i + 1) * (j + 1); } }
>>380 #include <iostream>
#include <iomanip>
int main()
{
int result[9][9];
for (int i = 0; i < 9; ++i)
for (int j = 0; j < 9; ++j)
result[i][j] = (i + 1) * (j + 1);
std::cout << "\ 1 2 3 4 5 6 7 8 9\n";
for (int i = 0; i < 9; ++i)
{
std::cout << " " << i + 1;
for (int j = 0; j < 9; ++j)
std::cout << std::setw(3) << result[i][j];
std::cout << '\n';
}
std::cout << std::flush;
}
396 :
379 :04/09/25 23:09:42
>>395 難し杉る・・です、はい。
#include <stdio.h>
くらいじゃないと分らないし、、
std::cout << "\ 1 2 3 4 5 6 7 8 9\n";
for (int i = 0; i < 9; ++i)
{
std::cout << " " << i + 1;
for (int j = 0; j < 9; ++j)
std::cout << std::setw(3) << result[i][j];
std::cout << '\n';
}
std::cout << std::flush;
}
のあたりがまったく分りません。。。
理解できないのは意味が無いのでこの私(糞、アフォ、カス、禿げ、なんとでもお言いください)
が分る程度のレベルでお願いします。超超低いレベルでお願いします。ペコリ
>>396 CならCと先に言えよ。
普通C++だがな。
398 :
379 :04/09/25 23:31:24
>>397 様、はい、スミマセンでした。
環境はCです。お願いします。ペコリ
>>349 うお,大文字のみて初めて気がついたが,ゲイツ君家のMSDEか(w
400 :
デフォルトの名無しさん :04/09/26 01:09:24
int result[9][9]; for (int i = 0; i < 9; ++i) for (int j = 0; j < 9; ++j) result[i][j] = (i + 1) * (j + 1); ↓ int result[10][10]; for (int i = 1; i <= 9; ++i) for (int j = 1; j <= 9; ++j) result[i][j] = i * j;
>>393 はスルーなのカ。
#include "stdio.h"
int main()
{
int result[9][9];
for (int i = 1; i <= 9; ++i)
for(int j = 1; i <= 9; ++j)
result[i-1][j-1] = i * j;
printf (" 1 2 3 4 5 6 7 8 9\n");
for(int i = 0; i < 9; ++i)
{
for (int j = 0; j < 9; ++j)
printf("%d", result[i][j]);
printf("\n");
}
}
(・3・)エェー 学生サン ドンドンオイデー みんな答えるの早いな.なんだかんだ言って飢えてらっしゃる...
VC6でコンパイルが通らないとか言いそうだ…。
>>396 >超超低いレベルでお願いします
int result[9][9];
result[0][0] = 1*1;
result[0][1] = 1*2;
...
printf("%d", result[0][0]);
とでもすればできるんじゃないか。
>401 >403 だから result[1][1],result[1][2],...,result[1][9] result[2][1],result[2][2],...,result[2][9] : result[9][1],result[9][2],...,result[9][9] ぢゃねーと難しすぎるって(w
405 :
デフォルトの名無しさん :04/09/26 04:40:32
>>389 return A ? B : C;
=
if(A) return B;
return C;
ぢゃねの?
関数の最後returnで終わらせないと
どっちでもいっしょだろ
Cで○×ゲームってどうやって作るの?
> 九九の表を2次元配列を利用して表示させなさい。(だそうです。 #include <stdio.h> int main() { int temp[1][1]; int i, j; for(i = 1; i <= 9; i++){ for(j = 1; j <= 9; j++){ temp[0][0] = i * j; printf("%2d ", temp[0][0]); } printf("\n"); } return 0; }
puts("一意の感情?誘拐?参加します。それは何か!!?? (◎か×か!!!) (間違いはだめ!!!!)"); scanf("%s",kotaeru_hensu); if( strcmp( "●",kotaeru_hensu ) == 0) { puts("正解!!!!!!!!"); }else if(memcmp("◎",mannaka_no_kotae,2)) { puts("おそかった"); }else{ puts("まちがえ、ました!!!!!!!!!!!!!!!!!!!"); }
#include <stdio.h> int main(void) { double d[10] = {67.2, 43.6, 78.9, 50.1, 0.0, 32.9, 44.4, 100.9, 62.5, 0.0}; int i, j, max, min; max=d[0]; for (i=0;i<10;i++){ if(max<=d[i]){ max=d[i]; } } min=d[0]; for (j=0;j<10;j++){ if(min>=d[j]){ min=d[j]; } } printf("体重の最大値は%.1f、最小値は%.1fです。\n",max, min); return 0; } 答えが変なんですが・・・。
・int max, min; をdoubleにする ・%.1fを%dにする ・printfのmax, minを(double)max, (double)minにする 好きなのを選べ
>>411 一番最初の方法でやったらうまくできました。
有難うございました
413 :
379 :04/09/26 14:14:44
そんな簡単な問題聞いてんじゃねぇよ この糞粘着チビ禿げめ!!! なぁ?OONO??
#include<iostream> #include<string> using namespace std; void PromptRead(string); void FindName(string,string,string); void Display(string,string,string); int main () { string first, middle, last, init, fullName; PromptRead(fullName); FindName(first,middle,last,init); Display(first,middle,last,init); return 0; } void PromptRead(string& fullName) { cout << "Enter your full name. First, Middle, Last ==>"; cin >> fullName; }
void FindName(string first, string middle, string last, string init, string& fullName) { first = fullName.substr(0, fullName.find(' ')); middle = fullName.substr(fullName.find(' ')+1, fullName.size()) last = fullName. init = fullName. } void Display(string first, string middle, string last, string init) { system("cls"); cout<< "First Name:" <<first<<endl; cout<< "Middle Name:" <<middle<<endl; cout<< "Last Name:" <<last<<endl; cout<< "Initials:"<<init<<endl; } どうも〜まったくわからないので助けてください>< cinでGeorge W. Bushみたいな感じでファーストネーム、ミドルネーム、ラストネームを読み込み coutでファーストネーム、ミドルネーム、ラストネームとイニシャルを出すといった感じの宿題なのですが ラストネームとイニシャルをどうやって求めればいいかわかりません getlineという物を使えば良いらしいのですが頭が悪いためさっぱり本を読んでもわからないです。 ちなみにこういった感じにしたいです。 First:George Middle:W. Last:Bush Initials:GWB
416 :
デフォルトの名無しさん :04/09/26 19:20:47
#include<stdio.h> int main(void) { int manth; int nichisu; printf("何月の日数を調べますか?\n"); scanf("%d",&manth); if(manth==1||manth==3||manth==5||manth==8||manth==10||manth==12) { nichisu=31; } else if(manth==4||manth==6||manth==9||manth==11) { nichisu=30; } else nichisu=29; printf("%d月の日数は%dです。\n",manth,nichisu); return 0; } Cの問題ですが コレを条件分岐のif文使わずに二次元配列でやってみいろ、というんですが さっぱりわかりません。
417 :
416 :04/09/26 19:27:47
「配列のアドレスを利用しろ」、ということなのですが。 実行入力された月数と三通りの日数をどう関連づけた 二次元配列の表を組み立てるかどうかで 頭がモヤッとなってしまいました。
418 :
416 :04/09/26 19:32:15
一応、最初に416の文で書いたが 二次元配列の方が短い?簡潔?と言われた。 実行結果は同じなのに過程をこうしてやれ、 と言われてモヤモヤ。
419 :
たけし :04/09/26 19:42:54
CでRPG作りたいんですが、正直難しいと思います。 でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド) ぐらいなら作ったことあります。 今のところ、オープニングまで作ったのですが、どなたか僕に Cの基礎からすべてを叩き込んでくれませんか?? お願いします。
>416 月毎の日数を配列にして保持しろ
421 :
デフォルトの名無しさん :04/09/26 20:21:09
そもそも条件分岐を使わないなんてことが考えられない。 実行入力されるときの値はプログラミング中では不確定要素であり 「〜であれば」という文がなければ成り立たないように思えたのですが。
配列の n 番目の要素に n 月の日数が入っていれば if 文は無くてもいけるかと。
>421 は 416 か? 月毎の配列が2つあれば、条件分岐がいらない ※もっとも入力した月が1〜12かどうかの判断はさすがにifが必要だが
424 :
デフォルトの名無しさん :04/09/26 20:26:34
なるほど、たぶん出題者の指摘はそこではないかと思います。 >422
>424 は 416 か? うるう年の判定もあるが、2つ用意した配列の添え字にするのだよ
427 :
416 :04/09/26 20:48:10
配列の添え字を使う。なるほど。 最初から manth[1]=30 manth[2]=29 manth[3]=31 を用意しておく とこんな感じだろうか。 添え字で指定させて中身で出すみたいな感じかな。
>>427 配列の初期化は
int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
みたいにできる。
(最初の0は参照するときに
days[month - 1]
とかすればいらない)
…って
>>416 に
二次元配列と書いてあるね。
一次元でいけそうだけどなあ。
429 :
416 :04/09/26 20:56:56
#include<stdio.h> int main(void) { int manth[10]; int i; printf("何月の日数を調べますか?\n"); scanf("%d",&i); manth[1]=31; manth[2]=29; manth[3]=30; printf("%d月の日数は%dです。\n",i,manth[i]); return 0; } いや、できた。できた。 まだ中途半端だがif文使わずにできましたよ。 ありがとう。
430 :
416 :04/09/26 21:04:40
しかしこれでは二次元ではないのだが・・・。 二次元にすることによってもっとコンパクトにできるんでしょうか? そもそも日数は三通りしかないのですが、ポイントはここらへんなんだろうか。
416よ 2月は29日と限定しているが、そうなのか?
432 :
416 :04/09/26 21:12:21
いや、とりあえずそこまで難しく捉える問題ではなく 課題の要点理解のため参照例としての数なので、閏年とかは 考えなくていいかと。 12通りの数と3通りの数の組み合わせ算出が問題です。
433 :
デフォルトの名無しさん :04/09/26 21:13:24
偉そうだな
>>426 さん
ありがとうございます。
ただ、フルネームを一つの物としてgetline()をかならず使って
last,initialを求めないと駄目みたいなのでその場合のやり方を教えていただけません><
説明不足でした。本当ごめんなさい
>>432 なんで12通りと3通りを組み合わせる必要があるのか?
int getday( int &manth ); int main(void) { ... nichisu = getday( manth ); ... } int getday( int &manth ) { int day[] = { 29, 30, 31 }; int *db[][1] = { &2[day], &0[day], &2[day], &1[day], &2[day], &1[day], &0[day], &2[day], &1[day], &2[day], &1[day], &2[day] }; return **(manth-1)[db]; } できた。
437 :
416 :04/09/26 22:07:10
だめだ。この問題の二次元配列が頭に浮かばない。 int kaz[][]の宣言から始まるわけだし。 []*[]の変数が用意されるわけだから 余計ややこしくなる。 422と425のレスは参考になった。 どうもありがとう。 そんじゃ。
>>437 素直に閏年入れて2次元にしとけって
#include <stdio.h>
int main(void){
int year, month;
int days[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
printf("年入力\n");
scanf("%d", &year);
printf("月入力\n");
scanf("%d", &month);
printf("日数=%d\n",days[(!(year % 4)) && (year % 100) || (!(year % 400))][month - 1]);
return 0;
}
440 :
dotkansai :04/09/26 23:26:49
宿題で以下のようなものが出題されましたが、何を書いたらいいのか さっぱり思いつきません。 頭の良い方、いらっしゃいましたら教えてください。 「プログラミング言語Cの仕様の中には、今では不適切と思われるもの がある。エラーの発見を困難にしていたり、妙に不自然な書き方を強制 していたりするものである。不適切と思われるCの言語仕様を挙げ、そ れがどのように不都合であるか、またどう変えれば改善となるかを述べ よ」 というものです。 誰でもいいのでHELPです。
javaと比べて悪い点を挙げればいいんでない?
>440 う〜ん、さっぱりわからん 強いて挙げればgotoってとこかなぁ 「エラーの発見を困難にしていたり」は 下手な書き方すればgotoに限ったことでもないし 「妙に不自然な書き方を強制していたり」は それだったらgoto使わなきゃいいだけだし
ポインタの宣言と初期化の書き方ぢゃね? int *n = NULL; *n ってアドレス? って勘違いしそう、とか。
>>440 宣言の複雑さとか。
int型へのポインタの要素数[5]の配列へのポインタを返す関数へのポインタの
要素数[3]の配列を返す関数を宣言あるいは定義しなさい、って言われても
すぐにはピンと来ないし、見てもわかりにくいし。
あ、改善策は当然typedefで分解。
C99で改善された点でも取り上げて良いのかな??
○×ゲームってどうやって作るの?
>441 javaに限らず他言語との違いを挙げていけば見えてくるものがあるんじゃないかと。 配列(特に多次元)関数に渡すときとか文字列とか結局ポインタまわりか。
451 :
デフォルトの名無しさん :04/09/27 00:35:56
再帰関数を利用してx、yのべき乗を求める関数(pow)を作ってみたつもりなんですが できません。ご指導お願いします。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ #include <stdio.h> int main(void) { int x,y,t; scanf("%d",&x); scanf("%d",&y); t=pow(x,y); printf("%d",t); return 0; } int pow(int x,int y) { if(x!=1)return x*y*pow(x,y-1); else return 1; }
int pow(int x) { if(x!=1)return x*pow(x-1); else return 1; }
>>451 int pow(int x,int y)
{
return y <= 0 ? 1 : x*pow(x,y-1);
}
>451 先ず、適当なサンプルを考える x=2,y=3辺りかな pow(2,3)のとき、計算式は2*2*2となる 再帰的な考え方をするとyを順次減らしていき pow(2,3)は2*pow(2,2)を返す pow(2,2)は2*pow(2,1)を返す pow(2,1)は2を返す int pow(int x,int y) { if(y<=1) { return x; } return x*pow(x,y-1); }
#include <stdio.h> void display(void); int set(int ,int ,int ); int check(void); void main(void){ while(1){ display(); /*盤表示*/ scanf("%d", &row); /*入力した行列を読み取る*/ set(row,column,koma) /*入力された場所にコマを置く*/ check(); /*勝利判定*/ } } void display(void) { int board[3][3] = {0,0,0, 0,0,0, 0,0,0,} /*0:空き 1:○ 2:×*/ printf("%d %d %d\n", board[0][0], board[0][1], board[0][2]); printf("%d %d %d\n", board[1][0], board[1][1], board[1][2]); printf("%d %d %d\n", board[2][0], board[2][1], board[2][2]); } コマを置く位置の入力を読み取って、盤表示の更新する方法 勝利の判定が分かりません
html化されてる過去スレ見たけど見つからなかった。
>>457 bord[][]はグローバル変数にするか、引数で渡すようにしなきゃだめだろ。
今のままじゃdisplay()でしか参照できない。
勝利の判定方法は、縦がすべて同じ値かどうかチェックして、同様に横と斜めに
ついてチェックすりゃいいでしょ。
>>438 さん
getline(cin, fullname)に変えてコンマの部分をスペースに変えたら出来ました。
ありがとうございます。
460 :
デフォルトの名無しさん :04/09/27 15:09:19
461 :
デフォルトの名無しさん :04/09/28 08:50:08
任意の正の整数を5つ入れて2分木を表示させる プログラムを教えてください。お願いします。
ぐぐったら一番上に出てきた
465 :
デフォルトの名無しさん :04/09/28 11:25:26
ツリーの視覚化といえばgraphbizのdot
466 :
デフォルトの名無しさん :04/09/28 14:53:04
>>440 * がプレフィックス演算子だとか。
これをPascalの様にポストフィックス演算子にしてさえおけば、、、
>>465 graphviz
>>440 構造体のフィールド参照に「.」、
構造体のポインタからのフィールド参照に「->」演算子を割り当てているが
統合できる。
八進数に0-8を割り当てている(K&R初版)→8が不要
文字列中に\xという16進数エスケープがあるが、不定桁なので、わかりずらい。
"\xabcdefg" →規格では"\xabcdef" "g" と同義。
2桁固定にしたほうがわかりやすい。
最上位宣言もしくは、複文の先頭でしか変数を定義できない。(C90)
・・・C90と、C99の比較をすれば、結構でてくるんでは?
>>467 > 最上位宣言もしくは、複文の先頭でしか変数を定義できない。(C90)
これは好き.
{
int i = foo();
{
int j = bar();
...
関数型言語の let みたいでヨロシイ.
>>467 >2桁固定にしたほうがわかりやすい。
それだと255までしか表現できないが、charの長さは処理系定義じゃなかったっけ?
sizeof (char) == 1は決められているが、CHAR_BITは処理系定義
sizeof( char ) != 1 な処理系も…
>>440 たとえば,
typedef unsigned int u_int;
を
unsigned int typedef u_int;
と書くことができる
strcasecmpが使えないので、同様の動作の関数が作りたいんですが、 どうすればいいかわかんないです。 どなたかお願いします。
>>474 入力された2つの文字列を両方とも小文字に変換(tolower)してstrcmpにかければよい。
476 :
デフォルトの名無しさん :04/09/29 00:21:55
数列の要素の比較に基づくソート法である単純選択法を使って 与えられた数列を小さい順に並べるにはどうしたらいいんでしょうか? どなたか助けてください。よろしくお願いいたします。
477 :
476 :04/09/29 00:23:14
あ、どのようなプログラムを作ればいいんでしょうか?という事です。 言葉足らずですみません。
#include <stdio.h> #define N 10 /* データ数 */ int main(void) { int data[] = {0,2,6,4,3,7,5,1,9,8}, i, max, tmp; for(i=0;i<N;i++) printf("%2d ",data[i]); printf("\n"); for(max = N; max > 0; max--) { for(i = 1; i < max; i++) { if(data[i-1]>data[i]) { tmp = data[i-1]; data[i-1] = data[i]; data[i] = tmp; } } } for(i=0;i<N;i++) printf("%2d ",data[i]); printf("\n"); return 0; } コンパイルしてないから上手く行くか試してない。
>>476 「単純選択法」でググると一発目にソース付きのページが
出てくるんだが?
>>479 で学んだ。
>>480 が言ったことをとりあえず無視して再挑戦
#include <stdio.h>
#define N 10 /* データ数 */
int main(void) {
int data[] = {0,2,6,4,3,7,5,1,9,8}, i, j, min, tmp;
for(i=0;i<N;i++) printf("%2d ",data[i]); printf("\n");
for(j = 0; j < N; j++) {
min = j;
for(i = j; i < N; i++) {
if(data[i]<data[min]) min = i;
}
tmp = data[min];
data[min] = data[j];
data[j] = tmp;
}
for(i=0;i<N;i++) printf("%2d ",data[i]); printf("\n");
return 0;
}
またも試してないんで上手く行くかは知らん。
482 :
デフォルトの名無しさん :04/09/29 10:28:26
すみません、あまり具体的でなくて申し訳ないのですが、 C++で作ったアプリケーションの起動時に、毎回勝手にテンポラリファイルが 出来るという現象についてご存じの方いらっしゃいますか? 調査した者の話によると、「ステップ実行してみたが、どの部分で 作られているかわからない。C++が勝手にやっているんじゃないか」 ということでした。 現在手元にソースがないので何とも言えませんが、意識して テンポラリファイルを作るようなコーディングをしていないのに、 勝手に出来るなどということがあるのでしょうか。 ご存じの方いらっしゃいましたら教えて下さい。
具体的でなさ過ぎるわ 標準ライブラリだけ使っててそんな事になるとは、あまり思えない 妙なライブラリ使ってたら知らん、C++に原因求めるんじゃなくライブラリ調べろ そして妙なコードを書いてる可能性の方がはるかに高い
調査した者が主犯で、バレないように
>>482 にはそういっただけのこと
・OSは?(Windows, Macintosh, Linux, FreeBSD, etc) or 組込系など ・処理系は?(VisualC++, BCC(BCB), gcc, etc) ・ライブラリ(dllやMFCなども含む)を使っているか ・APIは使っているか(Win32API, etc) ・ファイル操作をしている所は有るか 最低限これぐらい書け
487 :
デフォルトの名無しさん :04/09/29 12:42:10
他のスレに書いたらここで聞けと言われたんでここで聞かせていただきます。 プログラミング講義C++ という本に演習とありますが答えが載ってないのでやり方が分かりません。 なのでここに演習の文を書くんでその答えを書いてくださらないでしょうか? >>2つのオブジェクトa,bが、 >>(1)いずれもint型である場合 >>(2)いずれもdouble型である場合 >>(3)一方がint型で他方がdouble型である場合 >>の3つの場合に対して、sizeof(a+b)を表示するプログラムを作成し、その実行結果を考察せよ。
で、その移動しろって言った人間だが。 #include <iostream> int main() { { int a = 1, b = 1; std::cout << "sizeof(int + int) = " << sizeof(a + b) << std::endl; } { double a = 1.0, b = 1.0; std::cout << "sizeof(double + double) = " << sizeof(a + b) << std::endl; } { int a = 1; double b = 1.0; std::cout << "sizeof(int + double) = " << sizeof(a + b) << std::endl; } return 0; } 結果の考察は自分でしな。
>>488 ここに質問するの待っててくれたんですか?
ありがとうございます。
全角うぜぇ int+int->int double+double->double int+double->double+double(暗黙の型変換)->double
491 :
デフォルトの名無しさん :04/09/29 13:45:20
お願いします。 ↓ 以下のようなint型配列がある。配列の要素と、配列中の最大値と最小値を表示するプログラムを、ポインタを使用して作成せよ。 『配列定義』 int data[10] = {10,9,1,20,45,21,38,45,88}; 『実行結果』 配列の内容 data[ ] = 10,9,1,20,45,21,38,45,88 最大値 = 88 最小値 = 1
>>491 int data[10] = {10,9,1,20,45,21,38,45,88};
int min = INT_MAX, max = INT_MIN;
for(int* p = data; p != &data[10]; ++p)
{
if( *p < min )
min = *p;
if( *p > max )
max = *p;
}
printf("min=%d max=%d\n", min, max);
良く見かけるなぁ
>>494 0なんだろ。
残りの要素は0で初期化されるから省略してるんだよ、多分。
じゃあなんで最小値=1?? data[9]={10,....の間違いなんじゃ?
無理矢理C++ #include <iostream> #include <algorithm> template <typename T> inline int numof( const T& t ){ return sizeof( t ) / sizeof( t[ 0 ] ); } template <typename T> void print( const T& t ){ for( int i = 0; i < numof( t ); ++i ) std::cout << t[ i ] << ','; std::cout << "\b \b"; } int main() { int data[ 9 ] = { 10, 9, 1, 20, 45, 21, 38, 45, 88 }; std::cout << "配列の内容" << std::endl << "data[] = "; print( data ); std::cout << std::endl; std::cout << "最大値 = " << *std::max_element( data, data + numof( data ) ) << std::endl; std::cout << "最小値 = " << *std::min_element( data, data + numof( data ) ) << std::endl; return 0; }
2003/05/27 10:08:41 2003/05/27 10:09:02 2003/05/27 10:09:23 2003/05/27 10:09:41 という形のデータがひたすら書かれたテキストファイルを読み込み、上下隣り合う行の時間差(秒数) を出し、その差が 1秒 = 200件 2秒 = 100件 ・ ・ 100秒 = 20件 というように表示させるプログラムを作成せよ。 ------------------------------------- 上記データで言うと、21秒差が2件、21秒差が1件なので、 21 = 2 22 = 1 といった感じに表示させるプログラムです。 お願いします。
書き忘れですが、C言語です。 OS環境はRedhat9です.
500 :
デフォルトの名無しさん :04/09/29 16:01:15
500get
501 :
ぼるじょあ ◆yBEncckFOU :04/09/29 16:05:08
補足だけど、パラメータからファイル名を取ってくるのを忘れてたり、 エラーチェックをしてなかったり、ループに無駄があったり、 そもそもソースが汚かったりするから、参考程度に(´・ω・`)
sscanf(data, "%d/%d/%d %d:%d:%d", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec); これは通らん
506 :
476 :04/09/29 21:11:14
>>478 わざわざ改良までしてくれてホント有難いです。
感謝します。
>>480 ホントですね…。ご指摘ありがとうございました。
507 :
dotkansai :04/09/29 22:10:08
質問です。以下のような問題が出たので、誰か分かる人がいたら教えてください。 Cの初期指定の文法をBNFで書け。次のような書き方が許されるものとする。 1 {1,2,3} {{1,2},{3,4}} {1,{2,3},{4,5,6},7} これらが許されるような一般的な言語を想定して、その文法を書くこと。 終端記号は、「左波括弧」、「右波括弧」、「コンマ」、「数」の四つである。 非終端記号には自分で選んだ適当な名前をつけてよい。
数字の後には,か}、あるいは即終了。 {のあとには{か数字 とかいくつか規則を作って後はパズル的に組み合わせれば良いんじゃないの?
課題なんですが・・・。 コマンドライン入力で座標を入力して直線を描画したあと自動でまたコマンドライン 入力画面に戻り、再び座標を入力して同じ画面に直線を描画・・・ってな感じで 繰り返していくプログラムなんですが・・。 一回描画させたあと入力画面へ戻るところがよく分かりません。 教えていただければ幸いです<(_ _)>
511 :
超初心者 :04/09/30 01:23:23
はじめまして、VC++でエクセルを使いグラフを書きたいのですが サンプルを持ってきたんですがうまく改良できません。 ファイルから読み込んでそのデータを細かい折れ線グラフ(心電図のような) ものにしたいのですが教えていただきたいのですが //グラフに使用するデータの出力 for(i = 1; i < 10; i++){ //軸の出力 data = (short)i; data1 = (short)1; RangePtr pCells = pSheet->Cells->Item[data][data1]; itoa(i*10,buffer,10); pCells->Value2 = buffer; //Dataの出力 data = (short)i; data1 = (short)2; pCells = pSheet->Cells->Item[data][data1]; itoa(i*100,buffer,10); pCells->Value2 = buffer; //グラフの出力 ChartObjectsPtr pChartObjects = pSheet->ChartObjects(); ChartObjectPtr pChartObject = pChartObjects->Add(200,10,300,300); pChartObject->Chart->ChartType = xlColumnClustered; //データの設定 pChartObject->Chart->SetSourceData(pRange);
>>507 初期指定 ::= 数 | リスト ;
リスト ::= 左波括弧 リスト内部 右波括弧 ;
リスト内部 ::= 初期指定 コンマ 初期指定 | 初期指定 ;
このまま下降パーサ書いたら、無限ループに陥いりそーだが。
BNFで書けという要求には合っているだろう。
JVMの簡単なコンパイラをC言語でおねがいします。 キーポイント Aコードの生成速度が速いコンパイラ B速いコードを生成するコンパイラ(最適化) 人に優しいシステムの開発-誤入力への対処、表示の工夫など
ネタは他所でやれー
>>513 宿題じゃないだろ?
もしかしたら宿題なのかもしれないけどさ、ちょっと時間がかかり過ぎる。
>>512 それで
{1,2,3}はいけないような。。
>>515 それが宿題なんですよ
なんとかなりませんかねえ
>>515 JVMじゃなくても、CASLでも可です
>>518 CASLの方が簡単かもしれんが
どちらにせよ時間がかかりすぎて誰もやりたがらないと思う。
>>507 漏れも考えてみた。
ターゲット ::= 左ブレース 引数 右ブレース ;
引数 ::= |リスト ;
リスト ::= 数
|ターゲット
|リスト コンマ 数
|リスト コンマ ターゲット
そういえばやねうらおが作る予定だな もしかして関係者か
>>519 できればお願いします。
まじわからなくて困ってるんです。
本当に無理ならいいですけど
>>522 無理じゃない。
だが、タダの範囲を超えてるし、趣味で作ろうと思わん。
526 :
デフォルトの名無しさん :04/09/30 12:44:21
2分木のプログラムを作れという宿題を誰かお願いします。 説明もできるようにしないといけないのでできる限りシンプルなプログラムでお願いします。 C++
>>525 かわいそうだろ30万なんて、ていうかひどいな
マジ困ってるようだから、作ってあげたら?
俺は無理だが
30万は安すぎるだろ
513==527 安すぎだろ
513です 訂正 数式のコンパイラでいい。制御構造や入出力文はなくてもよい ターゲットマシン、CASLまたはJVM ・取り扱える数値は整数値のみでよい(実数なら最高) ・演算は加減乗除のみでよい(それ以外あってもいい) ・演算子の優先順位を考慮し、括弧も扱えること
>>530 数式を入力すると、その数式を解くCASLコードが吐ければいいわけ?
>>532 良くわからんのだが、入力する数式はどんな感じなんだ?
ただ 10+5*20 とか入れるだけなのか、
x = 5; y = 10 + x;
みたいなことが出来なければいけないのか。
書き出すコードはCASLのオブジェクトコードなのか、CASLのソースコードなのか。
実は「ぬるぽ」と入れると・・・
ぬるぽ
Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Null ... Pointer! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number! Not a number!
∧_∧
( ・∀・) | | ガガッ
と ) | |
Y /ノ .人
/ ) .人 < >_∧∩
_/し' < >_∧∩`Д´)/
(_フ彡 V`Д´)/ / ←
>>534 / ←
>>535
>>507 初期指定 ::= 数 | リスト ;
リスト ::= 左波括弧 リスト内部 右波括弧 ;
リスト内部 ::= 初期指定 コンマ リスト内部 | 初期指定 ;
かな。EBNFのほーが慣れてるんで、BNFで書くのはつらい。
いちおう、左再帰はないんで、下向きパーサは書けるはず。
>>530 C/C++摺れだけど、yacc は使っていい?
>>538 > リスト内部 ::= 初期指定 コンマ リスト内部 | 初期指定 ;
{ 1, 2, 3, { 4, 5, 6} } の
3, { の部分が解釈できないみたいです...?
リスト内部 ::= 初期指定 コンマ リスト | 初期指定 ;
ではないでしょうか.
こういうのを検証するソフトってあるのですか? 名前だけでもキボンヌ.
for(i=0;i<3000;i++){ y=5*i+A }で、 0<i<1000の時 A=5 1001<i<2000の時 A=4 2001<i<3000の時 A=3 とするにはどうすればいいのですか?
>>542 i=0,1000,2000のときはそれぞれAはどうすればよいのですか?
A=5; for(i=0;i<3000;i++){ if(i==1000||i==2000) A--; y=5*i+A } for(i=0;i<3000;i++){ switch(i) { case 0: A=5; break; case 1000:A=4; break; case 2000: A=3; break; } y=5*i+A } 好きな方を選びな。
>>543 1001, 2001の時のAの値も不明だね。
546 :
デフォルトの名無しさん :04/10/01 00:42:00
C言語初心者です。 すいませんどうか助けてください。 一つのファイルを条件により複数のファイルにするファイル分割を しています。、 条件がありまして、 @fgetc(fp)で順次読み込んだ文字がリターンキーなら次に文字を見る。 Aその文字が 0 〜 9 か 'ー' 〜 '九' ならリターンキーまでを一つのファイル として閉じる。 BAの条件にかかった文字から新たなファイルを生成し@に戻る。 という仕様なんですが文字列操作がうまくいきません。 かな文字や関数字など2バイトなので判定ができません。 イメージとしては while ((ch = fgetc(fp)) != EOF) { fputc(ch,fwp); if (ch == 13) ← リターンキーのasciicode { ここまでしかできてない・・・ 以下不明・・ } } すいませんが文字をすすめたり漢数字の'一'判定のために どのようなコードを書けばよいかわからないので(ポインタの進め方戻り方など) どなたか教えてください・・
忍法たらい回しの術
>>507 初期化子::=
数
|「左波括弧」初期化子リスト「右波括弧」
|「左波括弧」初期化子リスト「コンマ」「右波括弧」
初期化子リスト::=
初期化子
| 初期化子リスト「コンマ」初期化子
ではだめかい?ISO/IEC 9899:1999(C規格)見ながら作ったんだけれども。
BNFの規格を厳密に知らないからな…
>>546 シフトJISならば2バイト読んで
switch(〜)
{
case 0x88EA://'一'
case 0x93F1://'二'
case 0x8E4F://'三'
case 0x8E6C://'四'
case 0x8CDC://'五'
case 0x985A://'六'
case 0x8EB5://'七'
case 0x94AA://'八'
case 0x8BE3://'九'
}
とでもするしかないんでは?
>>549 だから、そういうことするなって。
文字コード直書きするな。
2バイトとか言ってる時点でどうせバイトごとに 分けて考えることになるだろうと思ったしさ。
552 :
デフォルトの名無しさん :04/10/01 06:17:04
>>550 じゃあ聞くけど、
>>549 見たいな処理をしたかったらどう書けば良いの?
'九' は処理系定義だけど、 0x8BE3 は対象が Shift_JIS でなおかつ自分
で 2 バイト読むんだから、その場合に限るけど、処理系を変えても
想定通り動く(2バイト読んで h<<8&0xff00|l&0xffとしてから比較するからね)。
したがって、こちらの方が可搬性が高いと思う。そして、これとくらべて
明らかに優れている方法ってある?
>546 コンパイルもしてないからわかんないけどこんな感じ? int CheckWordByte( unsigned int c ){ if( c < 0x21 )return 0; if( c < 0x81 )return 1; if( c < 0xa0 )return 2; if( c < 0xe0 )return 1; if( c < 0xfd )return 2; return 0; } ↑こんなのを作っとくといい
で、こんな感じかな?寝ぼけて書いてるんで自信なし。シフトJISの仕組み調べれ。 while ((ch = fgetc(fp)) != EOF) { if( ch >= '0' && ch <= '9'){// 0 〜 9の処理 continue; } if( CheckWordByte(ch) == 2 ){// 2byte文字のチェック char ch_low = fgetc(fp); if( ch_low == EOF )break; char wd[3]; wd[0] = ch; wd[1] = ch_low; wd[2] = '\0'; char* check_word[] = {"一","二","三","四","五","六","七","八","九"}; for( int i = 0 ; i < 9 ; i++ ){ if( strcmp( wd, check_word ) == 0 ){// 一 〜 九の処理 break; } } continue; } }
>>555 やってみると面白い。俺もおかしいと思ったんだが、
実は許されている。
>>554 ちなみに、C言語で書いてくれとのことだけど、char*の宣言は先頭にしないとダメだよ。
それともC99?
そのくらい、訊いた人間が対応すりゃいいだけだろ ダメ出し好きなんだな
そういう突っ込み見ると、今どきlegacy(ancient?) Cかよ、って感じなんだが。
C99はまだ一般的ではない。 Cの全て処理系でC99をサポートしているとは限らない。 GCCですらサポートしていないバージョンのものを使っているケースが結構ある。 C99で書くときは、そうであることを明記しておくべきだ。
C++
理屈こねてないで、自分が理想の回答書けばええやん
565 :
デフォルトの名無しさん :04/10/01 12:13:30
( 私は特別。 ) ───── ( 一般の猫とは ) オーイ ( 違うのよ ) エサだよ〜! ∧∧ O \ (・ω・ )∧∧ o \ U U(・ω・ )⌒∧∧ ゚ ∧∧ ゾロ ∧∧Uー-(・ω・ ) + (*~ー) (・ω・ )⌒ヽ〜Uー- | ヽ U Jー-し' ( u u )〜 ゾロ
566 :
デフォルトの名無しさん :04/10/01 12:17:10
中国人ってなんでも食べるよね〜
568 :
デフォルトの名無しさん :04/10/01 13:10:26
569 :
デフォルトの名無しさん :04/10/01 13:13:59
質問スレに書いたのですが、スレ違いの為こちらへ再投稿させて頂きます。 private: char m_str[512][512]; があり public: read_str()と言う関数を作って 引数に文字列のポインタを渡して、m_strの内容をstrcpy()でコピーするようなのを作りたいのですが どのようにすればいいのでしょうか? inline int read_str(char *str[512]) {strcpy(str, m_str);} とかいう感じのを想定してるのですが、どうやっても型をあわせられません。
571 :
デフォルトの名無しさん :04/10/01 13:31:57
572 :
デフォルトの名無しさん :04/10/01 13:33:40
>>570 class CAnswer
{
private:
char m_str[ 512 ][ 512 ];
public:
int read_str( char str[ 512 ] );
}
int CAnswer::read_str( char str[ 512 ], int index )
{
strcpy( str, this->m_str[ index ] );
return 0;
}
こんな感じ?
577 :
デフォルトの名無しさん :04/10/01 16:11:20
579 :
577 :04/10/01 19:39:36
>>578 おぉ、なるほど!
僕にはとても思いつきそうもなかったです。
ありがとうございました。
580 :
デフォルトの名無しさん :04/10/01 21:40:22
char *str[]= { "hoge 10000", "hoge2 1000", NULL } とあって、空白までの文字列を別の変数(temp[512][512])へコピーしたい時はどうすれば良いのでしょうか? char temp[512][512]; for(int i=0; str[i]!=NULL; i++) { for(int j=0; str[i][j]!=' ';j++) temp[j][i]=str[i][j]; } これで上手く行きません。 tempへ、数字を除いた空白までの文字列が入ることを望むのですが・・・
temp[j][i]ってわざと?
>>581 jとiが逆でしたね。
でもそれを直しても結果は同じでした。
ちなみに自作のアプリケーションに組み込んでるのですが、この処理を行ってる時点で突然アプリが落ちます。
char temp[512][512];
for(int i=0; str[i]!=NULL; i++)
{
for(int j=0; str[j][i]!=' ';j++)
temp[j][i]=str[j][i];
}
>>582 その処理を自作のアプリケーションから切り離して単独で実行してみ?
そうやって問題の発生箇所を絞り込んでいくのがデバッグのコツ。
>temp[j][i]=str[j][i]; これを抜いてみるとか、 これの代わりにiとjを毎回出力して何回目で落ちるか見てみたら
>>582 まだ逆。
2次元配列について勉強してくると良い
char temp[512][512];
for(int i=0; str[i]!=NULL; i++)
{
for(int j=0; str[i][j]!=' ';j++)
temp[i][j]=str[i][j];
}
586 :
デフォルトの名無しさん :04/10/01 23:20:19
4つの数字1,2,3,4の並び順を全て表示しなさい 例) 1 2 3 4 1 2 4 3 1 4 2 3 :
4次元配列について有効な説明を誰かしうわなにをすr(ry
>>586 #include <algorithm>
#include <iostream>
int factorial(int x){return x == 1 ? 1 : x * factorial(x - 1);}
int main()
{
int a[4] = {1, 2, 3, 4},
count = 0,
num_a = sizeof(a) / sizeof(a[0]),
end = factorial(num_a);
while(count++ < end)
{
for(int iter = 0; iter < num_a; ++iter)
std::cout << a[iter];
std::cout << std::endl;
std::next_permutation(a, a + num_a);
}
return 0;
}
589 :
デフォルトの名無しさん :04/10/01 23:53:07
1回のSEX(挿入時間)が、まぁ平均15分としよう。 1分間でのピストンがおよそ120回(2/sec.)と仮定すれば、 1回のSEXで15×120=1800回はチンポを出し入れされる事になる。 平均的なカップルが週2回、一晩2回SEXすると仮定するならば、 一月に2×2×5×1800=36000、およそ36000回チンポを マンコにピストンされていると概算されるわけだ。 これを、交際している年月に置き換えてみると、3ヶ月男と付き合っている女の子は10万8千回、 一年間付き合っている子は129万6千回、 3年間付き合っている子など驚べき事に なんと388万8千回もチンコを出し入れされている計算になる。 この事実、全く持って驚愕するほか無いといえよう。
2つの関数hogeとageを掛けたり割ったりするにはどうすればいいのですか? double hoge(double a1, double a2){ return(5a1, a2); } と double moge(double a1, double b2){ return(-b1, 8b2); }
??? ちゃんと喋れ
これで十分だと思うが #include <iostream> #include <algorithm> template <typename T> void print_array( const T& t ){ for( int i = 0; i < sizeof( t ) / sizeof( t[ 0 ] ); ++i ) std::cout << t[ i ] << ' '; std::cout << std::endl; } int main(){ int n[] = { 1, 2, 3, 4 }; do{ print_array( n ); }while( std::next_permutation( n, n + sizeof( n ) / sizeof( n[ 0 ] ) ) ); return 0; }
hogeとmogeのパラメータを掛けたり割ったりするにはどうすればいいのですか? double hoge(double a1, double a2){ return(5a1, a2); } と double moge(double a1, double b2){ return(-b1, 8b2); }
>>595 意味ワカラネ
具体的にどれと、どれを掛けたり割ったりしたいんだ?
だいたい、b1ってどっから湧いてきたんだよ?
もしかして、こういう事?
void hoge(double *a1, double *a2){
*a1 = *a1 * 5.0;
}
void moge(double *b1, double *b2){
*b1 = -(*b1);
*b2 = *b2 * 8.0;
}
int main(void){
double age = 4.0, sage = 3.0;
moge(&age, &sage);
printf("age=%f sage=%f", age, sage);
return 0;
}
double hoge(double a1, double a2){ return 5*a1 + a2; } と double moge(double b1, double b2){ return -b1 + 8*b2; } とかじゃねぇの? んなわけねぇか。
599 :
◆FIcNi4f8js :04/10/02 01:36:23
a2ってどこで使うの?
598が正しい題意でした。すみませんでした。
釣りにしか見えない辺りがすげぇなぁ。
#include <stdio.h> main(){ printf("素数"); return 0; }
素数を求めるプログ(ry
#include <stdio.h> main(){ int i; for(;;){ printf("素数をください。お願いします。\n"); }
#include <stdio.h> main(){ printf("お断りだ"); }
#include <stdio.h>
#include "smtp.h"
/* TODO
smtp.h, smtp.c(pp)を作って
SendMail 関数を作っておくこと
void SendMail(
char *addr, // 宛先のメールアドレス
char *subject, // 題名
char *body // 本文
);
*/
int main()
{
char *addr = "
[email protected] "; /* 信頼できる人のアドレス */
SendMail(addr, "助けて下さい!!!", "素数を教えて下さい。お願いします。\nメール待ってます。");
return 0;
}
実在のアドレス使うな!!!
#include <stdlib.h> main(){ system("shutdown -h now"); return 0; }
そのアドレス実在するのか・・・w それは持ってる人自身もサンプルにされるのを覚悟の上だろうw
>>608 (とアドレスの所有者)
す、スマン(;´Д`)
Aクラス、Bクラス、Cクラスの各クラスのデータがそれぞれ A.txt、B.txt、C.txtに保存してある。 形式は各クラス共通で 名前,生年月日,点数 斎藤,19230720,1200 伊集院,19500505,555 田中,19721121,987 田中,19430303,783 田中,19761214,654 三輪,19960616,0 石川,19730823,489 〜 阿部,19800204,500 加藤,19590412,890 高田,19921223,0 井上,19780420,390 井上,19790304,400 井上,19570405,756 井上,19671028,932 中島,19990922,0 西,19400321,564 飯田,19671111,643
といった形にしてある。 各クラスの井上さんを取り出し以下のような形のテキストファイルを作成しなさい。 名前,生年月日,点数 井上,19570405,756 井上,19580618,690 井上,19600509,789 〜 井上,19671028,932 井上,19780420,390 井上,19790304,400 *生年月日順にすること *生年月日が同じ場合は点数の低い方が上にくるようにしなさい *なお各クラスのデータは姓ごとに固まっているこのことを利用すると加点します お願いします。
>>613 > *なお各クラスのデータは姓ごとに固まっているこのことを利用すると加点します
本当なら原点対象にしたい仕様だな
>>616 採点のセンスがCOBOL チックだね。
工夫を見たいんでしょ
>>618 依存する項目が多くなればなるほど、糞コードとなるのは
自明の理。
こんな下らない事に依存するようなコードを書かせていると、
将来DBを学ぶときの妨げになる。
(・3・)エェー 「仮定します」の typo じゃないの
利用することを仮定しちゃうの?
姓ごとに固まっていることをチェックして、 そうでなければ警告をだす様にしとけばよいのでは
>>622 そうやって、どんどん泥沼にはまっていく訳だ。
いつか辿った道だな。
そして泥沼になった先にあるものは…
626 :
デフォルトの名無しさん :04/10/03 19:24:23
>>533 パソコンがダウソして困っておりました。数値と演算子の区切り文字は特に設けず、トークンは
4桁固定とする。
_は空白一文字を意味する
簡単化のためにトークンの文字数を4桁に固定する。
例
入力A =(2+8)/(2+3)
B =A+3
出力 AAA STRAT
LD GR3,=2
LD GR1,=8
・
・
・
みたいになればいいんです。
よろしくおねがいします。遅れてすいませぬ
double func(double A, double B){ return 5A+2B; } のBを配列(40個の要素)にして、forで回すにはどうすればいいのですか? for(i=0;i<40;i++){ funcの書き方が分かりません }
>>628 あなたの言っていることがよく分かりません。 >1 にもあるように
>・問題はしっかりと解いてもらう方にわかりやすいように
> 問題文などの省きはやめ、全文を書きましょう。
double func(double A, double B){ return 5A+2B; } があり、Bの値を0<i<=5のとき0.2,6<i<40のとき0.925としたい。 main(){ for(i=0;i<=5;i++){ B[i]=0.2; } for(;i<40;i++){ B[i]=0.925; } for(i=0;i<40;i++){ //ここの書き方が分かりません。switchまたはif文でBの値を変化させると //遅くなるのでforの外で配列を用いてiに対応するBの値をあらかじめ求めて //おきたいんです。お願いします。 } }
>>630 funcにコンパイルエラーがあるのですが・・・。
つーか、速くしたつもりで遅いコードかいてる君に乾杯。
そもそも5A+2Bって何だ。5*A+2*Bのつもりか?
5*A+2*Bのつもりか? その通りです
>>630 Bが配列じゃないときの書き方はわかってんのか?
マジレスしてしまった・・・。
ネタ確率90%以上・・・。
>>631 配列を用意するコストを無視しても遅くなったっけ?
>>630 error :
>>630 line 0 : 5A+2B : 識別子5Aは宣言されていません。
error :
>>630 line 0 : 5A+2B : 識別子2Bは宣言されていません。
error :
>>630 line 4,6,7,9,10,12 : i : 識別子iは宣言されていません。
error :
>>630 line 5 : main(){ : 関数mainに戻り値の型intが指定されていません。
error :
>>630 line 7,10 : B[i] : 識別子Bは宣言されていません。
error :
>>630 line 13-15 : comment : funcにAとして何を渡すのか指定されていません。
error :
>>630 line 13-15 : comment : funcの戻り値の使用方法が指定されていません。
致命的なエラーが複数発生しました。
回答者はこのコードをコンパイルすることが出来ませんでした。
> error :
>>630 line 4,6,7,9,10,12 : i : 識別子iは宣言されていません。
> error :
>>630 line 5 : main(){ : 関数mainに戻り値の型intが指定されていません。
> error :
>>630 line 7,10 : B[i] : 識別子Bは宣言されていません。
これはサンプル程度だろうし、この辺は別に良いんじゃない。
warningぐらいにしとくとか。
それは一種の精神疾患だ。治し方は俺が知っている。俺に任せろ
>>627 最終的に出力するトークンの指定は?
その例だとAを出力すればいいのかBを出力すればいいのかわからん
>>638 俺も。
>>635 VC.NET 2003で計測しました。
最適化で消えちゃ困るので関数はインライン化なし。
変数はカウンタを除いて volatile。
配列を使用しない場合(ループ毎に if で振り分け、Bに定数使用)= 133
〃(Bに変数使用)= 178
〃(if じゃなくて?:、定数使用)= 221
〃 (if じゃ無くて?:、変数使用)= 218
配列を使用した場合(配列への代入は済ませておく)= 190
100回繰り返してはじめと終わりの高分解能パフォーマンスカウンタの差。
それぞれ何回か行ったが誤差は±1程度。
(大きくずれることもあるが別プロセスの影響と判断して無視)
実際の何秒に相当するかは調べてません。
ループは展開してくれるかと期待したのですがしてくれませんでした。
?: は遅いらしい。
ハードウェアの動作を熟知した上でアセンブリで書くのが一番速い はず。 そして、俺は無理。
CalcTotalの/と%を入れ替えてみたら?
>>640 とりあえず書いてあった出力を全部かきます
AAA START
LD GR3,=2
LD GR1,=8
ADDA GR3,GR1
LD GR4,=2
LD GR1,=3
ADDA GR4,GR1
LD GR1,GR3
LD GR2,GR4
CALL DIV
LD GR5,GR1
ST GR5,A
LD GR3,A
LD GR1,=3
ADDA GR3,GR1
ST GR3,B
LD GR0,A
CALL NUMOUT
LD GR0,B
CALL NUMOUT
RET
A DS 1
B DS 1
END
>>643 おそらくだめとおもわれ
>>648 >645の指摘は、全部の'/'と'%'の入れ替えだ(と思う)よ。
それから、.exeなんて添付しても誰も見てくれないと思われ。
>>649 さん
なるほど、できました。ありがとうございました。
添付ファイルの件は了解です。
>>614-615 ありがとうございます。
error C2664: 'qsort' : 4 番目の引数を 'int (const struct tagData *,const struct tagData *)' から
'int (__cdecl *)(const void *,const void *)' に変換できません。 (新しい機能 ; ヘルプを参照)
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。
とエラーが出て動きません。
>>651 =612
関数cmp()の引き数を構造体へのポインタからvoid*に変更して、
関数内部でキャストすればよろしい。
つーか、>615が詰めが甘いのだね。
c++でコンパイルしてるからだろ。
年月日を2回入力して,1回目に入力された年月日から2回目に入力さ れた年月日までの日数を数えるプログラムを作りなさい. Cです。よろしくお願いします。
オレに命令するな!
追記 入力形式は 年/月/日
658 :
デフォルトの名無しさん :04/10/04 23:38:07
>>658 入力はどんなの?
HOGE 3
FUGA
2
FOO 12 BAR
0
とかもあるの?
すいませんC++でコンパイルしてました。 ご迷惑をおかけしました。
>658 void InputMJ_list( MJ_list* ptr ) { printf( "Name:" ); scanf( "%s", ptr->name ); printf( "Houmuran:" ); scanf( "%d", &ptr->homerun ); } という関数を作って /* リストのトップデータ */ hd=(struct MJ_list*)malloc(sizeof(struct MJ_list)); InputMJ_list( hd ); hd->pointer = NULL; /* 第二リストデータ */ p1=(struct MJ_list*)malloc(sizeof(struct MJ_list)); InputMJ_list( p1 ); p1->pointer = NULL; hd->pointer=p1; /* 第三リストデータ */ p2=(struct MJ_list*)malloc(sizeof(struct MJ_list)); InputMJ_list( p2 ); p2->pointer = NULL; p1->pointer=p2; これでおk あと printf("5d\n",sum); じゃなくて printf("%5d\n",sum); な
662 :
658 :04/10/05 00:44:26
>>659 HOGEとかって何ですか?ごめんなさい〜わかりません。
入力は ICHIRO 10 みたいな感じです…。
JIRO 20
627のものですが 作ってもらえませんかね? 本当に困ってるんですが
マンドクセ('A`) のでオレはパス。↓宜しく
俺は作るほど暇じゃないがこれぐらいなら、作ってあげれよ そのためのスレだろ?
うお、かぶっちまった(;´Д`) こっちのはダメダメぽいから放置でヨロ(´・ω・`)ノシ
673 :
デフォルトの名無しさん :04/10/05 18:01:03
お願いします。 C++の問題でVisualStudioを使っております。CUI環境で結果はDOS窓に表示するものです。 問1 整数を記憶するスタックを表すクラスを作り、それを利用したプログラムを作りなさい。 ・スタックは、データをLIFOで記憶取り出しを行う。 ・スタックの機能として、Push(記憶)、pop(取り出し)をもとせること。 問2 整数を記憶するリストを作り、それを利用したプログラムを作りなさい。 ・リストは、線形の片方向リストでよい。 ・リストへの要素の追加は、先頭に追加するのみでよい。 ・リストの要素は、データ部とポインタ部を持つノードとして作る。 ・ノードは、構造体でもクラスでも可。 御手数おかけしますが、何卒よろしくお願いいたします。
STLをコピペしる!Q
俺宛じゃなかったか。命拾いしたな。
問1 class int_stack : public std::stack< int >{}; 問2 class int_list : public std::list< int >{};
すみません、説明が不足していました。 テンプレートなどは使わずに実際に作れという宿題なのです。 また、学校ではVisualStudioをを使用していますが、 今現在はBorlandC++コンパイラーを使用しております。 御手数おかけしますが、何卒よろしくお願い致します。
車輪の再発明はつまらないからなかなか答えてもらえない。
680 :
デフォルトの名無しさん :04/10/05 18:58:04
車輪って何?
テンプレートも使っちゃいけないって意味分かんね。 template機能が禁止ってこと?それともSTL禁止のつもりだったん?
#include <stdlib.h> class MyStack { int *stk; int pt; int max; public: MyStack() { stk = NULL; pt = 0; max = 0; } ~MyStack() { free(stk); } bool push(int num) { if(pt >= max){ max += 128; stk = (int *)realloc(stk, sizeof(int) * max); if(stk == NULL) return false; } stk[pt++] = num; return true; } int pop() { if(pt <= 0) return -1; return stk[--pt]; } };
stackは例外安全、例外中立にしてください
例外出る場所ねーぞ?
stk = (int *)realloc(stk, sizeof(int) * max); realloc に失敗すると stk 消えます。
そこでリソースの獲得とは初期化イディオムですよ
C++でreallocかよプッ
>>678 でテンプレート使うなって書いてあるけどいいのか?
ちょっと書き換えれば大丈夫じゃん
695 :
デフォルトの名無しさん :04/10/06 01:58:57
どうも
>>673 は根本的にわかってなさそうな気がする。
696 :
デフォルトの名無しさん :04/10/06 10:43:44
どうかこの問題をお願いします↓ まず,ファイルにデータの個数nと,その個数分のデータ(整数データ)を保存する. プログラムinsert.cは,まずファイルからnを読み込み,その数だけデータを読み込み,挿入ソートを実行する.そして最後にソート結果を表示する. データ例↓ 10 6 4 1 2 7 5 0 9 8 3 C++です
>>696 int main(int argc, char* argv[])
{
// TODO: この位置にファイルを開く処理を書く
// TODO: この位置にnを読み込む処理を書く
// TODO: この位置にデータを読み込む処理を書く
// TODO: この位置に挿入ソートの処理を書く
// TODO: この位置に結果を表示する処理を書く
}
698 :
デフォルトの名無しさん :04/10/06 11:36:27
>>697 これで何とかなりそうです
どうもありがとうございます
699 :
デフォルトの名無しさん :04/10/06 11:42:13
>699 特定しますた! あとで食堂の裏にプリンもってきたら教えてやるよ
>>696 引数でファイル指定. エラー処理無し
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> Data;
ifstream fin(argv[1]);
int loop;
fin >> loop;
while (loop--) {
int hoge;
fin >> hoge;
Data.push_back(hoge);
}
for (int j = 1; j < Data.size(); j++) {
int key = Data[j];
int i;
for (i = j - 1; i >= 0 && Data[i] > key; i--) { Data[i + 1] = Data[i]; }
Data[i + 1] = key;
}
for (vector<int>::iterator i = Data.begin(); i != Data.end(); i++) { cout << *i << endl; }
return 0;
}
>>697 #include <fstream>
#include <vector>
#include <ostream>
int main(int argc, char* argv[]) {
if (argc <= 1)
return 0;
// ファイルを開く処理
std::ifstream ifs(argv[1]);
//nを読み込む処理
int n;
ifs >> n;
//データを読み込む処理
std::vector<int> Data;
for (int i = 0; i < n; i++) {
int x;
ifs >> x;
Data.push_back(x);
}
//挿入ソートの処理
for (int i = 1; i < n; i++)
for (int j = i; j > 0 && Data[j - 1] > Data[j]; j--) {
int x = Data[j - 1];
Data[j - 1] = Data[j];
Data[j] = x;
}
//結果を表示する処理
for (int i = 1; i < n; i++)
std::cout << Data[i] << std::endl;
}
>//挿入ソートの処理 > for (int i = 1; i < n; i++) > for (int j = i; j > 0 && Data[j - 1] > Data[j]; j--) { > int x = Data[j - 1]; > Data[j - 1] = Data[j]; > Data[j] = x; > } バブルソートに見えるのは気のせい? fuga.cc: In function `int main(int, char**)': fuga.cc:28: error: `cout' undeclared in namespace `std'
こんな感じか挿入エロソートって for(i=0;i<n;i++){ ifs >> x; for(j=0;j<i;j++){ if(x<Data[j]){ for(k=i;k>j;k++){ Data[k]=Data[k-1]; } Data[j]=x; break; } } }
706 :
デフォルトの名無しさん :04/10/06 16:57:23
お願いします。 2以上の整数Nをキーボードから入力すると、Nを偶数部と奇数部に分解しそれを表示するプログラムを記述せよ。(例えば、Nとして1800を入力すると1800=2^3x225と表示したい。) C言語です。
整数値の上限は?
708 :
デフォルトの名無しさん :04/10/06 17:23:10
上限は特にないみたいです。
>>706 #include <stdio.h>
int main(void)
{
int n;
int count = 0;
scanf("%d", &n);
while (n % 2 == 0) {
n /= 2;
count++;
}
printf("2^%d * %d\n", count, n);
return 0;
}
710 :
706 :04/10/06 17:44:48
ありがとうございます。 助かりました。
711 :
デフォルトの名無しさん :04/10/06 20:11:44
|123456789 ーー+−−−−−−−−− 1|123456789 2|24681012141618 3|369121518212427 4|4812162024283236 5|51015202530354045 6|61218243036424854 7|71421283542495663 8|81624324048566472 9|91827364554637281 と表示されるプログラムを教えてください。 C++は初心者なのでかなり悩んでます 誰か助けてください
712 :
デフォルトの名無しさん :04/10/06 20:12:32
|123456789 ーー+−−−−−−−−− 1|123456789 2|24681012141618 3|369121518212427 4|4812162024283236 5|51015202530354045 6|61218243036424854 7|71421283542495663 8|81624324048566472 9|91827364554637281 と表示されるプログラムを教えてください。 C++は初心者なのでかなり悩んでます 誰か助けてください
713 :
初心者 :04/10/06 20:13:05
|123456789 ーー+−−−−−−−−− 1|123456789 2|24681012141618 3|369121518212427 4|4812162024283236 5|51015202530354045 6|61218243036424854 7|71421283542495663 8|81624324048566472 9|91827364554637281 と表示されるプログラムを教えてください。 C++は初心者なのでかなり悩んでます 誰か助けてください
#include <iostream> using namespace std; int main() { cout << " |123456789 " << endl; cout << "ーー+−−−−−−−−− " << endl; cout << " 1|123456789 " << endl; cout << " 2|24681012141618 " << endl; cout << " 3|369121518212427 " << endl; cout << "4|4812162024283236 " << endl; cout << " 5|51015202530354045 " << endl; cout << " 6|61218243036424854 " << endl; cout << " 7|71421283542495663 " << endl; cout << " 8|81624324048566472 " << endl; cout << " 9|91827364554637281" << endl; return 0; }
日記 10月6日 雨 姫野ベンチがしたくて、ifc(ifort)入れた。 おもしろかった。 C ふぉとらん implicit none integer i, j, tmp do i = 1, 9 do j = 1, 9 tmp = i * j write(*,*) i, ' * ', j, ' = ', tmp enddo enddo pause do i = 1, 10 write(*,*) 'ふぉーーーー', i enddo end
#include<stdio.h> int main(void){ int i,j,z[9][9]; for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ z[i][j]=i*j; printf("%2d ",z[i][j]);} printf("\n");} return 0; }
#include<stdio.h> int main(void){ int i,j; char wnum[][] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ printf((i*j>9?"%d":"%s"),(i*j>9?i*j:wnum[i*j]));} printf("\n");} return 0; }
2つ以上の[]が許されるようになったのかC99は?
C99でも無理だろ。 char *wnum[] = 〜;にしないと。
(・3・) エェー こっちのトリップも良いNE
722 :
デフォルトの名無しさん :04/10/07 22:45:46
Cです。 標準入力から現れた大文字は小文字に、小文字は大文字に、 そのほかはそのままに変換するプログラムをつくれ。 #include <stdio.h> int main(void) { int ch,count=0; while((=getchar()) != EOF ) if( { } ) ch+= { } ; eise if( { } ) ch-= { } ; putchar(ch); } return(0); } { } の中身が分かりません。 お願いします。
ウホッw LISP?
if (isupper(ch)) ch = toupper(ch); else if (islower(ch)) ch = tolower(ch);
#include <stdio.h> int main(void) { int ch,count=0; while((ch=getchar()) != EOF ) { if( ch >= 'a' && ch <= 'z' )ch+= 'A' - 'a' ; elseif( ch >= 'A' && ch <= 'Z' )ch-= 'A' - 'a' ; putchar(ch); } return(0); }
>726 EBCDICならアウツw
なんかムシャクシャしていたのであえて無視してみた。
730 :
初心紗 :04/10/07 23:51:22
授業の課題で、ファイルの16進数ダンプをするプログラム(DOS )を作成しなければいけません。おねがいだれかつくって。 も〜う、憂鬱で夜も眠れません。
とりあえず問題文を全部書き写せ
733 :
初心紗 :04/10/07 23:57:25
マルチって何? 【補習課題】 ファイルダンプ(バイナリファイルの入力) コントロールブレイクの課題が完了した方は、バイナリファイルの入力を習得しましょう。 機能仕様:指定されたファイルの内容を16進数でダンプ表示する。 インターフェイス: C:\> FILDMP.EXE 入力ファイル名
なんだマルチかよ
735 :
初心紗 :04/10/08 00:06:56
別の板で、質問したら、もうバカかアホかとののしられ・・・
別の板で、質問したら、もうバカかアホかとののしられ・・・ ~~~~~~~~~~ これがマルチ。2chの人達は複数のスレで訊かれると「信用されてないな」 と考え、答えることを拒否します。 早く答えが欲しいと複数のスレに書き込むことは逆効果。
737 :
デフォルトの名無しさん :04/10/08 00:14:44
ポワソンの右辺の関数g(x,y)が g(x,y)=exp((x-1/2)^2+(y-1/2)^2) のとき、Gaussの消去法を用いてポワソン方程式を解くプログラムを作成する。 内点は10×10として境界上ではz=0とする。 ------------------------------------------------------ この課題の考察を考えよ。 ダレカお願いします、、
考察を考えよって面白い問題だな。
>>733 まあ雛型だけ書いてやるよ。このまま提出しても5点くらいしかやらないだろうな。俺なら。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
FILE *fp;
int in;
if ((fp = fopen(argv[1], "r")) == NULL) {
printf("file open error!!\n");
exit(1);
}
while ((in = fgetc(fp)) != EOF) {
printf("%02X ", in);
}
fclose(fp);
return 0;
}
サンプルのEXEでは、以下のようにでます。 HEXDMP(bookq.htm) [00000001] 3C48544D 4C3E0A3C 48454144 3E0A3C6D * <HTML>.<HEAD>.<m * [00000017] 65746120 68747470 2D657175 69763D22 * eta http-equiv=" * [00000033] 436F6E74 656E742D 54797065 2220636F * Content-Type" co * [00000049] 6E74656E 743D2274 6578742F 68746D6C * ntent="text/html * [00000065] 3B206368 61727365 743D782D 736A6973 * ; charset=x-sjis * [00000081] 223E0A3C 5449544C 453E8341 83938350 * ">.<TITLE>アンケ * [00000097] 815B8367 3C2F5449 544C453E 0A3C5354 * ート</TITLE>.<ST * [00000113] 594C4520 54595045 3D227465 78742F63 * YLE TYPE="text/c * [00000129] 7373223E 0A41207B 74657874 2D646563 * ss">.A {text-dec *
>>741 この野郎、後になって問題につけたししやがって!!!ふざけるな!!!
5点ではなあ〜はああ 落第じゃん。
>>741 よりは一般的な出力になっていると思われ。
ダンプ松本?
std::cout って習ってないというか・・・ ::って何でしょうか?
>>747 文句ばっかりだな。礼のカケラもないし。
>>747 習ってないからって即座に音を上げるな。
「using namespace std」とかでぐぐったら出てこない?
とりあえず、名前空間について調べろ。
もしかしてC++は蚊帳の外なのか…せっかく今頑張って作ったのに(ToT)
ごみん・・・ 礼を言う暇もなかったですが・・・ C++は前人未踏の世界です。
無礼にも程がある
前人未踏って(w 「君が」未踏なんだろ?
ところでさ、宿題スレって要らなくない? こんなバカが増えるだけじゃないの?
>>756 宿題スレは必要だ。
CやC++スレに持ってこられたらそれこそ迷惑だからな。
要するに昔微妙に流行った広告ホイホイみたいなもんか
初心者ですからスレの違いなんてわかりませんよキモヲタども みたいな態度でどこの関連スレにも現れるのが現状ですが・・・
>733 #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]) { FILE* pFile; char acBuf[16]; char acLine[79+1]; char acTmp[8+1]; unsigned char uc; int iCount; int iRead; int i; if(argc != 2) { fprintf(stderr, "Usage: fildmp filename\n"); return 1; }
pFile = fopen(argv[1], "rb"); if(pFile == NULL) { fprintf(stderr, "ファイルのオープンに失敗しました。\n"); return 1; } for(iCount = 0; ; iCount += 16) { memset(acLine, ' ', 79); sprintf(acTmp, "%08X", iCount); memcpy(acLine, acTmp, 8); iRead = fread(acBuf, 1, 16, pFile); for(i = 0; i < iRead; i++) { uc = (unsigned char)acBuf[i]; sprintf(acTmp, "%02X", uc); memcpy(acLine + 9 + i * 3, acTmp, 2); acLine[57 + i] = isgraph(uc) ? (char)uc : '・'; } acLine[79] = 0x00; printf("%s\n", acLine); if(iRead != 16) { break; } } fclose(pFile); return 0; }
そう言えば宿題の採点結果がどうだったかを書き込むやつは見たこと無いな。
そんなもん学期末になるまで,誰も気にしねぇだろ。 A取らなきゃ気がすまない,絶対あのゼミ行くぜ!, って奴なら別かもしれんが,そんな奴ぁはここに来ない。
764 :
デフォルトの名無しさん :04/10/08 10:40:39
2ちゃんのdat形式のファイルID取り出しがうまくいかないorz 名前や本文にに <>とか空白とか含めることできるから、なかなかいい方法が見つからないorz なんかいい方法教えてくださいorz
人生の宿題でつよ。
>>764 datをよく見よ。
<は<>は>で区切り以外で<>は出てこない。
例外でトリップがあると名前</b>トリップ<b>という風になっている。
他にも♥など詳しくは html 特殊文字 でぐぐれ。
すまん datをよく見よ。 <は&lt; >は&gt;で区切り以外で<>は出てこない。 例外でトリップがあると名前</b>トリップ<b>という風になっている。 他にも&hearts;など詳しくは html 特殊文字 でぐぐれ。
ネコミミモードです♥
>>768 あ、そっかなるほど。わかったよ(`∇´*)ノオウ!!
ありがとd(*´`)
&くらい使えよ
任意の動画ファイルを読み込んで輝度値を2〜5倍して出力しなさいと言う問題があるのですが 動画ファイルの読み込みがうまくいかずになんともなりません。 誰か教えていただけませんか?
>>772 どううまくいかないのか具体的に述べよ。
>>773 えーと、元のファイル「test.avi」っていうのがあったとして
それの輝度値を変えたのが「test2.avi」としますよね
このtest2.avi自体は生成されるんですけど、開こうとしたりプロパティ見ようとすると
アプリケーションの強制終了が起こるんです。
んで、動画の各フレームを読み込む部分が悪いのかなと思ってそこをいじってたら
ワケが分からなくなってしまったので質問したんです。もう丸々一から作り直そうかと思ってます。
で、その際にまたファイルの読み込み部でエラー起こったらイヤなので その辺りを教えていただければと。ちなみにCです。
ファイルフォーマットを詳しく書かないと無理 APIで読むならスレ違い
ヘッダなしで1ドットあたりに8bitの信号が並んでいるものです。 720*480でYUV信号がTOPとBOTTOMで半分ずつになっているようなものです。
CIAから送られた座標データをCプログラムで判断して 仮に[x,y]=[1,0]なら "そこは日本です。"とCIAagentに返すプログラムを教えてくだない。
>>779 死ねってなんだよこのやろう。
お前、俺が死んだら責任とれんのか?
人にはいっていいことと悪いことがあんだよ。
そんなこともわかんねえのか?プログラムなんかやってないで
もっと人間としてのマナーを学んだほうがいいんじゃない?
だいたい君、たいした実力もないのに、下を見て悦になるタイプでしょ。
いややわあそんなの。向上心持とうぜうんこちゃんw
いや、まだ怒りがおさまりません。
こっちが必死になって聞いているのに
無下に投げ捨てるその態度もさることながら
死ねなどという私の尊厳を無視した対応には
大変遺憾である。
>>779 さんにはぜひとも謝罪を要求したく思います。
わかったな、たかし。
コピペ? ま、どっちにしろ面白くも何とも無いが
┌───────────────────
│あ、どうもスイマセン、
>>780 がお騒がせしました・・・
└───v───────────────
/⌒\ っ /\
/'⌒'ヽ \ っ/\ |
(●.●) )/ |: | すぐ連れて逝きますんで・・・
>冊/ ./ |: /
/⌒ ミミ \ 〆
/ / |::|λ| |
|√7ミ |::| ト、 |
|:/ V_ハ |
/| i | ∧|∧
и .i N /⌒ ヽ)
>>780 λヘ、| i .NV | | |
V\W ( 、 ∪
|| |
∪∪
(((((;゚д゚)))))ガクガクブルブル
↑
>>779 WWW
何だ。釣りかキチガイか。
この俺の願いを叶えてくれる優しいプログラマーいない?
とりあえず書いてみろ
>>787 あまりにも図々しい願いだからちょっと気が引けてるの(;´Д`)
とりあえずプログラムかじったこともない自分だけどあと6時間ぐらい
自分で考えてやってみる
じゃあ書くなよカスが
ドラゴンボールを集めてきたら 願いを叶えてやらんでもない。
791 :
デフォルトの名無しさん :04/10/09 11:36:55
くそここは厨の掃き溜めかよ。
793 :
791 :04/10/09 13:04:11
本当に嫌なスレだよ。
単に状況を嘆くスレしただけでいちいち
>>792 のような
煽りがつく。もうこのスレの汚さに吐き気さえ催すよ。
>>792 もういいかげんそういうの止めろよ。みんな迷惑してるぞw
2行目 スレ→レスな。 どうせ修正しないと、ねちっこく叩いてくるんだろ? もうあきあきしてるんだよ、そういうの。 もっと寛大な心でいられないものかねえ。
795 :
デフォルトの名無しさん :04/10/09 13:07:35
またアンチぼるじょあが暴れているのか。
【ネタ投入】 標準入力から入力を読み取って標準出力に出力する電卓プログラムを書け。 ただし、次の演算子、関数をサポートすること。変数に対応する必要はない。 (単項演算子)+, - (2項演算子)+, -, *, /, % (関数)sin, cos, tan, arcsin, arccos, arctan, sec, cosec, cot, sinh, cosh, tanh, arcsinh, arccosh, arctanh, log10(底が10の意), log2(底が2の意), log(底がe), exp, pow
797 :
ぼるじょあ ◆yBEncckFOU :04/10/09 13:15:53
課題が出たのですが分からないので教えてください この間に、英文テキストファイル(単語数100語程度)を用意し、 これを処理するプログラムをつくります。 プログラムは、 (1)テキストファイルを単語ごとに区切る (2)単語をソートして並べ替える (3)ファイルに保存する という流れで作ってください ↑という問題です 初心者にも分かりやすくお願いします
awk,sortを使ってはダメか?
system()等を使って
>>798 #include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <boost/tokenizer.hpp>
int main(){
std::string filename, line;
std::vector<std::string> words;
std::getline( std::cin, filename );
std::ifstream ifs( filename.c_str() );
while( std::getline( ifs, line ) )
{
typedef boost::char_separator<char> myseparator;
typedef boost::tokenizer<myseparator> mytokenizer;
typedef mytokenizer::iterator iter;
myseparator sep( " \t" );
mytokenizer tokens( line, sep );
for( iter it = tokens.begin(); it != tokens.end(); ++it )
words.push_back( *it );
}
std::sort( words.begin(), words.end() );
ifs.close();
std::ofstream ofs( "out.txt" );
for( std::vector<std::string>::iterator it = words.begin(); it != words.end(); ++it )
ofs << *it << std::endl;
ofs.close();
return 0;
}
>>801 ありがとうございます!!
これからやってみます!!
void sortAndOut(const char * inFileName, const char * outFileName) { char * p = new char[strlen(inFileName) + strlen(outFileName) + 30]; sprintf(p, "xargs -n1 echo < %s | sort > %s", inFileName, outFileName); system(p); }
あー、deleteするの忘れたよ。
806 :
デフォルトの名無しさん :04/10/09 15:28:32
>>801 宿題なんだから標準以外のライブラリを使うなってw
行数制限に合わせるために激しく醜いが、一応標準だけ。 #include <algorithm> #include <iostream> #include <iterator> #include <fstream> #include <string> #include <vector> int operation(const char* input_name, const char* output_name) { std::ifstream input(input_name); if (!input) return -1; const char delimiters[] = " \t,.;:\"?!"; std::vector<std::string> words; std::string line; while (getline(input, line)) { std::string::size_type start_index = line.find_first_not_of(delimiters); while (start_index != std::string::npos) { std::string::size_type end_index = line.find_first_of(delimiters, start_index); if (end_index == std::string::npos) end_index = line.length(); if (end_index - start_index != 0) words.push_back(line.substr(start_index, end_index - start_index)); start_index = line.find_first_not_of(delimiters, end_index); } } std::sort(words.begin(), words.end()); std::ofstream output(output_name); if (!output) return -1; for (std::vector<std::string>::iterator first = words.begin(), last = words.end(); first != last; ++first) output << *first << std::endl; return 0; } int main(int argc, char* argv[]) { if (argc != 3) {std::cout << "invalid arguments!" << std::endl;return 1;} else return operation(argv[1], argv[2]); }
open InFile, "Input.txt"; # 入力用ファイルを開く my $FileInputContents = join '', <InFile>; # 文章を1文字列として変数に読み込み close InFile; my (@Words) = $FileInputContents =~ /(\w+)/g; #文章から単語を抽出し、配列に入れる @Words = sort { $a cmp $b } @Words; # 配列に入っている単語をソート open OutFile; # 出力用ファイルを開く print OutFile join ' ', @Words; close OutFile; ----------------------------------------- まぁ、これはPerlだわな。 だが一旦中間的に落としているものとしてはわかりやすい(目的と合致しとるし) C++でも上の入力と出力は簡単にできる。 真ん中の部分をいかにC++で書くかが問題だが、「課題」であれば、ソートを 使用してはなんの意味もないだろう。 課題の目的は ・「トークンへと分解するのを自作のアルゴリズムでできるか」 ・「単語同士を比較してソートするのを自作のアルゴリズムでできるか」 ってことだ。よってここは標準関数(クラスメソッド含め)使用すべきではないと思う。 (そうでなければ、何の思考の鍛錬にもつながらないので意味を成してない。) あとは自分でやりなされ。
798がC++を使ってプログラム手法を学んでいるのか 単にC++を学んでいるのかによるな。
単にCを学んでいるという可能性もあるな。
Cだとコールバック書くのがウザイからなあ
>>807 std::set に突っ込めよと思うのは気のせい?
確かに宿題でboostはやりすぎだなw
>>812 std::multiset(おそらく複数の同一要素を格納する必要があるから)は
俺も考えたんだが、ただvectorを後で一気にソートしたほうが早い
のではないかと思ったから。実験してないけど。
815 :
デフォルトの名無しさん :04/10/10 01:47:55
#include <iostream.h> #include <fstream.h> class coord{ private: int x, y; public: coord(int a = 0, int b = 0){x = a; y = b;} friend ostream& operator<<(ostream& stream, coord ob); friend istream& operator>>(istream& stream, coord& ob); }; ostream& operator<<(ostream& stream, coord ob){ stream << " x: " << ob.x << " y: " << ob.y << endl; return stream;} istream& operator>>(istream& stream, coord& ob){stream >> ob.x >> ob.y; return stream;} int main(){ coord a(10, 20), b(30, 40), c, d; ofstream out("test"); out << a << b; out.close(); ifstream in("test"); in >> c >> d; cout << c << d; in.close(); return 0; } using namespace std;にしてないのは、VC++6.0を使ってて、operator<<でエラーが出るからです。 で、お聞きしたい事は、結果が10 20 30 40と得られると思ったのですが、実際は0だけにしかなりません。 どうすれば、望んだ結果を得ることができるのでしょうか? お願いします。
>>815 失敗したのは c, d の出力だけ?
ストリームに数値と別に "x:" や "y:" が挿入されてるせいで int にちゃんと変換できていないと思われ。
817 :
デフォルトの名無しさん :04/10/10 02:28:47
>>816 失敗したのはc、dだけです。
どこを変えたいいんでしょうか?
>>817 とりあえず " x: " や " y: " を消して、ob.x と ob.y を ' ' で区切って出力するだけにしてみ
819 :
デフォルトの名無しさん :04/10/10 02:41:08
>>818 あっ できました・・・。
これってどういう事なんでしょうか?
なぜ文字を消して、' 'を書くことでうまくいったんでしょうか?
良く嫁やボケ
もしかして、釣りだったとか?
>>815 > stream << " x: " << ob.x << " y: " << ob.y << endl;
で出力が「 x: 10 y: 20(改行)」になるよな。んで
> stream >> ob.x >> ob.y;
「x:」とか「y:」はどこで読み込むんだい?
(・3・)エェー チミ の宿題どんどん片づけちゃうよー.オイデオイデー.
>>824 試験結果に慄く君を見られるなら喜んでさせて頂く
827 :
デフォルトの名無しさん :04/10/11 06:38:11
>>827 7c7
< for (int j = 0; i < ToNum; j++)
---
> for (int j = 0; j < ToNum; j++)
CASLアセンブラを設計し、プログラムを作成しなさいという課題なんですが教えてください。Cでおねがいします。 (1)アセンブラは、例1に示すようなソースファイルを読み込み、例2の形式で結果をファイルに出力する。 (2)変換処理は2パス形式とし、1パス目にラベルの登録を行い2パス目に各コード変換を行って出力する。 (3)内部で処理される主となるデータの構造体をきちんと定義する。 (4)入力ファイルは、大文字、小文字、タブなどの文字を想定して認識できるようにする。
(例1) 入力ファイル例 push 0,gr1 ;レジスタの退避 push 0,gr2 ; push 0,gr3 ; ld gr2,2,gr4 ;翻訳アドレスを初期化する dis_10 cpl gr2,1,gr4 ;逆アセンブルの終了条件を調べる jmi dia_20 ;逆アセンブルの実行 jmp dia_90 ;逆アセンブルの終了 dis_20 lea gr3,dbuff ;編集バッファアドレスを初期化する lea gr0,0 ; st gr0,esize ;編集データサイズを初期化する ld gr0,ebufs ;GR0=編集バッファサイズ lea gr1,0,gr3 ;GR1=編集バッファアドレス call clrbuf ;編集バッファをクリアする lea gr0,gr2 ;GR0=翻訳アドレス、GR3=編集バッファアドレス
(例1) 入力ファイル例 push 0,gr1 ;レジスタの退避 push 0,gr2 ; push 0,gr3 ; ld gr2,2,gr4 ;翻訳アドレスを初期化する dis_10 cpl gr2,1,gr4 ;逆アセンブルの終了条件を調べる jmi dia_20 ;逆アセンブルの実行 jmp dia_90 ;逆アセンブルの終了 dis_20 lea gr3,dbuff ;編集バッファアドレスを初期化する lea gr0,0 ; st gr0,esize ;編集データサイズを初期化する ld gr0,ebufs ;GR0=編集バッファサイズ lea gr1,0,gr3 ;GR1=編集バッファアドレス call clrbuf ;編集バッファをクリアする lea gr0,gr2 ;GR0=翻訳アドレス、GR3=編集バッファアドレス
(例2) 出力ファイル例 LINE ADDR OBJECT SOURCE 1 0000 7001 0000 push 0,gr1 ;レジスタの退避 2 0002 7002 0000 push 0,gr2 ; 3 0004 7003 0000 push 0,gr3 ; 4 0006 1023 0002 ld gr2,2,gr4 ;翻訳アドレスを初期化する 5 0008 4124 0001 dis_10 cpl gr2,1,gr4 ;逆アセンブルの終了条件を調べる 6 000A 6100 000E jmi dia_20 ;逆アセンブルの実行 7 000C 6400 004E jmp dis_90 ;逆アセンブルの終了 8 000E 1230 0056 dis_20 lea gr3,ebuff ;編集バッファアドレスを初期化する 9 0010 1200 0000 lea gr0,0 ; 10 0012 1100 00A7 st gr0,0 ;編集データサイズを初期化する 11 0014 1000 00A6 ld gr0,esize ;GR0=編集バッファサイズ 12 0016 1213 0000 lea gr1,0,gr3 ;GR1=編集バッファアドレス 13 0018 8000 00AD call clrbuf ;編集バッファをクリアする 14 001A 1202 0000 lea gr0,0,gr2 ;GR0=翻訳アドレス、GR3=編集バッファアドレス
すいません。例1を間違えて2回やってしまいました・・・
>830 レベル高杉。ボソッ
ちょっと時間掛かりそうだな
こんなのできねーよ。 熟練プログラマじゃないと。
じゃあ、熟練じゃない(アマ)プログラマの俺が挑戦してやるよ
すいません、ありがとうございます。 しかしそんなに難しいものを出してくるオレの学校っていったい・・・ できている人いるのだろうか・・・
余因子行列を展開するプログラムを教えて下さい。
>>839 宿題としては大掛かりすぎるけど、期末課題としてなら妥当では。
本気で取り組めば出来ない問題ではないかと。
ただ掲示板で手軽に答えられるほど簡単じゃないな。
オレも卒業課題でCASLコンパイラの作成したなぁ 実際に作ろうとすると、仕様をもっと深く決めないといけない
俺は授業でCコンパイラ作らされた罠
漏れもCコンパイラつくったけど、教科書どおりにやってただけで 自分で1からは無理ぽね。
命令に対応するコードって自由に作っていいんだよな。。。
特に指定がないので多分いいと思います。
時間かかりそ〜。マクロ命令なんてのもあるんだ
848 :
デフォルトの名無しさん :04/10/11 23:35:47
お願いします。 問: 正の整数aとbを入力し、aのb乗を求めるプログラム。 反復処理を用いよ。
/* int a = ?, b = ?; */ int i, n; n = 1; for(i = 0; i<b; i++) n *= a; printf("%dの%d乗は%dです。", a, b, n);
すぐオーバーフローしそう
851 :
848 :04/10/11 23:56:46
本当にすみません!! c++でお願いします。書き忘れましたすみません。
852 :
デフォルトの名無しさん :04/10/11 23:58:26
849はC++だろうが
CはC++に部分集合として含まれる。よってCのコードはすなわち C++のコードでもある。
じゃあ、C++風に・・・ // #include <iostream> // int a = ?, b = ?; // ... int main()とか int n = 1; for(int i = 0; i < b; i++) n *= a; std::cout << a << "の" << b << "乗は" << n << "です。" << std::endl; //... returnとか
cout使うとマヌケなプログラムに見えてしまうな・・・
857 :
デフォルトの名無しさん :04/10/12 00:28:39
>>856 char str[256];
sprintf(str, "%dの%d乗は%dです。", a, b, n);
std::cout << str << std::endl;
>>857 ひどいな、コメントが「サバープログラム」だったり
機種依存文字が入ってたり…
861 :
デフォルトの名無しさん :04/10/12 00:41:34
>>860 サバープログラムは私の打ち間違えです(恥
機種依存文字入ってました?
文字化けした部分を直したりしたのですが気づかなかったです・・・
>>861 ありがとうございます。
これで何とか実験が出来ます。
再帰を使って(for while使用禁止)x^nをO(log(n))で計算するアルゴリズムが分かりません ご教授お願い致します
>>863 n が2の冪でいいなら簡単なんだけど。
#include <stdio.h> #define BUF_SIZE 256 int npow(int x, int n) { if(!n){ return 1; }else{ int p = npow(x, (n >> 1)); if(n & 1){ return p * p * x; }else{ return p * p; } } }
int main(void) { char buf[BUF_SIZE]; int x, n; do{ x = n = 0; printf("x, n = "); fgets(buf, BUF_SIZE, stdin); sscanf(buf, "%d,%d", &x, &n); printf("%d ^ %d = %d\n", x, n, npow(x, n)); printf("repeat?(y/n)"); fgets(buf, BUF_SIZE, stdin); }while(buf[0] != 'n') return 0; }
>>863 int pow(int x, int n)
{
return n == 1 ? x : x * pow(x, n - 1);
}
あ、nは正数の方向で。
スマソ 誤 }while(buf[0] != 'n') 正 }while(buf[0] != 'n'); だった orz
ケコーン
普通に問題読んでなかった…スマン(_ _;
>>868 0 ^ 0 = 1 でよかったっけ?
n は自然数だから考えなくていいのかな?
0^0は不定じゃなかろか
要するに pow(3,10)=pow(3^2,10/2)=pow(9,5)=9*pow(9, 4)=9*pow(9^2,4/2)=9*pow(81,2)=9*pow(81^2,2/2)=9*pow(81^2,1) で半分ずつになっていくから O(logN) ってこと?
>>879 pow(3,10) の場合 (log(2)10) 回(約3〜4)の計算量で終わる
すぐオーバーフローしそう
int power( int n, int pow ) { if( pow <= 0 ) return 1; if( pow & 0x1 ) return n * power( n * n, --pow >> 1 ); return power( n * n, pow >> 1 ); }
普通にforループで掛け合わせていくのと、
>>883 ってどっちのが早いの?
>>884 オーバーフローしないとして、
Nが大きくなった場合は
>>883 や
>>868 の方が明らかに速い
ところで、
--pow >> 1 のところの -- って必要ないような
>>884 n=400にしても10回しか呼び出されない
2^100 = 1267650600228229401496703205376 にしても100回くらいしか呼び出されない.
2^100 は再帰7回だろ?
n次の正方行列Aから第i行と第j列を取り去って得られるn-1次の正方行列を 求めるプログラムを教えてください。
Cでお願いします
>>889 いきなりそういう宿題が出されたのではなく、恐らくその前提となるn次行列を取り扱うロジックが
講義で使われるか以前の宿題として出ていたのではないかな?
そうであれば、その前提を提示することなく出題者の意図するような回答は得られないと思うのだが。
宿題スレって先生が見てて、2chで聞いたの誰だって 怒られないのかね。
>>669 この実行の仕方がまじでわからん、だれか詳しくおしえてくれ
ちなみに初心者でCpad for LSI使ってる
コンパイラは通ったが実行方法まるで不明
宿題自分でやるやつと人に聞くやつの割合ってどれくらいだろう? さすがに2chで聞くようなのは下から0.1%未満だろうと思うけど。
>>892 以前は宿題が載せてあるURLかいたお馬鹿ちゃんがいたから
先生にちくったりしてましたよwww
893ですが まじで初心者なんで誰かおしえてください
ヤクザですがと言われてもな
数式書いたファイルをコマンドライン上から指定すれば標準出力にでてくる Cpad使ってるなら実行時引数っていうのがあるからそこにファイル名
900 :
デフォルトの名無しさん :04/10/12 15:28:46
893でつ
コンパイラわかりました!!
つーかこのプログラム
>>669 を作った方、つーかプログラムわかる方だれでもよいので
・アルゴリズム・データ構造の説明(少なくていいです)
・スピードやメモリの効率向上のためなど工夫した点
を聞きたいのですが、おねがいします
宿題を他のスレにマルチポストするバカ
>>900 は放置モードで♥
>>901 ,
>>902 つーかあんたらなんなの?
探すなんてよほどの暇人ですね
親切な人がいないんだな、2ちゃんって
逆ギレキター なんで親切にしなきゃならんのだ
さすが893
>>903 バカの書き込みをわざわざ探す奴はいない。
巡回先で見つけただけ。
>>903 つーかお前は何様?
つーかお前の態度が悪いんだろ?2ch全体を勝手に貶めない様に。
>>907 つーかマルチはそんなに悪いこととは知らず
すいません
ただ早急に答えが欲しくて、すいません。
二度としませんから誰かおねがいします。本当に困ってます
LR(1)再帰下降パーサ
んなもんソース読んで適当にでっちあげろよ 宿題としてそれが出たのなら、そのための知識は持ってるはず どこまでも人に頼りすぎだ
>>909 で実行速度向上のために再帰しないって書くのか
>>908 自分でソース読んだ方が速いと思う。
結局質問するにも限りは有ると、私は思う。
Cの関数しか使ってなさげだから、Cの標準関数の載ってる
本とか買ってみたらどう?サイト探してみるとか。
>>912 つーかはやく答え教えろ
893なんだぜwww
>>912 本当に時間がないんですよ。
おねがいできませんか?
>>900 ・ソース読め
・ソース読め
これで回答すればいいじゃん
> ・アルゴリズム・データ構造の説明(少なくていいです) むしゃくしゃしてやった。 > ・スピードやメモリの効率向上のためなど工夫した点 速ければなんでも良かった。 今は2chでマルポしている。
>>916 さすがにそれだけでは・・・
工夫した点はプログラムのここをこうしたとか書いて欲しいです
無理はいいませんが
というか基本過ぎて解説できない罠。 解説してもらうより読んだ方が速いと思ってる人の方が多そう。 というかプログラムで何がしたいんだ〜〜。 というかマジレスする自分に鬱。。。
>>919 基本すぎの単純な解説でいいんでおねがいできませぬか?
確かに。ソース読んでみたが、コメントついていない以外は普通に読めるコードだな CASLのコードがわかってて、Cの基本構文わかってれば全然問題ない けど、for(;;)は宿題としては嫌がられるかもしれない そのあたりから「なぜfor(;;)なのか」とかを適当にでっち上げればいいかもしれない 少なくとも、この程度のものが読めないということは、読む気がないんだろう 手助けするような相手じゃないな
>>921 自分はまったくプログラムわかってないんで、お願いします!
まじ初めてプログラムの授業でて、初めてCを見たレベルなんです
事後処理はスレ違い。
・ハフマン法を利用した逐次検索を行い、その結果を標準出力からランダムアクセスで出力する ・動的なハフマンツリーを構築するには処理速度が不安だったため、 静的にツリーを保持し、データの入力をランダムアクセスにすることによってループを減らした また、論理演算にインラインアセンブラを使用するというアイディアをアドバイスされたので、 出力ルーチンをアセンブラ化することによって高速化を図った こんなもんでどうだ?
>>924 すげーこれ
でもこんな説明しかないんですか?
確かに面くらいそう
>>924 おいおい、こんなに詳しく書いちゃうと
>>893 は「この説明の解説をお願いします!!」
なんて言いかねんぞ
>>924 まあ単純に1から10行目に「これをやった」
11から16行目は「これをやった」みたいな感じでいいんですが、それは無理?
なんかスゲー鬱陶しいやっちゃな こんな説明しかとかいいんですがとか。
>>929 ごめんとしかいえません。
無理ならかまいませんが、暇ならお願いしたいです
・単純に1〜231行目でコンパイルを行う ・1〜231行目で単純に速くなるように頑張った。
>>931 部分ごとの解説はC言語じゃきびしいんすか?
しょうがないっすね
>>932 >>924 を暗記しておいて、「なんで解説がないのかね?」といわれたら大声で
>>924 を暗唱しろ
クラスの全員にお前をアピールするチャンスだ
みんながお前を見る目が変わること請け合い
>>933 レポだけなんだが、924を書けば先生はマニアックだからわかってくれるかいな?
4次以上の行列式の計算をするプログラムを教えてください。
誰も突っ込まないな
そのまま提出させたらどうせ「先生に怒られました!どうしてくれますか!」とか
来てウザくなるのがわかってるんだから、止めとけよ
>>893 よ
>>924 はネタだ
突っ込みを入れなくてもすむところがないぐらいネタだらけだ
あれを提出したら怒られるか笑いものにされるかのどっちかだ
class Matrix { int* m_pMat; int m_n; public: Matrix(int n) { m_pMat=(int*)malloc(sizeof(int)*n*n); for(int i=0; i<=n; i++){ for(int j=0; j<=n; j++) { if(i==j) m_pMat[i]=0; else m_pMat[i]=1; } } m_n=n; } ~Matrix() {free(m_pMat);} void DeleteLineRow(int i, int j) { i--,j--; for(int y=i; y<m_n-1; y++){ for(int x=0; x<m_n; x++){ m_pMat[n*y+x]=m_pMat[n*(y+1)+x]; } } for(int y=0; y<m_n; y++){ for(int x=j; x<m_n-1; x++){ m_pMat[n*y+x]=m_pMat[n*y+(x+1)]; } } m_n--; m_pMat=(int*)realloc( m_pMat, sizeof(m_n*m_n) ); } } Cではどう書けばいいのか。。。Cで書けなくなっちゃったよ。最近。
>>935 =889
>891を読め。
それから突然問題を変えるな。
質問者じゃないですよ。私は。
>>939 誰もあんたに何かを言っているわけではないだろ?
ごめん。勘違いした。。。
ほのぼのした('-'*
934なんだけど 結局何分割にして説明はきびしいんですね このスレは利用価値のあるスレなだけに残念
>>943 正直に
ちっ使えないスレだな
と言え。
>>944 いちいちそんなこと書くあんたもよっぽど暇人だな
俺も人のことはいえんが
893です
C言語にサブルーチンなんぞあるかは知らんけど
>>669 には何かサブルーチンがあるのか
だれか親切な人おしえてください
しつけえええええええええええええええ
まあええやん ケチらずに教えてくだされ、頼む そのためのスレじゃないの?
>>948 頼むからここじゃなくて友達かなんかに聞いてくれ。
幼稚園製に九九を教えたほうが有意義だ
>>946 育たぬ苗木に水や肥料与えるのは勿体無い
>>951 竹の開花を待つぐらい気長に待てば花が咲くかもよ
俺からも頼みますよー!!
次スレおながいします
OK。任せとけ。
本スレはなかなかの名スレだった
スマソ、新このホストでは〜 にやられた。 俺立ててないのに... 他の人、スレ立て頼む。
958 :
ぼるじょあ ◆yBEncckFOU :04/10/13 00:04:15
ダディクールかよ…
学生データーを入力し、学籍版g法順にソートしてファイルに出力しなさい。 構造体タグ名 Gakusei メンバー命 Namber[10] 文字型(学籍番号) Name「20] 文字型(氏名) *next 次ポインタ -----------実行画面------------- 学籍番号 ==>2ch003 氏名 ==>モナー 学籍番号 ==>2ch001 氏名===>ギコネコ 学籍番号 ==>2ch002 氏名==>ゾヌ 学籍番号==>999999 氏名==>999999(これで入力終了) ------------出力------------------ 2ch001 ギコネコ 2ch002 ゾヌ 2ch003 モナー なんだか入力した後にソートするのではなく、入力時点でソートをしていくとか? ア、smdfヵsdmヵfべか3へ:ふぁえf お願いしますです。
> 学籍版g法順 番号順じゃなくて「版g法順」か。先に定義しろ。 > メンバー命 新手の愛好家か? > Namber[10] Numberだろ。 下らない揚げ足取りはさておき。 入力時点で適切な位置に挿入していけばよし。
稲垣メンバー命
知識のひけらかしでしか
>>964 俺は「余因子行列」と習ったが。そんな訳もあるんだ。
そんな訳ない
次スレが…
おまいらに宿題です。 あ と 3 年 以 内 に 外 に で よ う な。
>>969 つまり3年間はひきこもってもいいってことか
>>961 昨日構造体勉強したばかりなので
961の問題興味あるのですが、nextって
何に使うのでしょうか?
「連結リスト」とか「リンクドリスト」で調べてみ
早速の返事ありがとうございます。 がんばります。
next = this;
#include <stdio.h> int main(void) { int n, m, s, sum = 0; printf("n >>"); scanf("%d", &n); printf("m >>"); scanf("%d", &m); printf("s >>"); scanf("%d", &s); for (; n <= m; n++) if (n % s == 0) sum += n; printf("sum = %d", sum); return 0; }
電気回路の問題なんですが i=虚数 i*i=-1 R=1,L=0.001,C=0.0001 PI=円周率 基本式 w=2*PI*f s=i*w Z1=R+s*L Z2=1/(s*C) Z=(Z1*Z2)/(Z1+Z2) で周波数を0〜100000まで変化させてZの絶対値を求める。 結果は周波数(一列目)Zの絶対値(2列目)というふうに出力する。 この仕様をみたしたプログラムをCで書くという問題です。 よろしくお願いします。
Cなのか。C++ではなく。 とりあえず 初期化 for(freq=0;f<=100000;f+=df){ z=f(freq); freqとzを出力して改行; } で、 f(double freq);を別に用意して実際の計算をやらせるって感じで
3回目か…。
>>978 だから、これも3回目だけど、周波数1Hzきざみで評価するのはやめてくれ。