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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2008/09/30(火) 15:35:36
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
1、武君が持っているお金の3倍と景子さんが持っているお金の5倍を加えると7500円
武の2倍と景子の7倍を加えると8850円である。それぞれいくら持っているか

2、sinxとxを加えると1になった。xはいくらか

上の2つの問題について解く方法を考えプログラムをくめ
上の問題だけしか解けない方法でも構わない

できれば1はfor文の2重ループとx,yをランダムに発生させて合わせるという2パターン

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 2008年10月3日まで
[5] その他の制限:
ネット上にある連立方程式のプログラム(?)をつかわずにやれとのことですが気にしないでいいです
変な問題なのですがどなたかお願いします
953デフォルトの名無しさん:2008/09/30(火) 16:25:43
>>952
sinのも似たようなもんだよ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int takeru, keiko, found;
found = 0;
for(keiko = 1;keiko < 7500/5; keiko++){
for(takeru = 1;takeru < 7500/3; takeru++){
if(((takeru*3+keiko*5) == 7500) && ((takeru*2+keiko*7) == 8850))
found = 1;
if(found != 0)break;
}
if(found != 0)break;
}
if(found != 0)printf("武=%d 景子=%d", takeru, keiko);
}
void main(){
int takeru, keiko, found;
srand(time(NULL));
found = 0;
while(found == 0){
keiko = rand() / 7500/5 + 1;
takeru = rand() / 7500/3 + 1;
if(((takeru*3+keiko*5) == 7500) && ((takeru*2+keiko*7) == 8850))
found = 1;
}
if(found != 0)printf("武=%d 景子=%d", takeru, keiko);
}
954デフォルトの名無しさん:2008/09/30(火) 16:30:12
>>950
IPとして扱うならネットワークバイトオーダー(ビッグエンディアン)だろう
address & 0x000000ff は192になる
955デフォルトの名無しさん:2008/09/30(火) 16:35:24
またバカが掻き回しにきたかw
956801:2008/09/30(火) 16:43:44
>>802
コンパイルしてみた結果動くようです。
で、このプログラムはどういった動作をするものでしょうか?
結局よく分からなくて適当書いて提出しました。
とはいえ、取り敢えずどうもありがとうございました。
957デフォルトの名無しさん:2008/09/30(火) 16:54:16
>>956
関数名見ただけで何してるかわかるけど
958946:2008/09/30(火) 19:18:33
#include<stdio.h>

main()
{
char str[10];

gets(str);
printf("入力文字列:");
puts("str");

printf("逆転文字列:");

}

こんな感じかな?
全然わかんない・・・・
文字を逆転するのもどうしたらいいのかわからないし・・・・
誰か助けてください
959946:2008/09/30(火) 19:21:26
puts(str)だった
960946:2008/09/30(火) 19:32:07
>>947

習ってるのは
#include<stdio.h>
main()

みたいな感じで、main()をいじる方法はならってないです。
int main(〜)じゃない方法で出来ないでしょうか?

後最後のreturn 0;というのもまだ習っていません。

>>958みたいな感じではこのプログラムは作れないんでしょうか?

連レス失礼しました。
961デフォルトの名無しさん:2008/09/30(火) 19:37:28
>>960
#include <stdio.h>
#include <string.h>
main()
{
char buf[1600];
int i;

printf("入力文字列:"); gets(buf);
i= strlen(buf);
printf("逆転文字列:");
while (i-- > 0) {
printf("%c", buf[i]);
}
printf("\n");
}

説明するのもめんどくさいからこれで
962デフォルトの名無しさん:2008/09/30(火) 19:39:56
>>937
>>932ですが、わかりにくかったみたいですみません。
例えば、キーボードから0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9
と、入力したとき、実行結果が
histo[0]=**
histo[1]=**
histo[2]=**
histo[3]=**
histo[4]=**
histo[5]=**
histo[6]=*
histo[7]=*
histo[8]=*
histo[9]=*
のように表示するプログラムをつくるという意味です(ヒストグラム)
ポインタは使用してもかまいません。必ず配列の受け渡しを行っていることが前提です。
どなたかお願いします。
963デフォルトの名無しさん:2008/09/30(火) 20:12:11
int histo[10] = {0};

while(適当に) histo[input_value]++;

