The-Revenge
09-12-2009, 18:28
Ciao ragazzi, allora ho fatto questo semplice programmino in C usando struct, puntatori e funzioni, per esercitarmi. Il programm richiede i'inseirmento di 4 struct libri manualmente, che hanno alcune propietà, e di vedere quale di questi costa di più e poi stampare il nome del libro.
Bene, funziona tutto (come andrete a notare nel programma ho anche stampato una variabile temproanea max per vedere se il risultato era giusto) ma non mi stampa il titolo del libro che costa di più. Potete vedere perchè? inizialmente il costo era in float, poi pensavo che ci fosse qualche errore nella comparazione, dato che non so perchè quando inserivo il float mi aggiungeva sempre un numero casuale dopo tutti gli 0, e fare un cast del float a sole 2 cifre decimali mi dava un errore.
Comuqnue ecco il codice :
#include<stdio.h>
#include<stdlib.h>
struct libro {
char *titolo;
char *autore;
char *editore;
int anno;
int ISBN;
int prezzo;
};
void inserimento_libro(struct libro *,int);
void calcolo_prezzi(struct libro *,struct libro *,struct libro *,struct libro *);
void cambia(int *,int *);
int main(){
struct libro L1,L2,L3,L4;
struct libro *pl1,*pl2,*pl3,*pl4;
pl1=&L1;
pl2=&L2;
pl3=&L3;
pl4=&L4;
inserimento_libro(pl1,1);
inserimento_libro(pl2,2);
inserimento_libro(pl3,3);
inserimento_libro(pl4,4);
calcolo_prezzi(pl1,pl2,pl3,pl4); //calcolare max prezzo, min prezzo, media prezzo, titolo caratteri maggiori.
printf("\n\n");
system("PAUSE");
return(0);
}
//funzione che richiedere l'inserimento dei valori dei 4 libri
void inserimento_libro(struct libro *a,int b){
printf("\nInserisci titolo libro %d : ",b);
scanf("%s",&a->titolo);
printf("\nInserisci autore libro %d : ",b);
scanf("%s",&a->autore);
printf("\nInserisci editore libro %d : ",b);
scanf("%s",&a->editore);
printf("\nInserisci anno di edizione libro %d : ",b);
scanf("%d",&a->anno);
printf("\nInserisci codice ISBN libro %d : ",b);
scanf("%d",&a->ISBN);
printf("\nInserisci prezzo %d libro : ",b);
scanf("%d",&a->prezzo);
printf("\n\n");
}
void calcolo_prezzi(struct libro *a,struct libro *b,struct libro *c,struct libro *d){
int prezzi[4]={a->prezzo,b->prezzo,c->prezzo,d->prezzo};
int *pprezzi;
pprezzi=prezzi;
int max;
max=prezzi[0];
for(int i=1;i<4;i++)
if(prezzi[i]>max)cambia(pprezzi+i,&max);
printf("%d",max);
printf("\nIl libro piu' costoso e' : ");
if(max==prezzi[0])printf("%s",a->titolo);
if(max==prezzi[1])printf("%s",b->titolo);
if(max==prezzi[2])printf("%s",c->titolo);
if(max==prezzi[3])printf("%s",d->titolo);
}
void cambia(int *a,int *b){
int temp;
temp= *a;
*a= *b;
*b=temp;
}
Bene, funziona tutto (come andrete a notare nel programma ho anche stampato una variabile temproanea max per vedere se il risultato era giusto) ma non mi stampa il titolo del libro che costa di più. Potete vedere perchè? inizialmente il costo era in float, poi pensavo che ci fosse qualche errore nella comparazione, dato che non so perchè quando inserivo il float mi aggiungeva sempre un numero casuale dopo tutti gli 0, e fare un cast del float a sole 2 cifre decimali mi dava un errore.
Comuqnue ecco il codice :
#include<stdio.h>
#include<stdlib.h>
struct libro {
char *titolo;
char *autore;
char *editore;
int anno;
int ISBN;
int prezzo;
};
void inserimento_libro(struct libro *,int);
void calcolo_prezzi(struct libro *,struct libro *,struct libro *,struct libro *);
void cambia(int *,int *);
int main(){
struct libro L1,L2,L3,L4;
struct libro *pl1,*pl2,*pl3,*pl4;
pl1=&L1;
pl2=&L2;
pl3=&L3;
pl4=&L4;
inserimento_libro(pl1,1);
inserimento_libro(pl2,2);
inserimento_libro(pl3,3);
inserimento_libro(pl4,4);
calcolo_prezzi(pl1,pl2,pl3,pl4); //calcolare max prezzo, min prezzo, media prezzo, titolo caratteri maggiori.
printf("\n\n");
system("PAUSE");
return(0);
}
//funzione che richiedere l'inserimento dei valori dei 4 libri
void inserimento_libro(struct libro *a,int b){
printf("\nInserisci titolo libro %d : ",b);
scanf("%s",&a->titolo);
printf("\nInserisci autore libro %d : ",b);
scanf("%s",&a->autore);
printf("\nInserisci editore libro %d : ",b);
scanf("%s",&a->editore);
printf("\nInserisci anno di edizione libro %d : ",b);
scanf("%d",&a->anno);
printf("\nInserisci codice ISBN libro %d : ",b);
scanf("%d",&a->ISBN);
printf("\nInserisci prezzo %d libro : ",b);
scanf("%d",&a->prezzo);
printf("\n\n");
}
void calcolo_prezzi(struct libro *a,struct libro *b,struct libro *c,struct libro *d){
int prezzi[4]={a->prezzo,b->prezzo,c->prezzo,d->prezzo};
int *pprezzi;
pprezzi=prezzi;
int max;
max=prezzi[0];
for(int i=1;i<4;i++)
if(prezzi[i]>max)cambia(pprezzi+i,&max);
printf("%d",max);
printf("\nIl libro piu' costoso e' : ");
if(max==prezzi[0])printf("%s",a->titolo);
if(max==prezzi[1])printf("%s",b->titolo);
if(max==prezzi[2])printf("%s",c->titolo);
if(max==prezzi[3])printf("%s",d->titolo);
}
void cambia(int *a,int *b){
int temp;
temp= *a;
*a= *b;
*b=temp;
}