PROGRAMACION SECUENCIAL Y DESARROLLO DE ALGORITMOS.

 

INTRODUCCION:

 

Los  ordenadores deber su existencia y su utilidad, precisamente a su capacidad de efectuar varios cálculos que no pueden realizar los seres humanos. Deseamos que la computadora efectúe lo que nunca podríamos hacer nosotros, y la potencia de las maquinas actuales es tal, que inclusive los cálculos pequeños, por su tamaño, escapan al poder de nuestra imaginación limitada.

 

Sin embargo debemos organizar el calculo de manera tal que nuestros limitados poderes sean suficientes para asegurar que se establecerá el efecto deseado. Esta organización incluye la composición de los programas.

 

Los avances en la tecnología siempre van parejos con progresos en los lenguajes de programación y con nuevas ayudas para simplificar el uso del computador, con lo cual un numero mayor de usuarios se beneficia de el. Pero la necesidad de hacer programas para resolver problemas específicos quizás nunca desaparecerá.

La programación intenta establecer una secuencia de acciones que puedan ser ejecutadas por el procesador y que realicen un determinada tarea.

Las fases son en primer lugar la resolucion del problema propuesto mediante por supuesto un algoritmo y en segundo lugar la adaptación del algoritmo al PC y codificar el algoritmo en un lenguaje que el ordenador pueda comprender:

 

CONCEPTO DE ALGORITMO:

 

Concepto de algoritmo

 

Es un conjunto de sentencias pertenecientes de un pseudolenguaje en un determinado orden (secuencia de control) y finitas en un número que resuelve un problema.

El algoritmo se compone de acciones es decir, de etapas en la realización de este. Existe otro tipo de acciones que son las acciones primitivas que son las acciones que el procesador puede ejecutar sin necesidad de información suplementaria. En base a esto un algoritmo seria la secuencia ordenada de acciones primitivas que realizan un trabajo.

Siempre a la hora de escribir un algoritmo hay que tener en cuenta tres cosas principalmente como son:

 

La determinación de las primitivas de las que se parten.

El lenguaje o pseudolenguaje a utilizar.

La representación de los datos.

 

Aparte de estos tres mas importantes hay otros puntos a tener en cuenta como por ejemplo establecer datos de entrada (variables); establecer datos de salida; y como no establecer las correspondientes relaciones entre datos de entrada y salida.

 

Un algoritmo debe cumplir un serie de condiciones como son:

Ser finito:

 

Un algoritmo debe finalizar tras un numero finito de pasos.

Estar bien definido:

Para que todas las definiciones de los datos de entrada devuelvan los mismos datos pedidos a la salida:

Asi  al la vista de la gente parece que no hay muchas diferencias entre algoritmo y programa  y es que en verdad la unica diferencia que los hace distintos es que los algoritmos no son pueden ser interpretados por el ordenador si no que deben ser traducidos al lenguaje de programación correspondiente para poder ser compilados y ejecutados.

 

ESTRUCTURA SUPERFICIAL DE LOS ALGORITMOS:

 

 

Los datos pueden ser de varios tipos:

Ø      De entrada.  

Ø      De salida.

Ø      Internos o de proceso (ofrecen resultados).

 

Hay al igual que los datos aciones de..

Ø      Entrada: reogen los datos para el trabajo.

Ø      Proceso: ejecutan los calculos.

Ø      Salida: ofrecen resultados.

 

 

 

 

 

TIPOS DE ALGORITMOS (NOTACIONES ALGORITMICAS):

 

Ø      Ordinogramas / organigramas (diagramas de flujo):

 

 

Concepto:

Un diagrama de flujo es una representación gráfica de la secuencia de pasos a realizar para producir un cierto resultado, que puede ser un producto material, una información, un servicio o una combinación de los tres. Se utiliza en gran parte de las fases del proceso de Mejora Continua, sobretodo en Definición de proyectos, Diagnóstico, Diseño e Implantación de soluciones, y Mantenimiento de las mejoras.

