APUNTES PROGRA

37
INTRODUCCION Una computadora sirve para hacer operaciones con números, al igual que una calculadora. La computadora puede trabajar con otros tipos de datos al asignarles un código numérico. La utilidad que tiene una computadora consiste en que está puede realizar cálculos repetitivos con precisión y rapidez. Después de lo ya dicho es necesario hacerse la pregunta ¿Qué es un algoritmo?, un algoritmo es un conjunto ordenado de instrucciones que sirven para transformar datos en información que nos resulte útil, además las instrucciones dadas en cualquier algoritmo deben ser precisas para ofrecer resultados consistentes. Para que nuestro algoritmo funcione se pide que las instrucciones sean finitas, para tener resultados en tiempos razonables, ya que lo que se busca es obtener una respuesta en el mínimo tiempo posible y que esta además sea correcta. TEOREMA DE BOHM JACOPINI El teorema nos dice: “todo programa propio puede ser expresado utilizando únicamente tres estructuras de control”: Secuenciales Selectivas Repetitivas Además de ello, un programa propio es aquel que tiene al menos un camino de ejecución para cada instrucción en el mismo, anudado a esto, el programa propio no contiene ciclos infinitos y sólo tiene un punto de inicio y uno de finalización. Ahora se darán ciertas características de las estructuras de control ya mencionadas en el teorema de Bohm Jacopini, Estructura de control secuencial Es la más sencilla e implica seguir un orden de izquierda a derecha y de arriba abajo, pero el orden puede verse alterado por la procedencia de los operadores involucrados en algunas instrucciones (por lo que se dice que existe una jerarquía entre instrucciones).

Transcript of APUNTES PROGRA

Page 1: APUNTES PROGRA

INTRODUCCION

Una computadora sirve para hacer operaciones con números, al igual que una calculadora.La computadora puede trabajar con otros tipos de datos al asignarles un código numérico. La utilidad que tiene una computadora consiste en que está puede realizar cálculos repetitivos con precisión y rapidez.

Después de lo ya dicho es necesario hacerse la pregunta ¿Qué es un algoritmo?, un algoritmo es un conjunto ordenado de instrucciones que sirven para transformar datos en información que nos resulte útil, además las instrucciones dadas en cualquier algoritmo deben ser precisas para ofrecer resultados consistentes.Para que nuestro algoritmo funcione se pide que las instrucciones sean finitas, para tener resultados en tiempos razonables, ya que lo que se busca es obtener una respuesta en el mínimo tiempo posible y que esta además sea correcta.

TEOREMA DE BOHM JACOPINI

El teorema nos dice: “todo programa propio puede ser expresado utilizando únicamente tres estructuras de control”:

Secuenciales Selectivas Repetitivas

Además de ello, un programa propio es aquel que tiene al menos un camino de ejecución para cada instrucción en el mismo, anudado a esto, el programa propio no contiene ciclos infinitos y sólo tiene un punto de inicio y uno de finalización.

Ahora se darán ciertas características de las estructuras de control ya mencionadas en el teorema de Bohm Jacopini,

Estructura de control secuencial Es la más sencilla e implica seguir un orden de izquierda a derecha y de arriba abajo, pero el orden puede verse alterado por la procedencia de los operadores involucrados en algunas instrucciones (por lo que se dice que existe una jerarquía entre instrucciones). Para poder hablar de estructura secuencial debemos saber el significado de asignación, que en algoritmos “es un nombre que se le da a un espacio de la memoria y es denominado variable”, se representa con el símbolo “= “y se lee “guarda en “.Un ejemplo de estructura secuencial es el siguiente:

Suma =suma +xX= X +2

Page 2: APUNTES PROGRA

La representación de una estructura de control secuencial en un diagrama de flujo es la siguiente:

Rectángulo en el cual Irán todas las instrucciones.

Estructura de control selectivaEstructura que permite romper con el orden secuencial de un algoritmo y condicionar la ejecución de alguna o algunas instrucciones, por lo que estas estructuras implican una instrucción de salto para el caso en el que el resultado de la condición sea falso.Estas instrucciones tienen la forma:“si condición entonces”, esta forma es la más simple, ya que existen estructuras de selección doble y de selección múltiple, las cuales tienen las siguientes formas respectivamente:

“si condición entonces En caso condición de:Instrucción caso 1:

De caso contrario instrucciónInstrucción fin caso

Fin si caso 2: Instrucción Fin caso

Fin casosSu representación en DFD es la siguiente:

Page 3: APUNTES PROGRA

Condición

Instrucción 1 Instrucción 2

Fin si

Condición

Fin si

Instrucción

Estructura selectiva simple: estructura de condición doble:

Si no

Si no

Selección múltiple:

Page 4: APUNTES PROGRA

Val =?

Instrucción 1 Instrucción N Instrucción defecto

Instrucción 2

Fin casos

Valor 1 valor 2 valor N defecto

Page 5: APUNTES PROGRA

Val=1 Val=3Val=2 Val=N

Instrucción1 Instrucción2 Instrucción 2 DefectoInstrucción N

Fin casos

O puede ser de la siguiente manera:

No no no no

Si si si

Estructura de control repetitiva :La idea de repetir significa romper con el orden secuencial para regresar a una instrucción ya ejecutada previamente.

