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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。
気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 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

【前スレ】
C/C++の宿題を片付けます 53代目
http://pc8.2ch.net/test/read.cgi/tech/1132102992/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0153デフォルトの名無しさん2005/12/02(金) 22:37:25
>>152
tsvかcsvに出力して、それをExcelで読み込んでグラフに出すんでもいいのかな。
0154デフォルトの名無しさん2005/12/02(金) 22:40:06
>>153 指定無いんだから良いんじゃね?俺なら適当に吐いてgnuplotだけど
0155デフォルトの名無しさん2005/12/02(金) 22:43:06
>>150 f を数値積分.結果はちゃんとチェックしてないので適当に検証しといて.
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.141592;
double f(double x) {
  const double u = 110.9, sigma = 4.7;
  return 1.0/sqrt(2*PI)/sigma * exp(-(x-u)*(x-u)/2/sigma/sigma);
}
double F(double a, double b) { // F = integrate[f, {x, a, b}]
  const double h = 1e-4;
  double S = 0;
  for (double x = a; x <= b; x += h) 
    S += (f(x)+f(x+h))*h/2; // trapezoid integration method:
  return S;
}
int main() {
  double a, b; cin >> a >> b;
  cout << F(a,b) << endl;
}
01561552005/12/02(金) 22:45:30
>>155 数値積分の for の中の x <= b を x < b に訂正.細かいとこだけど気になるので.
0157デフォルトの名無しさん2005/12/02(金) 23:10:31
質問です。(低能です)
改行は\n
tabは\t
ではスペースは?
0158デフォルトの名無しさん2005/12/02(金) 23:20:22
' '
0159デフォルトの名無しさん2005/12/02(金) 23:32:16
>>158
ホント?
0160デフォルトの名無しさん2005/12/02(金) 23:33:10
>>159
ホント
01611452005/12/02(金) 23:56:31
>>155
素早い回答どうもありがとうございます。m(_ _)m
0162デフォルトの名無しさん2005/12/03(土) 00:01:39
システムコールの授業で「標準入力からテキストを入力し、空行を取り除いて標準出力に出力するプログラムを書け。ただし、入出力を行うシステムコールを直接使用すること。」っていう課題が出ました。
下のプログラムを改良すればいいらしいのですが…
#include <stdlib.h>
#include <unistd.h>
main(){
charbuf[1024], buf1[1024], *p;
ssize_tlen, len1, len2;
charc, s = '\n',n;
size_ti,j;
while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
len1 = 0;
for (i = 0; i < len; i ++) {
c = buf[i];
if (!(s == '\n' && c == '\n')) {
buf1[len1] = c;
len1 ++;}
s = c;
printf("%c",s);}
p = buf1;
while ((len2 = write(STDOUT_FILENO, p, len1)) >= 0 && len1 > len2) {
len1 -= len2;
p += len2;}
if (len2 == -1) {
exit(1);}}
if (len == -1) {
exit(1);}
return 0;}
よろしくお願いします。

0163デフォルトの名無しさん2005/12/03(土) 01:58:23
テンプレがあるのに無視する奴って、どういう頭の構造をしてるのか見てみたいよな。
0164デフォルトの名無しさん2005/12/03(土) 02:03:38
struct atama
{
int baka;
int aho;
int kitigai;
}
0165792005/12/03(土) 02:27:01
>>153
はい、おそらく大丈夫です。
0166デフォルトの名無しさん2005/12/03(土) 02:51:56
【質問テンプレ】
[1] 授業単元: 計算機科学
[2] 問題文(含コード&リンク):
NxNの正方形状に並んだ点からなる地図があり、各点は陸か水のどちらかを表している。
地図の周囲を海と見なし、海から縦方向または横方向に水を表す点で結合している点を
海を表す点に置き換えるプログラムを作成せよ。

具体的には陸を0、水を1、海を2で表すと左から右に書き換えるようなプログラムです。
1100   2200
0100 ⇒ 0200
0010   0010
0001   0002

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年12月16日
[5] その他の制限: 基本的な命令語、文字列、配列(2次元含む)、関数、ポインタ、構造体まで

