|
|||||||
|
|
|
![]() |
|
|
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 12: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 12: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 12: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: 00:05.



















