Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve ragazzi ho un problema con questo progetto e vi supplico per un aiuto
l'intestazione è:
Si vuole simulare la gestione automatizzata di una biblioteca. Si suppone di avere un archivio di massimo 100 libri identificati da un titolo, nome dell’autore o autori massimo 5, da un codice identificativo e da un prezzo di prestito. Un libro può essere presente nell’archivio o in prestito.
Permettere all’utente di:
• Inserire un nuovo libro nell’archivio (automaticamente gli viene assegnato un codice).
• Richiedere un libro tramite il codice (verificare se esso è presente o non è in prestito).
• Cercare nell’archivio il libro più costoso (usare un approccio divide-etimpera) Implementare l’algoritmo per la simulazione della biblioteca ed effettuare almeno un test per ognuna delle opzioni richieste dall’utente.
Beh, non hai fatto quasi nulla... Mi sa che è una richiesta fuori luogo.
Parti dal primo punto da risolvere, tenta di affrontarlo e poni qui i tuoi dubbi, ma solo su quel primo punto...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
printf("Premere:\n 1. Per inserire un nuovo libro;\n 2. Per richiedere libro tramite titolo;\n 3. Per richiedere un libro tramite codice;\n 4. Per restituire un libro;\n 5. Per cercare libro piu costoso;\n 0. Per uscire.\n");
scanf("%d",&var);/*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
switch(var)/* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
case1:/* Se l'utente preme tasto 1 si attiva questo case per inserire un nuovo libro nell'archivio */
i=0;
max=0;
for(i=0;i<19;i++)
{
if(libreria[i].codice_identificativo>max){
max=libreria[i].codice_identificativo;}
}
printf("Inserire titolo del libro:\n ");
scanf("%s",&libreria[max+1].titolo);
printf("Inserire nome dell'autore:\n");
scanf("%d",&libreria[max+1].nome_autori);
printf("Inserire 1 se il libro e' disponibile oppure 0 se e' in prestito:\n");
scanf("%d",&libreria[max+1].status);
libreria[max+1].codice_identificativo=max+1;
printf("Grazie!! Il libro e' stato inserito nell'archivio correttamente\n");
break;
case2:/* Se l'utente preme il tasto 2 vuole richjedere un libro tramite il titolo*/
i=0;
printf("Inserire il titolo del libro da richiedere:\n");
printf("\n\nIl libro col prezzo massimo e': %s", libreria[maxi].titolo);
return0;break;
case 0 :
printf("Hai deciso di uscire dalla libreria!! Ciao!!\n");break;
default:printf("Inserimento Errato\nRiprovare: \n:");break;/*Se l'utente sbaglia ad inserire il numero*/
}/* Fine switch */
}/* Fine do */
while(var>5);
system("Pause");
}
Ci sono alcune cose che non tornano le scelte me le fa fare ma c'e sempre qualcosa che non funziona :
quando scelgo
1 se metto come nome del libro una singola parola mi fa passare alla seconda scelta ma quando metto il nome autore mi fa passare direttamente alla fine.
2 quando metto il nome del libro vale la stessa cosa se e di una singola parola mi accetta la soluzione ma il libro e sempre in prestito , se metto un nome composto da piu parole non e mai presente nella libreria.
3 quando metto il codice per il libro dice sempre che non e presente
4 stessa cosa non posso restituire un libro perche dice sempre che non esiste quel codice
5 mi porta il signiore degli anelli come piu costoso ma dubito anche di questo ora
0 l'unica cosa che funziona ......
Ultima modifica effettuata da roccop9 il 29/01/2016 alle 21:10
Il programma, così come l'hai scritto, ha vari problemi, ed il codice è praticamente illeggibile (non ti hanno spiegato l'importanza dell'indentazione?)... ma andiamo con ordine: intanto rispondo alle tue domande.
Testo quotato
Postato originariamente da roccop9: 1 se metto come nome del libro una singola parola mi fa passare alla seconda scelta ma quando metto il nome autore mi fa passare direttamente alla fine.
2 quando metto il nome del libro vale la stessa cosa se e di una singola parola mi accetta la soluzione ma il libro e sempre in prestito , se metto un nome composto da piu parole non e mai presente nella libreria.
3 quando metto il codice per il libro dice sempre che non e presente
4 stessa cosa non posso restituire un libro perche dice sempre che non esiste quel codice
5 mi porta il signiore degli anelli come piu costoso ma dubito anche di questo ora
0 l'unica cosa che funziona ......
1 - Questo avviene a causa del funzionamento della funzione scanf: quando tu le chiedi di leggere una stringa, la funzione di fatto legge tutti i caratteri fino al primo "carattere speciale" (un newline, uno spazio, un TAB...), e quindi finisce per leggerti solo la prima parola; in seguito, le successive scanf trovano nello stream le altre parole scritte prima, e prendono quelle invece di chiederti ulteriori inserimenti.
Per leggere un intero titolo (o, in generale, qualsiasi stringa di lunghezza massima nota e composta da più parole), una funzione più adatta sarebbe gets ( http://www.cplusplus.com/reference/cstdio/gets/ ), la quale legge tutti i caratteri nell'input stream finchè non trova un carattere di newline.
2 - Idem come al punto 1
3 - Intanto, l'istruzione
Codice sorgente - presumibilmente Plain Text
libreria[i].status==0;
non ha senso... o almeno, un senso ce l'ha, ma sicuramente non è quello che volevi dargli tu: l'assegnamento si fa usando l'operatore "=", non "==" (che è un operatore di confronto). Quindi, avresti dovuto scrivere
Codice sorgente - presumibilmente Plain Text
libreria[i].status=0;
.
Ancora: tu non hai, evidentemente, la minima idea di come si inizializzino i valori di una matrice: se tu scrivi una cosa del genere:
Codice sorgente - presumibilmente Plain Text
{"Il signore degli anelli","James Redfield","Silvestrone",5,1,1},
Nella matrice degli autori ci stai mettendo solo "James Redfield", perchè il secondo nome è stato scritto come se fosse il campo successivo della struct. Il modo corretto di scrivere quest'istruzione è:
Codice sorgente - presumibilmente Plain Text
{"Il signore degli anelli",{"James Redfield","Silvestrone"},5,1,1},
Con le parentesi graffe a delimitare i valori inseriti nella matrice.
4 - Idem come il punto 3.
5 - Dai dati che hai scritto, pare che riporti il risultato corretto.
Bene... detto questo, un paio di domande voglio fartele io:
1 - Che formazione hai, in materia di programmazione? Sei autodidatta (e se si, da quanto), la studi a scuola o all'università, hai seguito un corso?
2 - Hai mai letto una sola pagina di un libro di programmazione decente? Nel tuo codice (lasciando stare la questione "stilistica", che si commenta da sola) ci sono scritture allucinanti!
Già che ci sono, ne approfitto per farti notare una cosa: non ha senso scrivere:
Codice sorgente - presumibilmente C/C++
while(flag!=0 && i<19)
{
if(...)
{
if(quello_che_deve_succedere)
{
flag = 0;
...
}
}
else
{
i=i+1;
}
}
Quando puoi benissimo scrivere:
Codice sorgente - presumibilmente C/C++
for(i = 0; i < 19; i++)
{
if(...)
{
...
if (quello_che_deve_succedere)
break; /*Che sortisce lo stesso effetto di tutto quel casino con il flag*/
}
}
O, se proprio ti piace il flag:
Codice sorgente - presumibilmente C/C++
for(i = 0; i < 19, flag != 0; i++)
{
if(...)
{
...
if (quello_che_deve_succedere)
{
flag = 0;
...
}
}
}
Ah, e un'ultima cosa: main() è una funzione di tipo int, quindi DEVE RITORNARE UN VALORE. Deve finire così:
Codice sorgente - presumibilmente C/C++
int main()
{
...
system("Pause");
return UN_NUMERO;
}
Non così:
Codice sorgente - presumibilmente C/C++
int main()
{
...
system("Pause");
}
Ultima modifica effettuata da Template il 30/01/2016 alle 16:00
Un corso universitario non si passa così. Non troverai nessuno che ti fa il compito per te in questo forum, possiamo spiegarti i concetti e aiutarti a scrivere la soluzione, ma se non hai le basi del linguaggio per capire cosa ti stiamo spiegando, stiamo tutti sprecando tempo.
Ultima modifica effettuata da pierotofy il 30/01/2016 alle 16:14