View Full Version : ARRAY E STRUCT IN C
biggestopolino
24-08-2005, 23:35
non riesco a trovare su internet buone guide per gli array e struct (e loro applicazione, quindi esercizi vari). :mc:
dove posso trovarne??
GioVesas
25-08-2005, 07:32
Per le struct
http://www.phim.unibe.ch/comp_doc/c_manual/C/SYNTAX/struct.html
In C (non C++), le array sono il termine inglese di matrici es.
a[20]
b[10][10]
biggestopolino
25-08-2005, 07:52
sisi, ma per gli array volevo sapere se si trovano guide spiegate in modo semplice, perchè io sto usando il deitel & deitel e il capitolo occupa un 25 pagine e non è spiegato alla meraviglia :muro:
RaouL_BennetH
25-08-2005, 14:31
Uhm,il deitel & deitel secondo me invece lo spiega in maniera molto particolareggiata,almeno per me è stato abbastanza chiaro nello spiegare gli array.
Provo a fare una spiegazione sintetica di cosa sia un array(matrice):
Quando tu dichiari una variabile,prenoti uno spazio nella memoria adatto a contenere esattamente la dimensione della variabile stessa,con la particolarità che sebbene la dimensione venga "prenotata" in maniera precisa,l'indirizzo di memoria al quale questa variabile viene assegnata non è prevedibile; es:
int var ;
Saranno allocati 4 byte(su altri sistemi potrebbero essere anche 2) per questa variabile "var" all'indirizzo di memoria 1000(per esempio).Questa variabile quindi occuperà la memoria a partire dall'indirizzo 1000 fino all'indirizzo 1003.
Immagina quindi di voler calcolare le spese mensili e di fare un totale annuo:
float spese_gennaio;
float spese_febbraio;
float spese_marzo;
etc....etc...
In questo caso,sarebbe meglio "raggruppare" tutte le variabili float in un "unico contenitore" adatto a contenere esattamente la dimensione delle nostre variabili:
float spese[12] ;
In questo caso,abbiamo appunto dichiarato un array "spese" di tipo float composto da 12 elementi di tipo float che sono numerati da 0 a N-1,o più semplicemente, nel nostro caso da 0 a 12-1 quindi da 0 a 11 e questo perchè l'indice più basso di un array è sempre 0.
In questo semplice esempio,non trova posto però il totale della somma dei 12 mesi perchè sarebbe il 13 elemento,quindi,si potrebbe dichiarare un array più grande adatto a contenerlo anzichè un'altra variabile: float totale;
In modo da avere:
float spese[13];
Per usare delle parole molto semplici,io immagino un array come un casellario in cui gli elementi singoli(ma sempre dello stesso tipo)vengono contenuti in un semplice ordine numerico.
biggestopolino
25-08-2005, 16:10
---------------------
#include <stdio.h>
main () {
int n[10]={32,27,64,18,95,14,90,70,60,37};
int i;
for(i=0;i<=9;i++)
n[i]=0;
printf("%s%13s\n","Elemento","Valore");
for(i=0;i<=9;i++)
printf("%7d%13d\n",i,n[i]);
system("pause");
return 0;
}
-------------------------
questo è un programma copiato dal deitel, che dovrebbe visualizzare due colonne, una con il titolo "elemento", l'altra "valore".
stando al libro nella prima colonna dovrebbero essere presenti i valori da 0 a 9 (i valori di "i").
nella seconda dovrebbero comparire i valori 32,27,64,18,95 ecc.
torna tutto tranne che nella seconda colonna compaiono solo degli zeri.
dove sta il problema?
un'altra cosa:
nella stringa
printf("%7d%13d\n",i,n[i]);
compare n[i]
come lo devo interpretare? cosa viene interpretato dal programma questo comando? :help:
RaouL_BennetH
25-08-2005, 16:23
---------------------
#include <stdio.h>
main () {
int n[10]={32,27,64,18,95,14,90,70,60,37};
int i;
for(i=0;i<=9;i++)
n[i]=0;
printf("%s%13s\n","Elemento","Valore");
for(i=0;i<=9;i++)
printf("%7d%13d\n",i,n[i]);
system("pause");
return 0;
}
-------------------------
questo è un programma copiato dal deitel, che dovrebbe visualizzare due colonne, una con il titolo "elemento", l'altra "valore".
stando al libro nella prima colonna dovrebbero essere presenti i valori da 0 a 9 (i valori di "i").
nella seconda dovrebbero comparire i valori 32,27,64,18,95 ecc.
torna tutto tranne che nella seconda colonna compaiono solo degli zeri.
dove sta il problema?
un'altra cosa:
nella stringa
printf("%7d%13d\n",i,n[i]);
compare n[i]
come lo devo interpretare? cosa viene interpretato dal programma questo comando? :help:
Il comportamento che ti da i valori della seconda colonna a zero è normale in quanto sono stati tutti inizializzati a zero da:
for (i = 0; i < 9; i++)
n[i] = 0; /*tutti gli indici dell'array qui vengono messi a zero*/
per la printf, quel n[i] dice appunto di stampare ogni singolo indice dell'array "n".
Per ottenere questo:
./fo
Elemento Valore
0 32
1 27
2 64
3 18
4 95
5 14
6 90
7 70
8 60
9 37
devi solo ragionare un pochettino sul codice da te postato ;)
Altra cosa:
benchè in molti libri e guide troverai una notazione della main() così:
main()
etc....etc...
sappi che lo standard attuale vuole che la main ritorni sempre un int,quindi tu scrivila sempre:
int main()
biggestopolino
25-08-2005, 17:18
si ho notato che inizializzando n[i]=0 infatti porta tutto a zero, quindi provando con n[i]=10 ovviamente portava tutto a 10, poi provando ad eliminare l'inizializzazione va a scrivere 10 volte "elemento" e "valore", allora ho pensato di inizializzare n[i] dicendo che n[i]=n[i], e quindi deve essere uguale ai valori che avevo inserito in precedenza.
e in effetti così il programma ha girato, sono andato vicino alla soluzione del problema? :rolleyes:
GioVesas
25-08-2005, 17:23
fuochino
biggestopolino
25-08-2005, 17:43
:confused:
cdimauro
26-08-2005, 10:02
Altra cosa:
benchè in molti libri e guide troverai una notazione della main() così:
main()
etc....etc...
sappi che lo standard attuale vuole che la main ritorni sempre un int,quindi tu scrivila sempre:
int main()
Sicuro? Se la memoria non m'inganna, il tipo di default è l'int, e non è necessario specificarlo come valore di ritorno di una funzione.
RaouL_BennetH
26-08-2005, 12:11
Sicuro? Se la memoria non m'inganna, il tipo di default è l'int, e non è necessario specificarlo come valore di ritorno di una funzione.
Per la main dev'essere sempre un int per lo standard C.
questi sono due esempi dichiarando la main void e poi int:
#include <stdio.h>
void main() {
printf("sono pippo\n");
}
Compilando con gcc e l'opzione -Wall per i warning mi dice:
gcc -Wall pippo.c
pippo.c:3: warning: return type of 'main' is not 'int'
se provo a non specificare niente:
#include <stdio.h>
main() {
printf("sono sempre pippo\n");
}
al solito, il compilatore come warning mi restituisce:
gcc -Wall pippo.c
pippo.c:3: warning: return type defaults to 'int'
pippo.c: In function 'main':
pippo.c:6: warning: control reaches end of non-void function
Ovviamente, se ci piazzo int main, nessun messaggio di warning e gcc è contento :D
biggestopolino
26-08-2005, 14:33
fuochino
non mi avete ancora detto come era il comando esatto :)
GioVesas
26-08-2005, 14:46
Quello che hai fatto non é sbagliato, ma semplicemente inutele: hai ricopiato un pezzo di memoria su se stessa.
La cosa corretta è semplicemente non fare quel ciclo for.
main () {
int n[10]={32,27,64,18,95,14,90,70,60,37};
int i;
/*
for(i=0;i<=9;i++)
n[i]=m[i];
*/
printf("%s%13s\n","Elemento","Valore");
for(i=0;i<=9;i++)
printf("%7d%13d\n",i,n[i]);
system("pause");
return 0;
}
In alternativa:
main () {
int m[10]={32,27,64,18,95,14,90,70,60,37};
int n[10];
int i;
for(i=0;i<=9;i++)
n[i]=m[i];
printf("%s%13s\n","Elemento","Valore");
for(i=0;i<=9;i++)
printf("%7d%13d\n",i,n[i]);
system("pause");
return 0;
}
cioè copi una matrice su un'altra.
biggestopolino
27-08-2005, 13:44
ti ringrazio, anche perchè io stesso non capivo perchè dovessi riscrivere 2 volte il for..
infatti quell'esercizio, copiato dal libro, non funzionava :p
cdimauro
27-08-2005, 20:19
Per la main dev'essere sempre un int per lo standard C.
E' un int in generale, se non lo specifichi... ;)
questi sono due esempi dichiarando la main void e poi int:
#include <stdio.h>
void main() {
printf("sono pippo\n");
}
Compilando con gcc e l'opzione -Wall per i warning mi dice:
gcc -Wall pippo.c
pippo.c:3: warning: return type of 'main' is not 'int'
E' chiaro, perché per convenzione main deve tornare un int.
se provo a non specificare niente:
#include <stdio.h>
main() {
printf("sono sempre pippo\n");
}
al solito, il compilatore come warning mi restituisce:
gcc -Wall pippo.c
pippo.c:3: warning: return type defaults to 'int'
pippo.c: In function 'main':
pippo.c:6: warning: control reaches end of non-void function
OK, ma il warning dice una cosa giusta: non essendoci il tipo, di default assume che sia int. ;)
Ovviamente, se ci piazzo int main, nessun messaggio di warning e gcc è contento :D
Sì, ma tu prova a compilare senza warning, sennò non vale... :p
RaouL_BennetH
27-08-2005, 21:46
Sì, ma tu prova a compilare senza warning, sennò non vale... :p
lol :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.