Vous êtes sur la page 1sur 77

(1) Qu es un programa? Metodologa de la programacin. 1. CONCEPTO DE PROGRAMA................................................2 2. ESTRUCTURA GENERAL DE UN PROGRAMA.........................4 3. ELEMENTOS DE UN PROGRAMA.........................................

7
3.1. Datos y tipos de datos......................................................................7 3.2. Operadores y expresiones.............................................................10 3.2.1. Operadores ...............................................................................................10 3.2.2. Funciones Internas.....................................................................................14 3.2.3. Expresiones ...............................................................................................14 3.3. Tipos de instrucciones....................................................................16 3.3.1 Instruccin de asignacin.........................................................................16 3.3.2 Instrucciones de Control..............................................................................18 3.3.3 Subprogramas o mdulos............................................................................18

4. TCNICAS DE REPRESENTACIN DE ALGORITMOS.............19


4.1. Diagramas de flujo.........................................................................20 Organigramas......................................................................................20 Ordinogramas......................................................................................21 4.2. Pseudocdigo................................................................................28

5. VARIABLES AUXILIARES DE UN ALGORITMO O PROGRAMA 52


5.1. Contadores....................................................................................52 5.2. Acumuladores ..............................................................................54 5.3. Interruptores, conmutadores o switches ........................................56

1. CONCEPTO DE PROGRAMA. La principal razn por la que las personas aprenden lenguajes y

tcnicas de programacin es la de poder disear y realizar programas que resuelvan sus problemas de forma automtica una vez que sean ejecutados por un ordenador . Una vez comprobado que el algoritmo es correcto hay que pasar a redactar en un lenguaje de programacin (PHP por ejemplo ) un programa, que al ser ejecutado por el ordenador realice dicho algoritmo y por tanto resuelva de forma automtica el problema planteado. PROGRAMA = ALGORITMO + SINTAXIS DE UN LENGUAJE DE PROGRAMACIN. ( PROGRAMA = ALGORITMO + TIPOS DE DATOS. En algunos textos) Mientras que pueden existir mltiples programas (uno escrito en Java, otro escrito en Pascal, etc) que resuelvan automticamente un problema, el algoritmo en el que se basan todos ellos es nico. Es decir que los algoritmos son independientes de los lenguajes de programacin. Los algoritmos, son muy anteriores a los programas. Ya los griegos propusieron gran cantidad de algoritmos y sin embargo no realizaron ningn programa. Un ejemplo clsico es el algoritmo de Euclides para calcular el mximo comn divisor de dos nmeros naturales, que hoy en da se usa para realizar un ejercicio simple de programacin.(dividir el mayor entre el menor y despus los divisores, empezando por el n menor, entre los restos que van apareciendo. Cuando el resto es 0, el ltimo divisor aparecido es el m.c.d..) El trmino algoritmo, fue acuado por Muhamad ibnMusa al-Jwarizmi , matemtico rabe a principios del siglo IX, como conjunto de smbolos y procedimientos de los clculos matemticos. Tras la fase de codificacin se realiza adems la prueba de ejecucin o depuracin del programa, que consiste en ejecutar el programa sucesivas veces con diferentes datos de prueba para asegurar su correcto funcionamiento. Entre los casos de prueba elegidos, deben incluirse algunos

asociados con situaciones lmites que pueden existir en el problema, pues en ellas ser ms fcil que aparezcan errores, ya que aunque resulte paradjico, las pruebas van destinadas a que el programa funcione incorrectamente. Hay que tener en cuenta que este tipo de pruebas no sirve para demostrar que el programa es correcto, sino que sirve para ver que el programa funciona correctamente en los casos probados. Salvo en programas muy simples, es imposible demostrar que un programa no tiene errores, ya que habra que comprobarlo para todos los supuestos posibles. Esto en la mayora de los casos sera inviable. Tan slo pueden realizarse una serie de pruebas, determinar el porcentaje de error y hacer una estimacin sobre su precisin, segn los resultados obtenidos en los casos de prueba. A la hora de disear los casos de prueba es interesante que intervengan personas ajenas al programa. Y es esencial conocer de antemano, cual ha de ser el resultado correcto de cada caso a probar. Un programa puede funcionar siempre y no dar el resultado correcto. Ejemplo: Pensemos por ejemplo en un programa para calcular el volumen de un prisma rectangular: VOLUMEN = a*b*c Casos de prueba:

- punto .:

si a=0, b=0 y c=0

V? .

- aristas |: si a=b=0, c0, y viceversa V? Es una longitud. - caras : si a=0, b0, c0, y viceversa V? Es una superficie. - volumen : si a0, b0, c0 V? Es un volumen. - Absurdo : si a<0 b<0 c<0. Dependiendo de cmo se realice el programa, se controlarn o no ,de forma correcta, los posibles supuestos.

Con el fin de facilitar la instalacin y

explotacin, as como el

mantenimiento, es fundamental que el programa se acompae de una documentacin amplia, clara y precisa. Teniendo en cuenta, que la calidad del programa viene determinada, en parte, por su documentacin. sta no slo se reduce a un manual escrito o un men de ayuda, sino que en previsin de futuros cambios del cdigo, necesarios para el mantenimiento y actualizacin del programa, los nombres de las variables elegidas, deben ser lo suficientemente claros y representativos, deben aparecer comentarios en los lugares necesarios, las estructuras deben apreciarse claramente, etc. (esto facilitar a otros, incluso al propio programador, la interpretacin del cdigo en posteriores consultas). La fase de explotacin comienza con la implantacin del programa en el sistema informtico donde va a funcionar y contina con el uso continuo y habitual por parte de los usuarios finales del programa mientras ste tenga utilidad para ellos. ( pruebas : manejo del programa por usuarios con ayuda de personas que intervinieron en el desarrollo del proyecto y pruebas : manejo del programa por usuarios ajenos al proyecto, en este caso stos tomarn nota de cualquier incidencia, para poder reproducir la situacin que produjo el error. En ocasiones el propio software guarda esta situacin para poder ser analizada por el equipo que lo program). Y finalmente, como ya hemos sealado en la fase de mantenimiento se comprueba peridicamente el funcionamiento del programa, (realizando las correcciones necesarias para subsanar errores y deficiencias del programa) y en adaptar el programa actualizacin. a cualquier nueva circunstancia que implique su

2. ESTRUCTURA GENERAL DE UN PROGRAMA Ya sabemos bsicamente cmo se realiza la fase de anlisis de un problema y cmo representar bsicamente, QU es lo que debemos hacer para resolverlo. La solucin la damos a travs de un algoritmo, que describe en orden, los pasos que indican la secuencia de operaciones para resolver el problema.

Pero el ordenador no puede tomar decisiones propias y cada persona describe y redacta los pasos a seguir de formas diferentes. Una simple , puede variar el significado de una frase. La situacin se agrava, si aumenta la complejidad del problema a resolver. En la etapa de diseo de un algoritmo, se especifica CMO se resuelve el problema, y es en esta fase en la que se presentan las tcnicas que se utilizan para describirlos adecuadamente. Antes de conocer dichas tcnicas es necesario saber cul es la estructura general de un programa.

ENTORNO ALGORITMO BLOQUE DE INSTRUCCIONES Entrada de datos Proceso de datos

Salida de datos

Entorno ............ fin_entorno ORDINOGRAMA:


INICIO

Entorno ............ fin_entorno PSEUDOCODIGO: fin Inicio ............

FIN

A la hora de indicar al ordenador lo que tiene que hacer, o lo que es lo mismo, a la hora de describir un algoritmo, ste se compone de dos bloques bien diferenciados: Bloque de declaraciones o Entorno. En l se especifican o declaran todos los objetos (constantes, variables, tablas, registros, archivos, etc.) que son capaces de almacenar los datos de entrada y/o de salida que utiliza el algoritmo. La declaracin de un dato consiste en indicar si es constante o variable, cual va a ser su nombre o identificador y el tipo al que pertenece. En el caso de las constantes habr que indicar cual es el valor que tiene asignado. Ejemplos:

entero X , Edad ; constante Numero_total_modulos_primero_dai=3; real longitud; constante pi=3.141516; booleano par; caracter letra , respuesta; string calle; constante Mi_calle= "Pintor Velazquez" Este bloque se encuentra localizado antes del comienzo del bloque de instrucciones. Bloque de instrucciones. Constituido por el conjunto de instrucciones que especifican la secuencia de operaciones a realizar por el procesador en un determinado orden, para que a partir de unos datos de entrada se obtengan unos resultados o datos de salida (Las variables y constantes en los que se van a almacenar los datos de entrada y salida, deben declararse en el bloque anterior). El bloque de instrucciones, a su vez est dividido en tres partes fundamentales: Entrada de datos, Proceso de datos y Salida de resultados. En algunos algoritmos (generalmente los orientados al proceso en cola o BATCH), las tres partes del bloque de instrucciones estn perfectamente delimitadas, Ej.: archivos BAT de MSDOS, pero en la mayora de los algoritmos (principalmente los que utilizan proceso interactivo) sus instrucciones quedan entremezcladas a lo largo del algoritmo. a. Entrada de datos Est formada por las instrucciones de entrada. Una instruccin de entrada es aquella que tiene como misin tomar , leer o introducir, uno o varios datos desde un dispositivo de entrada ( teclado por defecto), almacenarlos en la memoria central en las variables cuyos identificadores aparecen en la propia instruccin. Si estas variables tuviesen algn valor previo, ste se perdera. Este tipo de instrucciones se realizar siempre de forma secuencial, es decir , que despus de la instruccin de entrada se realizar la siguiente instruccin que est especificada en el algoritmo.

b. Proceso de datos Est formado por el conjunto de operaciones e instrucciones destinadas a operar con los datos de entrada para poder generar el conjunto de datos o mensajes que forman el resultado de salida. c. Salida de datos Est formada por las instrucciones de salida. Una instruccin de salida es aquella que tiene como misin enviar, imprimir, visualizar o escribir datos a un dispositivo de salida (pantalla por defecto), bien tomndolos de variables o constantes almacenados en la memoria principal o bien porque estn definidos de alguna forma en la propia instruccin de salida. Al igual que las instrucciones de entrada las instrucciones de salida se realizan de forma secuencial. Ejemplo: algoritmo para calcular el rea de un tringulo, conocidas la base y altura. A=b*h/2 E/ : b, h Proc.: A=b*h/2 /S : Resultado segn los valores de b y h 3. ELEMENTOS DE UN PROGRAMA. 3.1. Datos y tipos de datos Trabajar con la representacin binaria de los datos es muy difcil por lo que los lenguajes de programacin y las tcnicas de representacin de algoritmos permiten ignorar los detalles de la representacin binaria de los mismos y definen los datos como cualquier objeto manipulable por un programa escrito en dicho lenguaje o tcnica. Por tanto los programadores que utilicen un lenguaje de programacin o una tcnica de representacin de algoritmos no vern los datos como cadenas de 0s y 1s sino como un carcter introducido por teclado, una cantidad que representa el radio de un crculo ,la altura de una persona, etc. En los algoritmos cada dato queda identificado por un nombre o

identificador y un valor. A los datos cuyo valor permanece fijo durante la ejecucin de un programa se le denomina constantes y a los datos cuyo valor puede variar durante la ejecucin de un programa se les denomina variables. El nombre de una variable, constante o cualquier objeto definido en el algoritmo (identificador), se formar conforme a las siguientes reglas: Debe resultar significativo, sugiriendo lo que representa. No puede coincidir con palabras reservadas, propias del lenguaje algortmico. Se admitir un mximo de caracteres, 32. Comienza siempre con un carcter alfabtico, nunca numrico, siguindole otros caracteres numricos, alfabticos o el smbolo de subrayado para separarlos. Podrn usarse maysculas o minsculas.

Ejemplos: Nombres o Identificadores vlidos: A, x, Edad, Anno, A11, A12, FechaDeNacimiento, Domicilio_actual Pi Nombres o Identificadores no vlidos + , *2, 2izda, 4=3 Es esencial tener muy clara la diferencia entre el nombre de la variable y su contenido. Los datos que manipula un algoritmo estn organizados en unos conjuntos lgicos denominados tipos de datos. Cada tipo de dato queda definido por los valores que pueden tomar los datos que pertenecen a dicho conjunto, as como por las operaciones que se pueden realizar sobre dichos valores. Los tipos de datos se pueden clasificar en: tipos de datos simples tipos de datos compuestos (estructurados)

a. Los tipos de datos simples son:

o Numricos. Formados por aquellos datos que toman valores numricos y sobre los que se pueden realizar operaciones aritmticas como sumas, productos, etc. A su vez se dividen en: enteros: Son un subconjunto finito dentro de los nmeros reales, que no tienen componentes decimales y pueden ser negativos o positivos, incluido el cero: -2, -1000, 0, 1, 2, 3.... normalmente 1 entero ==> 2bytes ; -32768 al 32767

(216=65536 represtaciones) reales: Es el conjunto de nmeros que no posee parte imaginaria, tienen una parte entera y otra decimal, separadas por un punto (una coma en lgebra no automatizada). Ej.: 1, 3.141516, -12.45 ...... Segn la representacin o la precisin del ordenador, las operaciones sern ms o menos exactas, ya que los nmeros reales pueden poseer infinitos decimales, incluso los nmeros enteros, pueden ser muy grandes o muy pequeos y no tener cupo en la forma de representacin elegida o disponible. Ej: 1/3=0.3333333333333....... 9876^12345

o Tipo lgico o Booleano. Cualquier dato perteneciente a este tipo slo puede tomar uno de los dos valores siguientes verdadero (V) o falso (F) Ej.: SOLTERO => {V, F} {1,0} o Carcter. Un dato del tipo carcter contiene uno de los caracteres del juego de caracteres ASCII, que se clasifican en tres grupos: caracteres alfabticos ('A'...'Z'; 'a'...'z' 'b'); dgitos numricos ('0'...'9')

caracteres especiales:('+' '-' '*' '.' ';' '<' '>' ,....) Ej.: VOCAL = `a` o Cadena de caracteres o cadenas alfanumricas (string). Una cadena de caracteres es una sucesin de caracteres que se encuentran delimitados por unas comillas dobles, para diferenciarlas de los nombres de las variables y constantes. Ej.: "HOLA MUNDO", "22 de octubre de 2001" La longitud de una cadena de caracteres viene

determinada por el nmero de caracteres que hay comprendidos entre los dos smbolos de comillas incluidos los espacios en blanco. Ej.: "Hola, que tal"-> longitud del string 13. Mi mama me mima mucho -> longitud del string 21. "12345.73" -> longitud del string 8. b. Los tipos de datos compuestos o estructurados los iremos viendo a medida que vayamos avanzando. Se trata de datos complejos que se forman por composicin de otros datos simples. Podemos citar inicialmente: conjuntos, arrays (vectores y tablas), registros, listas, pilas, colas, etc.

3.2. Operadores y expresiones

3.2.1. Operadores La manipulacin de los datos de entrada que realiza un algoritmo se hace aplicando sobre los mismos una o ms operaciones. Las operaciones que se pueden realizar con los datos (variables o constantes) de un determinado tipo se representan mediante los operadores. Los principales operadores son: a. Operadores aritmticos: Los operadores aritmticos que se utilizan son:

^ ** (potencia) * / div mod + (producto) (divisin) ( divisin entera) (resto de una divisin) (suma ) (resta).

Ej.: 3^4=81 Ej.: 67*2=134 Ej.: 6/3=4 Ej.: 5div3=1 (Z/Z => div) Ej.: 5mod3=2 (en Java %) Ej.: 12+4=16 Ej.: 1-2= -1

b. Operador alfanumrico: & + Operador de concatenacin (unin): Ej.: String C, D, E ; C = "Hola y " D = "Adis" E=C&D (El valor de E = "Hola y Adis")

c. Operadores relacionales y lgicos: o Los operadores lgicos son: not no, negacin (En Java !) (En Java &&) (En Java ||)

and y lgico o interseccin or A !A V F F V o lgico o unin

Siendo A una expresin booleana.

A F F V

B F V F

A and B F F F V A or B F V V V Siendo A y B expresiones booleanas. Siendo A y B expresiones booleanas.

V V A F F V B F V F

V V

o Los operadores relacionales son : > >= < <= = ==) <> =) distinto Ej.: 6mod3<>0 (En Java es ! menor menor o igual igual Ej.: X=7 (En Java es mayor mayor o igual

Permiten realizar comparaciones de valores asociados a los tipos numricos, de tipo carcter, de tipo string y de tipo booleano. El resultado que se obtiene al aplicar un operador de relacin, es verdadero o falso. En el caso de valores numricos , el orden que se tiene en

cuenta a la hora de evaluar un operador relacional es el de los propios valores, as: 3 < -2 5.6 < 7.9 4=9 4.67 = 4.67 es falso es verdadero es falso es verdadero, etc.

Para los valores numricos, es interesante recordar que los ordenadores para almacenar un nmero real, utiliza un nmero determinado de posiciones de memoria, as, existen algunos nmeros que no pueden ser almacenados con su valor exacto y deben ser truncados (1/3=0'333...), en consecuencia, las expresiones lgicas de igualdad pueden dar un valor falso an cuando sean algebraicamente iguales, como por ejemplo: (1 / 3) * 3 = 1 es una expresin falsa. En el caso de los caracteres , el orden que se tiene en cuenta a la hora de evaluar un operador relacional es el que proporciona el propio cdigo ASCII, en el que: 1.) Los nmeros del cero al nueve tienen su orden natural. '0' < '1' < '2' ... < '8' < '9' 2.) Las letras maysculas de la 'A' a la 'Z' en orden alfabtico. '9' < 'A' < 'B' < 'C' ... < 'Y' < 'Z' 3.) Las letras minsculas de la 'a' a la 'z' en orden descendente. 'Z' < 'a' < 'b' < 'c' ... < 'y' < 'z' '1'<'2' es verdadero, 'A'<'B' es verdadero, 'a'<'g' es verdadero, etc.

En el caso de valores booleanos, el orden que se tiene en cuenta a la hora de evaluar un operador relacional es considerar que falso < verdadero as si tenemos: Boolean A, B A=verdadero B=falso A< B es falso B<A es verdadero.

3.2.2. Funciones Internas Adems de utilizar los operadores para realizar operaciones sobre los datos de un algoritmo, en numerosas ocasiones, es necesario utilizar unos operadores especiales, llamados funciones internas, y que se pueden utilizar sin necesidad de definirlos. Entre estas funciones internas predefinidas estn por ejemplo: abs(x) => valor absoluto sen(x) => seno, cos(x) => coseno, ... raiz2(x) => raz cuadrada exp(x) => e elevado a x ent(x) => parte entera log(x) => logaritmo neperiano etc. 3.2.3. Expresiones Una expresin es la representacin de un clculo necesario para la obtencin de un resultado. Una expresin se puede definir de alguna de las siguientes maneras: a. Un valor es una expresin: Ej.: 12, 1.23, "Antonio", 'd', verdadero b. Una variable o una constante es una expresin: Ej.: Dia_Semana, A, pi (En Java: sin(x),....) (En Java : sqrt(x))

c. Una funcin interna es una expresin: Ej.: sen(pi) d. Cualquier combinacin vlida de operadores, constantes, variables y/o funciones internas, as por ejemplo sern expresiones las siguientes: Ej.: cos(pi*x)+9 constantes, 'f'<'d' "Juan y Pedro" Cada expresin toma un valor que se determina evaluando cada una de las variables y funciones internas implicadas y realizando las operaciones indicadas, en la misma. Teniendo en cuenta el tipo al que pertenece el resultado obtenido tras evaluar una expresin, stas se pueden clasificar en: a. Numricas: Son las que producen un resultado numrico y se construyen mediante los operadores aritmticos. Ej.: (3+4)^3/5 b. Alfanumricas: Son las que producen un resultado de tipo alfanumrico y se construyen mediante el operador alfanumrico. Ej.: Blanco & y & Negro c. Booleanas: Son las que producen un resultado Booleano (verdadero o falso) y se construyen mediante los operadores relacionales y lgicos. Ej.: (3=6/2)and(respuesta=s)

Como en una expresin puede aparecer ms de un operador, para calcular el valor de la misma es necesario establecer unas reglas de prioridad que permitan decidir qu operador se aplica primero. Estas reglas son las siguientes : 1. Las expresiones encerradas entre parntesis se evalan primero. Si existen varios parntesis anidados los internos se evalan primero. 2. El operador - unitario (que cambia de signo) 3. Potencia 4. Productos y divisiones 5. Sumas y restas 6. Concatenacin.

7. Relacionales. 8. Negacin (operador !) not 9. Conjuncin (operador &&) 10. Disyuncin (operador ||) and or

La evaluacin de operadores de igual prioridad en orden siempre se realiza de izquierda a derecha. Un parntesis, siempre nos sirve para dar prioridad a una operacin. Por tanto siempre que dudemos, es conveniente usar parntesis, ya que stos siempre servirn para asegurarnos ante la duda, de que se realiza una operacin antes que otra, segn nuestras necesidades. Ejemplo: ((3+2)^2-15)/2*5= (5^2-15)/2*5 = (25-15)/2*5 = 10/2*5 = 5*5 = 25

Evaluar a.) 3+6*14, b.) (-4*7)+2^3/4-5 Solucin: a.) 2.) 3+84=87 b.) 1.) 6*14=84 1.) -4*7= -28

c.)8/8*2 c.) 1.)8/8=1 2.)1*2=2 no hacer: 1.)8*2=16 2.)1/16=00625

2.) 2^3=8 3.) 8/4=2 4.) -28+2= -26 5.) -26-5= -31

3.3. Tipos de instrucciones

3.3.1 Instruccin de asignacin La instruccin de asignacin es aquella que nos permite darle valores a una variable y se representa con el smbolo = o . Al igual que las

instrucciones de entrada y de salida, realizan de forma secuencial. El formato general es:

las instrucciones de asignacin se

nombre de variable = expresin o tambin nombre de variable expresin Ejemplo: A = 5 A5 (el valor de la variable A es 5) La accin de asignar es destructiva, ya que el valor que tuviera la variable antes de la asignacin se pierde y se reemplaza por el nuevo valor: 1.) A = 5 2.) A = 7 3.) A = 33 El ltimo valor que tomar A es 33, ya que los valores 5 y 7 se perdern. En caso de asignar a una variable una expresin compleja, se evala en primer lugar la expresin y ese valor es el asignado a la variable en cuestin: A = 8/4+1...... A vale3. Es posible utilizar el mismo nombre de variable a ambos lados de la asignacin, as, acciones como: N = N+1, tienen sentido, y el valor que tomara N despus de la asignacin es una unidad mayor al que tena antes de la asignacin.(no se trata de una ecuacin matemtica: N nunca podra ser igual a N+1 , sino de una asignacin N vale lo que vala antes ms uno). Ejemplo: 1.) A = 12 2.) A = A/2 (A toma el valor 6) Antes de poder utilizar una variable es necesario inicializarla previamente con un valor, la forma ms habitual de realizar esta inicializacin es mediante una instruccin de asignacin (otra forma es mediante la instruccin de entrada LEER variable) Una asignacin puede ser aritmtica (A = 3), lgica (PAR= F), carcter (vocal =`e`) o cadena (nombre="Pedro").

A una variable no se le pueden asignar valores de distinto tipo del que fue definida dicha variable, ya que en ese caso estamos cometiendo un error de tipo. Ej.: entero x, y, z z=x/y //No siempre el cociente de dos enteros es entero

3.3.2 Instrucciones de Control Son instrucciones que no realizan trabajo u operaciones efectivas salvo la evaluacin de expresiones, generalmente lgicas, con el objetivo de controlar la ejecucin de otras instrucciones o alterar el orden de ejecucin normal de las instrucciones de un algoritmo. Existen dos grandes grupos de instrucciones de control:

3.3.2.1

Instrucciones alternativas o decisiones

Son aquellas que controlan la realizacin de uno o varios bloques de instrucciones, dependiendo del cumplimiento o no de alguna condicin o del valor final de una expresin. Una decisin permite por tanto romper la secuencia del algoritmo.

3.3.2.2

Instrucciones repetitivas

Son aquellas que controlan la repeticin de un conjunto o bloque de instrucciones mediante la evaluacin de una condicin que se realiza cada nueva repeticin, por medio de un contador asociado.

3.3.3 Subprogramas o mdulos Una subrutina es un fragmento del programa que realiza una tarea concreta y recibe un nombre por el que puede ser llamada o activada desde

otra parte del algoritmo. Una subrutina puede tener una serie de variables de comunicacin denominadas argumentos, que permiten el paso de informacin entre el algoritmo y la subrutina. El uso de subrutinas: Evita la duplicacin de grupos de instrucciones en diferentes partes del algoritmo Facilita la construccin y compresin de los algoritmos, ya que dividimos el algoritmo en varias partes de forma que: Cada una de ellas es ms fcil de describir que el algoritmo completo Cada una de ellas de forma individual realiza una funcin concreta y todas juntas resuelven el problema planteado inicialmente. Podemos indicar que existen dos tipos de subrutinas: los procedimientos y las funciones. stas se diferencian esencialmente de aquellos, en que retornan algn resultado o valor de salida.

4. TCNICAS DE REPRESENTACIN DE ALGORITMOS A la hora de representar el algoritmo hay que utilizar tcnicas que permitan independizar dicho algoritmo del lenguaje de programacin en el que, posteriormente, codifiquemos el programa correspondiente. Es decir, que la representacin del algoritmo, por un lado, no debe depender de la sintaxis del lenguaje de programacin que vayamos a utilizar posteriormente, pero por otro, debe ser fcilmente transformable a un programa escrito en el lenguaje de programacin que posteriormente elijamos. Aunque el lenguaje castellano narrativo est entre las tcnicas de representacin que cumplen estas caractersticas, no se utiliza mucho, pues las descripciones que se obtienen son poco precisas y ambiguas. Por ello para describir algoritmos se utilizan otras tcnicas de representacin que veremos a continuacin. Las representaciones que obtengamos aplicando cada una de estas tcnicas sern la base para realizar el programa en la fase de codificacin, por ello estas representaciones deben ser amplias, ordenadas,

fciles de entender y posibles de modificar. Las representaciones ms comunes son a. Los diagramas de flujo del sistema u organigramas. b. Los diagramas de flujo de proceso u ordinogramas. c. El pseudocdigo.

4.1. Diagramas de flujo. Organigramas. Son representaciones que describen el flujo de datos y los soportes fsicos que intervienen en la solucin del problema. Se trata de una representacin escueta que da una imagen global de lo QUE se quiere hacer, sin entrar en detalles. Es la representacin ms sencilla. Usa varios smbolos:

Proceso Cintamag.

Pantalla

Impresora

Teclado

Flujo

Disco Ej.: Los alumnos de un centro han de distribuirse en grupos y se introducen por teclado, cada grupo formado se guardar en un disco flexible. Se sacar un listado de los alumnos de 4 curso por pantalla y los de 3 por impresora.

Entrada datos

Proceso ordenacin

Alumnos 3

Alumnos 4

Alumnos

Ordinogramas. Los ordinogramas son herramientas grficas para representar algoritmos que muestran de forma detallada y lgica las operaciones que se van a realizar cuando se haga un seguimiento del algoritmo (o la ejecucin del programa). Aunque fueron muy utilizados en los principios de la programacin (programacin convencional), con la aparicin de la programacin estructurada estn en desuso. Un ordinograma est compuesto por una serie de smbolos unidos por flechas. Los smbolos, representan acciones y las flechas el orden de realizacin de las acciones. Cada smbolo por tanto tendr al menos una flecha que conduzca a l y otra que parta de l. Los principales smbolos que se utilizan en un ordinograma se pueden agrupar en las siguientes categoras a. Smbolos de proceso b. Smbolos de decisin c. Lneas de flujo d. Smbolos de conexin e. Smbolos de comentarios

a. Smbolos de proceso SIMBOLOS FUNCIN

INICIO FIN

Terminal o terminador: Representa el "INICIO" y el "FIN" de un algoritmo.

Operacin de entrada /salida LEER ESCRIBI R Utilizada para mostrar la

INTRODUCCIN o LECTURA de datos desde un perifrico a la memoria del ordenador y la salida, VISUALIZACIN o ESCRITURA de resultados desde la memoria del ordenador a un perifrico.

proceso: Utilizado para mostrar una X = X+1 operacin que pueda originar cambio de valor, operaciones aritmticas, etc.

subprograma:

Se

utiliza

para

representar la llamada a una funcin o procedimiento que va a llevar a cabo una tarea determinada y una vez terminada sta, regresar el control de ejecucin al programa principal.

b. Smbolos de decisin

SIMBOLOS

FUNCIN

Decisin : Representa operaciones X> SI 0O NO lgicas o de comparaciones entre datos y en funcin del resultado de la misma , determina cual de los distintos caminos alternativos del algoritmo se debe seguir. Normalmente tiene dos salidas SI y NO.

Decisin salidas.

Mltiple:

Utilizada

para

representar una decisin con tres o ms

c. Lneas de flujo

SIMBOLOS

FUNCIN Lneas de flujo o conectoras: Indican el sentido de la ejecucin de las operaciones. Sirven de unin entre dos smbolos.

d. Smbolos de conexin

SIMBOLOS

FUNCIN Conector de reagrupamiento : Utilizado para el reagrupamiento de lneas de flujo Conector de una misma pgina: Sirve N para conectar dos puntos o partes del ordinograma en la misma pgina. N Conector de distintas pginas: Sirve para conectar dos puntos del ordinograma en pginas diferentes.

e. Smbolos de comentarios

SIMBOLOS

FUNCIN Permite escribir comentarios a lo largo del diseo realizado

En los ordinogramas slo queda representado grficamente el bloque de instrucciones, siendo necesario especificar explcitamente el entorno del algoritmo. A la hora de obtener la representacin grfica del bloque de instrucciones de un algoritmo hay que tener en cuenta que: Todo ordinograma debe indicar claramente dnde comienza (INICIO) y dnde acaba "FIN" (FIN). Existe un nico "INICIO" y un nico

El orden en que deben escribirse los smbolos es de arriba abajo y de izquierda a derecha.

Es aconsejable usar un smbolo para cada accin. Dentro de los smbolos no se especificarn instrucciones de un determinado lenguaje de programacin. Se puede escribir ms de un paso del algoritmo en un smbolo de proceso.

La secuencia de ejecucin de los diferentes tratamientos se indica mediante lneas de conexin (horizontales/verticales), que los comunica entre s. Estas lneas deben acabar en puntas de flecha que indique el flujo.

A todos los smbolos excepto al de INICIO, les debe llegar una lnea de conexin y slo una.

De todos los smbolos, excepto el de FIN y el de DECISIN, debe salir una sola lnea de conexin.

Para eliminar lneas de conexin muy largas se usan los conectores. Debe tenerse en cuenta, sin embargo, que el uso excesivo de stos dificulta el entendimiento del ordinograma.

No est permitido el cruce de lneas de flujo. El ordinograma en conjunto debe guardar una cierta simetra.

Ejemplo 1: Ordinograma del algoritmo que calcula el permetro y el rea de un rectngulo: Algoritmo REC_AREA_PERIMETRO Entorno Entero BASE, ALTURA, PERIMETRO, AREA fin_entorno
INICIO

ESCRIBIR "Introduce la BASE d delrectngulo"

LEER BASE

ESCRIBIR Introduce la ALTURA rectngulo

LEER ALTURA

PERMETRO=2*BASE+2*ALTURA AREA = BASE * ALTURA

VISUALIZAR AREA, PERIMETRO

FIN

Ejemplo 2: Introducir dos nmeros y visualizar el mayor.

Entorno Real A, B Fin_entorno


INICIO

INTRODUCIR A, B

NO

A>B

SI

NO
ESCRIBIR

SI

ESCRIBIR El mayor es, B A

El mayor es,

Ejemplo adivina el

3:

Introducir nmero

un
FIN

nmero por teclado, si no se borrar pantalla, indicar si el n

oculto,

es superior o inferior. Repetir la operacin hasta acertar. Entorno Entero NUM Constante OCULTO=19 Fin_entorno
1 INICIO

INTRODUCIR NUM

NUM<>OCULT O

NO

FIN

SI

NUM>OCULTO

NO

ESCRIBIR Te pasas

ESCRIBIR No llegas

1 1

Podemos usar conectores, en cuyo caso no aparece la lnea discontinua. O podemos eliminar los conectores y convertir la lnea discontinua en continua.

4.2. Pseudocdigo El pseudocdigo es una tcnica de representacin de algoritmos no grfica que nos permite describirlos mediante un lenguaje intermedio entre el lenguaje natural que normalmente utilizamos en nuestra comunicacin escrita (el espaol) y el lenguaje de programacin que posteriormente vamos a utilizar (C). El que sea un lenguaje intermedio entre el lenguaje natural y el de programacin es porque el pseudocdigo permite escribir la solucin de un problema en forma de algoritmo utilizando palabras y frases del lenguaje natural sujetas a unas determinadas reglas que luego facilitan la traduccin del algoritmo a un programa escrito en el lenguaje de programacin elegido. La utilizacin de pseudocdigo para describir algoritmos adems de facilitar la traduccin del algoritmo a un programa escrito en el lenguaje de programacin elegido, tiene las siguientes ventajas: Hace que en la fase de diseo, los programadores se centren en la lgica y estructuras de control del algoritmo (descripcin de la secuencias de pasos que hay que llevar a cabo) y se olviden de las reglas y restricciones sintcticas (como hay que escribir dicha secuencia) que le impone un determinado lenguaje de programacin.

La descripcin o representacin de los algoritmos que obtenemos es ms fcil de crear y de entender, pues est realizada en el lenguaje que utilizamos habitualmente, no siendo necesario por tanto el conocimiento de un lenguaje de programacin.

La descripcin o representacin de los algoritmos que obtenemos es totalmente independiente de lenguaje de programacin que posteriormente vayamos a utilizar.

Facilita la realizacin de futuras correcciones o actualizaciones gracias a que no es un sistema de representacin rgido.

La descripcin del algoritmo que obtenemos mediante pseudocdigo, que no es ejecutable por un ordenador, se considera como un primer borrador del programa que vamos a desarrollar en la fase de codificacin, ya que como ya hemos dicho, la descripcin obtenida en pseudocdigo es fcilmente traducible a un programa. Es aconsejable respetar las siguientes reglas de carcter general: a. Todo pseudocdigo tiene un INICIO y un FIN. b. Cada instruccin debe escribirse en una lnea. c. Para su descripcin se usan palabras reservadas, que en un principio iban en ingls: if, for, while, etc, pero que actualmente se escriben en el lenguaje de cada pas: inicio, si, entonces, para, etc. d. Debe escribirse identado (sangrando o tabulando) para mostrar claramente las dependencias de control dentro de los mdulos. e. Cada estructura usada tendr un solo punto de comienzo y un solo punto de fin de estructura. Algunos autores suelen usar un corchete para unir el principio y fin de cada estructura. f. Se escribir en minscula, excepto aquellos nombres que elige el programador: variables, ficheros, mdulos, etc., que se escribirn en maysculas. g. Para referenciar un mdulo se especifica simplemente su nombre entre los smbolos < y >. La representacin de un algoritmo mediante pseudocdigo queda divida en

dos partes: Cabecera: Es el rea o bloque informativo donde quedar reflejado el nombre del algoritmo. Incluir adems un comentario que nos de una idea de lo que se pretende que resuelva el algoritmo. Los comentarios en un pseudocdigo quedan

representados mediante : // , si el comentario ocupa una sola lnea. /*.....*/ o {.....}, si el comentario ocupa varias lneas, en este caso el comentario ira entre estos dos caracteres. Cuerpo: Es la zona donde se describen las partes de un algoritmo Entorno y Bloque de instrucciones. Cada una de estas partes a su vez suele estar dividida en otras, lo que exige la utilizacin de identacin o sangrado para que cada una de ellas quede fcilmente identificada y comprendida. Ejemplo: Algoritmo DESCUENTO /* Este algoritmo calcula el tanto por ciento de descuento que han hecho al realizar una determinada compra*/ Entorno /* En este bloque ir la declaracin de los distintos elementos u objetos que vamos a utilizar en un algoritmo: tipos definidos por el usuario variables , constantes, funciones y procedimientos, etc.*/ Entero IMPORTE_COMPRA, PRECIO_FINAL......... Real TANTO_POR_CIENTO, .......... .......................................... fin_entorno Inicio /* En este bloque se representarn las distintas instrucciones que formen parte del bloque de instrucciones del algoritmos que estamos describiendo .*/ Escribir Indicar el importe de la compra Leer IMPORTE_COMPRA ................................................................. fin

La representacin del entorno de un algoritmo mediante pseudocdigo se realiza de forma anloga a como se haca en los ordinogramas: Entorno //Declaracin de variables tipo1 NombreVariable11,....NombreVariable1n; tipo2 NombreVariable21,...,NombreVariable2n; .. tipom NombreVariablem1,...,NombreVariablemn; //Declaracin de constantes Constante tipo1 NombreConstante11,...., NombreConstante1n; Constante tipo2 NombreConstante21,..., NombreConstante2n; ............................. Constante tipon NombreConstantemn; NombreConstantem1,...,Constante Constante Constante

La representacin mediante un algoritmo de las distintas instrucciones que pueden aparecer dentro del bloque de instrucciones de un algoritmo, se puede hacer del siguiente modo: SECUENCIALES Categora Instruccin de Representacin ordinograma en un Representacin en un pseudocdigo

Instruccines de Entrada
LEER variable

Leer variable;

ESCRIBIR "texto", var

Escribir "texto" Escribir "texto",var,"texto" Escribir "texto",var

Instruccines de Salida

Nombre_Var = Expresin

Instruccin asignacin

de

Nombre_Var Expresin
I1

Bloque

secuencial

de

I2

I1 I2

instrucciones (I1, I2,...In) Siendo Ij instrucciones pertenecientes a las categoras anteriores


In

.....

In

ALTERNATIVAS Categora Instruccin de Representacin


Expresi ordinograma

en SI

un Representacin un pseudocdigo

en

NO Alternativa Simple

n
Expresi n

Si condicin entonces
I

I .....

fin_si
Expresi

Si condicin entonces I ..... si_no J...... fin_si

Alternativa Doble

NOJ SI

Expresi n Alternativa Mltiple .......

Segn hacer

Expresion

ValorConstante1:I1 .. IN IN+1 ...... ValorConstante2:I2 . ...... ............................... ValorConstanten:IN . ...... fin_segun

I1

REPETITIVAS Categora Instruccin de Representacin ordinograma I en un Representacin en un pseudocdigo Mientras Expresion hacer I........... fin_mientras

Instruccin Mientras:

Instruccin Repetir I
Expresi n

Repetir I............. mientras Expresion

SI

NO

Instruccin Para

Variable=valor_inicial

Variable<

= valor_final

Para variable=valor_inicial hasta valor_final [ConIncremento | N ConDecremento ] I................. fin_para

SI Variable=variable+1 I

Instrucciones

Alternativas.

Existen

tres

modelos

tpicos

de

instrucciones alternativas: Alternativa simple: si se cumple una condicin(/es) se realiza una accin(/es). Ej.: Si llueve entonces

cojer un paraguas fin_si Alternativa doble: si se cumple una condicin(es) se realiza una

accin(/es), si no se realiza otra accin(/es). Ej.: Si llueve entonces cojer un paraguas sino esperar a que no llueva fin_si; Alternativa mltiple: segn el valor de una condicin o expresin se realizar una accin dentro de las mltiples posibles, asociadas al valor de la condicin. Ej.: Segun dia hacer lunes: I1 I1, I2,.... instrucciones.

martes: I2 ......... fin_segun;

Ejemplos: 1. Dado un nmero por teclado, decidir si es par o impar.

Algoritmo PAR_IMPAR //Determina si un nmero introducido es par Entorno Entero A fin_entorno

Inicio Escribir Introduce un nmero: Leer A Si (Amod2=0) entonces Escribir el nmero,A,es par sino Escribir A,es un nmero impar fin_si fin

2. Dados dos nmeros por teclado, decir si un nmero es mltiplo de otro:

Algoritmo MULTIPLO //Determina si un nmero es mltiplo de otro Entorno Entero A,B fin_entorno

Inicio

Escribir Introduzca dos nmeros: Leer A,B Si ((A>B)and((AmodB)=0)) entonces Escribir B,es mltiplo de,A sino Si ((B>A)and((BmodA)=0)) entonces Escribir A,es mltiplo de,B sino Si (A=B) entonces Escribir son iguales sino Escribir no son mltiplos fin_si fin_si fin_si fin

3. Dado el da, mes y ao de nacimiento de una persona y dado tambin el d, m, a actual, nos diga su edad: Algoritmo EDAD //Determina la edad de una persona conocida la fecha de nacimiento

Entorno Entero D, M, A, DIA, MES, ANNO /*datos actuales: D, M, A y de nacimiento: DIA, MES, ANNO */ Entero X fin_entorno // Edad

Inicio Escribir Introduce la fecha actual da mes ao: Leer D, M, A Escribir Introduce tu fecha de nacimiento da mes ao: Leer DIA, MES, ANNO X=A-ANNO Si (M>MES) entonces Escribir Tienes , X , aos. sino Si (M<MES) entonces Escribir Tienes , X-1 ,aos. sino Si ((M=MES)and(D>=DIA)) entonces Escribir Tienes , X , aos.

sino Escribir Tienes , X-1 , aos fin_si fin_si fin_si fin

Este programa podra realizarse de forma ms simple agrupando condiciones:

Si ((M>MES) or ((M=MES)and(D>=DIA))) entonces Escribir Tienes , X , aos. sino Escribir Tienes , X-1 ,aos. fin_si

Instrucciones Repetitivas: Son instrucciones que repiten una secuencia de instrucciones un nmero determinado de veces, tambin se las llama bucles. Existen bsicamente tres tipos de instrucciones repetitivas o bucles que son: la instruccin mientras, la instruccin repetir y instruccin para:

* Instruccin mientras.- La instruccin repetitiva mientras es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condicin, es decir, realiza una iteracin cada vez que la condicin resulta ser cierta. Las palabras clave que indican una instruccin mientras en pseudocdigo son: Mientras CONDICION ACCION 1

ACCION 2 ACCION 3 ....... fin_mientras

Ejemplo:

Factorial de un n

Algoritmo FACTORIAL // Algoritmo que calcula el factorial de un nmero natural Entorno Entero NUM, INI, FAC fin_entorno Inicio FAC =1 Escribir Introduce un nmero mayor que 1 Leer NUM INI=NUM Mientras NUM > 1 FAC = FAC * NUM NUM = NUM - 1 fin_mientras Escribir El factorial de, INI , es , FAC. Fin

Lo primero que se hace al entrar en una instruccin mientras es la

evaluacin de la condicin y si resulta ser falsa el cuerpo del bucle nunca se ejecutar. Si la condicin es cierta se ejecuta una iteracin y despus se vuelve a evaluar la condicin.

* Instruccin repetir.- La instruccin repetitiva repetir es aquella en que el cuerpo del bucle se ejecuta mientras que se cumple una determinada condicin, es decir, realiza una iteracin cada vez que la condicin resulta ser verdadera . Las palabras clave que indican una instruccin repetir en pseudocdigo son:

Repetir ACCIN 1 ACCIN 2 ... mientras CONDICION

Ejemplo:

Factorial de un n

Algoritmo FACTORIAL // Algoritmo que calcula el factorial de un nmero natural Entorno Entero NUM, FAC Fin_entorno Inicio FAC = 1 Escribir Introduce un nmero mayor que 1 Leer NUM Repetir FAC = FAC * NUM NUM = NUM - 1 mientras NUM > 1 visualizar NUM fin

La principal diferencia con la instruccin mientras es que lo primero que se ejecuta en la instruccin, es el bucle y despus se evala la condicin, si resulta ser verdadera se ejecutar de nuevo. volviendo a evaluar al final la condicin hasta que resulte ser falsa . En la instruccin repetir el bucle se ejecutar una vez al menos, es decir, realiza como mnimo una iteracin.

Ejemplo:

Realiza la suma, resta, cociente o divisin de dos nmeros:

Algoritmo CALCULADORA //Calcula el resultado de la operacin aritmtica elegida sobre dos operandos elegidos. Entorno Real X,Y Caracter OPCION Booleana SALIR fin_entorno

Inicio Escribir Introduce el primer operando: Leer X

Escribir Introduce el segundo operando: Leer Y SALIR=f Repetir Mientras (OPCION<a or OPCION>d)

Escribir Elija opcin a, b, c, d: Escribir Escribir Escribir Escribir Escribir Leer OPCION fin_ mientras a) SUMA. b) RESTA. c) COCIENTE. d) DIVISIN. e) SALIR.

Segun OPCION hacer a: b: c: d: e: Escribir La suma , X, + , Y, = , X + Y Escribir La resta , X, - , Y, = , X - Y Escribir El cociente , X, / , Y, = , X / Y Escribir El producto , X, * , Y, = , X * Y SALIR=v

fin_segun hasta SALIR=v fin

* Instruccin para: En muchas ocasiones se conoce de antemano el

nmero de veces que se desea ejecutar las instrucciones del bucle. En estos casos en que el nmero de iteraciones es fija, se debe usar la instruccin para . La instruccin para se ejecutar un nmero determinado de veces y de modo automtico controlar el nmero de iteraciones del cuerpo del bucle. Sus palabras clave en pseudocdigo son:

Para VARIABLE = VALOR-INI. hasta VALOR-FIN. [ incr. INC. | decr. DEC.] ACCION 1 ACCION 2 .......... fin_para

La instruccin para comienza con un valor inicial, las acciones especficas se ejecutan a menos que el valor inicial sea mayor (o menor si se decrementa) que el valor final. La variable se incrementa en INC. o decrementa en DEC., si este nuevo valor no supera el final se ejecutarn de nuevo las acciones. El incremento de la variable ser siempre de 1 a no ser que se especifique lo contrario. Ejemplo:

Factorial de un n (slo especificamos el bloque de instrucciones)

Inicio Escribir Dame un n: Leer NUM FAC = NUM Para I = NUM-1 hasta 2 decremento 1

FAC = FAC * I fin_para Escribir El factorial de , NUM, es : ,FAC fin Podemos realizar el mismo algoritmo con inremento:

Inicio Escribir Dame un n: Leer NUM FAC = 1 Para I = 2 hasta NUM incremento 1 FAC = FAC * I fin_para Escribir El factorial de , NUM, es : ,FAC fin

Las instrucciones alternativas y/o repetitivas pueden anidarse unas con otras tantas veces como sea necesario, aunque, por claridad en el pseudocdigo, no es recomendable anidar ms de tres instrucciones repetitivas, en caso de necesitar ms anidaciones dividiremos el problema inicial en mdulos para facilitar la labor de programacin.

Las anidaciones deben hacerse de forma correcta, esto es, el inicio y fin del bucle ms interno no deben superar los del ms externo.

Bien

Mal

Ejemplo:

Sumar los nmeros impares menores que 1000.

Algoritmo SUMIMPAR //Suma los impares menores de 1000 Entorno Entero I, SUMA fin_entorno Inicio SUMA = 0 Para I = 1 hasta 999 incremento 2 SUMA = SUMA+I fin_para

Escribir La suma de los impares menores de 1000 es : , SUMA fin

Ejemplo:

Dados A y B con A < B. Dar todos los primos intermedios (suponemos A>1, sino, seran los primos menores que N, sin incluir el 1. Por esto no consideramos tampoco el 2, ya que estamos de 3 en adelante) INICIO

INTRODUCI R A, B

I=A+I

SI

I<B

NO

K=2

SI

K< I

NO

NO
0

ImodK=

SI

NO

PRIMO =V

SI

ESCRIBI R K=K+1 PRIMO F = I

I=I+1

FIN

Veamos dos formas para resolverlo con pseudocdigo, con Mientras y Para:

Algoritmo PRIMOS_AB //Busca los nmeros primos mayores que A y manores que B Entorno Entero A, B, I, K Booleano PRIMO fin_entorno Inicio Escribir Introducir A y B, con A<B Leer A, B I = A+1 Mientras I<B hacer K=2 PRIMO=V Mientras K<I hacer Si (ImodK=0) entonces PRIMO=F K=I sino K=K+1 fin_si fin_mientras Si PRIMO=V entonces Escribir I fin_si I = I+1 fin_mientras

fin -------------------------------------------------------------------------------------------------------------------Inicio Escribir Introducir A y B, con A<B Leer A, B Para I=A+1 hasta B-1 PRIMO=V Para K=2 hasta I-1 Si (ImodK=0) entonces PRIMO=F K=I-1 fin_si fin_para Si PRIMO=V entonces Escribir I fin_si fin_para fin

5. VARIABLES AUXILIARES DE UN ALGORITMO O PROGRAMA Son objetos que utiliza un algoritmo y que por la frecuencia con la que se utilizan y por la funcin que realizan dentro del mismo, toman un nombre especial: contadores, acumuladores e interruptores o switches.

5.1. Contadores Un contador es una variable destinada a almacenar un valor que se ir

incrementando o decrementando en una cantidad constante. Es una variable que se utiliza para contar cualquier evento que pueda ocurrir dentro del algoritmo o programa. Se suelen utilizar mucho en procesos repetitivos, es decir en los cuerpos de las instrucciones repetitivas. Sobre un contador se realizan dos operaciones bsicas: Inicializacin: Todo contador se debe inicializar con un valor inicial (0, 1...) Ej.: CONTADOR = Valor_Inicial Incremento Cada vez que aparezca el evento a contar se ha de incrementar o decrementar en una cantidad fija (I, D respectivamente ) el valor del contador. CONTADOR = CONTADOR + I CONTADOR = CONTADOR D

Ejemplo:

Cuenta el n de A's que un usuario introduce hasta finalizar con la pulsacin de un *

Algoritmo VOCAL_A // Este algorimo calcula el nmero de As introducidas por el usuario Entorno Entero CONT Caracter LETRA

fin_entorno Inicio CONT =0 Mientras (LETRA <> *) hacer Escribir "Introduce una A o un *" Leer LETRA Si LETRA = A entonces CONT =CONT + 1 fin_si fin_mientras Escribir CONT fin

Observaciones: Cuando se utiliza un contador con una instruccin Repetir o Mientras la operacin de inicializacin se realiza fuera del cuerpo del bucle y la de incrementacin o disminucin se realiza dentro. La automtica variables de control del bucle Para, son un ejemplo de variable

contador en las que la inicializacin y el incremento se realizan de forma

5.2. Acumuladores

Un acumulador o totalizador es una variable cuya misin es acumular cantidades sucesivas obtenidas al realizar la misma operacin. Realiza la misma funcin que un contador con la diferencia de que el incremento o decremento es variable en lugar de constante como en el caso del contador. El uso ms habitual de un acumulador es obtener sumas y productos.

Al igual que con los contadores, para poder utilizar un acumulador hay que realizar sobre ellos dos operaciones bsicas: Inicializacin: Todo acumulador necesita ser inicializado con el valor neutro de la operacin que va a acumular, que en el caso de la suma es el 0 y en el caso del producto es el 1. SumaTotal=0; ProductoFinal=1; Acumulacin: Una vez obtenido y almacenado en una variable la cantidad a acumular, le aadimos a la variable acumulador dicha cantidad, y le reasignamos el resultado. SumaTotal = SumaTotal + cantidad; ProductoFinal = ProductoFinal + cantidad;

Ejemplo:

Suma una serie de nmeros introducidos por teclado hasta que se introduce un 0.

Inicio. TOT = 0; Repetir Escribir Introducir sumando Leer NUM Si (NUM <> 0) entonces TOT = TOT + NUM fin_si

mientras (NUM<>0) Visualizar TOT fin

5.3. Interruptores, conmutadores o switches Un interruptor, conmutador o switch es una variable que puede tomar dos posibles valores a lo largo de la ejecucin del programa. Los valores que toma son normalmente 1 o s (encendido/abierto) y 0 o no (apagado/cerrado) (de ah su nombre de interruptor). Se utilizan principalmente para:

a) Recordar en un determinado lugar del programa la ocurrencia o no de un suceso: Ejemplo: Algoritmo que lee una secuencia de notas (hasta que se introduzca el valor -1) y nos dice si hubo o no una nota con valor diez:

Algoritmo CONMUTADOR1 Entorno Real NOTA Booleano ES_SOBRESALIENTE fin_entorno Inicio ES_SOBRESALIENTE = falso Repetir Escribir " Introduce una nota"

Leer NOTA Si (nota =10) ES_SOBRESALIENTE = verdadero fin_si mientras (nota != -1) Si (ES_SOBRESALIENTE = verdadero) entonces Escribir " Al menos hay una nota que es un 10" sino Escribir " Ninguna nota ha sido un10" fin_si fin

b) Realizar de forma alternativa e independiente dos procesos alternativos

Ejemplo: Sumar por un lado los nmeros pares comprendidos entre 1 y 100 y por otro los impares:

Algoritmo CONMUTADOR2 Entorno Entero SUMAPARES, SUMAIMPARES, I Booleano ES_PAR fin_entorno

Inicio SUMAPARES = 0 SUMAIMPARES = 0 ES_PAR = falso Para I = 1 hasta 100 incremento 1 Si (ES_PAR = falso ) entonces SUMAIMPARES=SUMAIMPARES + I ES_PAR = verdadero sino SUMAPARES = SUMAPARES + I ES_PAR = falso fin_si fin_para Escribir " La suma de los primeros 100 impares es:", SUMAIMPARES Escribir " Y la de los primeros 100 pares es:",SUMAPARES fin

Ejemplos:

En este algoritmo slo usamos un dato del usuario, y slo realizamos una operacin para dar el resultado:

Indicar al usuario que realice una serie de operaciones sobre un nmero elegido por l mismo, para finalmente adivinar el nmero pensado, conocido el resultado de las operaciones.

Algoritmo ADIVINA_NUM Entorno Entero RES fin_entorno Inicio Escribir Piensa un nmero Escribir Smale 1 y multiplcalo por 6 Escribir Suma 4 y divdelo por 2 Escribir Rstale 5 Escribir Dime el resultado Leer RES Escribir El nmero que habas elegido es el , RES/3 fin

En este algoritmo no usamos ninguna variable, ni siquiera realizamos operacin alguna aunque parezca lo contrario:

Algoritmo ADIVINA_PAIS Inicio Escribir Piensa un nmero

Escribir Smale 5 y multiplcalo por 4 Escribir Resta 12 y divdelo por 2 Escribir Resta el doble del nmero inicial Escribir Localiza la letra del alfabeto que ocupa esa posicin Escribir Piensa un pas europeo cuya inicial sea dicha letra y despus pulsa Escribir Ahora ests en DINAMARCA fin

Ejemplo:

MASTERMIND

Disponemos de una serie de colores: Rojo, Amarillo, Azul, Verde, Marrn, Rosa. Se trata de acertar una combinacin de 3 colores, en 6 intentos. Como pista se nos va diciendo el nmero de aciertos de cada intento (slo si el color y la posicin coinciden)

Entorno Entero INTENTOS, ACIERTOS Booleano EXITO Caracter C1, C2, C3, K1, K2, K3

fin_entorno

INICIO

INTRODUCI R C1, C2, C3

XITO = F

SI
INTRODUCI R K1, K2, K3

INTENTOS <7

NO

SI

EXITO= V

NO

ACIERTOS = 0

ESCRIBIR

ESCRIBIR Prueba de nuevo

SI

K1= C1

NO

Enhorabuena

ACIERTOS =ACIERTOS+1

SI
C3

NO
K2=C2andK3=

SI

ACIERTOS =ACIERTOS+2

SI

K2=C2orK3= C3

NO

ACIERTOS =ACIERTOS+1

SI

ACIERTOS =3

NO
INTENTOS =INTENTOS+1

XITO = V ESCRIBIR Hay , ACIERTOS,

aciertos

FIN

Relizar pseudocdigo. Ejemplo: La herencia (Euler, matemtico suizo del siglo XVIII). Un padre dej una herencia de 8.600 monedas a sus cuatro hijos: La parte del mayor debe ser inferior en 100 monedas al doble de la parte del segundo, la parte del segundo debe ser inferior en 200 monedas al triple de la parte del tercero, la parte del tercero debe ser inferior en 300 monedas al cudruplo de la parte del cuarto hijo Cunto dinero corresponde a cada uno de los cuatro hijos? Algoritmo HERENCIA_MONEDAS Entorno Entero A, B, C, D fin_entorno Inicio Para D=1 hasta 8600 C=4*D-300 B=3*C-200 A=2*B-100 Si (A+B+C+D=8600) entonces Escribir El mayor recibe: , A Escribir El segundo recibe: , B Escribir El tercero recibe: , C Escribir El pequeo recibe: , D fin_si

fin_para fin

Ejemplo: El negociante (Newton, matemtico y fsico ingls, siglo XVI y XVII) Un negociante separa al principio de cada ao 100 escudos para los gastos del ao, y aumenta el capital que le queda en un tercio cada ao. AL cabo de 3 aos ha duplicado su dinero. Cunto dinero tena el comerciante al principio? Algoritmo NEGOCIANTE Entorno Entero CAPITAL, INICIAL Booleano ENCONTRADO fin_entorno

Inicio ENCONTRADO=F CAPITAL=100 Mientras (ENCONTRADO=F) hacer INICIAL=CAPITAL Para I=1 hasta 3 CAPITAL=(CAPITAL-100)+(CAPITAL-100)/3

fin_para Si (CAPITAL=2*INICIAL) entonces Escribir El capital inicial era: , INICIAL ENCONTRADO=V

sino CAPITAL=INICIAL+1 fin_si fin_mientras fin

Ejemplo: La granja Un granjero gast 100 duros en comprar animales de tres clases. Cada vaca le cost 10 duros, cada cerdo 3, y cada oveja, medio duro. Sabiendo que compr al menos una vaca, un cerdo y una oveja, Cuntos animales de cada clase compr el granjero? Algoritmo GRANJA Entorno Entero VAC, CER, OVE fin_entorno Inicio Para VAC=1 hasta 9 Para CER=1 hasta 29 Para OVE=2 hasta 100 incremento 2 //ha de ser un n par<100 Si ((VAC+CER+OVE=100)and(VAC*10+CER*3+OVE/2=100)) entonces Escribir Compr ,VAC, vacas, ,CER, cerdos y ,OVE, ovejas. fin_si fin_para fin_para fin_para

fin

Ejemplo: La herencia del raj (problema ind del siglo IV) Un raj dej en herencia cierto nmero de perlas a sus hijas, de este modo: ...La primera recibir 1 perla ms 1/7 de las trestantes, .....la segunda recibir 2 perlas ms 1/7 de las restantes, .....la tercera recibir 3 perlas ms 1/7 de las restantes, .....y as con todas las hijas. Al finalizar el reparto, se comprob con sorpresa que todas las hijas recibieron el mismo nmero de perlas. Cuntas perlas dej en herencia? Cuntas hijas tena el raj?. NOTA: la ltima hija ha de tomar las perlas que deja la penltima N,de tal forma que 1/7 del resto (o sea 1/7 de 0) sea 0, de otro modo nunca se acabara el nmero de hijas. Por tanto sabemos que la ltima hija la n-sima recibe N perlas, pero como todas reciben las mismas perlas, deducimos que N hijas por N perlas cada una dan un total de N*N perlas o lo que es lo mismo HIJAS*HIJAS perlas. Por tanto hay que buscar un n de hijas N que se pueda repartir segn las condiones N*N perlas.Despreciamos la solucin trivial HIJAS=1 y PERLAS=1. Algoritmo HERENCIA_PERLAS Entorno Entero I, REPARTO, HIJAS, PERLAS Booleano ENCONT=F fin_entorno Inicio HIJAS=2 Mientras (ENCONT=F) hacer PERLAS=HIJAS*HIJAS I=1 Mientras (PERLAS>0) hacer Si ((PERLAS-I)mod7=0) entonces

REPARTO=I+(PERLAS-I)/7 PERLAS=PERLAS-REPARTO Si (PERLAS=0) entonces Escribir El n de hijas era , HIJAS Escribir Haba ,HIJAS*REPARTO, perlas y tocanban a,REPARTO sino Si (PERLAS>0) entonces I=I+1 fin_si fin_si sino PERLAS= -1 fin_si fin_mientras HIJAS=HIJAS+1 fin_mientras fin Ejemplo: Un profesor de matemticas jubilado se entretena algunos ratos libres jugando con la calculadora de su nieta. Descubri que la diferencia entre los cubos de las cifras de su edad era igual al cuadrado de la edad de su nieta. Podras decir cul era la edad de ambos? NOTA: suponemos que no se puede ser abuelo, por ejemplo con menos de 28 aos, con lo que adems evitamos posibles soluciones inadmisibles ( la diferencia de edad entre el abuelo y la nieta no puede ser negativa. Ej: 40 04 => diferencia de los cubos 64 = 82 => Edad abuelo 4 40 y la nieta 8 aos. La 1 opcin aunque cumple las condiciones es inadmisible, debe existir un nmero mnimo y positivo de aos de diferencia) Algoritmo EDADES

Entorno Entero D1,D2, NIETA //D1 y D2 dgitos de la edad del abuelo fin_entorno Inicio Para D1=2 hasta 9 Para D2=0 hasta 29 Para NIETA=1 hasta 100 Si(NIETA^2=ABS(D1^3- D2^3)and(D1*10+D2-NIETA>27) entonces Escribir La edad de la nieta ser ,NIETA; y la del profesor ,D1*10+D2 fin_si fin_para fin_para fin_para fin Ejemplo: De cuntas formas posibles se pueden sentar los N alumnos de una clase? Solucin: de N! Algoritmo ALUMNOS Entorno Entero ALUMNOS,FORMAS fin_entorno Inicio Escribir Cuntos alumnos hay? Leer ALUMNOS FORMAS=1

Mientras (ALUMNOS >1) hacer FORMAS=FORMAS*ALUMNOS ALUMNOS=ALUMNOS-1 fin_mientras Escribir Las formas posibles son , FORMAS fin Ejemplo: Un albail dispona de cierto nmero de losetas cuadradas, todas iguales, con ellas pudo formar dos embaldosados cuadrados casi de igual tamao uno del otro. El albail era aficionado a los problemas matemticos y se dio cuenta de que con el mismo nmero de losetas podra haber formado dos embaldosados cuadrados distintos de los anteriores, y esta vez, uno mucho mayor que el otro. Cul era el tamao de los embaldosados?. NOTA: basta encontrar un par de nmeros cuya suma de cuadrados sea igual a la suma de cuadrados de otro par distinto de nmeros. Sol: 85 = 92 + 22 = 72 + 62 Para facilitar la solucin al problema, consideramos lo siguiente: los dos primeros embaldosados son similares (lados: b, c) y uno ser mayor que el otro ( c < b), los segundos embaldosados (lados: a, d) son muy diferentes, tambin habr uno mayor que el otro (d < a), pero en este caso, el de lado menor ser el menor de los cuatro y el de lado mayor el mayor de los cuatro: a>b>c>d. Por otro lado a y b no podran ser iguales a c o d, ya que se tratara de la misma combinacin. a2 + d2 = b2 + c2 X 1 2 3 1 1 2 1 0 2 4 1 3 3 9 4 5 6 7 8 4 1 7 2 0 2 5 1 6 5 2 6 2 9 3 4 4 1 2 5 6 3 7 4 0 4 5 5 2 6 1 3 6 7 5 0 5 3 5 8 6 5 7 4 8 5 4 9 8 9 10 11 ..... .. 10 122 ... 1 .. 10 125 ... 4 .. 10 130 ... 9 .. 11 137 ... 6 .. 12 146 ... 5 .. 13 157 ... 6 .. 14 170 ... 9 .. 16 185 ...

65 82 68 85 73 90 80 97 99 10 6 10 11 0 7 11 13 3 0 64 15

9 1 0 1 1

5 4 81 18 1 10 0

.. 202 ... .. 221 ... .. 121 ... ..

Algoritmo LOSETAS Entorno Entero A=4, B=3, C=2,D=1 Booleano ENCONTRADO fin_entorno

Inicio Mientras (ENCONTRADO=F) hacer Repetir Repetir Repetir Repetir Si (A^2+D^2=B^2+C^2) entonces ENCONTRADO=V

Escribir Los primeros embaldosados eran de , B, y , C, losetas. Escribir Los segundos embaldosados eran de , A, y , D, losetas. fin_si D=D+1 mientras ((D<C)and (ENCONTRADO=F)) C=C+1 D=1 mientras ((C<B)and (ENCONTRADO=F)) B=B+1 C=2 mientras ((B<A)and (ENCONTRADO=F)) A=A+1 B=3 mientras (ENCONTRADO=F) fin_mientras fin

Slo obtendramos la 1 solucin vlida, si queremos buscar ms, usaramos un contador par la bsqueda de N soluciones.

Ejemplo:

Elaborar un algoritmo llamado JUGADORES que resuelva el siguiente problema: Tres jugadores convienen que el que pierda una partida, doblar el dinero que en ese momento tenga cada uno de los otros dos. Despus de haber perdido una nica partida cada uno de ellos, cada jugador termina con 200 pesetas. Cunto dinero tenan al principio del juego? NOTA: En juego siempre hay la misma cantidad 600 ptas.. Cada jugador pede tener en cada partida desde 1 a 598 ptas.. El que pierde siempre tiene que poseer ms que los otros, de otro modo se quedara sin dinero y nunca podra acabar con ms de 0 pesetas.

Algoritmo JUGADORES Entorno

Entero I,J,K,J1, J2, J3 fin_entorno Inicio Para I=1 hasta 598 1 partida Para J=1 hasta I 2 partida Para K=1 hasta I en la 3 partida J1=I-J-K J2=2*J J3=2*K J2=J2-J1-J3 J1=2*J1 J3=2*J3 J3=J3-J1-J2 J1=2*J1 J2=2*J2 Si ((J1=200)and(J2=200)and(J3=200)) entonces Escribir Tenan inicialmente : , I , J, y , K // Para salir de los para fin_si J1=J2=J3=200 fin_para fin_para fin_para fin // usaramos // Cantidad inicial del jugador que pierde // Cantidad inicial del jugador que pierde en la // Cantidad inicial del jugador que pierde en la

Ejemplo: Los tres hermanos Un caminante se encuentra con tres hermanos que discutan

acaloradamente. Al interesarse por su disputa le dijeron: Fjese, nuestro padre, al morir nos dej 96 ovejas en herencia para que las repartiramos de modo que cada uno tenga una cantidad igual a su edad..., lo que da justo 96. Y esto no es justo porque siendo yo el menor tengo ms tiempo de vida por delante y debera tener ms ovejas.... El caminante entendi muy bien el motivo de la ria y despus de pensar un poco, les dijo: Si queris puedo ayudaros. T el ms joven toma la mitad de las ovejas que tienes y reprtelas entre tus hermanos a partes iguales. Despus de hacer esto, el sabio sigui: Y t, el mediano, toma la mitad de las ovejas que ahora tienes y reprtelas a partes iguales entre tus hermanos. Y prosigui: Ahora t, el mayor, toma la mitad de las ovejas que tienes y reprtelas entre tus hermanos Despus de todos estos cambios, los tres hermanos vieron con sorpresa que todos tenan ahora la misma cantidad de ovejas. Los tres hermanos quedaron contentos y aprendieron una gran leccin de fraternidad. Qu edad y tena cada uno de los hermanos?

Algoritmo HERMANOS

Entorno Entero EDAD_1, EDAD_2,EDAD_3,PASO_1,PASO_2;PASO_3 fin_entorno /* El menor no puede sobrepasar los 32 aos, ya que entonces por necesidad uno de sus hermanos debera tener menos aos */ Inicio Para EDAD_3=1 hasta 32 Para EDAD_2=EDAD_3 hasta (96-EDAD_3) EDAD_1=96-EDAD_3-EDAD_2 PASO_3=EDAD_3/2 PASO_2=EDAD_2+ EDAD_3/2 PASO_1=EDAD_1+EDAD_3/2 PASO_2=PASO_2/2 PASO_1=PASO_1+ PASO_2/2 PASO_3=PASO_3+ PASO_2/2 PASO_1=PASO_2/2 PASO_2=PASO_1+ PASO_2/2 PASO_3=PASO_3+ PASO_2/2 Si ((PASO_1=PASO_2)and(PASO1=PASO_3)) entonces Escribir Sus edades eran : , EDAD_1, EDAD_2, y ,EDAD_3, aos fin_si fin_para fin_para fin

Ejemplo: La recompensa de los tres marineros Un capitn de barco recompensa a tres marineros con ms de 200 monedas y menos de 300. Durante la noche, uno de los marineros, se levanta sigiloso y .....; ....hago 3 montones iguales, me quedo con uno, y esta moneda que sobra la tiro al mar Ms tarde se levanta otro marinero y actu igual: ....hago 3 montones iguales, me quedo con uno, y esta moneda que sobra la tiro al mar Al poco rato, se levanta el tercer marinero e hizo igual que sus compaeros: ....hago 3 montones iguales, me quedo con uno, y esta moneda que sobra la tiro al mar A la maana siguiente, el contable reparti lo que quedaba en tres montones iguales y se qued con una moneda que sobraba en pago a su trabajo. Cuntas monedas haba, y cuntas recibi del contable cada marinero? cuntas monedas tena realmente cada uno de los marineros?

Algoritmo MARINEROS Entorno Entero MON, REPARTO, MAR1,MAR2,MAR3 fin_entorno Inicio Para MON=201 hasta 300 Si ((MON-1)mod3)=0) entonces REPARTO=(MON-1)*2/3 MAR1=REPARTO/2 Si ((REPARTO-1)mod3)=0) entonces REPARTO=(REPARTO-1)*2/3 MAR2=REPARTO/2

Si ((REPARTO-1)mod3)=0) entonces REPARTO=(REPARTO-1)*2/3 MAR3=REPARTO/2 Si ((REPARTO-1)mod3)=0) entonces REPARTO=(REPARTO-1)/3 Escribir Haba,MON, monedas REPARTO Escribir El primero acaba con ,REPARTO+MAR1, monedas. Escribir El segundo acaba con ,REPARTO+MAR2, monedas. monedas. fin_si fin_si fin_si fin_si fin_para fin Escribir El tercero acaba con ,REPARTO+MAR3, y tocan a ,

Vous aimerez peut-être aussi