トップページ⇒tech
1001コメント394KB

C/C++の宿題片付けます 122代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/01/15(木) 23:21:27
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[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++の宿題を片付けます 121代目
http://pc11.2ch.net/test/read.cgi/tech/1230678123/
0153デフォルトの名無しさん2009/02/02(月) 16:48:57
>>144 です

>>150 を試してみましたが
色々入力してみて結果をみると
a が含まれてるのに表示されないのがあります
どう改善すればいいでしょうか;;;
0154デフォルトの名無しさん2009/02/02(月) 16:51:16
>>153
fgets を使う
0155デフォルトの名無しさん2009/02/02(月) 17:03:33
>>154
fgets って言うのは習ってないので
どこに組み込めばいいか分からないです…。
0156150-1512009/02/02(月) 17:11:59
>>152
自分でコンパイルしてなかった。すまん。

>>153>>155
strlenが改行コード含むと思ってプログラムしてたから、自作関数の-1を消してもらえば大丈夫だと思う。
0157デフォルトの名無しさん2009/02/02(月) 17:14:29
>>156
-1を消したらうまくできました!ありがとうございます^^

>>147,149,150,151,152,154,156
いい人が沢山居て本当に助かりました☆
皆さんありがとうございました!!!
0158デフォルトの名無しさん2009/02/02(月) 18:50:58
>>143
読んでないけど、>>115で不満なのか?
0159デフォルトの名無しさん2009/02/02(月) 20:53:12
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8804.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++Compiler 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: 2月5日まで
[5] その他の制限:C言語は一通り習ってます。

(1)がさっぱりわかりません・・・・。よろしくお願いします。
0160デフォルトの名無しさん2009/02/02(月) 21:01:55
(x^n) mod m
0161デフォルトの名無しさん2009/02/02(月) 21:04:48
>>160
はええな
マジで?
おれより速い奴がいるなんて興奮して勃起しちゃった
0162デフォルトの名無しさん2009/02/02(月) 21:10:20
>>160
すごいですね!ありがとうございます。
0163デフォルトの名無しさん2009/02/02(月) 21:20:28
>>160
質問者じゃないんだけど
y=1;z=x;
for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
if(i%2) y=(y*z)%m;  ←これなんでiが偶数のときは処理しないんですか?
z=(z*z)%m;
}
return y;
0164デフォルトの名無しさん2009/02/02(月) 21:31:18
>>163
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/power.html
0165デフォルトの名無しさん2009/02/02(月) 21:36:58
>>163
>for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
iを右に一つシフトした結果をiに代入する。
結果、iが二分の一になる。
0166デフォルトの名無しさん2009/02/02(月) 21:38:49
>>165
>結果、iが二分の一になる。
端数切捨てね。
5(101)→2(10)
0167デフォルトの名無しさん2009/02/02(月) 22:01:27
[1] 授業単元:DirectX研究2
[2] 問題文(含コード&リンク):
サイコロを転がして目を決める。
 ・テーブルとサイコロを作成する。
 ・キー操作でサイコロを投げ下ろすように振る。
 ・落下してきて,1つの目を上にして止まる。
 ・何度でも遊べる

 ◎テーブルにサイコロの影がある
 ◎回転しながら落下してくる
 ◎自由な方向から見ることができる
 ◎テーブルの上でサイコロは跳ね,転がる。
 ◎サイコロとして正しい
http://pub.idisk-just.com/fview/_tILCoWWjdmUjpPFJTUxmAq6FeoO_tXOymM-2i9jWWI5H3mCxm9x4ARZUBR0TsUi
を参考にしてよい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC8 or VC9
 [3.3] 言語:C/C++どちらでも可
[4] 期限: 2月10日まで
[5] その他の制限:DirectXの課題ですがよろしくお願いいたします。
0168デフォルトの名無しさん2009/02/02(月) 22:37:41
ここって宿題じゃなくて単発の質問はいいのかな?
0169デフォルトの名無しさん2009/02/02(月) 22:41:33
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
0170デフォルトの名無しさん2009/02/02(月) 22:41:35
>>168
答えはNO
スレ違い
0171デフォルトの名無しさん2009/02/02(月) 22:43:50
>>169-170
こっちか。ありがとう
0172デフォルトの名無しさん2009/02/02(月) 22:48:04
内容:[1] 授業単元: プログラミング
[2] 問題文:Visual c++を使って大富豪を作りなさい。
      ルールは、8切りのみです。ペア、階段等は無しにします。 CPUは1名とします。