Para elaborar un diagrama de flujo se utilizan diversos símbolos según el tipo de información que contengan (proceso, decisión, base de datos, conexión, etc.).

 

 

Cómo interpretar un diagrama de flujo:

Existen dos niveles de interpretación, comprensión del proceso y mejora del mismo. La mejor manera de adquirir conocimiento sobre un proceso en curso es recorrer el proceso representado en el diagrama de flujo, paso a paso, siguiendo el flujo indicado por las flechas. Por esto, y dado que los equipos de mejora suelen estar constituidos por representantes de departamentos que sólo conocen en profundidad una de las partes del proceso, es recomendable plantearse como primer objetivo el de adquirir un mejor conocimiento común completo del proceso en su conjunto.

El error más común es no documentar el proceso real o no actualizarlo.

 

 

Cómo elaborar un diagrama de flujo:

1. Discutir la utilización del diagrama de flujo.

2. Decidir sobre el resultado de la sesión.

3. Definir los límites del proceso, identificando el primer y último paso necesarios.

4. Documentar cada paso secuencialmente.

5. En puntos de decisión o bifurcación escoger una rama.

6. Seguimiento del proceso desconocido, tomar nota y continuar.

7. Repetir los pasos 4, 5 y 6 hasta alcanzar el último paso del proceso.

8. Retroceder y trazar el diagrama de las otras ramas siguiendo el mismo proceso.

9. Revisión completa sin omitir pequeños bucles o casos especiales.

10. Decidir cómo rellenar aquellas partes del proceso que no son bien conocidas.

11. Analizar el diagrama una vez seguros de que el diagrama está completo

 

 

 

Ø      Arboles de decisión:

 

Aproximan funciones discretas, clasificando las instancias yendo de la raiz hasta las hojas. Testeando en cada nodo un atributo y bajando por la rama apropiada al valor de la instancia. Repitiendose el proceso hasta llegar a una hoja, a donde esta el resultado.

 

 

 

 

 

 

 

 

Ø      Tablas de decisión:

 

Muchos procesos de toma de decisiones se pueden solucionar por medio de las tablas de decisión, en las que se representan los elementos característicos de estos problemas:

·        Los diferentes estados que puede presentar la naturaleza: e1, e2, ..., en.

·        Las acciones o alternativas entre las que seleccionará el decisor: a1, a2,...,am.

El formato general de una tabla de decisión es el siguiente:

 

Forma general de una tabla de decisión

 

Estados de la Naturaleza

Alternativas

 

e1

e2

. . .

en

a1

x11

x12

. . .

x1n

a2

x21

x22

. . .

x2n

. . .

. . .

. . .

. . .

. . .

am

xm1

xm2

. . .

xmn

 

Ø      Pseudocodigo ó pseudolenguaje:

 

 

*explicado posteriormente al hablar de la creación de el pseudocodigo: metrica 3 (ASI).

 

 

ESTRUCTURAS DE CONTROL:

 

 

Son aquellas estructuras  con las que podemos llevar a cabo nuestros programas y algoritmos.

Se puede realizar cualquier tipo de problema con la unica aplicación  de 3 estructuras de control:

  1. condicon;
  2. interacción:
  3. secuencia;

 

1.-Estructuras condición: Es el punto en el algoritmo en el que se condiciona el estado del proceso y se tienen dos o una alternativa; cuando es Verdadera o Falsa.

2.-Estructuras de iteración: Es un mecanismo de lazo. Permite repetir varias veces un grupo de pasos, hasta que se satisfaga esta condición. La repetición puede programarse para  un cierto número de veces.

3.- Estructura de control de secuencia: Es un grupo de instrucciones que se ejecuta en orden, de la primera a la última. Una acción hasta que se vuelva Verdadera la condición.

 

                

 

CONCEPTOS...

*Ciclo condicional: “Mientrasque no cumpla la CONDICION, no realiza ACCIONES”; osea, cuando la condición que se le impone no es verdadera, no se realiza el siguiente paso y se repite el ciclo hasta que la condición sea verdadera.

