Вы находитесь на странице: 1из 36

ARREGLOS

Teora Alejandro Hctor Gonzlez

DIMENSIN FSICA Y LGICA DEL VECTOR

Estructura de datos-ARREGLO Ejercicio


Supongamos que se quiere cargar una estructura que permita almacenar nmeros enteros hasta leer el nmero 99. Al finalizar la carga se pide calcular el mnimo numero ledo. Se sabe que a lo sumo son 10000 nmeros.
Dimensin fsica Dimensin lgica

Estructura de datos-ARREGLO Dim


Fsica
Program tres; Const Dim= 10000 type numeros = array [1..Dim] of integer; var nume: numeros;
Dimensin Hasta cuando cargofsica el vector? Dimensin lgica

Estructura de datos-ARREGLO Dim


Fsica-Lgica
Program cuatro; Const DIMF=10000 Type rango=0..DIMF; numeros = array [1..DIMF] of integer; Var nume: numeros; dimL: rango; Begin cargarNumeros(nume,dimL); write(el menor numero leido es, minimo(nume,dimL)); End.

Estructura de datos-ARREGLO Dim


Fsica-Lgica
Procedure cargarNumeros (var n:numeros; var tam:rango); var num:integer; begin Qu pasa si el nmero tam:=0; 99 se lee despus de read(num); while (num <> 99) do los 10000 nmeros? begin n[tam+1]:= num; tam:= tam + 1; La solucin no es correcta, pues podramos estar read(num); accediendo a posiciones no vlidas end; end;

Estructura de datos-ARREGLO Dim


Fsica-Lgica
Procedure cargarNumeros (var n:numeros; var tam:rango); var num:integer; begin tam:=0; read(num); while (num <> 99) and (tam < DIMF) do begin n[tam+1]:= num; tam:= tam + 1; SIEMPRE SE DEBE read(num); CONTROLAR NO end; INGRESAR MAS NUMEROS end;

QUE LA DIM. FISICA

Estructura de datos-ARREGLO Dim


Fsica-Lgica
function minimo (n:numeros, DimL:rango):integer; var i: rango; min:integer; Begin min:=9999; for i:= 1 to DimL do if (n[i]< min) then min:= n[i]; minimo:= min; end;

OPERACIONES: Agregar Un Elemento Nuevo En El Vector

Arreglos: Agregar al final (append)


Aspectos a considerar: dimF : dimensin del vector (tamao especificado en la declaracin del vector) dimL : cantidad de elementos en el vector. Luego de la operacin la cantidad de elementos es dimL+1, siempre que haya espacio ( dimL< dim).

espacio suficiente: debe verificarse que dimL

Arreglos: Agregar al final


{Este programa agrega varios elementos invocando al procedure Agregar}

Program AgregarElementos; const dimF = 10; Type rango= 0..dimF; vector = array [1..dimF] of integer; Var v : vector; elem: integer; sepuede: boolean; dimL, i: rango;

Arreglos: Agregar al final


Begin {prog. ppal} read (elem); sepuede:=true; dimL:=0; while (elem <> 0) and ( sepuede) do begin AGREGAR ( v, dimL, elem, sepuede); if sepuede then read (elem); end; write ('El vector resultante es: '); readln; For i := 1 to dimL do write (v[i], ' '); End.

Podemos hacer un mdulo para ms legibilidad

Arreglos: Agregar al final


Procedure AGREGAR (var v: vector; var dimL:rango; elemento: integer; var exito : boolean); Begin {verificar espacio suficiente} If (dimL < DimF) then begin v[dimL + 1]:= elemento; dimL := dimL + 1; {actualizar cantidad de elementos} end else exito := false; End;

OPERACIONES: INSERTAR Un Elemento Nuevo En El Vector

Arreglos: Insertar
Supongamos que deseamos insertar el VALOR 6 en la POSICIN 1 del vector

2 1

5 2

3 3 4 ....... 10

Dim Logica La posicin donde debo insertar debe ser VLIDA

Arreglos: Insertar
Program insertarelementos; Const dimF = 1000 Type rango= 0..dimF; vector = array [1..dimF] of integer; var v: vector; elem : integer; pos , DimL: rango; sepuede : boolean;
begin cargar-vector (v, DimL); sepuede := true; readln (elem); readln(pos); Validar(pos, sepuede); while (elem < > 0) and (sepuede) do begin INSERTAR ( v, DimL, elem, pos, sepuede); if (sepuede) then begin read (elem); readln(pos); Validar (pos,sepuede); end; end.

Arreglos: Insertar
Procedure cargar-vector ( var num: vector; var DimL: integer ); var elem : integer; Begin DimL := 0; read (elem); while (elem < > 9999) and (DimL< dimF ) do begin DimL := DimL + 1; num [ DimL ] := elem; read (elem) end; End.

Arreglos: Insertar
Procedure INSERTAR (var num:vector; var dimL:rango; elem:integer; pos:rango; var exito:boolean ); var i : rango; Begin if (dimL < DimF ) then begin exito := true; i := DimL; While ( i >= pos ) do begin num [ i + 1 ] := num [ i ] ; i := i - 1 ; end; num [pos] := elemento; DimL := DimL + 1; {Incremento dim logica} end else exito := false;

OPERACIONES: BORRAR Un Elemento Existente En El Vector

Arreglos: Borrar
Aspectos a considerar:
DimL : cantidad de elementos en el vector. Luego de la operacin la cantidad de elementos disminuye en 1. Pos : posicin del elemento del vector que se quiere borrar. Debe verificarse que pos<= DimL
{Consideremos un programa que borra varios elementos en posiciones que se ingresan como dato, invocando al procedure Borrar}