と、詰めて、
for (i=0; i<10; i++) {
while(histo[i] != 0) {
printf("*");
histo[i]--;
}
printf("\n");
}
という感じに出力すればよいのではないかな。
964デフォルトの名無しさん:2008/09/30(火) 20:20:03
>>953さん
ありがとうございます。すごく助かりました
965デフォルトの名無しさん:2008/09/30(火) 21:05:31
>>953
すいません下のランダムの方がうまくいかないのですが
966デフォルトの名無しさん:2008/09/30(火) 21:35:57
>>965
どううまくいかないんだろう。
永久ループに見せかけていつかそのうち見つかるってアレじゃないのかな。
967デフォルトの名無しさん:2008/09/30(火) 21:36:36
>>965
rand() / 〜 じゃなくて rand() % (〜) の間違いだと思う
968デフォルトの名無しさん:2008/09/30(火) 21:42:38
できました。ありがとうございます
あなたが解けない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++の宿題を片付けます 115代目
http://pc11.2ch.net/test/read.cgi/tech/1217741118/
970デフォルトの名無しさん:2008/09/30(火) 22:24:22
>>963
ありがとうございます。配列の受け渡しはどのようにすればよいのでしょうか。
971デフォルトの名無しさん:2008/09/30(火) 22:34:48
>>970
何に渡すの?別にmainだけでいいのでは。
というか内部関数作って配列渡そうとするとポインタ使うことになっちゃうよ

諸々を検討して、ああ、void main ってことなんだなって理解してたのに。
972971:2008/09/30(火) 22:36:19
と思ったら配列渡す前提となっていた。
どこを関数化するんですか?
973デフォルトの名無しさん:2008/09/30(火) 23:06:32
>>972
入力した0〜9までの個数を*で表示する部分を関数化です。
974デフォルトの名無しさん:2008/09/30(火) 23:21:26
>>973
mainで
show_histogram(histo);
として、

void show_histogram(int *data) {
/* 出力処理 */
}

という関数を作ればよいのではないかな。
975デフォルトの名無しさん:2008/10/01(水) 00:05:23
ポインタを習っていない段階でも

void xxxxx(int data[10]) {
/* 中身 */
}

は習った気がする。
976デフォルトの名無しさん:2008/10/01(水) 00:11:27
>>974
void histogram(int *data){
int histo[10]={0};
int i;
for(i=0;i<10;i++){
while(histo[i]!=0){
printf("*");
histo[i]--;
}
printf("\n");
}
}
int main(void){
int j, a[16];
for(j=0;j<16;j++){
scanf("%d",&a[j]);
}
histogram(a);
return 0;
}
という感じにすればよいのでしょうか。





977952:2008/10/01(水) 00:43:26
>>952の1番目の問題を解いてもらって2番目のsinx + x = 1 のほうの問題をやっていたのですがうまくいきませんでした
for文でまわしても結果がでてこないのとsinxのxはラジアンで扱ったほうがいいのかどうか(どっちでやってもうまくいかなかったんですが)わかりません
どなたかできる方いたら教えていただけないでしょうか?よろしくお願いします
 
978デフォルトの名無しさん:2008/10/01(水) 00:45:22
>>977
double f(double x){
return sin(x)+x-1;
}
として、あとはニュートン法でも二分法でも
979952:2008/10/01(水) 01:19:08
アドバイスありがとうございます。頭悪くて申し訳ないんですが以下のプログラムは何がいけないんでしょうか?全部おかしいですか?
#include <stdio.h>
#include<math.h>

double f(double x){
return sin(x)+x-1;
}

void main(void)
{
double x,z;
for(x=0;x<5;x++){
if(f(x)==0)z=1;
if(z!=0)printf("%d",x);
}
}
980952:2008/10/01(水) 01:22:12
すいませんこっちでした

#include <stdio.h>
#include<math.h>

double f(double x){
return sin(x)+x-1;
}

void main(void)
{
double x,z;
z=0;
for(x=0;x<5;x++){
if(f(x)==0)z=1;
if(z!=0)
{printf("x=%d\n",x);
z=0;
}

}
}
981デフォルトの名無しさん:2008/10/01(水) 01:30:50
>>952

#include <stdio.h>
#include <math.h>


int
main(void)
{
double x = 0.0;

for ( x = 1.0; 1.0E-8 < x; x -= 0.01 ) {
if ( (sin(x)+x-1.0) < 1.0E-8 ) {
printf("x == %f\n", x);
break;
}
}

return 0;
}
982デフォルトの名無しさん:2008/10/01(水) 01:39:01
>>976
>>963 には入力データを配列に詰める処理と、表示処理を書いているんだけど
なぜ >>937 のエッセンスを微妙に混ぜてしまったの?

