PDA

View Full Version : [C] - syntax error : missing ';' before 'type'


pivaino
19-11-2005, 16:21
Ciao a tutti, espongo subito il mio problema.
questo è il programma che ho:

#include <stdio.h>
#define N 7
int diff (int[], int, int[]);

void main()
{
int i;
int a[N]={6,2,3,12,5,8,20};
int b[N];
for(i=0; i<N; i++){
b[N]=diff(a, N, b);
printf("L'array delle differenze è: ");
}

int diff (int a[], int N, int b[])
{
int i;
for(i=1; i<N-1; i++)
b[i]=a[i+1]-a[i];
return b[i];
}

--------------------Configuration: Differenze in avanti - Win32 Debug--------------------
Compiling...
main.c
C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(15) : error C2143: syntax error : missing ';' before 'type'
C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(20) : warning C4098: 'main' : 'void' function returning a value
Error executing cl.exe.

main.obj - 1 error(s), 1 warning(s)
________________________________________________________
Perchè, qualsiasi cosa scrivo mi da sempre lo stesso errore che ho segnato in rosso??? Dov'è sbagliata la function diff??
Grazie per le eventuali risposte :) :p

cionci
19-11-2005, 16:44
Manca la parentesi graffa chiusa prima di "int diff"...

pivaino
19-11-2005, 16:46
Manca la parentesi graffa chiusa prima di "int diff"...
Ca**o è vero...mi sto proprio cecando gli occhi con questi programmini :mc: :D
Grazie cionci

VegetaSSJ5
19-11-2005, 16:48
:rotfl:

pivaino
19-11-2005, 16:49
Nooooooooooooo l'ho messa la {...ma ora mi da 4 errori!!!!! :muro:
vabbè ci rinuncio.
ciauz

::::Dani83::::
19-11-2005, 16:51
mi sa che nn hai inizializzato bene la N :wtf:

jappilas
19-11-2005, 16:54
Nooooooooooooo l'ho messa la {...ma ora mi da 4 errori!!!!! :muro:
vabbè ci rinuncio.
ciauz
ci voleva ancora un' altra } prima dell' int diff per chiudere , oltre che l' if statement , anche il main ...
tu ne avevi messa solo una, logico che se ne aggiungi un' altra aperta gli errori aumentino ;)

pivaino
19-11-2005, 16:57
ci voleva ancora un' altra } prima dell' int diff per chiudere , oltre che l' if statement , anche il main ...
tu ne avevi messa solo una, logico che se ne aggiungi un' altra aperta gli errori aumentino ;)

No, ho sbagliato a scriverla qui nel post...ma ne prog. l'ho messa bene } :) :help:

pivaino
19-11-2005, 16:58
mi sa che nn hai inizializzato bene la N :wtf:

Cioè??? HELP ME :fagiano: :cry:

jappilas
19-11-2005, 17:01
questo warning C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(20) : warning C4098: 'main' : 'void' function returning a value
mi dava la conferma che il compilatore considerasse il return in fondo alla diff come ancora appartenente al main, quindi il main davvero non fosse chiuso
Cioè??? HELP ME :fagiano: :cry:
dont worry, la N è #define-ita in cima altrimenti ti avrebbe dato un altro errore sulla dimensione dell' array ;)

pivaino
19-11-2005, 17:10
Riscritta bene, cioè cosi:

#include <stdio.h>
#define N 7
int diff (int[], int, int[]);

void main()
{
int i;
int a[N]={6,2,3,12,5,8,20};
int b[N];
for(i=0; i<N; i++){
b[N]=diff(a, N, b);}
printf("L'array delle differenze è: ");
}

int diff (int a[], int N, int b[])
{
int i;
for(i=1; i<N-1; i++)
b[i]=a[i+1]-a[i];
return b[i];
}

mi da i seguenti errori in compilazione:
--------------------Configuration: Differenze in avanti - Win32 Debug--------------------
Compiling...
main.c
C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(15) : error C2143: syntax error : missing ')' before 'constant'
C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(15) : error C2143: syntax error : missing '{' before 'constant'
C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(15) : error C2059: syntax error : '<Unknown>'
C:\Documents and Settings\Peppe\Desktop\Array1D\Differenze in avanti\main.c(15) : error C2059: syntax error : ')'
Error executing cl.exe.

main.obj - 4 error(s), 0 warning(s)
___________________________________________________
tutti errori riferiti alla riga in rosso.
:confused: :confused: :confused:

