|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
ARRAY E STRUCT IN C
non riesco a trovare su internet buone guide per gli array e struct (e loro applicazione, quindi esercizi vari).
![]() dove posso trovarne??
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
Per le struct
http://www.phim.unibe.ch/comp_doc/c_...AX/struct.html In C (non C++), le array sono il termine inglese di matrici es. a[20] b[10][10]
__________________
Gianni |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
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
![]()
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
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.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
---------------------
#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? ![]()
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
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: Codice:
./fo Elemento Valore 0 32 1 27 2 64 3 18 4 95 5 14 6 90 7 70 8 60 9 37 ![]() 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()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() Ultima modifica di RaouL_BennetH : 25-08-2005 alle 16:33. |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
soluzione?
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? ![]()
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() Ultima modifica di biggestopolino : 25-08-2005 alle 17:19. Motivo: mi sono scordato un pezzo di codice |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
fuochino
__________________
Gianni |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
![]()
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() Ultima modifica di biggestopolino : 25-08-2005 alle 17:48. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
questi sono due esempi dichiarando la main void e poi int: Codice:
#include <stdio.h> void main() { printf("sono pippo\n"); } Codice:
gcc -Wall pippo.c pippo.c:3: warning: return type of 'main' is not 'int' Codice:
#include <stdio.h> main() { printf("sono sempre pippo\n"); } Codice:
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 ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#12 | |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
eii
Quote:
![]()
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() |
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
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.
__________________
Gianni |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Jul 2005
Città: Cagliari
Messaggi: 113
|
ti ringrazio, anche perchè io stesso non capivo perchè dovessi riscrivere 2 volte il for..
infatti quell'esercizio, copiato dal libro, non funzionava ![]()
__________________
quando tutti falliscono.. non provate a chiedere il mio parere! ![]() |
![]() |
![]() |
![]() |
#15 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
Quote:
![]() Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
lol ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:25.