Y este para crear la piramide divertida pero de divisiones:
Código PHP:
#include <stdio.h>
#include <stdlib.h>
#define MAXCOUNTBUCLES 10
int ObtenerPosibles(double* Resultado, int posToShow);
void ObtenerNivelDos( double* pResultado, double cociente, double divisor);
int ObtenerNivelTres(double* pResultado, double valor6);
int ObtenerNivelCuatro(double* pResultado, double valor9);
int main()
{
double Resultado[10]={0.0};
int posibles=0, posToShow;
int salir=0;
char caracter;
do{
//Pido el valor del pico de la piramide
printf("Introduce el valor de la cima de la piramide: ");
scanf("%lf",&Resultado[0]);
posibles = ObtenerPosibles(Resultado,-1);
printf("\nSe obtuvieron %i posibles soluciones para un contador maximo para los bucles de %i.\n", posibles, MAXCOUNTBUCLES);
if(posibles > 0){
printf("Introduce el indice de la piramide que deseas mostrar ('0' para mostrar todas): ");
scanf("%i",&posToShow);
posibles = ObtenerPosibles(Resultado,posToShow);
}
//Pido que el usuario decida si repetir o salir
do{
fflush(stdin);
printf("\nPresiona 'S' para salir o 'R' para repetir: ");
caracter = getchar();
}while(caracter != 'S' && caracter != 's' && caracter != 'R' && caracter != 'r');
if(caracter == 'S' || caracter == 's')
salir = 1;
else
system("CLS");
}while(salir != 1);
return 0;
}
//---------------------------------------------------------------------------
int ObtenerPosibles(double* Resultado, int posToShow)
{
int i, x, n, retval, posibles=0;
for(i=1;i<MAXCOUNTBUCLES;i++)
{
ObtenerNivelDos(Resultado, Resultado[0], i);
for(x=1;x<MAXCOUNTBUCLES;x++)
{
retval = ObtenerNivelTres(Resultado, x);
if(retval == 0){
for(n=1;n<MAXCOUNTBUCLES;n++)
{
retval = ObtenerNivelCuatro(Resultado, n);
if(retval == 0){
posibles++;
if(posToShow == posibles || posToShow == 0){
//Muestro la pirámide
printf("\n---------------------------------\n");
printf(" %.0lf\n", Resultado[0]);
printf(" %.0lf %.0lf\n", Resultado[1], Resultado[2]);
printf(" %.0lf %.0lf %.0lf\n", Resultado[3], Resultado[4], Resultado[5]);
printf("%.0lf %.0lf %.0lf %.0lf\n", Resultado[6], Resultado[7], Resultado[8], Resultado[9]);
}
}
}
}
}
}
if(posToShow != -1)
printf("\n---------------------------------\n");
return posibles;
}
//---------------------------------------------------------------------------
void ObtenerNivelDos( double* pResultado, double cociente, double divisor)
{
*(pResultado+1) = cociente * divisor;
*(pResultado+2) = divisor;
}
//---------------------------------------------------------------------------
int ObtenerNivelTres(double* pResultado, double valor6)
{
int retval=-1;
*(pResultado+5) = valor6;
*(pResultado+4) = *(pResultado+5) * *(pResultado+2);
if(*(pResultado+4) <= *(pResultado+1)){
*(pResultado+3) = *(pResultado+1) * *(pResultado+4);
retval = 0;
}
return retval;
}
//---------------------------------------------------------------------------
int ObtenerNivelCuatro(double* pResultado, double valor9)
{
int retval=-1;
*(pResultado+9) = valor9;
*(pResultado+8) = *(pResultado+9) * *(pResultado+5);
if(*(pResultado+8) <= *(pResultado+4)){
*(pResultado+7) = *(pResultado+4) * *(pResultado+8);
if(*(pResultado+7) <= *(pResultado+3)){
*(pResultado+6) = *(pResultado+3) * *(pResultado+7);
retval = 0;
}
}
return retval;
}
//---------------------------------------------------------------------------
¿que os parece? La verdad es que no soy programador profesional, todo lo que se lo he aprendido por libre porque siempre me ha apasionado la programacion y para mi plantearme hacer un codigo es como para otros hacer un sudoku, me divierte y me entretiene y hay veces (muchas) que tengo que pedir ayuda porque me atasco
.