#include <stdio.h>
#include <math.h>
// #include <malloc.h> ???
#include <stdlib.h>
float array_mean(float arr_1[],int dim)
{
float med=0,temp=0;
for(int i=0;i<dim;i++)
{
temp+=arr_1[i];
}
return temp/dim;
}
void array_print_to_screen(float arr_1[],int dim)
{
for(int i=0;i<dim;i++)
{
printf("\narr_1[%d]= %f",i,arr_1[i]);
}
}
void array_input(float arr_1[],int dim)
{
for(int i=0;i<dim;i++)
{
printf("\nInserire %do valore: ",i+1);
scanf("%f",&arr_1[i]);
}
}
float* array_alloc(int dim)
{
float* arr_1;
arr_1=(float*)malloc(dim*sizeof(float));
if (arr_1 == NULL) {
printf("\nMalloc non riuscito.");
exit(0);
}
else
{
printf("\nMalloc riuscito.");
}
return arr_1;
}
// KODE: restituisce sempre 0, ci sta un problema... vedi bene che non è difficile trovare dove sia ;)
float array_min_index(float arr_1[],int dim)
{
float min=0; // KODE: attento qua
for(int i=1;i<=dim;i++)
{
if(arr_1[i-1]<arr_1[i]) // KODE: attento qua
{
min=arr_1[i-1];
}
else
{
min=arr_1[i];
}
}
return min;
}
float array_sort(float arr_1[],int dim)
{
for(int i=0; i<dim; i++)
{
for(int j=i+1;j<dim;j++)
{
if(arr_1[j]<arr_1[i])
{
float temp;
temp=arr_1[j];
arr_1[j]=arr_1[i];
arr_1[i]=temp;
}
}
}
}
void array_write_to_file(float arr_1[],int dim,FILE* Wfile)
{
for(int i=0;i<dim;i++)
{
fprintf(Wfile,"%d.%f\n",i+1,arr_1[i]);
}
}
void scelta(int menu,float arr_1[],int dim)
{
//bool close=false; KODE: booleano ridondante, alla fine basta vedere quando menu = 0
//do
//{
switch(menu)
{
case 0://CHIUSURA
{
// close==true;
printf("\nChiusura...");
break;
}
case 1://STAMPA ARRAY
{
array_print_to_screen(arr_1,dim);
break;
}
case 2://ORDINAMENTO ARRAY
{
array_sort(arr_1,dim);
break;
}
case 3://SCRITTURA FILE
{
array_print_to_screen(arr_1,dim);
break;
}
case 4://MEDIA
{
printf("\nMedia: %lf\n", array_mean(arr_1,dim)); //Non stampava la media
break;
}
case 5://MINIMO
{
printf("\nMin: %lf\n", array_min_index(arr_1,dim)); //Non stampava il minimo
break;
}
default://INPUT NON VALIDO
{
// KODE: i due printf sotto sono ridondanti ora, quindi li ho eliminati
//printf("\nInserisci un numero da 1 a 5 per continuare, 0 per terminare.\n");
//printf("1.arrayPrint\n2.arraySort\n3.writeOnFile\n4.arrayMean\n5.arrayMinIndex\n0.Close)");
printf("Input non valido");
break;
}
}
// }while(menu!=0 && close==false); KODE: va in loop, in genere quando si vuole effettuare una funzione
// di switching i cicli sono nel body della funzione invocatrice (nel nostro caso il main)
}
int main()
{
int dim=0, menu = 1;
printf("Dimensione array: ");
scanf("%d",&dim);
float* arr_1;
FILE * Wfile;
arr_1=array_alloc(dim);
array_input(arr_1,dim);
Wfile=fopen("values.dat","w");
if (arr_1 != NULL)
// KODE: Ho messo il ciclo all'interno del main piuttosto che in scelta
{
while(menu != 0){
printf("\n1.arrayPrint\n2.arraySort\n3.writeOnFile\n4.arrayMean\n5.arrayMinIndex\n0.Close\n)"); // KODE: ti ho aggiunto un \n perchè odiavo il fatto che non andasse da capo
printf("Digita la tua scelta:");
scanf("%d",&menu);
scelta(menu, arr_1, dim);
// KODE: quando finisce l'operazione dentro la scelta effettuata ritorna qui, nel caso di 0 termina il ciclo
}
}
// KODE: Grazie per aver liberato le risorse, la memoria ti ringrazia
fclose(Wfile);
free(arr_1);
return 0;
}