Page 6: APUNTES PROGRA

Para el uso de esta estructura, la persona que hará el algoritmo debe ser cuidadosa (a) y evitar que el ciclo sea infinito al no cumplirse la condición que finaliza dicho ciclo o que siempre se cumpla la condición de dicho ciclo y nunca termine.En la estructura de control repetitiva existen 2 tipos de variantes:

Una de condición previa: en la cual la condición se encuentra antes de realizar las instrucciones, por lo que si no se cumple la condición nunca se harán las instrucciones siguientes a la condición.Este tipo de estructura de control es de la forma, “mientras condición repetir instrucción” y se representa en DFD por:

No

Si

Condición

Instrucción

Fin mientras

Page 7: APUNTES PROGRA

El otro tipo es de condición posterior: en este caso la condición ira al final del ciclo, por lo que el algoritmo se ejecutara por lo menos una vez antes de saber si la condición se cumple o no. Esta estructura es de la forma, “repetir instrucción hasta condición” y se representa como:

No

Si

Existe además otro tipo de variante de una estructura repetitiva y esta es utilizada cuando se saben cuantas veces se quiere realizar el ciclo y está controlado por un contador, es de la forma “para contador desde valor inicial hasta valor final” con incrementos de valor, por defecto el incremento es de 1 en 1, pero si se quiere un incremento mayor puede especificarse.Su representación en DFD es la siguiente:

Instrucción

Condición

Page 8: APUNTES PROGRA

No

Si

Conforme se avance en la lectura se irán proporcionando ejemplos en los que se utilizara cada estructura.También es importante mencionar que en un algoritmo se pueden utilizar distintos operadores como son:

o Los lógicos: tales como el “y”, “o”, la negación” !”.o Los relacionales como: =, <, >, ≤, ≥, != y ==, este último en

algoritmos se toma como el “igual”.

También debemos especificar que un acumulador tiene la forma:

Cont= valor inicial

Condición

Fin para

Instrucción

Incremento contador

Page 9: APUNTES PROGRA

Variable= variable operación modificadorTambién se debe hablar sobre el tipo de variantes, ya que estas pueden ser de 3 tipos:

Variante de tipo entero: la cual es la que ocupa menos espacio en la memoria.

Variable de tipo flotante: variable la cual esta denotada por una matiza y un exponente.

Variable tipo texto: es la variable que ocupa mayor espacio en la memoria y son un tipo especial de arreglo en el que los componentes de dicho arreglos son variables del tipo carácter.

En este caso el arreglo se le denomina cadena, la cual se define como un conjunto de caracteres.Un conjunto: es un grupo de cosas que se pueden clasificar.Un carácter: es un símbolo, el cual se pone entre apostrofes, ejemplo: ´G´Un arreglo: es un conjunto de variables del mismo tipo y se distingue por medio de un índice.

X = {0, 3, 8,2} X (1)= 0

X (2)=3Un elemento de una cadena está representado por:

Cadena (i) donde i es la posición del elemento.Para saber que tan larga es una cadena se utiliza la función longitud (cadena).Existen otras variables como:

Banderas: se utiliza para indicar que alguna situación fue detectada durante la ejecución del algoritmo y dicha información puede usarse para decidir si un ciclo continua o termina. Por lo regular esta variable ya tiene un valor que indica el estado del algoritmo.

Testigo: es un valor que el algoritmo no puede procesar o no está dentro de un rango para que pueda ser utilizado, con la finalidad de que este valor termine con el ciclo.

PROGRAMACION MODULAR

Un modulo es una función o procedimiento que simplifica un algoritmo. Este modulo tiene está formado por un encabezado y un cuerpo.El encabezado está constituido por parámetros, que sirven para crear un almacén temporal de los datos.El modulo es una función si devuelve un valor y de lo contrario se le denomina procedimiento.El modulo será utilizado siempre que el algoritmo lo requiera.Ya que se han explicado todos los requerimientos para hacer un algoritmo cabe señalar que su uso dependerá del problema que se requiera solucionar, además de la creatividad e imaginación de quien haga el algoritmo, ya para

Page 10: APUNTES PROGRA

solucionar un problema existirán un gran número de algoritmos que podrán solucionarlo.Para poder realizar un algoritmo correcto se recomienda primero comprender el problema y saber a lo que se quiere llegar, hasta entonces el que hará el algoritmo podrá hacer uno para la solución de dicho problema.

ANALISIS DE ALGORITMOS.

Iniciemos con un problema que involucra la conjetura de ullman, la cual nos dice que todo número entero termina en 1 si se realiza lo siguiente:

Ulman (x) =

Lo que se hará es pedir todos los elementos que hacen que ullman de cualquier número > 1 es igual a 1.Nuestro algoritmo será el siguiente:

Leer n instrucción necesaria para introducir datosMientras x>1 hacer

Si (x mod 2)==0 entoncesX= X/2

En caso contrarioX = 3 * X +1

Fin si Mostrar X

Fin mientras

X/2 si x es par

3 * x +1 si es impar

Se utilizo un ciclo de condición previa para saber si nuestro número introducido no es cero.

Utilizamos una estructura de selección doble para abarcar los dos casos en ullman.

Como necesitamos saber todos los elementos hasta llegar a1 utilizamos el mostrar X dentro del mientras para que siempre que realice el ciclo nos muestre el valor de X después de las operaciones realizadas.