自力では2次元配列で地図データを入力したところで躓いてしまいました。
どなたかご教示お願いします。
0167デフォルトの名無しさん2005/12/03(土) 03:02:25
二次元配列でデータ持ってるんだったら
出来たようなものでは?
0168デフォルトの名無しさん2005/12/03(土) 03:03:49
2次元配列からビットマップ作って
描画系APIで塗り潰して再び
2次元配列に戻すとあら不思議
0169デフォルトの名無しさん2005/12/03(土) 06:36:15
>>164
構造体なのに;がないあたりの完成度高めですね。
0170デフォルトの名無しさん2005/12/03(土) 07:04:29
>>166
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1186.txt
0171デフォルトの名無しさん2005/12/03(土) 07:36:37
>>170
ちょっとNを大きくして市松模様(4アイテム毎の)みたいなパターンにするとスタックオーバーフロー
0172デフォルトの名無しさん2005/12/03(土) 07:54:57
>>171
宿題だから気にしないw
で、Nがどれくらいでスタックオーバーフローがでた?
0173デフォルトの名無しさん2005/12/03(土) 08:05:48
171 じゃないけど全部 1 で埋め尽くされたものに対して N = 256 くらいでスタックオーバーフロー.
0174デフォルトの名無しさん2005/12/03(土) 08:08:25
172だけど全部1で埋め尽くされたものに対してN=100でスタックオーバーフロー(VC)。
0175デフォルトの名無しさん2005/12/03(土) 08:26:50
>>172 そのアルゴリズム的には市松模様じゃなくて
全部 1 で埋まってる時が一番スタックが深くなりそうなので、

for(y = 0; y < N; y++){
for(x = 0; x < N; x++){
map[y][x] = 1;
}
}

のパターンを作って実験。

N = 192 まで OK
N = 193 だと関数から main に戻ってこないw

Windows XP
VC++ 6.0
リンクオプションは特に書かずデフォルトのままです。
01761722005/12/03(土) 08:29:45
多分、宿題で出すにはクオリティ高すぎになるかもしれないが、
スキャンラインシードフィルアルゴリズムを使ってみるかwww
0177デフォルトの名無しさん2005/12/03(土) 08:31:11
スキャンの進行方向へ行くときはスタックに積まずに戻る
垂直方向へ行く時だけスタックする
関数再帰呼び出しはせずにデータ専用のスタックを用意する

等の対処が必要ですね
01781722005/12/03(土) 09:28:44
で、やってみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1187.txt

N=300では正常動作してるっぽい。N=400でだめっぽいがw
mallocの限界?
0179デフォルトの名無しさん2005/12/03(土) 09:39:31
>>151
#include<stdio.h>
#define vip 3/*要素数*/

void num_input(int *i){
while(1){
scanf("%d%*[^\n]%*c",i);
if(((*i-99)<0)&&((*i-9)>0)) break;
}
}

void intary_rcpy(int v1[],const int v2[],int no){
int i;
for(i=0;i<no;i++) v1[i]=v2[no-i-1];
}

int main(void){
int num,i,v1[vip];
const int v2[vip];
num_input(&num);
printf("問題1:%d,%d\n",num,(num/10)*(num-(num/10)*10));
puts("\n問題2:");
for(i=0;i<vip;i++){
printf("v2[%d]=",i);
scanf("%d%*[^\n]%*c",&v2[i]);
}
intary_rcpy(v1,v2,vip);
for(i=0;i<vip;i++){
printf("v1[%d]=%d\n",i,v1[i]);
}
return 0;
}
01801722005/12/03(土) 09:42:36
はううう(汗)やばっ、くだらないミスしてた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1188.txt
0181デフォルトの名無しさん2005/12/03(土) 09:59:23
>>172
ローカル変数で
struct point2d{
int x,y;
}stack[N*N];
ってやっぱりスタックが・・・
0182デフォルトの名無しさん2005/12/03(土) 10:07:19
struct point2d{
int x,y;
}stack[N*N];

グローバルに持っていったらN=800でもOKのようです。
ここの部分もmallocで確保してもよさそうです。
01831722005/12/03(土) 10:13:07
めんどうで手抜きした、正直すまんかった。