jappilas
19-11-2005, 17:13
stavo appunto per chiedere che errori ti dà, perchè ora che leggo meglio, l' algoritmo mi suona un po' strano
... nel main hai un loop per riempire gli N elementi di b con una funzione, e va bene
però la diff fa (qualcosa) sugli elementi di a per poi ritornare (come secondo membro di un' assegnazione) di nuovo degli elementi di b... :mbe: http://www.drusie.com/forum/images/smiles/sgrat.gif

in pratica vuoi fare <delle cose> su una stessa variabile (l' array b) da due posti diversi annidando due cicli: sicuro che ti serva proprio una cosa del genere ?

pivaino
19-11-2005, 17:19
stavo appunto per chiedere che errori ti dà, perchè ora che leggo meglio, l' algoritmo mi suona un po' strano
... nel main hai un loop per riempire gli N elementi di b con una funzione, e va bene
però la diff fa (qualcosa) sugli elementi di a per ritornare (come secondo membro di un' assegnazione) di nuovo degli elementi di b... :mbe: http://www.drusie.com/forum/images/smiles/sgrat.gif

in pratica hai due cicli annidati: ti servono?
Non saprei perche il prof. ce l'ha fatto strutturare cosi in aula!!! :confused: :confused:

jappilas
19-11-2005, 17:32
Non saprei perche il prof. ce l'ha fatto strutturare cosi in aula!!! :confused: :confused:
certo che sono proprio passati i tempi in cui i prof facevano fare il programma per calcolare il fattoriale o il num. di fibonacci e l' implementazione era praticamente impossibile da sbagliare... adesso si devono sbizzarrire... :rolleyes:

kk3z
19-11-2005, 17:37
"N" è una costante che vale in tutte le funzioni del tuo programma, quindi che bisogno hai di passarlo alla funzione "diff"?
"N" non è un int... è come se facessi int 6 :confused:

jappilas
19-11-2005, 17:45
"N" è una costante che vale in tutte le funzioni del tuo programma, quindi che bisogno hai di passarlo alla funzione "diff"?
"N" non è un int... è come se facessi int 6 :confused:
infatti, me lo stavo chiedendo,
come mi chiedevo anche per quale motivo nel loop si va ogni volta ad assegnare non l' elemento i-esimo di b, ma quello N esimo (che non esiste, perchè l' indice dell' ultimo elemento in un array di dimensione N è N-1), quindi già qui c' è un errore

ma anche se fosse scritto N-1, tu lasceresti indefiniti gli altri N-1 elementi dell' array per avere un <qualcosa> scritto nell' ultima cella

andbin
19-11-2005, 17:50
int b[N];
for(i=0; i<N; i++){
b[N]=diff(a, N, b);}
Ciao, sei sicuro dell'assegnazione che ho marcato in rosso??? Così vai fuori dall'array!

jappilas
19-11-2005, 17:56
int b[N];
for(i=0; i<N; i++){
b[N]=diff(a, N, b);}
Ciao, sei sicuro dell'assegnazione che ho marcato in rosso??? Così vai fuori dall'array!
l' avevo scritto anch'io, ma repetita juvant :D
se non ricordo male, inizializzare l' array a dimensione fissa impedisce di sfondarlo dopo... è il caso delle stringhe o dei vettori di cui non si sa a priori la dimensione a essere problematico

...allora, partiamo dal presupposto che tu voglia ottenere di salvare in b un vettore di differenze di questo tipo ( 2-6, 3-2, 12-3, 5-12, 8-5, 20-8 )

si vede che tale vettore sarà composto da 6, cioè 7-1, cioè N-1, elementi, il che forse spiegherebbe l' N-1 nel loop della diff()...
però allora secondo me si dovrà dimensionare b a N-1 e non avrà senso nè fare un loop annidato, nè iterare N volte quello nel main: l' algoritmo che si ottiene ha un implementazione in codice già ai minimi termini, quindi non avrebbe molto senso dichiarare funzioni aggiuntive come diff(a,i) per fare a[i+1]-a[i] ... (*)

(*) a meno che il vero scopo dell' esercizio non fosse semplicente farti fare pratica con le chiamate a funzione per valore e per riferimento... :fagiano:
o a meno che non fosse esplicitamente richiesto che l' array delle differenze generato non fosse anche ordinato o elaborato in altro modo...

#include <stdio.h>
#define N 7
// int diff (int[], int, int[]); inutile

void main()
{
int a[N]={6,2,3,12,5,8,20};
int b[N-1];
for(int i=0; i<N-1; i++)
{
b[i] = a[i+1] - a[i]; //invece di diff(a, N, b); //
}
printf("L'array delle differenze è: %d %d %d %d %d %d\n",
b[0], b[1], b[2], b[3], b[4], b[5] );
}

jappilas
19-11-2005, 21:51
in caso la richiesta fosse stata ordinare l' array delle differenze risultanti,
guarda se ti piace questa soluzione con un insertion sort (riciclabile!) da 4 lines of code reali ;)

#include <stdio.h>
#include <stdlib.h>
#define N 7

void insertsort(int val, int* vector) // O(n^2) // N>1 //
{
int i=0;
for (int j=0; j<N-1; j++)
if (val>vector[i])
i++;
for (int k=N-2; k>i; k--)
vector[k+1]=vector[k];
vector[i]=val;
};

void main()
{
int diff;
int A[N]={6, 2, 3, 12, 5, 8, 20};
int B[N-1];
for (int i=0; i<N-1; i++)
{
diff=A[i+1]-A[i];
insersort(diff, B);
}
printf("L'array delle differenze è: %d %d %d %d %d %d\n",
B[0], B[1], B[2], B[3], B[4], B[5]);
}

leadergl
20-11-2005, 10:38
il problema non è nell'array....ma è in questa:
int diff(int a[], int N, int b[])
prova a scriverla così:
int diff(int a[], int b[])
e vedi che tutto comincia a funzionare ;)

pivaino
20-11-2005, 23:30
proverò i cambiamenti che mi avete detto...kmq domani ho laboratorio...forse il prof. ci farà fare ai pc proprio questo esercizio....domani vi fo sapere. :)