mod es una operación que nos arroja el residuo de esa división.

Page 11: APUNTES PROGRA

Continuemos con otro algoritmo. Ahora, nuestro nuevo algoritmo será la solución a como calcular el factorial de un número, la regla del factorial se resume en:

N!=

Ahora que lo sabemos podremos hacer el algoritmo que puede ser el siguiente:

Leer NCont=1Factorial=1Mientras cont<N hacer

Factorial=Factorial*contCont=Cont+1

Fin mientrasMostrar Factorial

Iniciamos el contador desde 1 y la expresión Cont<=N porque los factores por los que tiene que multiplicarse el factorial van desde 1 hasta N

Ahora se dará un ejemplo de cómo debe realizarse una prueba de escritorio, como ya se menciono la prueba de escritorio nos sirve para probar si efectivamente nuestro algoritmo funciona o no.

Prueba de escritorio del algoritmo de factorial:N Cont Factorial Cont˂ N5 1 1 verdadero5 2 5 verdadero5 3 10 verdadero5 4 30 verdadero5 5 120 falso

Pantalla =120

N * (N – 1)! Si N>0

1 si N=0

Iniciamos con Factorial=1 porque si el numero introducido es 0 y en este caso no entraría al ciclo pero el valor que mostrara será el de 1.

Page 12: APUNTES PROGRA

En esta tabla se puede observar cómo va cambiando el valor del contador y el factorial al hacer las operaciones correspondientes que se escribieron en nuestro algoritmo.Cabe señalar que nuestra prueba de escritorio debe llevar al final lo que se muestra en la pantalla y en este caso nosotros pondremos la palabra pantalla y el resultado que arrojo nuestra prueba de escritorio.

El cómo realizar la prueba de escritorio implica poner todas las variables que se utilizan en el algoritmo para poder realizar de manera correcta las instrucciones que se mencionan en dicho algoritmo, además pueden señalarse algunas comparaciones para realizar nuestra pueba con mayor precisión. En el ejemplo anterior dimos introducimos un valor mayor a cero, pero podemos introducir el propio 0 y con nuestra prueba de escritorio veremos si nuestro algoritmo es correcto o no

N Cont Factorial Cont˂ No 1 1 falso

Pantalla =1Y como efectivamente 0!, es igual a 1 nuestro algoritmo es correcto.

Para los siguientes algoritmos no se mostrara prueba de escritorio, pero eso no implica que no deban realizarse ya que al hacerlas la persona que hará el algoritmo estará plenamente convencido de que hizo un algoritmo correcto

Ahora continuaremos con otro algoritmo un poco más complicado el que resuelve esta sumatoria100∑ XI/I! y es el siguiente:I=0

Leer XI=0Potencia=1Factorial=1Suma=0Mientras I≤100 hacer

Si I>0 entoncesFactorial= Factorial* IPotencia=Potencia*I

Fin siSuma=Suma + Potencia/FactorialI=I+1Fin mientras

Se iniciaron con estos valores ya que el 1 es el neutro multiplicativo

Esta condición evita que el factorial no se multiplique con cero ya que de hacerlo nuestro algoritmo estaría incorrecto.

Page 13: APUNTES PROGRA

Mostrar Suma

Otro ejemplo idéntico de este tipo de algoritmos es el que resuelve esta sumatoria:n∑ (2*I-1)I=1

Leer nI=1Suma=0Mientras I<=n hacer

Suma=Suma + (2*I- 1)I=I+1

Fin mientrasMostrar suma

Este algoritmo no necesita ninguna explicación ya que es idéntico al algoritmo anterior.Ahora nuestro nuevo algoritmo tratara de calcular el elemento n de la serie de fibonaci, para debemos saber que fibonaci, para ello debemos saber que el fibonaci de 0 y1 es igual 1 y que los elementos se forman por sumar el elemento anterior con el mismo, veremos cómo es la serie para poder entender mejor el problema.

SERIE DE FIBONACIN 0 1 2 3 4 5 6 7 8Fibonaci

0 1 1 2 3 5 8 13 21

Ya que se ha visto como se comporta la serie por lo que será un poco más fácil realizar su algoritmo, el cual será el siguiente:Leer nSi n==0 o n==1 entonces

Fib=1Fin siPenúltimo=0Ultimo=1Cont=2Mientras Cont≤ n hacer

Fib=Penultimo +UltimoPenultimo=UltimoUltimo=FibCont=Cont+1

Fin mientras

Fue puesto asi ya que como se dijo, el fibonaci de 0 y 1 es igual a 1

El contador inicia asi ya que necesitamos calcular el valor de fibonaci desde el número 2 en adelante

Es el primer ejemplo de cómo se hace un cambio ya que como la serie lo indica se suma el ultimo con el penúltimo, pero para poder calcular el siguiente fibonaci, el penúltimo se vuelve ultimo y el ultimo se transforma en el fibonaci ya calculada.

Page 14: APUNTES PROGRA

Mostrar Fib

