PDA

View Full Version : [C]Problema record e tabelle


Master94ga
21-09-2011, 18:01
Il programma è questo:
/*Scrivere un programmam che consenta di caricare un elenco di massimo 30 libri, ciascuno caratterizzato dai campi:
-Titolo
-Autore
-Prezzo
Scrivere una funziona che trovi il libro di prezzo maggiore*/

#include <stdio.h>
#include <conio.h>

typedef struct tlibri
{
char titolo [20];
char autore [30];
float prezzo [10];
};

tlibri libroprezmax;
tlibri elencolibri [100];

void prezzomax (tlibri libroprezmax, int n);

main ()
{
int n,i;
printf("Inserisci il numero dei libri: ");
scanf("%d", &n);

for(i=0;i<n;i++)
{
printf("Inserisci il titolo del libro: ");
scanf("%s", elencolibri [i].titolo);
printf("Inserisci l'autore del libro: ");
scanf("%s", elencolibri [i].autore);
printf("Inserisci il prezzo del libro: ");
scanf("%f", elencolibri [i].prezzo);
prezzomax(libroprezmax,n);
}
getch();
}

void prezzomax (tlibri libroprezmax, int n)
{
Io non so come fare la funzione che trovi e stampi il libro con prezzo maggiore, consigli?

simo8
21-09-2011, 18:26
la prima volta considera come prezzo massimo il primo libro e lo salvi in una variabile dopodichè controlli il prezzo sucessivo con quello che avevi salvato precendentemente , se è maggiore cambi il libro dal prezzo massimo altrimenti non fai niente .

Master94ga
21-09-2011, 18:52
Ho risolto, ho cambiato tante cose:

/*Scrivere un programmam che consenta di caricare un elenco di massimo 30 libri, ciascuno caratterizzato dai campi:
-Titolo
-Autore
-Prezzo
Scrivere una funziona che trovi il libro di prezzo maggiore*/

#include <stdio.h>
#include <conio.h>

typedef struct tlibri
{
char titolo[20];
char autore[30];
float prezzo;
};



int prezzomax( tlibri elencolibri[] , int n );

main ()
{
int n,i,imax;
tlibri elencolibri[30];
printf("Inserisci il numero dei libri: ");
scanf("%d", &n);

for(i=0;i<n;i++)
{
printf("Inserisci il titolo del libro: ");
scanf("%s", &elencolibri[i].titolo);
printf("Inserisci l'autore del libro: ");
scanf("%s", &elencolibri[i].autore);
printf("Inserisci il prezzo del libro: ");
scanf("%f", &elencolibri[i].prezzo);
}
imax= prezzomax( elencolibri, n );
printf("Il libro con prezzo piu' alto e' :%s", elencolibri[imax].titolo);
getch();
}

int prezzomax( tlibri elencolibri[] , int n )
{
int I,imax;
float ap;
ap=elencolibri[0].prezzo;
for(I=1;I<n;I++)
{
if(elencolibri[I].prezzo>ap)
imax=I;

return imax;
}
}

simo8
21-09-2011, 20:44
l'unica cosa è che non fai nessun controllo per assicurarti che il numero n di libri sia effettivamente minore di 30 .

Floris
21-09-2011, 21:11
Sicuro che la funzione prezzomax sia corretta?
Io la porrei così:

int prezzomax( tlibri elencolibri[] , int n )
{
int I,imax;
float ap;
ap=elencolibri[0].prezzo;
imax = 0;
for(I=1;I<n;I++)
{
if(elencolibri.prezzo>ap)
{
ap = elencolibri[[I]I].prezzo;
imax=I;
}
}
return imax;
}

Poi potresti renderla più snella:

int prezzomax( tlibri elencolibri[] , int n )
{
int imax = 0;
for(int i=1;i<n;i++)
{
if(elencolibri[i].prezzo>elencolibri[imax].prezzo)
imax=i;
}
return imax;
}

Poichè basta che ti ricordi l'indice e non anche il valore massimo.