View Full Version : [C]Errore relativo
The_ouroboros
13-04-2009, 16:01
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,i, diff;
puts("Numbers :");
scanf("%d", &n);
int res[n], res_d[n];
puts("\tGauss Formula");
for(i = 0; i < n; i++)
{
res[i] = (i*(i+1))/2;
printf("( %d ) = %d\n", i , res[i]);
}
puts("\tAsinptotic formula");
for(i = 0; i < n;i++)
{
res_d[i] = i*i/2;
printf("( %d ) = %d\n", i , res_d[i]);
}
puts("\tError");
// for(i = 0; i < n;i++)
// {
// diff = (int)(abs(res_d[i]-res[i])/res[i])*100;
// printf("( %d ) = %d\n", i , diff);
// }
return 0;
}
Il problema è il codice commentato...mi da errore di lettura/scrittura in memoria.
Ciao a tutti e buona pasquetta.
stdecden
13-04-2009, 17:23
Temo che non sia possibile, o almeno non standard dichiarare array dinamici in questo modo:
int res[n], res_d[n];
Prova con:
int *res = (int*)malloc(n * sizeof(int));
int *res_d = (int*)malloc(n * sizeof(int));
...
free(res);
free(res_d);
Comunque non so esattamente cosa causi l'errore
Volutomitra
13-04-2009, 17:34
Temo che non sia possibile, o almeno non standard dichiarare array dinamici in questo modo:
int res[n], res_d[n];
Prova con:
int *res = (int*)malloc(n * sizeof(int));
int *res_d = (int*)malloc(n * sizeof(int));
...
free(res);
free(res_d);
Comunque non so esattamente cosa causi l'errore
Inoltre, quando i = 0, res[0] = res_d[0] = 0 (sono interi) e quindi c'è uno 0/0 nel codice commentato.
The_ouroboros
13-04-2009, 18:33
Ho sistemato i cicli partendo da 1 e il malloc ma..
Ora mi da il primo 100 di errore e poi sempre 0... non riesco a capire ma sembra che l'errore sia qui
diff = (int)(abs(res_d[i]-res[i])/res[i])*100;
printf("( %d ) = %d\n", i , diff);
stdecden
13-04-2009, 19:10
Prova a scrivere:
diff = (int)((abs(res_d[i]-res[i])/(float)res[i])*100);
The_ouroboros
13-04-2009, 22:31
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void write_out(int n, FILE *file);
int main()
{
int n;
puts("Numbers: ");
FILE *file = fopen("out.txt","a+");
scanf("%d", &n);
fprintf(file,"## Difference between Gauss' formula and asimptotic formula for %d numbers ## \n", n);
if(n > 80) { puts("Error: Out of range!"); fclose(file); getchar(); return 0; }
write_out(n, file);
fclose(file);
return 0;
}
void write_out(int n, FILE *file)
{
int i, diff;
int *res = (int *)malloc(n * sizeof(int)),
*res_d = (int *)malloc(n * sizeof(int));
fprintf(file,"\tGauss Formula for %d numbers\n", n);
for(i = 1; i < n; i++)
{
res[i] = (i*(i+1))/2;
fprintf(file,"( %d ) = %d\n", i , res[i]);
}
fprintf(file,"\tAsinptotic formula for %d numbers\n", n);
for(i = 1; i < n;i++)
{
res_d[i] = i*i/2;
fprintf(file,"( %d ) = %d\n", i , res_d[i]);
}
fprintf(file,"\tError for %d numbers\n", n);
for(i = 1; i < n;i++)
{
diff = ((abs(res_d[i]-res[i])/(float)abs(res[i]))*100);
fprintf(file,"( %d ) = %d%% \n", i , diff);
}
free(res);
free(res_d);
}
// :-
Il codice finale, se servisse a qualcuno
wizard1993
14-04-2009, 10:55
Temo che non sia possibile, o almeno non standard dichiarare array dinamici in questo modo:
int res[n], res_d[n];
Prova con:
int *res = (int*)malloc(n * sizeof(int));
int *res_d = (int*)malloc(n * sizeof(int));
...
free(res);
free(res_d);
Comunque non so esattamente cosa causi l'errore
è perfettamente lecito secondo c99
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.