あとこのサイズってN*Nが最適値じゃないし、、、まあ動くからいっかw
だれか数学的に求められる人居たらヘルプ。
0184デフォルトの名無しさん2005/12/03(土) 11:04:39
>>172
とりあえずその実装だと N^2 はかなりギリギリで、実際全て 1 の入力に対して N^2 使ってる.

……って,これ実装おかしいだろ.次のスタック積んだ後の for(;cx<=rx && map[my-1][cx]!=src;cx++); は,
どうせスキャンラインで消えるところの読み飛ばしを意図してんじゃないの?

まあそれを訂正した後だとしても,少なくとも N^2/2 は必要( map[y][x] = (y % 2 ? 1 : x % 2); ) .
平均の意味でメモリ使用量をケチるなら,多分連結リストがベター.
01851842005/12/03(土) 11:06:23
訂正の意味は !=src を ==src にすることね.今の実装だとこの for は全く回らない.
0186デフォルトの名無しさん2005/12/03(土) 11:34:10
大きさを気にするくらいならスタックじゃなくてヒープに配置すりゃいいのに
0187デフォルトの名無しさん2005/12/03(土) 13:05:40
[1] 授業単元: プログラム入門
[2] 問題文(含コード&リンク):次のプログラムを作成せよ。ただし各関数は
指定された書式に従って呼び出されるものとし、それにあわせて関数の戻り値および
引数を設定すること
・半径rの円の円周の長さlおよび面積sを算出する関数circle()を定義し、半径10cmの
円についてそれぞれの値を求める。(πは3.1415926536)
書式:void circle(double r , double *l , double *s)

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:12月4日昼12時

ようやくポインタを習い始めました・・・。よろしくです。
0188デフォルトの名無しさん2005/12/03(土) 13:14:02
>>187
#define PI 3.1415926535
void circle(double r, double *l, double *s) { *l=(2.0*PI*r);*s=(PI*r*r); }
main() { double l, s; circle(10,&l,&s); printf("%lf %lf\n", l, s); }
0189デフォルトの名無しさん2005/12/03(土) 13:15:01
void circle(double r , double *l , double *s) {
*l=2*r*3.1415926536;
*s=r*r*3.1415926536;
}
int main(){
double r,l,s;
r=10;
circle(r,&l,&s);
printf("%fの円の長さは%f, 面積は%f",r,l,s);
return 0;
}
0190デフォルトの名無しさん2005/12/03(土) 13:15:05
半径rはどうやって得るんだ?
出力はどうなればいいんだ?
01911722005/12/03(土) 13:19:08
>>185 thx.
for(;cx<=rx && map[my-1][cx]!=src;cx++){printf("#");};
ってやったら、確かに全く意味がなかったですねw
for(;cx<=rx && map[my-1][cx]==src;cx++);
サンクスです。
01921872005/12/03(土) 13:22:04
rは標準入力から入力し、
標準出力にlとsを出力させていただきたいです
0193デフォルトの名無しさん2005/12/03(土) 13:22:44
[1] 授業単元:プログラミング処理
[2] 問題文(含コード&リンク):ファイルから連立方程式を読み込み、行列の計算を利用して解を求めるプログラムを作成する。
[3] 環境
 [3.1] OS:標準環境はソラリス8
 [3.2] コンパイラ名とバージョン:gcc バージョンは申し訳ないですが判りません。
 [3.3] 言語:C言語です。
[4] 期限:2006年1月11日まで
[5] その他の制限:解はLU分解法とガウスザイデル法でそれぞれ求める。読み込むファイルはax1+bx2+…=y1のa,b…をすべて一行に記入し、スペースで区切る。

二次元配列を動的確保するサブ関数とファイルからstrtok関数などを用いた一行の要素を二次元配列の行要素にそれぞれ格納するサブ関数がわかりません。
よろしくお願いします。
0194デフォルトの名無しさん2005/12/03(土) 13:39:52
>>193
このcreateMatrixみてくれ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1180.txt
0195デフォルトの名無しさん2005/12/03(土) 13:44:37
>>192
>>189のr=10の部分を変えるだけだから頑張れ
0196デフォルトの名無しさん2005/12/03(土) 14:15:54
>>189,195
助かりました。あろがとうございます。
0197デフォルトの名無しさん2005/12/03(土) 15:31:48
[1] 授業単元:
[2] 問題文:
二分検索を使った英文和訳プログラムを作成せよ

