Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Cercare e Ordinare elementi di un file [C]

    Salve ragazzi..ho questo problema...non riesco a capire come dato un elemento di una struttura scritto in un file si riesca a ricavare l'altro elemento della stessa struttura e poi come ordinare i termini della struttura secondo un certo ordine:

    questo è il codice da me finora creato..

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 1000

    typedef struct {
            
    int Anno;
            
    int Mese;
            
    int Giorno;
            } 
    Data;
    typedef struct {
            
    int NumInvent;
            
    Data DataArr;
            
    char Cognome[30];
            
    float Costo;
            
    int NumStanza;
            } 
    risorse;
            
    risorse r;
    void AggiungiRisorsa(FILE *fp); /*prototipo*/
    void CercaRisorsa(FILE *p);
    void Ordina(FILE *p);
    int main(int argcchar *argv[])
    {
      
    FILE *fp;
      
    char Risposta;
      
      if((
    fp=fopen("risorse.dat","w+"))==NULL)
      {
                                             
    printf("Il file %s non può essere aperto","risorse.dat");
                                             exit(
    1);
      }
      
    puts("Premi A per inserire una nuova risorsa");
      
    puts("Premi B per sapere in quale stanza è collocata la risorsa scelta");
      
    puts("Premi C per ordinare in termini di costo decrescente le risorse");
      
    puts("Premi D per uscire");
      
    Risposta=getchar();
      switch(
    Risposta)
      {
                       case 
    'A'AggiungiRisorsa(fp)/*chiamata alla funzione*/;
                       break;
                       case 
    'B'CercaRisorsa(fp);
                       break;
                       case 
    'C'Ordina(fp);
                       break;
                       case 
    'D': exit(1);
                       break;
      }                      
      
    system("PAUSE");    
      return 
    0;
    }
    void AggiungiRisorsa(FILE *p/*funzione aggiorna risorsa*/
    {
         
    FILE *a;
         
         if((
    a=fopen("risorse.dat","w+"))==NULL)
         {
                                               
    puts("Errore apertura e scrittura file");
                                               exit(
    1);
         }
         
         
         
    puts("Aggiungi risorsa");
         
    puts("Inserisci il Numero dell'Invertario ");
         
    scanf("%d",r.NumInvent);
         
    puts("Inserisci il cognome del Professore Responsabile del fondo ");
         
    scanf("%s",r.Cognome);
         
    puts("Inserisci il costo ");
         
    scanf("%f",r.Costo);
         
    puts("Inserisci il numero della stanza ");
         
    scanf("%d",r.NumStanza);
         
    puts("Inserisci la data: Anno,Mese,Giorno ");
         
    scanf("%d,%d,%d\n",r.DataArr.Anno,r.DataArr.Mese,r.DataArr.Giorno);
         
         
    puts("Scrittura in corso...");
         if(
    fwrite(&r,sizeof(risorse),1,a)>0)
         
    puts("Scrittura completata con successo");
         else
         
    puts("Errore di scrittura");
     }

    void CercaRisorsa(FILE *p)
    {
         
    FILE *a;
         
         if((
    a=fopen("risorse.dat","w+"))==NULL)
         {
                                               
    puts("Errore apertura e scrittura file");
                                               exit(
    1);
         }
         
         
    puts("Inserisci il numero di inventario");
         
    scanf("%d",r.NumInvent);
         {
         }                                  
         
     }
     
    void Ordina(FILE *p)
    {
     } 
    Attendo...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh ... e io non ho capito qual e' il tuo problema ...

    La tua spiegazione non e' per nulla chiara.

    E non credo di avere il tempo (e la voglia) di studiare tutto il codice per capire qual e' il problema ...

    Forse dovresti essere un momentino piu' chiaro nella spiegazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Scusa...è vero

    Forse questo riuscirà a farti capire:

    La segreteria di un dipartimento universitario deve gestire l’arrivo delle risorse materiali(computer, scrivanie, ecc …) acquistate, da utilizzare nelle strutture del dipartimento stesso. Tutte le risorse vanno inventariate in un file(“risorse.dat”) che deve contenere le seguenti informazioni: numero di inventario, data di arrivo, Professore Responsabile del fondo(cognome), costo, numero di stanza di collocazione. Il massimo di risorse gestibili è 1000.
    Si progetti tramite flow chart strutturato un programma che:
    -permetta l’inserimento di un nuova risorsa in arrivo nel file(anche quando il file è vuoto)
    -consenta di sapere, dato un numero di inventario, in quale stanza è stata collocata la risorsa corrispondente
    -consenta di ordinare in termini di costo decrescente le risorse

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Cosi' va un po' meglio ... e tu non sai fare la parte c) ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    b e c...oddio forse sono stupidi..ma il libro che ho non le fa neanche una volta!

  6. #6
    Niente??

    io per la c) ho provato a fare cosi:

    Codice PHP:
    void Ordina(FILE *p)
    {
         
    FILE *fp;
         
    int n;
         if((
    fp=fopen("risorse.dat","r"))==NULL)
         {
                                               
    puts("Errore apertura e scrittura file");
                                               exit(
    1);
         }
         
         
    n=1000;
         while(
    n>=0)
         {
                             
    fwrite(&r.Costo,sizeof(risorse),n,fp);
                             
    n--;
         }   
         
    fprintf(stdout,"%f",r.Costo);
         
    fclose(fp);                  
     } 

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa, apri il file in lettura e ci scrivi dentro?

    Comunque, dovresti

    1) aprire il file in lettura

    2) leggere in memoria tutti i dati in un vettore di strutture (allocato staticamente con 1000 elementi)

    3) chiudere il file

    4) ordinare i dati del vettore in base al campo "costo" (in modo decrescente, puoi usare un banale bubble sort come algoritmo di ordinamento)

    5) aprire il file in scrittura

    6) scrivere tutti i dati del vettore di strutture ordinato (ovviamente, gli elementi esistenti, non tutti e 1000 ...)

    7) chiudere il file
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ho fatto cosi...sicuramente c'è qualche errore.. lo do già per scontato....

    Codice PHP:
    void Ordina(FILE *p)
    {
         
    FILE *fp;
      
          if((
    fp=fopen("risorse.dat","r"))==NULL/*apro file in lettura*/
         
    {
                                               
    puts("Errore apertura e scrittura file");
                                               exit(
    1);
         }
         
         
    fread(&vettorerisorse,sizeof(risorse),1,fp); /*leggo in memoria i dati del vettore*/
         
    fclose(fp); /*chiudo il file*/
         
    void bubbleSort(int vettorerisorse,int element);/*eseguo il bubblesort del vettore*/
         
    if((fp=fopen("risorse.dat","w"))==NULL/*apro file in scrittura*/
         
    {
                                               
    puts("Errore apertura e scrittura file");
                                               exit(
    1);
         }
         
    fwrite(&vettorerisorse,sizeof(risorse),1,fp);/*scrivo in memoria tutti i dati del vettore*/
         
    fprintf(stdout,"%f",vettorerisorse->Costo);/*stampo a video i dati Costo*/
         
    fclose(fp); /*chiudo il file*/
         
    }

    void bubbleSort(int array[], int element/*procedura BubbleSort*/
    {
         
    int i,tmp;
         
    int alto=MAX/*MAX è uguale a 1000*/
         
         
    while(alto>1)
         {
                       for(
    i=0;i<alto-1;i++)
                       {
                                            if(array[
    i]<array[i+1])
                                            {
                                                                   
    tmp=array[i];
                                                                   array[
    i]=array[i+1];
                                                                   array[
    i+1]=tmp;
                                            }
                       }
                       
    alto--;
         }
     } 
    ho scritto nei commenti i procedimenti che ho fatto

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il primo, evidente, errore e' che leggi solamente un elemento dal file e ne scrivi uno solo ...
    Devi fare una fread per ogni elemento da leggere (puoi usare un ciclo for) e quanti elementi ci sono nel file lo ricavi ottenendo il risultato di

    lunghezza del file / grandezza del singolo elemento
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Originariamente inviato da luanlombardi
    Ho fatto cosi...sicuramente c'è qualche errore.. lo do già per scontato....

    Codice PHP:
         void bubbleSort(int vettorerisorse,int element);/*eseguo il bubblesort del vettore*/ 
    ho scritto nei commenti i procedimenti che ho fatto
    Non esegue un bel nulla, è semplicemente la dichiarazione di una funzione, non la sua invocazione.

    Non aggiungere commenti inutili e forvianti nel codice:
    Ad esempio:
    Codice PHP:
    fclose(fp); /*chiudo il file*/ 
    un commento più preciso potrebbe essere "Tento di chiudere il file, e non controllo l'eventuale codice d'errore restituito", ma in ogni modo sarebbe solo una sintesi di ciò che è già ben descritto nella documentazione della funzione stessa.
    ;-)

    EDIT: piuttosto nell'evenuale commento, dovresti spiegare perché non controlli il codice d'errore restituito.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.