El siguiente algoritmo será uno de los mas entretenidos ya que se trata de escribir en número romano un numero entre 1 y 3999.Este algoritmo puede solucionarse de varias maneras, pero antes de tratar de darle una solución debemos saber algunas reglas del sistema de numeración romano, por ejemplo debemos conocer el valor de cada símbolo que se utiliza en este sistema de numeración y los símbolos son :I es igual a 1, V es igual a 5, X es igual a 10, L es igual a 50, C es igual a 100, D es igual a 500 y M es igual a 1000, solo nos concentraremos en estos valores ya que los números que escribirá nuestro algoritmo no pasa del 3999, después es importante saber que los números romanos se van formando por el principio de adición y sustracción, así pues el 7 se forma como VII, el 9 está formado como IX, cabe mencionar que otra regla de este sistema de numeración es que un símbolo solo puede estar junto a otro símbolo similar en tres ocasiones, por ejemplo: XXXIXAhora sí, ya podemos dar una primera solución y esta es la siguiente:

Si N>=80 entoncesMostrar “LXXX”N=N-80

Fin siSi N>=70 entonces

Mostrar “LXX”N=N-70

Fin siSi N>=60 entonces

Mostrar “LX”N=N-60

Fin siSi N>=50 entonces

Mostrar “L”N=N-50

Fin siSi N>=40 entonces

Mostrar “XL”N=N-40

Fin siSi N>=30 entonces

Mostrar “XXX”N=N-30

Fin siSi N>=20 entonces

Mostrar “XX”N=N-20

Leer NSi N>=3000 entonces

Mostrar “MMM”N=N-3000

Fin siSi N>=2000 entonces

Mostrar “MM”N=N-2000

Fin siSi N>=1000 entonces

Mostrar “M”N=N-1000

Fin siSi N>=900 entonces

Mostrar “CM”N=N-900

Fin siSi N>=800 entonces

Mostrar “DCCC”N=N-800

Fin siSi N>=700 entonces

Mostrar “DCC”N=N-700

Fin siSi N>=600 entonces

Mostrar “DC”

Si N==4 entoncesMostrar “IV”N=N-4

Fin siSi N==3 entonces

Mostrar “III”N=N-3

Fin siSi N==2 entonces

Mostrar “II”N=N-2

Fin siSi N==1 entonces

Mostrar “I”N=N-1

Fin si

Page 15: APUNTES PROGRA

Al hacer el algoritmo anterior nos pudimos dar cuenta que el riesgo a un error de escritura era muy elevado y aunque la idea es correcta, no es la más idónea para realizar este algoritmo, por lo que puede hacerse de otra manera, y esta implica saber que en el sistema decimal las cifras pueden ser separadas por millares, centenas, decenas y unidades, para poder hacerlo necesitamos utilizar las operaciones de división y modulo.Haciendo esto práctico nuestro algoritmo quedara:

Leer nMillares= n/1000Centenas=n mod 1000/100Decenas= n mod 100/10Unidades= n mod 10Romano= “” En caso Millares de:

Caso1:Romano= Romano +”M”

Fin casoCaso2:

Romano=Romano+”MM”Fin casoCaso3:

Romano=Romano+”MMM”Fin caso

Fin casosEn caso Centenas de:

Caso1:Romano=Romano+”C”

Fin casoCaso2:

Romano=Romano+”CC”Fin casoCaso3:

Romano=Romano+”CCC”Fin casoCaso4:

Romano=Romano+”CD”Fin casoCaso5:

Romano=Romano+”D”Fin casoCaso6:

Romano=Romano+”DC”Fin casoCaso7:

Romano=Romano+”DCC”

Si N>=80 entoncesMostrar “LXXX”N=N-80

Fin siSi N>=70 entonces

Mostrar “LXX”N=N-70

Fin siSi N>=60 entonces

Mostrar “LX”N=N-60

Fin siSi N>=50 entonces

Mostrar “L”N=N-50

Fin siSi N>=40 entonces

Mostrar “XL”N=N-40

Fin siSi N>=30 entonces

Mostrar “XXX”N=N-30

Fin siSi N>=20 entonces

Mostrar “XX”N=N-20

Leer NSi N>=3000 entonces

Mostrar “MMM”N=N-3000

Fin siSi N>=2000 entonces

Mostrar “MM”N=N-2000

Fin siSi N>=1000 entonces

Mostrar “M”N=N-1000

Fin siSi N>=900 entonces

Mostrar “CM”N=N-900

Fin siSi N>=800 entonces

Mostrar “DCCC”N=N-800

Fin siSi N>=700 entonces

Mostrar “DCC”N=N-700

Fin siSi N>=600 entonces

Mostrar “DC”

Si N==4 entoncesMostrar “IV”N=N-4

Fin siSi N==3 entonces

Mostrar “III”N=N-3

Fin siSi N==2 entonces

Mostrar “II”N=N-2

Fin siSi N==1 entonces

Mostrar “I”N=N-1

Fin si

Utilizamos esta expresión ya que guardaremos datos de tipo texto, nuestra expresión inicia con comillas y sin ningún símbolo ni espacio entre estas comillas para especificar que nuestro arreglo no tiene ningún elemento

En este algoritmo se utilizo una estructura de selección múltiple.

A esta operación se le denomina concatenar, lo que significa que se agregará un elemento, en este caso M al arreglo llamado Romano

Page 16: APUNTES PROGRA

Fin caso

Caso8:Romano=Romano+”DCCC”

Fin casoCaso9:

