INFORMATICA DEL CBU Clase 9 Año 2016 FUNCIONES ARREGLOS
PRIMERA PARTE PROCEDIMIENTOS PROCEDURE. Parámetros por valor. Parámetros por referencia. Mg. Ing. Fátima Martínez
Procedimientos Se los invoca mediante un nombre de procedimiento seguido de una lista (opcional) de parámetros. Al invocar al procedimiento se puede transferir cualquier número de datos o ninguno. No devuelven un valor cuando devuelven el control. Se suelen utilizar para recibir o procesar entradas, mostrar salidas. Mg. Ing. Fátima Martínez
Palabra clave PROCEDURE PROCEDURE nombre ([parámetros formales]); Bloque Declarativo Begin Bloque de Instrucciones End; Mg. Ing. Fátima Martínez
Llamadas a Procedimiento Se escribe el nombre del procedimiento en el lugar donde queremos que se ejecute. Si el procedimiento contiene parámetros, éstos deberán ser pasados entre paréntesis. Mg. Ing. Fátima Martínez 5
Declaración de parámetros Se declaran igual que las variables especificando: un nombre, un tipo de datos y un mecanismo para pasar parámetros (por valor o por referencia). Mg. Ing. Fátima Martínez 6
Problema. Determine el Mayor Mg. Ing. Fátima Martínez
Ejemplo de PROCEDURE Program Mayor; uses crt; (*-------------------------------------------------------*) Procedure Maximo(A,B,C: integer); var Max: integer; Begin If (A>B) and (A>C) then Max := A; if (B>A) and (B>C) then Max := B; if (C>A) and (C>B) then Max := C; writeln('El mayor es ', Max); End; Mg. Ing. Fátima Martínez
Llamadas a Procedimiento (*------------------------------------*) var a, b, c: integer; Begin (*Bloque principal*) clrscr; repeat write ('Ingrese 3 enteros. Para terminar ingrese 0'); readln(a, b, c); Maximo(a, b, c); (*Llamada a procedimiento*) until ((a=0) and (b=0) and (c=0)); End. Mayor Mg. Ing. Fátima Martínez
Muy importante Los parámetros actuales (desde la invocación) deben corresponderse… En cantidad. En tipo En orden Con los parámetros formales que espera la declarativa formal del subprograma. Mg. Ing. Fátima Martínez
Parámetros por Valor Se denominan también parámetros de entrada. Actúan como una copia de aquél que es enviado desde el punto de invocación. Cualquier cambio realizado en el procedimiento no afecta a la variable original. Mg. Ing. Fátima Martínez
Parámetros por Referencia Los parámetros formales reciben las direcciones de memoria que referencian a los valores de los parámetros actuales. No es una copia sino el original. Cualquier cambio dentro de la rutina afecta la variable original. En la sintaxis el identificador va precedido de la palabra reservada var. Mg. Ing. Fátima Martínez
IMPORTANTE Un procedimiento puede o no devolver un valor al punto desde donde fue invocado (bloque principal u otro subprograma). Si devuelve un valor, el parámetro que devuelva esa información deberá ser pasado por referencia. Mg. Ing. Fátima Martínez
SEGUNDA PARTE FUNCIONES Funciones Estándares. FUNCTION. Llamada a una Función. Mg. Ing. Fátima Martínez
Función Devuelve un valor de manera explícita. Comienza con la palabra clave Function seguida a continuación de un nombre. Sigue con una lista de parámetros entre paréntesis. Finaliza con : tipo de valor que retorna.
FUNCIONES ESTÁNDARES Con o sin parámetros: Write (Temperatura, Altura, presión); F := chr(67); Read (Numero); Clrscr(); Area := PI *sqr (Radio); X := round(X); Distancia := sqrt(sqr(x) + sqr(y));
Function Instrucciones localizadas entre Begin y End; Function Nombre(Param1:Tipo1; Param2:Tipo2) : Tipo; El control no vuelve al programa de llamada hasta que se ejecute una instrucción End; Tipo de función, especifica el tipo de dato que devuelve. Mg. Ing. Fátima Martínez 17
Function Begin End; Function Nombre(Param1:Tipo1; Param2:Tipo2): Tipo; Var variable : tipo1; Begin (*Operaciones*); … Nombre := resultado; // así devuelve valor End;
EJEMPLO de FUNCION Function Potencia(base: double; exp: integer): double; var i:integer; Pot: double; begin Pot := 1; // inicializa if (exp>0) then for i:=1 to exp do Pot := Pot * base; else Sigue->
if (exp< 0 ) then exp := -1*exp; for i:=1 to exp do begin Pot := Pot * base; end; // del for Pot := 1/Pot; End; // del if Potencia := Pot; // devuelve valor End; // de la fn Mg. Ing. Fátima Martínez
LLAMADA A UNA FUNCIÓN Para ejecutar o llamar una función: Nombre([argumentos]) Los paréntesis se incluyen aunque no tenga argumentos. Argumentos: variables o expresiones que se pasan a la función. Se separan con coma. Número y tipo de argumentos deben coincidir con número y tipo de parámetros de la función. Se utiliza su nombre en una expresión: impuestos := ImpuesTotales(5000); Writeln(ImpuesTotales(5000)); 21
Ejemplo de llamada a Función (*---------En el bloque principal------------------*) Begin clrscr; writeln('Ingrese Base y un exponente entero '); readln(a,b); P:=Potencia(a,b); writeln(P:2:4); Readkey; End. writeln(Potencia(a,b));
Valor devuelto en el nombre de la función Function QueComer (DiaSemana: String, Hora: integer) : String; Begin (*Devuelve el menú de acuerdo al día y la hora*) If DíaSemana = ‘Viernes’ then QueComer := ‘Pescado’; Else QueComer := ‘Pollo’; End ; If Hora > 4 Then QueComer := ‘Demasiado tarde’ ; 23
Problema 1 Se tiene un circunferencia de Radio R = 50. Generar 100 circunferencias con centros aleatorios, cuyas coordenadas son xg e yg y radio r = 10. Determinar y mostrar cuantos se encuentran dentro de la circunferencia.
r = 10 R = 50
COMIEZO DE ALGORITMO FIN DE ALGORITMO. CIRCULOS cant:=0; rg := 10; R := 50; Para cont := 1 Hasta 100 Hacer Comienzo xg ← -80 + Aleatorio (80-(-80)+1); yg ← -60 + Aleatorio(60-(-60)+1); dist ← RaizCuadrada( xg 2 + yg 2 ); dist ← dist + rg; Si (dist < R) Entonces cant ← cant + 1; Fin; Escribir ('Cantidad Dentro= ', cant); FIN DE ALGORITMO. CIRCULOS
Procedimientos VS Funciones Son invocados por su nombre. Pueden recibir argumentos. Devuelven un valor cuando devuelven el control. Se suelen utilizar para llevar a cabo cálculos. PROCEDIMIENTOS Son invocados por su nombre. Pueden recibir argumentos. No devuelven un valor cuando devuelven el control. Se suelen utilizar para recibir o procesar entradas, mostrar salidas. Mg. Ing. Fátima Martínez
Variables Globales y Locales Ámbito de una variable: región donde se encuentra declarada. En Declaraciones Generales: Globales. Pueden ser utilizadas interiormente o exteriormente. Internamente o localmente: Locales. No pueden ser utilizadas exteriormente. Usar variables globales o locales depende del la necesidad del programa. Puede utilizarse el mismo identificador para entidades diferentes en lugares diferentes. Mg. Ing. Fátima Martínez 28
Locales: accesibles dentro un bloque de código. Globales a nivel del código fuera de un bloque. Var factor: integer; Function Factorial(numero: integer): Longint; var producto: Longint; begin If numero <= 1 Then Factorial := 1 Else begin producto := 1; For factor := 2 To numero begin producto := producto * factor; End; Factorial := producto; Global Local Factorial Mg. Ing. Fátima Martínez 29
TERCERA PARTE ARREGLOS ARRAY. Unidimensionales: Vectores. Declarar arreglos. Type: tipo de datos definido por el usuario. Operaciones con vectores. Asignación. Mg. Ing. Fátima Martínez
ARREGLOS Datos simples: Datos estructurados: Arreglos Integer, Real, Char, Boolean. Cada variable representa un sólo dato individual. Datos estructurados: Arreglos Colección finita de datos (variables) del mismo tipo. Un único identificador representa a múltiples datos individuales. Pueden ser manipulados colectiva o individualmente. Mg. Ing. Fátima Martínez
Mg. Ing. Fátima del C. Martínez ARREGLOS (ARRAY) Se le asigna una cantidad fija de memoria. Se almacenan en posiciones contiguas de memoria. El mismo identificador (nombre de variable). Cada elemento identificado por un índice. El número de índices determina su dimensionalidad. Acceso directo a cada elemento del arreglo: x[1], x[2], x[3]… x[n] Mg. Ing. Fátima del C. Martínez 11/17/2018
Mg. Ing. Fátima del C. Martínez Vectores Arreglo unidimensional (lista). 7.50 4.75 6.55 5.25 6 … (1) (2) (3) (4) (…) (n) Calificaciones Nombre del vector: Calificaciones Subíndice: [2] Contenido: Calificaciones[2] := 7.50 Mg. Ing. Fátima del C. Martínez 11/17/2018
Declarar ARREGLOS Su índice comienza en 1. Se declaran especificando: Nombre del arreglo. Tamaño. Tipo de datos de los elementos del arreglo. Su índice comienza en 1. Mg. Ing. Fátima Martínez
Declaración formal de un arreglo En una declaración de variable: Var nombreArreglo: array[tipo de indice] Of tipo Ejemplo: Arreglo de 100 elementos de tipo real Var lista : array[1..100] Of real; Crear un “alias” mediante una declarativa type: Type Vect = array[1..100] Of real; Var lista: Vect; Mg. Ing. Fátima Martínez
OPERACIONES CON VECTORES Asignación: igual a cualquier variable, pero poniendo el número de índice del elemento entre [ ]. Var Notas: Vect; For i := 1 To 100 begin Notas[i] := 1 + random(10); suma = suma + Notas[i]; End; Promedio := suma/100; … NOTAS Mg. Ing. Fátima del C. Martínez 11/17/2018
Ejemplo 1 Considerar el vector lista de 100 elementos. Examinar el valor de cada elemento del arreglo y escribir aquellos valores que sean negativos. For cuenta:=1 To 100 do If lista[cuenta]<0 Then writeln(cuenta:3, lista[cuenta]:4:2); Mg. Ing. Fátima Martínez
Ejemplo 2 Leer una lista de N cantidades de temperaturas. Calcular la media y obtener la desviación de cada uno de las temperaturas respecto de la media: desviación = x[i] - media Mg. Ing. Fátima Martínez
Modularización del programa Escribiremos procedimientos distintos para: Leer los datos de la lista. Calcular la media. Calcular la desviación y guardarla en otro vector. Mostrar el vector de la lista. Mostrar el vector de la desviación. Mg. Ing. Fátima Martínez
Leer datos de la lista Emplearemos un bucle: For i:=1 To final do Begin write(‘La temperatura ’,i, ‘ -> ’); readln(lista[i]); End; Mg. Ing. Fátima Martínez
Calcular la media suma:=0; For i:=1 To final do Begin suma := suma + lista[i]; End; media := suma/final; Mg. Ing. Fátima Martínez
Calcular las desviaciones For i:=1 To final do Begin desviacion[i]:= media - lista[i]; End; Mg. Ing. Fátima Martínez
Mostrar resultados Writeln(‘Temperaturas: ’); For i:=1 To final do write(lista[i]:5:2); Writeln(); Writeln(‘Media: ’, media); Writeln(); Writeln(‘Desviaciones: ’); write(desviacion[i]:5:2); Desviaciones Mg. Ing. Fátima Martínez
Ejemplo 3 Pasar una cadena de caracteres a mayúsculas considerando el CODIGO ASCII de los caracteres. Codigo ASCII Mayusculas Mg. Ing. Fátima Martínez