PDA

View Full Version : [C] Problemi inversione di un vettore


Ov3rLo4d
04-06-2008, 16:20
Salve a tutti...


sto facendo un programma che prenda un vettore e lo inverta.... per ora sono riuscito a fare questo:

#include <stdio.h>
#include <stdlib.h>

#define MAX_VETT 100

int *inverso(int *vett[]);
int vett[MAX_VETT],inv_vett[MAX_VETT];
int i,dim_vett,j;

main()
{
inizio:
printf("Inserisci la dimensione del vettore (MAX 100): ");
scanf("%d",&dim_vett);
if(dim_vett<=MAX_VETT)
{
printf("Ora inserici uno ad uno i valori del vettore: \n");
for(i=0;i<dim_vett;i++)
scanf("%d",&vett[i]);
for(j=0;j<dim_vett;j++)
printf("%2d",vett[j]);
printf("\n\n");
inv_vett=inverso(vett);
for(j=0;j<dim_vett;j++)
printf("%2d",inv_vett[j]);
}
else
{
printf("\n\nIl valore max e' 100!!! RIPROVA!!!\n\n");
goto inizio;
}
system("pause");
}

int *inverso(int *vett[])
{
for(i=dim_vett;i>=0;i--)
{
for(j=0;j<dim_vett;j++)
{
inv_vett[j]=*vett[i];
}
}
return(inv_vett);
}


ma non riesco a capire dove sta l'intoppo...

Il compilatore mi da questo errore:
"error: cannot convert 'int*' to 'int**' for argument '1' to 'int* inverso(int**)'


cosa devo fare??

qualcuno è in grado di correggerlo??

Grazie mille a tutti

Albi89
04-06-2008, 16:27
Salve a tutti..
[...]

vett è un array, dunque int*, mentre la funzione inverso() si aspetta un puntatore ad array, dunque int**.
Correggi la definizione e dovrebbe andare.

Ricordati anche quando posti gli errori di riportare il numero di riga :fagiano:
Inoltre, evita di dichiarare variabili come globali e non usare quel lercissimo goto!
Puoi rendere in maniera molto più chiara il tutto usando un do...while, ad esempio.
Dai un occhio al teorema di Bohm-Jacopini (http://it.wikipedia.org/wiki/Teorema_di_B%C3%B6hm-Jacopini).

Ov3rLo4d
04-06-2008, 16:40
#include <stdio.h>
#include <stdlib.h>

#define MAX_VETT 100

int *inverso(int *vett[]);
int vett[MAX_VETT],inv_vett[MAX_VETT];
int i,dim_vett,j;

main()
{
inizio:
printf("Inserisci la dimensione del vettore (MAX 100): ");
scanf("%d",&dim_vett);
if(dim_vett<=MAX_VETT)
{
printf("Ora inserici uno ad uno i valori del vettore: \n");
for(i=0;i<dim_vett;i++)
scanf("%d",&vett[i]);
for(j=0;j<dim_vett;j++)
printf("%2d",vett[j]);
printf("\n\n");
for(i=0;i<dim_vett;i++);
inverso(*vett[i]);
for(j=0;j<dim_vett;j++)
printf("%2d",inv_vett[j]);
}
else
{
printf("\n\nIl valore max e' 100!!! RIPROVA!!!\n\n");
goto inizio;
}
system("pause");
}

int *inverso(int *vett[])
{
for(i=dim_vett;i>=0;i--)
{
for(j=0;j<dim_vett;j++)
{
inv_vett[j]=*vett[i];
}
}
return(inv_vett);



for(i=0;i<dim_vett;i++);
inverso(*vett[i]);


è in questo punto il problema... (penso)

Mi da un errore alla riga 24 nello stesso punto di prima... ho aggiunto il puntatore come dici tu ma non va.... Cosa faccio??

Grazie mille per l'aiuto

Albi89
04-06-2008, 16:48
vett è un array, dunque int*, mentre la funzione inverso() si aspetta un puntatore ad array, dunque int**.
Correggi la definizione e dovrebbe andare.

Togli il puntatore da lì, e correggi definizione e prototipi:
int* inverti(int vett[])
int* inverti(int* vett)
sono equivalenti e funzioneranno.

In ogni caso, molto più importanti dei consigli sull'esercizio sono quelli che ti ho scritto dopo.
Imparare a risolvere questo esercizio non ti servirà a niente, capire le buone abitudini di programmazione ti aiuterà nella vita ;)

khelidan1980
04-06-2008, 18:09
senza offesa,ma piu che intestardirti sul perchè non ti funziona,come dice albi89 mi andrei a vedere come si scrive un programma,ma su che libro hai studiato?