問題文は長いので以下にアップしました。
http://www.geocities.jp/ryo_haruka2002/kadai9_mondai.txt

[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:cygwin
[3.3] 言語: /C++
[4] 期限: [2005年12月6日9:00まで]
[5] その他の制限: 書き出しは#include<iostream>から始めてください。
01981972005/12/03(土) 15:42:05
一応短いですが書いたところまでです。
#include<iostream >
#include<fstream>
using namespace std;

int search_dic(string a[][3],int last,string word){
int first=0,ans=-1;
while(first<=last){
int middle=(first+last)/2;
if(a[middle][0]==word){
ans=middle;
break;}
if(a[middle][0]<word)
first=middle+1;
else
last=middle-1;}
return ans;}
0199デフォルトの名無しさん2005/12/03(土) 15:43:29
異次元配列テラワ
0200デフォルトの名無しさん2005/12/03(土) 16:30:32
>>197
なんちゅうか縛りが多すぎんだよな
その結果出すだけなら簡単なんだが
02011512005/12/03(土) 16:39:09
【質問テンプレ】
[1] 授業単元: コンピュータ基礎
[2] 問題文:問題1 2桁の数を入力する関数
2桁の数を入力する関数(もし、2桁以外の整数を入力したら
再入力となる)を作成し、main関数では得られた2桁の値の
1の位と10の位の値を掛け算した値を表示するプログラム

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月4日20時
[5] その他の制限: 関数を使い、動作を確認するための適切なmain関数も作成する
02021512005/12/03(土) 16:40:51
【質問テンプレ】
[1] 授業単元: コンピュータ基礎
[2] 問題文: 問題2 配列を逆順に格納する関数
要素数がnoであるint型の配列v2の並びを逆順にしたものを
配列v1に格納する関数
void intary_rcpy(int v1[],const int v2[],int no)
を作成せよ。        
      
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 12月4日20時
[5] その他の制限: 関数を使い、動作を確認するための適切なmain関数も作成する

書き方が悪かった模様。
それぞれ別のプログラムとして作ってください。
0203デフォルトの名無しさん2005/12/03(土) 16:56:26
Windowsでgcc。。。ずいぶんハイカラな環境でやってますね。

>>201
int f(int a){
int a10,a1;
if(a<10||99<a)return -1;
a10=a/10;a1=a%10;return a10*1;
}
>>202
void intary_rcpy(int v1[],const int v2[],int no){
int i;
for(i=0;i<no;i++)v1[i]=v2[no-i-1];
}
自分でmainを作ってくれ。
それから「書き方が悪かった模様」なんて他人事みたいにいうのはイク(・д・)ナイ
0204デフォルトの名無しさん2005/12/03(土) 16:57:39
>>203
おいおい、201にバグがあるよ...まあいい。それは>>201への宿題ということで。
両方とも脳内コンパイルにつき動作保障しません。
0205デフォルトの名無しさん2005/12/03(土) 16:58:25
>>201
それくらい自分でやれ
#include<stdio.h>
void num_input(int *i){
while(1){ scanf("%d%*[^\n]%*c",i);
if(((*i-99)<0)&&((*i-9)>0)) break; }
}
int main(void){
int num;
num_input(&num);
printf("2桁数字入力:%d,%d\n",num,(num/10)*(num-(num/10)*10));
return 0;
}
#include<stdio.h>
#define vip 3//要素数
void intary_rcpy(int v1[],const int v2[],int no){
int i;
for(i=0;i<no;i++) v1[i]=v2[no-i-1];
}
int main(void){
int num,i,v1[vip]; const int v2[vip];
for(i=0;i<vip;i++){
printf("v2[%d]=",i);
scanf("%d%*[^\n]%*c",&v2[i]);
}
intary_rcpy(v1,v2,vip);
for(i=0;i<vip;i++){
printf("v1[%d]=%d\n",i,v1[i]);
}
return 0;
}
0206デフォルトの名無しさん2005/12/03(土) 17:02:34
>>201
こうかな…。
#include<stdio.h>
int get2(void) { int v;
do{ scanf("%d", &v); } while(1 != (int)(log(v) / log(10)));
return v;
}

int main(void) {
int r = get2();
printf("結果: %d", r%10 + r/10);
return 0;
}
0207デフォルトの名無しさん2005/12/03(土) 17:05:32
あっかけ算かぁ…。でも既に回答済だからいいか…。
0208デフォルトの名無しさん2005/12/03(土) 17:37:07
>>197
こういう問題見ると、「イギリスでは、こうです」てCM思い出すな。
日本の教育ってのは、大学に至ってまで小学生と同じなのかね。

教育者が間違った親切心を持っているのか、単に答えあわせを
簡単にしたいだけなのか。
0209デフォルトの名無しさん2005/12/03(土) 17:55:47
>>197 テストをサボりまくってるので正しく動くかは未保障と言うことで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1189.cpp
02101662005/12/03(土) 18:40:03
>>168
2次元配列からビットマップを作成する方法は習っていないのでちょっと分かりませんでした。
リア厨のときに習ってたBASIC使えばその方法で解けそうなんですけど、C言語は
つい最近大学で習い始めたばっかりなので…。

>>172,185
ありがとうございます。助かりました。
0211デフォルトの名無しさん2005/12/03(土) 22:09:22
[1] 授業単元: cプログラミング
[2] 問題文:7文字程度の文字列の集合を対象としたクイックソートのプログラムを作成せよ
入力は data.txt ファイルを使用し、ソート結果は出力せず 要素の交換回数と実行時間を出力するようにせよ
また、同様の操作を実装したシェルソートのプログラムを作成せよ
入力ファイル(data.txt):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1190.txt
↑このファイルはデータ数が100個程度ですが、1万〜50万程の数を扱えるようにして下さい。
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] 言語:c
[4] 期限: 月曜まで
お願いしますm(__)m 何か質問がありましたら仰ってください。
0212デフォルトの名無しさん2005/12/03(土) 22:41:33
>>211
グーグルって知ってるか?
0213杏2005/12/03(土) 23:00:28
[1] 授業単元:情報処理�U
[2] 問題文:補間のプログラムを作りなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限:2006年12月05日12:00まで
[5] その他の制限:ラグランジェ補間、スプライン補間を使わず、
初心者でも理解できるようなのをお願いします
0214杏2005/12/03(土) 23:10:49
すみません、間違えました。
『2005年の12月05日』までにお願いします。
0215デフォルトの名無しさん2005/12/03(土) 23:12:37
>>213
入力はどんな形式なんだよ
0216デフォルトの名無しさん2005/12/03(土) 23:15:28
>>213
>ラグランジェ補間、スプライン補間を使わず、
>初心者でも理解できるようなのをお願いします

