Programación I

Guía de estudio 2

1

Universidad Nacional Experimental de Guayana Área de Inform tica Programación #ateria" I !arrera" Ingeniería Inform tica $emestre" II

Guía de estudio 2
I Parte: Funciones y Procedimientos Introducción
Una de las estrategias m s efectivas en la solución de pro%lemas comple&os es 'divide y vencer s() o en ingl*s '+ivide and con,uer-) *sta utili.a la metodología '/op0+o1n-) o descendente) ,ue consiste en dividir un pro%lema comple&o en un con&unto de su%pro%lemas m s sencillos2 En este estilo de programación modular) los su%programas son independientes unos de otros2 Esta metodología permite" • • +ise3ar y desarrollar m s f cilmente los programas" cada módulo se puede reali.ar por separado y de forma Independiente2 4ocali.ar m s f cilmente los errores" cada módulo se puede pro%ar en forma independiente2

Subprogramas
Un programa en Pascal consiste de uno o m s módulos) los cuales a su ve. tam%i*n pueden estar constituidos por otros módulos) y así sucesivamente2 Estos módulos ser n llamados) en t*rminos generales) $U5P67G68#8$) y en particular P67!E+I#IEN/7$ y 9UN!I7NE$2 Un su%programa es un %lo,ue de programa ,ue reali.a una tarea determinada) y ,ue al llam rsele o invoc rsele puede necesitar ,ue se le pasen P868#E/67$2 Un su%programa puede ser invocado desde cual,uier punto del programa) por medio de una instrucción IN:7!8+7682 4os par metros son canales de comunicación ,ue proveen un mecanismo para intercam%iar información entre programas y su%programa) van asociados a varia%les y constantes) expresiones) etc y se identifican con los correspondientes identificadores o expresiones2 4os par metros ,ue se utili.an en la declaración de su%programas se llaman P868#E/67$ 976#84E$ o ficticios y los ,ue se utili.an en la invocación) se denominan P868#E/67$ 8!/U84E$) reales o argumentos2 4a cantidad de los par metros actuales y formales de%e ser igual y el tipo de%e corresponder en el orden de declaración2

1. Procedimientos
Un procedimiento es un su%programa ,ue reali.a alguna de las tareas del programa) y ,ue no devuelve ning;n valor al su%programa ,ue lo invocó2 Un procedimiento est compuesto de un grupo de sentencias a las ,ue se asigna un nom%re <identificador= y constituye una unidad del programa2 4a tarea asignada al procedimiento se e&ecuta siempre ,ue Pascal encuentra el nom%re del procedimiento2 4a declaración indica las instrucciones a e&ecutar2 Un procedimiento es llamado en un programa o dentro de otro procedimiento directamente por su nom%re en cual,uiera de las dos formas"
• •

nombre_procedimiento nombre_ procedimiento (lista parámetros actuales)

&riteln "'P: Preparar (rc)i o '#.ar y de la forma en .ado par metros formales2 de si en la declaración del procedimiento se ?an Program #enu> AEl siguiente programa presenta las opciones de un men.a del procedimiento) esto es) de la tarea .an las acciones . y luego indica cual fue seleccionadaB :ar 7pción" c?ar . tipo declaraciones locales y su%programas %egin cuerpo del procedimiento end. declaraciones locales " pueden declararse constantes) declaraciones locales y tipos varia%les y su%programas propios del subprogramas procedimiento2 begin cuerpo del procedimiento: con&unto de instrucciones cuerpo del procedimiento . 1riteln <C$" $alir C=> 1riteln <C$eleccione una opción 00D C=> end> 5egin presentarEopciones> read<opcion=> Friteln<G4a opción seleccionada fue" G)opcion=> End2 . In ocación al procedimiento Para invocar a un procedimiento) la sintaxis es" @nombre_de_procedimiento ! "parámetros_actuales # .1. &riteln "'I: Imprimir (rc)i o '#. 4a existencia de par metros actuales depender utili. 4a existencia de parámetros formales depender de la naturale.2.ue de%e reali. %egin 1riteln <C#enu de 7pcionesC=> &riteln "'(: (brir (rc)i o '#. Declaración de un procedimiento 4a sintaxis para declarar un procedimiento es" 9ormato 1" procedure nombre_procedimiento.ar el end> procedimiento 9ormato 2" procedure p1>p2>22 lista de par metros formales y su nombre_procedimiento( p1>p2>222 ). &riteln "'*: *errar (rc)i o '#. procedure Presentar$%pciones.Programación I Guía de estudio 2 2 En Pascal es o%ligatorio declarar los procedimientos antes de ser referenciados en el cuerpo del programa 1.ue va a reali.ue lo ?a estructurado su creador2 1.ue reali.

