Allora, sono riuscito ad eliminare completamente tutti gli errori dal terminale !
Tuttavia ho un problema. In fase di riscontro ( cioè, quando effettivamente la funzione va a verificare se il numero è presente nell'insieme, anche se questo non è effettivamente presente, il programma mi dice che lo è). Molto probabilmente è un errore stupido, ma non riesco letteralmente a capire come...
Vi lascio le source, se qualcuhe buon anima ha voglia di darmi una mano!
main.c
#include <stdio.h>
#include <stdlib.h>
#include "mylib.h"
int main ()
{ /*start main*/
/*dichiarazione variabili */
int i;
double num_real;
int d=5; /*questa variabile è utilizzata in fase di dubug per verificare che i numeri in "returtn(vettore);" siano inviati correttamente*/
char c;
struct insieme vettore;
/* fine dichiarazione variabili */
/* creazione del menu' */
printf("\nSeleziona una delle seguenti funzioni:\n1)Restituzione di un insieme di numeri reali inseriti da tastiera\n2)Stampa a video un insieme di numeri reali\n3)Determina ricorsivamente se un numero appartiene all'insieme\n4)Determina ricorsivamente se il primo insieme e' contenuto nel secondo\n5)Esegue l'unione di due insiemi\nInserisci il numero della funzione desiderata:");
c = getchar (); /*prendiamo in input la selezione */
switch(c)
{ /*apertura switch */
case '1':
/* collegamento alla funzione esterna type: 1 */
vettore=function1();
/*visualizzare numero elementi caricati per verificare il return */
printf("il vettore è stato caricato correttamente, numero di elementi: %d\n", vettore.d);
break;
case '2':
/*collegamento alla funzione esterna type: 2 */
vettore=function1(); /*caricamento array e collegamento alla funzione 1 */
/*stampa a video */
function2(vettore);
break;
case'3':
/*input numero reale*/
printf("Inserisci un numero reale: ");
scanf("%lf", &vettore.numero_reale);
/*caricamento array tramite la funzione 1 */
vettore=function1();
/*caricamento del numero reale */
vettore=function3(vettore);
/*facciamo un if in base al risultato di trovato */
if(vettore.trovato=0)
printf("il numero è presente nell'insieme\n");
else
printf("Il numero non è presente nell'insieme\n");
break;
case'4':
break;
} /*chiusura switch */
} /* chiusura main */
mylib.h
#ifndef MYLIB_H /* se la lib non e' definita, la definiamo noi con il comando seguente */
#define MYLIB_H /* definizione di mylib (h) */
/*==========================================================================*/
struct insieme {
double *vettore;
int d;
double numero_reale;
int trovato;
};
extern struct insieme function1(); /* passaggio parametri per indirizzo */
extern void function2(struct insieme x);
extern struct insieme function3();
#endif
mylib.c
/* inclusione delle librerie */
#include <stdio.h>
#include <stdlib.h>
#include "mylib.h"
/*===============================================================================================*/
/*Funzione libreria: carica un vettore 1 */
struct insieme function1()
{ /*apertura prima funzione*/
/* dichiarazione variabili locali */
int i;
struct insieme x;
printf("Quanti numeri vuoi inserire?: "); /*Prendi in input la dimensione del vettore*/
scanf("%d",&x.d); /*Input variabile d */
x.vettore = (double*)malloc(sizeof(double) * x.d); /*allocazione spazio di memoria. In particolare ora abbiamo un vettore di d elementi*/
printf("la dimensione del vettore e' attualmente --> %d\n", x.d); /*printf di controllo in fase debug */
/*ciclo per prendere in input tutti i valori richiesti */
for(i=0;
i<x.d;
i++)
{
printf("Dammi un valore da salvare:\n");
scanf("%lf",&x.vettore[i]); /*inizializzazione del vettore con elementi in input*/
}
return(x);/*return della struttura alla funzione main!*/
} /*chiusura prima funzione */
/* Fine prima funzione */
/*===============================================================================================*/
/* funzione libreria 2: stampa un vettore contenuto nella struttura */
extern void function2(struct insieme x)
{ /* apertura funzione 2 */
/* dichiarazione variabili locali */
int i;
for (i=0;
i<x.d;
i++)
printf(" %f\n",x.vettore[i]);
} /* chiusura funzione 2 */
/* Fine seconda funzione */
/*===============================================================================================*/
/* funzione libreria 3: stabilire se un numero reale appartiene all'insieme */
extern struct insieme function3()
{
/* dichiarazione variabili locali */
struct insieme x;
x.trovato = 0;
int i;
for (i=0,i<x.d;(x.trovato= 0); i++)
/* for start */
if (x.numero_reale == x.vettore[i]);
x.trovato= 1;
/* for end */
return(x);
}
Cosa ho cambiato rispetto alla versione precendete:
-cambiato la dichiarazione del valore boolean, ora mi appoggio ad un valore int all'interno della struttura "insieme"
-tolto la libreria a cui faceva riferimento il valore boolean e tutte le istruzioni per utilizzarlo
-la function 3, ora non è più void, ma ritorna una struttura
-cambiata la dichiarazione della funzione 3 all'interno del file mylib.c (da void a struct)
-cambiati MOLTI valori e variabili, che utilizzavano la struttura ma erano dichiarate in maniera erronea
-cambiata la dichiarazione di alcune if/for, erano totalmente errate
-aggiunti commenti per cercare di rendere più chiaro il codice
-utilizzo di variabili locali (così da rendere più chiaro il codice)
-fixxata la funzione 3, ora ritorna correttamente un unico valore (il passaggio parametri è ora corretto)
-Altri aggiustamenti minori
Spero mi possiate aiutare, nel mentre continuo a lavorare!