Beruflich Dokumente
Kultur Dokumente
DE RESOLUCIÓN DE PROBLEMAS
1. Introducción
El proceso de programar siempre involucra la escritura de un texto llamado
PROGRAMA, el cual debe poder ser ejecutado por una computadora, pero hay que
tener cuidado de creer que la programación es sólo eso, programar es mucho más
complejo que la tarea de escribir dicho texto.
La parte de la programación que consiste en transcribir al lenguaje
correspondiente el método de solución elegido se llama "codificación" y debe
distinguirse del proceso previo de desarrollo del programa que se llama "diseño".
Una etapa fundamental de este proceso es el análisis del problema y la búsqueda
de un método eficiente de resolución. En este capítulo se va desarrollar una
metodología.
3. Contenidos
Los contenidos que se presentarán en esta unidad son:
Ø Etapas en la solución de problemas.
Ø Concepto de algoritmo.
Ø Método Heurístico. Diseño de algoritmos.
Ø Programación Estructurada.
Ø Lenguaje de diseño de programa.
Ø Estructuras algorítmicas fundamentales.
Ø Generalización del concepto de procedimiento.
Concepto de algoritmo
La palabra algoritmo se usa en homenaje al matemático UzbekoAl-Kuaritzmi quien
en el año 880 escribió un libro, en el que por primera vez se expresaban métodos
precisos para efectuar las cuatro operaciones básicas, que hoy en día se siguen
utilizando.
La etapa vital de la solución de un problema con una computadora es el diseño del
algoritmo y de la estructura fundamental de datos.
DEFINICIÓN
Un algoritmo es un conjunto finito de instrucciones que especifican una secuencia de
operaciones a realizar en orden para resolver un problema específico. En otras
palabras, un algoritmo es un método para la solución del problema.
Podemos distinguir cuatro propiedades principales: Secuencialidad, Ausencia de
Ambigüedad, Generalidad y Limitación.
Secuencialidad
Se debe especificar sin lugar a dudas la secuencia en la que se deben llevar a cabo
los pasos del algoritmo. Un algoritmo debe tener una instrucción inicial única y cada
instrucción debe tener un sucesor único para un dato de entrada dado. Las
instrucciones son llevadas a cabo de arriba hacia abajo, a menos que las mismas
especifiquen otra cosa.
Las entradas son las partidas de datos presentadas al algoritmo. Un algoritmo
puede tener o no entradas. Si las hay deben ser del tipo para el cual se ha diseñado
el algoritmo.
Las salidas son partidas de datos procesadas que son el resultado de la ejecución
de un programa basado en el algoritmo. Un algoritmo debe producir al menos una
salida.
Ausencia de Ambigüedad:
Un algoritmo debe ser definido, claro, preciso y no ambiguo. La representación de
cada paso de un algoritmo debe dar lugar a una sola interpretación posible.
Esta condición significa que cada vez que se presente para su ejecución un
algoritmo con los mismos datos de entrada, se obtendrán los mismos resultados.
Las instrucciones de un algoritmo deben ordenar a la computadora que solo lleve
a cabo tareas que sea capaz de hacer. Una computadora no puede efectuar una
instrucción si tiene información insuficiente o si el comando no está definido.
Generalidad
Un algoritmo se puede realizar para varios problemas que se relacionan entre sí. Un
algoritmo se aplica a un problema o clase de problemas específicos; el rango de las
entradas o dominio se tiene que definir previamente, ya que esté determina el alcance o
la generalidad del algoritmo.
Limitación
Un algoritmo es finito en tamaño y tiempo. La ejecución de un algoritmo programado
debe finalizar después de que se haya llevado a cabo una cantidad finita de operaciones.
El número de operaciones que se realizan en la ejecución de un algoritmo raramente
es igual al número de pasos en la descripción del algoritmo. La longitud del programa
no es un buen indicador del tiempo de ejecución.
Un ejemplo de problema para determinar claramente un algoritmo través de sus
cuatro propiedades principales, es el siguiente:
Exprese si el procedimiento dado para el siguiente problema:
a) Cumple con las propiedades que debe tener un algoritmo. Justifique su
respuesta.
b) Si el procedimiento no cumple con todas las propiedades, elabore el algoritmo
correspondiente.
Problema: "Obtener una determinada página de un libro"
Procedimiento:
Paso 1: Abrir el libro en la página 1.
Paso 2: Si la página que está examinando es la página 15 deténgase.
Paso 3: En caso contrario, observe la siguiente, pasando una hoja, si es necesario.
Paso 4: Repetir los pasos 2 y 3 tan a menudo como se requiera.
Respuesta
No es un algoritmo.
Justificación
Generalidad: No se verifica ya que sólo permite encontrar la página 15
Limitación: No se verifica, si el libro tiene menos de 15 páginas o no
existe esa hoja no se llega al fin
No ambigüedad: No se verifica, las frases "si es necesario" y "tan a menudo
como se requiera" no son claras y precisas.
Secuencialidad: el orden de los pasos es correcto, pero están ausentes
aquellos que llevarán a cumplir las propiedades anteriores.
Algoritmo:
Paso 1: Obtener el libro y la página que debe encontrarse (NPD: Número de Página
Deseado). Paso 2: Poner el libro en posición derecha.
Paso 3: Abrir el libro en cualquier página cercana a la parte central.
Paso 4: Si el número en la página izquierda es mayor que el NPD, pasar al Paso 9.
Paso 5: Si el número en la página izquíerda es igual a NPD, alto.
Paso 6: Si el número de la página derecha es igual a NPD, alto.
Paso 7: Pasar la Hoja de derecha a izquierda.
Paso 8: Si se ha llegado al fin del libro, la página no existe, de manera que hay que
hacer alto. Paso 9: Pasar la hoja de izquierda a derecha.
Paso 10: Si se ha llegado al extremo del libro, la página no existe. Alto. En caso
contrario, continuar con el paso 4.
Dominio de un Algoritmo
Si el algoritmo no es general dentro de alguna clase de problemas entonces es de
poca utilidad. Por lo tanto, un método para marcar el número telefónico 220234 casi no
tiene valor para nadie, mientras que un método para marcar cualquier número
podrá ser útil. Por supuesto, debe haber alguna restricción a la generalidad de un
algoritmo.
La clase o el conjunto de datos y las condiciones para las cuales un algoritmo trabaja
correctamente se llama dominio. Cuando se trata de resolver cualquier problema
es necesario definir el dominio del algoritmo y después verificar que trabaja para
todos los casos que se encuentran dentro de ese dominio. Es necesario incluir en
el dominio todas las situaciones similares, pero los casos remotos o poco probables se
pueden omitir.
Errores en la Construcción de un Algoritmo
En los algoritmos se pueden presentar dos tipos de errores:
i. Errores de Dominio
Se presentan cuando no se han especificado todas las situaciones que se pueden
presentar en la práctica o se ha descuidado la apreciación de su importancia. Las
pruebas más difíciles son aquellas que verifican que se ha seleccionado un dominio
correcto para el algoritmo. A medida que el problema se presenta, se tiene que
clasificar y hay tres opciones:
a) Ignorarlo porque es improbable y quizás nunca ocurra.
b) Restringir el domínio del algoritmo para excluirlo.
c) Corregir el algoritmo.
Método Heurístico
Heurística1
La heurística proporciona un esquema o plan para abordar los problemas poco
conocidos, mejora la capacidad de crear soluciones y asegura que el método que se va
usar sea eficiente.
En la etapa de planeación es donde se tiene oportunidad de comparar métodos y
seleccionar el más adecuado.
La necesidad de la heurística, de la planificación, se hace más evidente a medida
que se gana más experiencia. Al principio el nivel de capacidad probablemente será
bajo y aun los problemas más simples requerirán de consideración cuidadosa. Luego, a
medida que aumenta la experiencia y el conocimiento, aumentará la capacidad de
desarrollar soluciones más y más complejas sin tener que recurrir a la planeación
detallada. Sin embargo, siempre habrá un patrón de problema en el cual las
soluciones no se encuentren con facilidad y una vez más tendrá que recurrir a la
heurística.
Entendido el concepto de algoritmo surge la pregunta ¿Cómo se pueden resolver
los problemas para los que no hay un método establecido o para los cuales no
conocemos un algoritmo?.
El método heurístico2 consta de las siguientes etapas:
A- Conciencia
Todos tenemos alguna capacidad para resolver los problemas en forma creativa. A las
personas que resuelven con éxito los problemas le es difícil aceptar la necesidad de la
heurística, ya que consideran que saben lo suficiente; sin embargo pocas de ellas
tendrán un éxito completo y no habrá ninguna posibilidad de mejorar. Por otra parte, los
que se consideran ineptos para manejar problemas que no conocen bien tenderán a
evitar las situaciones difíciles y, por tanto, no podrán descubrir los progresos posibles.
Entonces, como primer paso para mejorar nuestras aptitudes, es necesario estar
conscientes de ellas y saber controlar las habilidades.
Esto conduce al meollo de todos los métodos heurísticos:
Debo estar consciente de lo que estoy haciendo.
Es necesario reconocer deliberadamente cada paso que se tome en la solución de un
problema. Desde el principio se debe adoptar una actitud receptiva. Todas las
propuestas deben considerarse sin importar qué tan obvias o imposibles aparezcan. En
esta forma se creará una conciencia y nuevas soluciones pueden aparecer. Para obtener
algún beneficio de este método es necesario aceptar en forma tentativa todas las ideas
que se presenten.
B- Definición
La definición de un problema implica la formulación de tres preguntas:
i. ¿Qué resultados se deben obtener?
ii. ¿Qué datos se nos proporciona?
iii. ¿Qué condiciones relacionan los datos con los resultados? ¿Son satisfactorias
estas condiciones (es decir, aseguran que se obtendrán resultados correctos para
todos los datos)?
1
La palabra proviene del griego "heurisko", que significa "yo encuentro”
2
Es un sistema de educación en el cual se entrena al alumno para descubrir las cosas por sí mismo. Se incita a
comprender, a encontrar razones, se da al alumno la oportunidad de descubrir fundamentaciones
Se recomienda realizar las siguientes actividades en esta etapa:
a) Especifique con precisión qué resultados se quieren. Si los resultados van a
tener un uso práctico los datos originales se deben incluir en los resultados
finales.
b) Defina todos los datos en forma precisa. Examine las especificaciones de los
mismos y encuentre cuántos tipos de datos hay. ¿Puede variar éste número?
¿Hay alguna restricción en el tipo de datos?
c) Asegúrese de que no omite condiciones y de que comprende perfectamente los
términos que se utilizan para relacionar los datos y los resultados.
d) A menudo no se pueden establecer correctamente las condiciones hasta que se
analiza más detalladamente el problema. Sin embargo, es posible tener un
conocimiento intuitivo de las condiciones y más adelante se puede revisar esta
definición en función de la experiencia posterior.
e) Trate de introducir una notación adecuada para los datos y resultados,
mediante la cual se puedan expresar las condiciones en forma más clara y
concisa.
Es probable que al tratar de desarrollar una solución, se encuentren fallas en esta
definición y las preguntas se tengan que volver a establecer. Siempre se debe
considerar que una definición preliminar es tentativa. No debe cambiarse sin una razón
positiva y hasta entonces es necesario apegarse estrictamente a ella.
(1) Sí
Si usted cree que comprende un problema, el siguiente paso es verificar que está en
lo cierto.
a) ¿He resuelto el problema o uno similar?
b) Estudie las condiciones. ¿Se satisfacen todas?
c) Estudie las condiciones. ¿Ha supuesto condiciones que no existen?. Cuando se
aproxima al éxito, la persona dice: "¡Entiendo el problema!" y procede a
desarrollar un algoritmo, pero a menudo está equivocada. Es necesario
comparar la solución propuesta y los pasos mediante los cuales se obtuvo con
la definición original, para ver si hay discrepancias entre ellas. Por lo general,
las fallas se presentan por imponer condiciones incorrectas, pero también se
deben verificar los datos y los resultados esperados.
La habilidad para seleccionar un buen método depende principalmente de la
experiencia previa, pero se puede indicar una guía importante:
d) Seleccione el procedimiento más sencillo y claro, el que tenga menos sutilezas
La eficiencia de un algoritmo (su rapidez de ejecución) es de gran importancia
y a menudo se utiliza como el criterio básico para seleccionar un método. No
obstante, es mejor buscar y desarrollar el algoritmo que sea más eficiente
desde el punto de vista del que lo resuelve, es decir, la solución que se pueda
convertir en algoritmo con el menor esfuerzo.
(2) No
Además de resolver un problema equivocado, se pueden presentar otros obstáculos.
Quizás la definición del problema es demasiado vaga o que no se haya podido resolver
bien en forma manual. Casi siempre se presentan estas dificultades y se deben a que no
se invierte suficiente esfuerzo en las primeras fases para poder obtener experiencia.
a) ¿Qué es lo que impide resolver el problema?
Primero, es esencial revisar con todo cuidado lo que se ha hecho, comparando
el trabajo realizado con la definición del problema. De este modo sería fácil
retroceder y determinar que cambios son necesarios y, al mismo tiempo,
examinar porque se introdujo este error, para evitar la misma situación en el
futuro. Es obvio que la pregunta C(a) no se ha contestado adecuadamente, ya
que se ha resuelto un problema distinto al que se propuso. 'Si no se ha resuelto
el problema propuesto, es necesario estudiarlo más a fondo.
b) ¿Se puede encontrar un problema del mismo tipo que sea más sencillo?
c) ¿Se ha visto con anterioridad el problema en una forma distinta?
d) ¿Se conoce un problema relacionado o análogo?
E- Análisis: Segmentación
¿Es posible dividir el método de solución propuesto en varios segmentos lógicos? Si
es así, hágalo. Trate cada segmento o módulo como un problema distinto.
Esta división sólo se puede hacer cuando se está seguro de que los subproblemas son
independientes entre sí. El propósito de esta simplificación es permitir una mayor
concentración de atención en el problema.
Diseño de algoritmos
A continuación expondremos un método eurístico para diseñar algoritmos
denominado DIVIDE AND CONQUER, el cual es una técnica TOP-DOWN. Este
método permite implementar la segmentación, descomposición de un problema largo y
complejo en subproblemas independientes más pequeños y fáciles de resolver que el
problema de partida.
En resumen, la técnica consiste en varias etapas:
El diseño del algoritmo que resuelve un problema, realizado con esta técnica recibe
el nombre de diseño descendente y resulta en algoritmos muy legibles, claros, fáciles
de entender, seguir y corregir.
El diseño de un algoritmo no se hace de una sola vez, sino que se va resolviendo en
una secuencia de pasos (llamados pasos de refinamiento).
En cada paso el problema es refinado agregando detalles significativos, por lo que el
método se conoce como Método de los Refinamientos Sucesivos.
Ejemplo:
Un ingeniero es convocado para construir un edificio:
un subproblema sería
otro subproblema:
un tercer subproblema:
Secuenciación:
Descripción de una acción que se lleva a cabo luego de otra y así sucesivamente. De
allí el nombre de secuencia. Usando el lenguaje de descripción de problemas (LDP), se
describe de la siguiente manera:
Selección:
Esta estructura permite tomar decisiones sencillas ya que permite evaluar, en
tiempo de ejecución, una condición lógica (booleana) para decidir cuál de dos
caminos escoger a continuación, ya que esta condición puede tomar solo uno de dos
valores: Verdadero (True) o Falso (False). Desde el LDP se usa la forma:
SI condición ENTONCES
Al
SINO
A2
FIN SI
Iteración:
Es la última construcción primitiva definida como estructura algorítmica
fundamental. Luego de evaluar una condición lógica, si la misma es verdadera ejecutará
la acción y continuará haciéndolo mientras la condición siga siendo verdadera. Es claro
que el lazo terminará cuando la condición se haga falsa. Más aún, si es falsa de entrada,
el lazo no se ejecutará nunca. En el LDP, se usa la forma:
MIENTRAS condición HACER
Al
FIN MIENTRAS
e. Regla de clausura:
Solamente los programas formados por aplicaciones de las cuatro reglas
precedentes son programas bien construidos.
Partiendo de estas ideas, podemos agregar nuevas estructuras muy utilizadas para
programar, construidas a partir de las estructuras básicas ya presentadas.
Se introducen como definiciones.
Selección
Caso en que A2 sea un acción nula o vacía
SI condición ENTONCES
Al
FIN SI
SEGUN exp
conjunto de valores1: Al;
conjunto de valores2: A2;
…
conjunto de valoresn: An;
SINO
: An+1;
FIN SEGUN
Iteración Condicional
A este tipo de iteración se la conoce como bucle tipo mientras:
REPETIR
Al
HASTA QUE condición
que equivale a:
Al;
MIENTRAS NO condición HACER
Al
FIN MIENTRAS
Iteración no condicional
A este tipo de iteración se la conoce como ciclo FOR NEXT
HACER n 'VECES (para i de 1 a n)
Al
FIN
que equivale a:
i 1;
MIENTRAS i < n HACER
Al;
i i+1
FIN MIENTRAS
Formas de reducción de complejidad
Las estructuras algorítmicas fundamentales, base del lenguaje de diseño LDP,
permiten realizar un análisis descendente del problema y diseñar una solución por
refinamientos sucesivos, usando las tres formas de tratamiento siguientes:
Secuenciación
La secuenciación consiste en la descomposición del problema en una secuencia de
acciones intermedias.
Al;
A2;
An ;
donde A1, A2, … son acciones "elementales o triviales" o son acciones que necesitan
a su vez una descomposición. Se dice entonces que el algoritmo se ha secuenciado
en acciones o pasos donde:
i. Las acciones se ejecutan de a una a la vez.
ii. Cada paso se ejecuta una sola vez, ninguno se repite, ninguno se omite.
iii. Las acciones se ejecutan en el mismo orden en el que están escritas.
iv. La terminación del último paso implica la terminación de la secuencia.
Algoritmo: transformar
Datos: n número entero positivo
Salida: d,h,m,s números enteros positivos
Variables: rd,rh de tipo entero
A2 convertir
A2.1. d n/86400;
A2.2. rd RESTO(n,86400);
A2.3. h rd/3600;
A2.4. rh RESTO(rd,3600);
A2.5. m rh/60;
A2.6. s RESTO(rh,60);
i. Condición Excepcional
En la condición excepcional se evalúa el cumplimiento de una condición para
determinar si una acción particular debe ejecutarse o no.
La forma de expresar la misma es:
SI condición ENTONCES
A
FIN SI
donde "condición" especifica la circunstancia bajo la cual la acción A debe ejecutarse.
El procesador debe ser capaz de evaluar la veracidad o falsedad de las condiciones
de la misma manera que es capaz de realizar acciones.
El lenguaje algorítmico debe por lo tanto permitir expresar estas condiciones y más
aún, debe permitir refinar las mismas hasta que sean lo suficientemente detalladas y
precisas como para ser interpretadas.
Ejemplo:
SI b ≠ 0 ENTONCES
cociente a / b;
FIN SI
En este ejemplo, desde el punto de vista de la subdivisión del dominio de datos en
subdominios, de todos los valores posibles de b sólo interesan aquellos valores
distintos de cero.
O sea que se ha excluido el caso b = O.
Ejemplo :
SI x < Z ENTONCES
min x
SINO
min Z
En este ejemplo se ha dividido el conjunto de valores posibles de x en dos casos, los
valores de x que son menores que Z, y los que no lo son. Las acciones Al y A2 se
ejecutan de una manera excluyente de acuerdo al subintervalo al que pertenezca el
valor particular con el cual se instancie x.
Algoritmo: valorabs;
Datos: x: número real;
Salida: val: número real no negativo;
v1. LEER(x);
v2. SI x < 0 ENTONCES
v3. val -x
SINO
X
FIN SI
v3 ESCRIBIR(val);
v4 Parar.
Puede ocurrir que alguna de las acciones a realizarse sea a su vez un análisis por
caso, como el ejemplo siguiente:
EJERCICIO
Escriba un algoritmo que lea la identificación numérica de un alumno y sus notas en tres parciales de
una materia. A partir de ellas, su algoritmo debe determinar si el alumno ha promocionado o
regularizado la materia de acuerdo a los siguientes criterios:
• Promociona: Si ha aprobado todos los parciales con 7 o más.
• Regulariza: Si no ha sido aplazado en ningún parcial.
Algoritmo: calificación;
Datos: ident, nl,n2,n3: enteros no negativos;
Salida: id: entero no negativo, condición: texto;
Análisis Iterativo
Con frecuencia suele ocurrir que el programador se enfrenta a un problema en el
cual el mismo tratamiento se debe aplicar a un gran número de objetos.
Suele ocurrir que el número de estos objetos no es fijo o no se conoce de
antemano.
El tratamiento iterativo se aplica a las denominadas "secuencias de objetos".
Una secuencia de objetos es:
Ø La secuencia vacía
Ø Una secuencia a la que se le agrega un objeto.
Ø Una secuencia no vacía a la que se le quita un objeto.
La secuencia de objetos puede tener un número fijo de objetos o estar terminada por
un elemento de características fácilmente distinguibles del resto de los objetos y que se
designa como marca final.
Esquemáticamente, se puede ver a una secuencia con marca como:
obj1 obj2 obj3 objn MF
La característica fundamental del tratamiento de secuencias es que los elementos se
acceden de a uno por vez en un orden estricto.
Al tratar una secuencia existen diferentes "estados", se pueden considerar los
siguientes estados en el tratamiento iterativo:
Estado inicial = e0
Estados intermedios = e1,e2,...,en 1
Estado final = en
En el estado inicial e0, se está sobre el primer elemento de la secuencia
y el tratamiento aún no se ha aplicado.
En el estado el, se está sobre el segundo elemento de la secuencia y el
tratamiento ya se aplicó al primer elemento.
En el estado ek se está sobre el (k+l)-ésimo elemento de la secuencia y
el tratamiento se aplicó en los k primeros elementos.
En el estado final se está sobre la marca final y el tratamiento se aplicó
a todos los objetos de la secuencia.
Las estructuras iterativas provistas por el lenguaje LDP que serán usadas como
herramientas para la construcción de algoritmos iterativos son:
Iteración Condicional:
MIENTRAS condición REPETIR
A; A
FIN MIENTRAS HASTA QUE condición;
Ejemplo 2:
Dado un conjunto de números que corresponden a un registro de velocidades tomadas en ruta en un
fin de semana.
Debe Ud. controlar el número de vehículos que superaron la velocidad máxima permitida de 100
km/hr. El fin de los datos se indica con un valor 1000 (marca final).
Por ejemplo si la secuencia tratada fuese: "90 120 100 80 115 130 90 120 1000", el resultado
sería 4. Nótese que la MF no forma parte de la secuencia y que una vez que la MF ha sido
alcanzada, la acción LEER no puede realizarse más.
Algoritmo: control;
Datos: secuencia de números reales >0 (vel) con marca final (MF
= "-1 ");
Salida: cont: entero no negativo
L1. LEER(vel);
L2. Contar-excesos;
L3. ESCRIBIR(cont);
L4. Parar
Diagramas de flujo
Un diagrama de flujo ("flowchart") es otra técnica de diseño de algoritmos. Consiste
en una serie de símbolos que denotan acciones, decisiones o procedimientos que se
unen mediante flechas y conectores.
Esta representación nos ayudará a conocer la información que tenemos, donde la
tenemos, qué debemos hacer con ella y cómo presentarla. Debe tener las cualidades de
sencillez, claridad y normalización en su diseño.
Veamos a continuación algunos ejemplos de uso:
Pseudocodigo Diagrama
LEER(A ,B,C)
SI A > B ENTONCES
Verdadero
SI A > C ENTONCES
ESCRIBIR(A) Falso
SINO Decisión
ESCRIBIR(C) Lógica
FIN SI anidada
SINO
SI B > C ENTONCES
ESCRIBIR(B)
SINO
ESCRIBIR(C)
FIN SI
FIN SI
FIN
Pseudocodigo Diagrama
N 0
Ciclo
MIENTRAS N < 99
Repetitivo
N N + 3 (Bucle)
ESCRIBIR (N)
bucle
FIN MIENTRAS Cuerpo del
FIN
Testeador
Algoritmo Inicio
1. Hacer S igual a 0
2. Hacer N iguala 0 S=0
3. Sumar N a S N=2
4. Sumar 2 a N
5. Si N es menor o igual a 100 ir al paso 3
6. Imprimir el resultado S = S+N
7. Finalizar N = N+2
sí
Pseudocódigo: N<100
no
Fin
S 0
N 2
MIENTRAS N < 1OO
S S+N
N N+2
FIN MIENTRAS
ESCRIBIR (S)
FIN
Variables:
n n!
C
k k! n k!
fórmula:
La acción f2 del ejemplo anterior sólo calcula el factorial de un número designado
con m, sería conveniente poder generalizarla de manera que la misma se use para
calcular cada uno de los factoriales necesarios en esta situación.
En efecto, puede pensarse en una solución general, designando la acción f2 como
fac(n) de manera que sirva para calcular el factorial de cualquier entero.
f2. fac(n)
Argumento: n: entero no negativo;
Resultado: entero positivo;
Variables: f,i: enteros positivos
f2.1. f 1;
f2.2. i 1;
f2.3. HACER n VECES
f f*i;
i i+l;
f2.4. fac f;
Ejemplo 3: La función Esvocal recibe un caracter y permite determinar si se trata de una vocal o no.
Función Esvocal(c)
Argumento: c: un caracter
Resultado : lógico (booleano)
SEGUN c
c = “a” o c = “A”
c = “e” o c = “E”
c = “i" o c = “I”
c = “o” o c = “O”
c = "u" o c = “U” : Esvocal verdadero;
6. Referencias Bibliograficas
o Barchini de Giménez, Graciela, Montalvetti, Mario, Avila, Claudia, Silva, 2002,
Informática para Ingenieros, FCEyT — UNSE: 2002.
o Joyanes Aguilar, Luis. Fundamentos de Programación. McGraw Hill: 1998.
o Norton, Peter (2001), Introducción a la Computación. Mc Gravy Hill: 2001.
o Mentz de Acosta, Mabel, Fernández, Patricia, Luccioni Griselda, Juarez Aráoz, Alberto
(2003). Introducción a la Informática, Cooperadora de la FACET, UNT: 2003