Visualizzazione dei risultati da 1 a 5 su 5

Visualizzazione discussione

  1. #1

    [C++] Ordinamento crescente di un array di struct e ricerca di elemento

    Salve a tutti ho un problema con il mio programma non mi da errori di nessun tipo e non capisco cosa sbaglio nel mio algoritmo.
    L'obiettivo del mio programma come da nome è ordinare il mio array di struct.
    Quest'ultimo composto da un elemento chiave (numerico) e uno descrizione (una stringa allocata dinamicamente).
    Per portare a termine il mio obiettivo devo creare due funzioni che possono prendere solo determinati elementi prestabiliti:
    -La funzione in_listche prende valori: la lista, la dimensione della lista, l'elemento da cercare e la posizione in cui deve stare.
    - la funzione sort_list che prende valori: la lista e la dimensione.

    Solo cheil mio in_list che non capisco perchè se mi mi trova o meno l'elemento e mi stampa posizioni senza senso.

    Invece il mio sort_list non mi parte proprio sembra che non riconosca il richiamo della funzione write_list nella funzione sort_list ho provato ad inserirlo anche nel main dopo sort_list ma il risultato è lo stesso

    Main:

    codice:
    #include "VettStruct_lib.h"
    
    int main(){
        
        List Mylist;
        Element Search_E;
        int size, Search_P;
        
        read_list(Mylist, &size);
        write_list(Mylist, size);
        in_list(Mylist, size, Search_E, Search_P);
        sort_list(Mylist, size);
        
        
    }


    Funzioni gestione Array di Struct:

    codice:
    #include "VettStruct_lib.h"
    
    void read_list(List &L, int *size){
        
        int dim;
        cout<<" Inserisci il numero degli elementi della lista: ";
        cin>>dim;
        cin.ignore();
        for(int i=0; i<dim; i++){
            read_element(L[i]);
            create_element(L[i]);
        }    
        
    *size=dim;
    
    
    }
    
    
    void write_list(List &L,const int size){
            
        cout<<"\n Stampo gli elementi della lista : \n";
        for(int i=0; i<size; i++){
            cout<<(i+1)<<") ";
            write_element(L[i]);
            
        }
        
    }
    
    
    void in_list(List &L,const int size,Element S_E,int position){
        
        int cont;
        bool Eq=false;
        
        read_element(S_E);
        create_element(S_E);
        for(int i=0; i<size; i++){
            
            Eq=equal_element(L[i], S_E);
            if(!Eq){
                cout<<"\n L'elemento  "<<S_E.info<<"   "<<S_E.key;
                cout<<"\n E' presente all'interno della lista nella posizione:  "<<(i+1);
                cont++;
    
    
            }
        }
        
        if(cont==0)cout<<"\n L'elemento non esiste";
    
    
    }
    
    
    
    
    void sort_list(List &L, const int size){
        
        Element E;
        bool Eq=false;
        bool Low=false;
        
        cout<<"\n Ordino la lista in ordine crescente :";
        for(int i=0; i<size; i++){
    
    
            Low=greater_than(L[i],L[i+1]);
            if(!Low){
                swap_list(L[i], L[i+1]);
            }
         
        }
    write_list(L, size);
    }
    
    
    
    
    void swap_list(Element &L1, Element &L2){
        
        Element Temp;
        read_element(Temp);
        
        copy_element(Temp, L1);
        copy_element(L1, L2);
        copy_element(L2, Temp);
    }


    Libreria gestione elementi Array di Struct:

    codice:
    #include "Struct_lib.h"
    
    #define L_DIM 100
    
    
    typedef Element E;
    typedef E List[L_DIM];
    
    
    void read_list(List &, int *);
    void write_list(List &,const int );
    void in_list(List &,const int ,Element ,int );
    void sort_list(List &, const int );
    void swap_list(Element &, Element &);


    Funzioni gestione elementi Struct:


    codice:
    #include "Struct_lib.h"
    
    void read_element(Element &E){
        
        E.info=0;
        E.key=0;
        
    }
    
    
    void create_element(Element &E){
    
    
            String name;
            
            cout<<"\n Iserisci la chiave dell'elemento :";
            cin>>E.key;
            cin.ignore();
            cout<<"\n Iserisci la descrizione dell'elemento :";
            cin.getline(name, N-1, '\n');
            if(E.info) delete[] E.info;
            E.info=new char [strlen(name)+1];
            strcpy(E.info, name);
            
    }
    
    
    void write_element(Element &E){
        
        cout<<E.info<<"  "<<E.key<<endl;
        
    }
    
    
    
    
    bool equal_element(Element &E, Element &Search){
        
        int comparasion;
        
        comparasion=strcmp(E.info, Search.info);
        if((E.key==Search.key)&&(comparasion==0)){
            return true;
        }
        
    }
    
    
    
    
    bool greater_than(Element &E1, Element &E2){
        
        int comparasion;
        
        comparasion=strcmp(E1.info, E2.info);
        if(E1.key>E2.key||comparasion>0)return true;
    
    
    }
    
    
    
    
    void copy_element(Element &E1, Element &E2){
        
        if(strlen(E1.info)!=strlen(E2.info)){
            delete [] E1.info;
            E1.info=new char [strlen(E2.info)+1];
    }
        strcpy(E1.info, E2.info);
        E1.key=E2.key;
    }


    Libreria gestione elementi Struct:

    codice:
    #include <iostream>#include <cstring>
    #include <cstdlib>
    
    
    using namespace std;
    
    
    #define N 100
    
    
    struct Element{
        
        char *info;
        int key;
        
    };
    
    
    typedef char String [N];
    
    
    void read_element(Element &);
    void create_element(Element &);
    void write_element(Element &);
    bool equal_element(Element &, Element &);
    bool greater_than(Element &, Element &);
    void copy_element(Element &, Element &);


    Questo è quello che mi stampa:

    1.png

    2.png

    4.png
    Ultima modifica di TheBlackWolf; 31-07-2018 a 11:33

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.