Romano=Romano+”CM”Fin caso

Fin casosEn caso Decenas de:

Caso1:Romano=Romano+”X”

Fin casoCaso2:

Romano=Romano+”XX”Fin casoCaso3:

Romano=Romano+”XXX”Fin casoCaso4:

Romano=Romano+”XL”Fin casoCaso5:

Romano=Romano+”L”Fin casoCaso6:

Romano=Romano+”LX”Fin casoCaso7:

Romano=Romano+”LXX”Fin casoCaso8:

Romano=Romano+”LXXX”Fin casoCaso9:

Romano=Romano+”XC”Fin caso

Fin casos

Con el fin de encontrar similitudes haremos algunos otros cambios a nuestro algoritmo, además de resumir o hacer más pequeño nuestro algoritmo.

En caso Unidades de:Caso1:

Romano=Romano+”I”Fin casoCaso2:

Romano=Romano+”II”Fin casoCaso3:

Romano=Romano+”III”Fin casoCaso4:

Romano=Romano+”IV”Fin casoCaso5:

Romano=Romano+”V”Fin casoCaso6:

Romano=Romano+”VI”Fin casoCaso7:

Romano=Romano+”VII”Fin casoCaso8:

Romano=Romano+”VIII”Fin casoCaso9:

Romano=Romano+”IX”Fin caso

Fin casosMostrar Romano

Page 17: APUNTES PROGRA

Leer nMillares = n /1000Centenas = n mod 1000/100Decenas= n mod 100/10Unidades= n mod 10Romano= “”En caso Millares de:

Uno= “M”Caso1...3:

Para i desde 1 hasta cifra hacerRomano= Romano + Uno

Fin paraFin caso

Fin casosEn caso Centenas de:

Uno= “C”Cinco= “D”Diez= “M”Caso1…3:

Para i desde 1 hasta cifra hacerRomano= Romano +Uno

Fin paraFin casoCaso4:

Romano=Romano + Uno + CincoFin casoCaso5…8:

Romano=Romano + CincoPara i desde 6 hasta cifra hacer

Romano=Romano +UnoFin para

Fin casoCaso9:

Romano=Romano + Uno + DiezFin caso

Fin casos

En caso Decenas de:Uno= “X”Cinco= “L”Diez= “C”Caso1…3:

Para i desde 1 hasta cifra hacerRomano= Romano +Uno

Fin paraFin casoCaso4:

Se utilizo una estructura de control para, porque sabemos cuántos elementos podemos tiene nuestro caso, y así ahorramos en poner los tres casos antes puestos.

Hizo con el afán de encontrar similitudes

Page 18: APUNTES PROGRA

En caso Decenas de:Uno= “X”Cinco= “L”Diez= “C”Caso1…3:

Para i desde 1 hasta cifra hacerRomano= Romano +Uno

Fin paraFin casoCaso4:

Page 19: APUNTES PROGRA

Como se pudo apreciar el algoritmo se hizo más pequeño y pueden verse algunas similitudes, por ejemplo para formar cantidades solo necesitamos concatenar uno, cinco, diez, con lo que podemos ver que con solo cuatro casos podemos resumirlo, y esto se puede hacer mediante un modulo, como se muestra a continuación:

Función Escriberomano (cifra, uno, cinco, diez): cadena Escriberomano= “”En caso cifra de:

Caso1…3:Para i desde 1 hasta cifra hacer

Escriberomano= Escriberomano+ unoFin para

Fin casoCaso4:

Escriberomano=Escriberomano +uno +cincoFin casoCaso5…8:

Escriberomano=Esacriberomano +cincoPara i desde 6 hasta cifra hacer

Escriberomano=Escriberomano + unoFin para

Fin casoCaso9:

Escriberomano=Escriberomano +uno +diezFin caso

Fin casos

Por lo que nuestro algoritmo quedara:

Romano= “”Romano=Romano +Escriberomano (cifra, “M”, “*”, “*”)

Romano=Romano +Escriberomano (cifra, “C”, “D”, “M”)Romano=Romano +Escriberomano (cifra, “X”, “L”, “C”) Romano=Romano +Escriberomano (cifra, “I”, “V”, “X”) Mostrar Romano

Y ahora nuestro algoritmo es más pequeño y funciona aun mas rápido ya que cas vez que “Escriberomano” sea puesto en función se realizara el algoritmo que está dentro de esta función.

Encabezado del modulo

Parámetros

Cuerpo del modulo.

Como no se usaran algunas variables, en esos espacios se les pondrá un asterisco.

Page 20: APUNTES PROGRA

Ya hemos hecho un modulo, el cual nos redujo nuestro algoritmo de forma considerable. Ahora aremos otro que haga la suma entre 2 matrices.Considerando que la suma de matrices se realiza de la siguiente manera: a b e f (a + e) (b +f)

+ =

c d g h (c +g) (d +h)

Sabiendo esto iniciaremos con el algoritmo, que es el siguiente:

Para i desde 1 hasta Ren hacerPara j desde 1 hasta Col hacer

C (i)(j) = A(i)(j) +B (i)(j)Fin para

Fin para

De manera similar se puede realizar un algoritmo de multiplicación de matrices. Operación definida como: Matriz A Matriz B Matriz resultado