直線補完はで決まり!
0217デフォルトの名無しさん2005/12/04(日) 01:09:49
[1] プログラミング基礎
[2] 英単語が入力されたデータをアルファベット順に並べ替えよ。
[3] 環境
 [3.1] Windows
 [3.2] VC++6.0
 [3.3] C++
[4] 月曜提出ですが出来れば明日の朝までにお願いします。
[5] バブルソートしか習ってないのでそれを使うのだと思います。

データは
apple
table
diff
directory
みたいに並んでいて制限は100単語です。
よろしくお願いします。
0218デフォルトの名無しさん2005/12/04(日) 01:13:43
プログラミングの課題ですOTL
1,000,000円を年利 r %で預金し、そのまま預けぱなしにしておいたら何年で2倍になるか知るためのプログラムを書け。年利が何%か はキーボードから読み込むものとする。
もぅ何がなんだか。。。
0219デフォルトの名無しさん2005/12/04(日) 01:16:52
>>217
1単語あたりの制限とかない?
酔っ払ってて動的メモリ確保やりたくない

>>218
計算方法は?
単純にr%分かけてきゃいいの?
02202172005/12/04(日) 01:21:14
>>219
特に書いてないです。
0221デフォルトの名無しさん2005/12/04(日) 01:23:22
>>220
で、入力方法は?
って思ったけど俺C++使えないやwww
ダメじゃん
0222デフォルトの名無しさん2005/12/04(日) 01:36:50
>>218
#include<stdio.h>
int main(void){
double kane=1000000.0,n,hon;
long nen=0;
hon = kane*2;
printf("で?金利何%?:");
scanf("%lf",&n);
while(hon>kane){
kane = kane*(1+n/100.0);
nen++;}
printf("%d年で2倍ですが何か?",nen);
return 0;}
うんこ
02232172005/12/04(日) 01:47:12
入力方法は予めtxt形式で書かれたものを指定して読み込というものです。
あと本当はこれはあるプログラムの一部で、本来は英単語の後ろにスペース空けて
訳もついていますが、並べ替える部分がわからなかったので省略してしまいました。
もし関係あったらすみません。
0224デフォルトの名無しさん2005/12/04(日) 01:49:30
strcmpで比較してバブルソートかな
二次元配列100個用意して
for文でまわすか
疲れててネムス
>>218
#include <stdio.h>
#define MONEY 1000000
int main(void){
int year;
double buff,interest;

scanf("%lf",&interest);
buff=MONEY;
for(year=0;;year++){
buff= buff*(1+interest/100);
if(buff>MONEY*2){
break;
}
}
printf("%d",year);
return(0);
}
0225デフォルトの名無しさん2005/12/04(日) 01:56:47
>>218
元金いくら預けるかは関係ないぞ
0226デフォルトの名無しさん2005/12/04(日) 01:58:11
>>224
普通バイナリーツリー使うだろ
0227デフォルトの名無しさん2005/12/04(日) 02:43:17
>>217さん
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1191.txt
VisualStudio.net2003で作成しましたがVC++6.0でも動くと思います。
あとstlを使っていますが書いている内容的にはC言語です…。
オブジェクト指向を意識しないとダメですよね?
大変申し訳ございません。
0228デフォルトの名無しさん2005/12/04(日) 02:47:48
バブルソートとか言っている時点でC++じゃねーよ。
質問者のレスみても分かるように、どう考えてもCのレベル。
02292172005/12/04(日) 02:53:39
>>227氏
自分の環境では動きませんでした…
コンパイルは出来ますが実行不可になります。
オブジェクト指向とか難しいことはちょっとわからなくて…こちらこそすみません。
よく配列で言われるアドレスやらポインタやらも未習でして。
普段大学ではcygwinを使用しているのですが、それと関係あるのでしょうか。
02302182005/12/04(日) 03:36:39
みなさんありがとうございます、最近プログラミングを授業で始めたばかりなので
あまり難しいことはやらないと思うのですが簡単なのがありませんか?
0231デフォルトの名無しさん2005/12/04(日) 04:17:17
>>222が究極に簡単だと思うよ。
02322272005/12/04(日) 04:21:47
>>217さん
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1192.txt
これで勘弁してください。
途中ダメダメな関数がありますので自分で修正なさってください。
0233デフォルトの名無しさん2005/12/04(日) 04:50:37
#include<stdio.h>

