Download - Anderson martinez arreglos
República Bolivariana de Venezuela
I.U.P. “Santiago Mariño”
Extensión Barinas
Ingeniería de Sistemas
Lenguaje de Programación
ARREGLOS
Realizado por:
TSU. Anderson Martínez
C.I: 20.774.148
Ciudad Bolivar, Marzo de 2016
Arreglos (array)
• Un arreglo está formado por un número fijo de
elementos contiguos de un mismo tipo. Al tipo se lellama tipo base del arreglo. Los datos individuales se
llaman elementos del arreglo.
• Para definir un tipo estructurado arreglo, se debe
especificar el tipo base y el número de elementos.
Un array se caracteriza por :•• Almacenar
continua.los elementos del array en posiciones de memoria
• Tener un único nombre de variable que representa a todos loselementos, y éstos a su vez se diferencian por un índice o subíndice.
Acceso directo o aleatorio a los elementos individuales del array.•
Arreglos (array)
dominio = I codominio = C
• En términos matemáticos abstractos la transformación (mapeo) puedeanotarse:
A:I C
En Pascal puede anotarse, la definición del nuevo tipo A según:
type A = array [I] of C;
I se denomina tipo del índice, y debe ser un tipo ordinal.
•
•
• C es el tipo del contenido,tipo base. Importa insistir
igual tipo.
o de lasen que
componentes. También suele llamarsetodas las componentes deben ser de
• El tipo estructurado A queda completamente definido, si están
previamente definidos los tipos I y C.
Clasificación de los Arreglos
• Los arrays se clasifican en:
• Unidimensionales
(vectores o listas)
• Multidimensionales
( tablas o matrices)
Arreglos Unidimensionales
• Un array de una dimensión – vector o lista – es untipo de datos estructurados compuesto de un número
de elementos finito, tamaño fijo y elementos
homogéneos.
Finitos, indica que hay un último elemento, tamaño•
fijo significa que el tamaño del array debe ser
conocido en tiempo de compilación, homogéneo
significa que todos los elementos son del mismo tipo.
• Los elementos del array se almacenan en posicionescontiguas de memoria, a cada una de las cuales se
puede acceder directamente.
Arreglos Unidimensionales
Elementos
Mi_vector
Nombre dela variable Posición : 1
Contenido : Mi_vector[1] = 9
9 5 6 2 4 8 3
Ejemplos Arreglos Unidimensionales
• Resolvamos este primer ejemplo: (ejemplo 1)
en un vector, sumarlos• Cargar 10 elementos
y mostrar el resultado por pantalla.
Pasos para resolver este problema:•
•
•
•
Leer un vector de 10 elementos
Sumar los elementos
Mostrar el resultado de la suma por pantalla
Ejemplos Arreglos Unidimensionales
Program Ejemplo1; {Version 1}typesumandos = array[1..10] of integer;varsuma, i : integer;vec_sumandos : sumandos;beginsuma := 0;for i:= 1 to 10 do
read(vec_sumandos[i] )for i := 1 to 10 do
suma:= suma +vec_sumandos[i];writeln (´La suma de los números es´, suma);end.
Declaración del tipo arreglo
Declaración de la variable arreglo
Lectura de los elementos del arreglo
Suma de los elementos
Ejemplos Arreglos Unidimensionales
Program Ejemplo1; {Version 2}
type
sumandos = array[1..10] of integer;
var
suma, i : integer;
vec_sumandos : sumandos;
begin
suma := 0;
for i:= 1 to 10 do begin
read(vec_sumandos[i] )
suma:= suma +vec_sumandos[i];
end;
writeln (´La suma de los números es´, suma);
end.
Declaración de Vectores
• Los arreglos son estructuras de datos, por lo tanto las mismas
deben ser declaradas. Esta operación se realiza en la sección
“Type” de un programa en Pascal. (como puede verse en el
ejemplo1)
Formato
type
nombre_del_tipo = array[tipo_subindice * ] of tipo;
Debe ser de tipo ordinal: boolean, char, enumerado o subrango
Luego de la declaración del tipo, se declara la variable.
Formato
var
nombre_variable: nombre_del_tipo;
•
•
•
•
Ejemplo Declaraciones
Ej1:
type
Valores = array[ -10..10 ] of real;
var
precios: valores;
Ej2:
const
Max= 500;type
T_Texto = array[ 1..Max ] of char;
var
Texto: T_Texto;
Ejemplo Declaraciones(cont.)
Array para almacenar las
Suponiendo lo siguiente:• Numero de cursos 5
• Grupos por curso 3
• Número de evaluaciones 3
• Número de asignaturas 6
• Número de alumnos por curso 20Const
Numcurso=5;
Numasig=6;
Numalum=20;
Type
Cursos=1.. numcurso;
Grupos='A'..'C';
Eval=(primera,segunda,tercera);
Asign=1.. numasin;
Alum=1. .numalum;
notas correspondientes a todos los alumnos de un colegio.
Tiponotas=array[cursos,grupos,eval,asign,alum] of real;
Var
Notas:tiponotas;
Curso:cursos;
Grupo:grupos;
Evaluacion:eval;
Materia:asign;
Alumno:alum;
Con los elementos de un array se puede realizar las mismas operaciones que el tipo base al que
pertenecen.
Vectores – Manejo de Índices
• Asignación de valores
Texto[3] := ´a´;
Precios[0] := 23.50;
Recuerden, los índices de un arreglo pueden ser: entero,
lógico, carácter, enumerado o subrango.
Vectores – Operaciones
• Con la siguiente declaración:type
T_Notas = array [1..30] of integer;
var
Notas: T_Notas;
Lectura de un vector
for i:= 1 to 30 do
read(Notas[i] )
•
• Escritura de un vectorfor i:= 1 to 30 do
writeln(Notas[i] )
Vectores – Operaciones
• Con la siguiente declaración:type
T_Notas = array [1..30] of integer;
var
Notas, Aux_Notas: T_Notas;
Copia de vectoresfor i:= 1 to 30 do
Aux_Notas[i]:= Notas[i];
•
Vectores – Ejemplos Resueltos
Program Ej2;
const
max = 50;
type
t_numeros = array[1.. max] of integer;
var
suma, i : integer;
promedio: real;
numeros : t_numeros;
begin
suma := 0;
for i:= 1 to max do
begin
read(numeros[i] )
suma:= su12a +numeros[i];
end;
Promedio:= suma/max;
writeln (´El promedio es ´,Promedio´);
for i := 1 to 50 do
if numeros[i] > promedio
then writeln (´El número´, numeros[i], ´es mayor al promedio´);
end.
Ej2.- Dados 50 números
enteros, obtener el promediode ellos. Mostrar por pantalla
dichonúmeros
promedio y losqueingresados
sean mayores que el mismo.
Vectores – Ejemplos Resueltos
Program Ej3;
const
max = 100;
type
t_numeros = array[1.. max] of integer;
var
suma, i, n : integer;
promedio: real;
numeros : t_numeros;
begin
suma := 0;
write (´Ingrese la cantidad de números a sumar. (Como máximo, 100 números´);
readln(n);
for i:= 1 to n do
begin
read(numeros[i] )
suma:= suma +numeros[i];
end;
writeln (´La suma es ,́suma´);
for i := 1 to n do
writeln (´El sumando ,́ i, ´es ,́ numeros[i]);
end.
Ej3.- Dados n números,
obtener e imprimir la sumade todos ellos. A continuación
mostrar por pantallasumandos.
todos los
Método de Ordenamiento
• Los métodos de ordenamiento son muy útiles porque permiten buscarvalores, tanto por valor y por su posición, de una manera eficiente.
Antes de estudiar algunos de los métodos de ordenamiento es
necesario definir el problema y el entorno en el cual se desea trabajar.
• Para realizar un ordenamiento se necesita un conjunto de valores
ordenables, es decir, que exista un criterio de ordenamiento, por
ejemplo las letras se basan en el alfabeto, los números en la cantidad
representada. Además, se trataran solamente métodos de
ordenamiento en los que la instrucción base es la comparación entredos valores y que se obtiene el ordenamiento por medio de intercambio
de valores. Estas consideraciones son la base de los métodos.
• Son muchos los métodos de ordenamiento, sin embargo, se haráénfasis en los siguientes métodos: Ordenamiento por selección, por
inserción, burbuja.
Método de Ordenamiento
Para tal efecto asuma las siguientes declaraciones: y las siguientes asignaciones:
v[ 2 ] := 25;
v[ 5 ] := 14;
v[ 1 ] := 6;
v[ 3 ] := 7;
v[ 4 ] := 2;
N := 5;
Type
vector = array [ 1 .. 25 ] of integer;
Var
v : vector;
i,j,N,aux,p : integer
Ordenamiento por Burbuja
Ref: Luis Joyanes Aguilar. Programación en Turbo Pascal Ver 5.5, 6.0, 7.0,McGraw-Hill, 2ª. Edición, 1993, pp. 412-417.
Este método es clásico y muy sencillo aunque poco eficiente. La ordenaciónpor burbuja [ bubble sort ] se basa en:
1. La comparación de elementos adyacentes del vector e
2. Intercambio de sus valores si estos están desordenados
De este modo se dice que los valores más pequeños burbujean hacia la parte
superior de la lista [hacia elgrandes se hunden hacia el
ascendente.
primer elemento], mientras que los valores másfondo de la lista en el caso de un ordenamiento
La técnica de ordenación de la lista por burbuja compara elementos
consecutivos de la lista de modo que si en una pasada no ocurrieranintercambios, significaría que la lista esta ordenada.
Ordenamiento por Burbuja
{ Ordenamiento por burbuja mejorado en forma ascendente }
desordenado := true;
while desordenado do
begin
desordenado := false;
for i:= 1 to n - 1 do
if v[ i ] > v[ I + 1 ] then
begin
aux := v[ i ];
v[ i ] := v[ i + 1 ]; v[
i + 1] := aux;
desordenado := true;
end;
end;
End.
Pasada 1
10
5
8
Pasada 2
5
10
8
Pasada 3
5
8
10
Método de Ordenamiento (Cont.)
{ este programa lea n números enteros y/o reales y los ordena por el
ascendente.....compilado en en borland pascal para Windows versión 7.0}
Program burbujas;
uses wincrt; { utilizando la terminal de windows }
{ declaración de variables globales...}
var
n,i,codg_art:integer;
temp:real;
x:array [1..100] of real;
pausa:char;
{ procedimiento aplicando el método de burbuja }
procedure burbuja;
begin
for codg_art:=1 to n-1 do
for i:=codg_art+1 to n do
if x[i]<x[codg_art] then
begin { intercambiando los números...}
temp:=x[codg_art];
x[codg_art]:=x[i];
x[i]:=temp;
end;
end;
método de ordenación burbuja en forma
Método de Ordenamiento (Cont.)
Begin { programa principal}
writeln ('programa de ordenación de datos numéricos enteros y reales....');
writeln ('aplicando el método de burbuja....');
write ('cuantos registros introducira? ');
readln (n);
writeln;
for i:=1 to n do
begin
write ('x[',i:3,']=? ');
readln (x[i]);
end;
burbuja;
writeln;
writeln (' registros ordenados en forma ascendente');
pausa:=readkey;
end.
Arreglos Bidimensionales (Tablas)
• Es un conjunto
el cual el orden
también es en
de elementos, todos del mismo tipo (homogéneo), en
de los componentes es significativo y el acceso a ellos
forma directa por medio de un par de índices para
poder identificar a cada elemento del arreglo.
También se les llama Matriz o Tabla.
Los elementos se referencian con el formato:T [3,4] elemento de la fila 3 y columna 4.
Los arreglos bidimensionales se usan para representar datos que
pueden verse como una tabla con filas y columnas
•
•
•
Matriz
1 2 3 4 5
1
2
3 15.2
4
Declaración Arreglos Bidimensionales
• Al igual que en los arrays unidimensionales o vectores, se crean
con declaraciones type y varsubrango. Se deben indicar:
y deben ser de tipo ordinales o
•
•
•
El nombre del array
Tipo del array
Rango permitido
• Ejemplo:Type
Tabla = array [1..25,1..4] of real;
Var
Grados : Tabla;
• Para localizar o almacenar un valor en el array se deben
especificar dos posiciones opara la columna.
subíndices, uno para la fila y otro
Asignación Arreglos Bidimensionales
• Se considera que este arreglo tiene dos dimensiones (un
subíndice para cada dimensión) y necesita un valor para cada
subíndice, y poder identificar un elemento individual.
• En notación estándar, normalmente el primer subíndice se
refiere a la fila del arreglo, mientrasse refiere a la columna del arreglo.
que el segundo subíndice
Es decir, Matriz(I,J), es el
elementocolumna.
de Matriz que ocupa la I-ésima fila y la J-ésima
• Para tener acceso a un elemento de la matriz se tiene que
especificar primero el renglón después una coma y por último la
columna a la que se quiere tener acceso.Ejemplo:
Matriz [ 3, 2] : = 15.2;•
Lectura/Escritura Arreglos
Bidimensionales
• Si se deseara leer un solo elemento de un arreglo bidimensional debeespecificarse el renglón y la columna a que se refiere, por ejemplo, la
posición 3,2:
• Pero si el objetivo es, leer o escribir la matriz completa entonces al
igual que con los arreglos unidimensionalesiterativas.
Escriturar en una Matriz
For fila := 1 to 3 do
Begin
For Columna := 1 to 4 do
Write (A[Fila, Columna]:4);
End;
se deben usar estructuras
•
Pseudocódigo Pascal
Leer ( Ventas [ 3, 2] ) ReadLn ( Matriz [ 3, 2] ) ;
Escribir ( Ventas [ 3, 2] ) WriteLn ( Matriz [ 3, 2] ) ;
Ejemplos Matriz
Calcular el promedio de cada estudiante de una lista de veinticinco alumnos de una clase de informática con notas en
cuatro asignaturas.
Program Promedio;
Var
Notas
I,J
: Array [1..25,1..4] of real;
: Integer;
Suma,Prom : Real;
Begin
For I := 1 to 25 do
Begin
Write (`Notas del estudiante: ,́I:1);
Writeln (`En una misma línea digite todas las notas )́;
Suma := 0;
For J := 1 to 4 do
Begin
Read (Notas[I,J]);
Suma := Suma + Notas[I,J]
End;
Readln;
Prom := Suma/4;
Writeln (`La nota promedio del estudiante `,I:1,´ es `,Prom:1:1)
End
End.