ayuda con un programa
Publicado por gustavo morales (2 intervenciones) el 09/09/2007 01:49:19
int main(){
int k, l, m=5, n;
int *c1, *c2;
cout<&;Cuantas filas quieres: ";
cin>>n;
clrscr();
cout<<1<<endl;
c1=new int[4];
c1[0]=0; c1[0]=1; c1[0]=1; c1[0]=1;
cout<<c1[1]<<" "<<c1[2]<<" "<<endl;
for(k=0; k<n-2; k++, m++){
c2=new int[m];
c2[0]=0; c2[m-1]=0;
for(l=1; l<m-1; l++){
c2[l]=c1[l]+c1[l+1];
cout<<*c2<<" ";
}
cout<<endl;
c1=new int[m];
for(l=0; l<m; l++){
c1[l]=c2[l];
}
}
getch();
return 0;
}
</quote>
<quote>
int k, l, m=5, n;
int *c1, *c2;</quote>
les explicare como se supone q funciona la prueba de escritorio:
empezamos con 3 variables contador: "k, l y m" y una para ingresar el numero de filas q despliega el programa: "n".
*c1 y *c2 son vectores.
<quote>
cout<<"Cuantas filas quieres: ";
cin>>n;
clrscr();
cout<<1<<endl;</quote>
una vez q ingresamos el numero de filas para mostrar, limpio la pantalla con clrscr(); y luego mando un cout q me despliega el primer numero de la piramide; "1". Hasta esa instruccion, el programa debe mandar:
----------
1
----------
<quote>
c1=new int[4];
c1[0]=0; c1[0]=1; c1[0]=1; c1[0]=1;
cout<<c1[1]<<" "<<c1[2]<<" "<<endl;
</quote>
con la instruccion new, convierto a *c1 en un vector de 4 posiciones, a las cuales luego les asigno el valor de [0][1][1][0], y luego despliego solo los dos unos, y entonces el programa deberia de escribir:
------
1
1 1
-----
<quote>
for(k=0; k<n-2; k++, m++){
</quote>
a partir de aqui, el programa entra a un ciclo para repetir la operacion el numero de filas q se desea mostrar: n-2 por que ya ha mostrado 2 (aun no se como no mostrar las primeras dos :p)
<quote>
c2=new int[m];
c2[0]=0; c2[m-1]=0;
for(l=1; l<m-1; l++){
c2[l]=c1[l]+c1[l+1];
cout<<*c2<<" ";
</quote>
con este ciclo, c2 lo convierto en un vector de tamaño 1+ grande que c1, le asigno 0 a los extremos, y luego entra en un subciclo que asigna a las casillas de en medio los valores del vector anterior, ejem:
VECTOR *C1=[0][a][b][0]
VECTOR *C2=[0][0+a][a+b][b+0][0]
por lo que quedaria asi:
[0][1][1][0]
[0][1][2][1][0]
ya con el cout, solo despliego los numero diferentes de ceroy entonces el programa queda asi:
---------
1
1 1
1 2 1
--------
<quote>
cout<<endl;
c1=new int[m];
for(l=0; l<m; l++){
c1[l]=c2[l];
</quote>
por ultimo, con el cout me salto a la linea q sigue; luego convierto el vector c1 a tamaño igual a c2, y con el ciclo copio c2 a c1, para q los dos vectores sean iguales, para que cuando se reinicie el ciclo, empieze como
[0][1][2][1][0].
entonces empieza el cliclo y c2 es de tamaño 6 y queda
[0][1][3][3][1][0]
etc, hasta que el ciclo principal llegue a "n" y sea el tamaño de filas.
el probelma es que cuando corre el programa me manda una señal asi:
--------
1
451885215 0
0 0 0
0 0 0 0
0 0 0 0 0
---------
no tengo idea por que, si a me parece que el algoritmo esta bastante claro y esta bien codificado; si me pueden ayudar muchas gracias por que esto es algo frustrante, el no saber cual es el problema, igual y es mi procesador o yo que se :(
int k, l, m=5, n;
int *c1, *c2;
cout<&;Cuantas filas quieres: ";
cin>>n;
clrscr();
cout<<1<<endl;
c1=new int[4];
c1[0]=0; c1[0]=1; c1[0]=1; c1[0]=1;
cout<<c1[1]<<" "<<c1[2]<<" "<<endl;
for(k=0; k<n-2; k++, m++){
c2=new int[m];
c2[0]=0; c2[m-1]=0;
for(l=1; l<m-1; l++){
c2[l]=c1[l]+c1[l+1];
cout<<*c2<<" ";
}
cout<<endl;
c1=new int[m];
for(l=0; l<m; l++){
c1[l]=c2[l];
}
}
getch();
return 0;
}
</quote>
<quote>
int k, l, m=5, n;
int *c1, *c2;</quote>
les explicare como se supone q funciona la prueba de escritorio:
empezamos con 3 variables contador: "k, l y m" y una para ingresar el numero de filas q despliega el programa: "n".
*c1 y *c2 son vectores.
<quote>
cout<<"Cuantas filas quieres: ";
cin>>n;
clrscr();
cout<<1<<endl;</quote>
una vez q ingresamos el numero de filas para mostrar, limpio la pantalla con clrscr(); y luego mando un cout q me despliega el primer numero de la piramide; "1". Hasta esa instruccion, el programa debe mandar:
----------
1
----------
<quote>
c1=new int[4];
c1[0]=0; c1[0]=1; c1[0]=1; c1[0]=1;
cout<<c1[1]<<" "<<c1[2]<<" "<<endl;
</quote>
con la instruccion new, convierto a *c1 en un vector de 4 posiciones, a las cuales luego les asigno el valor de [0][1][1][0], y luego despliego solo los dos unos, y entonces el programa deberia de escribir:
------
1
1 1
-----
<quote>
for(k=0; k<n-2; k++, m++){
</quote>
a partir de aqui, el programa entra a un ciclo para repetir la operacion el numero de filas q se desea mostrar: n-2 por que ya ha mostrado 2 (aun no se como no mostrar las primeras dos :p)
<quote>
c2=new int[m];
c2[0]=0; c2[m-1]=0;
for(l=1; l<m-1; l++){
c2[l]=c1[l]+c1[l+1];
cout<<*c2<<" ";
</quote>
con este ciclo, c2 lo convierto en un vector de tamaño 1+ grande que c1, le asigno 0 a los extremos, y luego entra en un subciclo que asigna a las casillas de en medio los valores del vector anterior, ejem:
VECTOR *C1=[0][a][b][0]
VECTOR *C2=[0][0+a][a+b][b+0][0]
por lo que quedaria asi:
[0][1][1][0]
[0][1][2][1][0]
ya con el cout, solo despliego los numero diferentes de ceroy entonces el programa queda asi:
---------
1
1 1
1 2 1
--------
<quote>
cout<<endl;
c1=new int[m];
for(l=0; l<m; l++){
c1[l]=c2[l];
</quote>
por ultimo, con el cout me salto a la linea q sigue; luego convierto el vector c1 a tamaño igual a c2, y con el ciclo copio c2 a c1, para q los dos vectores sean iguales, para que cuando se reinicie el ciclo, empieze como
[0][1][2][1][0].
entonces empieza el cliclo y c2 es de tamaño 6 y queda
[0][1][3][3][1][0]
etc, hasta que el ciclo principal llegue a "n" y sea el tamaño de filas.
el probelma es que cuando corre el programa me manda una señal asi:
--------
1
451885215 0
0 0 0
0 0 0 0
0 0 0 0 0
---------
no tengo idea por que, si a me parece que el algoritmo esta bastante claro y esta bien codificado; si me pueden ayudar muchas gracias por que esto es algo frustrante, el no saber cual es el problema, igual y es mi procesador o yo que se :(
Valora esta pregunta


0