Post on 15-Jan-2016
description
Pseudocódigo y Diagramas de
Flujos
Ing. Sonia Alexandra Pinzón Nuñez - Ing. Rocío Rodríguez
Guerrero
Humberto Urrutia López
hurrutia@uta.cl
Ventajas de utilizar un Pseudocódigo a un Diagrama
de FlujoOcupa menos espacio en una hoja
de papel Permite representar en forma fácil
operaciones repetitivas complejas Es muy fácil pasar de
Pseudocódigo a un programa en algún lenguaje de programación.
Si se siguen las reglas se puede observar claramente los niveles que tiene cada operación.
Diagrama de FlujoUn diagrama de flujo es una forma
de representar gráficamente los pasos para resolver un problema en específico. Estos diagramas utilizan una serie de símbolos con significados especiales y son la representación gráfica de los pasos de un proceso. En computación es un primer enfoque con lo que sería la programación formal.
Simbología
Estructuras de Programación
• Se identifican un conjunto mínimo de estructuras básicas de programación:– Secuencia– Selección– Iteración– Función o Procedimiento
• Los programas serán:– Más fiables– Más eficientes– Adaptables
Secuencia
• Un único hilo de ejecución• Sucesivos pasos o acciones
que se ejecutan en estricto orden
Secuencia (ordinograma)
Hola Mundo
Escribir Hola Mundo
Sumar 2 números
Proceso sumar_2_numeros
Escribir "ingresa a"
Leer a
Escribir "Ingresa b"
Leer b
suma<- a+b
Escribir "El resultado de la suma es: ",suma
FinProceso
Construya un programa en seudocódigo que intercambie los valores de sus variables.
Variables enteras cuyos valores serán intercambiados
var1 = 10, var2 = 30;
Imprime el valor luego del intercambiovar1 = 30, var2 = 10;
IntercambioIntercambio
Construya un programa en pseudocódigo que reciba como entrada el radio de una circunferencia y retorne su perímetro y su área.
• Recuerde que:perímetro = 2 * PI * radio; área = PI * radio * radio
área = PI * radio ^2
CIRCULOCIRCULORadio
Perímetro
Área
Selección • Dirigir el flujo de ejecución a una
de entre varias alternativas• Escoge en función de condiciones
establecidas sobre los datos• Expresiones booleanas, valores
lógicos– CIERTO– FALSO
Selección IF-THEN
Selección IF-THEN-ELSE
Mayor de tres númerosProceso mayor_tres_numero
Escribir 'Leer a'
Leer a
Escribir 'Leer b'
Leer b
Escribir 'Leer c'
Leer c
Si a>b Entonces
Si a>c Entonces
Escribir 'El mayor es a: ',a
Sino
Escribir 'El mayor es c: ',c
FinSi
Sino
Si b>c Entonces
Escribir 'El mayor es b: ',b
Sino
Escribir 'El mayor es c: ',c
FinSi
FinSi
FinProceso
Lea tres lados de un triangulo, determina si corresponden (por Pitágoras) a un rectángulo y en caso afirmativo calcula el área
Proceso TrianguloRectangulo Leer l1 Escribir "Ingrese el lado 2:" Leer l2 Escribir "Ingrese el lado 3:" Leer l3 Si l1>l2 Entonces // encontrar la hipotenusa (mayor lado) cat1<-l2 Si l1>l3 Entonces hip<-l1 cat2<-l3 Sino hip<-l3 cat2<-l1 FinSi Sino cat1<-l1 Si l2>l3 Entonces hip<-l2 cat2<-l3 Sino hip<-l3 cat2<-l2 FinSi FinSi Si hip^2 = cat1^2 + cat2^2 Entonces // ver si cumple con Pitágoras area<-(cat1*cat2)/2 // calcular área Escribir "El área es: ",area Sino Escribir "No es un triangulo rectángulo." FinSiFinProceso
Selección SWITCH IV
12345678
if n == 0: print "You typed zero.\n"elif n== 1 or n == 9 or n == 4: print "n is a perfect square\n"elif n == 2: print "n is an even number\n"elif n== 3 or n == 5 or n == 7: print "n is a prime number\n"
Construya un programa que lea un número natural y escriba su tabla de multiplicar
• Proceso tabla_mult
• Escribir "Ingrese Número a multiplicar"
• Leer n
• Escribir "1 X ",n," = ", n
• Escribir "2 X ",n," = ", n*2
• Escribir "3 X ",n," = ", n*3
• Escribir "4 X ",n," = ", n*4
• Escribir "5 X ",n," = ", n*5
• Escribir "6 X ",n," = ", n*6
• Escribir "7 X ",n," = ", n*7
• Escribir "8 X ",n," = ", n*8
• Escribir "9 X ",n," = ", n*9
• FinProceso
Desarrolle un algoritmo que permita leer un valor cualquiera N y escriba si dicho número es par o impar..
Proceso par_imparEscribir "Ingresar el numero"Leer nSi (nMOD2=0) Entonces
Escribir a,"Es Par"Sino
Escribir a, "Es Impar"Fin Si
FinProceso
Iteración I
• Estructuras llamadas bucles• Ejecutar ninguna, una o varias veces
cuerpo del bucle
• La iteración está controlada por una condición
• La condición ha de cambiar de estado en el cuerpo del bucle para que pueda terminar
• De otro modo, bucle infinito
Iteración WHILE (Mientras)
Mientras la condición se evalúe a CIERTO
Puede no ser ejecutado ni una sola vez
Desarrolle un algoritmo que realice la sumatoria de los números enteros comprendidos entre el 1 y el 10, es decir, 1 + 2 + 3 + …. + 10
Construya un programa que lea un número natural y escriba su tabla de multiplicar
Adivine un número en 10 intentos del 1 al 100Proceso Adivina_Numero
intentos<-10
num_secreto <- azar(100)+1
Escribir "Adivine el numero (de 1 a 100):"
Leer num_ingresado
Mientras num_secreto<>num_ingresado Y intentos>1 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo"
Sino
Escribir "Muy alto"
FinSi
intentos <- intentos-1
Escribir "Le quedan ",intentos," intentos:"
Leer num_ingresado
FinMientras
Si num_secreto=num_ingresado Entonces
Escribir "Exacto! Usted adivino en ",11-intentos," intentos."
Sino
Escribir "El numero era: ",num_secreto
FinSi
FinProceso
Iteración FOR IV
Construya un programa que lea un número natural y escriba su tabla de multiplicar
Calcula el promedio de una lista de N datos
Proceso Promedio
Escribir "Ingrese la cantidad de datos:"
Leer n
acum<-0
Para i<-1 Hasta n Hacer
Escribir "Ingrese el dato ",i,":"
Leer dato
acum<-acum+dato
FinPara
prom<-acum/n
Escribir "El promedio es: ",prom
FinProceso
Dado un conjunto de números enteros, obtener el producto de estos números y la suma de los números pares
Proceso producto_suma
Escribir "Ingrese numero de notas"
Leer n
suma<-0
producto<-1
Para i<-1 Hasta n Hacer
Escribir "Ingrese Nota"
Leer nota
producto<-nota*producto
Si (nota MOD 2)=0 Entonces
suma<- suma + nota
Fin Si
Fin Para
Escribir"El producto es: ", producto," la suma de pares es:",suma
FinProceso
Adivine un número secreto en 10 intentosProceso Adivina_Numero
intentos<-10
num_secreto <- azar(100)+1
Escribir "Adivine el numero (de 1 a 100):"
Leer num_ingresado
Mientras num_secreto<>num_ingresado Y intentos>1 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo"
Sino
Escribir "Muy alto"
FinSi
intentos <- intentos-1
Escribir "Le quedan ",intentos," intentos:"
Leer num_ingresado
FinMientras
Si num_secreto=num_ingresado Entonces
Escribir "Exacto! Usted adivino en ",11-intentos," intentos."
Sino
Escribir "El numero era: ",num_secreto
FinSi
FinProceso
Operadores y FuncionesLas siguientes tablas exhiben la totalidad de los operadores de este lenguaje reducido:
FUNCIÓN O
PROCEDIMIENTO
Profesor: Humberto Urrutia López 34
Funciones
• ¿Cuándo se Utilizan?
– La idea es “Dividir y Conquistar”, es decir, particionar el problema en pequeñas subtareas las cuales son más fáciles de abordar.
– Todo problema se puede resolver con funciones o sin ellas, pero la aplicación de éstas hace el programa más eficiente, fácil de analizar y testear.
Profesor: Humberto Urrutia López 35
Funciones
• Ventajas:1.-Facilita el diseño descendente.
2.- Los procedimientos se ejecutan más de una vez.
3.- Facilita la división de tareas.
4.- Se pueden comprobar(testear) individualmente
Profesor: Humberto Urrutia López 36
Función – Procedimiento
• Semejante a función matemática• Invocación, argumentos, valor
devuelto– Un único punto de entrada– Un único punto de salida
• Procedimiento– Si no devuelve ningún valor
Profesor: Humberto Urrutia López 37
Funcionalidades
Crear una función para cada funcionalidad o método de cada módulo del programa
¡Aunque sólo se use una vez!
Programa = conjunto de funciones
Profesor: Humberto Urrutia López 38
Función principal
• Es el punto de entrada al programa
• Mínimo programa C correcto
Profesor: Humberto Urrutia López 39
• PSeInt permite la posibilidad de definir funciones al que el creador del mismo bautizó como subprocesos,
• Para empezar una función no es más que un bloque de código con un determinado fin o propósito, podemos definir más de una y nos permiten ahorrar líneas código si nuestros programas son muy extensos o hay codificación redundante.
Funciones (subprocesos) en PSeInt
Profesor: Humberto Urrutia López 40
• Las funciones en PSeInt se identifican por un nombre, comienzan con la palabra reservada
Funcion y terminan con
FinFuncion.
• Tambien podemos utilizar
SubProceso
FinSubProceso que sería lo mismo.
• Siempre se declaran afuera del proceso principal para ser llamados o invocados en éste.
• También opcionalmente pueden retornar un valor o recibir cierta cantidad de argumentos.
Profesor: Humberto Urrutia López 41
Función sin parámetros y sin retorno
Profesor: Humberto Urrutia López 42
Función con 1 parámetro y sin retorno
Profesor: Humberto Urrutia López 43
Función sin parámetros y con retorno.
Profesor: Humberto Urrutia López 44
Función con parámetros y con retorno
Profesor: Humberto Urrutia López 45
Profesor: Humberto Urrutia López 46
Función suma dos números
Profesor: Humberto Urrutia López 47
Función suma dos números
Profesor: Humberto Urrutia López 48
Profesor: Humberto Urrutia López 49
Cadenas en PSeInt • PSeInt incluye algunas funciones predefinidas para
operar con cadenas de caracteres. Veamos cuales son y que propósito tienen:
• Longitud(x): Retorna la cantidad de caracteres de una cadena x.
• Mayusculas(x): Convierte a mayúsculas la cadena x.
• Minusculas(x): Convierte a minúsculas la cadena x.
• Subcadena(x,inicio,fin): Extrae una parte de la cadena x indicando desde cúal hasta que letra.
• Concatenar(x,y): Une las cadenas x y y.
Profesor: Humberto Urrutia López 50
Profesor: Humberto Urrutia López 51
Calcular potencia de un número
• Algoritmo que calcula la potencia de un número ingresado por el usuario:
Proceso potencia acum<-1
Escribir "Digite base"Leer base
Escribir "Digite exponente"
Leer exponente
Para i<-1 Hasta exponente Con Paso 1 Hacer
acum<-acum*base
FinPara
Escribir base," elevado a la ",exponente," es: ",acum
FinProceso Profesor: Humberto Urrutia López 52
Factorial de un número
• El siguiente pseudocodigo calcula el factorial de un número ingresado por el usuario:
Proceso factorial acum<-1; Escribir "Digite un numero para calcular su factorial";
Leer num;
Para i<-1 Hasta num Con Paso 1 Hacer
acum<-acum*i;
FinPara
Escribir "El factorial de ",num," es ",acum;
FinProceso Profesor: Humberto Urrutia López 53
EjerciciosEjercicios
a.a.Desarrolle un algoritmo que realice la sumatoria de Desarrolle un algoritmo que realice la sumatoria de los números enteros múltiplos de 5, comprendidos entre los números enteros múltiplos de 5, comprendidos entre el 1 y el 100, es decir, 5 + 10 + 15 +…. + 100. El el 1 y el 100, es decir, 5 + 10 + 15 +…. + 100. El programa deberá imprimir los números en cuestión y programa deberá imprimir los números en cuestión y finalmente su sumatoriafinalmente su sumatoria
a.a.Desarrolle un algoritmo que realice la sumatoria de Desarrolle un algoritmo que realice la sumatoria de los números enteros pares comprendidos entre el 1 y los números enteros pares comprendidos entre el 1 y el 100, es decir, 2 + 4 + 6 +…. + 100. El programa el 100, es decir, 2 + 4 + 6 +…. + 100. El programa deberá imprimir los números en cuestión y finalmente deberá imprimir los números en cuestión y finalmente su sumatoriasu sumatoria
a.a.Desarrolle un algoritmo que lea los primeros 300 Desarrolle un algoritmo que lea los primeros 300 números enteros y determine cuántos de ellos son números enteros y determine cuántos de ellos son impares; al final deberá indicar su sumatoria. impares; al final deberá indicar su sumatoria.
Profesor: Humberto Urrutia López 54
Adivine un número secreto en 10 intentosProceso Adivina_Numero
intentos<-10
num_secreto <- azar(100)+1
Escribir "Adivine el numero (de 1 a 100):"
Leer num_ingresado
Mientras num_secreto<>num_ingresado Y intentos>1 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo"
Sino
Escribir "Muy alto"
FinSi
intentos <- intentos-1
Escribir "Le quedan ",intentos," intentos:"
Leer num_ingresado
FinMientras
Si num_secreto=num_ingresado Entonces
Escribir "Exacto! Usted adivino en ",11-intentos," intentos."
Sino
Escribir "El numero era: ",num_secreto
FinSi
FinProcesoProfesor: Humberto Urrutia López 55
• // Separa un numero entero en sus digitos
• Proceso Digitos• • Escribir "Ingrese un numero entero postivo:"• Leer n• • // primero, contar cuantos digitos• cont <- 0 • aux <- n• Mientras aux>0 hacer // mientras no sea cero• cont <- cont + 1 // contar cuantos digitos• aux <- trunc(aux/10) // dividir por 10 y despreciar los de• FinMientras• Escribir "El numero tiene ",cont," digitos"• • // luego, mostrarlos uno por uno • aux<-n• Para i<-1 hasta cont Hacer• pot <- 10^(cont-i) // por cuanto hay que dividir para obtener el
primer digito• digito <- trunc (aux / pot) // obtener el digito• aux <- aux - digito*pot // quitar ese digito al numero• Escribir "El digito ",i," es ",digito• FinPara• • FinProceso