16
Programación I - 2011 Programación I - 2011 Arreglos

Programación I - 2011

  • Upload
    norton

  • View
    46

  • Download
    0

Embed Size (px)

DESCRIPTION

Programación I - 2011. Arreglos. Arreglo (Array). Es una colección ordenada e indexada de elementos. Ejemplo. A. 1 2 3 4 5 6 7 8 9 10. Indices. - PowerPoint PPT Presentation

Citation preview

Page 1: Programación I -  2011

Programación I - 2011Programación I - 2011

Arreglos

Page 2: Programación I -  2011

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”.

34 123 99 454 222 98 34 12 1 66

Indices 1 2 3 4 5 6 7 8 9 10

A

Es una colección ordenada e indexada de elementos.

Ejemplo

Arreglo (Array)Arreglo (Array)

Page 3: Programación I -  2011

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”.

IntegerCharenumerativo

type vector = array [Rango] of tipo_de_dato;

Integer Real Char BooleanStringRegistroArray

DeclaraciónDeclaración

Page 4: Programación I -  2011

  

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 valoresAsignació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] );

Page 5: Programación I -  2011

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: 15 ? ? ? ? ? ? ? ? ?

1 2 3 4 5 6 7 8 9 10

V

Dimensión física: 8

Dimensión lógica: 35 34 80 ? ? ? ? ?

1 2 3 4 5 6 7 8

V

Dimensión Física y LógicaDimensión Física y Lógica

Page 6: Programación I -  2011

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 ejemploEnunciado de ejemplo

Page 7: Programación I -  2011

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 propuestaSolución propuesta

Si no sabemos la cantidad de elementos que contendrá un arreglo siempre trabajaremos con su dimensión lógica

Page 8: Programación I -  2011

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;end;

Es responsabilidad del programador mantener actualizado el valor de la dimensión lógica

Page 9: Programación I -  2011

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

Page 10: Programación I -  2011

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 ejemploEnunciado de ejemplo

Page 11: Programación I -  2011

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 propuestaSolució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

Page 12: Programación I -  2011

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;end;

Recordar: Siempre que cargamos los datos de un registro usamos un módulo para hacerlo.

Page 13: Programación I -  2011

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.

Page 14: Programación I -  2011

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 ¨.¨

Page 15: Programación I -  2011

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;end;

function esPar (a: integer ): Boolean;begin esPar := (a mod 2 = 0);end;

Page 16: Programación I -  2011

¿Preguntas?¿Preguntas?