RISOLTO [C] Esercizio con i vettori

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
scusate il disturbo, abbiamo studiato i vettori però non l'ho capiti molto bene; Allora sono andato su internet per fare qualche esercizio e ho trovato questo esercizio che dice: Inserire N valori interi equivalenti al totale di valori da inserire e visualizarli al contrario;
Ho scritto il codice ma non funziona;
ve lo metto qui sotto;
Codice:
#include<stdio.h>
int main()
{   int n, i;
   
    do
    {
          printf("Inserisci il totale di valori da inserire:");
          scanf("%d", &n);
    }
    while(n == 0);

    int a[n];
   
    for(i = 0;i > n; i++)
    {  
          printf("Inserisci il %d° valore:",  i + 1);
          scanf("%d", &a[i]);
    }

    for(i = n; i > 0; i--)
    { 
          scanf("%d", &a[i]);
    }

   return 0;
}

Grazie a chi mi aiuta!!
 
Ultima modifica da un moderatore:

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
scusate il disturbo, abbiamo studiato i vettori però non l'ho capiti molto bene; Allora sono andato su internet per fare qualche esercizio e ho trovato questo esercizio che dice: Inserire N valori interi equivalenti al totale di valori da inserire e visualizarli al contrario;
Ho scritto il codice ma non funziona;
ve lo metto qui sotto;
Codice:
#include<stdio.h>
int main()
{   int n, i;
   
    do
    {
          printf("Inserisci il totale di valori da inserire:");
          scanf("%d", &n);
    }
    while(n == 0);

    int a[n];
   
    for(i = 0;i > n; i++)
    {  
          printf("Inserisci il %d° valore:",  i + 1);
          scanf("%d", &a[i]);
    }

    for(i = n; i > 0; i--)
    { 
          scanf("%d", &a[i]);
    }

   return 0;
}

Grazie a chi mi aiuta!!

Qual è il problema?
Cosa mostra a video? Da qualche errore?
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
Qual è il problema?
Cosa mostra a video? Da qualche errore?
quando lo vado ad'eseguire fino al primo scanf funziona e se inserisco 0 si ripete ma appena inserisco un numero mi visualizza dei numeri random a schermo
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
La condizione sul primo for è sicuramente sbagliata.
i non può essere maggiore di N. Non entra mai in quel for, ti esegue sempre il secondo.

Non ho ben capito il secondo for con lo scanf, visto che non leggi mai i valori dall'array.
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
La condizione sul primo for è sicuramente sbagliata.
i non può essere maggiore di N. Non entra mai in quel for, ti esegue sempre il secondo.

Non ho ben capito il secondo for con lo scanf, visto che non leggi mai i valori dall'array.
scusate ma ho scritto il codice diverso da come era scritto sul compilatore, purtroppo se vado a fare copia in colla sul sito non so perchè me l'ho scrive tutto attaccato il codice;
Allora il primo for si è sbagliato dovrei mettere (i) < (n), mentre il secondo for apposto dello scanf ci deve stare il printf;
Il problema ho pensato di risolvero creando un vettore di (N) valori e con un ciclo for aumentare (i )di uno finchè è uguale a (N), andare a inserire nella locazione corispondente al valore di (i) che sarebbe zero al primo ciclo for il numero, e così via finche (i) = (n), poi con il secondo for decremento (i) finquando è uguale a 0 così da visualizare i numeri inseriti nella variabile vettore dalla locazione n°(N), cioè l'ultima, fino alla locazione n° 0;
Non so se si è capito;
Inoltre potreste spiegarmi questa cosa di leggere i valori dell'array che non l'ho capita bene;
Grazie!!
 

GraveKeeper

