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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(12)
あなたが解けない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

【前スレ】
C/C++の宿題を片付けます 76代目
http://pc8.2ch.net/test/read.cgi/tech/1162771475/
【過去スレ一覧】
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
0357デフォルトの名無しさん2006/11/26(日) 00:40:25
>>356
お こんな要素があったのか バッチリだな
ありがとう
03583522006/11/26(日) 00:55:37
>>355
すいません、
>gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
というのは、出力データをどんな感じでファイルに書き込むか、という
ことですか?
xiとyiとしたら
0.0000 0.14356
0.0100 0.16344
. .
. .
. .
という感じです。
0359デフォルトの名無しさん2006/11/26(日) 01:05:49
>>352
#include<stdio.h>
#include<math.h>

#define N 1000

double f(double x){
return sin(2*x)*cos(x);
}

int main(void){
double x, dx=(M_PI/4)/N;
int i;

for(i=0;i<=N;i++){
x=i*dx;
printf("%f %f\n", x, f(x));
}

return 0;
}
0360デフォルトの名無しさん2006/11/26(日) 02:23:49
greeting all:

excuse me for writing in English, i haven't installed japanese IME
so i can't type in japanese

i'm working on my project in my computer science class and
found a very interesting result. that is recursive merge-sort
function is faster than non-recursive version.

i posted the same question on cprogramming.com so that
the details and my source code is provided at
http://cboard.cprogramming.com/showthread.php?p=612918#post612918
03613532006/11/26(日) 04:03:12
うん 出来たっぽい

さすがに人に見せられるレベルじゃないのでもう少し手を入れるが
もし締め切りが近かったらアレなので89はまだいたら締め切り示せ
03622282006/11/26(日) 06:42:23
>>228 訂正
コンパイラ名とバージョン:VC 6.0
で未解決なのでお願いします
0363その12006/11/26(日) 09:13:28
>>89
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <float.h>
#include <math.h>
#define N 500//世代内の個体数
#define G 1000//最大世代数
#define Kousa 0.5//交差率。0〜1
#define Totuzen 0.1//突然変異率。0〜1だが小さめに設定すること
#define Pi 3.14159265358979


union uGENE
{
int i[2];
double d;
};

double hyouka (double x);
void kousa(int *a,int *b);
void mutation(int *a,int *b);
int mycomp(const void *_a, const void *_b);
int choice(int i);
0364その22006/11/26(日) 09:14:14
void main(void){
int g,i;
union uGENE future[N+1];
double r,present[N];
srand((unsigned) time(NULL));
for(i=0;i<N;i++) present[i]=3.0*((double)rand()/RAND_MAX)-1.0;
for(g=0;g<G;g++){
printf("%d世代目計算中・・・\n",g);
qsort(present, N, sizeof(double), mycomp);

for(i=0;i<N;i++) {
r = (double)rand()/RAND_MAX;
future[i].d=present[choice(i)];
if(r<Kousa){
//交叉
future[i+1].d=present[choice(i+1)];
kousa(future[i].i,future[i+1].i);
kousa(future[i].i+1,future[i+1].i+1);
i++;
}
else if(r<Kousa+Totuzen){
//突然変異
mutation(future[i].i,future[i].i+1);
}
//何もしなければコピーになる
}
//世代交代
for(i=0;i<N;i++) present[i]=future[i].d;
}
qsort(present, N, sizeof(double), mycomp);
printf("x=%fの時f(x)は%f",present[0],hyouka(present[0]));
}
0365その32006/11/26(日) 09:15:20
//評価関数。xが定義域に無い時はマシンエプシロンを返す。
//評価関数はx{sin(10πx)}+2cos(10πx)+1.0をそのまま用いるが
//0以下の場合はマシンエプシロンの10倍を返す。

double hyouka (double x){
if(x<-1||x>2) return DBL_EPSILON;
double y,tmp;
tmp=10.0*Pi*x;
y=x*sin(tmp)+2*cos(tmp)+1.0;
if (y<=0) return DBL_EPSILON*10;
else return y;
}

