diseño estructurado de programas – parte i preparado por la prof. lillian bras con la...

Post on 02-Apr-2015

108 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

2

Introducción

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

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

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

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

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

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

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

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…

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…

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…

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…

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…

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…

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.

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

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.

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

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.

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.

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.

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

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

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

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

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

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

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.

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

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

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

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

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

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…

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

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

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

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

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

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

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

top related