Ti posto il progetto magari può servire a qualcuno per imparare ed esercitarsi....
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void visualizza_numeri(int numeri[], int num);
void visualizza_base(int b[][5], int numeri_base);
void visualizza_array_b(int b[5][5], int rig, int col);
void genera_numeri_senza_ripetizione_base(int b[][5], int num_norepeat);
void sottrazioni(int b[][5], int rig, int col);
int controllo(int b[5][5], int n);
int controllo_piramide(int b[5][5]);
int main()
{
int numeri[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
srand(time(0));
int b[5][5];/*={{1},{2,3},{4,5,6},{7,8,9,10},{11,12,13,14,15}};ho fatto la prova, funziona,
viene 1 quando a tutti i numeri presenti viene assegnato 1 alla funzione controllo tutti i numeri sono uguali*/
int num=15, numeri_base=5;
int rig=5, col=5;
printf("Numeri da utilizzare: ");
visualizza_numeri(numeri, num);
printf("\n\n");
printf("Array A pseudo-random di partenza in ultima fila quindi base della piramide: \n\n");
int num_norepeat=5;
int p;
for(p=0; p<5; p++)
{do{
genera_numeri_senza_ripetizione_base(b,num_norepeat);
sottrazioni(b,rig,col);
}while(controllo_piramide(b)==1);
visualizza_base(b,numeri_base);
printf("\n\n\n");
printf("%d", controllo_piramide(b));
printf("\n");
visualizza_array_b(b,5,5);
for(int n=1; n<=15; ++n)
{
printf("%d", controllo(b,n));
}
}
}
void visualizza_numeri(int numeri[], int num)
{
int i;
for(i=0; i<num; i++)
printf("%3d", numeri[i]);
}
void visualizza_base(int b[][5], int numeri_base)
{
int i;
for(i=0; i<numeri_base; i++)
{printf("%3d", b[4][i]);}
}
void genera_numeri_senza_ripetizione_base(int b[][5], int num_norepeat)
{
int i, j;
int *base=b[4];
for(i=0; i<num_norepeat; i++)
{
base[i]=1+rand()%15;
for(j=0; j<i; j++)
{
if(base[i]==base[j])
{
i--;
break;
}
}
}
}
void sottrazioni(int b[][5], int rig, int col)
{
for(rig=3; rig>=0; --rig)
{
for(col=rig; col>=0; --col)
{
b[rig][col]=b[rig+1][col]-b[rig+1][col+1];
if(b[rig][col]<0)
{
b[rig][col]=b[rig][col]*-1;
}
}
}
}
int controllo(int b[5][5], int n)
{
int i, j;
for (i=0; i<5 ; i++ )
{
for(j=0; j<=i; j++)
{if ( b[i][j] == n )
{
return 1;
}
}
}
return 0;
}
void visualizza_array_b(int b[5][5], int rig, int col)
{
int i,j;
for(i=0; i<rig; i++)
{
for(j=col; j>i; --j)
{printf(" ");}
for(j=0; j<=i; j++)
printf(" %3d ", b[i][j]);
printf("\n\n\n");
}
}
int controllo_piramide(int b[5][5])
{
int n;
for(n=1; n<=15; ++n)
{
if(controllo(b,n)==0)
{
return 1;
}
}
return 0;
}