uiera de las siguientes formas" id$/ar :0 @nom%reEfunciónD par metrosElocales es una lista de varia%les yJo constantes "par-metros$locales# .ar el procedimiento p1. In ocación de +unciones Una función es llamada por su nom%re) en una sentencia de asignación) en una sentencia de salida o como parte de una expresión aritm*tica) lógica o relacional) seg..nico resultado2 Esta característica le diferencia esencialmente de un procedimiento2 4a diferencia principal entre un procedimiento y una función es .ue el procedimiento no devuelve ning.p..ue la invocó> mientras .1.Programación I Guía de estudio 2 H 2..7# si 5 es o no impar seno de 5 cuadrado de 5 alor absoluto de 5 parte entera de 5 alor de la constante pi .n valor2 Puesto . separadas por comas2 4a existencia de par metrosElocales Friteln <I 1nombre$+unción! depender de . Declaración de +unciones 4a declaración de una función tiene la siguiente forma" 9ormato" function NombreF <p1..ue reci%e como argumentos o par metros) datos de tipos num*rico o no num*rico) y devuelve un .2. Funciones Una función es un su%programa . E&emplos" function verifica " %oolean > A 9unción sin par metros formalesB function cam%ia<:ar valorE1) valorE2" real="real> function potencia< %ase) exponente " real ="real> declaraciones locales " pueden declararse constantes) tipos varia%les y su%programas propios de la función2 cuerpo de la función: con&unto de instrucciones .. lista de par-metros +ormales y su tipo tipoFunction: tipo de dato del resultado .rt"5:real# : logaritmo neperiano de • ln"5:real# : 5 parte decimal de 5 • +rac"5:real#: sucesor de 5 • succ"5:tipo ordinal#: • odd"5:integer# : • sin"5:real# : • s.n sea el tipo de la función2 $e puede llamar o invocar una función en cual.ue existan par metros formales en la "par-metros$locales#2 # declaración de la función 34emplo de Funciones Prede+inidas en Pascal coseno de x • cos<x"real= " raí6 cuadrada de 5 • s. ="tipoFunction Adeclaraciones locales y su%programasB %egin <cuerpo de la función> Nombre ! valor de la función end.ue de%e reali.p2..ue reali.ue el identificador de la función asume un valor) y cuando la función termina su tarea) devuelve ese valor al módulo ..r"5:real#: • abs"5:real# : • int"5:real# : • pi "7no args.ue el nom%re de la función toma un valor) dic?o nom%re de%e tener asociado un tipo de dato2 2.an las acciones .ue de uel e la +unción 2.

