SVNiko ha scritto:
In informatica non esiste la soluzione migliore. Si può fare sempre meglio.
Intendevo migliore la tua rispetto alla mia. Comunque grazie per i consigli, che sono molto efficaci.
Ho scritto così..
#include <stdio.h>
#include <stdlib.h>
#include "abrgenerico.h"
int main()
{
int n;
ABR albero=NULL;
int i,k;
int sceltatipo;
printf("COSTRUISCI ABR:\n");
printf("<scegli il tipo dei dati\n");
printf("1) Interi.\n");
printf("2) Stringhe\n\n");
scanf("%d",&sceltatipo);
printf("Quanti elementi vuoi inserire?");
scanf("%d",&n);
switch (sceltatipo)
{
case 1:
for (i=0;i<n;i++)
{
void* dato=NULL;
getInputINT(dato);
albero=abr_insert(albero,(void*)dato, compareINT);
}
}
return 0;
}
abrgenerico.h
#ifndef ABRGENERICO_H_INCLUDED
#define ABRGENERICO_H_INCLUDED
typedef struct abr * ABR;
typedef int (*COMPARE)(void * , void * );
ABR abr_insert(ABR t, void* item, COMPARE compare);
#endif // ABRGENERICO_H_INCLUDED
abrgenerico.c
#include <stdio.h>
#include <stdlib.h>
#include "abrgenerico.h"
#include "dati.h"
typedef struct abrgenerico
{
void * info;
struct abrgenerico *sx;
struct abrgenerico *dx} abr;
ABR abr_insert(ABR t, void* item, COMPARE compare)
{
int pos;
if (t!=NULL)
{
pos=compare(item,t->info);
if ( pos < 0)
t->sx=abr_insert(t->sx,item,confronta);
else if ( pos > 0 )
t->dx=abr_insert(t->dx,item,confronta);
return t;
}
else
{
ABR tmp=(abr *)malloc(sizeof(abr));
t->info=item;
t->sx=NULL;
t->dx=NULL;
return tmp;
}
}
dati.h
#ifndef DATI_H_INCLUDED
#define DATI_H_INCLUDED
#include "datoINT.h"
#include "datoSTRING.h"
#endif // DATI_H_INCLUDED
datoINT.h
#ifndef DATOINT_H_INCLUDED
#define DATOINT_H_INCLUDED
int compareINT(void * a, void * b);
void getInputINT (void* in);
void getRandomInt (void* in);
#endif // DATOINT_H_INCLUDED
datoINT.c
#include <stdio.h>
#include <stdlib.h>
#include "datoINT.h"
int compareINT (void * a, void * b)
{
int a1= *(int*) a;
int b1= *(int*) b;
return a1-b1;
}
void getInputINT (void* in)
{
printf("Inserisci un valore intero:");
scanf("%d", (int*)in);
}
void getRandomInt (void* in)
{
int d=(int)rand()/(int)RAND_MAX;
*((int*)in)=(rand()%100) +d;
}
Errori:
warning: implicit declaration of function 'getInputINT' [-Wimplicit-function-declaration]|
|26|error: 'compareINT' undeclared (first use in this function)|
se riaggiungo in dati.h
typedef int (*COMPARE)(void * , void * );
Mi da un errore in abrgenerico.h che dice che COMPARE non è definito.