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

					
					
					
						
  Rispondi quotando
