|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Un aiuto per un esordiente totale in c
Salve a tutti, ho cominciato da poco a programmare in c e già sono sorti i primi insormontabili, ma soprattutto strani problemi (forza italia! hanno appena fatto il 4° gol!!
![]() Codice:
#include <stdio.h> #include <malloc.h> void main () { int a[]={26,4,4,4,13,12,12,7,6,26,16,14,7}; int lung=13, i=0; int b[lung][2]; for (i=0; i<lung; i++) { b[i][0]=a[i]; int j; for (j=0; j<lung; j++) { if (a[i]==a[j]) { b[i][1]++; } } } printf ("%d %d %d", b[1][0], b[0][0], b[lung-1][0]); for (i=0; i<lung; i++) { printf ("\n%d ", b[i][0]); printf ("%d\n", b[i][1]); } } Ultima modifica di VegetaSSJ5 : 12-10-2003 alle 11:23. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
allego anche il sorgente.
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Re: Un aiuto per un esordiente totale in c
Quote:
il c non genera array dinamici a runtime in questo modo. puoi pero usare malloc per allocare la memoria che ti serve. ciao ![]() |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Re: Re: Un aiuto per un esordiente totale in c
Quote:
![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Lo fa lo fa. E' dal 1999 che funziona quella scrittura ...
E' possibile scrivere funzioni che prendono in ingresso dimensioni di array: Codice:
int crea_array(int dim) { int my_array[dim]; ... ... return qualche_cosa; } ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Re: Re: Un aiuto per un esordiente totale in c
Quote:
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Re: Re: Re: Un aiuto per un esordiente totale in c
Quote:
ciao ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Re: Re: Re: Un aiuto per un esordiente totale in c
Quote:
ciao ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Aug 2003
Messaggi: 125
|
Re: Re: Re: Un aiuto per un esordiente totale in c
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Francamente parlando non saprei ... Non credo esistano documenti mirati "all'aggiornamento". Attualmente a distanza di quasi 5 anni l'unico libro che parla del C99 è lo Schildt, Guida completa C, McGraw-Hill
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
ma se allora funziona la scritta "int b[lung][2]" è corretta, perchè mi fa quel prblema che non so spiegarmi?
P.S. Sarò pure un esordiente totale (stile fantozzi... ![]() ![]() ![]() int a, b, c; insieme di istruzioni su a,b,c . . . . printf ("%d", b); } in pratica se non inizializzavo b a zero (cioè scrivendo solo int b e non int b=0), mi dava dei risultati obrobriosi che non c'entravano nulla col problema. invece cambiando il codice scrivendo solamente int b=0 anzichè int b; mi dava il risultato corretto. Se ora lo ritrovo lo posto e vi faccio vedere. Ultima modifica di VegetaSSJ5 : 12-10-2003 alle 11:13. |
![]() |
![]() |
![]() |
#12 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Evidentemente il codice che operava sulle variabili faceva affidamento su di un certo valore della variabile stessa. Quando scrivi:
Codice:
int b = 0; Se non effettui una inizializzazione esplicita, eventuale codice che deve appoggiarsi sul valore di quella variabile, potrebbe non funzionare correttamente, visto che la variabile b "non contiene nulla". Il "tra virgolette" è d'obbligo ovviamente. |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Quote:
Codice:
#include <stdio.h> #include <malloc.h> void main () { printf ("\nInserire i numeri da inserire nel vettore:\n"); int n=1, ins=1, *a; scanf ("%d",&ins); while (ins!=0) { //fin quando non immetto 0 vado avanti con la scansione a=(int *) malloc (n*sizeof(int)); a[n-1]=ins; n++; scanf ("%d",&ins); } int m=media (a, n); printf ("\n\nLa media dei numeri inseriti e': %d", m); } float media (int *a, int n) { int i=0, somma=0; float med; for (i=0; i<=n; i++) { somma=somma+a[i]; } med=somma/n; return med; } Ultima modifica di VegetaSSJ5 : 12-10-2003 alle 11:30. |
|
![]() |
![]() |
![]() |
#14 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
All'estero un programma del genere si chiama brain damaged
![]() Prova così. Molto meglio: Codice:
#include <stdio.h> #include <stdlib.h> int main(void) { int ins = 1, tot = 0, count = 0; printf("\nInserire i numeri da inserire nel vettore, 0 per terminare:\n"); while (ins) { scanf("%d", &ins); tot += ins; count++; } printf("\n\nLa media dei numeri inseriti e': %d\n", (tot / count)); return 0; } |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Quote:
|
|
![]() |
![]() |
![]() |
#16 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Questo tuttavia restituirà una media sempre intera. Se vuoi una media che rispecchi
la realtà (sia decimale) devi usare la funzione div(). Dichiari una variabile di tipo: Codice:
div_t var; Codice:
var = div(a, b); Codice:
var.quot Codice:
var.rem |
![]() |
![]() |
![]() |
#17 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Ti dico che nel ciclo while() del tuo programma si alloca la memoria in modo scorretto. Guarda bene la variabile n prima di entrare nel ciclo while()
![]() |
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
E anche se il valore di n fosse corretto, ci sarebbe un altro problema... Ad ogni ciclo allochi un nuovo blocco di memoria a cui punta la variabile a. Ora quando riallochi la memoria, crei un blocco totalmente nuovo di memoria, non vai ad "ingrandire" quello precedente. Quindi ad ogni iterazione la variabile a punta ad un nuovo blocco e quello vecchio si perde nel nulla da qualche parte nella memoria. Questo fenomeno è noto come "memory leak".
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Quote:
|
|
![]() |
![]() |
![]() |
#20 |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Bene ma leggi il post + su
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:56.