int main( void ){

    double yokin = 1000000;// 預金。
    double r;// 年利r。あとでキーボードから入力してもらう。
    int year = 0;// 何年経過したかを数えるためのカウンタ。

    printf("年利を入力してください。\n");// 入力を促す。
    scanf("%lf", &r);// 年利をキーボードから入力してもらう。

    while( yokin < 2000000 ){// yokin が 2000000 より少ない間(while)、 { } 内部を繰り返す。
        yokin = yokin * ( 1 + r/100 );// yokin に「yokin * 年利」(1+〜云々は、年利をそのままかけたら減るってことわかるだろ?)を代入する。
        year++;// 年数のカウンタを一年増やす。
    }
    printf( "預金が2倍になるまでに %d 年かかります。\n", year);// 結果を表示する。

    return 0;
}


これなら猿でもわかるだろ
0234デフォルトの名無しさん2005/12/04(日) 04:53:06
猿にはわからんだろうがヒトならわかるはずだね。
02352182005/12/04(日) 05:21:49
詳しい解説ありがとうございます、これなら
さっきよりわかった気が・・・します。
最初からこんなに難しそうなの課題に出すなんてOTL
0236デフォルトの名無しさん2005/12/04(日) 05:27:46
int とか doubleの意味がわからんのなら、
本を読むとか、解説サイトを見るとかして自分で調べとけ。
0237デフォルトの名無しさん2005/12/04(日) 05:28:27
やってることは算数だろ。全然難しくねぇよ。
0238デフォルトの名無しさん2005/12/04(日) 07:13:36
おまいらループ回すことしか思いつかんのか

