domingo, 14 de noviembre de 2010

Reporte lenguajes imperativos

En este reporte expongo 4 códigos utilizando lenguajes de programación imperativos.
Como les hable en la entrada anterior sobre los lenguajes imperativos son un tipo de lenguaje de programación que tiene como característica es que se basa en procedimientos, o sea, dar instrucciones para que realice algo, su característica es el uso de comandos y variables, inició entre los años 50's.

Las instrucciones se ejecutan una a una, de forma secuencial, aunque a veces sabemos que se encuentran estructuras de control condicionales o bucles.


Fortran
Se centra en la programación cientifica como la fisica y la química, por lo tanto realice este programa en donde te calcula la intensidad, voltaje o resistencia que lo pudiéramos necesitar en clase de fisica.
 program fisica

          real inten, volt, resis
          integer opcion

          write (*,*) 'Que quieres calcular:'
          write (*,*) '1. intensidad'
          write (*,*) '2. voltaje'
          write (*,*) '3. resistencia'

          read  (*,*) opcion

          select case (opcion)
             case (1)
                write (*,*) 'Dame un voltaje'
                read (*,*) volt
                write (*,*) 'Dame una resistencia'
                read (*,*) resis
                inten = volt / resis
              write (*,*) 'Tu resultado es', inten

             case (2)
                write (*,*) 'Dame una resistencia'
                read (*,*) resis
                write (*,*) 'Dame una intensidad'
                read (*,*) inten
                volt = resis * inten
               write (*,*) 'Tu resultado es', volt

             case (3)
                write (*,*) 'Dame un voltaje'
                read (*,*) volt
                write (*,*) 'Dame una intensidad'
                read (*,*) inten
                resis = volt / inten
              write (*,*) 'Tu resultado es', resis
             end select


          stop

          end

Simplemente lo que hace es que por medio de un select, te muestra un menu sobre la cantidad que deseas calcular, tu seleccionas, te pide los datos necesarios, realiza la operación, sale del select y termina el programa.


Es importante saber que como en lenguaje C, en el select (cuyo equivalente es "switch") no es posible obtener el la opción por medio de un numero "real", por lo tanto se utiliza un "integer".

C
Este programa es uno de logica que me gusta mucho en donde te dan la matriz de 20 x 20, con varios numeros y lo que te piden es ¿Cual es el producto mayor de cualesquiera cuatro numeros adyacentes en cualquier dirección ya sea hacia arriba, abajo, izquierda, derecha o diagonal?


Para resolver este problema el código que utilicé fue ir a cada numero desde la posición 3,3 hasta la posición 16, 16 que son en esa tabla en los lugares posibles donde puede encontrar los 4 números consecutivos, e ir checando las 8 veces, arriba, abajo, izquierda, derecha, y las diagonales, utilizando un arreglo bidimensional que contiene los números de esta tabla, en donde utilicé dos ciclos for que fueran modificando las filas y las columnas, para hacer las multiplicaciones correspondientes dado el número ir cambiando las columnas y cuando llegue a la 16, cambie la fila, y condicionales para checar si es mayor de la variable que se estará actualizando en cada producto, para así obtener el resultado.



#include <stdio.h>

int main(int argc, char** args){

int tabla[20][20] = {    { 8,  2, 22, 97, 38, 15,  0, 40,  0, 75,  4,  5,  7, 78, 52, 12, 50, 77, 91,  8},  //las unidades les quite el cero de la izquieda

                            {49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48,  4, 56, 62,  0},  //creamos una arreglo bidimensional de 20 x 20 con los numeros dados

                            {81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30,  3, 49, 13, 36, 65},

                            {52, 70, 95, 23,  4, 60, 11, 42, 69, 24, 68, 56,  1, 32, 56, 71, 37,  2, 36, 91},

                            {22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80},

                            {24, 47, 32, 60, 99,  3, 45,  2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50},

                            {32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70},

                            {67, 26, 20, 68,  2, 62, 12, 20, 95, 63, 94, 39, 63,  8, 40, 91, 66, 49, 94, 21},

                            {24, 55, 58,  5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72},

                            {21, 36, 23,  9, 75,  0, 76, 44, 20, 45, 35, 14,  0, 61, 33, 97, 34, 31, 33, 95},

                            {78, 17, 53, 28, 22, 75, 31, 67, 15, 94,  3, 80,  4, 62, 16, 14,  9, 53, 56, 92},

                            {16, 39,  5, 42, 96, 35, 31, 47, 55, 58, 88, 24,  0, 17, 54, 24, 36, 29, 85, 57},

                            {86, 56,  0, 48, 35, 71, 89,  7,  5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58},

                            {19, 80, 81, 68,  5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77,  4, 89, 55, 40},

                            { 4, 52,  8, 83, 97, 35, 99, 16,  7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66},

                            {88, 36, 68, 87, 57, 62, 20, 72,  3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69},

                            { 4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18,  8, 46, 29, 32, 40, 62, 76, 36},

                            {20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74,  4, 36, 16},

                            {20, 73, 35, 29, 78, 31, 90,  1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57,  5, 54},

                            { 1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52,  1, 89, 19, 67, 48}};

 

    int fila, colu;

    long int arriba, abajo, derecha, izquierda, diag1, diag2, diag3, diag4, respuesta = 0; 

       

     for(fila=3;fila<=16;fila++){ //cambia filas

        for(colu=3;colu<=16;colu++){ //cambia columnas

            arriba = tabla[fila][colu] * tabla[fila-1][colu] * tabla[fila-2][colu] * tabla[fila-3][colu];

            if(arriba > respuesta) 

                      respuesta = arriba;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            abajo = tabla[fila][colu] * tabla[fila+1][colu] * tabla[fila+2][colu] * tabla[fila+3][colu];

            if(abajo > respuesta) 

                     respuesta = abajo;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            izquierda = tabla[fila][colu] * tabla[fila][colu-1] * tabla[fila][colu-2] * tabla[fila][colu-3];

            if(izquierda > respuesta) 

                         respuesta = izquierda;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            derecha = tabla[fila][colu] * tabla[fila][colu+1] * tabla[fila][colu+2] * tabla[fila][colu+3];

            if(derecha > respuesta) 

                       respuesta = derecha;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            diag1 = tabla[fila][colu] * tabla[fila-1][colu-1] * tabla[fila-2][colu-2] * tabla[fila-3][colu-3];

            if(diag1 > respuesta) 

                     respuesta = diag1;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            diag2 = tabla[fila][colu] * tabla[fila-1][colu+1] * tabla[fila-2][colu+2] * tabla[fila-3][colu+3];

            if(diag2 > respuesta) 

                     respuesta = diag2;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            diag3 = tabla[fila][colu] * tabla[fila+1][colu-1] * tabla[fila+2][colu-2] * tabla[fila+3][colu-3];

            if(diag3 > respuesta) 

                     respuesta = diag3;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            

            diag4 = tabla[fila][colu] * tabla[fila+1][colu+1] * tabla[fila+2][colu+2] * tabla[fila+3][colu+3];

            if(diag4 > respuesta) 

                     respuesta = diag4;

            //printf("%d    %d,%d\n", respuesta, fila, colu);

            //system("pause");

        }

 

    }

    printf("Cual es el producto mayor de cualesquiera cuatro numeros adyacentes \n(en cualquier direccion, hacia: abajo, arriba, izquierda, derecha o diagonal)\nen la tabla de 20x20?"); 

    printf ("\n\n%d\n", respuesta); //resultado que siempre iba comparando y actualizando.

    system("pause");

    

} 