//交叉関数。一様交叉を行う
void kousa(int *a,int *b){
//交叉するビットを示すマスクを作る
unsigned int mask=0;
//マスクの各ビットにランダムに0/1を入れる
for(int i=0;i<32;i++){
mask+=rand()%2;
mask<<=1;
}
//aとbで内容が同じビットは交叉する必要がない
mask=mask&(*a^*b);
*a^=mask;
*b^=mask;
}
0366その42006/11/26(日) 09:16:00
//突然変異関数。どこか1ビットをランダムに反転させる。
void mutation(int *a,int *b){
unsigned int mask=1;
int r=rand()%64;
if(r>=32){
r-=32;
mask<<=r;
*a^=mask;
}
else{
mask<<=r;
*b^=mask;
}
}

int mycomp(const void *_a, const void *_b)
{
double a = *(double *)_a;
double b = *(double *)_b;
double tmp=hyouka(b)-hyouka(a);

if (tmp<0) {
return -1;
} else if (tmp > 0) {
return 1;
} else {
return 0;
}
}
0367その52006/11/26(日) 09:20:36
int choice(int n){
//エリート選択
if(n==0||n==1) return n;
//投げやりなランキング選択
for(int i=0;i<N-1;i++){
if(rand()%2==0) return i;
}
return N-1;
}


これで終了。
作っておいてなんだがそんなに性能良くない。

とりあえず交叉の元になる個体に同じ物が二つ選ばれるというバグ(笑)があるので
取り除いたらもう少し性能が良くなると思います。(直すつもりだったのに忘れてた)

あとchoice関数を物凄い適当に作ってあるんでここらをいじっても良くなるはず。
やる気があったら改良するかも。
0368デフォルトの名無しさん2006/11/26(日) 09:37:26
ああ、バグ直したら大分性能良くなった
まあこれくらいは自力でやって
0369デフォルトの名無しさん2006/11/26(日) 09:50:29
[1] 授業単元:計算科学
[2] 問題文
連続な値をとる確率変数Yp_ _ _ _,Ynが独立同分布(iid)
p(x)=1( 0≦x <1)
p(x)=0(それ以外)
に従うとしよう. double get_uniform_random() そのままですね.
連続な値をとる確率変数Xnを Xn=(1/N)×(Y1+…+Yn) で定める.
N?
1000
サンプル数?
100
シード?
128478
と入力すると, X1000のサンプルを100個生成して,
# N X_Nのサンプル平均 X_Nのサンプル分散
1000 0.502346 0.000868
と出力するプログラムを作ってください。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio.NET2003
 [3.3] 言語: C
[4] 期限: 2006年11月28日09:00まで
0370デフォルトの名無しさん2006/11/26(日) 10:21:44
342どなたかお願いします。時間がありません…
0371デフォルトの名無しさん2006/11/26(日) 10:40:21
Cかぁ、面倒くさいな
0372デフォルトの名無しさん2006/11/26(日) 10:45:33
お願いします(><)
0373デフォルトの名無しさん2006/11/26(日) 10:53:04
>>370
まだ13時間あるよ
0374デフォルトの名無しさん2006/11/26(日) 11:56:05
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
3つの整数を各辺の長さとして、その3つの辺の組が
(1)正三角形を出力できるなら「equilateral triangle」と出力し、
(2)(一般的な)三角形が形成できるなら「triangle」と出力し、
(3)三角形が形成できなければ「not triangle」と出力する
 プログラムを作成せよ。
 もし可能ならば、上の条件に加えて
(4)直角三角形を形成できるなら「right-angled triangle」と出力し、
(5)二等辺三角形を形成できるなら「isosceles triangle」と出力し、
(6)三角形を形成できるならばその面積Sを出力するプログラムを作成せよ。
例:
4,4,4・・・equilateral triangle (S=6.928)
6,5,7・・・triangle (S=14.697)
6,2,2・・・not triange
ヒント:
3つの整数をa,b,cとすると、三角形を形成する条件は、|b-c|<a<b+c
面積Sはへロンの公式より、s=(a+b+c)/2とするとS=(s(s-a)(s-b)(s-c))^1/2
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2006年11月28日16:00まで
どう考えてもわかりません。どうかお願いします。
0375デフォルトの名無しさん2006/11/26(日) 12:36:38
>>370
英文テキスト名は指定されている?
0376デフォルトの名無しさん2006/11/26(日) 12:57:11
>>370
というか英文の仕様が無いと作りづらいかも。
・英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"のみ?
 ":(コロン)"とかは出てこない?
・改行は分離子と見なしていい?例えば
 I am progr
 ammer
 という文ならprogrammerを単語とみなすのか?
 progrとammerをそれぞれ単語とみなすのか?