r = 100 のとき 1 年で 2 倍

r != 100 のとき n 年で
 (1 - (r/100)^(n+1)) / (1 - (r/100)) 倍

つまり r が与えられたとき
 2 <= (1 - (r/100)^(n+1)) / (1 - (r/100))
となる n を求めればいい

ここで
 2 == (1 - (r/100)^(n+1)) / (1 - (r/100))
の場合の n について解くと

 n' == (log((2r/100) - 1) / log(r/100)) - 1
(解は整数とは限らないのでとりあえず実数で計算して n' とする)

が得られる

与えられた r から n' を求めて n' を超える最小の整数 n を求める場合

 n == (int)(n' + 1);

つまり

 n == (int)(log((2r/100) - 1) / log(r/100));

で一回の計算で求まるじゃないか
0239デフォルトの名無しさん2005/12/04(日) 07:47:50
>>238
めどい
0240デフォルトの名無しさん2005/12/04(日) 07:48:35
>>233
>>238
常識的に考えたら毎年の利子は小数切捨てだと思うんだけど、
それだと小数の出てくる預金が出ることになりませんか?
0241デフォルトの名無しさん2005/12/04(日) 07:53:06
C++についての質問です。

ビルドまではうまくいくのですが、実行時に

"問題が発生したためa.exeを終了します。ご不便をおかけして申し訳ありません"

という、エラー報告送信を聞くエラーがでます。

これはコード自体(単にプログラムの記述のミス)の問題なのでしょうか?
それともメモリ不足などの問題なのでしょうか?

初歩的な質問で申し訳ありません。

ちなみにWindowsのMicrosoft C++です。

よろしくお願いします。
0242デフォルトの名無しさん2005/12/04(日) 07:56:25
Microsoft C++とはまた古風な…
0243デフォルトの名無しさん2005/12/04(日) 07:57:31
ぬるぽ
0244デフォルトの名無しさん2005/12/04(日) 07:58:05
Microsoft Basicの親戚ですか?

ついでに、ソースを晒さないと具体的にはわからん。
多分>>241が全面的に悪い。
0245デフォルトの名無しさん2005/12/04(日) 07:58:25
十中八九、プログラムのミス。
0246デフォルトの名無しさん2005/12/04(日) 07:59:59
迷惑かけてるのはお前の方なのに

OSに謝らせるなんて可哀想とは思わないか?
02472412005/12/04(日) 08:02:36
回答ありがとうございます。

ビルドできるけど、実行できないようなプログラムのミスというのはどのようなものがありますか?

一概には言えないと思いますが、例でいいのでなにかあれば教えてください。
0248デフォルトの名無しさん2005/12/04(日) 08:05:39
超たくさんありすぎる。ソース晒せないなら帰れ。 あと >>1
0249デフォルトの名無しさん2005/12/04(日) 08:21:57
>>247
ぬるぽ
0250デフォルトの名無しさん2005/12/04(日) 08:29:39
char *buf;FILE*fp;fgets(buf,sizeof(buf),fp);
0251デフォルトの名無しさん2005/12/04(日) 08:33:25
>>250
なにそのツッコミどころ満載のコード片は?
0252デフォルトの名無しさん2005/12/04(日) 08:33:48
>>181-183
>グローバルに持っていったらN=800でもOKのようです。

おまいらそんな安直なことすんなよ

void fillitem(int **map, int mx, int my, int src, int dst)
{
 static struct point2d{
 int x,y;
 }stack[N*N];
 ・・・以下略
の方がいいだろ?


まあ俺もmalloc/連結リストに賛成だが。

スタック気にするくらいならmallocの戻り値チェックもしろよな。
■ このスレッドは過去ログ倉庫に格納されています