Questo è il codice modificato
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inseriredisco();
void prezzominore();
int ric_bin_ricTF(int minn,int minorii[],int numdiscc,int primoo,int ultimoo);
void tuttidischi();
void eliminadisco();
enum Categorie
{
ROCK,
JAZZ,
POP,
EDM,
HOUSE,
SIZECAT
};
typedef struct Disco{//struct del disco
char titolo[30];
char autore[30];
int prezzo;
}disco;
typedef struct categoriamusicale{//struct della categoria musicale
char codnum[30];
char generemus[30];
int numdischi;
disco discoo[30];
}Categoria;
Categoria categoriamusicalee[SIZECAT];
disco discoo[30];
int i;
int st;
int numdisc=0;
int main()
{
strcpy(categoriamusicalee[ROCK].codnum,"rockmusic");
strcpy(categoriamusicalee[ROCK].generemus, "ROCK");
strcpy(categoriamusicalee[JAZZ].codnum,"jazzmusic");
strcpy(categoriamusicalee[JAZZ].generemus, "JAZZ");
strcpy(categoriamusicalee[POP].codnum,"popmusic");
strcpy(categoriamusicalee[POP].generemus, "POP");
strcpy(categoriamusicalee[EDM].codnum,"edmmusic");
strcpy(categoriamusicalee[EDM].generemus, "EDM");
strcpy(categoriamusicalee[HOUSE].codnum,"housemusic");
strcpy(categoriamusicalee[HOUSE].generemus, "HOUSE");
int flag=0;
printf("------BENVENUTO------\n");
while(flag!=5)
{
printf("\n 1 - Inserire nuovo disco");
printf("\n 2 - Disco con prezzo minore");
printf("\n 3 - Visualizzare tutti dischi");
printf("\n 4 - Eliminare un disco");
printf("\n 5 - Uscita\n");
printf("\nDigita il numero corrispondente l'operazione da eseguire -> ");
scanf("%d",&flag);
switch (flag)
{
case 1: inseriredisco(); break;
case 2: prezzominore(); break;
case 3: tuttidischi(); break;
case 4: eliminadisco(); break;
case 5: printf("\n -------------------------------------------------------------------------- \n Il programma della gestione dischi vi augura un buon proseguo di giornata! \n --------------------------------------------------------------------------");
EXIT_SUCCESS; break;
}
}
}
void inseriredisco()
{
int fi;
printf(" \n | Scegli il genere/categoria musicale digitando il numero corrispondente. | \n");
printf("\n | 1: ROCK | - | 2: JAZZ | - | 3: POP | - | 4: EDM | - | 5: HOUSE | \n");
printf("\n Ora digita qui il numero (1-5) -> ");
scanf("%d",&fi);
switch(fi)
{case 1:
printf("TITOLO: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
printf("AUTORE: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
printf("PREZZO: ");
scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
numdisc++; break;
case 2:
printf("TITOLO: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
printf("AUTORE: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
printf("PREZZO: ");
scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
numdisc++; break;
case 3:
printf("TITOLO: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
printf("AUTORE: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
printf("PREZZO: ");
scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
numdisc++; break;
case 4:
printf("TITOLO: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
printf("AUTORE: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
printf("PREZZO: ");
scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
numdisc++; break;
case 5:
printf("TITOLO: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].titolo);
printf("AUTORE: ");
scanf("%s",categoriamusicalee[numdisc].discoo[numdisc].autore);
printf("PREZZO: ");
scanf("%d",&categoriamusicalee[numdisc].discoo[numdisc].prezzo);
numdisc++; break;}
}
void prezzominore()//restituzione del disco con prezzo minore tramite algoritmo divide-et-impera ricorsivo.
{
int min=categoriamusicalee[0].discoo[0].prezzo;
int l;
int minori[30];
int res, indice=0;
int primo=0;
int ultimo=numdisc-1;
for(i=0;i<numdisc;i++)
{
minori[i]=categoriamusicalee[i].discoo[i].prezzo;
}
for (l=1; l<numdisc; l++)
{
if (min>categoriamusicalee[l].discoo[l].prezzo)
{
min=categoriamusicalee[l].discoo[l].prezzo;
indice=l;
}
}
res=ric_bin_ricTF(min,minori,numdisc,primo,ultimo);
printf(" \n | DISCO PREZZO MINORE | \n ");
printf("\n|TITOLO|");
printf("\n%s\n",categoriamusicalee[res].discoo[res].titolo);
}
int ric_bin_ricTF(int minn,int minorii[],int numdiscc,int primoo,int ultimoo)
{
int mediano;
if (primoo>ultimoo)
return 1;
{
mediano=(primoo+ultimoo)/2;
if(minn==minorii[mediano])
{
return mediano;
}
else
{
if (minn<minorii[mediano])
{
return ric_bin_ricTF(minn,minorii,numdiscc,primoo,mediano-1);
}
else
{
return ric_bin_ricTF(minn,minorii,numdiscc,mediano+1,ultimoo);
}
}
}
}
void tuttidischi() //visualizzazione di tutti i dischi presenti all'interno dell'archivio
{
int p;
printf(" \n-----------------------------------------------------------------------");
printf(" \n | BACHECA DISCHI | \n ");
printf("\n|TITOLO| |AUTORE| |PREZZO|\n");
for (p=0; p<numdisc; p++)
{
if (strcmp(" ",categoriamusicalee[p].discoo[p].titolo)==0)
{
printf("\n%s ",categoriamusicalee[p+1].discoo[p+1].titolo);
printf("%s ",categoriamusicalee[p+1].discoo[p+1].autore);
printf("%d\n",categoriamusicalee[p+1].discoo[p+1].prezzo);
p++;
}
else
{
printf("\n%s ",categoriamusicalee[p].discoo[p].titolo);
printf("%s ",categoriamusicalee[p].discoo[p].autore);
printf("%d\n",categoriamusicalee[p].discoo[p].prezzo);
}
}
}
void eliminadisco()//eliminazione di un disco
{
char tit[30]; int v;
puts("Inserisci il titolo del disco da eliminare: ");
scanf("%s", tit);
for (v=0; v<=numdisc; v++)
{
if (strcmp(tit,categoriamusicalee[v].discoo[v].titolo)==0)
{
strcpy(categoriamusicalee[v].discoo[v].titolo," ");
strcpy(categoriamusicalee[v].discoo[v].autore," ");
categoriamusicalee[v].discoo[v].prezzo=0;
}
}
}
purtroppo, come gia ho detto prima (puoi anche provarlo) per un pò mi elimina e sostituisce il disco, ma andando avanti mi sostituisce il disco eliminato con "0", e quando inserisco un nuovo disco non si toglie lo "0", ma il nuovo disco viene messo sotto. Scusa ancora il disturbo, ma è per l'esame di Prog 1 e non riesco proprio a capire come risolvere.