ぼるじょあがC/C++の宿題を片づけますYO! 42代目
■ このスレッドは過去ログ倉庫に格納されています
0001ぼるじょあ代理
2005/04/18(月) 17:00:13わからない宿題を片づけますYO!
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【歴代スレは>>2-13】
0232118辺り
2005/04/21(木) 15:17:04なんだよ、C++でいいならそのまま使えよ。
Cかと思ってmalloc()辺りの説明したけど、文字列の扱い慣れてないみたいだから
>190みたいな阿呆なコード書いてるんだろうし。
0233デフォルトの名無しさん
2005/04/21(木) 15:50:28明日学校行って、他のコンパイラーでやってみます。
本当ありがとうございました。
0234デフォルトの名無しさん
2005/04/21(木) 15:51:48>229を理解してその台詞? いくらなんでも酷すぎるなぁ。
0235デフォルトの名無しさん
2005/04/21(木) 16:46:05>>Releaseモードにすれば
マジであほなんで、その仕方がよく分からなかったけど、また聞くと悪いから、
VC8以外のコンパイラーで一度試してみようかなって思っただけです。
0236デフォルトの名無しさん
2005/04/21(木) 16:49:14今ままでずっと書いてもらったコードを理解するために、色々調べてて
返事おくれました。
STLの授業始まったばかりで、まだ定かではないことがたくさんあって・・・。
ほんと、ありがとうございました。
0237デフォルトの名無しさん
2005/04/21(木) 16:50:24前にもIDEの使い方くらい勉強しとけって書かれてたよなぁ。
レスがその場凌ぎ以外のなんにも役に立ってないわけだ。
0238デフォルトの名無しさん
2005/04/21(木) 17:33:14ちゃんと勉強するやつがここに来るわけないだろw
0239デフォルトの名無しさん
2005/04/21(木) 17:38:04マジレスすると、私事なのですが、学校が進むの早いんですよ。
去年の10月にC++の最初、basic classから始まって、
data structure,STL&SLと、とんとんと。
その場凌ぎ以外のなんにも役に立ってないわけじゃなくて、
進むの学校が進むの早すぎて、あれもこれもとやること多すぎで、
消化不良起こしてるんです。
まだC++初めて6ヶ月しか経ってないので。
もちろん、このクラスの以外にも3クラス取ってるわけで・・・。
でも、コンパイラーのこと、書かれていた基礎知識が抜けていて、
マズイのは、ご指摘どうり、自分でも承知しているので、
週末にでも時間作れるように努力して、勉強します。
024070
2005/04/21(木) 18:03:49レスありがとうございます。
AHOなソースにしてしまい申し訳ありません。
何故か当環境でコンパイルすると、ズラーとエラーが出てきてしまいました。
『結果』という文字がなぜうまくいかないのかヒントお願いいたします。
0241デフォルトの名無しさん
2005/04/21(木) 18:23:550242232らしい
2005/04/21(木) 18:26:05文字列は、char変数には入らない。
stringでエラーを起こしているなら、
#include <string>
すればいい。
教えるの面倒だから、元の方でエラーをなくす努力をしてくれ。
0243デフォルトの名無しさん
2005/04/21(木) 18:51:17ModenやらFAQやら禿本やらboostやらと読んだが…
自分が適当にやってるのを他のせいにするなと言いたい
やる気さえあれば誰だって出来る。よっぽどアホでない限りな
0244デフォルトの名無しさん
2005/04/21(木) 19:01:520245デフォルトの名無しさん
2005/04/21(木) 19:09:39Ψ2p=1/sqrt(PI)*γ2^(5/2)*r*e^(-γ2*r)*cosθ
という式で|Ψ(x,y,z)|^2を、数値的に求め
その結果から|Ψ(x,0,z)|^2のグラフを
gnuplotでえがくプログラムを組む課題です。
どのようなプログラムを組めばよいでしょうか。
0246デフォルトの名無しさん
2005/04/21(木) 19:20:52[2] 問題文(含コード&リンク):3つの商品を買うとき会員券がある場合2割引 無ければ定価で売るプログラムを作りなさい。消費税も5%ととして計算すること
[3] 環境
[3.1] OS:Win2k
[3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:無し
for文からおかしいので治してみたりしたのですが
forを無視する、1つしか入力できない、数を入力してもループが終わらないといったバグがでます。
(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。
お願いします
int pr[2];
int a,b,goke,sin;
printf("品物の値段を入力してください\n");
for(a=0;a<=2;a++){
scanf("%d",&a);
goke=pr[a]+goke;
}
printf("会員券があるなら1、ないなら0を入力してください\n");
scanf("%d",&b);
if(b==1){
sin=(float)goke*0.8;
sin=(float)sin*1.05;
}
else if(b==0){
sin=(float)goke*1.05;
}
else{
printf("エラー\n");
}
printf("\\%d",sin);
return 0;
0247デフォルトの名無しさん
2005/04/21(木) 19:42:11LinuxかMacかwindowsかそのほかのUNIXか。
0248デフォルトの名無しさん
2005/04/21(木) 19:50:06テンプレに従え。C++なのかCなのかも分らないので宿題として正答はできない。
0249デフォルトの名無しさん
2005/04/21(木) 20:04:143つの商品なのにpr[2]ではおかしいでしょ。
prは品物の値段を入れる変数でaは添え字でしょ。
入力された品物の値段をどこに入れるの。
考えてね。
0250デフォルトの名無しさん
2005/04/21(木) 20:14:11for(a=0;a<=2;a++){
scanf("%d",&a);
ループに使ってる a で scanf するな!
っていうか pr[] に scanf に汁!
>(型指定)の練習問題で初めて使用したのですが表示がおかしいのもわかりません。
goke 初期化汁!
0251245
2005/04/21(木) 20:29:26[1] 授業単元:なし
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:fedora core
[3.2] コンパイラ(バージョン):不明
[3.3] 言語:C
[4] 期限:4月末日
0252デフォルトの名無しさん
2005/04/21(木) 20:41:020253デフォルトの名無しさん
2005/04/21(木) 20:43:45オ�hル
0254デフォルトの名無しさん
2005/04/21(木) 20:44:050255デフォルトの名無しさん
2005/04/21(木) 20:58:29どうも合計数がきちんと表示されません。
以下のどこかだと思いますが、どこがおかしいのでしょうか?
do{
printf("No%d: = ",++y);
scanf("%d",&z);
sum += z;
putchar('\n');}
while(y < 3);
printf("合計値は… : %d です!\n\n",sum);
0256デフォルトの名無しさん
2005/04/21(木) 21:02:08[2] 問題文(含コード&リンク):
1.キーボードから整数を入力させ、奇数か偶数かを判定するプログラムを作りなさい。
2.同じく整数を入力させ、素数であるかどうかを判定するプログラムを作りなさい。
[3] 環境
[3.1] OS:Win2000
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C
[4] 期限:明日朝まで
よろしくお願いします
0257デフォルトの名無しさん
2005/04/21(木) 21:02:33たいていは初期化
0258デフォルトの名無しさん
2005/04/21(木) 21:04:24if( 数 % 2 )
0259デフォルトの名無しさん
2005/04/21(木) 21:06:19神様!!!できました!!!
=0って宣言しなくても勝手に0が入ると思ってたorz
0260デフォルトの名無しさん
2005/04/21(木) 21:17:44[2] 問題文(含コード&リンク):int string_to_number(char *p):引数として与えられた文字列pの先頭から整数値を取り出して返す関数。ただし先頭が符号でも数字でもなければ0を返す。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ(バージョン):分かれません
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:特になし
0261デフォルトの名無しさん
2005/04/21(木) 21:34:07先頭以外に数字以外の別の文字があった場合はどうする?
0262デフォルトの名無しさん
2005/04/21(木) 21:38:59未定義なんだから、別に鼻の穴から悪魔が出てきても(ry
0263デフォルトの名無しさん
2005/04/21(木) 22:05:41return atoi(p);
}
0264207
2005/04/21(木) 22:22:53いまポインター関係の本を読んでみてます;
理解するのにちょっと時間がかかりそうですが頑張ります;
ご丁寧にありがとうございました♪
0265デフォルトの名無しさん
2005/04/22(金) 00:14:59#include <ctype.h>
int string_to_number(char *p)
{
int n = 0, sig = 1;
switch( *p )
{
case '+': p++; break;
case '-': sig = -1; p++; break;
}
while( isdigit(*p) ){
n *= 10;
n += *p - '0';
p++;
}
return n * sig;
}
0266デフォルトの名無しさん
2005/04/22(金) 00:25:49intの桁あふれとかは考慮しなくてもいいですか、まぁ宿題レベルだからいいのか
0267デフォルトの名無しさん
2005/04/22(金) 00:33:160268デフォルトの名無しさん
2005/04/22(金) 00:44:52ハァ?
265 でなら while() で判断、だろ?
0269デフォルトの名無しさん
2005/04/22(金) 00:59:58いや、むしろ漏れは 267 の strcmp での対策とやらが知りたい
おながい教えて
0270デフォルトの名無しさん
2005/04/22(金) 02:45:37[2] 問題文(含コード&リンク): nを与えてn!を計算するプログラムを作成せよ
[3] 環境
[3.1] OS:windous
[3.2] コンパイラ(バージョン):VisualC++
[3.3] 言語:C++
[4] 期限:無期限
お願いします
0271デフォルトの名無しさん
2005/04/22(金) 02:54:10nはいくつまで?
0272デフォルトの名無しさん
2005/04/22(金) 02:55:390273デフォルトの名無しさん
2005/04/22(金) 02:57:39unsignedの方がいい
0274デフォルトの名無しさん
2005/04/22(金) 03:17:19#include <iostream>
// 階乗計算関数
template <typename T> T fact(T n)
{
if( n <= 0 ) return 0;
T a = 1;
for( ; n > 0; n-- )
a *= n;
return a;
}
// テスト用main
// コマンドライン引数でnを指定
int main(int argc, char **argv)
{
if( argc < 2 ) return 0;
int n = atoi( argv[1] );
std::cout << fact( n ) << std::endl;
std::cout << fact( (long) n ) << std::endl;
std::cout << fact( (double) n ) << std::endl;
return 0;
}
0275デフォルトの名無しさん
2005/04/22(金) 03:24:360276デフォルトの名無しさん
2005/04/22(金) 08:18:30template<unsigned n> inline unsigned f()
{
if (n > 1) {
return n * f<n ? n - 1 : 1>(); //テンプレート引き数がn-1だとダメなのなんで?
}
return 1;
}
0277デフォルトの名無しさん
2005/04/22(金) 08:23:40書き直したから貼っておこう
0278デフォルトの名無しさん
2005/04/22(金) 16:26:09[2] 問題文 標準入力で指定されたファイルからテキストを入力、
そして標準出力に出力せよ。
*同じ文字が連続して2回入力されたときには1文字消去して出力せよ。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:今月中
です。
「同じ文字が連続して2回入力されたときには1文字消去して出力せよ」
というところがなかなか出来ません。よろしくお願いします。
0279デフォルトの名無しさん
2005/04/22(金) 16:28:29今月中までなら、もうすこし自分で考えれ。
0280デフォルトの名無しさん
2005/04/22(金) 16:31:46ありがとうございます。そんな簡単な方法があったんだなんて盲点でした。
>>265
まだ習ってない内容も含んでいますが理解できるようがんばりたいです。
0281デフォルトの名無しさん
2005/04/22(金) 16:41:323回以上連続している場合はどう解釈すればいい?
a.あくまでも2回ごとに1文字消去 つまり3,4回連続なら2文字になる
b.最初の1文字だけ表示2文字目以降は消去 つまり3,4回連続でも1文字
0282デフォルトの名無しさん
2005/04/22(金) 17:24:33[2] 問題文(含コード&リンク): わかりません
[3] 環境
[3.1] OS: わかりません
[3.2] コンパイラ(バージョン): わかりません
[3.3] 言語:C/C++/どちらでも可 のいずれか わかりません
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか わかりません
[5] その他の制限: わかりません
よろしくお願いします。
0283デフォルトの名無しさん
2005/04/22(金) 17:30:25よろしくお願いします。
0285デフォルトの名無しさん
2005/04/22(金) 17:44:03じゃあそれ以外の未解決分お願いします。
0286デフォルトの名無しさん
2005/04/22(金) 18:20:10おーい、factorialは整数のみで定義できる関数だからfloatなどの場合は定義すべきじゃないよ。それは糖だよ。
0287デフォルトの名無しさん
2005/04/22(金) 18:46:36#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void output_text (FILE* fin) {
int lc = 0, c = 0;
while ((c = fgetc (fin)) != EOF) if (c != lc) {putchar ((char)c); lc = c;}
}
int main () {
FILE* fin;
char filename[256]; scanf ("%s", filename);
if ((fin = fopen (filename, "r")) == NULL) return EXIT_FAILURE;
else {
output_text (fin);
fclose (fin);
return EXIT_SUCCESS;
}
}
0288デフォルトの名無しさん
2005/04/22(金) 18:58:58> #include <stdlib.h>
> #include <string.h>
イラネ
0289デフォルトの名無しさん
2005/04/22(金) 19:00:25うるせー
0290デフォルトの名無しさん
2005/04/22(金) 19:01:250291デフォルトの名無しさん
2005/04/22(金) 19:09:02約42290レスの中からまとめるの?ご苦労様。
質問する奴らはそんなもの見ないけどな。
0292デフォルトの名無しさん
2005/04/22(金) 19:10:060293デフォルトの名無しさん
2005/04/22(金) 19:26:07問題をまとめるとせいぜい1000題以内だと思う。
0294デフォルトの名無しさん
2005/04/22(金) 19:28:52その中から問題と解答だけを抽出するならそれほど時間が掛からないと思う。
0295デフォルトの名無しさん
2005/04/22(金) 19:32:40がんばってくれ。
0296デフォルトの名無しさん
2005/04/22(金) 19:41:11それはわかっているけどね。
ただ巨数になりやすいから、結果をdoubleでも出せるようにしたかっただけ。
n = 10.5 とかでも計算しちゃうけど、それはやらないでねw
あと、テンプレート引数にはしかるべき演算子を定義した巨大数クラスも取れるので、いいじゃん。
0297デフォルトの名無しさん
2005/04/22(金) 19:48:49誤差で13! != 13.0!になったが。
0298297
2005/04/22(金) 19:52:040299デフォルトの名無しさん
2005/04/22(金) 19:54:030300>>299
2005/04/22(金) 19:57:010301デフォルトの名無しさん
2005/04/22(金) 20:22:37SFINAEを使えば継承もできるようですね。おおよそHaskellと似たような事もできることが分りました。
ありがとうございます。
0302デフォルトの名無しさん
2005/04/22(金) 20:27:250303デフォルトの名無しさん
2005/04/22(金) 21:19:48質問あるたびに誘導ばかりしていると新しいものが生まれないからほどほどに
0305278
2005/04/22(金) 22:19:54ありがとうございます!
頭が悪いのでパット見分からないのですが、考えてみます!
0306デフォルトの名無しさん
2005/04/22(金) 22:37:20俺みたいにこのスレをみて実力ためしに問題といてる人間にとっては
勉強になります。ぜひまとめサイト御願いします。m(_ _)m
0307デフォルトの名無しさん
2005/04/22(金) 23:04:290308デフォルトの名無しさん
2005/04/22(金) 23:17:46f<0>が実体化された時点で、f<(unsigned)-1>も実体化されるから
0309デフォルトの名無しさん
2005/04/22(金) 23:26:21�_�g�a�d�a�d �`�i�f�d�j�d
0310デフォルトの名無しさん
2005/04/22(金) 23:37:26template <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;
}
0311デフォルトの名無しさん
2005/04/23(土) 01:18:020312デフォルトの名無しさん
2005/04/23(土) 01:19:190313デフォルトの名無しさん
2005/04/23(土) 01:24:46ISO/IEC 14882:1998 3.6.1 Main function -5
... If control reaches the end of main without encountering a return
statement, the effect is that of executing "return 0;"
0314デフォルトの名無しさん
2005/04/23(土) 01:32:31さらに f<(unsigned)-2>, f<(unsigned)-3> ...
と実体化されてゆき、コンパイルが破綻するから。
もしくはコンパイルを破綻させないために設定してある
テンプレートの深さの制限を超えるから。
0315デフォルトの名無しさん
2005/04/23(土) 01:40:00template< unsigned n > unsigned
f() {
return n * f< n - 1 >();
}
template<> unsigned
f< 0 >() {
return 1;
}
int main() {
std::cout << f< 6 >();
}
0317デフォルトの名無しさん
2005/04/23(土) 01:45:58そういうこと
評価はランタイム、実体化はコンパイルタイム
0319デフォルトの名無しさん
2005/04/23(土) 11:12:46へー、それは新たに追加されたってこと?
0321デフォルトの名無しさん
2005/04/23(土) 15:06:21あんたの頭。
それはさておき、入力後すぐにプログラムが終了しているなら入力したファイル名をフルパスにして再挑戦してみよ。
0322デフォルトの名無しさん
2005/04/23(土) 15:07:12何が何に追加されたと思って質問しているのかね。
0323デフォルトの名無しさん
2005/04/23(土) 16:05:29[2] 問題文(含コード&リンク):
1.正の整数を素数の積に分解する、素因数分解のプログラムを作成。
負の整数を入れると終了するようにする。
2.二次方程式ax^2+bx+cの解を求めるプログラムを作成。(a≠0)
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年4月23日23:59
[5] その他の制限: 特にありません。
他の問題は何とかできましたが、この2題がわかりません。
知恵を貸してください。よろしくお願いします。
0324デフォルトの名無しさん
2005/04/23(土) 16:58:29void print_factors(int n)
{
int i = 2;
while(1)
{
if(n % i == 0)
{
printf("%d", i);
if((n /= i) <= 1)
break;
i = 2;
printf("*");
}
else
i++;
}
printf("\n");
}
int main()
{
int n;
while(scanf("%d", &n) > 0 && n > 0)
print_factors(n);
}
0325324
2005/04/23(土) 17:03:24int main() -> int main(void)
0326デフォルトの名無しさん
2005/04/23(土) 17:15:40すまんまちがえた>>314じゃなくて>>313ですた
んで、これは>>313はこの版のCからそうなったの?それともずいぶん前から?
0327デフォルトの名無しさん
2005/04/23(土) 17:18:33#include <errno.h>
#include <stdio.h>
int main(void)
{
double a, b, c, det;
printf("a:");
scanf("%lf", &a);
printf("b:");
scanf("%lf", &b);
printf("c:");
scanf("%lf", &c);
det = b * b - 4 * a * c;
if(det > 0)
printf("%f, %f", (- b + sqrt(det)) / (2 * a), (- b - sqrt(det)) / (2 * a));
else
printf("%f+%fi, %f-%fi", - b / (2 * a), sqrt(-det) / (2 * a), - b / (2 * a), sqrt(-det) / (2 * a));
if(errno)
{
fprintf(stderr, "An error ocurred.");
return 1;
}
}
0328デフォルトの名無しさん
2005/04/23(土) 17:20:05>>313はc++。
c99にも同様の規定がある。
0329デフォルトの名無しさん
2005/04/23(土) 17:28:01>313はC++。
0330デフォルトの名無しさん
2005/04/23(土) 17:46:40素早い回答ありがとうございます。
すみません、質問なのですが
while(scanf("%d", &n) > 0 && n > 0)
のscanfの部分をnに変えてしまってはマズイでしょうか?
whileの条件の中にscanfというのは使った事がなくわかりません。
プリント文で値は?と質問した後に、入力させる方式にしたいと思っています。
0331デフォルトの名無しさん
2005/04/23(土) 17:54:56少しは自分でやったり考える心は無いのか
■ このスレッドは過去ログ倉庫に格納されています