PROBLEMA Problema risoluzione in linguaggio C

Davide9898

Nuovo Utente
17
0
#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...
 

Apocalypse480

Utente Attivo
229
3
#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
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Dovresti dire che errore riporta il compilatore.
 

Hobet

Utente Attivo
609
222
CPU
i5 6600k
Dissipatore
AIO H100
Scheda Madre
ASUS z170 Deluxe
HDD
1 WD Blue 1 TB; evo 850 500gb
RAM
Vengeance 4x4
GPU
GTX 1070ti MSI
Audio
Nope
Monitor
MG278Q
Case
750D Corsair
Net
Fastweb 200/30
OS
PucyBuntu
#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:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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);
}
 
  • Mi piace
Reazioni: Davide9898 e Hobet

Hobet

Utente Attivo
609
222
CPU
i5 6600k
Dissipatore
AIO H100
Scheda Madre
ASUS z170 Deluxe
HDD
1 WD Blue 1 TB; evo 850 500gb
RAM
Vengeance 4x4
GPU
GTX 1070ti MSI
Audio
Nope
Monitor
MG278Q
Case
750D Corsair
Net
Fastweb 200/30
OS
PucyBuntu
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.
 
  • Mi piace
Reazioni: Davide9898

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!