Vous êtes sur la page 1sur 23

ALGORITMOS Y ESTRUCTURA DE DATOS I Introduccin a procedimientos y funciones

Ing. Edwin O. Ramos Velsquez Carrera Profesional de Ingeniera de Sistemas Universidad Nacional Jos Mara Arguedas Apurmac, Andahuaylas 2012

Ing. Edwin Ramos Velsquez

Paso 1: Analizar el problema: Identificacin de variables Paso 2: Elaborar el algoritmo general Paso 3: Identificar los procesos y las variables INPUT y OUTPUT de c/u Paso 4: Elaborar el algoritmo del programa principal (con procedimientos/funciones) Paso 5: Elaborar algoritmo de cada procedimiento/funcin

EJEMPLO 01: Implementar un


programa para hallar el rea de un tringulo
Ing. Edwin Ramos Velsquez 2

Ejemplo 01: Implementar un algoritmo


Problema: Implementar un programa para hallar el rea de un tringulo. Paso 1: Analizar el problema

Datos de entrada (Input): B, H: Integer Datos de Salida (Output): A: Float B, H

H B

b*h A= 2
B: Base (Input) H: Altura (Input) A: Area (Output)

a) Variables:

Input Programa Principal

b)Proceso Interno(Modelo Matemtico):

A=
c) Salida de datos: A

b*h 2

(Output)
Ing. Edwin Ramos Velsquez

Output A
3

Datos de entrada (Input): B, H: Integer Datos de Salida (Output): A: Float

Paso 2: Elaborar el Algoritmo


INICIO

1.- Input Ingreso de datos

Leer: B

Leer: H

B, H Input Programa Principal


2.- Proceso Procesamiento de datos
A = (B * H )/ 2

3.- Output Salida de datos

Print:

FIN

Output A
Ing. Edwin Ramos Velsquez 4

Ejemplo 01:Transformar el diagrama en uno con procedimientos/funciones


Programa Principal()
INICIO

PASOS PARA CREAR EL MODELO Paso 1: Definir los procesos (agrupaciones de rutinas) y asignarles un nombre Paso 2: Identificar las variables de entrada (INPUT) por proceso Paso 3: Identificar las variables de salida (OUTPUT) por proceso Paso 4: Elaborar el diagrama principal, donde se invocan los procedimientos Paso5: Elaborar los diagramas de cada proceso (procedimiento/funcin)

Programa Principal()
Inicio

Teclado(IN) B,H (OUT)

LeerDatos

Leer: B

LeerDatos(B, H)

Leer: H

B,H (IN) HallarArea


A = (B * H )/ 2

HallarArea(A, B, H)

A (OUT)

Imprimir(A)

A (IN) Imprimir
Print: A

FIN

FIN

Parmetro de Entrada (IN): Parmetro que contiene un dato necesario para la ejecucin del procedimiento Ing. Edwin procedimiento Parmetro de Salida (OUT):Parmetro cuyo valor es alterado al interior de unRamos Velsquez

Ejemplo 01:Diagramas de definicin de cada procedimiento/funcin


Programa Principal()
LeerDatos(B, H: Integer)

Imprimir(A: Float) Inicio


Print: A

Inicio
B,H (OUT)

Inicio

Leer: B LeerDatos(B, H)
A (OUTPUT)

Leer: H FIN
HallarArea(A:Float; B, H: Integer) Inicio

FIN

HallarArea(A, B, H)
B,H (INPUT)

Imprimir(A)
A (INPUT)

A = (B * H )/ 2 FIN FIN

Parmetros: Son las variables declaradas entre los parntesis que acompaa a la declaracin de un procedimiento

Parmetro de entrada: Variable que ser utilizada por el procedimiento Parmetro de salida: Variable cuyo valor ser generado dentro del procedimiento Entrada = Input, Salida = Output
6

Ing. Edwin Ramos Velsquez

Procedimientos que retornan un solo valor pueden ser transformados en funciones


Programa Principal()
INICIO

Programa Principal()

Programa Principal()

Teclado(IN) B,H (OUT)

Inicio

Inicio

LeerDatos

Leer: B

LeerDatos(B, H)
Leer: H