Arreglos: Borrar
begin cargarvector (v, DimL); sepuede := true; read (pos); while ( pos< > 0) do begin BORRAR ( v, DimL, elem, pos, sepuede); if sepuede then writeln (El elemento borrado es: , elem); read (p); end; End.

program borrarelementos; const dimF = 1000; type rango= 0..dimF; vector = array [1..dimF] of integer; var v: vector; elem : integer; pos , DimL: rango; sepuede : boolean;

Arreglos: Borrar
Procedure BORRAR (var num: arreglo; var DimL: integer; var elemento: integer; pos: rango; var exito: boolean ); Var j: rango; Begin if (pos <= DimL) and (pos >=1) then begin {verifica valor de pos, valida ese valor} elemento := num [pos] ; {Guarda el valor del elemento que se
borra }

for j:= pos to DimL-1 do num [ j ] := num [ j + 1 ] ; DimL := DimL - 1 ; end else exito := false;

Estructura de datos EJERCICIOS


1. Se lee una secuencia de nmeros comprendidos en el rango de 5 a 60. La secuencia termina cuando se lee el nmero 24. Informar cuantas veces apareci cada nmero.
2. Se lee una secuencia de letras minsculas que termina en punto. Informar la cantidad de veces que aparece cada letra. 3. Se lee una sucesin de datos de a lo sumo 100 alumnos. De cada alumno se conoce nombre y nota de alumnos. Informar los nombres de aquellos alumnos que superen el promedio del grupo. La lectura termina con el alumno de nombre ZZZ.

Estructura de datos EJERCICIO 1


Program uno; type rango = 5..60; cantidades = array [rango] of integer; var num: cantidades;

Estructura de datos-ARREGLO
EJERCICIO 1
Begin
inicializar (num); contabilizar (num); informar (num); End.

Estructura de datos-ARREGLO
EJERCICIO 1
Procedure inicializar (var a: cantidades); Begin for i:= 5 to 60 do a[i]:= 0; End;

Estructura de datos-ARREGLO
EJERCICIO 1
Procedure contabilizar (var a: cantidades); Var valor:rango; Begin read (valor);
while (valor<>24) do begin a[valor]:= a[valor] + 1; read (valor); end; End;

Estructura de datos-ARREGLO
EJERCICIO 2
1. Se lee una secuencia de nmeros comprendidos en el rango de 5 a 60. La secuencia termina cuando se lee el nmero 24. Informar cuantas veces apareci cada nmero.
2. Se lee una secuencia de letras minsculas que termina en /. Informar la cantidad de veces que aparece cada letra. 3. Se lee una sucesin de datos de a lo sumo 100 alumnos. De cada alumno se conoce nombre y nota de alumnos. Informar los nombres de aquellos alumnos que superen el promedio del grupo. La lectura termina con el alumno de nombre ZZZ.

Estructura de datos-ARREGLO
EJERCICIO 2
Program dos;
type cantidades = array [a..z] of integer; var num: cantidades; Begin inicializar(num); cargar (num); informar(num); End.

Estructura de datos-ARREGLO
EJERCICIO 2
Procedure inicializar (var a: cantidades); Var i:char; Begin for i:= a to z do a[i]:= 0; End;

Estructura de datos-ARREGLO
EJERCICIO 2
Procedure contabilizar (var a: cantidades);
Var valor: char; Begin read (valor); while (valor <> /) do begin a[valor]:= a[valor] + 1; read (valor); end; End;

Estructura de datos-ARREGLO
EJERCICIO 2

Procedure informar (a: cantidades); Var i:char; Begin for i:= a to z do write (a[i]); End;

Estructura de datos-ARREGLO
EJERCICIO 3
1. Se lee una secuencia de nmeros comprendidos en el rango de 5 a 60. La secuencia termina cuando se lee el nmero 24. Informar cuantas veces apareci cada nmero.
2. Se lee una secuencia de letras minsculas que termina en punto. Informar la cantidad de veces que aparece cada letra. 3. Se lee una sucesin de datos de a lo sumo 100 alumnos. De cada alumno se conoce nombre y nota. Informar los nombres de aquellos alumnos que superen el promedio del grupo. La lectura termina con el alumno de nombre ZZZ.

Estructura de datos-ARREGLO
EJERCICIO 3
Program Ej3; Const numdatos = 100; type rango=0..numdatos; str20 = string [20]; alumno = record nombre : str20; nota : real; end; ListaAlum = array [1.. numdatos] of alumnos; var datos: ListaAlum; dimL: rango; suma,promedio : Real;

Estructura de datos-ARREGLO
EJERCICIO 3
begin {Principal} Leo_y_Sumo_Datos (datos , suma, dimL);
promedio := suma / dimL; for i := 1 to dimL do if (datos[i].nota > promedio) then WriteLn (datos[i].nombre, , datos[i].nota ) end;

Estructura de datos-ARREGLO
EJERCICIO 3
procedure Leo_y_Sumo_Datos (var dat: ListaAlum;var sum:Real;var DimL: rango); Var alu: alumno; begin sum := 0; dimL:= 0; leerAlumno (alu); while (alu.nombre <> zzz) and (dimL < numdatos)do begin dat[dimL+1]:= alu; sum := sum + dat[dimL+1].nota; dimL:= dimL +1; leerAlumno (alu); end

Вам также может понравиться