410 likes | 720 Views
Diseño Estructurado de Programas – Parte I. Preparado por la Prof. Lillian Bras con la colaboración del Prof. Antonio F. Huertas COTI 3101 – Algoritmos y Desarrollo de Programas I . Introducción.
E N D
Diseño Estructurado de Programas – Parte I Preparado por la Prof. Lillian Bras con la colaboración del Prof. Antonio F. Huertas COTI 3101 – Algoritmos y Desarrollo de Programas I
Introducción • Existen varias herramientas que se utilizan para diseñar programas. Dos de las más utilizadas son: • Flujograma • Pseudocódigo
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay ¿Qué es un flujograma? • Un flujograma es un diagrama que representa el orden en que se ejecutan las instrucciones de un programa. • En un flujograma se representan las instrucciones con distintas figuras geométricas. • La figura que se muestra a la derecha es el flujograma correspondiente a un programa que calcula el sueldo bruto semanal de un empleado.
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay óvalo Símbolos o Figuras Utilizadas en los Flujogramas • Note que hay tres tipos de figuras en este flujograma: • óvalos • paralelogramos • un rectángulo • Cada símbolo representa una operación diferente. paralelogramo rectángulo óvalo
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Start End Display “Gross pay is $” + grossPay Símbolos o Figuras Utilizadas en los Flujogramas (Cont.) Terminal • Terminales • Representadas por óvalos • Marcan el principio y el fin del flujograma Terminal
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “How many hours did you work?” Get hours Display “Gross pay is $” + grossPay Símbolos o Figuras Utilizadas en los Flujogramas (Cont.) • Enunciados de Entrada / Salida (Input / Output) • Representadas por paralelogramos • Se diferencia entre Input y Output por el verbo utilizado en la figura Input/Output Statement
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Símbolos o Figuras Utilizadas en los Flujogramas (Cont.) • Procesos / Enunciados de Asignación • Representados por rectángulos • Se le asigna un valor a la variable al lado izquierdo del símbolo de la flecha • La flecha de derecha a izquierda recuerda que se almacena el valor resultante de la expresión en el lado derecho a la variable que se encuentra en el lado izquierdo Process Statement
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Ejecución de un Flujograma • Veamos, paso a paso, qué sucede cuando se ejecuta cada instucción / símbolo del flujograma. • Al principio las variables en la memoria sólo tienen basura. Variables: hours: ? payRate: ? grossPay: ?
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Paso 1: Enunciado de Output Ejecución de un Flujograma… Esto es lo que veríamos en el monitor How many hours did you work? Variables: hours: ? payRate: ? grossPay: ?
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Ejecución de un Flujograma… Pasop 2: Enunciado de Input (Usuario entra 40.) How many hours did you work? 40 Variables: hours: 40 payRate: ? grossPay: ? Se almacena 40 en la variable hours.
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Ejecución de un Flujograma… How much do you get paid per hour? Paso 3: Enunciado de Output Variables: hours: 40 payRate: ? grossPay: ?
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Ejecución de un Flujograma… How much do you get paid per hour? 20 Paso 4: Enunciado de Input (Usuario entra 20.) Variables: hours: 40 payRate: 20 grossPay: ? Se almacena 20 en payRate.
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Ejecución de un Flujograma… How much do you get paid per hour? 20 Paso 5: Enunciado de Asignación Note que esta instrucción no se refleja en el monitor. Variables: hours: 40 payRate: 20 grossPay: 800 Se almacena 800 en grossPay.
Start End Display “How many hours did you work?” Display “How much do you get paid per hour?” Get hours Get payRate grossPay ← hours * payRate Display “Gross pay is $” + grossPay Ejecución de un Flujograma… Gross pay is $800 Variables: hours: 40 payRate: 20 grossPay: 800 Paso 6: Enunciado de Output
Pseudocódigo • El pseudocódigo es una descripción de un algoritmo que utiliza las convenciones de los lenguajes de programación pero que está destinado a ser leído por seres humanos en lugar de computadoras. • El pseudocódigo no pretende ser un programa con todos sus detalles sino proveer una forma compacta y clara de expresar un algoritmo.
Pseudocódigo (Cont.) • El siguiente es el pseudocódigo del programa que acabamos de analizar: Start Display “How many hours did you work? ” Get hours Display “How much do you get paid per hour? ” Get payRate grossPay hours * payRate Display “Gross pay is $” + grossPay End
Del Diseño al Programa • Luego de diseñar un programa utilizando un flujograma o pseudocódigo, el programador implementa el diseño utilizando un lenguaje de programación real. • A continuación se presenta el programa que hemos estudiado usando los lenguajes Java y Pascal.
Del Diseño al Programa (Cont.) • El siguiente es el programa escrito usando Java: import java.util.Scanner; public class Payroll { public static void main(String[] args) { int hours; double payRate, grossPay; Scanner keyboard = new Scanner(System.in); System.out.print("How many hours did you work? "); hours = keyboard.nextInt(); System.out.print("How much do you get paid per hour? "); payRate = keyboard.nextDouble(); grossPay = hours * payRate; System.out.println("Gross pay is $" + grossPay); } }
Del Diseño al Programa (Cont.) • El siguiente es el programa escrito usando Pascal: program Payroll; var hours: Integer; payRate, grossPay: Real; begin write('How many hours did you work? '); readln(hours); write('How much do you get paid per hour? '); readln(payRate); grossPay := hour * payRate; writeln('Gross pay is $', grossPay); end.
Estructuras de Control • Las estructuras de control indican el orden en que ejecutarán las instrucciones. Son tres: • Secuencia • Decisión / Selección • Repetición • En la programación estructurada las instrucciones en cada rutina del programa se organizan usando las estructuras de control.
Estructura de Secuencia • En esta estructura las instrucciones se ejecutan en una después de la otra en el orden en que aparecen. • Los programas que hemos estudiados se componen de instrucciones organizadas en secuencia.
False True False True Expresión lógica Expresión lógica Acción Acción B Acción A Estructura de Decisión / Selección • Esta estructura se compone de varios elementos. El símbolo o figura del diamante indica la necesidad de evaluar una expresión lógica (una pregunta de cierto o falso). Si la contestación resulta ser cierta, el flujo de ejecución sigue un camino y si es falsa, sigue el otro. If-Then If-Then-Else
Estructura de Decisión / Selección (Cont.) • Una expresión lógica es aquella en que produce un resultado lógico o booleano (valores cierto y falso). • Normalmente las expresiones lógicas involucran una comparación. • Los operadores de comparación (relacionales) son los siguientes: == igual a < menor que <= menor que o igual a > mayor que >= mayor que o igual a != distinto de (a veces se escribe así: < >)
False True Expresión lógica Acción Estructura de Decisión / Selección (Cont.) • If-Then: En esta estructura se lleva a cabo una acción sólo si se cumple una condición (o sea, la expresión lógica es cierta). Flujograma Pseudocódigo If (Expresión lógica) Then Acción End If
False True x < y? a ← x * 2 Estructura de Decisión / Selección (Cont.) • El siguiente fragmento muestra una estructura de selección donde la instrucción a x*2 se ejecuta sólo si x < y. Pseudocódigo Flujograma If (x<y) Then a ← x*2 End If Código en Java if (x < y) a = x * 2;
False True Expresión lógica Acción B Acción A Estructura de Decisión / Selección (Cont.) • If-Then-Else: En esta estructura se ejecuta una de dos posibles acciones (A o B) dependiendo de si la evaluación de la expresión lógica es cierta o falsa. Flujograma Pseudocódigo If (Expresión lógica) Then Acción A Else Acción B End If
False True x < y? a ← x * 2 a ← x + y Estructura de Decisión / Selección (Cont.) • El siguiente es un ejemplo con acciones concretas: Pseudocódigo Flujograma If (x < y) Then a x * 2 Else a x + y End If Código en Java if (x < y) a = x * 2; else a = x + y;
Estructura de Decisión / Selección (Cont.) • A continuación se mostrará el diseño de un programa que le pide al usuario el radio de un círculo y muestra el área sólo si el radio es positivo ( > 0.0). • Si el radio no es positivo, el programa deberá indicarle al usuario que el radio es inválido.
Start Display “Enter the radius: ” Get radius radius > 0.0? false true Display “The radius is invalid.” area PI * power(radius, 2) Display “The area is ” + area End Estructura de Decisión / Selección (Cont.) Flujograma Pseudocódigo Start Display “Enter the radius: ” Get radius If (radius > 0.0) Then area PI * power(radius, 2) Display “The area is ” + area Else Display “The radius is invalid.” End If End
Estructura de Decisión / Selección (Cont.) • El siguiente es el programa en Java: import java.util.Scanner; public class CircleApp4 { public static void main(String[] args) { double radius, area; Scanner keyboard = new Scanner(System.in); System.out.print("Enter the radius: "); radius = keyboard.nextDouble(); if (radius > 0.0) { area = Math.PI * Math.pow(radius, 2); System.out.println("The area is " + area); } else System.out.println("The radius is invalid."); } }
Estructura de Decisión / Selección (Cont.) • A continuación se mostrará el diseño de un programa que calcula el costo de matrícula de un estudiante universitario basado en la cantidad de créditos. • El programa asume que el costo por crédito es $75 y le otorga a los atletas y a los estudiantes de honor un descuento de 60%.
A Start registrationFee numberOfCredits * COST_PER_CREDIT Display “Enter the name: ” answer == ‘Y’? Get studentName true discount DISCOUNT_RATE * registrationFee Display “Enter the number of credits: ” registrationFee registrationFee - discount Get numberOfCredits Display “For ” + studentName + “,” Display “Are you an athlete or honor student? (Y/N): ” Display “the registration fee is $” + registrationFee Get answer End A Estructura de Decisión / Selección (Cont.) false Flujograma
Estructura de Decisión / Selección (Cont.) Pseudocódigo Start Display “Enter the name: ” Get studentName Display “Enter the number of credits: ” Get numberOfCredits Display “Are you an athlete or honor student? (Y/N): ” Get answer registrationFee numberOfCredits * COST_PER_CREDIT If (answer == ‘Y’) Then discount DISCOUNT_RATE * registrationFee registrationFee registrationFee - discount; End If Display “For ” + studentName + “, ” Display “the registration fee is $” + registrationFee End
Estructura de Decisión / Selección (Cont.) • El siguiente es el programa en Java: import java.util.Scanner; public class RegistrationFeeApp { public static void main(String[] args) { final double COST_PER_CREDIT = 75.00; final double DISCOUNT_RATE = 0.60; String studentName; int numberOfCredits; char answer; double registrationFee, discount; Scanner keyboard = new Scanner(System.in); System.out.print("Enter the name: "); studentName = keyboard.nextLine(); Continúa…
Estructura de Decisión / Selección (Cont.) • El siguiente es el programa en Java (cont.): System.out.print("Enter the number of credits: "); numberOfCredits = keyboard.nextInt(); System.out.print("Are you an athlete or honor " + "student? (Y/N): "); answer = keyboard.next().charAt(0); // To read a char registrationFee = numberOfCredits * COST_PER_CREDIT; if (answer == 'Y') { discount = DISCOUNT_RATE * registrationFee; registrationFee -= discount; } System.out.print("For " + studentName + ", "); System.out.println("the registration fee is $" + registrationFee); } }
Estructura de Decisión / Selección (Cont.) • A continuación se muestra el diseño de un programa que muestra un mensaje indicando si el número entrado por el usuario es positivo, cero o negativo. • Este programa es un ejemplo del uso de Ifs anidados (Ifs que contienen otros Ifs).
Start Display “Enter a number: ” Get number number > 0? number == 0? false false true true Display “The number is positive.” Display “The number is negative.” Display “The number is zero.” End Flujograma Estructura de Decisión / Selección (Cont.)
Estructura de Decisión / Selección (Cont.) Pseudocódigo Start Display “Enter a number: ” Get number If (number > 0) Then Display “The number is positive.” Else If (number == 0) Then Display “The number is zero.” Else Display “The number is negative.” End If End If End
Estructura de Decisión / Selección (Cont.) Java (Una alternativa): import java.util.Scanner; public class NumberSignApp { public static void main(String[] args) { double number; Scanner keyboard = new Scanner(System.in); System.out.print("Enter a number: "); number = keyboard.nextDouble(); if (number > 0) System.out.println("The number is positive."); else if (number == 0) System.out.println("The number is zero."); else System.out.println("The number is negative."); } }
Estructura de Decisión / Selección (Cont.) Java (La alternativa preferida por los programadores): import java.util.Scanner; public class NumberSignApp { public static void main(String[] args) { double number; Scanner keyboard = new Scanner(System.in); System.out.print("Enter a number: "); number = keyboard.nextDouble(); if (number > 0) System.out.println("The number is positive."); else if (number == 0) System.out.println("The number is zero."); else System.out.println("The number is negative."); } }
Estructura de Decisión / Selección (Cont.) • Los operadores lógicos son usados para combinar valores o expresiones lógicas. • Estos operadores son tres: not produce el opuesto del operando and produce True sólo si ambos operandos son True or produce False sólo si ambos operandos son False