**PP 教えてください。
■ このスレッドは過去ログ倉庫に格納されています
0001おしえてくん
NGNG下に書きます。
0002おしえてくん
NGNGパスカルの三角形?
(a+b)^xのxの部分を大きくしていき、係数を求めるらしいんですが
もともとmallocとポインターの復習ということなのですが。
いままでC++のクラスしかとっていません。ポインターは
まだしも、mallocがよくわかりません。しかも ダブルポインター
がなぜ必要なのかも良く分かりません。
**pascalsTriangle(int n)の部分以外は先生の希望により
変えられません。たぶんダブルポインターを使って
解かせたいんだと思います。結局期限はすぎたので間に合いませんが
このままでは寝れません。どなたか教えてください。
#include<stdio.h>
#include<stdlib.h>
int combinations(int r,int k)
{
if(r<0)
return 0;
else if(k<0)
return 0;
else if(k==0)
return 1;
else if(k==1)
return r;
else return combinations(r-1,k)+combinations(r-1,k-1);
}
void print(int **p,int n)
{
int i,j;
for(i=0;i<=n;i++)
{
for(j=0;j<(n-i)/1;j++)
printf(" ");
for(j=0;j<=i;j++)
printf("%4d ",*(*(p+i)+j));
printf("\n");
}
}
int **pascalsTriangle(int n)
{
ここがさっぱり分からない。
}
void test(int n)
{
printf("\n\nPascal's Triangle for n=%d\n",n);
print(pascalsTriangle(n),n);
}
int main()
{
int i;
for(i=0;i<=12;i++)
test(i);
return 0;
}
0003デフォルトの名無しさん
NGNG(省略されました・・全てを読むにはここを押してください)
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGというか p がポインタのポインタです。
というか、pascalsTriangleがポインタのポインタになってるから
printの引数もポインタのポインタになっているだけです。
というか多分pascalsTriangleの中で配列の配列に何かをつめてるんです。
というか配列の配列だからポインタのポインタみたいなもんです。
0006デフォルトの名無しさん
NGNG1 1
1 2 1
1 3 3 1
ってアレか?
0007デフォルトの名無しさん
NGNGこんなん、ちゃんと動くのか?
先生から教育しなおさなきゃならんぞ。それともネタか?
pascalsTriangle で malloc して返すワケ?
なんにせよバグてんこもりになりそうだ。
0008おしえてくん
NGNGこれで動いてるんですが、確信がありません。
mallocで確保したメモリーを
freeするやりかたは、これで良いんでしょうか?
また、freeが成功したかどうかってどうやって調べるんですか?
free -k ? とかでみるしかないんでしょうか?
インデントしてないの申し訳ない。なんかおかしくなったようです。
#include<stdio.h>
#include<stdlib.h>
int combinations(int r,int k);
void print(int **p,int n);
void test(int n);
void freem(int **p,int n);
int **pascalsTriangle(int n);
int **p;
int combinations(int r,int k)
{
if(r<0)
return 0;
else if(k<0)
return 0;
else if(k==0)
return 1;
else if(k==1)
return r;
else return combinations(r-1,k)+combinations(r-1,k-1);
}
void print(int **p,int n)
{
int i,j;
for(i=0;i<=n;i++)
{
for(j=0;j<(n-i)/1;j++)
printf(" ");
for(j=0;j<=i;j++)
printf("%4d ",*(*(p+i)+j));
printf("\n");
}
}
void freem(int **p,int n)
{
int i;
for(i=0;i<=n;i++)
free(*(p+i));
free(p);
}
int **pascalsTriangle(int n)
{
int i,j;
p=(int **)malloc((n+1)*sizeof(int *));
for(i=0;i<=n;i++)
{
*(p+i)=(int *)malloc((i+1)*sizeof(int));
for(j=0;j<=i;j++)
*(*(p+i)+j) = combinations(i,j);
}
return p;
}
void test(int n)
{
printf("\n\nPascal's Triangle for n=%d\n",n);
print(pascalsTriangle(n),n);
}
int main()
{
int i;
for(i=0;i<=12;i++)
test(i);
freem(p,12);
return 0;
}
0009デフォルトの名無しさん
NGNGまたフリーに失敗したからといってやり直しが効くわけではありません。
人生は一度しかないのですから。
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGほっといて落ちるようなら快方失敗でしょ?
0012おしえてくん
NGNG0013デフォルトの名無しさん
NGNG数行で出来る事を何故そこまでゴチャゴチャにする・・・
■ このスレッドは過去ログ倉庫に格納されています