Clase 10 COMPUTACION 2009 Estructuras de datos como

  • Slides: 38
Download presentation
Clase 10 COMPUTACION 2009

Clase 10 COMPUTACION 2009

Estructuras de datos como parámetros q. Ademas de los ya vistos (tipos simples), puede

Estructuras de datos como parámetros q. Ademas de los ya vistos (tipos simples), puede usarse como parámetros variables de tipos definidos por el usuario: string, enumerados, subrangos y estructurados. q. Ejemplo: leer una matriz de Nx. N elementos enteros. Construir un vector con los elementos de la matriz que se encuentran debajo de la diagonal principal q. Primero se ingresará la matriz, luego se construirá el vector para finalizar con la impresión del vector. 3/2/2021 Computacion - Fac. Ingeniería 2

En general, cuando se trabaja Program ejemplo; con estructuras de datos, type mat=array[1. .

En general, cuando se trabaja Program ejemplo; con estructuras de datos, type mat=array[1. . 10, 1. . 10] of integer; conviene el pasaje de parámetros por variable a fin vec=array[1. . 10] of integer; de no hacer copias de la var estructura. a: mat; b: vec; m, t: byte; Procedure leer(var matriz: mat; var fi: byte); var i, j: integer; Begin writeln('Ingrese la cantidad de filas y de columnas'); readln(fi); for i: =1 to fi do for j: =1 to fi do begin writeln('Ingrese el elemento ', i, ' ', j); readln(matriz[i, j]); end; End;

Procedure constru(var m 1: mat; fi: byte; var be: vec; var con: byte); var

Procedure constru(var m 1: mat; fi: byte; var be: vec; var con: byte); var i, j: integer; begin con: =0; for i: =2 to fi do for j: =1 to i-1 do begin con: =con+1; be[con]: =m 1[i, j]; Este procedimiento necesita el ingreso end; de una matriz y la cantidad de sus filas; end; devuelve un vector y su longitud

Procedure muestra(var be: vec; con: byte); var i: integer; Procedimiento que imprime begin un

Procedure muestra(var be: vec; con: byte); var i: integer; Procedimiento que imprime begin un vector for i: =1 to con do writeln (be[i]); end; Begin {PP} leer(a, m); {los dos parametros son pasados por variable, el prog. princ. ‘conoce’ los dos datos} constru(a, m, b, t); {p. p. envia al proc. una matriz y la cantidad de filas; recupera un vector y su longitud} muestra(b, t); End. Sección ejecutable: contiene llamados a procedimientos (además puede contener otras sentencias )

Anidamiento de procedimientos q. El bloque del programa es el menor nivel del programa:

Anidamiento de procedimientos q. El bloque del programa es el menor nivel del programa: es la base sobre la que se pueden construir mas niveles. Es el nivel 1. q. Cuando se agregan procedimientos (y funciones) al programa creamos un nivel 2. En este caso los procedimientos están anidados en el programa. q. El anidamiento de procedimientos dentro de otros procedimientos permite añadir mas niveles al programa q. El anidamiento de procedimientos crea “privacidad” entre los procedimientos 3/2/2021 Computacion - Fac. Ingeniería 6

Anidamiento de procedimientos q. Un procedimiento que está anidado dentro de otro es privado

Anidamiento de procedimientos q. Un procedimiento que está anidado dentro de otro es privado de ese procedimiento. q. El mantenimiento de procedimientos privados puede disminuir los errores de programación al limitar el uso de procedimientos a secciones específicas del programa 3/2/2021 Computacion - Fac. Ingeniería 7

NIVEL 2 NIVEL 3 NIVEL 2 NIVEL 1 NIVEL 3 Program Ejemplo: procedure Externo

NIVEL 2 NIVEL 3 NIVEL 2 NIVEL 1 NIVEL 3 Program Ejemplo: procedure Externo 1: begin end; procedure Externo 2; procedure Interno 1; begin end; procedure Externo 3; procedure Interno 2; begin end; begin end.

Program anidamiento; Var A, b, c: integer; {variables globales} Procedure Primer(VAR pe, ju: integer);

Program anidamiento; Var A, b, c: integer; {variables globales} Procedure Primer(VAR pe, ju: integer); Var D: integer; e: real; {var. Locales a primer y globales a Segundo} Procedure Segundo(Pi: integer; VAR jo: real); Var F: real; Begin{seccion ejecutable de segundo} F: =Pi+0. 28; Jo: = F/23. 7+345. 6 End; Begin {sección ejecutable de procedimiento Primer} Readln(D); Segundo(D+2, e); Writeln(e); End; 3/2/2021 Computacion - Fac. Ingeniería 9

Procedure ter(VAR lu: integer); Var H: real; k: integer; Procedure cuarto(ne: integer); Var I:

Procedure ter(VAR lu: integer); Var H: real; k: integer; Procedure cuarto(ne: integer); Var I: real; Begin {sección ejecutable de cuarto} I: =sqrt(ne)*(ne-2. 34); Writeln(i) End; Begin {sección ejecutable de ter} Readln(h, k); If h<lu then cuarto(k) else cuarto(2*k); End; Begin {seccion ejecutable del p. p. } Primer(a, b); Readln(c); Ter( c) 3/2/2021 Computacion - Fac. Ingeniería End. 10

Precedencia de procedimientos q. No se puede llamar a los procedimientos antes de haberlos

Precedencia de procedimientos q. No se puede llamar a los procedimientos antes de haberlos declarado. q La regla de precedencia se basa en el principio de que una idea compleja se construye mejor en base a ideas simples. I. e. , un programa se construye a partir de pequeños y sencillos procedimientos que se combinan para formar procedimientos que se hacen cada vez mas complejos. q. La única excepción se produce cuando se utilizan declaraciones forward. 3/2/2021 Computacion - Fac. Ingeniería 11

Procedimientos forward q. Una declaración forward informa al compilador de la existencia de un

Procedimientos forward q. Una declaración forward informa al compilador de la existencia de un procedimiento antes de especificar de que procedimiento se trata. q. Esta declaración consiste de una cabecera normal de procedimiento seguida de la palabra forward y un punto y coma. q. El cuerpo del procedimiento se declara después, donde sólo se incluye el nombre del procedimiento, no la cabecera completa. 3/2/2021 Computacion - Fac. Ingeniería 12

Ejemplo: program xx; procedure Adelante(a: real); forward; procedure nuevo(t: integer, var x: real); begin

Ejemplo: program xx; procedure Adelante(a: real); forward; procedure nuevo(t: integer, var x: real); begin Adelante(x); . . End; procedure Adelante; var. . Begin . . End; . . . . ;

FUNCIONES Las funciones son subprogramas (en el mismo sentido que los procedimientos) que calculan

FUNCIONES Las funciones son subprogramas (en el mismo sentido que los procedimientos) que calculan un único valor, para su uso en la evaluación de una expresión 3/2/2021 Computacion - Fac. Ingeniería 14

PROGRAM identificador USES identificador CONST Definición de constantes TYPE Declaración de tipos VAR Declaración

PROGRAM identificador USES identificador CONST Definición de constantes TYPE Declaración de tipos VAR Declaración de variables PROCEDURE identificador Definición de procedimientos FUNCTION Identificador Definición de funciones BEGIN Sentencias ejecutable END.

FUNCIONES: declaración La declaración de la función (no recursiva) tiene la misma forma que

FUNCIONES: declaración La declaración de la función (no recursiva) tiene la misma forma que un procedimiento, a excepción del encabezamiento, que tiene la forma: FUNCTION nombre_función(par 1, par 2, . . . ): tipo_de_dato; Se debe declarar el tipo de la función 3/2/2021 Computacion - Fac. Ingeniería 16

Declaración de la función Encabezamiento FUNCTION identifi_fun (P 1, . . Pn): Tipo_de_dato ;

Declaración de la función Encabezamiento FUNCTION identifi_fun (P 1, . . Pn): Tipo_de_dato ; {Declaraciones locales} Begin. . . Lista de parámetros formales. . . . . identifi_fun : = valor_de_la_función; end; La última sentencia debe ser una asignación a la variable que coincide con el identificador de la función (a fin de evitar la recursividad)

Invocación a la PROGRAM XX; Var a: real; b 1, b 2: integer; FUNCTION

Invocación a la PROGRAM XX; Var a: real; b 1, b 2: integer; FUNCTION Ejemplo(x, y: integer): real ; Begin. . . Ejemplo: =. . ; End; función Begin. . . . a: =Ejemplo(b 1, b 2)+12. 04; . . . . La invocación (en una expresión) activa la función; esta es ejecutada, luego el valor End. guardado en Ejemplo es devuelto al p. p.

Ejemplo de declaración function Es. Entero(x : real): Boolean; begin If trunc(x)=x Then Es.

Ejemplo de declaración function Es. Entero(x : real): Boolean; begin If trunc(x)=x Then Es. Entero : = TRUE Else Es. Entero : = FALSE end; 3/2/2021 Computacion - Fac. Ingeniería 19

Características de las funciones n. Las funciones reciben información a través de parámetros y

Características de las funciones n. Las funciones reciben información a través de parámetros y solo devuelve un valor simple. sus n. Si bien los parámetros tienen la misma características que los procedimientos, se recomienda usar sólo el pasaje de parámetros por valor. 3/2/2021 Computacion - Fac. Ingeniería 20

Características de las funciones n. Si alguno de los parámetros fuera pasado por variable,

Características de las funciones n. Si alguno de los parámetros fuera pasado por variable, sería otra forma de intercambiar información. n. El llamado a la función no genera una sentencia. Se debe hacer como parte de una expresión, es decir, debe figurar a la derecha del signo de asignación, en sentencias write y en comparaciones. 3/2/2021 Computacion - Fac. Ingeniería 21

Ejemplos 1. Escribir una función que sume los enteros entre 1 y un valor

Ejemplos 1. Escribir una función que sume los enteros entre 1 y un valor límite. 2. 3. Calcular el Máximo Común Divisor entre dos números enteros positivos Números combinatorios 3/2/2021 Computacion - Fac. Ingeniería 22

Program func 3; Var N 1, n 2, res 1, res 2: integer; Function

Program func 3; Var N 1, n 2, res 1, res 2: integer; Function suma(limite: integer): integer; Var Numero, acumula: integer; Begin Acumula: =0; For numero: =1 to limite do Acumula: =acumula+numero; Suma: =acumula End; Begin Readln(n 1, n 2); Res 1: =suma(n 1); Res 2: =suma(n 2) div 4+res 1; End.

program func 2; var x, y, r: integer; function mcd(a, b: integer): integer; begin

program func 2; var x, y, r: integer; function mcd(a, b: integer): integer; begin while a<>b do begin{P. P} begin writeln('Ingrese dos if a>b then numeros'); a: =a-b readln(x, y); else r: =mcd(x, y); b: =b-a; writeln('El mcd es end; : ', r); mcd: =a; end; {Fin de la función}

Ejemplo del numero combinatorio con proced. program combinaciones; var m, n, m. Cn :

Ejemplo del numero combinatorio con proced. program combinaciones; var m, n, m. Cn : integer; mf, nf, mnf : longint; procedure factorial(x: integer; var xf: longint); var i : integer; begin xf : = 1; for i: =1 to x do xf : = xf*i end; 3/2/2021 Computacion - Fac. Ingeniería 25

Ejemplo del numero combinatorio con proced. begin write(‘Ingrese m : '); readln(m); write(‘Ingrese n

Ejemplo del numero combinatorio con proced. begin write(‘Ingrese m : '); readln(m); write(‘Ingrese n : '); readln(n); factorial(m, fm); factorial(n, fn); factorial(m-n, mnf); m. Cn : = fm div fn div mnf; writeln(m, 'C', n, ' = ', m. Cn) end. 3/2/2021 Computacion - Fac. Ingeniería 26

Ejemplo del numero combinatorio con funciones program combinatoria; var m, n: integer; m. Cn:

Ejemplo del numero combinatorio con funciones program combinatoria; var m, n: integer; m. Cn: longint; function factorial( x : integer ): longint; var i, xf : integer; begin xf : = 1; for i: =1 to x do xf : = xf*i; factorial: =xf end; 3/2/2021 Computacion - Fac. Ingeniería 27

Ejemplo del numero combinatorio con funciones Begin write(‘Ingrese m : '); readln(m); write(‘Ingrese n

Ejemplo del numero combinatorio con funciones Begin write(‘Ingrese m : '); readln(m); write(‘Ingrese n : '); readln(n); m. Cn: = factorial(m) div factorial(n) div factorial(m-n); writeln(m, 'C', n, ' = ', m. Cn) end. 3/2/2021 Computacion - Fac. Ingeniería 28

Procedimientos versus funciones ØTanto los procedimientos como las funciones proporcionan modularidad a los programas.

Procedimientos versus funciones ØTanto los procedimientos como las funciones proporcionan modularidad a los programas. Ambos son bloques de código independientes y ambos pueden aceptar datos a través de parámetros. ØUna de las diferencias la encontramos en la forma que devuelven los valores: la función no devuelve resultados en uno o varios de sus parámetros (eventualmente no devuelve datos) como los procedimientos, sino que devuelve un valor simple a través de su propio nombre. 3/2/2021 Computacion - Fac. Ingeniería 29

Procedimientos versus funciones ØOtra de las diferencias la encontramos en la forma que se

Procedimientos versus funciones ØOtra de las diferencias la encontramos en la forma que se invocan: una llamada a un procedimiento crea una sentencia propia mientras una llamada a una función debe ser parte de una expresión. 3/2/2021 Computacion - Fac. Ingeniería 30

Ejemplo n n Verificar si cada fila de una matriz está ordenada en forma

Ejemplo n n Verificar si cada fila de una matriz está ordenada en forma ascendente Se presentan los subprogramas por separado y luego se unen todos en un programa. 3/2/2021 Computacion - Fac. Ingeniería 31

function esta. Ordenado. A(v: vector; n: integer): boolean; Var i: integer; begin i: =

function esta. Ordenado. A(v: vector; n: integer): boolean; Var i: integer; begin i: = 1; while(v[i] <= v[i+1]) and (i < n) do i: = i + 1; if (i = n ) then esta. Ordenado. A: = true else esta. Ordenado. A: = false End; 3/2/2021 Computacion - Fac. Ingeniería 32

procedure copia. Fila. En. Vector(fila: integer; col: integer; var A: matriz; var v: vector);

procedure copia. Fila. En. Vector(fila: integer; col: integer; var A: matriz; var v: vector); Var j: integer; Begin for j: =1 to col do v[j]: =A[fila, j] End; 3/2/2021 Computacion - Fac. Ingeniería 33

function filas. Estan. Orden(A: matriz; m, n: integer): boolean; var orden: boolean; k, j:

function filas. Estan. Orden(A: matriz; m, n: integer): boolean; var orden: boolean; k, j: integer; v: vector; begin orden: = true; k: = 0; while (orden) and (k < m) do begin k: = k + 1; copia. Fila. En. Vector(k, n, A, v); IF NOT(esta. Ordenado. A(v, n)) THEN orden: =false end; filas. Estan. Orden: = orden end; 3/2/2021 Computacion - Fac. Ingeniería 34

Programa completo 3/2/2021 Computacion - Fac. Ingeniería 35

Programa completo 3/2/2021 Computacion - Fac. Ingeniería 35

program ordenado; Type Vector =array [1. . 30] of real; Matriz=array[1. . 30, 1.

program ordenado; Type Vector =array [1. . 30] of real; Matriz=array[1. . 30, 1. . 30] of real; Var mat: matriz; fil, col: integer; Procedure leer(var mat: matriz; var fil, col: integer); var i, j: integer; Begin writeln('Ingrese la cantidad de filas y de columnas'); readln(fil, col); for i: =1 to fil do for j: =1 to col do begin writeln('Ingrese el elemento ', i, ' ', j); readln(mat[i, j]); end; End; 3/2/2021 Computacion - Fac. Ingeniería 36

function esta. Ordenado. A(v: vector; n: integer): boolean; Var i: integer; begin i: =

function esta. Ordenado. A(v: vector; n: integer): boolean; Var i: integer; begin i: = 1; while(v[i] <= v[i+1]) and (i < n) do i: = i + 1; if (i = n ) then esta. Ordenado. A: = true else esta. Ordenado. A: = false End; procedure copia. Fila. En. Vector(fila: integer; col: integer; var A: matriz; var v: vector); Var j: integer; Begin for j: =1 to col do v[j]: =A[fila, j] End; 3/2/2021 Computacion - Fac. Ingeniería 37

function filas. Estan. Orden(A: matriz; m, n: integer): boolean; var orden: boolean; k, j:

function filas. Estan. Orden(A: matriz; m, n: integer): boolean; var orden: boolean; k, j: integer; v: vector; begin orden: = true; k: = 0; while (orden) and (k < m) do begin k: = k + 1; copia. Fila. En. Vector(k, n, A, v); IF NOT(esta. Ordenado. A(v, n)) THEN orden: =false end; filas. Estan. Orden: = orden end; BEGIN leer(mat, fil, col); IF filas. Estan. Orden(mat, fil, col) THEN writeln('Todas las filas est n ordenadas') ELSE writeln('No todas las filas est n ordenadas'); readln END. 3/2/2021 Computacion - Fac. Ingeniería 38