Una imagen de lo que realiza el programa y el resultado (ovalo naranja)



Haz clic para agrandar!

Por lo tanto el resultado es 87 x 94 x 97 x 87 = 70,600,674 que se ubica en la diagonal de 12, 6


Pascal
Lenguaje de programación cuyo objetivo es facilitar a los estudiantes el aprender programación.
En este caso, hice un programa que dada la formula:
Calcular el periodo, tiempo minimo al cabo del cual se repiten las condiciones del proceso, de un pendulo simple, sabiendo que a mayor longitud del pendulo mayor sea su periodo.


PROGRAM EJEMPLO;
        USES CRT;
        VAR longi:REAL;
        VAR periodo:REAL;
BEGIN
        

        WRITELN ('Dame solamente la longitud de tu pendulo, te dare su periodo:');
        WRITELN (' ');
        WRITE ('Escribe la longitud: ');     READLN (longi);
        WRITELN (' ');

        periodo:=2*3.1416*(sqrt(longi/9.8));

        WRITE ('Periodo de oscilacion (seg): ');  WRITE (periodo:5:2);
END.
Utilicé la función predeterminada para sacar la raiz cuadrada (sqrt).

Basic
Lenguaje de programación hecho específicamente para personas que se inician en la programación, es relativamente sencillo.
En este caso hice una calculadora para niños que solamente suma, resta, multiplica y divide con una interfaz grafica para ellos.


Este es el código


FMain.class
PUBLIC SUB Button1_Click()
TextBox2.text = TextBox1.text + TextBox3.Text
END

PUBLIC SUB Button3_Click()
TextBox2.text = TextBox1.text - TextBox3.Text
END

PUBLIC SUB Button4_Click()
TextBox2.text = TextBox1.text * TextBox3.Text
END

PUBLIC SUB Button2_Click()
TextBox2.text = TextBox1.text / TextBox3.Text
END

PUBLIC SUB Button5_Click()
TextBox1.Text = ""
TextBox2.text = ""
TextBox3.text = ""
TextBox1.SetFocus
END


Lo que hace simplemente suma, multiplica, divide o resta según el boton que se presione, en la caja de abajo obtendremos el resultado, se tiene un boton para borrar lo que ha hecho.
La interfaz grafica la hice solamente arrastrando los botones y pegando las cajitas de texto, por lo tanto es relativamente sencillo, aqui les dejo la captura de pantalla de la IDE creando lo que es FMain.form



Ahora el resultado en conjunto con el código y la interfaz grafica





Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error. 

3 comentarios:

  1. :o!! Me falto poco para terminar ese codigo en C, creo que su explicacion podre terminarlo compañero.
    Y faltaron las referencias para la IDE de BASIC, sencillo el ejemplo que nos deja ver que a pesar de los años BASIC sigue estando vigente ya que es posible crear nterfaces graficas bastante intuitivas.
    SALUDOS!!!
    PD: Los problemas compañero, ya es lunes!! :s

    ResponderEliminar
  2. Si, la IDE de BASIC es la que vimos en las presentaciones de la profe, Gambas IDE se llama, simplemente te vas a ubuntu software Center o con comandos en terminal, ahi lo encuentras le das New project luego graphical application, y empiezar a utilizarlo, para "codificar" le das clic en los botones y empiezas a poner lo que quieras hacer.

    PD: Si ya estan en proceso los problemas :) jajaja

    ResponderEliminar