A B C G H ((A*G) + (B*I) + (C*K)) ((A*H) + (B*J) + (C*L)) * I J = D E F K L ((D*G)+ (E*I)+ (F*K)) ((D*H) + (E*J) + (F*L))

Como podemos darnos cuenta el algoritmo es similar al de la suma de matrices, solo que para formar un elemento de la matriz resultado debemos sumar el producto del elemento en la posición i de la matriz A en el primer renglón con el elemento j de la matriz B en la primera columna tal que i y j tengan el mismo valor.

Se utilizaron 2 ciclos para, puesto que los elementos a sumar están tanto en columna y en renglones por ello tiene que hacer la operación para todos los elementos del renglón y los de las columnas por lo que también se agregaron los subíndices i y j que indican la posición del elemento.

Page 21: APUNTES PROGRA

Por lo que el algoritmo queda de la siguiente manera:

Para i desde 1 hasta RenA hacerPara j desde 1 hasta ColB hacer

C(i)(j)=0Para k desde 1 hasta ColA hacer

C(i)(j)= C(i)(j) + A(i)(k) * B(k)(j)Fin para

Fin paraFin para

Nuestro Nuevo algoritmo es el encontrar el RFC de cualquier persona, para hacerlo necesitamos el nombre completo de la persona iniciando por apellidos y su fecha de nacimiento, ya que se utiliza la inicial del primer apellido y la primera vocal después de la letra inicial, de el siguiente apellido y nombre solo se utiliza la letra inicial, después de tener cada uno de estos elementos se utilizara la fecha, por ejemplo el RFC de Danya Ruiz Morales nacida el 21/junio/1992 es el siguiente:RUMD210692Ya con un ejemplo, entonces podemos pensar en el siguiente algoritmo:

Leer nombreLeer apellido_paterno

Se puso en el elemento k ya que el elemento de la primera matriz en el renglon k se multiplique por el elemento de la segunda matriz que está en la posición k pero en columna

Se utilizaron tres ciclos para, ya que los dos primeros se encargaran de mover a el elemento que se va a calcular y el último ciclo para nos ayuda a poder llenar el elemento que se busca en la matriz resultado.

Page 22: APUNTES PROGRA

Leer apellido_maternoLeer díaLeer mesLeer añoRFC= “”RFC = RFC + apellido_paterno(1)Vocales = “aeiouAEIOU”Vocal= falsoI=2Mientras !vocal hacer

Para j desde 1 hasta 10 hacer Si Vocales(j)== apellido_paterno(I) entonces

Vocal= verdaderoFin si Si !Vocal entonces

I=I +1Fin si

Fin paraFin mientrasRFC= RFC +apellido_paterno(I)RFC= RFC +apellido_materno(1)RFC= RFC +nombre(1)X = año mod 100Dig1= X/10 +´0´Dig2 = X mod 10 +´0´RFC= RFC +Dig1+Dig2Dig3= mes/10 +´0´Dig4= mes mod 10 + ´0´RFC= RFC + Dig3 +Dig4Dig5=día /10 +´0´Dig6=día mod 10+´0´RFC= RFC +Dig5 + Dig6Mostrar RFC

Se utilizo un arreglo que tiene las vocales con el fin de comparar la cadena del apellido paterno con el fin de obtener la primera vocal que tiene esta cadena después de la inicial por ello también si inicia a I con el valor de 2 porque empezaremos desde el segundo elemento.

Iniciaremos con el valor de la bandera en falso ya que necesitamos saber cuándo es vocal el elemento que comparamos por lo que si el valor de la bandera cambia entonces tomaremos ese elemento puesto que será vocal

Se le suma el valor del código aski del cero a nuestra cifra con el fin de transformarlo en carácter, ya que nuestro acumulador esta guardando datos de tipo caracter

Se utilizo para tomar el primer elemento de la cadena llamada apellido_materno y este método se utilizo para tomar el primer elemento de las otras cadens.

Se hicieron las divisiones para separar las cifra que forman dicho numero, esto se utilizo con la misma finalidad que se utilizo en el algoritmo de los romanos.

Page 23: APUNTES PROGRA

Ahora nuestra siguiente misión será el hacer un algoritmo que nos diga si una palabra es palindrome o no, las palabras palindrome son aquellas que tienen el mismo significado si se leen de izquierda a derecha o de derecha a izquierda.Nuestro algoritmo puede ser el siguiente:

Leer fraseI=1J=1Mientras cadena(I) != “\0”hacer

Si cadena(I) != ´ ´entoncesSinespacios(J)= cadena(I)J=J+1

Fin si Sin mientrasSinespacios(J) = ´\0´L=1Para k desde J-1 hasta 1 hacer

Alreves(L)= Sinespacios(k)L=L+1

Fin paraPalindrome=verdadera Para m desde 1 hasta J-1 hacer

Si Alreves(m) != Sinespacios(m) entoncesPalindrome=falsa

Fin si Fin paraSi Palindrome entonces

Mostrar “si es palindrome”En caso contrario

Mostrar “no es palindrome”Fin si

Esta es solo una solución pero puede haber muchas, como se menciono antes la solución de un problema puede variar en método pero el resultado es el mismo, por lo que un problema tiene diversos algoritmos que pueden solucionarlo.

A este elemento se le llama carácter nulo y es el último elemento de todo arreglo