*Ciclo definido: Es un ciclo condicional en el que el número de veces que se repite la acción estan definidos por el programa, o bien, un algoritmo en el que hay un comienzo y un final.

*Ciclo infinito:  Es el ciclo que se repite y se repite sin límite alguno.

*Iteración: se le atribuye al proceso de repetir una acción.

*Contador: es un dispositivo que cuenta el número de veces que se repite

 

Los pasos a seguir para resolver correctamente un problema:

 

Ø      Comprensión del problema

Ø      Desarrolo de un plan para resolver el problema

Ø      Realización del plan

Ø      Evluación de la solución

 

 

En el progreso de la programación también se sigue un procedimiento.....

 

Ø      Definición del problema

Ø      Desarrollo, refinamiento y pruebas del algoritmo

Ø      Escritura del programa

Ø      Pruebas y depuración del programa

 

 

Ø      PSEUDOCODIGO DE LA CLASE:

Ø      PSEUDOLENGUAJE: METRICA 3 (ASI):

 

En el pseudocódigo emplearemos un enfoque imperativo

Notación algorítmica:

— Palabras clave

— Lenguaje natural sintaxis libre

— Sangrado o indentación

— Empleo de comentarios

Las principales ventajas son: la Flexibilidad y como no la Legibilidad.

 

Los elementos de una notación son o pueden ser:

— Léxicos: símbolos indivisibles mínimos.

• Combinaciones mínimas de caracteres

• Símbolos gráficos

— Sintácticos: reglas para combinar jerárquicamente elementos léxicos.

• Construcción de sentencias

• Uniones válidas de símbolos gráficos

— Semánticos: reglas que aseguran que los elementos sintácticos tienen significado.

 

• Compatibilidad de tipos

 

 

Ø      ESTRUCTURA DE ALGORITMO

Sera:

 

ALGORITMO nomre_algoritmo

      VARIABLE

    

      FIN VARIABLE

     

     CONSTANTE

 

      FIN CONSTANTE

      INICIO

     

     

     

      

      FIN

FIN_ ALGORITMO

 

 

 

 

Los comentarios seran:

 

\\-----------------------           ó           \\*----------------------------

                                                           ----------------------------

                                                           -----------------------------*\\          

 

Ø      Concepto de variable: Posición de memoria que almacena un dato cuyo valor puede cambiar durante la ejecución.

En las variable, se pone la declaración de las variables que se usan en el modul, area, bloque …principal.

 

                                

Ø      Concepto de constante: Posición de memoria que almacena un dato cuyo valor NO puede cambiar durante la ejecución.

En las constantes se pone la declaracion de las constantes que se usan en el modulo, área, bloque…principal.

 

NOTA: El nombre de las palabras reservadas se pone en mayuscula.

             El nombre de variables y constantes:

-         tamaño ilimitado.

-         En minuscula.

-         Sin restricción de caracteres.

Las variables serán de los siguientes tipos:

-         entero

-         carácter

-         real

-         booleano

 

Ejemplos de inicialización:   - ENTERO Aux.=3;

                             - ENTERO Aux.=3, var.=7;

 

TIPOS:

 

La representación de las constantes en el algoritmo sera:

 

CONSTANTE

    Nombre _ constante  (valor o literal)

                  Ej: numero _ veces 10;

FIN CONSTANTE

 

Ø      SALIDA STANDARD (STOUT).

 

ESCRIBIR ( )

                 Lo que quiero que aparezca por pantalla.

 

-         Ej: ESCRIBIR (“es par”);

-         Ej2: ESCRIBIR (a + 1);

                                    

                                                       Variable entero.

-         Ej3: ESCRIBIR(expresión);

                                         

                                 

1)      se evalua la expresión.

2)      El resultado se imprime por pantalla.

 

 

 

Ø      EXPRESIONES:

 

Son un conjunto de datos y operadores con unas reglas específicas de construcción.

Los operandos pueden ser también valores retornados por funciones. En la obtención del resultado se debe tener en cuenta el orden de prioridad de los operadores.