分からないままとりあえず組み合わせて
> という感じにすればよいのでしょうか。
と締めくくるのは、クマーAAを生むのに必要な技術であって、プログラムを組むには必要ないよ。
983デフォルトの名無しさん:2008/10/01(水) 01:56:40
懐かしいネタがw

void show_histogram(int *data){
int i;
for(i=0;i<10;i++){
while(data[i]!=0){
printf("*");
data[i]--;
}
printf("\n");
}
}
int main(void){
int i, input_value, a[10] = {0};
for(i=0;i<16;i++){
scanf("%d",&input_value);
a[input_value]++;
}
show_histogram(a);
return 0;
}

こうですか!?わかりません!教えてください!
if禁止なので入力チェックは本当にわかりません><
984デフォルトの名無しさん:2008/10/01(水) 07:29:23
次スレ立てました
C/C++の宿題を片付けます 116代目
http://pc11.2ch.net/test/read.cgi/tech/1222813731/
985946:2008/10/01(水) 10:48:55
>>961
ありがとうございました。
986デフォルトの名無しさん:2008/10/01(水) 13:51:59
[1] 授業単元: c++
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7745.txt
・「年(西暦)」「月」を入力したら,その月のカレンダーを表示するプログラムを作成しなさい。ただし,下記の条件を満たすものとする。

【条件】
(1)カレンダークラスを作成し,main関数でカレンダークラスの実体を生成し,カレンダークラス内のメンバ関数(show関数)を呼び出してカレンダーを表示する。
(2)カレンダークラスはカプセル化されていること。
(3)カレンダー表示には,年,月および曜日,日を表示すること。
(4)上記以外については自由に作成してよい。


[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VS2008
 [3.3] 言語:C++
[4] 期限: ([2008年10月5日まで]
987986:2008/10/01(水) 13:56:34
もしよければ閏年の表示もお願いします。
988デフォルトの名無しさん:2008/10/01(水) 13:56:54
>>986
>>715-719とかにあった気がする
989デフォルトの名無しさん:2008/10/01(水) 14:39:25
[1] 授業単元: 数理科学C
[2] 問題文: 二分法を用いて√2の近似値を求めるプログラム
[3] 環境
 [3.1] OS: Windows/
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2008年10月2日まで]
[5] その他の制限:特になし
990デフォルトの名無しさん:2008/10/01(水) 15:10:20
>>984
乙!

>>989
#include<stdio.h>
#include<math.h>

double f(double x){
return x*x-2;
}

int main(void){
double a=0.0, b=2.0, x;

while(f(a)*f(b)<0.0){
x=(a+b)/2;
if(f(a)*f(x)<0) b=x;
else a=x;
printf("x=%f f(x)=%f\n", x, f(x));
if(fabs(f(x))<1e-7) break;
}

return 0;
}

>>980
これの関数 f(x) の中身を書き換えればおk
991デフォルトの名無しさん:2008/10/02(木) 16:03:28
質問なのですが、プログラム中に別のプログラムを呼び出す場合は
データをコマンドライン上で受け渡しはできないのでしょうか?
それともtxtデータなどで外部出力したものを読み取るしかないのでしょうか。
992デフォルトの名無しさん:2008/10/02(木) 16:11:49
>>991
LinuxでもWindowsでも引数つきでプログラム起動は出来るだろう
993デフォルトの名無しさん:2008/10/02(木) 16:15:07
引数か標準入力に書き込むか
994991:2008/10/02(木) 16:30:53
調べてみたら標準出力のパイプ処理でうけわたしできるみたいですね。
ありがとうございました。
995デフォルトの名無しさん:2008/10/02(木) 20:05:42
埋めるぜ
996デフォルトの名無しさん:2008/10/02(木) 20:06:28
次スレは >>984
997デフォルトの名無しさん:2008/10/02(木) 20:10:55
オレにとって手ごろな宿題が無くなってきてるな
ストライクゾーンが狭いからしょうがないけど
998デフォルトの名無しさん:2008/10/02(木) 20:23:24
1000取っちゃうぜ?
999デフォルトの名無しさん:2008/10/02(木) 20:24:43
どうぞどうぞ
1000デフォルトの名無しさん:2008/10/02(木) 20:26:11
では遠慮なく

1000ならオレ様勝手にレベルアップ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。