PDA

Visualizza la versione completa : [c] Problemi nel compilare un programma


Suppish
28-02-2010, 17:03
Salve a tutti sono da poco entrato nel mondo dell'informatica a causa di un'esame all'università. Studiavo gli array e i cicli e mi sono imbattuto in uno spezzone di programma che ho cercato di completare e testare. Il gcc è pulito, tuttavia all'esecuzione il programma non funge correttamente. Per la precisione qualora inserisca più di 4 raggi il risultato ottenuto è scorretto. Posto il file sorgente :



#include <stdio.h>

float Areacerchio(float raggio);
int main ()
{
int i = -1, n = 0;
float raggio [5], area [5];
printf ("\n Enter 0 to quit.");
do { i++;
printf("\n Numeri Radius ?");
scanf("%f",&raggio[i]);
area[i] = Areacerchio(raggio[i]);
}
while ((raggio [i] !=0) && (i<5));
n = i;
for( i = 0; i<n; i++)
{
printf("\n Radius = %.2f, Area = %.2f\n", raggio [i], area[i]);
}
return 0;
}
float Areacerchio(float raggio)
{
const float pi=3.14;
float a;
a = pi*raggio*raggio;
return (a);
}




Dove ho sbagliato? Avendo indicato 5 nel valore di Area e raggio non dovrei avere 5 elementi a disposizione?

oregon
28-02-2010, 17:17
"non funge correttamente"

cosa vuol dire di preciso?

Suppish
28-02-2010, 17:22
Che all'esecuzione laddove sfrutto tutti e 5 elementi del mio array il programma mi da dei risultati sballati.
Posto un esempio :


Enter 0 to quit.
Numeri Radius ?1

Numeri Radius ?2

Numeri Radius ?3

Numeri Radius ?4

Numeri Radius ?5

Numeri Radius ?0

Radius = 0.00, Area = 3.14

Radius = 2.00, Area = 12.56

Radius = 3.00, Area = 28.26

Radius = 4.00, Area = 50.24

Radius = 5.00, Area = 78.50

oregon
28-02-2010, 17:24
Originariamente inviato da Suppish
Per la precisione qualora inserisca più di 4 raggi il risultato ottenuto è scorretto.

Ma allora non è un problema di compilazione (come indicato nel titolo) ma di esecuzione ...


Dove ho sbagliato? Avendo indicato 5 nel valore di Area e raggio non dovrei avere 5 elementi a disposizione?

Sì, ma gli elementi sono numerati da 0 a 4 ... quindi, nel tuo caso, devi scrivere

while ((raggio [i] !=0) && (i<4));




P.S. Se modifichi il post originale, dopo una risposta, non si capisce piu' nulla ...

Suppish
28-02-2010, 17:32
Volevo innanzitutto ringraziarti per le dritte che mi hai dato sia per il forum sia per il programma. Il secondo funziona è questo è bene :) , per le prossime discussioni presterò attenzione a quanto mi hai detto. Grazie ancora :ciauz:

Loading