LeerDatos(B, H)

B,H (IN) HallarArea


A = (B * H )/ 2

HallarArea(A, B, H)

A = HallarArea(B, H)

A (OUT)
Imprimir(A)
Imprimir(A)

A (IN) Imprimir
Print: A

FIN

FIN

FIN

NOTA: Un procedimiento que tiene un nico parmetro de salida puede transformarse en funcin (Por ejemplo: el procedimiento
HallarArea(A:Float ; B,H: Integer), se transform en la funcin
7

Los procedimientos son subprogramas HallarArea(B,H: Integer): Ing. Edwin Ramos Velsquez Float Las funciones son subprogramas que devuelven un valor El Parmetro de Salida desaparece como parmetro

Programa Principal()
Inicio

LeerDatos(B, H: Integer)
Inicio Leer: B

Imprimir(A: Float)
Inicio Print: A

LeerDatos(B, H)
Leer: H FIN
FIN

A = HallarArea(B, H)
HallarArea(B, H: Integer): Float

Imprimir(A)

Inicio

A = (B * H )/ 2

FIN

return A FIN

Ing. Edwin Ramos Velsquez

Paso 1: Analizar el problema: Identificacin de variables Paso 2: Elaborar el algoritmo general Paso 3: Identificar los procesos y las variables INPUT y OUTPUT de c/u Paso 4: Elaborar el algoritmo del programa principal (con procedimientos/funciones) Paso 5: Elaborar algoritmo de cada procedimiento/funcin

EJEMPLO 02: Hallar el Mximo Comn Divisor (MCD) de dos nmeros usando el algoritmo de Euclides
Ing. Edwin Ramos Velsquez 9

Ejemplo 02: Hallar el Mximo Comn Divisor (MCD)


Datos de entrada (Input): A, B: Integer Datos de Salida (Output): MCD: Integer
Programa Principal()
LeerDatos(A, B: Integer) Inicio

Inicio

Leer: A

LeerDatos(A, B)

Leer: B FIN

A, B Input

HallarMCD(MCD, A, B )

Imprimir( MCD)

Imprimir(MCD: Float) Inicio Print: MCD

Programa Principal

FIN

FIN

Output MCD
Ing. Edwin Ramos Velsquez 10

Ejemplo 02: Analizar el problema(1)


Paso 1: Analizar el problema
X Cociente (C) Nmeros a Operar (X, Y) Residuo(R) X 721 Y 1 448 273 Y 1 273 175 1 175 98 1 98 77 1 77 21 X 3 21 14 Y 1 14 7 2 MCD = 7 7 0

Detener cuando Residuo = 0

a) Variables: Entrada A, B: Nmeros a Analizar (Input) Auxiliares: X, Y, R: Variables de proceso (Aux) Salida: MCD: Mximo Comn Divisor (Output) b)Proceso Interno(Modelo Matemtico):
Hacer X = A; Y = B ( donde A > B ) ( X = B; Y = A ( donde A < B) Hacer MCD = Y; Hacer R = X mod Y )

Repetir (MCD = Y; X=Y; Y = R; R = X mod Y ) Mientras R<>0

c) Salida de datos: MCD

(Output)
Ing. Edwin Ramos Velsquez 11

Ejemplo 02: Disear el algoritmo(1)


Paso 1: Analizar el problema
X Cociente (C) Nmeros a Operar (X, Y) Residuo(R) X Y 1 1 1 1 1 X 3 Y 1 2 MCD = 7

Paso 2: Disear el Diagrama de flujo

HallarMCD(MCD:Integer; A,B: Integer) Inicio

SI X=A Y=B

IF A>B

NO X=B Y=A

721

448 273
Y

273 175

175 98

98 77

77 21

21 14

14 7

7 0 R = X mod Y MCD = Y

Detener cuando Residuo = 0

a) Variables:

A, B: Nmeros a Analizar (Input) X, Y, R: Variables de proceso (Aux) MCD: Mximo Comn Divisor (Output)

WHILE ( R<>0) Hace r X=Y Y=R

b)Proceso Interno(Modelo Matemtico):


Hacer X = A; Y = B ( donde A > B ) ( X = B; Y = A ( donde A < B) Hacer MCD = Y; Hacer R = X mod Y )

