Monday, January 30, 2006

Tarea 2

1)Diferencia de Tiempo;
#include cstdlib
#include iostream
#include stdlib.h
#include time.h
#include sys\timeb.h
using namespace std;

timeb Antes, Despues;

static void Generar(int numero)
{
FILE *Archivo;
Archivo = fopen("C:\\Codigo.txt","w");
for(int i = 0 ; i < numero ; ++i)
fprintf(Archivo,"Numeros[%i] = 0;\n",i);
}

int main(int argc, char *argv[])
{
//Generar(500000);
int Numeros[400000];
int Numeros2[400000];
ftime(&Antes);
for(int i = 0 ; i < 400000; ++i)
Numeros2[i] = 0;
ftime(&Despues);
//float differencia = (float(difftime(Despues.time,Antes.time))) + (float(abs(Despues.millitm - Antes.millitm))/1000);
float timediff = (float(difftime(Despues.time, Antes.time))) + (float(abs(Despues.millitm - Antes.millitm))/1000);
printf("Diferencia de tiempo: %.3f segundos.\n",timediff);

//Hasta aqui me decia el tiempo que tomaba el "for" que en mi caso siempre era de .000 milisegundos.

En la inicializacion por linea no me terminaba de compilar. El IDE me tira error por falta de memoria para compilar. Comoquiera el metodo de For es mucho mas comodo dado que dura mucho menos tiempo compilando. La inicializacion de linea por linea dura demasiado tiempo compilando.

No puedo comprobar mas de 400,000, el programa me da un error desconocido del sistema. Lo mas seguro es por falta de memoria tambien.

2)Analisis de Codigo; Nidia

Sub EsPrimo( ) 'Una subrutina no devuelve valor
Dim numero as Integer
Dim i as Integer
Dim Primo as Boolean
for i = 2 to numero 'numero es igual a 0, no entra en el for
if numero mod i = 0 then
primo = false
'assumiendo que entra al for, el numero que se prueba simpre va a ser primo porque N%N 'siempre es 0.
else
primo = true
end if
next
end sub

sub calcular()
dim i as integer
dim numero as integer
for i = 2 to 541 '...no se que decir
if esprimo(i) then 'sub rutina no devuelve nada, y en este caso no tiene paramentros
esprimo(i) = numero 'asumiendo que esprimo() devuelve un booleana; se esta assignado a un int
dim suma = 0 as integer 'siemre va a dar 541, como es el ultimo numero que se verifica y resetea la suma
suma = suma + numero
end if
next
end sub

P.S.
portando el codigo a mi desktop, me permite un arreglo maximo de 518904.
ya a este nivel se ve que el bucle for toma approximadamente 15 a 16 millisegundos, pero solo cuando hay una diferencia. Mayoria de las veces sale todavia 0 millisegundos de diferencia. Lo mas probable es que se tarde en stack, y por eso se nota la differencia

No comments: