Cercasi correzioni

di il
3 risposte

Cercasi correzioni

Ragaaaaaa...ho urgente bisogno di correzioni!!
devo consegnare il programma a breve e..help help..
#include <stdio.h>
#include <stdlib.h>
#define RIGHE 5
#define N     15

//definizione di un nuovo tipo
typedef struct {
   char titolo[N];
   char autore[N];
   int prezzo;
} Tabella;

//dichiarazione di variabili globali
Tabella tabella[RIGHE];
int record_inseriti;

//prototipi delle funzioni
void visualizzazione_record();
void ordinamento_bubble_sort_crescente();
void ord_sel_min (Tabella array[],int n);
void inserimento_nuovo_record();


int main()
{
   //dichiarazione di variabili locali per il main
   enum {   
         inserimento,
         ordinamento_descrescente,
         visualizzazione,
         uscita
       } operazione;
   
   
   do {
      //pulisce lo schermo
      system("cls");
     
      printf("Che operazione vuoi eseguire? ");
      printf("\n\t 1. Inserisci nuovo disco");
      printf("\n\t 2. Restituisci disco con prezzo minore");
      printf("\n\t 3. Visualizza tutti dischi");
      printf("\n\t 4. Esci\n\t ");
     
      scanf("%d", &operazione);
      //scarta il carattere di a capo
      getchar();
     
      switch(--operazione) {
         case inserimento:
            inserimento_nuovo_record();
            break;
         case ordinamento_descrescente:
            ord_sel_min ();
            printf("\nIl vettore e' stato ordinato secondo oridinamento decrescente dei dischi");
            break;
         case visualizzazione:
            visualizzazione_record();
            break;
         case uscita:
            break;
         default:
            printf("\nHai effettuato una scelta non valida");
      }
     
      if(operazione != uscita) {
         printf("\n\nPremi INVIO per continuare.");
         getchar();
      }

   } while(operazione != uscita);
   
   printf("\nPremi INVIO per uscire.");
   getchar();
   return 0;
}


//definizione della funzione di visualizzazione dei record
void visualizzazione_record()
{
   int i;
   
   if(!record_inseriti) {
      printf("\nNon sono presenti record all'interno della tabella.");
      return;
   }
   
   printf("\n%-15s %-15s %6s", "Titolo", "Autore", "Prezzo");
   for(i = 0; i < record_inseriti; i++) {
      printf("\n%-15s %-15s %6d", tabella[i].titolo, tabella[i].autore, tabella[i].prezzo);
   }
}


//definizione della funzione di ordinamento attraverso algoritmo del selection sort
void ord_sel_min (Tabella array[],int n)
{
     int i, indice_min;
     double min_array;
     for(i=0;i<n-1;i++)
     {
         min_val_ind(&array[i].prezzo, n-i, &min_array, &indice_min);
         scambiare_c(&array[i].prezzo, &array[indice_min+i].prezzo);
     }
}
void min_val_ind (Tabella a[], int n, double *min_array, int *i_min)
{
     int i;
     *min_array = a[0].prezzo;
     *i_min = 0;
     for (i=1;i<n;i++)
     if( *min_array > a[i].prezzo)
      {
             *min_array = a[i].prezzo;
             *i_min =i;
      }
}

void scambiare_c(char*c1,char *c2)
{
   char temp;
   temp=*c1;
   *c1 =*c2;
   *c2 =temp;
}

//definizione della funzione di inserimento di un nuovo record
void inserimento_nuovo_record()
{
   if(record_inseriti == RIGHE) {
      printf("Hai inserito il numero massimo di dischi all'interno della tabella.");
      return;
   }
   
   printf("\nInserisci il titolo del disco: ");
   gets(tabella[record_inseriti].titolo);
   printf("Inserisci il nome dell'autore: ");
   gets(tabella[record_inseriti].autore);
   printf("Inserisci il prezzo: ");
   scanf("%d", &tabella[record_inseriti].prezzo);
   getchar();
   printf("\nIl disco e' stato inserito con successo.");
   
   
   record_inseriti++;
} 

3 Risposte

  • Re: Cercasi correzioni

    Se vuoi ordinare gli array di struct per il prezzo... presto fatto:
    
    void disco_swap (int x,int y)
    {
      size_t size=sizeof(Tabella);
      Tabella tmp;
      
      memcpy (&tmp,&tabella[x],size);
      memcpy (&tabella[x],&tabella[y],size);
      memcpy (&tabella[y],&tmp,size);
    }
    
    void disco_order_by ()
    {
      int n=record_inseriti;
      int i;
    
      while (n)
      {
        for (i=0;i<n-1;i++)
          if (tabella[i].prezzo>tabella[i+1].prezzo)
            disco_swap (i,i+1);
          
        n--;
      }
    }
    
    
    Saluti,
    Max
  • Re: Cercasi correzioni

    Non lo devo ordinare,devo ricevere in output l'oggetto con prezzo minore..come faccio??
  • Re: Cercasi correzioni

    *Crea una funzione e chiamala come vuoi.
    * definisci le variabili
    int best_price - conterrà il miglior prezzo (sarà in lire... vistro che non è definito float nella tua struct)
    int index_bestprice - conterrà l'indice dell'array con il minor prezzo
    int i - la tua variabile di giro
    * verifica se non ci sono tabelle inserite esci
    * imposta best_price al prezzo dell'elemento zero e index_bestprice uguale a zero
    * cicla per i ... da 1 a record_inseriti
    * nel ciclo testa se best_price > tabella.prezzo - se vero assegna best_price=tabella.prezzo e index_bestprice = i
    * dopo il ciclo visualizza gli elementi dell'indice index_bestprice

    Più o meno è quello che fai nella visualizzazione.


    Saluti,
    Max
Devi accedere o registrarti per scrivere nel forum
3 risposte