En función del resultado las expresiones se pueden clasificar en:

 

-         NUMERICAS: Con resultado numérico, utilizan operandos y operadores aritméticos.

Ej.: num./2+cantidad

-         ALFANUMERICAS: Con resultado de una cadena de caracteres y utilizan operadores alfanuméricos.

Ej: nombre+apellido1+apellido2

Y esto con valores nombre=”miguel”, apellido1=”Martínez”, apellido2=”moreno”.

Quedando como resultado: “Miguel Martines Moreno”.

-         LOGICAS O BOOLEANAS: Con resultado verdadero (V) ó falso (F).

                                                                         Utilizan operadores relacionales y logicos.

                  Ej: A>25 y (B+C) < D/2.

 

Ø      LECTURA: ENTRADA STANDARD(STDIN):

 

LEER ( );

 

                                              Nombre _ variable (leido cuando le doy al INTRO).

 

                        EJ: LEER (a);

 

Ø      ESTRUCTURAS DE CONTROL.

 

Ø      SECUENCIAS:

 

NOTA: Una línea es una instrucción que acaba en (;). A excepción de las otra estructuras de control.

 

 

                          

La instrucción más importante que permite cambiar el estado inicial de un programa y de sus variables se denomina: ASIGNACION.

La instrucción de asignación es: VARIABLE=EXPRESION.

 

A)    El igual se utiliza para la asignación.

B)     La parte de la izquierda de la asignación solo puede ser el nombre de una variable.

C)    La parte derecha de una asignación siempre sera una expresión.

D)    El proceso o ejecución de un asignación se hace con los pasos siguientes:

Ø      Se evalua la expresión dando como resultado un valor.

Ø      Se ve si es compatible el tipo del valor y el tipo de la variable.

Ø      Si no son compatibles, ERROR.

Ø      Si son compatibles el valor machaca al valor que tenia anteriormente la variable.

 

*la variable que esta en la parte izquierda puede aparecer como operando en la parte derecha.

 

Ø      ESTRUCTURAS IPERATIVAS. (hay 3 tipos:)

 

1.              MIENTRAS (condicion)

                          “cuerpo del bucle”

          FIN _ MIENTRAS

 

Funcionamiento: en primer lugar todo lo que coloque dentro se llama cuerpo del bucle en el cual puedo hacer cualquier instrucción en cualquier orden y cantidad.

la conclusión es un tipo de condicion que al evaluarse da como valor V ó F.

Finalizada la instrucción de antes del mientras se evalúa la expresión, si dicha expresión da como valor F la secuencia o flujo de ejecución se encuentra inmediatamente después del FIN _ MIENTRAS.

Si por el contrario el valor que me da a evaluar la expresión es verdadero V el flujo se introduce en el cuerpo del bucle. Cuando se ejecuta la ultima instrucción del cuerpo el flujo vuelve al mientras evaluándose denuevo la expresión.

Mientras que la condicion es verdadera se ejecuta el cuerpo del bucle, cuando sea falsa saltara el flujo hasta justo después del FIN _ MIENTRAS.

 

2.              REPETIR

                    “cuerpo del bucle”

                 HASTA (condicion).

 

Funcionamiento: ejecutado la instrucción que hay antes del repetir  se introduce en                  el cuerpo del bucle, llegado al hasta se evalúa la expresión; si es V pasa a la instrucción     que este después del HASTA. Se la condicion es F el flujo vuelve al principio del   cuerpo. Como se observa en el cuerpo se ejecuta siempre como mínimo una vez.

 

Si puedo poner tanto un MIENTRAS como un HASTA se cumple que: si tengo una condicion en mientras la condicion de REPETIR será F.

 

3.              HACER

                      “cuerpo del bucle”

                MIENTRAS (condición)

 

Funcionamiento: IDEM al mientras pero con la diferencia de que como minimo el cuerpo se ejecuta una vez.

 