0377デフォルトの名無しさん2006/11/26(日) 14:28:18
>>337
ありがとうございます。
コンパイルする際にエラーが出ましたが、なんとか頑張って修正してみます。
0378デフォルトの名無しさん2006/11/26(日) 14:30:37
>>370
つーか全く同じ問題が前スレか前前スレで解答されてた気がするんだわ
03793522006/11/26(日) 14:34:20
>>359
解答ありがとうございます。
359さんが作って下さったプログラムについて、少し疑問があるのですが…。
課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」
と書いてあるのですが、352さんが作って下さったプログラムの場合だと、
刻み数を大きくすればする程、出力する数も増えて、実際の曲線に近い
データになるような気がするのですが…。
自分自身が刻み数というものを何か解ってなく、現在、学校じゃないので
gnuplotを使用できないというのもあって、実際は、どうなの解りませんが
疑問に思ったので。
0380デフォルトの名無しさん2006/11/26(日) 14:45:14
>>379
>課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」

本当にそう書いてある? 刻み「幅」を小さくすれば、なら納得いくのだけど。
0381デフォルトの名無しさん2006/11/26(日) 15:02:30
>>370 これでおk?
75代目
730 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/03(金) 21:14:44
>>727
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2871.c
0382デフォルトの名無しさん2006/11/26(日) 15:20:25
>>376
英文はなんでもよいそうです。
英文にでてくる文字の中で単語のみを抜き出すプログラムです。
英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"":(コロン)"";(セミコロン)"です。  
・改行は分離子と見なしてよいそうです。
03833792006/11/26(日) 15:50:27
>>380
はい、課題の前の説明には「刻み幅」と書いてあります。
「課題には刻み数は1000とする。」と書いてあります。
刻み数=刻み幅と思っているのですが違うのですか?
違うなら刻み数と刻み幅はどう違うのでしょうか?
0384デフォルトの名無しさん2006/11/26(日) 15:55:04
↑
どこのアホだよ、わからないことを紙に書いて
整理してから書き込めばわかることだろ。
馬鹿は馬鹿なりのプログラムの書き方ってのがある、
それすらしない奴はもしかして自分の頭だけで
物事全て考えられると思ってるのか?
そういうのって思い上がりだよ。
0385デフォルトの名無しさん2006/11/26(日) 15:56:42
>>381
それ1行に1単語とか制約つきじゃまいか?
0386デフォルトの名無しさん2006/11/26(日) 16:00:56
>>383
日本語でおk
0387デフォルトの名無しさん2006/11/26(日) 16:02:52
世の中には助かった人たちだけでなく、助からなかった人たちもいるのだ。
0388デフォルトの名無しさん2006/11/26(日) 16:07:08
>>385
main関数のwhile文をこう書き換えればよし。
while(scanf("%*[^a-zA-Z]"),scanf("%79[a-zA-Z]",buf)==1){
まぁ単語長に制限ついてるけど実用上は問題ないでしょ。
0389デフォルトの名無しさん2006/11/26(日) 16:12:11
>>383
まず一つ言っておく
煽りでもなんでもなく小学生でも分かることだから今後自分の勉強への態度を変えたほうが良いぞ

━━━━━━━━━━━━━━━━━━━━
↑これを刻み数10で分割すると(10個に分割する)


━━━━━━━━━━━━━━━━━━━━
└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘

こうなる。
一方刻み数5で分割すると(5個に分割する)
━━━━━━━━━━━━━━━━━━━━
└──┘└──┘└──┘└──┘└──┘

こうなる。
分割する数が減れば、1個1個の幅(刻み幅)は増える。
当たり前だな
0390デフォルトの名無しさん2006/11/26(日) 16:20:32
要するにキャベツの千切りは相当細かいってこった
0391デフォルトの名無しさん2006/11/26(日) 16:23:56
>>377
後学のために、どういうエラーが出たか教えてくれないか?
0392デフォルトの名無しさん2006/11/26(日) 16:24:59
>>383
喪前が100mを歩かなければならないとする。
で、100m歩くときの歩数(刻み数)と歩幅(刻み幅)の関係を考えでみろ
歩数x歩幅=100m
歩数が多い、歩幅が小さいになるだろ >>389見ろ
0393デフォルトの名無しさん2006/11/26(日) 16:25:42
>>391
ちょうど今修正してる段階で気づきましたが、
こちらの手違いでした、申し訳アリマセンOTL
0394デフォルトの名無しさん2006/11/26(日) 16:30:01
ここでやって貰った回答見ると、先生やTAの方が答えてるんじゃないかってちょっと怖くなる・・・・。
提出したら不可がきたりとか・・・・。
0395デフォルトの名無しさん2006/11/26(日) 16:30:35
>>388
そりゃまた随分乱暴だな・・・( ^ω^)
いいけどよ、俺の宿題じゃねーしw
0396デフォルトの名無しさん2006/11/26(日) 16:35:19
>>393
見返してて気づいたけど、一筆書きをする方の58行目のコメント
「全ての節点の次数が偶数だった」
は嘘なので削除しておいてくれ。
0397デフォルトの名無しさん2006/11/26(日) 16:44:15
↑>>319 (今日中)
│>>369 (28日の09時まで)
│>>374 (28日の16時まで)
↓>>151 >>274 (29日まで)

未解消
0398デフォルトの名無しさん2006/11/26(日) 16:54:06
[1] 授業単元: 確立統計学
[2] 問題文(含コード&リンク):
以下のプログラムは三目並べ(Tic-Tac-Toe)のゲームプログラムである。
メインプログラムの内容を設計実装せよ。また、ミニマックスプログラム関数の
再起呼び出し数を出力させよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3040.txt

[3] 環境
 [3.1] OS:UNIX
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 11/27 PM5:00

よろしくお願いいたします。
0399デフォルトの名無しさん2006/11/26(日) 16:56:09
342お願いします
0400デフォルトの名無しさん2006/11/26(日) 16:57:43
↑>>319 >>342 (今日中)
│>>398 (明日の17時まで)
│>>369 (28日の09時まで)
│>>374 (28日の16時まで)
↓>>151 >>274 (29日まで)

>>399

>>381はダメなん?

0401デフォルトの名無しさん2006/11/26(日) 17:06:36
本当は自力でやりたかったんですけどどうしても分からないので。
[1] プログラミング
[2] , 次のようにデータ 0 をターミネータとするものに書き換えよ.

* 例えば, 配列 a に 4 個のデータ 10, 11, 12, 13 を記憶する場合には, a[0]=10, a[1]=11, a[2]=12, a[3]=13, a[4]=0 のように記憶する (0 がデータの終わりを表す). データ数を別途他の変数で記憶することはしない.
* void array_input(int *a) … データ数は入力しない. 最初から0番目のデータ, 1番目のデータ, …, を順に入力し, 0 を入力した時点で終了するようにする. 引数は配列 (の先頭アドレス) a だけで, データ数は特にセットしない.
* void array_print(int *a), void array_reverse(int *a) … 配列 (の先頭アドレス) a のみ渡し, データ数は渡さない.
* main は次のようになる.
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 11月30日
[5] 元のやつを書き換える問題なんですけど、途中までやってます。
それの問題のあるところを教えてくれたら助かります。
0402デフォルトの名無しさん2006/11/26(日) 17:07:40
>>398
>>392
0403デフォルトの名無しさん2006/11/26(日) 17:08:16
間違えた
>>398
http://pc8.2ch.net/test/read.cgi/tech/1162771475/392
0404デフォルトの名無しさん2006/11/26(日) 17:09:03
本当は自力でやりたかったんですけどどうしても分からないので。
[1] プログラミング
[2] , 次のようにデータ 0 をターミネータとするものに書き換えよ.

* 例えば, 配列 a に 4 個のデータ 10, 11, 12, 13 を記憶する場合には, a[0]=10, a[1]=11, a[2]=12, a[3]=13, a[4]=0 のように記憶する (0 がデータの終わりを表す). データ数を別途他の変数で記憶することはしない.
* void array_input(int *a) … データ数は入力しない. 最初から0番目のデータ, 1番目のデータ, …, を順に入力し, 0 を入力した時点で終了するようにする. 引数は配列 (の先頭アドレス) a だけで, データ数は特にセットしない.
* void array_print(int *a), void array_reverse(int *a) … 配列 (の先頭アドレス) a のみ渡し, データ数は渡さない.
* main は次のようになる.
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 11月30日
[5] 元のやつを書き換える問題なんですけど、途中までやってます。
それの問題のあるところを教えてくれたら助かります。
0405401=4042006/11/26(日) 17:13:24
ごめんなさい。なんか2chブラウザがおかしいことになって
自分の書き込み表示されないで402 403が出てきたので
投稿されていないと思いました。これのおかしい所お願いします。
i=0;とかが変だと思うのですが。

#include <stdio.h>#define ARRAY_MAX 32
void array_input(int *a){
int i;int *p;
i=0;
while (*a){
printf("%d 番目の要素 = ", i);
scanf("%d", &a[i]);}
}
void array_print(int *a){
int i;
printf("{");
while (*a){
if (0<i){
printf(",");}
printf("%d", a[i]);}
printf("}\n");}
array_reverse(int *a) {
int i=0;
int temp=0;
while (*a){
a[i] = a[i];}
}
int main(void){
int a[ARRAY_MAX];
array_input(a); array_print(a); array_reverse(a); array_print(a);
return 0;
}
0406デフォルトの名無しさん2006/11/26(日) 17:22:08
>>405
色々とおかしい
とりあえず元々の書き換え前のを出したほうがはやいぜ?
0407デフォルトの名無しさん2006/11/26(日) 17:23:21
>>400
381は求められてる出力と違うみたいです。
・単語を全部取り出し重複する単語は1つにまとめる。
・それぞれの単語の出現した数を数えて表示する。
・単語をアルファベット順に並べる
ということが求められています。
面倒かと思いますが本当に申し訳ないのですがどなたかお願いします。
0408デフォルトの名無しさん2006/11/26(日) 17:26:03
>>407
>>388の変更を加えても期待するのと動作が違うのか?
0409401=4042006/11/26(日) 17:26:58
#include <stdio.h>#define ARRAY_MAX 32
void array_input(int *a, int *n){
int i, size;
printf("配列のサイズ = ");
scanf("%d", &size);
for (i=0; i<size; i++){
printf("%d 番目の要素 = ", i);
scanf("%d", &a[i]);}
*n = size;}
void array_print(int *a, int n){
int i;
printf("{");
for (i=0; i<n; i++){
if (0<i){
printf(",");}
printf("%d", a[i]);}
printf("}\n");}
array_reverse(int *a, int n) {
int i=0;
int temp=0;
for(i=0;i<n/2;i++){
temp = a[i];a[i] = a[n-i-1];a[n-i-1] = temp;}}
int main(void){
int a[ARRAY_MAX]; int n;
array_input(a, &n);array_print(a, n);array_reverse(a, n);array_print(a, n);
return 0;}

書き換え前。ターミネートされてないやつです。これは正常に動きます。
行数の都合で無理に改行して見難くてごめんなさい。2時間ほど自力で考えましたが力不足ですね。
0410デフォルトの名無しさん2006/11/26(日) 17:30:48
たった2時間で諦めるなとまず言いたい
0411デフォルトの名無しさん2006/11/26(日) 17:31:10
>>401
まず長さを取得して、それを使って書き換え前の関数を呼べば良い。
0412デフォルトの名無しさん2006/11/26(日) 17:31:44
>>410
2時間本気で悩むのはなかなかできることじゃないと思うが。
0413デフォルトの名無しさん2006/11/26(日) 17:33:39
悩んでどうする
考えんだぉ(^ωー)
0414デフォルトの名無しさん2006/11/26(日) 17:33:44
>>412
実践の時間として2時間は長いが
努力の時間としては2時間は短い
0415デフォルトの名無しさん2006/11/26(日) 17:39:52
高ければ高い壁の方が、登ったとき気持ち良いもんな
0416デフォルトの名無しさん2006/11/26(日) 17:50:22
レシピないっすよ
04173832006/11/26(日) 18:07:22
>>389さんと>>392さんの説明で解りました。
刻んだ時の数と刻んだ時の幅ってことだったのですね。よく考えたら、
そのままですね。
ありがとうございました。
0418デフォルトの名無しさん2006/11/26(日) 18:10:54
>>408
初歩的な話で申し訳ないのですが実行できなくて・・・
コンパイルは成功するのですがそれからどうすれば良いか・・・
基礎的なことがわからなくて申し訳ありません。
cpadを使っているのですがどうやったら実行結果を見れるのでしょうか??
0419デフォルトの名無しさん2006/11/26(日) 18:12:24
>>415
この時代遅れの努力家めが。
世の中全てはコストパフォーマンスだ。
限られた時間を最大限自分の楽しみに使い面倒なことは全て他人任せにするのが今のトレンドなんだよ。
>>401だって今頃異性といちゃいちゃしながらアホども早く答えてくんねーかなーと笑っていたりするんだよ。
そんなわけでタダで利用されるだけの可哀想な負け組みの自分は
コピペすればすぐ動くことをモットーにして今日も初心者スレでひつまぶし。
#include <stdio.h>
#define ARRAY_MAX 32
void array_input(int*a)
{int i,size;printf("配列のサイズ = ");scanf("%d",&size);
for(i=0;i<size;i++){printf("%d 番目の要素 = ",i);scanf("%d",&a[i]);}a[size]=0;}
void array_print(int*a)
{int i;printf("{");for(i=0;a[i]!=0;i++){if(0<i){printf(",");}printf("%d",a[i]);}printf("}\n");}
void array_reverse(int*a){int i,n=0;int temp;while(a[n]!=0)n++;for(i=0;i<n/2;i++){temp=a[i];a[i]=a[n-i-1];a[n-i-1]=temp;}}
int main(void){int a[ARRAY_MAX];array_input(a);array_print(a);array_reverse(a);array_print(a);return 0;}
0420デフォルトの名無しさん2006/11/26(日) 18:43:25
[1] 授業単元:C言語講座
[2] 問題文(含コード&リンク): 九九の表を作成せよ。ただし形は、下の様
な形にすること。

.....1....2.....3.....4.....5.....6.....7.....8.....9
1..1....2.....3.....4.....5.....6.....7.....8.....9
2..2....4.....6.....8..10..12..14...16..18
3..3....6.....9...12..15..18..21..24..27
4..4....8...12..16..20..24..28..32..36
5..5..10..15..20..25..30..35..40..45
6..6..12..18..24..30..36..42..48..54
7..7..14..21..28..35..42..49..56..63
8..8..16..24..32..40..48..56..64..72
9..9..18..27..36..45..54..63..72..81

.はスペースは思ってください。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日の朝の11時
[5] その他の制限: 2重ループ?(forを2回使うやつ)を使う
0421デフォルトの名無しさん2006/11/26(日) 18:50:43
test
0422デフォルトの名無しさん2006/11/26(日) 18:51:40
>>354
すみません。あの、エラーになりした。

error C2040: 'i' : 'class Vector ** ' は 'int' と間接操作のレベルが異なります。
error C2446: '<' : 'class Vector ** ' 型から 'int' 型への変換ができません。
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2040: '<' : 'int' は 'class Vector ** ' と間接操作のレベルが異なります。
error C2100: 間接指定演算子 (*) の使い方が不正です。
error C2227: '->f' : 左側がクラス、構造体、共用体へのポインタではありません。

というのが出ました。
どうしたらいいでしょうか?
0423デフォルトの名無しさん2006/11/26(日) 18:51:51
#include <stdio.h>
int main(void){
int i,j;
printf(" "); for(j=1;j<10;j++)printf("%3d",j); printf("\n");
for(i=1;i<10;i++){
  printf("%d",i);
  for(j=1;j<10;j++)
    printf("%3d",i*j);
  printf("\n");
}
}
04244202006/11/26(日) 19:10:03
>>423
ありがとうございます。
助かりました〜。
0425デフォルトの名無しさん2006/11/26(日) 20:16:46
>>418
コマンドプロンプト、リダイレクト・・・後はわかれ
0426デフォルトの名無しさん2006/11/26(日) 21:55:06
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):

ファイルから行列を読み込み,ガウスの消去法を行いなさい.ただし,データは matrixを使用すること
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3041.txt

matrix
1.0 2.0 -12.0 8.0 3.0 30.0
5.0 4.0 7.0 -2.0 6.0 10.0
-3.0 7.0 9.0 5.0 9.0 20.0
6.0 -12.0 -9.0 3.0 1.0 50.0
9.0 1.0 -5.0 14.0 -11.0 80.0

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland C++ Compioler
 [3.3] 言語:C言語
[4] 期限: 火曜日

問題は?のところを書き換えるようになっています。
よろしくお願いします。
04273192006/11/26(日) 23:30:28
すみません。どうやったらいいのか教えていただけないでしょうか?
>>354さんが書いていただいたプログラムですと、

error C2040: 'i' : 'class Vector ** ' は 'int' と間接操作のレベルが異なります。
error C2446: '<' : 'class Vector ** ' 型から 'int' 型への変換ができません。
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2040: '<' : 'int' は 'class Vector ** ' と間接操作のレベルが異なります。
error C2100: 間接指定演算子 (*) の使い方が不正です。
error C2227: '->f' : 左側がクラス、構造体、共用体へのポインタではありません。

というエラーが出ました。ここの部分が解決できたら宿題が完成します。
教えて欲しい所は、クラスを動的確保して、vectorに格納。で、vectorを使って格納したクラスの関数を使いたいです。

