C/C++の宿題片付けます 124代目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/03/02(月) 02:13:06【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題片付けます 122代目(実質123代目)
http://pc11.2ch.net/test/read.cgi/tech/1232029287/
0867デフォルトの名無しさん
2009/04/18(土) 12:34:54CじゃなくてC++で書けってこと?
0868デフォルトの名無しさん
2009/04/18(土) 12:37:57main() を int main() に。
でも、それはC++のコンパイラを使っているからであって
Cでは main() で間違いじゃない。
あと、Cでは引数なしのときはできうる限り void を使う。
よって main(void) がいい感じ。C++では逆にvoidは使わない。
コンパイルエラーはでるが、間違いではないので、
先生に言われたら「たわけがっ!」と言い張ればOK
0869863
2009/04/18(土) 12:52:04無事に動きました。
皆さん有り難うございます!
0870デフォルトの名無しさん
2009/04/18(土) 13:39:58C でも int main() が昔からの書き方かな。int main(void) は最近のはやりですかね。
0871デフォルトの名無しさん
2009/04/18(土) 13:45:50Microsoft VC6の時代は、拡張子CPPでもウォーニングレベル止りだったけれど、
VC8以降は拡張子CPPではエラーにした。
0872デフォルトの名無しさん
2009/04/18(土) 14:06:06最近って、ISO、ANSI準拠でとっくの昔に「標準スタイル」として提唱されているが?
0873デフォルトの名無しさん
2009/04/18(土) 14:20:51その ANSI 準拠がくせもの、main() 呼び出し先では引数つきで呼び出しているのに、main(void) ってかくのは変じゃないですか?
0874デフォルトの名無しさん
2009/04/18(土) 14:32:470875デフォルトの名無しさん
2009/04/18(土) 14:47:04それを使うかどうかは呼び出された側次第だしな
0876デフォルトの名無しさん
2009/04/18(土) 15:13:37コンパイラによる型チェックが停止するので(K&R第2版89p)
引数なしの場合はvoidをつけるべき。
でもmainは関係なし。実際、K&Rでもmainの引数は省略されてる。
0877デフォルトの名無しさん
2009/04/18(土) 15:15:36あと、K&Rはmainの戻り値も省略してる。ひゃっはー。
0878871
2009/04/18(土) 17:06:14main() Cでは戻り値のウォーニング。C++では戻り値のエラー。
void main() Cではエラー無し。C++では戻り値のウォーニング。
0879デフォルトの名無しさん
2009/04/18(土) 18:46:20[2] 問題文:直線と四角形の接触判定を求めるプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: (C)
[4] 期限:火曜日
[5] その他の制限:特になし
直線の式と四角形の座標を入力して直線が四角形を通過しているか
(角で交わるものも含む)どうかを判定するプログラムです。
よろしくお願いします
0880デフォルトの名無しさん
2009/04/18(土) 19:01:42四角形の大きさなどは?
0881デフォルトの名無しさん
2009/04/18(土) 19:07:28特に決められていないので大きさに関係なく
判定できたらいいなと思います
0882デフォルトの名無しさん
2009/04/18(土) 19:27:43typedef struct { double x, y;} point;
typedef struct { double a, b, c;} line;
int isCross(line l, point p1, point p2)
{
return (l.a*p1.x+l.b*p1.y+l.c)*(l.a*p2.x+l.b*p2.y+l.c)<=0;
}
int main(void)
{
int i;
point quad[4];
line l;
for(i=0; i<4; i++) scanf("%lf%lf", &quad[i].x, &quad[i].y);
scanf("%lf%lf%lf", &l.a, &l.b, &l.c);
if(isCross(l, quad[0], quad[2])||isCross(l, quad[1], quad[3])) {
printf("通過する\n");
}
else printf("通過しない\n");
return 0;
}
0883デフォルトの名無しさん
2009/04/18(土) 19:58:15ありがとうございます
直線のa,b,cは傾きと切片とあと何を入力してるんでしょうか?
0884デフォルトの名無しさん
2009/04/18(土) 19:59:510885デフォルトの名無しさん
2009/04/18(土) 20:05:200886デフォルトの名無しさん
2009/04/18(土) 20:06:22四角形は座標軸に対して傾いてないのかとか
多少気になるな
無限で傾いてないと仮定するのが一番楽そうだけど
0887デフォルトの名無しさん
2009/04/18(土) 20:09:13説明がたりなくて本当にすみません。
直線は無限で四角形は座標軸に対して傾いていません
0888デフォルトの名無しさん
2009/04/18(土) 20:11:10ってのが方針でしょう
0889デフォルトの名無しさん
2009/04/18(土) 20:16:18ダウト。cdecl じゃなくて stdcall(pascal) だったら呼ばれた側で処理しないと。
0890デフォルトの名無しさん
2009/04/18(土) 20:22:04そして座標軸に対して傾いていない
0891デフォルトの名無しさん
2009/04/18(土) 20:35:46typedef struct { double top, bottom, left, right; } rectangle;
typedef struct { double a, b, c; } line;
int isCross(rectangle r, line l)
{
return (l.a*r.left+l.b*r.top+l.c)*(l.a*r.right+l.b*r.bottom+l.c)<=0
|| (l.a*r.left+l.b*r.bottom+l.c)*(l.a*r.right+l.b*r.top+l.c)<=0;
}
int main(void)
{
rectangle r;
line l;
scanf("%lf%lf%lf%lf", &r.left, &r.top, &r.right, &r.bottom);
scanf("%lf%lf%lf", &l.a, &l.b, &l.c);
printf("通過%s\n", isCross(r,l) ? "する" : "しない");
return 0;
}
0892デフォルトの名無しさん
2009/04/18(土) 20:51:490893デフォルトの名無しさん
2009/04/18(土) 21:09:57面白くないw
0894デフォルトの名無しさん
2009/04/18(土) 21:22:43対角線と直線が交わるってことは、対角線の両端の座標をax+by+cに代入した結果が、
片方は正で片方が負になっていればいい。
0895デフォルトの名無しさん
2009/04/19(日) 00:54:33で、それって888の言ってることとどう違うの?
0896デフォルトの名無しさん
2009/04/19(日) 00:57:45後者をやってるヤツなんて見たことないが・・・
わざわざint つけてvoidつけてとかバカだろと
0897デフォルトの名無しさん
2009/04/19(日) 01:12:340898デフォルトの名無しさん
2009/04/19(日) 01:51:07[2] 問題文(含コード&リンク):
任意の2つの正方行列を標準入力から入力し、2次元配列に保存し、
これら2つの行列の差を求め、表示するプログラムを作成せよ
[3] 環境
[3.1] OS: Vista
[3.2] コンパイラ名とバージョン:VisualC++2008
[3.3] 言語:C++
[4] 期限: 19日7時まで
[5] その他の制限:なし
0899デフォルトの名無しさん
2009/04/19(日) 01:56:45>>813,855
0900デフォルトの名無しさん
2009/04/19(日) 01:58:360901デフォルトの名無しさん
2009/04/19(日) 06:43:35対応できる範囲が違う
今回は長方形なので同等だが
図のような四角形だと結果が変わる
ttp://2sen.dip.jp/cgi-bin/upgun/up1/source/up26197.png
0902デフォルトの名無しさん
2009/04/19(日) 09:14:48じゃあ895は888にむしろ劣ってるね
0903デフォルトの名無しさん
2009/04/19(日) 11:03:44具体性皆無でクソの役にもたたねーよw
0904デフォルトの名無しさん
2009/04/19(日) 11:16:13#include <stdio.h>
typedef struct { double x, y; } point;
typedef struct { double a, b, c; } line;
int isCross(line l, point p1, point p2)
{
return (l.a*p1.x+l.b*p1.y+l.c)*(l.a*p2.x+l.b*p2.y+l.c) <= 0;
}
int main(void)
{
point quad[4];
line l;
int i;
for(i=0; i<4; i++) scanf("%lf%lf", &quad[i].x, &quad[i].y);
scanf("%lf%lf%lf", &l.a, &l.b, &l.c);
for(i=0; i<3; i++) if(isCross(l, quad[i], quad[i+1])) break;
printf("通過%s\n", i!=3 ? "する" : "しない");
return 0;
}
0905デフォルトの名無しさん
2009/04/19(日) 12:49:50904みたいにコードで示してから具体性とか言え
904はダメダメだけどな
0906デフォルトの名無しさん
2009/04/19(日) 16:24:190907デフォルトの名無しさん
2009/04/19(日) 17:16:42具体性も何も ax+by+c に代入して符号調べるだけじゃん
0908デフォルトの名無しさん
2009/04/19(日) 18:08:020909デフォルトの名無しさん
2009/04/19(日) 18:08:51[2] 問題文(含コード&リンク):
新入生全員にパスワードを渡したい。学生ごとに異なるパスワードをコンピューターを使って自動的に生成したい。
生成するパスワードの長さは10とする。パスワードに使える文字は、英字のうち大文字のみとする。
1回のプログラム実行につき、1個のパスワードが出力されるようにせよ。
制約条件:パスワード生成時に、random()とsrandom()を使う。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: ([2009年4月21日10:00まで]
[5] その他の制限:なし。
よろしくお願いします。
0910デフォルトの名無しさん
2009/04/19(日) 18:13:42エスパーしろっていう内容でもないんだけど
一から十まですべて書かないと分からない?
質問者のレベルを考慮すれば分からなくても仕方ないけど
>>908 は質問者なの?
0911908
2009/04/19(日) 18:14:550912デフォルトの名無しさん
2009/04/19(日) 18:15:070913デフォルトの名無しさん
2009/04/19(日) 18:17:42そういうことはコード書いてから言ってねw
0914デフォルトの名無しさん
2009/04/19(日) 18:21:50質問者じゃないけど、>>888じゃ質問者の役にはたたないだろ。
実際にコード書くか、>>894程度の説明ぐらいはしないと。
0915デフォルトの名無しさん
2009/04/19(日) 18:22:55#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random(void)
{
return rand();
}
void srandom(unsigned seed)
{
srand(seed);
}
int main(void)
{
int i;
srandom(time(NULL));
for(i=0;i<10;i++)
{
printf("%c", 'A'+random()%26);
}
return 0;
}
0916デフォルトの名無しさん
2009/04/19(日) 18:34:380917デフォルトの名無しさん
2009/04/19(日) 18:38:590918デフォルトの名無しさん
2009/04/19(日) 18:39:20ありがとうございます。
早いですね♪
0919デフォルトの名無しさん
2009/04/19(日) 18:59:050920デフォルトの名無しさん
2009/04/19(日) 20:11:440921デフォルトの名無しさん
2009/04/19(日) 21:26:29mingw だとリンクエラーになるけど
linux だとまんまなのがあったのか
0922デフォルトの名無しさん
2009/04/19(日) 21:34:41Cygwin使えということだな。
0923デフォルトの名無しさん
2009/04/19(日) 21:59:35同じ点を2回計算するのがダメ
quad[3]とquad[0]が作る線分のことを考慮してないのがダメ
よってダメダメ
0924デフォルトの名無しさん
2009/04/19(日) 22:07:30>quad[3]とquad[0]が作る線分のことを考慮してないのがダメ
これは問題ないと思うじぇ
0925923
2009/04/19(日) 22:41:31スマン
0926デフォルトの名無しさん
2009/04/19(日) 23:23:43[2] 問題文(含コード&リンク):
正の整数nを入力し、
(n+1)×n+n×(n-1)+........
+4×3+3×2+2×1
を計算し求めるプログラム
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Borland C++ 5
[3.3] 言語: C
[4] 期限: 一週間後
[5] forの繰り返しを使う
0927デフォルトの名無しさん
2009/04/19(日) 23:31:51int main()
{
int n;
double sum;
printf("正の整数を入力してください>");
scanf("%d", &n);
for (sum = 0.0; 0 < n; n--) {
sum += (n + 1) * n;
}
printf("Ans. %.0f\n", sum);
return 0;
}
0928デフォルトの名無しさん
2009/04/19(日) 23:35:220929デフォルトの名無しさん
2009/04/19(日) 23:45:400930デフォルトの名無しさん
2009/04/19(日) 23:47:19for(i=1;i<=5,i++)など、なるべく簡単に最初に習う範囲でお願いします。
0931デフォルトの名無しさん
2009/04/19(日) 23:52:18int main()
{
int n, i;
double sum = 0.0;
printf("正の整数を入力してください>");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += (i + 1) * i;
}
printf("Ans. %.0f\n", sum);
return 0;
}
0932デフォルトの名無しさん
2009/04/19(日) 23:54:320933デフォルトの名無しさん
2009/04/20(月) 00:00:46///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0934デフォルトの名無しさん
2009/04/20(月) 00:00:49[2] 問題文(含コード&リンク): 3冊の本の名前、ISBN、著者名を入力し一覧表示しなさい。
ただし、ISBNの4,6,12,16桁目に'-'が入っていない場合エラー表示しなさい。
[3] 環境
[3.1] OS: Vista
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C
[4] 期限: 04/20 12:00
[5] その他の制限: forや配列など基礎的な事しかやっておりません。
一覧表示までは動作したんですがISBNの判定をどの様にしたらいいのか分かりません。
構造体名は「hon_t」それぞれ「name」「isbn」「tyosya」で組んでいます。
0935デフォルトの名無しさん
2009/04/20(月) 00:12:35解決しました。
ありがとうございました。
927、929さんもありがとうございました。
0936デフォルトの名無しさん
2009/04/20(月) 00:13:07// error
}
0937デフォルトの名無しさん
2009/04/20(月) 00:24:25[2] 問題文(含コード&リンク):
無限等比級数の和を各項を順に加算していくことにより求めるプログラム
1+(1/3)+(1/9)+(1/27)+.....
ただし、0.00001以下となる項を加えた時点で加算を終了することとする。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Borland C++ 5
[3.3] 言語: C
[4] 期限: 一週間後
[5] while do-whileの繰り返しを使う
初心者用でなるべく簡単なものでお願いします。
0938デフォルトの名無しさん
2009/04/20(月) 00:36:03鋭意清書中約3名
コンパイル中約6名
コーディング中約18名
0939デフォルトの名無しさん
2009/04/20(月) 00:36:41#include <stdio.h>
int main(void){
double r = 3;
double stop = 0.00001;
double b = 1;
double ans = 0;
while(1/b > stop){
ans += 1/b;
b *= r;
}
printf("%f\n", ans);
return 0;
}
0940デフォルトの名無しさん
2009/04/20(月) 00:41:37int main()
{
int n = 1;
double sum = 0.0;
double d;
do {
d = 1.0 / n;
sum += d;
n *= 3;
} while (0.00001 < d);
printf("Ans. %f\n", sum);
return 0;
}
0941デフォルトの名無しさん
2009/04/20(月) 00:42:00解決致しました。
ありがとうございました。
0942デフォルトの名無しさん
2009/04/20(月) 01:04:58解決しました
ありがとうございました。
0943デフォルトの名無しさん
2009/04/20(月) 08:17:51それint省かれてるだけだから結局return 0いるじゃん。
0944デフォルトの名無しさん
2009/04/20(月) 08:41:250945デフォルトの名無しさん
2009/04/20(月) 11:29:06[2] 問題文(含コード&リンク):
次の2つの関数は異なるa,bの値を返すか。
その場合はa,bの組の例を答えよ。
1.
int foo1(int a, int b){
if(a>b) return 1;
else return 0;
}
2. int foo2 (int a, int b){
int c;
c=a-b;
if(c>0) return 1;
else return 0;
}
続く。
0946デフォルトの名無しさん
2009/04/20(月) 11:30:16[3.1] OS: Vista
[3.2] コンパイラ名とバージョン:不明 (指定なし?)
[3.3] 言語: C
[4] 期限: 今日中
自分なりに考えてみたのですが、
答えは「ある」。例はa=-32768, b=1
理由:intは16ビット符号付き2進数なので、表せられる範囲は-32768〜32767
2進数に現わすと1000000000000000〜0111111111111111
a=-32768,b=1とすると、
a<bなので、foo1関数では「0」を返すが、
c=a-bをすると表現形式の値域を超えているため、c=32767となる。
よってc>0なので、foo2関数では「1」を返す。
何か的外れな考え方をしているかも知れません・・・
答え、考え方が合っているかどうか、ご教示お願いします。
0947デフォルトの名無しさん
2009/04/20(月) 11:43:040948デフォルトの名無しさん
2009/04/20(月) 11:46:15[2] 問題文(含コード&リンク):
ピクロスを解くプログラム
パターンの判定(横w=15 横の数列=4.2.3)
1行の可能なパターンを全て出力
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:分からない
[3.3] 言語: C
[4] 期限: 4/23
[5] その他の制限:お願いします
0950デフォルトの名無しさん
2009/04/20(月) 12:55:50エラー出てるのは自分だけかもしれないぞ。
0951デフォルトの名無しさん
2009/04/20(月) 12:56:55なるからね
例え自分達が良くても学生/生徒はそうじゃないから
>>>>>教師
0952デフォルトの名無しさん
2009/04/20(月) 12:57:520953デフォルトの名無しさん
2009/04/20(月) 13:06:46Cも数学もダメにする元凶だっつーの
0955945
2009/04/20(月) 13:39:59vistaって、intは16ビットではないのか・・・知りませんでした。
考え方は一応合っているのですね。もう少し考えてから宿題を提出します。
有難う御座いました。
0956デフォルトの名無しさん
2009/04/20(月) 13:44:28エラーメッセージは?
うちじゃ普通にコンパイルするけどな
0957デフォルトの名無しさん
2009/04/20(月) 13:55:04この程度でダメになるようなら元からダメだろw
0958デフォルトの名無しさん
2009/04/20(月) 13:59:45#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int i;
srandom(time(NULL));
for(i=0;i<10;i++)
{
printf("%c", 'A'+random()%26);
}
return 0;
}
0959デフォルトの名無しさん
2009/04/20(月) 14:17:34大きく出たな
0960デフォルトの名無しさん
2009/04/20(月) 14:22:490961デフォルトの名無しさん
2009/04/20(月) 14:45:35生きた程度で、最初の10年はまだ物心も付かない、判断力も無い
思想の面でも洗脳されていない、そのうち親や周りの影響力で
考え方も染まっていくわけだが、40年生きた人は単純に20年生きた若造の倍
なんて短絡的なものではない。何度も同じ事をやっていると飽きてくる。
自分の人生はこれに賭けた、だから失敗できない。そりゃそうだ。
スポーツ選手がそのスポーツで好成績を出さなければ、次の世代の世話役で
一生を終えるかもしれない。成功したものでも、指導者になれるとは限らない。
適正があるからな。で、数学がちょっと出来ないくらいで、諦めてどーすんの?
理数系に進んで英語バリバリな俺からしてみれば、早く海外に出ろと言いたい。
島国で視野の狭いジャポネーゼは駄目。技術力はあるけど発展性が乏しい。
0962デフォルトの名無しさん
2009/04/20(月) 14:48:50学ばずとも日頃から使うからな。俺の考えもジャポネーゼだw
しかし、発展させるくらいのことはするよ。どうせ使わないものを
多数取り込んでも、それを覚えるだけで限られた生きられる時間を
食いつぶすだけで終わるかもしれないしな。もしかすると明日、
事故で死ぬかもしれない人生だぞ。早くしろ、間に合わなくなっても知らないぞー
0963デフォルトの名無しさん
2009/04/20(月) 14:51:51確かにデジタル機器なんざ数値データの処理が重要になるため、少しでも
効率の良いアルゴリズムを記述するために、数学的な考えは必要となってくる。
if、比較演算、四則演算、その他諸々。俺は頭が良いのか悪いのか、分からない。
ランクの低い大学に通っていたが、何で大学に通ったかさえも動機が曖昧。
CMでもやってるだろ?何でここの会社を選んだ?動機は?そんなのねーよ
なんとなくだろ?って奴は意外に多い。自分がそうなってしまうこともあるだろう。
誰しも人生は一度きりだ、さぁ外に出て自分を解き放てっ!(タイーホAA略)
0964デフォルトの名無しさん
2009/04/20(月) 14:59:190965デフォルトの名無しさん
2009/04/20(月) 15:01:010966デフォルトの名無しさん
2009/04/20(月) 15:07:09あれこれ解けても、分かりきった答えを覚えるだけがあんたの人生なのかと?
それが出来て何か「教科書で出てくる問題」を解く以外に使ったことがあるのかと?
ユーティリティーソフトを作りたいなら、PCの仕組みも学ばないと駄目だよ。
コードなんて所詮文字列。それをうまいこと活用できるかは、各個人次第。
レス数が950を超えています。1000を超えると書き込みができなくなります。