PROBLEMA Problema risoluzione in linguaggio C

Pubblicità

Davide9898

Nuovo Utente
Messaggi
17
Reazioni
0
Punteggio
21
#include <stdio.h>
#define SIZE 5

/*Passare alle funzioni i vettori e i singoli elementi di un vettore*/

void modifyArray(int b[],int size);
void modifyElement(int e);

int main()
{
int a[SIZE]={0,1,2,3,4};
int i;

printf("Effetti del passaggio dell'intera chiamata dell'array per riferimento:\n\n");

printf("I valori originali dei vettori sono: \n");

for(i=0;i<SIZE;i++)
{
printf("%3d",a);
}
printf("\n");

modifyArray(a, SIZE);

printf("I valori modificati del vettore sono: \n");

for(i=0;i<SIZE;i++)
{
printf("%3d",a);
}
printf("Effetto del passaggio del singolo elemento dell'array in base al valore: \n");

printf("Il valore a[3] è' %d\n",a[3]);

modifyElement(a [3]);

return 0;
}
void modifyArray(int b[],int SIZE)
{
int j;
for(j=0;j<SIZE;j++)
{
b[j]*=2;
}
}

void modifyElement(int e)
{
printf("Il valore in modifyElement è' %d\n",e*=2);
}


Ragazzi questo programma mi da l'errore in #include SIZE 5,non capisco dove ho sbagliato,chiedo gentilmente aiuto...
 
#include <stdio.h>
#define SIZE 5

/*Passare alle funzioni i vettori e i singoli elementi di un vettore*/

void modifyArray(int b[],int size);
void modifyElement(int e);

int main()
{
int a[SIZE]={0,1,2,3,4};
int i;

printf("Effetti del passaggio dell'intera chiamata dell'array per riferimento:\n\n");

printf("I valori originali dei vettori sono: \n");

for(i=0;i<SIZE;i++)
{
printf("%3d",a);
}
printf("\n");

modifyArray(a, SIZE);

printf("I valori modificati del vettore sono: \n");

for(i=0;i<SIZE;i++)
{
printf("%3d",a);
}
printf("Effetto del passaggio del singolo elemento dell'array in base al valore: \n");

printf("Il valore a[3] è' %d\n",a[3]);

modifyElement(a [3]);

return 0;
}
void modifyArray(int b[],int SIZE)
{
int j;
for(j=0;j<SIZE;j++)
{
b[j]*=2;
}
}

void modifyElement(int e)
{
printf("Il valore in modifyElement è' %d\n",e*=2);
}


Ragazzi questo programma mi da l'errore in #include SIZE 5,non capisco dove ho sbagliato,chiedo gentilmente aiuto...
Ma hai scritto #define o #include a size?

Inviato dal mio Moto G (5) Plus utilizzando Tapatalk
 
#include <stdio.h>
#define SIZE 5

/*Passare alle funzioni i vettori e i singoli elementi di un vettore*/

void modifyArray(int b[],int size);
void modifyElement(int e);

int main()
{
int a[SIZE]={0,1,2,3,4};
int i;

printf("Effetti del passaggio dell'intera chiamata dell'array per riferimento:\n\n");

printf("I valori originali dei vettori sono: \n");

for(i=0;i<SIZE;i++)
{
printf("%3d",a);
}
printf("\n");

modifyArray(a, SIZE);

printf("I valori modificati del vettore sono: \n");

for(i=0;i<SIZE;i++)
{
printf("%3d",a);
}
printf("Effetto del passaggio del singolo elemento dell'array in base al valore: \n");

printf("Il valore a[3] è' %d\n",a[3]);

modifyElement(a [3]);

return 0;
}
void modifyArray(int b[],int SIZE)
{
int j;
for(j=0;j<SIZE;j++)
{
b[j]*=2;
}
}

void modifyElement(int e)
{
printf("Il valore in modifyElement è' %d\n",e*=2);
}


Ragazzi questo programma mi da l'errore in #include SIZE 5,non capisco dove ho sbagliato,chiedo gentilmente aiuto...

Fermo restando che formattare il codice prima di postarlo sarebbe d'aiuto. Comunque se tu dichiari la macro SIZE e poi dentro:

Codice:
void modifyArray(int b[],int SIZE)

gli infili come parametro una variabile di nome SIZE che guarda caso ha lo stesso nome della macro SIZE il compilatore te lo da come errore perchè non è permesso visto che per logica la funzione:

Codice:
void modifyArray(int b[],int SIZE)

Non saprebbe quale valore prelevare se quello della macro o dell'argomento.Ma ciò non è limitato all'argomento della funzione modifyArray ma a tutto il tuo programma, essendo che la macro è globale non puoi inizializzare una variabile con lo stesso nome, sarebbe come fare due volte ciò nel main:

Codice:
int a;
int a;

Perchè allora il C ha macro con il nome della stessa funzione? tipo issdigit?
"Per motivi di efficienza visto che chiama in causa una chiamata di funzione, ciò comporta ad una miglior ottimizzazzione"

C:
#include <stdio.h>

#define SIZE 5

/*Passare alle funzioni i vettori e i singoli elementi di un vettore*/

void modifyArray(int b[],int size);
void modifyElement(int e);

