Contador hacia atrás

12 enero 2007
jralbendin

PensandoVamos a comenzar una serie de problemas relacionados con la programación. En este primer caso, voy a exponer tres programas escritos en C y tenéis que responder razonadamente a las siguentes preguntas:

  • ¿Sabríais decir cuál será la salida de cada uno de ellos?
  • ¿Sabríais decir cuál tardará MENOS y cual MÁS en ejecutar

Sería estupendo que respondiéseis sin necesidad de ejecutar el código. Pero me conformo con que vuestra contestación sea correcta. Programa #1

#include  int main()
{
int counter=(int)1e8;
while (counter>0){
counter--;
}
printf("Contador: %d",counter);
return 0;
}

Programa #2

#include  int main()
{
float counter=(float)1e8;
while (counter>0){
counter--; }
printf("Contador: %f",counter);
return 0;
}

Programa #3

#include  int main()
{
double counter=(double)1e8;
while (counter>0){
counter--;
}
printf("Contador: %lf",counter);
return 0;
}
  • Cuestion 1.-

    Programa 1
    El ejercicio tal y como esta planteado no compila,debido a que falta definir la libreria ademas de no incluir el getchar() por lo que no imprimiria ningun resultado.
    En cuanto al ejercicio esta formado por una variable de tipo entero a la que se le asigna el valor 1*10 elevado a 8,a continuacion un bucle que mientras dicha variable sea mayor que 0 cuente hacia atras, es decir la salida del programa seria 0.

    Programa 2
    El ejercicio tal y como esta planteado vuelve a no compilar,debido a que falta definir la libreria ademas de no incluir el getchar() por lo que no imprimiria ningun resultado.
    En cuanto al ejercicio esta formado por una variable flotante a la que se le asigna el valor 1*10 elevado a 8,a continuacion un bucle que mientras dicha variable sea mayor que 0 cuente hacia atras, es decir la salida del programa seria 0.

    Programa 3
    El ejercicio tal y como esta planteado tampoco compila,debido a que falta definir la libreria ademas de no incluir el getchar() por lo que no imprimiria ningun resultado.
    En cuanto al ejercicio esta formado por una variable double a la que se le asigna el valor 1*10 elevado a 8,a continuacion un bucle que mientras dicha variable sea mayor que 0 cuente hacia atras, es decir la salida del programa seria 0.

    Cuestion 2.-

    *El programa que tarda menos en compilar es el 1º ya que la definicion de las variables con el tipo int (entero)hace que la cuenta de numeros se haga solamente con enteros y por lo tanto su ejecucion seria mas rapida.

    * El programa que tarda mas en ejecutarse seria el 3º ya que utiliza el tipo de variables double que se utiliza para una gran cantidad de decimales, al tener que contar mas numero de decimales que otros tipos su ejecucion seria la mas lenta de las 3.

  • EJERCICIO(1)

    1º El ejercicio tal y como esta planteado no complica debido a ciertos fallos como por ejemplo: hay que incluir la libreria en el include, luego el int main() no esta bien colocado, viene despues del include. Por lo demas esta bien.
    Pues bien una vez resueltos los problemas el ejercicio complila. Este ejercicio es un contador hacia atras, definido el contador, entra ene l bucle mientras sea mayor que 0, el contador va disminiyendo hasta que llega a 0. Al final del programa el contador tiene un valor de 0.

    2ºEn princicio este ejercicio no compila al igual que el anterior. Creo que tiene los mismos problemas. Se resuelven, pero esta vez no me da ninguna salida.

    3ºAl igual que los anteriores tien lo mismos fallos de sintagsis y solo el 1º me da de salida que el contador hacia atras es igual a 0 debido a que es un numero entero y los demas no.

    EJERCICIO(2)

    En principio no sabria decir cual tardaria mas y cual menos en ejecutarse pero en el caso de que funcionaran por logica me voy arriesgar y voy a decir que el 1º aunque no toy seguro.

  • Bueno la única diferencia entre los 3 programas es el tipo de variable: int,float y long float.
    Tardarían menos los int ya que su tamaño en bytes es más pequeños.
    Los int son de 4 bytes, los float 8 bytes y los long float 16 bytes; Por lo tanto los int son más rapido en la ejecución al tener menos tamaño y los long float más lentos en la ejecución por tener más tamaño.

  • Yo creo , que en el hipotético de que funcionaran, la respuesta de sendos ejercicios y a la primera pregunta, es 0,. ya que todos contarian hacia atrás hasta llegar a 0.

    Estan ordenados de menor a mayor tiempo de trabajo, ya que uno trata numeros enteros, otro floats, y otro dobles. Por la reserva de memoria y el numero de operaciones, es obvio que tardará menos el que utiliza INT y más el que emplea DOUBLE.

  • La salida del primero seria «0».

    La salida del segundo, seria todos los numeros de 1e8 hasta 0 de forma descendente.

    La salida del tercer programa seria «0.0000» creo

    El codigo que se ejecutaria antes, seria el de valor entero, ya que sus variables son de menor tamaño, quizá tarden lo mismo pero, creo que seria así.

Los comentarios están cerrados.