C/C++の宿題を片付けます 77代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
0313デフォルトの名無しさん
2006/11/25(土) 19:32:29ボンボンというだけで慶應に入って
おまけに卒業に必要な単位は他人任せか
腐れ外道が
0314151
2006/11/25(土) 19:36:09幼稚舎にいた頃、アルバイトで来ていた日大の学生さんを見て、日大はお猿さん養成所も同然だと母が言ってましたが。
0315デフォルトの名無しさん
2006/11/25(土) 19:37:44こっそり本人が書いたんじゃないかと思えてきたよw
0316デフォルトの名無しさん
2006/11/25(土) 19:40:380317デフォルトの名無しさん
2006/11/25(土) 19:42:29信じてるよ
0318デフォルトの名無しさん
2006/11/25(土) 19:43:37俺も信じてるよ
0319デフォルトの名無しさん
2006/11/25(土) 19:44:17[1] 授業単元:情報処理工学1
[2] 問題文(含コード&リンク): 下記
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:VC++
[3.3] 言語: C++
[4] 期限: 明日まで
[5] その他の制限:
class Vector{
public:
void f(){cout << "f()" << endl;}
};
int main(){
vector<Vector*> vec;
Vector *v;
for(int i = 0; i < 10; i++) { v = new Vector; vec.push_back(v); }
for(vector<Vector*>::Iterator i = vec.begin(); i < vec.end(); i++)
i.***->f();
}
というプログラムを作ってるんですが、動的にクラスを確保して、それを次々にvectorに格納して、最後に表示をするっていうふうにしたんです。
ですが、***の部分をどうやったらいいのか、わかりません。クラスではなく、整数であれば、i をそのまま使えばいいんですけど、クラスだとうまくいきません。
どうしたらいいでしょうか??
0320デフォルトの名無しさん
2006/11/25(土) 19:44:26前スレのは知らんがこのスレのを消化していこうぜ
下らん流れはさっさと断ち切るに限る
0321151 ◆nEYxVzEafI
2006/11/25(土) 19:46:590323デフォルトの名無しさん
2006/11/25(土) 19:50:57//受け取った引数xの全桁の合計値を返す関数
int sum_dgt(int x)
{
int digit = 1;
int sum = 0;
int i ;
int xx ;
int xxx = x;
for(i = 1; x > 1 ;i++){
x /=10;
digit *= 10;
}
for(;digit > 0; digit/=10){
xx = xxx;
xx /= digit;
sum += xx;
xxx-=xx*digit;
}
return sum;
}
0325デフォルトの名無しさん
2006/11/25(土) 19:53:32>>151 (今日中)
>>274 (29日まで)
>>276 (今日の23時まで)
>>299 (明日の20時まで)
>>300 (29日まで)
>>319 (明日まで)
期限切れを消しといた
0326デフォルトの名無しさん
2006/11/25(土) 19:54:32もっとゆとりを持って依頼に来てくれよw
0328デフォルトの名無しさん
2006/11/25(土) 20:02:12│>>90 (今日中)
│>>299 (明日の20時まで)
│>>319 (明日まで)
↓>>151 >>274 >>300 (29日まで)
まあまったり待てや
0329デフォルトの名無しさん
2006/11/25(土) 20:03:380330デフォルトの名無しさん
2006/11/25(土) 20:06:56#include <stdio.h>
#include <string.h>
//'\0'は数えないものとする
void Compar(int x, char s[])
{
unsigned int len;
len = strlen(s);
if(x <= len)
printf("文字の長さと数値の差は%d \n",len - x);
else
return;
}
0331デフォルトの名無しさん
2006/11/25(土) 20:09:00│>>299 (明日の20時まで)
│>>319 (明日まで)
↓>>151 >>274 (29日まで)
0332323,300
2006/11/25(土) 20:10:570333名無しさん
2006/11/25(土) 20:13:471を入力されるとIMEがONになって、'あ' と表示するプログラムの作成中です。
以下のコードではIMEがONになってくれなくて、'a' と表示されます。
ご指摘お願いします。
void fnConvert(MSG *pMsg)
{
static int iCnt= 1;
if( (pMsg->wParam == 0x31) && (pMsg->message == WM_KEYDOWN) )
{
pMsg->wParam= 0x41;
break;
}
}
0334デフォルトの名無しさん
2006/11/25(土) 20:14:23俺は274でもやるか
本人降臨してほしいが
0335デフォルトの名無しさん
2006/11/25(土) 20:17:010336デフォルトの名無しさん
2006/11/25(土) 20:18:32しかし宿題出された瞬間にここに出されても萎えるという
0337デフォルトの名無しさん
2006/11/25(土) 20:33:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3037.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3038.c
0338デフォルトの名無しさん
2006/11/25(土) 21:03:07[2] 問題文(含コード&リンク): あるテキストファイルに含まれるA〜Zの個数をカウントするプログラムをつくれ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: lcc
[3.3] 言語: C
[4] 期限: 11月28日まで
お願いします。どう検索すればいいかも分からないので教えていただきたいです。
答えがほしいですが、ヒントをいただければ自分でも努力はします。
0339デフォルトの名無しさん
2006/11/25(土) 21:05:42fgetc()を使ってEOFになるまで一文字ずつ読み込み、isalpha() && isupper()が
真になる時に配列count[26]のうち対応する文字のカウントを+1する。
0340デフォルトの名無しさん
2006/11/25(土) 21:15:57質問されても面倒なので答えを書いておく
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
int chr[26] = {0}, c, i;
FILE *fp;
if ((fp =fopen("count1.c", "r")) == NULL) /* ファイル名は適宜変更 */
exit(1);
while ((c = fgetc(fp)) != EOF)
if (isalpha(c) && isupper(c))
chr[c - 'A']++; /* Windows上で動かす事を前提とする */
for (i = 0; i < 26; i++)
printf("%c : %dcount(s)\n", i + 'A', chr[i]);
return 0;
}
0341デフォルトの名無しさん
2006/11/25(土) 21:16:380342デフォルトの名無しさん
2006/11/25(土) 21:23:57[2] 問題文(含コード&リンク): テキスト(英文)を読み込んで単語を全て取り出し、重複する単語は1つにまとめ、その単語がいくつあったかabc順に並べて表示するプログラムを書きなさい。(.,"などは含まない)
[3] 環境
[3.1] OS:WindowsXP
[3.2] lcc
[3.3] 言語:C
[4] 期限:2006年11月26日24:00まで
プログラミング初心者です。申し訳ありませんがどなたかお願いします。
0343デフォルトの名無しさん
2006/11/25(土) 21:26:08#include <stdio.h>
#include <ctype.h>
#define NUMBER 26
main(int argc, char **argv){FILE *fp; int i, c, chr[NUMBER]={0};
if((fp=fopen(argv[1],"r")) == NULL) puts("need 1 parameter");
else {
while ((c=fgetc(fp))!=EOF) if (isalpha(c)) chr[toupper(c)-'A']++;
fclose(fp);}
for (i=0; i<NUMBER; i++) printf("%c: %3d time%s\n",i+'A',chr[i], chr[i]>1?"s":"");
getchar();return 0;}
0344デフォルトの名無しさん
2006/11/25(土) 21:26:55ていうか、K&Rもんばっかだな
0345287
2006/11/25(土) 21:30:50ありがとうございます。が、なんか文字化けしちゃって私の環境では見れませんね・・・
わざわざ張ってくださったのに申し訳ないです
>>289
これはこれは、わざわざ作ってくださってありがとうございます
しかし私のポインタの知識が未熟なせいか、今現在はまだ読み解けない部分がありますね
けれども、これはとても参考になります。ほんとにありがとうございました
0346デフォルトの名無しさん
2006/11/25(土) 21:32:33base64知らないのか
0347デフォルトの名無しさん
2006/11/25(土) 21:41:190348デフォルトの名無しさん
2006/11/25(土) 21:50:500349デフォルトの名無しさん
2006/11/25(土) 21:54:34ホント悪かった。
0350デフォルトの名無しさん
2006/11/25(土) 21:55:31│>>319 >>342 (明日まで)
↓>>151 >>274 (29日まで)
未解消
0351287
2006/11/25(土) 21:58:09すみません知りませんでした
一応ググって復元してみたら無事プログラムソースを見ることができました
お手数かけまして申し訳ありません
0352デフォルトの名無しさん
2006/11/25(土) 22:00:19[2] 問題文(含コード&リンク):
y=sin2x*cosx(0≦x≦π/4)をgnuplotで図示せよ。
gnuplotの関数表示機能は使わず、C言語でプログラムを組んで、その出力
データをgnuplotで読み込んで図示させること。刻み数は1000とする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 来週の火曜日の20時までです。
[5] その他の制限:特になし。
出力データをファイルに書き込み、gnuplotでそのファイルを読み込み
グラフを表示させる、といことです。
よろしくお願いします。
0353デフォルトの名無しさん
2006/11/25(土) 22:05:28俺遺伝的アルゴリズムやったことないんだ
計算結果はdoubleで返すことを期待されてると思うんだが
double型にビット演算ってできないよな?
何か良いアイデア知ってる火といないかな
0354デフォルトの名無しさん
2006/11/25(土) 22:07:25class Vector {
public:
void f(){ std::cout << "f()" << std::endl; }
};
int main()
{
std::vector<Vector*> vec;
Vector *v;
for (int i = 0; i < 10; i++) {
v = new Vector;
vec.push_back(v);
}
for (std::vector<Vector*>::iterator i = vec.begin(); i < vec.end(); ++i)
(*i)->f();
}
0355デフォルトの名無しさん
2006/11/26(日) 00:15:05gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
0356デフォルトの名無しさん
2006/11/26(日) 00:16:38つ union
0357デフォルトの名無しさん
2006/11/26(日) 00:40:25お こんな要素があったのか バッチリだな
ありがとう
0358352
2006/11/26(日) 00:55:37すいません、
>gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
というのは、出力データをどんな感じでファイルに書き込むか、という
ことですか?
xiとyiとしたら
0.0000 0.14356
0.0100 0.16344
. .
. .
. .
という感じです。
0359デフォルトの名無しさん
2006/11/26(日) 01:05:49#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:49excuse 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
0361353
2006/11/26(日) 04:03:12さすがに人に見せられるレベルじゃないのでもう少し手を入れるが
もし締め切りが近かったらアレなので89はまだいたら締め切り示せ
0363その1
2006/11/26(日) 09:13:28#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その2
2006/11/26(日) 09:14:14int 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その3
2006/11/26(日) 09:15:20//評価関数は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その4
2006/11/26(日) 09:16:00void 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その5
2006/11/26(日) 09:20:36//エリート選択
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[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:440371デフォルトの名無しさん
2006/11/26(日) 10:40:210372デフォルトの名無しさん
2006/11/26(日) 10:45:330373デフォルトの名無しさん
2006/11/26(日) 10:53:04まだ13時間あるよ
0374デフォルトの名無しさん
2006/11/26(日) 11:56:05[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英文テキスト名は指定されている?
0376デフォルトの名無しさん
2006/11/26(日) 12:57:11というか英文の仕様が無いと作りづらいかも。
・英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"のみ?
":(コロン)"とかは出てこない?
・改行は分離子と見なしていい?例えば
I am progr
ammer
という文ならprogrammerを単語とみなすのか?
progrとammerをそれぞれ単語とみなすのか?
0377デフォルトの名無しさん
2006/11/26(日) 14:28:18ありがとうございます。
コンパイルする際にエラーが出ましたが、なんとか頑張って修正してみます。
0378デフォルトの名無しさん
2006/11/26(日) 14:30:37つーか全く同じ問題が前スレか前前スレで解答されてた気がするんだわ
0379352
2006/11/26(日) 14:34:20解答ありがとうございます。
359さんが作って下さったプログラムについて、少し疑問があるのですが…。
課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」
と書いてあるのですが、352さんが作って下さったプログラムの場合だと、
刻み数を大きくすればする程、出力する数も増えて、実際の曲線に近い
データになるような気がするのですが…。
自分自身が刻み数というものを何か解ってなく、現在、学校じゃないので
gnuplotを使用できないというのもあって、実際は、どうなの解りませんが
疑問に思ったので。
0380デフォルトの名無しさん
2006/11/26(日) 14:45:14>課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」
本当にそう書いてある? 刻み「幅」を小さくすれば、なら納得いくのだけど。
0381デフォルトの名無しさん
2006/11/26(日) 15:02:3075代目
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英文はなんでもよいそうです。
英文にでてくる文字の中で単語のみを抜き出すプログラムです。
英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"":(コロン)"";(セミコロン)"です。
・改行は分離子と見なしてよいそうです。
0383379
2006/11/26(日) 15:50:27はい、課題の前の説明には「刻み幅」と書いてあります。
「課題には刻み数は1000とする。」と書いてあります。
刻み数=刻み幅と思っているのですが違うのですか?
違うなら刻み数と刻み幅はどう違うのでしょうか?
0384デフォルトの名無しさん
2006/11/26(日) 15:55:04どこのアホだよ、わからないことを紙に書いて
整理してから書き込めばわかることだろ。
馬鹿は馬鹿なりのプログラムの書き方ってのがある、
それすらしない奴はもしかして自分の頭だけで
物事全て考えられると思ってるのか?
そういうのって思い上がりだよ。
0385デフォルトの名無しさん
2006/11/26(日) 15:56:42それ1行に1単語とか制約つきじゃまいか?
0386デフォルトの名無しさん
2006/11/26(日) 16:00:56日本語でおk
0387デフォルトの名無しさん
2006/11/26(日) 16:02:520388デフォルトの名無しさん
2006/11/26(日) 16:07:08main関数のwhile文をこう書き換えればよし。
while(scanf("%*[^a-zA-Z]"),scanf("%79[a-zA-Z]",buf)==1){
まぁ単語長に制限ついてるけど実用上は問題ないでしょ。
0389デフォルトの名無しさん
2006/11/26(日) 16:12:11まず一つ言っておく
煽りでもなんでもなく小学生でも分かることだから今後自分の勉強への態度を変えたほうが良いぞ
━━━━━━━━━━━━━━━━━━━━
↑これを刻み数10で分割すると(10個に分割する)
━━━━━━━━━━━━━━━━━━━━
└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘
こうなる。
一方刻み数5で分割すると(5個に分割する)
━━━━━━━━━━━━━━━━━━━━
└──┘└──┘└──┘└──┘└──┘
こうなる。
分割する数が減れば、1個1個の幅(刻み幅)は増える。
当たり前だな
0390デフォルトの名無しさん
2006/11/26(日) 16:20:320391デフォルトの名無しさん
2006/11/26(日) 16:23:56後学のために、どういうエラーが出たか教えてくれないか?
0392デフォルトの名無しさん
2006/11/26(日) 16:24:59喪前が100mを歩かなければならないとする。
で、100m歩くときの歩数(刻み数)と歩幅(刻み幅)の関係を考えでみろ
歩数x歩幅=100m
歩数が多い、歩幅が小さいになるだろ >>389見ろ
0393デフォルトの名無しさん
2006/11/26(日) 16:25:42ちょうど今修正してる段階で気づきましたが、
こちらの手違いでした、申し訳アリマセンOTL
0394デフォルトの名無しさん
2006/11/26(日) 16:30:01提出したら不可がきたりとか・・・・。
0395デフォルトの名無しさん
2006/11/26(日) 16:30:35そりゃまた随分乱暴だな・・・( ^ω^)
いいけどよ、俺の宿題じゃねーしw
0396デフォルトの名無しさん
2006/11/26(日) 16:35:19見返してて気づいたけど、一筆書きをする方の58行目のコメント
「全ての節点の次数が偶数だった」
は嘘なので削除しておいてくれ。
0397デフォルトの名無しさん
2006/11/26(日) 16:44:15│>>369 (28日の09時まで)
│>>374 (28日の16時まで)
↓>>151 >>274 (29日まで)
未解消
0398デフォルトの名無しさん
2006/11/26(日) 16:54:06[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:090400デフォルトの名無しさん
2006/11/26(日) 16:57:43│>>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>>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=404
2006/11/26(日) 17:13:24自分の書き込み表示されないで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色々とおかしい
とりあえず元々の書き換え前のを出したほうがはやいぜ?
0407デフォルトの名無しさん
2006/11/26(日) 17:23:21381は求められてる出力と違うみたいです。
・単語を全部取り出し重複する単語は1つにまとめる。
・それぞれの単語の出現した数を数えて表示する。
・単語をアルファベット順に並べる
ということが求められています。
面倒かと思いますが本当に申し訳ないのですがどなたかお願いします。
0408デフォルトの名無しさん
2006/11/26(日) 17:26:03>>388の変更を加えても期待するのと動作が違うのか?
0409401=404
2006/11/26(日) 17:26:58void 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:480411デフォルトの名無しさん
2006/11/26(日) 17:31:10まず長さを取得して、それを使って書き換え前の関数を呼べば良い。
0412デフォルトの名無しさん
2006/11/26(日) 17:31:442時間本気で悩むのはなかなかできることじゃないと思うが。
■ このスレッドは過去ログ倉庫に格納されています