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