Ø      ESTRUCTURAS CONDICIONALES:

 

  1. CONDICION:

 

SI (CONDICION) ENTONCES

          “CUERPO DEL BUCLE”

FIN _ SI

 

Funcionamiento: ejecutado la instrucción anterior a si se evalúa la condición que será una expresión relacional o lógica, si el resultado es verdadero el flujo se introduce en el bucle, por el contrario si es falsa salta a la instrucción siguiente a FIN _ SI.

 

  1. SI (CONDICION)ENTONCES

                            <<BLOQUE V>>

            SI NO

                             << BLOQUE F>>

            FIN _ SI

 

Funcionamiento: Ejecutada la instrucción anterior al SI se evalúa la condición, si el resultado es V se ejecuta el bloque V y no el bloque F, siguiendo el flujo por la instrucción que haya después de FIN _ SI. Si la evaluación es F se ejecutara el bloque F.

    

  1. SI (CONDICION1)ENTONCES

                      <<BLOQUE1>>

      SINO SI (CONDICION2)

                     <<BLOQUE2>>

      SINO SI

 

              …………

           SINO SI (CONDICION ‘N’) ESNTONCES

                               <<BLOQUE ‘N’>>

           FIN _ SI.

 

Funcionamiento: Ejecutada la instrucción anterior al SI se evalúa la condición 1, si el resultado esV se ejecuta el bloque 1 siguiendo el flujo por la instrucción siguiente a FIN _ SI. Si la condición 1 es falsa se evalúa la condicion2. y así hasta llegar a la ultima condición verdadera.

Solo se ejecuta el primer bloque verdadero, si todas las instrucciones son falsas no se ejecuta ninguna. Cuando me encuentro una condición verdadera se ejecuta y pasa a la condición posterior a FIN _ SI.

 

 

 

 

 

 

 

 

 

Ø      SELECTOR

 

SELECTOR (EXPRESION)

            CASO1: (BLOQUE1)

                             FIN:

            CASO2: (BLOQUE 2)

                             FIN:

            CASO3: (BLOQUE3)

                       FIN:

CASON: (BLOQUE N)

                   FIN:

DEFECTO:

             (BLQUE DEFECTO)

                     FIN:

FIN SELECTOR

 

Funcionamiento: ejecutada la instrucción del selector, se evalúa la expresión (entero, carácter o real) y dado el valor que sea se determina si coincide con alguno de los distintos casos, se ejecuta su bloque, opcionalmente después del bloque tenemos la instrucción FIN. Si existe esa instrucción el flujo prosigue por la instrucción que haya después del FIN _ SELECTOR; si no tenemos esa instrucción se ejecuta el bloque siguiente hasta llegar a un FIN: o a FIN _ SELECTOR.

El caso defecto es opcional y se aparece el bloque se ejecuta en 2 ocasiones:

-         Cuando el valor de las expresión no coincide con los valores dados.

-         Cuando entre el bloque que se ejecuta y defecto no haya ninguna instrucción de FIN:

 

Ø      VECTORES, MATRICES Y SECUENCIAS:

 

  1. VECTORES:

 

Son estructuras estáticas y su tamaño no varia a lo largo del tiempo. Es un conjunto finito de datos homogéneos y por lo tanto del mismo tipo, almacenados en memoria dinámica.

Un vector como una variable tiene asociado unos nombres pero no hace referencia a un solo dato sino a ‘n’ datos.

Un dato de un vector queda referenciado mediante 2 elementos:

-         el nombre del vector.

-         Un entero denominado índice que identifica la posición de dicho dato dentro del vector.

 

REPRESENTACION:

                   

Array o vector:

 

 

 

 

 


                                                                                                                 

Los vectores tienen:

 

 

Un vector es una estructura unidimensional. Y para acceder a cualquier posición habrás que decir que el nombres del vector y el nombre del elemento que quiero y lo podré modificar.

Los vectores se  utilizan para guardar temporalmente datos del mismo tipo con el fin de manipularlos.

 

VARIABLE _ VECTOR:

 

