La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación I - 2011 Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)

Presentaciones similares


Presentación del tema: "Programación I - 2011 Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)"— Transcripción de la presentación:

1 Programación I - 2011 Arreglos

2 Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos) por lo tanto se denomina estructura de datos “homogénea”. 3412399454222983412166 Indices 1 2 3 4 5 6 7 8 9 10 A Es una colección ordenada e indexada de elementos. Ejemplo Arreglo (Array)

3 var v: vector A los elementos se los accede directamente, indicando simplemente su posición, por eso es una “estructura de datos indexada” y de “acceso directo”. Integer Char enumerativo type vector = array [Rango] of tipo_de_dato; Integer Real Char Boolean String Registro Array Declaración

4 La memoria ocupada durante la ejecución del programa es fija, por eso se dice que es una “estructura de datos estática”. Un arreglo con un sólo índice se denomina “vector”. Con dos índices, se lo denomina “matriz”. v [1] := 5;  En la posición 1 del arreglo v se almacena el número 5. 5 1 2 3 4 5 6 7 8 9 10 V Asignación de valores Read( v[1] );  Se lee un dato desde teclado y se almacena en la posición 1. v [1] := 5;Read( v[1] );

5 Declaración type vector = array [1..5] of integer;  Dimensión Física 5 var v: vector ; dimLog: integer ;  Dimensión Lógica begin DimLog:= 0;  Inicialización de la Dimensión Lógica en 0, pues aún no posee elementos. … end. Dimensión física: 10 Dimensión lógica: 1 5????????? 1 2 3 4 5 6 7 8 9 10 V Dimensión física: 8 Dimensión lógica: 3 53480????? 1 2 3 4 5 6 7 8 V Dimensión Física y Lógica

6 Realizar un programa que lea números hasta que llegue el número 0 (como máximo 100). Una vez realizada la carga: Informar las posiciones en que se encuentran los números múltiplos de 3. Informar la cantidad de números pares. Enunciado de ejemplo

7 program Arreglos; type vectorNumeros = array [1..100] of integer; var v : vectorNumeros; dimLog: integer; begin {PROGRAMA PRINCIPAL} llenarVector (v, dimLog); realizarInforme(v, dimLog); end. Solución propuesta Si no sabemos la cantidad de elementos que contendrá un arreglo siempre trabajaremos con su dimensión lógica

8 procedure llenarVector ( var v: vectorNumeros; var dimLog: integer); var num: integer; begin dimLog := 0; write(‘Ingrese un Número: '); readln(num); while (num <> 0) and (dimLog < 100) do begin dimLog := dimLog + 1; v[dimLog]:= num; write(‘Ingrese un número: '); readln(num); end; Es responsabilidad del programador mantener actualizado el valor de la dimensión lógica

9 function esPar (a: integer ): Boolean; begin esPar := (a mod 2 = 0); end; procedure realizarInforme (v: vectorNumeros; dimLog: integer); var i, cantPar: integer; begin cantPar:= 0; for i:= 1 to dimlog do begin if (v[i] mod 3 = 0 ) then writeln('En la posición ', i, ' hay un numero múltiplo de 3'); if (esPar(v[i])) then cantPar:= cantPar + 1; end; writeln ('La cantidad de números pares es: ', cantPar); end; Usamos la dimensión lógica para recorrer el vector solo hasta la posición que contiene elementos

10 Se lee la información del personal administrativo de la Facultad de Informática y se sabe que son exactamente 50 personas. De cada persona se lee la siguiente información: Apellido, Nombre, DNI y Fecha de Nacimiento. Una vez cargado todo el personal informar: Cantidad de personas que posean DNI con mayor cantidad de dígitos pares que impares. Apellido de aquellas personas que cumplen años en el mes de enero. Enunciado de ejemplo

11 program ejercicio2; const dim = 50; type fecha = record dia : 1..31; mes : 1..12; anio: 1900..2005; end; persona = record apellido : string[20]; nombre : string[20]; DNI : integer; fecha_nac: fecha; end; personas = array [1..dim] of persona; Var vp: personas; begin {PROGRAMA PRINCIPAL} llenarVector (vp); realizarInforme(vp); end. Solución propuesta El uso de la constante nos ayuda en el mantenimiento La fecha de nacimiento debe ser un registro pues el enunciado nos pide informar datos referentes solo al mes

12 procedure llenarVector (var vp: personas); var p: persona; i: integer; begin for i := 1 to dim do begin writeln('----Ingrese los datos de una persona----'); leerPersona(p); vp[i] := p; end; Recordar: Siempre que cargamos los datos de un registro usamos un módulo para hacerlo.

13 procedure leerPersona (var p: persona); begin write(‘Ingrese Apellido: '); readln(p.apellido); write(‘Ingrese Nombre: '); readln(p.nombre); write(‘Ingrese D.N.I.: '); readln(p.DNI); writeln(‘Ingrese fecha de nacimiento'); leerFecha(p.fecha_nac); end; procedure leerFecha (var f:fecha); begin write(‘Ingrese el día: '); readln(f.dia); write(‘Ingrese el mes: '); readln(f.mes); write(‘Ingrese el año: '); readln(f.anio); end; Usamos un proceso aparte para cargar los datos que componen una fecha para que sea mas claro.

14 procedure realizarInforme (vp: personas); var i, cant_par, cant_impar, cantPersonas: integer; begin cantPersonas:= 0; for i:= 1 to dim do begin desglosarNumero (vp[i].DNI, cant_par, cant_impar); if (cant_par > cant_impar) then cantPersonas := cantPersonas + 1; if (vp[i].fecha_nac.mes = 1 ) then writeln('La persona ', vp[i].apellido, ' cumple años en enero'); end; writeln ('La cantidad de personas es: ', cantPersonas); end; Accedemos a los datos de una persona campo a campo usando el operador ¨.¨

15 procedure desglosarNumero (n: integer; var cp: integer; var ci: integer); var dig: integer; begin cp := 0; ci := 0; while (n <> 0) do begin dig := n mod 10; if (esPar(dig)) then cp := cp + 1 else ci := ci + 1; n := n div 10; end; function esPar (a: integer ): Boolean; begin esPar := (a mod 2 = 0); end;

16 ¿Preguntas?


Descargar ppt "Programación I - 2011 Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)"

Presentaciones similares


Anuncios Google