Utente Èlite
7,029
3,188
CPU
AMD Ryzen 7 3700X
Dissipatore
Enermax LiqMax III ARGB 240 Nero ARGB
Scheda Madre
Asus Tuf Gaming B550-PLUS (WIFI)
HDD
Samsung 970 EVO Plus 500GB NVMe + Crucial MX500 1TB + 2 x WD10EZEX Blue 1TB
RAM
Adata XPG Spectrix 16gb (2x8) 3200Mhz RGB
GPU
Asus NVIDIA GeForce GTX 750ti OC 2GB (in attesa di meglio)
Audio
Behringer U-PHORIA UM2 (chissà, magari un giorno prenderò una Scarlett Solo)
Monitor
LG 27GN800 UltraGear QHD IPS 27" 1ms 144Hz
PSU
ITEK GF 750W 80Gold
Case
NZXT H510i Nero
Periferiche
Studio Monitor Speakers Presonus Eris E3.5, Audio Technica ATH-M30x
OS
Windows 10 Home 64-bit
scusate il disturbo, abbiamo studiato i vettori però non l'ho capiti molto bene; Allora sono andato su internet per fare qualche esercizio e ho trovato questo esercizio che dice: Inserire N valori interi equivalenti al totale di valori da inserire e visualizarli al contrario;
Ho scritto il codice ma non funziona;
ve lo metto qui sotto;
Codice:
#include<stdio.h>
int main()
{   int n, i;
   
    do
    {
          printf("Inserisci il totale di valori da inserire:");
          scanf("%d", &n);
    }
    while(n == 0);

    int a[n];
   
    for(i = 0;i > n; i++)
    {  
          printf("Inserisci il %d° valore:",  i + 1);
          scanf("%d", &a[i]);
    }

    for(i = n; i > 0; i--)
    { 
          scanf("%d", &a[i]);
    }

   return 0;
}

Grazie a chi mi aiuta!!

E' perfetto, hai sbagliato la condizione di permanenza nel ciclo, come ti hanno detto, devi porre i<n, perchè i parte da zero, e finchè è minore di n il ciclo continua. Appena i raggiunge il valore di n si esce dal ciclo. Si usa minore e non minore e uguale proprio perchè partendo il vettore da zero sennò si avrebbe un valore in più.

Inoltre dice visualizzarli al contrario quindi dovresti usare un printf nel secondo ciclo e non uno scanf.

Ho appena letto il tuo messaggio, se quei 2 errori già li hai correti non dovrebbero esserci problemi.
Per il leggi intendeva che con lo scanf non li visualizzavi.
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
quando lo vado ad'eseguire fino al primo scanf funziona e se inserisco 0 si ripete ma appena inserisco un numero mi visualizza dei numeri random a schermo
Ti ho messo i commenti nel codice che ti posto @Matteo34
Codice:
#include<stdio.h>
int main()
{   int n, i;
   
    do
    {
          printf("Inserisci il totale di valori da inserire:");
          scanf("%d", &n);
    }
    while(n == 0);

    int a[n];
   
    //qui la condizione è i < n e non > altrimenti è sempre falso e non entra in questo for
    for(i = 0;i < n; i++)
    {  
          printf("Inserisci il %d° valore:",  i + 1);
          scanf("%d", &a[i]);
    }

    //qui serve la printf per stampare e non la scanf.
    //inoltre i deve partire da n -1 (i vettori vanno da 0 a n - 1)
    for(i = n-1; i >= 0; i--)
    {
          printf("%d\n", a[i]);
    }

   return 0;
}
 
Ultima modifica:

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
E' perfetto, hai sbagliato la condizione di permanenza nel ciclo, come ti hanno detto, devi porre i<n, perchè i parte da zero, e finchè è minore di n il ciclo continua. Appena i raggiunge il valore di n si esce dal ciclo. Si usa minore e non minore e uguale proprio perchè partendo il vettore da zero sennò si avrebbe un valore in più.

Inoltre dice visualizzarli al contrario quindi dovresti usare un printf nel secondo ciclo e non uno scanf.

Ho appena letto il tuo messaggio, se quei 2 errori già li hai correti non dovrebbero esserci problemi.
Per il leggi intendeva che con lo scanf non li visualizzavi.
Grazie mille adesso provo a scrivere il codice correttamente e vi faccio sapere, siete sempre di aiuto;
grazie!!!
 