"Lrai. rai6$cuad :0 5 93l resultado se asigna a nombre$+unción. cuadrada de un n. :ar numero) i" integer> 9unction EsEpar<num"integer="%oolean> :ar par" %oolean> %egin par"L false> if <num #7+ 2 L M= t?en par :0 true.meroB :ar rai. es igual a " G)rai.n valor) reali.mero2 4a codificación del programa sería" Program 6ai.) numero " real> A+eclaración de la función rai. cuadrada de un n.Programación I Guía de estudio 2 K Program 8umeros$Pares.Ecuad< a " real = " real > :ar x " real > %egin 5 :0 s.EcuadB function rai."=> End2 .an alguna tarea tal como alguna operación de entrada J salida2 1 1 8 un nom%re de procedimiento no se puede asignar un valor) y por consiguiente ning.ando su nom%re en una instrucción <de asignación o expresión matem tica=) mientras .n tipo esta asociado con un nom%re de procedimiento2 1 1 Una función se referencia utili.Ecuadrada> AEl siguiente programa calcula la raí. end. Diferencias entre procedimientos y funciones: 1 1 4as funciones normalmente) devuelven un solo valor a la unidad de programa <programa principal u otro su%programa= .rt"a# . *onst n 0 <. 93l siguiente programa imprime los n:meros pares de un con4unto de n n:meros naturales.Ecuad<numero=> AInvoca a la función rai.ue un procedimiento se referencia por una llamada o invocación al mismo2 Por e&emplo) calcular la raí. read"numero# I+ 3s$par"numero# t)en &riteln"numero#. 3s$par :0 par end.ue la referencia o llama2 4os procedimientos pueden devolver cero) uno o varios valores2 En el caso de no devolver ning. 5egin for i"L 1 to n do %egin &riteln "'3scriba un numero'#.EcuadB Frite4n<G rai. 5egin 6ead4n<numero= > rai. end 3nd.

ue Identificad $ignificado de cada identificador or constante glo%al varia%les glo%ales procedimiento anidado par metros de 8 varia%les locales de 8 y glo%al de 5 función local varia%le declarada en anidado función declarado en anidado constante anidado glo%al declarada en declarado en i)& 8 8 i r)s 5 & 5 # 5 g m)n r)s i y 8 anidado # par metros de 5 varia%les locales varia%le declarada en 8 par metro de 8 varia%le declarada en anidado procedimiento anidado declarado en .ue a%arca a dic?os su%programas2 Ejemplo: Program anidado> !onst #L2HM> :ar i)&"real> procedure 8<:ar i"real=> :ar r)s"%olean> function 5<g"real="%olean> :ar m)n"c?ar> %egin I end> %egin 5<N2M= end> 5egin 8<i= End2 6eferencias de identificadores v lidos" 5lo.ue *ste contiene2 !uando otro su%programa utili.Programación I Guía de estudio 2 N =. >mbito de ariables o constantes 4as varia%les se clasifican en 47!84E$ y G47584E$2 Una varia%le 47!84 es una varia%le declarada dentro de un su%programa) y el significado de dic?a varia%le se limita a ese su%programa y a los módulos .ue otros su%programas tengan acceso al valor de una varia%le) lo cual se logra declar ndola en el módulo .a el mismo nom%re de varia%le) se crea una varia%le diferente en otra posición de la memoria2 Por eso) si un su%programa asigna un valor a una de las varia%les locales) tal valor no es accesi%le a los otros su%programas2 Una varia%le G47584) se utili.a cuando se desea .

<8 "real > /ar ! "real=> %egin ! "L s.E porE6eferencia> :ar 8)!"real> procedure rai.ue se re.ue el valor de una varia%le sea modificado por el módulo invocado) de%e ?acerse el paso de par metro por referencia) por medio del cual el módulo invocado tiene acceso a la dirección en . Paso por re+erencia En el caso de . Paso por alor El paso de par metros por valor consiste en enviar una !7PI8 del valor de la varia%le al módulo invocado2 +e esta manera se asegura . El valor de * no se modifica puesto .Programación I Guía de estudio 2 O 5 # función declarada en anidado constante anidado glo%al declarada en ?.ue es un par metro por valor2 ?.rt<8= end> 5egin !"LM> 8"L2N> rai.1.<8)! "real=> %egin ! "L s.EporE:alor> :ar 8)!"real> procedure rai.uiera .ue el valor de la varia%le sólo puede ser modificado por el módulo .rt<8= end> 5egin !"LM> 8"L2N> rai.2.ue la declaró2 $i la pala%ra "ar no aparece delante del par metro formal en un procedimiento) /ur%o Pascal supone . Paso de par-metros 8l invocar a un su%programa se le pueden pasar par metros) los cuales pueden consistir de valores de varia%les o constantes declaradas en el módulo invocador2 El paso de tales par metros puede ?acerse de dos maneras" Por valor y Por referencia 2 En /ur%o Pascal no se permite el paso de procedimientos y funciones como par metros2 ?.ue el par metro formal es un par metro por valor2 E&emplo" Program rai.<8)!=> Frite4n<8)G 0 G)!=> End2 El resultado de la e&ecución del programa sería" 2 @ A B.<8)!=> Frite4n<8)G 0 G)!=> End2 El resultado de la e&ecución del programa sería" 2 @ C @ .ue las invocaciones a su%programas son similares en los casos de paso por valor y paso por referencia2 Ejemplo: Program rai.ue se guarda el valor a modificar2 En la declaración de%e aparecer la pala%ra "ar precediendo el nom%re de la varia%le2 7%servamos .