R = X mod Y MCD = Y

Repetir (MCD = Y; X=Y; Y = R; R = X mod Y ) Mientras R<>0

c) Salida de datos: MCD

(Output)
Ing. Edwin Ramos Velsquez

FIN

12

Ejemplo 02: Disear el algoritmo(2)


PROGRAMA_PRINCIPAL()

Paso 2: Disear el Diagrama de flujo

HallarMCD(MCD:Integer; A,B: Integer) Inicio

SI X=A Y=B

IF A>B

NO X=B Y=A

INICIO

R = X mod Y MCD = Y

LeerDatos(A, B)
WHILE ( R<>0)

HallarMCD(MCD, A, B)

Hace r X=Y Y=R

Imprimir(MCD)

R = X mod Y MCD = Y

FIN
FIN

Solucin utilizando procedimientos

Ing. Edwin Ramos Velsquez

13

Ejemplo 02: Disear el algoritmo(3)


PROGRAMA_PRINCIPAL()

Paso 2: Disear el Diagrama de flujo


HallarMCD(MCD:Integer; A,B: Integer) HallarMCD(A,B: Integer): Float Inicio

SI X=A Y=B

IF A>B

NO X=B Y=A

INICIO

R = X mod Y MCD = Y

LeerDatos(A, B)

WHILE ( R<>0) Hace r X=Y Y=R

MCD = HallarMCD(A, B)

Imprimir(MCD)

R = X mod Y MCD = Y

FIN
FIN return MDC

Solucin utilizando procedimientos y funciones

14 Ing. Edwin Ramos Velsquez FIN

EJEMPLO 03: Dado un nmero entero, implementar un programa que halle y muestre su equivalente en numeros romanos
Ing. Edwin Ramos Velsquez 15

Hallar el equivalente nmero romano de un nmero entero


1. Analizar el problema N
6, 9 Entero String

Para nmeros entre 10 y 19


Input 10 11 12 13 14 15 16 17 18 19
INPUT 10 11 12 13 14 15 16 17 18 19

Programa Principal

R
VI, IX

Para nmeros entre 0 y 9


INPUT OUTPUT ES DECIR:

Output "X" " XI " " XII " " XIII " " XIV " " XV " " XVI " " XVII " " XVIII " " XIX "
OUTPUT "X"+"" "X"+"I" " X " + " II " " X " + " III " " X " + " IV " "X"+"V" " X " + " VI " " X " + " VII " " X " + " VIII " " X " + " IX "

Es decir "X"+"" "X"+"I" " X " + " II " " X " + " III " " X " + " IV " "X"+"V" " X " + " VI " " X " + " VII " " X " + " VIII " " X " + " IX "
ES DECIR: funcion(10) = " X " funcion(11) = " XI " funcion(12) = " XII " funcion(13) = " XIII " funcion(14) = " XIV " funcion(15) = " XV " funcion(16) = " XVI " funcion(17) = " XVII " funcion(18) = " XVIII " funcion(19) = " XIX " O TAMBIN funcion(10) = " X " + funcion(0) funcion(11) = " X " + funcion(1) funcion(12) = " X " + funcion(2) funcion(13) = " X " + funcion(3) funcion(14) = " X " + funcion(4) funcion(15) = " X " + funcion(5) funcion(16) = " X " + funcion(6) funcion(17) = " X " + funcion(7) funcion(18) = " X " + funcion(8) funcion(19) = " X " + funcion(9) 16

0 1 2 3 4 5 6 7 8 9

"" "I" " II " " III " " IV " "V" " VI " " VII " " VIII " " IX "

funcion(0) = " " funcion(1) = " I " funcion(2) = " II " funcion(3) = " III " funcion(4) = " IV " funcion(5) = " V " funcion(6) = " VI " funcion(7) = " VII " funcion(8) = " VIII " funcion(9) = " IX "

Ing. Edwin Ramos Velsquez

Paso 2: Diagrama de flujo del Prog. Principal


Programa Principal()
INICIO

Solo Procedimientos
Programa Principal( )
Inicio

Teclado(IN) N (OUT)

Output