Tipo _ Base                            mombre_vector [c_i... c_s]

 

 

 


-         Entero

-         Real                                   literal entero, constante

-         Carácter                                             Ej.: ENTERO números[5..27]

-         Booleano

INSTRUCCIONES

 

LEER (numero [7]); //guardar en posición 7.

ECRIBIR (numero[i]); //mostrar por pantalla el elemento con posición 26.

 

ESTRUCTURA DE RECORRIDO:

 

ENTERO vector [1...20]

INICIO

Contador=1 // posición en la que se guarda.

MIENTRAS (contador<=20)

LEER (vector [contador];

Contador=contador +1;

FIN MIENTRAS

 

*El contador con vectores lo llamaremos índice.

 

Cont.=20;

MIENTRAS (Cont.>0)

ESCRIBIR (vector [contador];

Cont.=contador+1;

FIN _ MIENTRAS

 

  1. MATRICES:

 

Son estructuras de información. IDEM al los vectores, considerando en este caso que un elemento queda identificado mediante dos números enteros el primero que representa lo que seria la FILA, y el segundo que conocemos como COLUMNA. Esto significa que una matriz es una estructura bidimensional.

Considerando lo mencionado respecto a la dimensión de un vector y una matriz podemos generalizar las definiciones de la siguiente manera: Un array ‘n’ dimensional es una estructura estática de información que contiene ‘m’ elementos y que cada elemento queda identificado por 2 cosas:

-         1. nombres del array.

-         2. Índices que identifican su posición (tantos como dimensiones).

 

DEFINICION:

 

      Tipo_base                             nombre_matriz [c_i1...c_s1, c_i2...c_s2]

 

 

 


                      REAL

                      ENTERO                  1Dimensión                                         2Dimensión

                      CARACTER

                      BOOLEANO

                   

 

 

 

 

ESTRUCTURA DE RECORRIDO:

 

ENTERO matriz [1...5; 1...7]

INICIO

LEER (matriz [2,3];

ESCRIBIR (matriz [2,1]); // el resultado sera un entero.

Índice_1=1;

MIENTRAS (Índice_1<=5)

Índice_2=1;

MIENTRAS (indice2<=7);

Operar (matriz [indice1, indice2];

Indice2=indice2+1;

FIN _ MIENTRAS

Indice1=indice1+1;

FIN _ MIENTRAS

FIN

 

 

 

 

 

 

ESTRUCTURAS ‘N’ DIMENSIONALES:

 

Tipo _ base   entero estructura [c_i1...c_s1; c_i2...c_s2;……., c_In...c_sN]

  

     ESTRUCTURA [X, Z, Y,………, N] // Son ‘n’ elementos que al evaluarlos dan un             entero como resultado.

 

3. SECUENCIAS:                   STRING                  JAVA

                                                 VECTOR DE CARACTERES              C ó C++        

 

Estructura estática de información la cual guarda o almacena caracteres del código ASCII. En su definición tiene asociada una longitud que indica el nº máximo de caracteres que puede contener.

Podemos considerar una secuencia como un caso especial ó excepción de los vectores de caracteres. 

 

DEFINICION:    Secuencia _ palabra [valor _ entero];

 

LEER SECUENCIA:

 

Tendrá parte de vector y parte de variable.

 

LEER (palabra);                           1) primera tecla                  palabra[1]

                                                     2) segunda tecla                 palabra [2]

 

                                                                      …………………..

 

                                                    10) décima tecla                   palabra [10]

                                                    11) para finalizar                  INTRO.

     12) Y se añade automáticamente en palabra 11 un             carácter especial que es ‘|0’, que indica el fin de la secuencia

                                                                                    

ESCRIBIR POR STOUT:

 

  ESCRIBIR (palabra);

 

 

ACCESO A LOS CARACTERES DE UN SECUENCIA:

 

Índice=1;

MIENTRAS (palabra [índice] <> ‘|0’)     

Operar (palabra [índice];

Índice=índice+1;

FIN _ MIENTRAS.