ue es un par metro por referencia2 .Programación I Guía de estudio 2 P El valor de ! se modifica puesto .

ue si alguno de los n.ue reci%a un n.mero e imprima si es primo o no2 Utilice una función . Escri%ir un programa .meros primos usando la función anterior2 ?. . Escri%ir un programa .ue indi.meros comprendidos entre dos n.ue indi.nidad 1.meros dados2 $e de%e leer N1 y N22 6ealic* la corrida en frío para el algoritmo anterior con N1 L 2N y N2 L K2 E. 6ealic* en Pascal) utili. ofreciendo las opciones de suma) resta) multiplicación y división y calcule dic?a operación2 6ealic* la corrida en frío del programa K) para los siguientes datos KPRN Q122N 2HKN KMRQ2N 1RK2KN 2N RQPK2 N2HN multiplicación suma división resta <. Escri%ir un programa . *ealice todos los e+ercicios indicados en el problemario de la procedimientos ()o funciones se&.ue el tipo de conversión sea #t → Pie) #t → Pg) Pie → #t) Pie → Pg Pg → #t) Pg → Pie !alir $alida" cantidad origen) tipo de conversión y resultado2 <1 metro L HR)HP pulgadas) 1 pie L 12 pulgadas= . Escri%ir un programa . a-ora utili'ando 1.mero) es decir) si tenemos a y %) .mero divide a otro n.ando su%programas el programa del siguiente pro%lema" !alcular la suma de todos los n. #i el enunciado indica $ue un dato es dado.ue sea divisi%le entre 1MM2 $in em%argo) si un a3o es divisi%le entre 1MM y adem s es divisi%le entre KMM) tam%i*n resulta %isiesto2 2.ando funciones el programa del siguiente pro%lema" !onversión de temperaturas Entrada" $olicitar /emperatura y tipo de conversión" ! → 9 o 9 → !2 /emperatura en grados !elsius <!= o grados 9a?ren?eit <9= $alida" /emperatura origen) tipo de conversión y resultado2 Nota" formula de conversión" 9 L <RJN= ! S H2 F.ue reci%a un a3o e imprima si es %isiesto o no2 Utilice una función .ue si a divide a b2 @.meros enteros) y . se asumirá $ue se conoce ( deberá colocarse como constante.ue lo decida =. 6ealic* en Pascal) utili.ando funciones el programa del siguiente pro%lema" " !onversión de longitudes Entrada" $olicitar tipo de conversión y !antidad) ?asta . 6ealic*) utili.ue solicite dos n.n conven&a.meros) presente un men.ue lo decida2 Un a3o es %isiesto si es divisi%le entre K) a menos . 6ealic* un Programa .ue reci%a n n.ue o%tenga la suma de los N primeros n.Programación I Guía de estudio 2 Q Guía de 34ercicios Dnidad 2: Subprogramas NOTA: #e asume $ue los %ro&ramas se reali'an en %ascal ( deben utili'ar procedimientos ()o funciones.