Diseño Estructurado de Programas – Parte I Preparado por la Prof. Lillian Bras con la...

41
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

Transcript of Diseño Estructurado de Programas – Parte I Preparado por la Prof. Lillian Bras con la...

Page 1: 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.

Diseño Estructurado de Programas – Parte I

Preparado por la Prof. Lillian Bras conla colaboración del Prof. Antonio F. Huertas

COTI 3101 – Algoritmos y Desarrollo de Programas I

Page 2: 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.

2

Introducción

• Existen varias herramientas que se utilizan para diseñar programas. Dos de las más utilizadas son:– Flujograma– Pseudocódigo

Page 3: 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.

3

¿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

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

Page 4: 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.

4

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.

óvalo

paralelogramo

rectángulo

óvalo

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

Page 5: 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.

5

Símbolos o Figuras Utilizadas en los Flujogramas (Cont.)

• Terminales– Representadas por

óvalos

– Marcan el principio y el fin del flujograma

Terminal

Start

EndTerminal

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

Page 6: 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.

6

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

Display “How many hours did

you work?” Get hours

Input/Output Statement

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

Page 7: 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.

7

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

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

Page 8: 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.

8

Variables:hours: ?payRate: ?grossPay: ?

•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.

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

Ejecución de un Flujograma

Page 9: 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.

9

How many hours did you work?

Variables:hours: ?payRate: ?grossPay: ?

Paso 1: Enunciado de Output

Esto es lo que veríamos en el monitor

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

Ejecución de un Flujograma…

Page 10: 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.

10

How many hours did you work? 40

Variables:hours: 40payRate: ?grossPay: ?

Pasop 2: Enunciado de Input

(Usuario entra 40.)

Se almacena 40 en la variable hours.

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

Ejecución de un Flujograma…

Page 11: 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.

11

How much do you get paid per hour?

Variables:hours: 40

payRate: ?grossPay: ?

Paso 3: Enunciado de Output

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

Ejecución de un Flujograma…

Page 12: 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.

12

How much do you get paid per hour? 20

Variables:hours: 40payRate: 20grossPay: ?

Paso 4: Enunciado de Input

(Usuario entra 20.)

Se almacena 20 en payRate.

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

Ejecución de un Flujograma…

Page 13: 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.

13

How much do you get paid per hour? 20

Variables:hours: 40payRate: 20grossPay: 800

Paso 5: Enunciado de Asignación

Se almacena 800 en grossPay.

Note que esta instrucción no se refleja en el monitor.

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

Ejecución de un Flujograma…

Page 14: 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.

14

Gross pay is $800

Variables:hours: 40payRate: 20grossPay: 800

Paso 6: Enunciado de Output

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

Ejecución de un Flujograma…

Page 15: 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.

15

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.

Page 16: 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.

16

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 $” + grossPayEnd

Page 17: 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.

17

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.

Page 18: 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.

18

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); }}

Page 19: 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.

19

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.

Page 20: 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.

20

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.

Page 21: 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.

21

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.

Page 22: 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.

22

• 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.

Estructura de Decisión / Selección

TrueFalseExpresión lógica

Acción

TrueFalseExpresión lógica

Acción B Acción A

If-Then If-Then-Else

Page 23: 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.

23

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í: < >)

Page 24: 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.

24

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).

TrueFalseExpresión lógica

Acción

Pseudocódigo

If (Expresión lógica) Then

Acción

End If

Flujograma

Page 25: 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.

25

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.

if (x < y)

a = x * 2;

Código en Java

TrueFalse

x < y?

a ← x * 2

PseudocódigoIf (x<y) Then

a ← x*2

End If

Flujograma

Page 26: 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.

26

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.

TrueFalseExpresión lógica

Acción B Acción A

PseudocódigoIf (Expresión lógica) Then

Acción A

Else

Acción B

End If

Flujograma

Page 27: 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.

27

Estructura de Decisión / Selección (Cont.)

• El siguiente es un ejemplo con acciones concretas:

TrueFalsex < y?

a ← x * 2 a ← x + y

if (x < y)

a = x * 2;

else

a = x + y;

If (x < y) Then

a x * 2

Else

a x + y

End If

PseudocódigoFlujograma

Código en Java

Page 28: 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.

28

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.

Page 29: 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.

29

Estructura de Decisión / Selección (Cont.)

Start

Display “Enter the radius: ”

Get radius

area PI * power(radius, 2)

radius > 0.0?

Display “The area is ” + area

truefalse

Display “The radius is invalid.”

End

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 IfEnd

Flujograma Pseudocódigo

Page 30: 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.

30

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."); }}

Page 31: 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.

31

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%.

Page 32: 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.

32

Estructura de

Decisión / Selección

(Cont.)

Start

Display “Enter the name: ”

Display “Enter the number of credits: ”

Get studentName

Get numberOfCredits

Display “Are you an athlete or honor student? (Y/N): ”

Get answer

A

registrationFee numberOfCredits * COST_PER_CREDIT

A

answer ==

‘Y’?

true

discount DISCOUNT_RATE * registrationFee

registrationFee registrationFee - discount

Display “For ” + studentName + “,”

Display “the registration fee is $” + registrationFee

End

false

Flujograma

Page 33: 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.

33

Estructura de Decisión / Selección (Cont.)

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 $” + registrationFeeEnd

Pseudocódigo

Page 34: 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.

34

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…

Page 35: 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.

35

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); }}

Page 36: 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.

36

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).

Page 37: 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.

37

Estructura de

Decisión / Selección

(Cont.)

End

Start

Display “Enter a number: ”

Get number

number > 0?

truefalse

number == 0?

truefalseDisplay “The number is positive.”

Display “The number is zero.”

Display “The number is negative.”

Flujograma

Page 38: 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.

38

Estructura de Decisión / Selección (Cont.)

PseudocódigoStart 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

Page 39: 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.

39

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."); }}

Page 40: 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.

40

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."); }}

Page 41: 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.

41

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