カード枚数は10枚ずつで、ジョーカーは無しです。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:Visual c++
[4] 期限: できれば早めに・・・・
[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。         画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします
0173デフォルトの名無しさん2009/02/02(月) 22:49:49
>>166
スレ違いなのに質問に答えてくれてありがとうございます
0174デフォルトの名無しさん2009/02/02(月) 23:14:27
>>172
CPUとの1対1でいいのか?
ペアなしっていうのは、常に1枚ずつしかカード出せないってことでいい?

ていうかCPUの思考ルーチン作るのって基礎段階を大幅に超える気がするんだが
0175デフォルトの名無しさん2009/02/02(月) 23:21:42
どなたか>>134をお願いいたします。
0176デフォルトの名無しさん2009/02/02(月) 23:29:56
>>175
お願いされるWORDが無い
01771052009/02/02(月) 23:33:50
問2をここまでやったのですが、どうも何かが違うようで7桁の数字を入力しても学番は7桁〜のほうがでてしまうんです。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void main(){

char x[100];
int y,z;

printf("学番を入力:");
gets(x);

y=strlen(x);
     z=atoi(x);

if(y==7 && z==7){
printf("g%s@yahho\n",x);
}
else{
printf("学番は7桁の数字で入力して下さい\n");
}


}


どこがいけないのでしょうか?
何度も住みませんが、よろしくお願いします。
0178デフォルトの名無しさん2009/02/02(月) 23:37:27
>>175
バブルソート フローチャート
でググれ
0179デフォルトの名無しさん2009/02/02(月) 23:40:46
>>177
Z==7がまずい
というかそれ、問3じゃないのか?
0180デフォルトの名無しさん2009/02/02(月) 23:44:31
>>179
あ、ごめんなさい。問3でした

z==7がいけない、ということは
y==7 か z==7  どちらかしか使用してはいけないということなのでしょうか
文字数が7、尚且つ数字であるとき、という風にしたいのですが・・・
0181デフォルトの名無しさん2009/02/02(月) 23:57:45
>>172
仕様を、常に自分からで敵は出せる最小を必ず出す、とすれば楽になる。
が、10行20行で分かりやすく纏めるのやファイルうpはめんどい。

流れの案だけ、書いとく。

全体 [シャッフル]->[配布]->[スタート(自分の番)]->[ループ&終了判定]->[終了時コメント]->end
ループ部分
自分の番:自分のカードを printf("%d:%d ",i%10,ME[i]);とかで表示
scanfでキーボードの1,2,3,...,9,0を選択。フラグ処理などしないと、同じカード捨てる事になる。
相手の番:場に出ている番号(初めは0)より大きい最小のカードのインデックスを計算
あればそのインデックス。無ければ自分の番に。
細かいシステム管理(枚数チェックとか、場のカードの数・切るとか)も必要だし、
[シャッフル]7行 [配布]2〜5行 [ループ&終了判定]30行位[終了時コメント]3行
整理して、こんなもんかな?
0182デフォルトの名無しさん2009/02/02(月) 23:57:45
>>180
言ってることとやってることがめちゃくちゃだぞ

数字かどうか判断するにはxに格納された文字が
'0'と'9'の間にあるかどうかを判断すべき

それと宿題程度ならいいと思うが
getsはなるべく使わない方がいい
0183デフォルトの名無しさん2009/02/03(火) 00:00:57
>>182
よく使ってるscanfも曲者と聞きますし、fgets&sscanfが良いと聞きますが
宿題レベルでもでしょうか?実感ないのですが。
0184デフォルトの名無しさん2009/02/03(火) 00:01:39
z = atoi(x) だから
z==7だと zが7かどうかを判定してることになってしまう。
ほしいのは7桁かどうかだから、これはまずい。

あとはzが7桁の数字かどうか判定すればいいだけだよ。

それとgets()は使わない方がいい。
この辺参考に
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getc.3.html

0185デフォルトの名無しさん2009/02/03(火) 00:05:49
>>183
オーバーフローするような値を
敢えて入力するやつはいないと思うから
宿題レベルでとやかく言われることはないんじゃね?
でもリスクは少なくしておくべき
0186デフォルトの名無しさん2009/02/03(火) 00:05:57
y=strlen(x);

bool b = true;
int i;
for( i = 0; i < 7; ++i ){
if( x[i] < '0' || x[i] > '9' ) b = false;
}
if(y==7 && b ){
printf("g%s@yahho\n",x);
}
else{
printf("学番は7桁の数字で入力して下さい\n");
}
0187デフォルトの名無しさん2009/02/03(火) 00:06:50
>>174
出せるカードの中で一番弱いカードを出す程度で十分。
商用ゲームですらこれのことあるし。
0188デフォルトの名無しさん2009/02/03(火) 00:07:33
>>174
常に1枚だすので大丈夫です。よろしくお願いします。
0189デフォルトの名無しさん2009/02/03(火) 00:17:01
C言語、プログラミング基礎の問題です。

整数型変数xに値16を代入文で直接代入する代わりに、ポインタ変数を用いて
間接的に行う方法を与えよ。

とても簡単だと思うのですがわからなくて。。。
お願いします
0190デフォルトの名無しさん2009/02/03(火) 00:21:08
>>189
int x;
int *px;
px = &x;
*px = 16;

こういうことかな?
0191デフォルトの名無しさん2009/02/03(火) 00:23:53
もしくは px[0] = 16 も。ポインタ理解できると→*(&px[1]-1)=16 でもできる事がわかる。
0192デフォルトの名無しさん2009/02/03(火) 00:24:34
>>182
>>184
ありがとうございます。おかげさまで無事できました!

授業ではgets()しか習っていませんでしたが使わないほうがいいのですね。勉強になります。
01931812009/02/03(火) 00:40:07
シャッフルだけ。
大富豪以外にもカードゲームボードゲームでも同じ事するはずだから、良いソース持ってる人いるだろうケド
山のシャッフルは、短絡的に実装しました。
バグさえなければ、大雑把にCARD_NUMの2乗オーダーの計算だと思うので
10000枚とかでなければ気にする事無いと思います。

#define CARD_NUM (13*4)
int main(){
int cards[CARD_NUM];// カード番号とカードの数字を対応
int yama[CARD_NUM];// カードをシャッフルして代入
int i,j,ran;
srand((unsigned) time(NULL));

for(i=0;i<CARD_NUM;i++){ cards[i]=i; yama[i]=-1; }
for(i=0;i<CARD_NUM;i++){
ran = rand()%(CARD_NUM);
if(yama[ran]==-1) yama[ran]=i; //トランプの数字にするには yama[ran] = i/4;
else i--; //やり直し
}
/* シャッフル検査 */
for(i=0;i<4;i++){
for(j=0;j<13;j++) printf("%2d/",yama[i*13+j]);
puts("");
}
return 0;
}
0194デフォルトの名無しさん2009/02/03(火) 00:49:48
>>190 >>191
ありがとうございます!!

あと、while(条件){作業}
を、if文とdo-while文を使って表現すると、どうなるのでしょうか・・・
0195デフォルトの名無しさん2009/02/03(火) 00:57:24
マルチポスト

224 名前:デフォルトの名無しさん[] 投稿日:2009/02/02(月) 22:46:51
while文をif文とdo-while文を使って表現せよ

という問題なんですが…ifも使わなきゃいけないというところがわかりません
どうすればよいのですか??
0196デフォルトの名無しさん2009/02/03(火) 01:00:04
>>195
イタチといわれたので
0197デフォルトの名無しさん2009/02/03(火) 01:02:24
それでも前のスレで答えてくれている人がいるだろ。
チェックしてないのかよ。
0198デフォルトの名無しさん2009/02/03(火) 01:03:38
見たけどあってるかわからなかったんで
0199デフォルトの名無しさん2009/02/03(火) 01:05:39
じゃあこのスレで答えても同じことになるだろ。
0200デフォルトの名無しさん2009/02/03(火) 01:08:58
答え2つあったんですけど、どっちがあってるかわかりますか
このスレは答え教えてくれるんで
0201デフォルトの名無しさん2009/02/03(火) 01:15:05
じゃあもう一個増やしてやるよ。

do{
if(!x){ break; }
/*処理*/
}while(x);

0202デフォルトの名無しさん2009/02/03(火) 01:27:04
暇人・・・ww
0203デフォルトの名無しさん2009/02/03(火) 01:55:24
do {
if(!x) break;
/*処理*/
}while(1);
でもよくね?
0204デフォルトの名無しさん2009/02/03(火) 01:58:34
do {
loop:
    if (!x)
        break;
    /* 処理 */
    goto loop;
} while (0);
0205デフォルトの名無しさん2009/02/03(火) 01:59:27
あ〜あ夜は暇だなっと。マジレスでもするか
while(cnd){
/* ○処理 */
}
if(cnd?"GO"[0|0]:0x0)do{
/* ○処理 */
}while("yoru"['-'-'-']?cnd:69);
0206デフォルトの名無しさん2009/02/03(火) 06:08:15
[1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け)
[2] http://www.pref.fukushima.jp/pc-concours/2008/03/pdf/2007honsen.pdf 問6 問7
[3] 環境
 [3.1] OS:Windows
 [3.2]visual C++
 [3.3] 言語:C++
[4] 期限: 2009年2月4日まで
[5] main関数を使いそれ以外にもユーザ定義関数を1つ以上作成すること。

入力はscanf 出力はprintfでお願いします。
>>46の時は、ほんと助かりました。
今回もお願いします。

0207デフォルトの名無しさん2009/02/03(火) 06:57:53
>>158
実行できなかったもので・・・
0208デフォルトの名無しさん2009/02/03(火) 07:38:52
>>206
問6
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8805.txt
0209デフォルトの名無しさん2009/02/03(火) 07:48:04
>>208
>入力はscanf 出力はprintfでお願いします。
ってかいてあるべ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8806.txt
0210デフォルトの名無しさん2009/02/03(火) 08:16:43
>>206
問7
#include <stdio.h>
#define COUNT_OHAJIKI 32
#define MAX_JIRO 25
int main(){
int n;
scanf("%d",&n);
while(n!=0){
int i,rest=COUNT_OHAJIKI,jiro[MAX_JIRO];
for(i=0;i<n;i++)scanf("%d", jiro+i);
i=0;
while(rest!=0){
rest-=(rest-1)%5;
printf("%d\n", rest);
rest-=jiro[i];
if(rest<0)rest=0;
printf("%d\n", rest);
i=(i+1)%n;
}
scanf("%d",&n);
}
return 0;
}
0211デフォルトの名無しさん2009/02/03(火) 10:13:29
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
   ・2つの分数の分子と分母を入力すると,それらの和・差・積・商を
    出力する.データは構造体で表現すること.
   ・分数計算では通分・約分には最大公約数が必要になる.通分には分母の最小公倍数が,
約分には最第公約数が必要である.したがってこれらを計算する関数をそれぞれ作る.
   ・最大公約数を求めるには,次のアルゴリズムを使うとよい(ユークリッドの互除法).
    �@ mをnで割る (ただしm>n).
    �A �@の割る数を�@の余りで割る.
    �B �Aの割る数を�Aの余りで割る.
    �C 以下同様に,余りが0になるまで繰り返し,そのときの「割る数」が最大公約数になる.
   ・2つの数,m,nの最小公倍数は,m*n/(mとnの最大公約数)で求めることができる.


   (実行例)
    1つめの分数の分子・分母の入力―>3  4
    2つめの分数の分子・分母の入力―>1  6
    和:11 / 12
    差: 7 / 12
    積: 1 / 8
    商: 9 / 2

[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、構造体を勉強しました。
初心者なので、初心者にもわかるようなプログラムをお願いします。
0212デフォルトの名無しさん2009/02/03(火) 11:25:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8807.txt
[3] 環境
 [3.1] OS: Windows Vista 
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月04日17:00まで]
[5] その他の制限:
0213デフォルトの名無しさん2009/02/03(火) 11:28:51
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8808.txt
[3] 環境
 [3.1] OS: Windows Vista 
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月04日17:00まで]
[5] その他の制限:
0214デフォルトの名無しさん2009/02/03(火) 11:36:27
ノ >>149
これ見てから考えな。あと、これくらい一つのファイルにまとめろ。
0215デフォルトの名無しさん2009/02/03(火) 11:40:08
>>212
#include <stdio.h>
int main(void) {
int i, j, n;
printf("段数を入力してください: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < i + 1; j++) printf("*");
printf("\n");
}
return 0;
}
0216デフォルトの名無しさん2009/02/03(火) 11:41:04
>>211
構造体はどういう形で作ればいいんだ?
指定なし?
なしなら授業で作った構造体を1つ晒してくれ
0217デフォルトの名無しさん2009/02/03(火) 11:42:41
>>213
#include <stdio.h>
int main(void) {
int i, j, n;
printf("段数を入力してください: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < i; j++) printf(" ");
for(j = 0; j < (n - i) * 2 - 1; j++) printf("*");
printf("\n");
}
return 0;
}
0218デフォルトの名無しさん2009/02/03(火) 12:48:06
>>211
どう?
#include <stdio.h>
typedef struct bunsu{int bunshi,bunbo;} BUNSU;
int main(){
BUNSU bunsu1,bunsu2;
printf("1つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu1.bunshi),&(bunsu1.bunbo));
printf("2つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu2.bunshi),&(bunsu2.bunbo));
int bunbo=bunsu1.bunbo*bunsu2.bunbo;int bunshi=bunsu1.bunshi*bunsu2.bunbo+bunsu2.bunshi*bunsu1.bunbo;
int GCD = gcd(bunshi,bunbo);
printf("和:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo-bunsu2.bunshi*bunsu1.bunbo;
GCD = gcd(bunshi,bunbo);
printf("差:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunshi;
GCD = gcd(bunshi,bunbo);
printf("積:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo;
bunbo=bunsu1.bunbo*bunsu2.bunshi;
GCD = gcd(bunshi,bunbo);
printf("商:%d / %d\n",bunshi/GCD,bunbo/GCD);
return 0;
}
int gcd(int m,int n){
if(m<n){int temp=m;m=n; n=temp;}
int amari;
while((amari=m%n)!=0){m=n;n=amari;}
return n;
}
0219デフォルトの名無しさん2009/02/03(火) 13:18:18
全部bunではじめるなよ。 bunsu とbunsu1じゃ大違いだろ。int int1;と同じ。
編集してみた。
#include <stdio.h>
typedef struct bunsu{int son,mom;} BUNSU;

int main(){
BUNSU A,B;
int new_mom,GCD;
printf("1つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(A.son), &(A.mom));
printf("2つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(B.son), &(B.mom));

GCD = gcd(A.mom,B,mom); new_mom = (A.mom*B.mom)/GCD; // 通分
GCD = gcd(new_mom,A.son+B.son);
printf("和:%d / %d\n",(A.son+B.son)/GCD,new_mom/GCD);
GCD = gcd(new_mom,A.son-B.son);
printf("差:%d / %d\n",(A.son-B.son)/GCD,new_mom/GCD);
GCD = gcd(A.son*B.son,A.mom*B.mom);
printf("積:%d / %d\n",(A.son*B.son)/GCD,(A.mom*B.mom)/GCD);
GCD = gcd(A.son*B.mom,A.mom*B.son);
printf("商:%d / %d\n",(A.son*B.mom)/GCD,(A.mom*B.son)/GCD);
return 0;
}
int gcd(int m,int n){
if(m<n){int temp=m;m=n; n=temp;}
int amari;
while((amari=m%n)!=0){m=n;n=amari;}
return n;
0220デフォルトの名無しさん2009/02/03(火) 13:28:11
>>219
そんなのを気にするくらいなら
BUNSU bunsu_add(BUNSU a, BUNSU b);
的なのを作ったほうがよくないか?
0221デフォルトの名無しさん2009/02/03(火) 13:32:37
>>220
ツッコミドコロは、そこじゃないな。
0222デフォルトの名無しさん2009/02/03(火) 13:39:36
>>218をbun -> "空白"にWORDで置換してみると
文字数 896 -> 680。実にソースの24%がbun成分です。もはやネタソースだろ。
0223デフォルトの名無しさん2009/02/03(火) 13:39:52
大文字の変数とかやめてよ。
しかも一文字
0224デフォルトの名無しさん2009/02/03(火) 13:47:10
分子が息子で分母がお母さんかw
0225デフォルトの名無しさん2009/02/03(火) 13:49:17
>>222
一文字変数にしてご満悦って、70年代の世界からでも来たのかよ?
0226デフォルトの名無しさん2009/02/03(火) 13:50:00
>>219
通分が分からないって、ありえないだろ。
いじらなくても変数名だけ変えられたし。
02272192009/02/03(火) 13:50:29
小さいプログラムや、ローカルな変数の場合、無駄に長い変数は望ましくないと考えるが。
a,c,i,xは基本の型で、行列や構造体等A,Ary,Array場合によるが大文字も使う。

特にVBとか別言語触れてからは、使い分けるようになった。
>>224 ソースコードで変な想像したら負け組(new_mom?A.mom*B.son:A.son*B.momとか)
0228デフォルトの名無しさん2009/02/03(火) 13:50:52
>>227
ばかか
0229デフォルトの名無しさん2009/02/03(火) 13:52:31
>>227
バカだから、テストどころかコンパイルもしないで貼ってみたわけね・・・
0230デフォルトの名無しさん2009/02/03(火) 13:52:55
>>227
小学校からやり直せよ
0231デフォルトの名無しさん2009/02/03(火) 13:54:02
>>227
そもそも>>219は計算が間違ってるwww
0232デフォルトの名無しさん2009/02/03(火) 14:09:51
計算しなければどうということはない
0233デフォルトの名無しさん2009/02/03(火) 14:18:21
[1] 授業単元: アルゴリズムと数値計算
[2] ニュートン法とオイラー法で√2の近似値を計算するプログラムを作れ
ただし、計算は50ステップ行い、それぞれの初期値とsqrt(2)との差を表示する事。
初期値は各々が定めてよい
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC2005EE
 [3.3] 言語:C
[4] 期限:09/02/04迄
[5] その他の制限:
文字表示・繰り返し文・条件判断とオイラー法の計算は分かります
0234デフォルトの名無しさん2009/02/03(火) 14:58:41
>>233
オイラー法ってこんなか?
#include <stdio.h>
#include <math.h>
double newton(){
double x=1.0;
int i;
for(i=0;i<50;i++){
x=x-(x*x-2)/(2*x);
}
return x;
}
double euler(){
int n=50;
double x=1.0,h=(double)(2-1)/n;
int i;
for(i=0;i<n;i++){
x=x+h/(2*x);
}
return x;
}
int main(){
double temp=newton();
printf("sqrt(2):%f,newton:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp);
temp=euler();
printf("sqrt(2):%f,euler:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp);
return 0;
}
0235デフォルトの名無しさん2009/02/03(火) 15:19:50
>>227
VBに触れたから呪われたんだな
0236デフォルトの名無しさん2009/02/03(火) 16:04:45
>>234
ありがとうございます!
for文の中身1行で表せるんですね。
初期値表示と(double)(2-1)を2.0-1.0など軽く置き換えて完成しました。
0237デフォルトの名無しさん2009/02/03(火) 19:48:11
>>193
O(N^2)じゃなくO(NlgN)だ
0238デフォルトの名無しさん2009/02/03(火) 20:41:50
だいたい、プログラム入れてみるとxln(x)が定数なしで自己相関関数に一致してるくらいだな。
つまり、O(NlnN)だな。でも、NlogNだと思ってて、N^2だったってよりよくない?
0239デフォルトの名無しさん2009/02/03(火) 20:51:59
うん。
0240デフォルトの名無しさん2009/02/03(火) 21:18:36
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
 角度はラジアン単位(rad),度単位(degree)【°】で表される.さらに 度単位は 32.4°と10進小数表示する場合と
32度24分と度分秒で表示する場合がある.(60秒で1分, 60分で1度)

�@2つの角度(度単位)を10進小数点2桁 でキーボードから入力し(例  69.21° と 33.73° ) 
 それらを度分秒単位で 表示させるプログラムを作成しなさい.

�Aさらに度分秒単位で表示された2つの角度の差を求め,度分秒単位で表示しなさい.
 計算は度分秒単位のまま引き算すること(60進法の引き算アルゴリズムを作成すること).

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年2月4日 13:00
[5] その他の制限: よろしくお願いします
0241デフォルトの名無しさん2009/02/03(火) 21:25:50
キーボードから入力し(例  69.21° と 33.73° )
2バイト文字か?まずその入力ができるかが問題だ。
Alt+半角で全角打てるけど、(例 69.21 と 33.73)の間違えだと言ってくれ。
0242デフォルトの名無しさん2009/02/03(火) 21:37:58
>>241
すみません
半角です
0243デフォルトの名無しさん2009/02/03(火) 22:03:28
>>211のものですが、>>219をコンパイルしたら
和と差が計算できなかったのですが、どうすれば
いいでしょうか?

どなたか教えてください。
0244デフォルトの名無しさん2009/02/03(火) 22:18:25
A.son *= B.mom; B.son *= A.mom; A.mom=B.mom=(A.mom*B.mom); // 通分(約分せず)
GCD = gcd(A.mom,A.son+B.son);
printf("和:%d / %d\n",(A.son+B.son)/GCD,A.mom/GCD);
GCD = gcd(A.mom,A.son-B.son);
printf("差:%d / %d\n",(A.son-B.son)/GCD,A.mom/GCD);
0245デフォルトの名無しさん2009/02/03(火) 22:23:43
分母: mom
分子: son
っていうネーミングセンスが素敵だ
0246デフォルトの名無しさん2009/02/03(火) 22:36:37
辞書片手に英語にしまくったら単語の意味を忘れて自分で読めないというのは聞かなくもないけれど、
日本語の一部を切り出して英語にするっていうのは新しい。
0247デフォルトの名無しさん2009/02/03(火) 22:40:47
>>240
誤差がぁぁぁ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8809.c
0248デフォルトの名無しさん2009/02/03(火) 22:42:30
>>240
#include<stdio.h>
#include<math.h>
typedef struct { int deg, min, sec; } Degree;
void rad2deg(Degree *pdeg, double rad) {
pdeg->deg = (int)rad;
rad = (fabs(rad) - fabs(pdeg->deg)) * 60;
pdeg->min = (int)rad;
rad = (rad - pdeg->min) * 60;
pdeg->sec = (int)rad;
}
void print_deg(const Degree *pdeg) {
printf("%d度%02d分%02d秒\n", pdeg->deg, pdeg->min, pdeg->sec);
}
void degsub(Degree *pdiff, const Degree *pdeg1, const Degree *pdeg2) {
pdiff->sec = pdeg1->sec - pdeg2->sec;
pdiff->min = pdeg1->min - pdeg2->min;
pdiff->deg = pdeg1->deg - pdeg2->deg;
if (pdiff->sec < 0) { pdiff->sec += 60; pdiff->min --; }
if (pdiff->min < 0) { pdiff->min += 60; pdiff->deg --; }
}
int main() {
double rad1, rad2;
Degree deg1, deg2, degdiff;
printf("radian1="); scanf("%lf", &rad1);
printf("radian2="); scanf("%lf", &rad2);
rad2deg(°1, rad1); printf("degree1="); print_deg(°1);
rad2deg(°2, rad2); printf("degree2="); print_deg(°2);
degsub(°diff, °1, °2); printf("degree1-degree2="); print_deg(°diff);
return 0;
}
0249デフォルトの名無しさん2009/02/03(火) 22:55:09
>>240の人気に嫉妬
#include <stdio.h>
#include <math.h>
struct ds_t { int d; int m; int s;};
struct ds_t dec2ds(double dd){
  struct ds_t ds;
  ds.d = floor(dd);
  ds.m = floor(60*(dd - ds.d) + 0.5/60);
  ds.s = floor(3600*(dd - ds.d) - 60*ds.m + 0.5);
  return ds;
}
void print_ds(struct ds_t *ds){
  printf("%d.%d\'%d\"\n", ds->d, ds->m, ds->s);
}
struct ds_t sub_ds(struct ds_t *ds1, struct ds_t *ds2){
  struct ds_t ds3;
  ds3.d = ds1->d - ds2->d;
  ds3.m = ds1->m - ds2->m;
  ds3.s = ds1->s - ds2->s;
  if(ds3.s < 0) ds3.s += 60, ds3.m--;
  if(ds3.m < 0) ds3.m += 60, ds3.d--;
  return ds3;
}
int main(void){
  double dd1, dd2;
  struct ds_t ds1, ds2, ds3;
  scanf("%lf%lf", &dd1, &dd2);
  ds1 = dec2ds(dd1); ds2 = dec2ds(dd2);
  print_ds(&ds1); print_ds(&ds2);
  ds3 = sub_ds(&ds1, &ds2);
  return 0;
}
02502482009/02/03(火) 22:57:35
degsubの符号の扱いが全然だめだった。>>248は取り下げます。
0251デフォルトの名無しさん2009/02/03(火) 22:58:00
>>243
そのコードはクズだ。捨てろ。
0252デフォルトの名無しさん2009/02/03(火) 23:00:11
[1] 授業単元:ループ
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8810.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2]コンパイラ名とバージョン:C++ Compiler 5.5/Turbo Debugger
 [3.3] 言語:C
[4] 期限:一ヶ月以内
[5] その他の制限:2重ループを使うらしいですが使わなくてもいいそうです。
■ このスレッドは過去ログ倉庫に格納されています