宿題をやっていただくというのに、申し訳ないのですが、
よろしくお願いします。
0428デフォルトの名無しさん2006/11/26(日) 23:43:24
>>427
コンパイラは何使ってるの?ソースは本当に>>354のままか?
gcc3.4.2(MinGW)で普通にコンパイルできて実行できるのだが。
0429デフォルトの名無しさん2006/11/26(日) 23:44:28
まさか

#include <iostream>
#include <vector>
using namespace std;

が抜けてるとか、そういうオチはやめてくれよ。
0430デフォルトの名無しさん2006/11/26(日) 23:51:31
>>428
VC++6.0を使ってます。
今、自分の書いたところを確認したですが、VC++だけしか書いていませんでした。
すみませんでした。

>>429
残念ながらオチませんでしたw
0431デフォルトの名無しさん2006/11/26(日) 23:54:27
>>427
for (int i = 0; i < 10; i++) {
を
for (int j = 0; j < 10; j++) {
に変更したらどうなる?

# これで通るようなら、コンパイラを窓から投げ捨てろ状態な訳だが。
0432デフォルトの名無しさん2006/11/26(日) 23:58:58
>>431
変更したら通りしました!!!!
みなさん、ありがとうございます!!

ですが、なぜ変更したら通ったでしょうか?
0433デフォルトの名無しさん2006/11/27(月) 00:00:08
>>431
あー何かVC6はスコープが他のC++コンパイラと違うとかあったな。
そこまで面倒みきれんわ。
0434デフォルトの名無しさん2006/11/27(月) 00:00:51
>>432
VC6.0はfor文のスコープ規則が古い仕様なのでforを突き抜けるから
よくある回避策としては
#define for if(0){}else for
ってのをファイルの先頭に突っ込むとかいう手がある。
0435デフォルトの名無しさん2006/11/27(月) 00:01:08
>>432

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
                        |
       ____.____    |
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   |  VC++6.0
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |   
                        |

そんなコンパイラ、窓から投げ捨てろ!
04364322006/11/27(月) 00:02:25
なるほど。そういう事です。
わかりました!
ありがとうございました!
0437デフォルトの名無しさん2006/11/27(月) 00:02:41
[1]システム標準関数
[2]http://mobiledatabank.jp/s/src/MDBS0997.pdfの最後から二番目に書いてあります。
[3]windows xp
[4]11月28日
0438401=4042006/11/27(月) 00:10:33
>>419
すみません、そのプログラムは動くのですが
問題はd番目の要素 と最初から入力させるのではなくて
0を入力させた時点で終わるようなものを作りたいです。
0439デフォルトの名無しさん2006/11/27(月) 00:18:11
>>438
とりあえず、いちゃいちゃ乙
0440デフォルトの名無しさん2006/11/27(月) 00:25:17
>>438
void array_input(int *a)
{
int i;
for(i=0;;i++) {
printf("%d 番目の要素 = ", i);
scanf("%d", &a[i]);
if(a[i] == 0) break;
}
}
void array_print(int *a)
{
int i;
printf("{%d",a[0]);
for(i=1; a[i]!=0; i++) printf(",%d", a[i]);
printf("}\n");
}
void array_reverse(int *a)
{
int i, j, temp;
for(i=0; a[i]!=0; i++);
for(j=0; j<i/2; j++) {
temp = a[j];
a[j] = a[i-j-1];
a[i-1-j] = temp;
}
}
0441デフォルトの名無しさん2006/11/27(月) 00:39:10
>>437
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3044.c
0442デフォルトの名無しさん2006/11/27(月) 00:47:33
[1] プログラミング言語
[2] テキストファイルに書いた英文を読み込み、単語の長さを調べてその頻度を調べるプログラム
  を作る。ただし空白、タブ、改行は文字列に含まず、ピリオド、コンマは0文字とする。
  (20文字以上は1まとめとする)
  [例] 0文字 1文字 2文字 … 20文字以上
      3 4 6 0
[3] 環境:Windows XP
  言語:C++
[4] 期限: ([2006年11月29日13:00まで]
よろしくお願いします。
0443デフォルトの名無しさん2006/11/27(月) 00:51:16
>>441
ありがとうございます。しかし実行するとエラーが発生してしまいますた_| ̄|○ il||li
0444デフォルトの名無しさん2006/11/27(月) 00:57:09
>>443
どういうエラー?
それから、fopenの第二引数で"wb"とすべきところを"w"と書いたので
直しておいてくれ。
0445デフォルトの名無しさん2006/11/27(月) 01:07:37
>>444
wbは直しました!
d:\cprog\08rect\08rect.c(4): error C2059: 構文エラー : '型'
d:\cprog\08rect\08rect.c(7): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
と出ます。
本当に苦手ですいません。
0446デフォルトの名無しさん2006/11/27(月) 01:12:38
>>445
なんて酷いメッセージだ。何が悪いのか分からん。

当て推量だが、2箇所あるmaxをmax_of_twoで置換してみたら直るかも知れん。
0447デフォルトの名無しさん2006/11/27(月) 02:34:09
>>442
#include <algorithm>
#include <iostream>
#include <fstream>
#include <map>
#include <string>
int main(int argc, char* argv[]) {
    if (argc != 2) return 1;
    std::ifstream input(argv[1]);
    if (!input) return 1;
    const char delimiters[] = " \t,.";
    std::map<int, int> dic;
    std::string line;
    while (std::getline(input, line)) {
        dic[0] += std::count(line.begin(), line.end(), ',') + std::count(line.begin(), line.end(), '.');
        std::string::size_type start_index = line.find_first_not_of(delimiters);
        while (start_index != std::string::npos) {
            std::string::size_type end_index = line.find_first_of(delimiters, start_index);
            if (end_index == std::string::npos) end_index = line.length();
            if (end_index - start_index != 0) ++dic[end_index - start_index < 20 ? end_index - start_index : 20];
            start_index = line.find_first_not_of(delimiters, end_index);
        }
    }
    for (int i = 0; i < 20; ++i) std::cout << i << "文字: " << dic[i] << std::endl;
    std::cout << "20文字以上: " << dic[20] << std::endl;
    return 0;
}
0448デフォルトの名無しさん2006/11/27(月) 03:34:13
すいません、関数の戻り値を数値配列にすることは可能ですか?
可能であれば方法を教えていただきたいのですが
0449デフォルトの名無しさん2006/11/27(月) 03:36:49
>>448
> 数値配列
初耳の言葉だ
もっと説明モトム
0450デフォルトの名無しさん2006/11/27(月) 03:53:51
>>449
例えば、void test(double matrix[10][10], double *matrixPtr[10][10])
ってイメージで、matrix[10][10]を関数に入力して、
計算した結果をmatrixPtr[10][10]に出力するって感じです。

多分根本的なところが間違ってると思われますが、
void型の関数で不特定多数の、main関数で使える値を出すには
どうすればいいんでしょうか?
かなり日本語喋れってかんじだと思いますが、どうかよろしくお願いします・・・
0451デフォルトの名無しさん2006/11/27(月) 09:02:47
>>450
渡された配列の中身を書き換えるだけなら、わざわざ double *matrixPtr[10][10]
ってポインタ配列にする意味がわからん。mallocで確保でもするのか?
0452デフォルトの名無しさん2006/11/27(月) 10:43:21
値を変更するためにポインタにしなきゃいけないと思ってるんじゃない?
配列を引数にするってことがどういうことかわかってないんだろ。
04534422006/11/27(月) 10:44:03
<<447
早速の返答ありがとうございます。
でもこれって#include <stdio.h>だけで作れないですか?
最初の[5]で書いとくべきだったんですけどすみません。
多分、単語を切り取って文字数を出力し、文字数mを添字とする配列要素を
インクリメントしていく、という流れになると思うんですが・・・
本当に申し訳ないですが、よろしかったらお願いします。
0454デフォルトの名無しさん2006/11/27(月) 10:59:19
>>453
C++って書いておいてそれはねーだろw
0455デフォルトの名無しさん2006/11/27(月) 13:54:15
これはひどいwwwwww
0456デフォルトの名無しさん2006/11/27(月) 14:09:22
ワロタ
■ このスレッドは過去ログ倉庫に格納されています