LeerDatos(N)

LeerDatos

Leer: B N

Input
Leer: H

N (IN) HallarRomano
A = (B * H )/ Subprograma: 2 HallarNroRomanoEquivalente()

HallarRomano( R, N)

R (OUT)

Output

A (IN) Imprimir
Print: A R

Imprimir(R)

FIN FIN

Input

Ing. Edwin Ramos Velsquez

17

Paso 2: Diagrama de flujo del Prog. Principal


Solo Procedimientos
Programa Principal( ) Inicio

Procedimientos y/o funciones


Programa Principal( )

LeerDatos( ):Integer
Inicio

Output

Inicio

LeerDatos(N)

N = LeerDatos( )

Leer: N

Input
R = HallarRomano( N )
return N

HallarRomano( R, N)

Imprimir(R)

FIN

Output

FIN

Imprimir (R:String ) Inicio

Imprimir(R) Print: FIN R

Input

FIN

Ing. Edwin Ramos Velsquez

18

RomanoDeDecada(N:Integer ): String Inicio Z = Integer( N/10 )


Parte entera de la divisin N/10

CASE (Z)
Z=0 Z=1 Z=2 Z=3 Z=4 Z=9

R = RomanoDeUnidad(N - 0) R = " X " + RomanoDeUnidad(N -10)

Programa Principal( ) Inicio

R = " XX " + RomanoDeUnidad(N - 20) R = " XXX " + RomanoDeUnidad(N - 30) R = " XL " + RomanoDeUnidad(N - 40) R = " XC " + RomanoDeUnidad(N - 90)

N = LeerDatos( )

return R FIN

R = HallarRomano( N )

RomanoDeUnidad(N:Integer ): String
Imprimir(R)

Inicio
FIN

CASE (N)

HallarRomano(N:Integer ): String
Inicio
N=0 N=1 N=2 N=3 N=4 N=9

R=" " R = RomanoDeDecada(N)

R="I"

R = " II "

R = " III "

R = " IV "

R="I"

return R FIN

return R FIN Ing. Edwin Ramos Velsquez


19

RomanoDeDecada(N:Integer ): String Inicio Z = Integer( N/10 )


Parte entera de la divisin N/10

CASE (Z)

Z=0

Z=1

Z=2

Z=3

Z=4

Z=9

R = RomanoDeUnidad(N - 0) R = " X " + RomanoDeUnidad(N -10) R = " XX " + RomanoDeUnidad(N - 20) R = " XXX " + RomanoDeUnidad(N - 30) R = " XL " + RomanoDeUnidad(N - 40) R = " XC " + RomanoDeUnidad(N - 90)

return R FIN

Ing. Edwin Ramos Velsquez

20

EJEMPLO 04: Graficar figura triangular con nmeros


Ing. Edwin Ramos Velsquez 21

Problema: Realizar un programa que dado un valor N ledo desde teclado, imprima en pantalla la respectiva grfica, segn se muestra a continuacin:
Si N=3
1 2 3 1 2 1

Si N=5
1 1 1 1 1 2 3 4 5 2 3 4 2 3 2

Si N=6
1 1 1 1 1 1 2 2 2 2 2 3 4 5 6 3 4 5 3 4 3

Si N=7
1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 4 5 6 7 4 5 6 4 5 4

2. Implementar el programa
Programa Principal( ) Inicio

1. Analizar el problema
1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 4 5 6 7 4 5 6 4 5 4 ImprimirLinea(7) ImprimirLinea(6) ImprimirLinea(5) . . . . . . ImprimirLinea(1) For N

N = LeerDatos( )

ImprimirFigura(N)

Hasta 1
FIN

Ing. Edwin Ramos Velsquez

22

Programa Principal( ) Inicio

LeerDatos( ):Integer Inicio

Imprimir Figura(N:Integer ) Inicio

For k = N ------> 1

Leer: N
N = LeerDatos( ) ImprimirLinea(k)

return N
ImprimirFigura(N)

FIN
FIN FIN

Imprimir Linea(N:Integer ) Inicio

For k = 1 ------> N

Print: k

Ing. Edwin Ramos Velsquez

FIN

23

Vous aimerez peut-être aussi