[C con Clase] ejecutar un algoritmo

Alejandro alepelexo en yahoo.es
Jue Abr 24 16:26:07 CEST 2008


¡Hola Pablo!

Antes de nada, decir que este va a ser el primer mensaje en el que presto algo de ayuda a 'novatos' (como lo fui yo en su día, hace un año y unos meses), así que si se pasa alguno de los grandes entendidos de la lista por aquí, hazles a ellos más caso que a mí... xD

Lo primero que decirte es que, si mis cálculos no fallan, tu vector es de 11 y no de 10 elementos como tú dices, pero no tiene mucha importancia...  Conozco tu problema, y debo decir que a mi fue algo de lo que más me frustró cuando empecé a progrgamar. La diferencia es que yo utilizaba C++ y, al parecer, tú usas C. Si tu lenguaje fuese C++ sería fácil de solucionar. Simplemente añadirías las dos siguientes líneas al comienzo del archivo:

#include <iostream>
using namespace std;

Y al final del main, antes del "return 0;", añadirías "cin.get();". Con esto conseguirías mantener el programa abierto hasta que pulsases "Enter", si no recuerdo mal. Creo que se habla sobre esto al final del curso de C con Clase, en el primer apartado de ejemplos. Ahora, usando C, se me ocurren varias maneras de solucionarlo:

1.- Con un bucle. Sería una manera un tanto "rústica" y muy muy inexacta. Simplemente añade un bucle al final del tipo:

   for(i = 0; i < 1000000000; i++);

Y probablemente el programa tarde un rato en cerrarse, dependiendo de la velocidad de tu máquina.... Como ves, no es my útil, ya que no es exacto cuanto tiempo se va a quedar abierto y depende de la máquina.

2.- Controlando el tiempo. Habría que incluír el fichero de cabecera "<time.h>". Crearíamos dos variables que serían "int time_inicial, time_final;" que llevarían a cabo el timing o control de tiempo de espera de la siguiente forma (el código se añadiría antes del "return 0;"):

   time_inicial = time(NULL);
   time_final = time(NULL);
   while(time_final-time_inicial < 10)time_final = time(NULL);

La función "time(NULL)" lo que hace es retornar la hora del sistema, si mal no recuerdo, y de esta forma lo que haces es esperar 10 segundos (que es la cantidad que puse en el bucle "while").

3.- Por último, podríamos esperar a que el usuario pulsase "ENTER" para salir, de una manera similar a como lo hace "cin.get()". La manera de hacerlo es muy simple, sólo hay que añadir antes del "return 0;" las siguientes líneas:

   printf("\nEscriba 'q' y pulse enter para finalizar: ");
   scanf("%s", espera);

La verdad es que el método está muy poco perfeccionado, ya que da igual que escribas 'q' o 'c' o '1', el programa finalizará de todos modos. La variable "espera" es una cadena del tipo "char espera[16]". Una manera un poco más 'correcta' de hacerlo sería la siguiente:

   while(quit == 0)
   {
       printf("\nEscriba 'q' y pulse enter para finalizar: ");
       scanf("%s", espera);
       if(espera[0] == 'q')quit = 1;
       else printf("Opcion incorrecta.\n");
   }

De esta forma comprobamos que haya puesto 'q' y no otro caracter.

Espero que te haya servido. Un saludo.


El pasado 2008-04-24 03:13:50, Pablo escribió:
 
P> Hola de nuevo listeros!!!
P> estoy usando Dev-C++ y elabore este algoritmo que carga por teclado un
P> vector de 10 elementos, la pregunta es como puedo hacer para q este y todos
P> los programas que haga no me desaparezca la venta al terminar de ejecutar un
P> programa. no quiero estar yendo a la símbolo del sistema cada ves que quiera
P> probar un .exe, como quedaría este algoritmo con lo solicitado, muchas
P> gracias!
P> # include <stdio.h>
P> int main()
P> {
P> int vector[11], i=0;
P> while (i<=10){
P>     printf("ingrese el elemento V[%d]",i);
P>     scanf("%d",&vector[i]);
P>     i++;}
P> return 0;
P> }
P> _______________________________________________
P> Lista de correo Cconclase Cconclase en listas.conclase.net
P> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
P> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Más información sobre la lista de distribución Cconclase