GraveKeeper

Utente Èlite
7,029
3,188
CPU
AMD Ryzen 7 3700X
Dissipatore
Enermax LiqMax III ARGB 240 Nero ARGB
Scheda Madre
Asus Tuf Gaming B550-PLUS (WIFI)
HDD
Samsung 970 EVO Plus 500GB NVMe + Crucial MX500 1TB + 2 x WD10EZEX Blue 1TB
RAM
Adata XPG Spectrix 16gb (2x8) 3200Mhz RGB
GPU
Asus NVIDIA GeForce GTX 750ti OC 2GB (in attesa di meglio)
Audio
Behringer U-PHORIA UM2 (chissà, magari un giorno prenderò una Scarlett Solo)
Monitor
LG 27GN800 UltraGear QHD IPS 27" 1ms 144Hz
PSU
ITEK GF 750W 80Gold
Case
NZXT H510i Nero
Periferiche
Studio Monitor Speakers Presonus Eris E3.5, Audio Technica ATH-M30x
OS
Windows 10 Home 64-bit
Aspetta, non l'ho mica capito il dowhile all'inizio, l'hai fatto per evitare che venga messo lo 0? Ti consiglio di mettere maggiore di 0, o se qualche burlone mettesse un numero negativo il programma passerebbe al vettore.
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
Grazie mille adesso provo a scrivere il codice correttamente e vi faccio sapere, siete sempre di aiuto;
grazie!!!
Un'ultima domanda che non centra niente, ma è normale che in seconcdo superiore indirizzio tecnico informatico, la nostra prof ci faccia usare skracht(nono so se ho scritto bene), e programmare in C++ su Arduino?
Io credo che proggramare su Arduino sia più una materia a che fare con la meccatronica o sbaglio?
Inoltre ho visto su internet qualche video di skracth e sinceramente mi è sembrata una cavolata, assemblare pezzi di puzle per programmare non è proggramare secondo me?
Avendo cambiato prof sono molto confuso potreste chiarirmi l'idee grazie
Post unito automaticamente:

Aspetta, non l'ho mica capito il dowhile all'inizio, l'hai fatto per evitare che venga messo lo 0? Ti consiglio di mettere maggiore di 0, o se qualche burlone mettesse un numero negativo il programma passerebbe al vettore.
Lo farò grazie
 

GraveKeeper

Utente Èlite
7,029
3,188
CPU
AMD Ryzen 7 3700X
Dissipatore
Enermax LiqMax III ARGB 240 Nero ARGB
Scheda Madre
Asus Tuf Gaming B550-PLUS (WIFI)
HDD
Samsung 970 EVO Plus 500GB NVMe + Crucial MX500 1TB + 2 x WD10EZEX Blue 1TB
RAM
Adata XPG Spectrix 16gb (2x8) 3200Mhz RGB
GPU
Asus NVIDIA GeForce GTX 750ti OC 2GB (in attesa di meglio)
Audio
Behringer U-PHORIA UM2 (chissà, magari un giorno prenderò una Scarlett Solo)
Monitor
LG 27GN800 UltraGear QHD IPS 27" 1ms 144Hz
PSU
ITEK GF 750W 80Gold
Case
NZXT H510i Nero
Periferiche
Studio Monitor Speakers Presonus Eris E3.5, Audio Technica ATH-M30x
OS
Windows 10 Home 64-bit
Un'ultima domanda che non centra niente, ma è normale che in seconcdo superiore indirizzio tecnico informatico, la nostra prof ci faccia usare skracht(nono so se ho scritto bene), e programmare in C++ su Arduino?
Io credo che proggramare su Arduino sia più una materia a che fare con la meccatronica o sbaglio?
Inoltre ho visto su internet qualche video di skracth e sinceramente mi è sembrata una cavolata, assemblare pezzi di puzle per programmare non è proggramare secondo me?
Avendo cambiato prof sono molto confuso potreste chiarirmi l'idee grazie
Post unito automaticamente:


Lo farò grazie

Ho fatto lo scientifico SA, quindi solo c, anche se un nostro prof ci ha fatto provare arduino. Non è così male, ti approcci un po' anche all'hardware. L'indirizzo è tecnico informatico immagino sia normale farvi sondare più di un aspetto della programmazione, restando però quest'ultima la principale.

Piccola parentesi: Io coddavo su Dev-c++, e non esiste programma più buggato del buon vecchio dev
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
Ho fatto lo scientifico SA, quindi solo c, anche se un nostro prof ci ha fatto provare arduino. Non è così male, ti approcci un po' anche all'hardware. L'indirizzo è tecnico informatico immagino sia normale farvi sondare più di un aspetto della programmazione, restando però quest'ultima la principale.

Piccola parentesi: Io coddavo su Dev-c++, e non esiste programma più buggato del buon vecchio dev
Si purtroppo Dev C++ è stato abbandonato da anni e ormai e davvero un'impresa usarlo;
Per quanto riguarda skrecth mi sa che è una cavolata, mi sono informato ed'è un app dove tu add'ogni pezzettino di puzle inserisci un blocco istruzioni molto semplificato (tipo: piove si = non esco; no = esco) per poi metterli tra di loro e creare un "programma";
Mi informerò di più perchè ci tengo a imparare ben una materia, LA materia che ho scelto per il mio futuro;
Grazie per tutto l'aiuto; Adesso scrivo il codice, vedo se funziona e posto la zoluzione;
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Si purtroppo Dev C++ è stato abbandonato da anni e ormai e davvero un'impresa usarlo;
Per quanto riguarda skrecth mi sa che è una cavolata, mi sono informato ed'è un app dove tu add'ogni pezzettino di puzle inserisci un blocco istruzioni molto semplificato (tipo: piove si = non esco; no = esco) per poi metterli tra di loro e creare un "programma";
Mi informerò di più perchè ci tengo a imparare ben una materia, LA materia che ho scelto per il mio futuro;
Grazie per tutto l'aiuto; Adesso scrivo il codice, vedo se funziona e posto la zoluzione;
Se leggi il mio commento #7 ti ho postato la soluzione con dei commenti nel codice
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
Allora il problema e stata una mia mancanza di concentrazione con errori stupidi addirittura banali;
Metto qui sotto il codice coretto:
Codice:
#include<stdio.h>
int main()
{ int n, i;

do
{
printf("Inserisci il totale di valori da inserire:");
scanf("%d", &n);
}
while(n == 0);

int a[n];

//qui la condizione è i < n e non > altrimenti è sempre falso e non entra in questo for
for(i = 0;i < n; i++)
{
printf("Inserisci il %d° valore:", i + 1);
scanf("%d", &a[i]);
}

//qui serve la printf per stampare e non la scanf.
//inoltre i deve partire da n -1 (i vettori vanno da 0 a n - 1)
for(i = n-1; i >= 0; i--)
{
printf("%d\n", a[i]);
}

return 0;
}
grazie a tutti;
 
U

Utente cancellato 371741

Ospite
per stampare, il printf e' meglio di uno scanf, si :)

Se era un esercizio per imparare, pero' era semplice, ti consiglio sempre prima di sbatterci la testa da solo, si impara di piu.

Gli ide sono tanti, ma per programmini cosi semplici puoi usare anche un semplice editor. Cosi si compila separatamente e si impara a capire le opzioni di compilazione e volengo i makefile.

Se hai intenzione di imparare bene il C, inizia da uno stile di codice uniforme e pulito, io suggerisco quello di linux.


Se segui queste linee guida puoi usare scipts/checkpatch.pl (estraendolo dai sorgenti linux) e controlloare la sintassi in automatico, avari un codice professionale da vedere, anche se magari, perfettamente non funzionante :)
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili