Curso De Java Orientado a Android
Prof. Carlos A. Arroyo
PESUDOCÓDIGO
INTRODUCCIÓNEl pseudocódigo (falso lenguaje) es una descripción de alto nivel de un algoritmo que emplea una mezcla de
lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, como
asignaciones, ciclos y condicionales. Es utilizado para describir algoritmos en libros y publicaciones
científicas, y como producto intermedio durante el desarrollo de un algoritmo.
El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto
puede omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes
suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación
concretos. Sin embargo, el pseudocódigo en general es comprensible sin necesidad de conocer o utilizar un
entorno de programación específico, y es a la vez suficientemente estructurado para que su implementación
se pueda hacer directamente a partir de él.
¿Para qué sirve el Pseudocódigo? Sirve para escribir programas de computadora en lenguaje natural de tal
manera que se facilite la comprensión, prueba y posterior codificación en un lenguaje de programación
específico.
A continuación se muestra un algoritmo en pseudocódigo para obtener la suma de 2 números:
1. Inicio
2. Solicitar x, y
3. Calcular Suma=x+y
4. Imprimir Suma
5. Salir
ESTRUCTURA DE UN PSEUDOCÓDIGO
Un programa escrito en pseudocódigo está estructurado en tres secciones principales:
o Cabecera
o Declaraciones
o Cuerpo
CABECERA
En la cabecera de un programa se debe indicar el nombre (identificador) asignado al mismo. La
sintaxis es:
program <nombre_del_programa>;
DECLARACIONES
En esta sección se declaran las constantes (const), los tipos de datos (type), las variables (var), los
precedimientos (procedure) y las funciones (function) definidos por el programador que se usan
en el programa. También se puede indicar tanto la <lista_de_unidades> como la
<lista_de_etiquetas> que se utilicen en el programa. La sintaxis es: Curso De Java Orientado a Android
[ uses
<lista_de_unidades>; ]
[ label
<lista_de_etiquetas>; ]
[ const
<declaraciones_de_constantes>; ]
[ type
<declaraciones_de_tipos_de_datos>; ]
[ var
<declaraciones_de_variables>; ]
[ procedure
<declaraciones_de_procedimientos>; ]
[ function
<declaraciones_de_funciones>; ]
Los caracteres abrir corchete ([) y cerrar corchete (]) se utilizan para indicar que lo que contienen
es opcional.
CUERPO
En el cuerpo se escriben las instrucciones del bloque de instrucciones principal del programa. La
sintaxis es:
begin
<instrucción_1>
<instrucción_2>
...
<instrucción_n>
end.
begin y end son palabras reservadas que marcan el principio y final de la sección cuerpo.
Ejemplos de Pseudocódigo
Ejemplo: Realizar el pseudocódigo de un programa que permita calcular el área de un rectángulo.
Se debe introducir la base y la altura para poder realizar el cálculo..
Programa; área
Entorno: BASE, ALTURA, AREA son número enteros
Algoritmo:
escribir “Introduzca la base y la altura”
leer BASE, ALTURA
calcular AREA = BASE * ALTURA
escribir “El área del rectángulo es “AREA
Finprograma Curso De Java Orientado a Android
Ejemplo: Realizar el pseudocódigo que permita al usuario introducir por teclado dos notas,
calculando la suma y el producto de las notas.
Programa: SumaProducto
Entorno: NOTA1,NOTA2,SUMA,PRODUCTO son números enteros
Algoritmo:
escribir “Introduzca las notas”
leer NOTA1,NOTA2
calcular SUMA = NOTA1 + NOTA2
calcular PRODUCTO = NOTA1 * NOTA2
escribir “La suma de las dos notas es:” SUMA
escribir “El producto de las dos notas es :”PRODUCTO
Finprograma
Ejemplo: Realizar el pseudocódigo de un programa que permita saber si un número es mayor,
menor o igual a cero.
Programa: ComparaNúmeros
Entorno: NUMERO es un número entero
Algoritmo:
Escribir “Introduzca un número “
leer NUMERO
SI NUMERO>0 ENTONCES
escribir “El número introducido es positivo”
SI NO
SI NUMERO<0 ENTONCES
escribir “El número introducido es negativo”
SI NO
escribir “El número es cero”
FINSI
FINSI
Finprograma
Supongamos un algoritmo que lea las coordenadas de tres puntos y los mueva tres puntos en la
coordenada x y escriba el resultado en algún dispositivo de salida:
ALGORITMO lee_tres_vertices
ENTRADA: las coordenadas (x,y) de tres puntos
SALIDA: las coordenadas (x,y) de los tres puntos movidos 3 puntos hacia la derecha.
VARIABLES: i:entera
x,y: real
INICIO
PARA i=1 HASTA 3 CON INCREMENTO +1
ESCRIBE "Abscisa del punto número ", i Curso De Java Orientado a Android
LEER x
ESCRIBE "Ordenada del punto número ", i
LEER Y
ESCRIBE "El punto es (" x+3","y")"
FIN_PARA
FIN
El programa equivalente a este algoritmo se muestra a continuación. Como podemos apreciar en
un programa en Pascal es importantísimo no olvidar detalles de sintaxis. Por ejemplo cada
sentencia termina en punto y coma. De cualquier forma es inmediato apreciar los simples cambios
existentes
program lee_tres_vertices;
var x,y:real;
i:integer;
begin
for i:=1 to 3 do
begin
write ('Abscisa del punto número ',i); readln(x);
write ('Ordenada del punto número ',i); readln(y);
writeln (' El punto es (',x+3,',',y,')');
end;
end;
Problema: calcular y mostrar la suma de los diez primeros números entre 1 y 1000 que sean
divisibles por uno dado.
programa suma_divisibles
variables natural : divisor, suma, contador, número
inicio programa
divisor leer ‘Introduce el divisor: ’
suma 0
contador 0
para número desde 1 hasta 1000 hacer
si divisor divide a número entonces
suma suma + número
contador contador + 1
fin si
si contador = 10 entonces
interrumpir
fin si
fin para
escribir ‘La suma es’, suma
fin programa Curso De Java Orientado a Android
CONTADORES
Un contador es una variable de tipo entera que se debe inicializar con el valor 0 (cero) la primera vez y luego
va incrementando su valor en 1 (uno).
EJEMPLO:
Se leen las notas obtenidas por los alumnos de una materia determinada. Se pide realizar un algoritmo
que permita obtener la cantidad de alumnos con nota mayor que 6. El ingreso de la informacion finaliza
con nota igual a cero.
COMIENZO
real nota
entero ctanotas
Leer nota
ctanotas = 0
Mientras (nota <> 0)
Si ( nota > 6)
ctanotas = ctanotas+1
FinSI
Leer nota
Fin Mientras
Escribir "cantidad de alumnos con nota mayor que 6", ctanotas
FIN
En este ejemplo, ctanotas se usa una variable contador, la cual se inicializa en 0 al comienzo del algoritmo e
incrementa su valor en 1, siempre y cuando la nota corresponda a alumnos que cumplen con la condición
pedida.
ACUMULADORES O SUMADORES
Un acumulador es una variable de tipo entera que se debe inicializar con el valor 0 (cero) la primera vez y
luego va incrementando su valor en una constante o variable.
Si el valor de esa constante o variable es igual a 1, entonces el acumulador es también un contador.
ACUMULADOR Y REGISTRO “W” Curso De Java Orientado a Android
Los siguientes gráficos representan un diagrama simplificado de la arquitectura interna del camino de los
datos en la CPU de los microcontroladores PIC y de los microprocesadores tradicionales.
Observamos que la principal diferencia entre ambos se encuentra en la ubicación del registro de trabajo,
que para los PIC’s se denomina W (Working Register), y para los tradicionales es el Acumulador.
ESTRUCTURA DEL PSEUDOCÓDIGO
Los algoritmos pueden tener diferentes opciones de resultado, dependiendo de los datos de entrada que se
proporcionen o del resultado de un determinado proceso.
Alguien acuñó este famoso lema en la programación:
Algoritmos + Estructuras de Datos = Programas
Para lograr que un algoritmo llegue a la solución se pueden utilizar distintas estructuras. Las secuencias, o
también llamadas estructuras de control, tienen como objetivo ofrecer diferentes opciones de solución
dependiendo de determinadas condiciones, las cuales se conocen como sentencias alternativas o selectivas,
ya que se puede elegir, de entre varios un camino de ejecución del programa. Otro de los objetivos de las
secuencias de control es poder ejecutar un proceso varias veces hasta que se cumpla determinada
condición, a estos procesos, en el ambiente de prorgamación se les conoce como bucles o bifurcaciones.
Cuando un algoritmo, futuro programa, no contiene alternativas de selección o procesos repetitivos se le
conoce como flujo secuencial, ya que se ejecutan línea tras línea las instrucciones del proceso hasta llegar al
final.
Las estructuras de control son:
Secuencial
Alternativa
Repetitiva
ESTRUCTURA SECUENCIAL
Sigue el orden de las instrucciones planteadas en el algoritmo, por lo que existe un solo camino para
obtener el resultado. Por ejemplo, calcular el importe determinado de un número de artículos del mismo
precio.
1. Inicio
2. Solicitar Cantidad de Artículos (CA)
3. Solicitar Precio (P)
4. Calcular Importe= CA* P
5. Imprimir Importe
6. Fin
ESTRUCTURA ALTERNATIVA
El algoritmo Cuenta con dos alternativas, de las cuales se selecciona una, dependiendo del resultado que se
obtenga.
Las estructuras alternativas pueden ser: Curso De Java Orientado a Android
• Estructura de selección simple: Si - Entonces
• Estructura de selección doble: Si -Entonces - Si No
Estructura de selección simple Sí - Entonces. En la siguiente figura se muestra el ejemplo un poco más claro:
Por ejemplo, dada la calificación de un alumno se muestre "reprobado" o "aprobado", la
calificación mayor o igual a 70 es aprobatoria.
1. Inicio
2. Solicitar Calificación (Cal)
3. Establecer Resultado="Reprobado"
4. SI Cal > 70 ENTONCES
Establecer Resultado="Aprobado"
5. Mostrar Resultado
6. Salir
Estructura de selección doble SI - ENTONCES - SI NO.
En la siguiente figura se muestra el diagrama de flujo y el pseudocódigo para la estructura de selección
doble.
Por ejemplo, diseñar el algoritmo para calcular el salario de un trabajador. Se proporcionan como datos
de entrada el número de horas laboradas por semana y el pago por hora ordinaria. Las horas
extraordinarias se definen como el excedente a 40 horas, y éstas se pagan un 50% más.
1. Inicio
2. Solicitar Horas, Precio_hora
3. SI Horas ≤ 40 ENTONCES
Salario = Horas * Precio_hora
SI No
Salario = (40 * Precio_hora) + [(Horas - 40) * Precio_hora* 1.5)]
4. Imprimir Horas, Salario
5. Fin
ESTRUCTURA REPETITIVA O DE ITERACIÓN
El formato de la estructura de repetición es:
mientras (condición)
instrucción 1
instrucción 2
.....
instrucción n
fin mientras
El resultado de evaluar condición puede ser verdadero o falso:
Mientras sea verdadero, se ejecutarán: instrucción 1, instrucción 2, ... , instrucción n. Estas instrucciones
dejarán de ejecutarse cuando condición sea falso. Curso De Java Orientado a Android
Ejemplo:
leer(contraseña)
mientras (contraseña < > "joshua")
imprimir("La contraseña es incorrecta !")
leer (contraseña)
fin-mientras
imprimir("Ha tecleado la contraseña correcta")
Nota: El bucle se repetirá mientras que contraseña <> “joshua” sea verdadero
Salida de resultados
Los resultados de nuestros algoritmos los vamos a mostrar al usuario a través de la instrucción imprimir, que
tiene la siguiente forma general:
Imprimir(argumento 1, argumento 2, argumento 3, ... , argumento n)
Donde los argumentos pueden ser cadenas de caracteres entrecomilladas o variables:
· Si son cadenas de caracteres entrecomillados se imprime literalmente lo que está entre comillas
· Si son variables se imprime el contenido de dicha variable (no el nombre)
Ejemplo:
sueldo = 1000
trabajador = “Martínez”
Imprimir( “el sueldo de “, trabajador , ” es “, sueldo , ” Pesos.“ )
La instrucción imprimir, muestra lo siguiente: el sueldo de Martínez es 1000 Pesos.
SUBRUTINAS O PROCEDIMIENTOS
Aunque las funciones son herramientas de programación muy útiles para la resolución de problemas, su
alcance está muy limitado. Con frecuencia, se requieren subprogramas que calculen varios resultados en vez
de uno solo, o que realicen la ordenación de una serie de números, etc.
En estas situaciones la función no es apropiada y se necesita disponer del otro tipo de subprograma: el
procedimiento o subrutina. Un procedimiento o subrutina es un subprograma que ejecuta un proceso
específico. Ningún valor está asociado con el nombre del procedimiento; por consiguiente, no puede ocurrir
en una expresión. Un procedimiento se llama escribiendo su nombre, por ejemplo, SORT, para indicar que
un procedimiento denominado SORT se va a usar. Cuando se invoca el procedimiento, los pasos que lo
definen se ejecutan y a continuación se devuelve el control al programa que le llamó.
Las ventajas de utilizar los procedimientos son: Curso De Java Orientado a Android
· Facilitan la modularidad y estructuración de los algoritmos.
· Facilitan la lectura e inteligibilidad de los algoritmos.
· Permiten una economización del esfuerzo del programador al poder escribir código reutilizable en muchas
partes de un mismo algoritmo.
· Facilitan la depuración y mantenimiento de los programas.
Ejemplo
Consideramos un subprograma N con dos parámetros formales: i, transmitido por valor, y j, por variable.
Algoritmo M
// variables A, B enteras
var
entero: A, B
inicio
A 2
B 3
Llamar_a N (A, B)
Escribir (A, B)
Fin // algoritmo M
Procedimiento N (E entero: I; E/S entero: j)
// parámetros valor i
//parámetros variables j
inicio
i i + 10
j j + 10
escribir (i, j)
fin_procedimiento
Si se ejecuta el procedimiento N, veamos qué resultados se escribirán:
A y B son parámetros actuales.
I y j son parámetros formales.
DOCUMENTACION
La creación de nuevo sistema informático conlleva diversas fases que van más allá de la
codificación del mismo. Un modelo tradicional de diseño establece cinco fases:
Análisis, diseño, codificación, pruebas y mantenimiento. En la primera se realiza un estudio de
los requisitos del sistema y la viabilidad del mismo. La fase de diseño identifica y define los
elementos que precisa el proyecto y la interconexión entre los mismos. Del resultado de estas
dos fases se obtiene un plan que se utilizará como guía para la codificación del sistema. El
producto resultante de la codificación se verá sometido a una batería de pruebas que
aseguren la fiabilidad del mismo. Curso De Java Orientado a Android
Finalmente, el ciclo de vida de un sistema informático no termina en las pruebas, si no que se
extiende mientras que esté en uso. Así, es necesario realizar y prever un mantenimiento del
mismos. Todas las fases deberían estar debidamente documentadas, permitiendo que en futuro,
se puedan acometer cambios y mejoras en el sistema de manera sencilla. En este modelo clásico
se contempla, además, que se pueden pasar por las distintas fases más de una vez,
permitiendo retroceder a una fase anterior si se descubre una deficiencia que impida
continuar. De esta manera, el producto final se obtiene mediante una serie de refinamientos
sucesivos.
Al finalizar cada una de las fases, se cumple un hito del proyecto, el cual, suele venir acompañado
de un entregable. Este puede ser, por ejemplo, un nuevo documento o un listado de código, o
una nueva versión de un entregable anterior.