Mi aiutate a risolvere questo?

di il
3 risposte

Mi aiutate a risolvere questo?

Ciao, mi sapreste dire perché alla fine non mi visualizza i cicli for con i libri ordinati per costo pagina? E mi da i valori del costo pagina sballati?

#include <stdio.h>
#include <stdlib.h>

/*
   Es3. Si crei la struttura libro, in cui ogni libro ha un codice numerico (numero intero) che lo caratterizza,
   un numero di pagine e un costo. Si memorizzino i dati di tre libri e si calcoli il costo medio per pagina dei libri
   e si stampino i dati dei tre libri in ordine crescente di costo per pagina.
*/


struct libro {
   int na;
   int pa;
   float co;
};

void ordinamento(int vett[]);

int main()
{
   struct libro l1;
   struct libro l2;
   struct libro l3;
   float vett[3];
   printf("Libro 1 - - -\n");
   printf("Iserisci codice numerico: ");
   scanf("%d",&l1.na);
   printf("Iserisci numero pagine: ");
   scanf("%d",&l1.pa);
   printf("Iserisci costo: ");
   scanf("%f",&l1.co);

   printf("Libro 2 - - -\n");
   printf("Iserisci codice numerico: ");
   scanf("%d",&l2.na);
   printf("Iserisci numero pagine: ");
   scanf("%d",&l2.pa);
   printf("Iserisci costo: ");
   scanf("%f",&l2.co);

   printf("Libro 3 - - -\n");
   printf("Iserisci codice numerico: ");
   scanf("%d",&l3.na);
   printf("Iserisci numero pagine: ");
   scanf("%d",&l3.pa);
   printf("Iserisci costo: ");
   scanf("%f",&l3.co);
   vett[0] = l1.pa/l1.co;
   vett[1] = l2.pa/l2.co;
   vett[2] = l3.pa/l3.co;

   printf("\nIl consto medio del libro 1 per paggina e' di: %f",vett[0]);
   printf("\nIl consto medio del libro 2 per paggina e' di: %f",vett[1]);
   printf("\nIl consto medio del libro 3 per paggina e' di: %f",vett[2]);

   ordinamento(vett);

   int i,j;
   for(i = 0; i < 3; i++) {
       if(vett[i] == l1.pa/l1.co){
           printf("\nI libri ordinati per costo pagina:");
           printf("\ncodice numerico: %d", l1.na);
           printf("\nnumero pagine: %d", l1.pa);
           printf("\ncosto: %d", l1.co);
           printf("\ncosto per pagina %d", vett[i]);
       }

   }
   for(i = 0; i < 3; i++) {
       if(vett[i] == l2.pa/l2.co){
           printf("\nI libri ordinati per costo pagina:");
           printf("\ncodice numerico: %d", l2.na);
           printf("\nnumero pagine: %d", l2.pa);
           printf("\ncosto: %d", l2.co);
           printf("\ncosto per pagina %d", vett[i]);
       }

   }
   for(i = 0; i < 3; i++) {
       if(vett[i] == l3.pa/l3.co){
           printf("\nI libri ordinati per costo pagina:");
           printf("\ncodice numerico: %d", l3.na);
           printf("\nnumero pagine: %d", l3.pa);
           printf("\ncosto: %d", l3.co);
           printf("\ncosto per pagina %d", vett[i]);
       }

   }


   printf("\n");
   system("PAUSE");
   return 0;
}

void ordinamento(int vett[]) {
   int i, j;
   int lunghezza = 3;
   int tmp;
   for (i = 0; i < lunghezza - 1; i++){

       for (j = 0; j < lunghezza - i - 1; j++) {
           if (vett[j] > vett[j + 1]) {
               tmp = vett[j];
               vett[j] = vett[j + 1];
               vett[j + 1] = tmp;
           }
       }
   }
}

3 Risposte

  • Re: Mi aiutate a risolvere questo?

    Prima di postare in un forum dovresti leggere e rispettare il regolamento. 

    Il titolo del thread non ha senso (dovrebbe riassumere il problema) e il codice va formattato utilizzando il tasto <> dell'editor.

    Non si capisce perché non usi un vettore di struct per i dati e per l'ordinamento. Così è ovviamente sbagliato e comunque non dovresti fare tre cicli finali ma uno solo con le tre if all'interno.   

  • Re: Mi aiutate a risolvere questo?

    Si scusa infatti avevo fatto in fretta e non avevo letto il regolamento.

    Grazie ora provo a farlo con un vettore e solo un ciclo.

  • Re: Mi aiutate a risolvere questo?

    Oltre a implementare il consiglio tecnico di @oregon, implementa anche quanto ti ha scritto in merito al titolo della discussione e formattazione. Devi andare in modifica sul primo post per farlo.

Devi accedere o registrarti per scrivere nel forum
3 risposte