int main(){

int a[SIZE]={0,1,2,3,4};
int i;

printf("Effetti del passaggio dell'intera chiamata dell'array per riferimento:\n\n");
printf("I valori originali dei vettori sono: \n");

for(i=0;i<SIZE;i++){
  printf("%3d",a);
}
printf("\n");

modifyArray(a, SIZE);

printf("I valori modificati del vettore sono: \n");
for(i=0;i<SIZE;i++){
printf("%3d",a);
}

printf("Effetto del passaggio del singolo elemento dell'array in base al valore: \n");
printf("Il valore a[3] è' %d\n",a[3]);

//modifyElement(a[3]);

return 0;

}

void modifyArray(int b[],int size){
int j;
for(j=0;j<SIZE;j++){
  b[j]*=2;
  }
}

void modifyElement(int e){
printf("Il valore in modifyElement è' %d\n",e*=2);
}
 
Ultima modifica:
In effetti leggendo da smartphone non avevo notato il SIZE come parametro della funzione.
gli infili come parametro una variabile di nome SIZE che guarda caso ha lo stesso nome della macro SIZE il compilatore te lo da come errore perchè non è permesso visto che per logica la funzione:



Non saprebbe quale valore prelevare se quello della macro o dell'argomento.Ma ciò non è limitato all'argomento della funzione modifyArray ma a tutto il tuo programma, essendo che la macro è globale non puoi inizializzare una variabile con lo stesso nome

In realtà, mi permetto di correggerti, poichè non è esattamente così.
Non confondete le variabili globali con le Macro, o meglio, con le "costanti definite utilizzando #define". In questo caso non si tratta di variabili globali o costanti, bensì di etichette vere e proprie: il compilatore non va in confusione poichè non sà se considerare la variabile o la #define, poichè la #define è solo un segnaposto.

E' il preprocessore a fare il lavoro sporco. Il preprocessore modifica tutte le SIZE (in questo caso) presenti nel codice e sostituisce a questo segnaposto il valore 5 (almeno in questo caso). Quindi la funzione:

C:
void modifyArray(int b[],int SIZE){
// .....
}

In realtà viene compilata quando è già in questo stato:

C:
void modifyArray(int b[],int 5){
// ....
}

il compilatore riporterà quindi un errore come la mancanza di un'istruzione che termina con un "punto e virgola".

L'output del preprocessore è infatti il seguente:

C:
void modifyArray(int b[],int size);
void modifyElement(int e);

int main()
{
    int a[5]={0,1,2,3,4};
    int i;

    printf("Effetti del passaggio dell'intera chiamata dell'array per riferimento:\n\n");
    printf("I valori originali dei vettori sono: \n");
    
    for(i=0;i<5;i++)
    {
        printf("%3d",a);
    }
    printf("\n");

    modifyArray(a, 5);

    printf("I valori modificati del vettore sono: \n");

    for(i=0;i<5;i++)
    {
        printf("%3d",a);
    }
    
    printf("Effetto del passaggio del singolo elemento dell'array in base al valore: \n");
    printf("Il valore a[3] è' %d\n",a[3]);

    modifyElement(a [3]);

    return 0;
}

void modifyArray(int b[],int 5)
{
    int j;
    for(j=0;j<5;j++)
    {
        b[j]*=2;
    }
}

void modifyElement(int e)
{
    printf("Il valore in modifyElement è' %d\n",e*=2);
}
 
In effetti leggendo da smartphone non avevo notato il SIZE come parametro della funzione.


In realtà, mi permetto di correggerti, poichè non è esattamente così.
Non confondete le variabili globali con le Macro, o meglio, con le "costanti definite utilizzando #define". In questo caso non si tratta di variabili globali o costanti, bensì di etichette vere e proprie: il compilatore non va in confusione poichè non sà se considerare la variabile o la #define, poichè la #define è solo un segnaposto.

E' il preprocessore a fare il lavoro sporco. Il preprocessore modifica tutte le SIZE (in questo caso) presenti nel codice e sostituisce a questo segnaposto il valore 5 (almeno in questo caso). Quindi la funzione:

C:
void modifyArray(int b[],int SIZE){
// .....
}

In realtà viene compilata quando è già in questo stato:

C:
void modifyArray(int b[],int 5){
// ....
}

il compilatore riporterà quindi un errore come la mancanza di un'istruzione che termina con un "punto e virgola".

L'output del preprocessore è infatti il seguente:

C:
void modifyArray(int b[],int size);
void modifyElement(int e);

int main()
{
    int a[5]={0,1,2,3,4};
    int i;

    printf("Effetti del passaggio dell'intera chiamata dell'array per riferimento:\n\n");
    printf("I valori originali dei vettori sono: \n");
   
    for(i=0;i<5;i++)
    {
        printf("%3d",a);
    }
    printf("\n");

    modifyArray(a, 5);

    printf("I valori modificati del vettore sono: \n");

    for(i=0;i<5;i++)
    {
        printf("%3d",a);
    }
   
    printf("Effetto del passaggio del singolo elemento dell'array in base al valore: \n");
    printf("Il valore a[3] è' %d\n",a[3]);

    modifyElement(a [3]);

    return 0;
}

void modifyArray(int b[],int 5)
{
    int j;
    for(j=0;j<5;j++)
    {
        b[j]*=2;
    }
}

void modifyElement(int e)
{
    printf("Il valore in modifyElement è' %d\n",e*=2);
}

Quoto, ammetto di essermi espresso male.
 
Pubblicità
Pubblicità
Indietro
Top