Salve a tutti, sono un ragazzo che sta facendo ingegneria informatica:) , martedi ho un esame sul c++! esercitandomi mi sono imbatutto in una traccia del prof, e non capisco come va affrontata o fatta. L ho svolta ma non so se va bene, quindi chiedevo aiuto a qualcuno x farmi capire bene le cose..grazie a tutti.
Si scriva un programma che utilizzi la struttura dati più adatta per gestire una playlist di brani musicali, in cui il generico elemento deve contenere i seguenti dati:
titolo del brano
nome dell'esecutore
anno della registrazione
durata del brano in secondi
Il programma deve prevedere inizialmente la lettura dell'elenco per un numero N di brani specificato dall'utente. Una volta inserito l'elenco, il programma deve prevedere la lettura di un valore T e procedere all'eliminazione dall'elenco dei brani di durata inferiore a T. L'elenco ottenuto al termine delle eliminazioni deve essere quindi ordinato per durata del brano in senso decrescente e stampato, riportando tutti i dati di ciascun brano.
#include <cstdlib>
#include <iostream>
using namespace std;
struct brani
{
char titolo[32];
char nomec[32];
int anno;
float durata;
};
void ordina(brani b[],int n);
void elimina(brani b[],int n,int pos);
int cerca(brani b[],int n,float x);
void leggi(brani b[],int n);
void stampa(brani b[],int n);
int main(int argc, char** argv) {
brani b[200];
int n;
int pos;
float t;
cout<<"Quanti brani vuole inserire:"<<endl;
cin>>n;
leggi(b,n);
ordina(b,n);
cout<<"Inserisci la durata del brano:"<<endl;
cin>>t;
pos=cerca(b,n,t);
if(pos>=0)
{
elimina(b,n,pos);
n--;
}
stampa(b,n);
return 0;
}
void leggi(brani b[],int n){
for(int i=0;i<n;i++)
{
cout<<"Titolo brano:"<<endl;
cin.ignore();
cin.getline(b[i].titolo,32);
cout<<"Nome artista:"<<endl;
cin.ignore();
cin.getline(b[i].nomec,32);
cout<<"Anno pubblicazione:"<<endl;
cin>>b[i].anno;
cout<<"Durata brano:"<<endl;
cin>>b[i].durata;
}
}
void stampa(brani b[],int n){
for(int i=0;i<n;i++)
{
cout<<"Anno pubblicazione"<<b[i].anno<<endl;
cout<<"Titolo brano:"<<b[i].titolo<<endl;
cout<<"Artista del brano:"<<b[i].nomec<<endl;
cout<<"Durata brano:"<<b[i].durata<<endl;
}
}
int cerca(brani b[],int n,float x)
{
int posin,posfin,posmed,pos;
pos=-1;
posin=0;
posfin=n-1;
while(pos<0 && posin<=posfin)
{
posmed=(posin+posfin)/2;
if(x>b[posmed].durata)
posin=posmed+1;
else if(x<b[posmed].durata)
posfin=posmed-1;
else
pos=posmed;
}
return(pos);
}
void elimina(brani b[],int n,int pos)
{
for(int i=pos;i<n-1;i++)
b[i]=b[i+1];
}
void ordina(brani b[],int n)
{
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(b[i].durata<b[i].durata)
swap(b[i],b[j]);
}