Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    2

    [C++]Aiuto correzione esercizio

    Salve a tutti,sono nuovo nel forum e vorrei chiedere il vostro aiuto nella risoluzione di un esercizio, in realtà l'ho risolto tutto, solo che non funziona come dovrebbe...la traccia è questa:

    Si scriva un programma che definisca e utilizzi la struttura dati piii adatta per gestire un elenco di cartelle mediche, in cui il generico elemento deve contenere le seguenti informazioni:
    numero di codice del paziente (valore di tipo intero)
    cognome del paziente
    nome del paziente
    reparto di appartenenza ("oculistica", "pediatria", "ortopedia", "medicina")
    Il programma deve prevedere inizialmente la lettura dell'elenco con tutti i dati per un numero N di pazienti specificato dall'utente. Al termine, il programma deve ordinare l'elenco per numero di codice crescente e stampare l'elenco cosi ordinato; deve quindi prevedere la lettura dei dati di K pazienti (con K sempre specificato dall'utente) che andranno inseriti via via che sono inseriti in ingresso, assicurando che si mantenga l'ordinamento dell'elenco. Il programma deve infine stampare l'elenco complessivo, fornendo in output le iniziali del cognome e del nome del paziente, il numero di codice ed il reparto.

    ecco il codice:
    header file:
    codice:
    #ifndef      STRUTTURA_H 
    #define	STRUTTURA_H  
    struct elenco{    
     int num;     
    char cognome[100];     
    char nome[100];     
    char reparto[100]; };  
    #endif
    funzioni:
    codice:
    #include <cstdlib> 
    #include <iostream> 
    #include <cstring>
    #include "struttura.h" 
    
    using namespace std;  
    
    void inserimento(elenco n1[],int n){     
    for(int i=0;i<n;i++){         
    cout<<"Elenco N."<<i+1<<endl;        
     cout<<"Numero del paziente: ";cin>>n1[i].num;       
      cout<<"Cognome: ";cin.ignore();cin.getline(n1[i].cognome,100);         
    cout<<"Nome: ";cin.getline(n1[i].nome,100);        
     cout<<"Reparto: ";cin.getline(n1[i].reparto,100);         
    cout<<endl;     } } 
     
    void stampa(elenco n1[],int n){    
     for(int i=0;i<n;i++){         
    cout<<"Elenco N."<<i+1<<endl;       
      cout<<endl<<"Numero del paziente: "<<n1[i].num;       
      cout<<endl<<"Cognome: "<<n1[i].cognome;       
      cout<<endl<<"Nome: "<<n1[i].nome;         
    cout<<endl<<"Reparto: "<<n1[i].reparto<<endl; } } 
    
    void ordina(elenco n1[], int n){    
     int min, posmin;    
     for (int i=0; i<n-1; i++){        
     min=n1[i].num;       
      posmin=i;        
     for (int k=i+1; k<n; k++){    
                 if (n1[k].num<min){ 
                     min=n1[k].num;  
                     posmin=k;             
                     if (posmin!=i)                  
               swap(n1[i].num,n1[posmin].num);}}}} 
    void inserimento2(elenco n2){     
    cout<<"numero: "; cin>>n2.num;     
    cout<<"cognome: ";cin>>n2.cognome;     
    cout<<"nome: ";cin>>n2.nome;     
    cout<<"reparto: ";cin>>n2.reparto; } 
    
    void ordina2(elenco n1[],int n, elenco n2){    
     for(int i=0; i<n; i++){        
     if (n2.num>n1[i].num && n2.num<n1[i+1].num){            
     for (int k=i+1; k<n; k++){                
     n1[k+1]=n1[k];                
     n1[i]=n2;}         }     }   
         if (n2.num<=n1[0].num){         
    for (int k=0; k<n; k++)               
      n1[k+1]=n1[k];                 
    n1[0]=n2;}
          else if (n2.num>=n1[n].num)           
      n1[n+1]=n2; 
         return; } 
    
    void stampa2(elenco n1[],int n){     
    for(int i=0;i<n;i++){         
    cout<<"Elenco N."<<i+1<<endl;        
     cout<<endl<<"Numero del paziente: "<<n1[i].num;         
    cout<<endl<<"Cognome: "<<n1[i].cognome[0];         
    cout<<endl<<"Nome: "<<n1[i].nome[0];        
     cout<<endl<<"Reparto: "<<n1[i].reparto<<endl;}}
    nel main:
    codice:
    int main(int argc, char** argv) {     
    elenco *n1;     
    elenco n2;     
    int n,k;     
    cout<<"Inserire numero pazienti: ";cin>>n;     
    cout<<"Inserire nuovo elenco pazienti: ";cin>>k;     
    n1=new elenco[n+k];    
     inserimento(n1,n);    
     ordina(n1,n);     
    stampa(n1,n);          
    for(int i=0;i<k;i++){         
    cout<<"paziente N."<<i+1<<endl;          
    inserimento2(n2);         
    ordina(n1,n);}     
    stampa2(n1,n+k);    
     return 0; }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481

    Re: [C++]Aiuto correzione esercizio

    Originariamente inviato da meever
    ... non funziona come dovrebbe...
    Devi dare maggiori indicazioni su cosa non va ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    2
    hai ragione..rimedio subito...allora i programma viene compilato correttamente, la richiesta di dati e il conseguente inserimento degli stessi funziona senza problemi, l'elenco viene stampato e ordinato solo per quanto riguarda il numero di codice in modo crescente per numero di codice, poichè il resto dati rimane uguale...non so come spiegarvi......ed qui che inizia il problema, poichè a quanto sembra ho commesso qualche errore nell'algoritmo per inserire un nuovo elenco in modo ordinato nell'elenco già presente...se per esempio chiedo di farmi inserire 3 elenchi accade ciò: inserisco i primi due stampo l'elenco degli stessi correttamente ordinati, inserisco il terzo elemento, dovrebbe essere inserito gia in moto ordinata, ma il programma mi stampa l'elenco che era stato ordinato prima e alla fine un elenco senza dati...vi posto uno screen, che sicuramente spiega meglio di me...

    http://imageshack.us/f/560/cattura12.jpg/

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 © 2025 vBulletin Solutions, Inc. All rights reserved.