2014

Clase 4

Menu Principal | VIM | Clase 1 | Clase 2 | Clase 3

Primera Prueba Lunes 8 de Septiembre 2014.

Condicionales y Loops

La mejor forma de aprender a programar es programando. Hagamos dos programas muy simples (reprodúzcalos) y luego practique con los que se le solicitan

Lee dos números e indica cuál de ellos es el mayor

      mkdir mayor
      cd mayor
      vim main.c

El código espera el ingreso de dos números y luego indica cual de ellos es el mayor.

 #include <stdio.h>

 int main()
 {
   float a = 0.0e0;
   float b = 0.0e0;
   printf("Ingrese un valor para el primer numero : ");
   scanf("%f", &a);
   printf("Ingrese un valor para el segundo numero : ");
   scanf("%f", &b);

   /*Las condiciones*/
   if (a>b)
   {
     printf("El primer numero es mayor.\n");
   }
   else if(a<b)
   {
     printf("El segundo numero es mayor.\n");
   }
   else
   {
     printf("Los numeros son identicos\n");
   }

   return 0;
 }

Compile y ejecute el programa con

 gcc -o mayor mayor.c
 ./mayor

Pregunta por un número hasta coincidir

En este ejemplo el programa pregunta por un número hasta que uno ingrese el número 25.

Creamos nuevamente un directorio para nuestro programa

 mkdir num
 cd num
 vim main.c

El contenido del programa se muestra a continuación

 #include <stdio.h>

 int main()
 {
   float a = 0.0e0;
   while(a!=25)
   {
    printf("Ingrese el numero misterioso >>");
    scanf("%f", &a);
   }
   printf("Lo logro!! dio con el numero misterioso\n");
   return 0;
 }

Compile y ejecute el programa con

 gcc -o mist main.c
 ./mist

Averiguar si un número es par

Para que un número sea par, éste debe ser divisible por 2, es decir la resta o residuo de la división debe ser cero. Para eso utilizaremos el operador %.

Generemos el directorio para nuestro programa

 mkdir pares
 cd pares
 vim main.c

Editamos el contenido del programa. Se ingresan números hasta que se ingrese el valor 0.

 #include <stdio.h>

 int main()
 {
  int x = 0;
  while(x==0)
  {
   printf("Ingresa un numero >> ");
   scanf("%d",&x);
   if(x%2==0)
   {
    printf("El numero %d es par!\n", x);
   }
   else
   {
    printf("El numero %d es impar!\n", x);
   }
  }
  printf("Bye-Bye\n");
  return 0;
 }

Compile y corra el programa

 gcc -o par main.c
 ./par

Cree los siguientes programas

(no es necesario que logre realizar todos los que se listan, pero le servirán para practicar durante la semana)

  • Escriba un programa que indique si el número es par o impar.
  • Desafío : Escriba un programa que indique al ingresar un número si es primo o no.

Una función en C

Vamos a crear dos programa que corresponden a un lanzamiento vertical en la tierra y en la luna, con esa información vamos a graficar tanto la posición como la velocidad para ambos casos.

La idea principal es que los datos de salida los vamos a poner en un archivo para luego graficarlo con gnuplot.

Vamos a generar 1 programa con la capacidad de modificar sólo la aceleración de nuestro sistema (Tierra = -9.8m/s2 y Luna = 1.66m/s2)

Creamos el directorio

 mkdir launch
 cd launch
 vim main.c

Editamos entonces el contenido del fichero esta vez utilizaremos una función y mostraremos en pantalla una tabla con los datos t, x y v.

 #include <stdio.h>

 float position(float t, float a)
 {
  return (a/2)*t*t + 12.25*t;
 }
 float velocity(float t, float a)
 {
  return a*t + 12.25;
 }

 int main()
 {
  float t = 0;
  float a = -9.8;
  while(position(t,a)>=0)
  {
   printf("%f \t %f \t %f \n",t,position(t,a),velocity(t,a));
   t=t+0.1;
  }
  return 0;
 }

El código esta diseñado para que la primera corrida sea ejecutada en la Tierra.

Compile y ejecute

 gcc -o launch-earth main.c
 ./launch-earth

Puede enviar todo el contenido que muestra el programa a un archivo de datos facilmente con

 ./launch-earth > earth.dat

Ahora realice la modificación para ver qué ocurre en la luna, luego de hacerlo, compile y mande el contenido a un nuevo archivo.

 gcc -o launch-moon main.c
 ./launch-moon > moon.dat

ahora grafique ambos archivos con gnuplot.

 gnuplot> plot "earth.dat" u 1:2 w lp, "moon.dat" u 1:2 w lp
  • Gráfique también para las velocidades.
  • Por último utilice un valor más fino para incrementar el tiempo y vea como mejora la precisión en el impacto final. (ej : 0.001)

University

Personal

edit SideBar