Esta es una nueva cadena que guardara la cadena inicial sin espacios.

Cadena que tendrá los mismos elementos que la cadena Sinespacios pero de manera inversa y que nos ayudara a comparar la palabra de derecha a izquierda y de izquierda a derecha con el fin de saber si tienen el mismo significado.

Esta bandera nos servirá para saber si efectivamente la palabra es palindrome o no lo es.

Se le agrego el carácter nulo para indicar que esa cadena ya ha terminado

Page 24: APUNTES PROGRA

Un ejemplo de un algoritmo que está basado en un testigo es el de un promedio y se puede resolver de la siguiente manera:

Suma= 0Cont= 0Repetir Leer numSi num ≥ 0

Suma=Suma + numCont=Cont +1

Fin siHasta num ˂ 0Promedio = Suma/ ContMostrar Promedio

Después de hacer un algoritmo que ejemplifica el uso de un testigo, es la hora de hacer un algoritmo que ejemplifica un ordenamiento, este algoritmo es llamado “algoritmo de la burbuja”, el cual trata de ordenar un conjunto de menor a mayor, con la regla de que solo puede comparar dos elementos consecutivos y que si no está ordenado haga solo un cambio por cada comparación.Para entenderlo mejor aremos un ejemplo.

X= 5, 4, 3, 2 X= 4, 3, 2 ,5 X= 2, 3, 4,5

X= 4, 5, 3, 2 X= 3,4, 2, 5

X= 4,3, 5, 2 X= 3, 2, 4, 5

Este es nuestro testigo ya que si se introduce un número menor a 0 el ciclo terminara

Page 25: APUNTES PROGRA

Ya que se ha visto el comportamiento de este ordenamiento se propone el siguiente algoritmo:

Leer conjuntoOrdenado=verdaderoPara i desde 1 hasta n-1 hacer

Si A(i) ˃ A( i+1) entonces hacerX=A(i)A(i)= A(i+1)A(i+1)= XOrdenado= falso

Fin si Fin paraHasta Ordenado= verdadero

Después de este algoritmo se realizara uno de los algoritmos que utilizan todos los conceptos que ya se han explicado, este es el segundo ejemplo en el que se usan la mayoría de estructuras ya conocidas (el primero fue el de los números romanos), y se trata de saber si un numero dado es primo o no lo es, una de las posibles respuestas es:

Función esprimo(entero n): lógicoCriba(2)=3Ultimo=3Esprimo=verdaderoSi n mod 2 == 0 ó n mod 3 == 0 entoncesFin siMientras posibleprimo *posibleprimo≤ n y Esprimo hacer

Posibleprimo=Posibleprimo +2Primo=verdaderoI=1Mientras Primo y Criba(I) *Criba(I)≤ Posibleprimo hacer

Si posibleprimo mod Criba(I)==0 entoncesPrimo=falso

Fin si I=I+1

Fin mientrasSi Primo entoces

Criba(Ultimo)= PosibleprimoUltimo=Ultimo+1Si n mod Posibleprimo==0 entonces

Esprimo=falsoFin si

Se utiliza n-1 ya que el carácter nulo cuenta como elemento y no necesitamos procesarlo en este caso

Este es otro ejemplo de cómo se realiza un intercambio, esto ya se vio en el algoritmo de fibonaci

Se inicia desde 3 ya que tenemos dos elementos desde el inicio y será en tiempo posterior el último elemento de nuestro arreglo Criba

Se inicia con 3 ya que es el siguiente elemento a comprobar si es o no es primo

Se utilizaron estos modulos para eliminar de la lista los múltiplos de 2 y 3.

Condición que nos ayudara a no buscar más de la cuenta ya que solo tenemos que buscar en los números cuyo cuadrado sea menor a la cifra que nos piden si es primo o no.

Esta condición nos permitirá saber si el numero introducido es primo o no ya que hasta estas alturas del algoritmo se tiene el ultimo primo tal que su cuadrado sea menor al número introducido.

El numero que se suponía como posible primo es introducido a nuestro arreglo de Criba y este será el último primo de este arreglo

Page 26: APUNTES PROGRA

Fin siFin miestras

Fin funcion

Tenemos un algoritmo que nos ayudara a encontrar en M.C.D de dos números, por medio del método de Euclides y que además es un ejemplo del uso de un valor límite, pero antes de hacerlo y para que pueda ser entendido se hará un ejemplo:

M.C.D de 24 y 16 es:24/16 donde su cociente =1 y su residuo=816/8 donde su cociente = 2 y su residuo =0Por lo que el M.C.D de 24 y 16 es 8

Ya después de ver un pequeño ejemplo podemos realizar un algoritmo como el siguiente:

Leer m Leer nDividendo = m Divisor = n Mientras Dividendo mod Divisor ˃ 0 hacer

X=Dividendo mod DivisorDividendo = DivisorDivisor = X

Fin mientrasSi divisor ==1 entonces

Mostrar “my n son primos relativo”En caso contrario

Mostrar divisorFin si

Otro algoritmo esencial es el llamado algoritmo de Gary, el cual trata de que un caracol esta en el fondo de un pozo, en este problema el usuario nos proporcionara la profundidad del pozo, el avance que tendrá Gary en el día, el retroceso que tendrá al dormirse, la fatiga y nuestro algoritmo nos dirá si Gary salió o no y si lo hizo en que día fue, nuestro algoritmo es el siguiente (se recuerda que antes de comenzar a estructurar un algoritmo se entienda a la

Se utilizo este valor ya que el valor del residuo nos interesa conocer ya que si llega a dar cero el ciclo termina, este valor no fue asignado por gusto ya que en algún momento el dividendo iba a poder ser dividido de manera entera por el divisor y este residuo será 0 por lo que termina el ciclo

Page 27: APUNTES PROGRA

perfección el problema, lo que quiere decir que somos capaces de hacerlo a mano).

Leer AvanzadiaLeer fatigaLeer resbalaLeer alturaDistancia=0Cantidad de fatiga = Cantidad de fatiga * Avanzadia/100Días=0Mientras Distancia≤ altura y Avanzadia˃ resbala hacer

Distanciaacumulada= Distanciaacumulada + AvanzadiaSi Distanciaacumulada˂ altura entonces

Distanciaacumulada = Distanciaacumulada – resbalaFin si Avanzadia= Avanzadia – Cantidad de fatigaDías =Días +1

Fin mientrasSi Distanciaacumulada≥ altura entonces

Mostrar “Gary salió el día”, DíasEn caso contrario

Mostrar “Gary no salió”, Días Fin si

Otro ejercicio que podemos hacer es el de dar cambio, con la cantidad mínima de monedas teniendo en cuenta que las monedas son de: 100, 50, 20, 10, 5, 2, 1 pesos y que sabemos cuánto tenemos que devolver de cambio, nuestro algoritmo quedaría de la siguiente manera:

Leer CambioMoneda(1)=100Moneda (2)=50 Moneda(3)=20 Moneda(4)=10 Moneda(5)=5 Moneda (6)=2Moneda (7)=1Total monedas= 0Para i desde 1 hasta 7 hacer

Total monedas = Cambio / Moneda(i) + total monedasCambio = Cambio mod moneda(i)

Fin para

Se utiliza una expresión lógica de “y” en la condición ya que es necesario que se cumplan 2 condiciones a la vez, para poder determinar de manera correcta si Gary sale o no lo hace

Se utiliza este ciclo si ya que si la distancia acumulada es mayor o igual a la altura Gary ya habrá salido por lo que no es necesario restarle la fatiga, ya que de hacerlo nuestro intento de solución sería incorrecto.

Esta es otra forma de cómo escribir un arreglo.

Para saber cuánto falta por dar de cambio

Esta operación se utiliza para saber el número de monedas hasta ese momento

Page 28: APUNTES PROGRA

Mostrar total Monedas

Nuestro siguiente algoritmo está basado en la regla de Horner y nos muestra como pasar de un carácter a un número entero y el algoritmo es el siguiente:

Leer cadenaNumero = 0I =1 Mientras cadena(I) != ´\0´ hacer

Numero=Numero * 10 + cadena(¡) -´0´I=I+1

Fin mientrasMostrar Numero

Ahora aremos un algoritmo que nos indique si un formato es válido o no, y se entiende por formato valido en este caso si el arreglo está compuesto por caracteres que se pueden transformar a datos tipos numéricos y además que sean enteros, nuestro algoritmo es el siguiente:

Función Esentero (cadena c): lógicoValidos= “0123456789”I=1Repetir

Esentero=falsoJ=1Repetir

Si c(I) = Validos(J) entoncesEsentero=verdadero

En caso contarioJ=J+1

Fin siMientras J≤10 y !Esentero

I= I+1Mientras Esentero y c(i)!=´\0´

De esta manera al primer elemento se le suma 0 y no habrá problema de que nuestro número sea 10 veces mayor a lo que debería, ya que la primera multiplicación será 0 y nuestro algoritmo nos dará el número correcto.

Esta variable marcara los elementos de “c”

Esta variable marcara los elementos del arreglo Validos.

Se utilizo una bandera con el fin de saber si el formato es válido o no.

Si no se cumple una de estas dos condiciones el ciclo termina y el resultado será el último valor lógico que tenga nuestra bandera Esentero

Page 29: APUNTES PROGRA

Fin función

Nuestro último algoritmo será uno de ordenamiento y en este se tratara de encontrar el número más pequeño del arreglo, suponiendo que sabemos el tamaño del arreglo con lo nuestro algoritmo quedara de la siguiente manera:

Leer conjuntoLugar= 1Menor = x(1)Para i desde 2 hasta tamaño hacer

Si menor˃ x(i) entoncesMenor= x(i)Lugar= i

Fin si Fin paraMostrar menorMostrar lugar

Ya después de poner muchos ejemplos de algoritmos solo nos queda practicar sobre tales y sobre nuevos algoritmos que se puedan presentar, por ello este escrito solo es una manera de orientar a una persona que quiere empezar a programar, pensando antes como se debe hacer un algoritmo.

Partimos de la idea de que el primer elemento del arreglo es el más pequeño y es por eso que el ciclo para lo iniciaremos desde 2, ya que hemos utilizado el primer elemento.

Si llega a suceder que el numero que pensábamos no es el menor entonces cambiaremos de numero y también de lugar y así seguirán las comparaciones hasta que se hallan comparado todos los elementos del arreglo dado.