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

Capitulo III

Arreglos Unidimensionales (Vectores)

Capitulo III
Arreglos Unidimensionales (Vectores)
Un arreglo (array) es un conjunto de datos del mismo tipo, los cuales ocupan
direcciones adyacentes en memoria cuando el programa se ejecuta,
permitiendo acceder a ellos en forma aleatoria. Es decir; que a cada
elemento se puede acceder mediante un subndice entero nico que lo
identifica.
Declaracin de un arreglo de una dimensin
-------------------------------------------------------------------------------------------------

Tipo
Datos=array[1..1000] de enteros
Variables
Lista: Datos
n, i : enteros
------------------------------------------------------------------------------------------------Ejemplo: declare un vector de longitud 20 y almacene notas.
Declara un array notas con 20 elementos enteros, cada uno de los cuales de
referencia por su subndice (notas [0], notas [1], notas [2] ...notas[19])

Evaluaciones=array[1..20] de enteros
Variables
notas: Evaluaciones
n, i : enteros
dode N para leer cantidad de elementos
i: contador de elementos

Algoritmos y Estructura de Datos

Notas [ 20]
[0] [1]

[ 2 ] [ 3 ] ........................................................ [ 18 ] [ 19 ]

ndice
12

11

09

15

.......

11

08

02

12

Elementos individuales del vector y todos del mismo tipo


Para recorrer sus elementos para lectura y/o escritura, se debe usar
estructuras de control, tales como:
1.-

desde i

0 hasta 19 hacer

2.-

mientras (i<20) hacer.

Inicializacin de un Arreglo
1.- Se puede inicializar un array con la declaracin:
int a[3]

{2,1,7}

int b[5]

{1,3,6} /*inicializa los tres primeros elementos a 1, 2 y 3, y

los dems cero*/


2.- Se puede omitir el tamao del array:
float lista[ ]

{ 1.0, 5.1, 10.4} //Declara un array de tres elementos

Funcin de acceso
Permite acceder a un elemento especfico (ndice)
Ejemplo: Notas [2]: indica que estamos apuntando al elemento en el ndice
2.
As, notas [2]

09

Aplicacin 1.- Disear un programa que permita almacenar en un vector


evaluaciones notas de n alumnos(n>0 y n<100). Luego mostrar la cantidad
de notas aprobadas y cantidad de notas desaprobadas.
Algoritmos y Estructura de Datos

Solucin
Programa

Pseudocdigo

Programa

DFD

Tipo
Evaluaciones=array[1..100]de enteros
Variables
Lista: Evaluaciones
n,i : enteros
Inicio
Imprimir(Ingrese tota notas = ),
leer(n)
Desde i

1 hasta n hacer

Inicio
Imprimir(lista[,i.]=); leer(Lista[i])
Fin
Desde i

1 hasta n hacer

Inicio
Si (Lista[i]>10) entonces
Inicio
ap
Fin
Sino

ap+1

inicio
desap
fin

desap+1

Imprimir(Total:Aprobados=,ap,Desaprobados = ,desap )
Fin
Implementacin en C++ 5.02
void main()

Algoritmos y Estructura de Datos

{ int Lista[100], tn,i,ap=0,desap=0;


gotoxy(10,4); cout<<"Ingrese total de Notas ="; cin>>tn;
for(i=1; i<=tn;i++)
{gotoxy(10,5+i);cout<<"Nota["<<i<<"]="; cin>>Lista[i];
}
for(i=1; i<=tn;i++)
{ if (Lista[i]>10)
{ap++;
}
else
{desap++;
}
}
gotoxy(10,15);cout<<" Total Aprobadas

= "<<ap;

gotoxy(10,17);cout<<" Total Desaprobadas = "<<desap;


getche();
}
Procedimientos para disear programas en DFD
1.- Ejecutar
2.- Como existe contadores, entonces inicializar
Aprobados: ap=0 y desaprobados: desap=0
3.- Enviar mensaje Ingrese total de notas
4.- Leer total de notas usando la variable:
tn
6.- Usar la estructura repetitiva para o
desde, que nos permita recorrer la lectura
de elemento por elemento en el vector.
Para l cual debe especificar el contador
desde inicio hasta fina y el incremento de 1 en 1.

Algoritmos y Estructura de Datos

7.- Iniciar la lectura de notas (en este diagrama no estn


validadas las notas) usando la variable vector Lista(i).
Recuerde que su rango es de 0..20 use la sentencia Si
o mientras .
8.- Proceso de lectura finalizado.
9.- Consultas: los datos almacenados en el
vector estn disponibles para hacer los
reportes que se requieran.
10.- Mostrar total de notas aprobadas y
desaprobadas: usar paso 6.
11.-

Mediante

estructura Condicional,

comparar cada elemento del vector si son mayores 10, contar aprobados y
guardar en el contador ap=ap+1. En otro caso Contar desaprobados y
guardar en el contador desap=desap+1.
12.- Hacer reporte usando objeto de paso 3.
Aplicacin 2.- Disear un programa que permita almacenar en un vector
evaluaciones edades de n empleados (n>0 y n<100). Luego mostrar las
edades ordenadas en forma ascendente
Solucin
Programa

Pseudocdigo

Programa

DFD

Tipo
Empleados= array[1..100] de enteros
Variables
Eda: Empleados
n, i,aux : enteros
Inicio
Imprimir(Ingrese total empelados=), leer(n)
desde i=1 hasta n hacer
Inicio
Imprimir(Edad[,i.]=); leer(Eda[i])
fin
Algoritmos y Estructura de Datos

desde i

hasta n-1 hacer

Desde j

i+1 hasta n hacer

Si (Eda[i]> Eda[j) entonces


Inicio
Aux
Eda[i] ,
Eda[i]
Eda[j],
Eda[j]
aux
Fin
desde i
1 hasta n hacer
inicio
Imprimir(Edades=,Eda[i]
fin
finImplementacin en C++ 502
#define linea"_________________";
void main()
{int Eda[100], te,i,j,temp;
gotoxy(15,5);cout<<"Ingrese
numero de empleados: ";cin>>te;
gotoxy(15,7); cout<<"#

Edad ";

gotoxy(10,8); cout<<linea;
for(i=1;i<=te;i++)
{gotoxy(15,8+i*2);cout<<i<<".";cin>>Eda[i];
}
//ordenando
for(i=1;i<=te-1;i++)
{ for(j=i+1;j<=te;j++)
{ if(Eda[i]>Eda[j])
{temp=Eda[i];
Eda[i]=Eda[j];
Eda[j]=temp;
}
}
}
Algoritmos y Estructura de Datos

gotoxy(10,2);cout<<"REPORTE ORDENADO ASC ";


for(i=1;i<=te;i++) {gotoxy(15,6+i);cout<<i<<".- "; cout<<Eda[i]; }getche();
}
Aplicacin 3.- Disear un programa que permita almacenar en un vector n
elementos donde (n>0 y n<100). Luego mostrar

los elementos que se

repiten y su posicin respectiva.


Solucin
Tipo
Informacin= array[1..100] de enteros
Variables
A, R, Poos:

Informacin

n, i, j, busca, pos, aux, busca, t=0, ,r: enteros


Inicio
Imprimir(Ingrese longitud = ),
leer(n)
desde i

1 hasta n hacer

Inicio
Imprimir( A["<<i<<"] = ";); leer(A[i])
fin
Imprimir( instrucciones de Bsqueda
SECUENCIAL");
Imprimir( Ingrese dato a buscar = "), leer(busca);
desde i

1 hasta n hacer

inicio
si (A[i]=busca) entonces
inicio
pos

i;

si(pos>1) entonces
inicio
i

i+1;

R[t]
Poos[t]

busca;
pos;

Algoritmos y Estructura de Datos

fin
fin
fin
si(pos<=1) entonces
inicio
Imprimir( El numero "<<busca<<" aparece y ocupa el "<<pos<<" lugar")
fin
sino
Imprimir( Elementos repetidos:"),
Imprimir( __________________________________________";
Imprimir( __________________________________________";
Imprimir( Vector : "), Imprimir( Indices: "),
desde i

1 hasta r hacer

inicio
Imprimir(R[r]),
Imprimir( Poos[r]),
fin
fin
fin
Implementacin en Borland c++ 5.02
void main()
{int n,A[100],i,j,busca, t= 0, R[100],pos,Poos[100],r;
//system("color 3A");
system("title Por Cordova Neri T. Vector_Busqueda SECUENCIA_ok.cpp");
gotoxy(10,2); cout<<" BUSQUEDA SECUENCIAL ";
gotoxy(5,3); cout<<"-------------------------------";
gotoxy(12,4);cout<<"Ingrese longitud del vector = ";cin>>n;
gotoxy(15,5);cout<<"-------------------------------";
gotoxy(15,7);cout<<"-------------------------------";
gotoxy(8,6);cout<<" A["<<n<<"] = ";
for(i=1;i<=n;i++)
Algoritmos y Estructura de Datos

{gotoxy(13+3*i,6);cout<<" ,"; cin>>A[i];


}
gotoxy(50,6);cout<<", Ingrese dato a buscar = ";cin>>busca;
gotoxy(10,10);cout<<"Procesando

instrucciones

de

Busqueda

SECUENCIAL";
gotoxy(5,11);cout<<"___________________________________________";
for(i=1;i<=n;i++)
{if(A[i]==busca)
{ pos=i;
if(pos>1)
{ t++;
R[t]=busca;

Poos[t]=pos;

}
}
}
if(pos<=1)
{gotoxy(10,13);
cout<<" El numero "<<busca<<" aparece y ocupa el "<<pos<<" lugar";
}
else
{gotoxy(15,15);cout<<" Elementos repetidos:";
gotoxy(5,16);cout<<"
__________________________________________";
gotoxy(5,20);cout<<"
__________________________________________";
gotoxy(8,18);cout<<"Vector : ";
gotoxy(8,19);cout<<"Indices: ";
for(r=1;r<=t;r++)
{gotoxy(10+9*r,18);cout<<R[r];gotoxy(10+9*r,19);cout<<Poos[r];
}
}
getche();
Algoritmos y Estructura de Datos

10

}
Aplicacin 4.- Disear un programa que permita almacenar en vector A y B
n y m elementos
mostrar

respectivamente, donde (m,n>0 y m, n<100). Luego

los elementos que son comunes para A y B y su posicin

respectiva.
Solucin
Tipo
Datos= array[1..100] de enteros
Variables
Pos, A, B,C, Posj:

Datos

n, i, m, j, t, d : enteros
Inicio
Imprimir (INTERSECCION DE DOS VECTORES: A,B ");
Imprimir (Ingrese longitud de A = "); leer(n);
desde i

1 hasta n hacer

inicio
Imprimir(A["<<i<<"] = "); leer(A[i]);
fin
Imprimir(Ingrese longitud de B = "; leer(m);
desde j

1 hasta m hacer,

inicio
Imprimir(B["<<j<<"] = "; leer(B[j]);
fin
k

0,d

0,t

0;

desde i

1 hasta n hacer

desde j

1 hasta m hacer

si(A[i]=B[j]) entonces
inicio
k

k+1;

C[k]

A[i];

d+1;

Pos[d]

i;

Algoritmos y Estructura de Datos

11

t+1;

Posj[t]

j;

fin
si (k>0) entonces
inicio
Imprimir(VECTORES CON ELEMENTOS INTERCEPTADOS ";
Imprimir( ";
Imprimir(Elementos que se interceptan = ";
Imprimir(Posiciones del elementos en A = ";
Imprimir(Posiciones del elementos en B = ";
desde i

1 hasta n hacer

inicio
Imprimir(C[i]) ; Imprimir(Pos[i]);
Imprimir(Posj[i]);
fin
fin
fin
Implementacin en Borland c++ 5.02
#define linea "---------------------------------------------------"
void main()
{ int n, m, i, j, k,d,Pos[100],t,Posj[100]; double A[100], B[100], C[100];
clrscr();system("color 1b");
system("title Cordova Neri Teodoro. vector_Interseccion");
gotoxy(10,2);cout<<"INTERSECCION DE DOS VECTORES: A,B ";
gotoxy(7,3);cout<<" _______________________________________";
gotoxy(10,5);cout<<"Ingrese longitud de A = ";cin>>n;
for (i=1; i<=n; i++)
{gotoxy(14,i+6);cout<<"A["<<i<<"] = "; cin>>A[i];
}
gotoxy(40,5);cout<<"Ingrese longitud de B = ";cin>>m;
for (j=1; j<=m; j++)
{gotoxy(44,j+6);cout<<"B["<<j<<"] = ";cin>>B[j];
}
Algoritmos y Estructura de Datos

12

k=0,d=0,t=0;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (A[i]==B[j])
{ k++; C[k]=A[i];
d++;

Pos[d]=i;

t++;

Posj[t]=j;

}
clrscr();// system("color 1b");
if (k>0)
{ gotoxy(15,4);cout<<" VECTORES CON ELEMENTOS INTERCEPTADOS ";
gotoxy(9,5);cout<<" ";
gotoxy(10,7);cout<<" Elementos que se interceptan = ";
gotoxy(10,9);cout<<" Posiciones del elementos en A = ";
gotoxy(10,10);cout<<" Posiciones del elementos en B = ";
for (i=1; i<=k; i++)
{gotoxy(35+10*i+1,7);cout<<C[i];
gotoxy(35+10*i+1,9);cout<<Pos[i];
gotoxy(35+10*i+1,10);cout<<Posj[i];
}
} getch();
}

Algoritmos y Estructura de Datos

13

Aplicacin 5.- Disear un programa que permita almacenar en vector A de


longitud mxima 1000, n nmeros pares positivos luego mostrar el promedio
de estos nmeros.
Solucin
Tipo
Datos= array[1..1000] de enteros
Variables
A: Datos
n, i, suma

0 : enteros

Inicio
Imprimir (Ingrese longitud de A = "); leer(n);
desde i=1 hasta n hacer
inicio
Imprimir(A["<<i<<"] = "); leer(A[i]);
fin
desde i

1 hasta n hacer

inicio
Si (A[i] mod 2=0) entonces
Inicio
par
suma

par+1
suma +A[i]

fin
fin
Imprimir(El promedio es = ",suma/par);
fin

Programa implementado en PSeINT:

Algoritmos y Estructura de Datos

14

Diagrama de Flujo de datos

Algoritmos y Estructura de Datos

15

Importando al compilador Borland C++ 5.02

Algoritmos y Estructura de Datos

16

Algoritmos y Estructura de Datos

17

Aplicacin 6.- Disear un programa que permita almacenar en vector A de


longitud mxima 1000, n nmeros pares positivos luego insertar nuevos
elementos.
Solucion
Tipo
Datos= array[1..1000] de enteros
Variables
A: Datos
n, i, nd : enteros
Inicio
Imprimir (Ingrese longitud de A = "); leer(n);
desde i

1 hasta n hacer

inicio
Imprimir(A["<<i<<"] = "); leer(A[i]);
Fin
Imprimir(Insercin ");
Imprimir(Ingrese Nuevo dato: "); leer(nd);
A[n+1]
n

nd
n+1

Imprimir(Nuevo vector );
desde i

1 hasta n hacer

inicio
Imprimir(A["<<i<<"] = ",A[i]);
Fin
fin
Obs. Debe hacer la insercin para n datos: crear un bucle repetitivo solo
para el proceso de insercin
Programa implementado en PSeInt

Algoritmos y Estructura de Datos

18

Diagrama de Flujo de datos

Algoritmos y Estructura de Datos

19

Aplicacin 7.- Disear un programa que permita almacenar en vector A de


longitud mxima 1000, cdigo formado por 3 dgitos de n alumnos. Los

Algoritmos y Estructura de Datos

20

cdigos no deben repetirse. Si se repite enviar el mensaje mostrado en el


siguiente formulario.

Solucin

Algoritmos y Estructura de Datos

21

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

22

Implementacin en c++ 5.02


void main()
{ char nomb[5][5];
int i,j,k=0,aux,n,cod[10],co[10],pos[10]; bool b1;
clrscr();
system("color 1b");
gotoxy(10,2);cout<<"Ingresar numero de alumnos = "; cin>>n;
gotoxy(8,4); cout<<" # Codigo

Nombre ";

gotoxy(5,5);
cout<<"________________________________________________";
for(i=1;i<=n;i++)
{ k=0;//actualiza para contador de repeticiones de 2do, 3ro cod, repetidos
do
{ gotoxy(10,5+i); clreol();cout<<i<<".- ";system("color 1b");cin>>cod[i];
b1=false;
if(i>1)
{ // gotoxy(60,5+i);cout<<"posicion i= "<<(i-1);// getche();
for(j=1;j<=i-1;j++)
{ if(cod[i]==cod[j])
{ b1=1;

k++;

gotoxy(30,6+j);system("color 4a");cout<<" Codigo Ya Existe posicion: "<<j;


gotoxy(40,7+j);cout<<" Repeticion # = "<<k;
getche();
clreol();
}
}//FIN DEL FOR J
}
} while(cod[i]<100||cod[i]>1000||b1==true);
pos[i]=i;
gotoxy(25,5+i); gets(nomb[i]);
}//FIN DEL FOR
Algoritmos y Estructura de Datos

23

Aplicacin 8.- Disear un programa que permita almacenar en vector A de


longitud mxima 1000, edades de n alumnos. Luego hacer un reporte de las
edades pero sin repetirse.
Solucin
Pseudocdigo

Algoritmos y Estructura de Datos

24

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

25

Aplicacin 9.- Disear un programa que permita almacenar datos por nota y
sexo de n alumnos en un vector de longitud mxima 1000. Luego hacer un
reporte para conocer los alumnos aprobados de sexo Masculino.

Algoritmos y Estructura de Datos

26

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

27

Aplicacin 10.- Disear un programa para leer un numero entero positivo y


luego genere un reporte del nmero en trminos de parejas de nmeros a,
b donde n=a+b y a>=b. asimismo el mayor elemento respecto al nmero a.

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

28

Algoritmos y Estructura de Datos

29

Implementacin en c++ 5.02

Algoritmos y Estructura de Datos

30

Aplicacin 11.- Disear un programa que permita almacenar en un vector


de longitud mxima 1000, apellidos de n alumnos luego genere un reporte
ordenado en forma ascendente de los apellidos. No debe aceptar el ingreso
de nombres repetidos. El programa finaliza cuando ingresa un apellido en
blanco (cuando presiona ENTER).
Solucin
Implementado en PSeInt

Proceso OrdenaApellido
dimension apellido[1000];
Escribir "Ingrese los apells (enter en blanco para terminar):";
*** Ejecucion Iniciada. ***
Caceres
Andrade
Bellido
Abeli
Escribir " ";
cant<-0;
Leer apell;
Mientras apell<>"" Hacer
cant<-cant+1;
apellido[cant]<-apell;
Repetir // leer un apell y ver que no este en apell
Leer apell;
se_repite<-Falso;
Para i<-1 Hasta cant Hacer
Si apell=apellido[i] Entonces
se_repite<-Verdadero;
Algoritmos y Estructura de Datos

31

FinSi
FinPara
Hasta Que NO se_repite
FinMientras
// ordenar en forma ascendente
Para i<-1 Hasta cant-1 Hacer
// busca el menor entre i y cant
pos_menor<-i;
Para j<-i+1 Hasta cant Hacer
Si apellido[j]<apellido[pos_menor] Entonces
pos_menor<-j;
FinSi
FinPara
// intercambia el que estaba en i con el menor que encontro
aux<-apellido[i];
apellido[i]<-apellido[pos_menor];
apellido[pos_menor]<-aux;
FinPara
Escribir "

APELLIDOS ORDENADOS FORMA ASC";

Escribir " _________________________________________";


Escribir " ";
Para i<-1 Hasta cant Hacer
Escribir "

",apellido[i];

FinPara
Escribir " ";
FinProceso

Algoritmos y Estructura de Datos

32

Diagrama De Flujo de datos

Algoritmos y Estructura de Datos

33

Aplicacin 12- Solo se debe usar para que el usuario ingrese sus datos por
cdigo(solo de tres dgitos), nombre(cadena de longitud 10 caracteres) y
edad (15..70) de n empleados
( n<=100 ). Los datos deben almacenarse en vectores que usted defina,
luego genere los siguientes reportes:
1.- Empleados por cdigo, nombre y edad, respectivamente.
2.-Empleados por nombre y edad, ordenados en forma ascendente por edad.
Asimismo, mostrar la posicin actual y original de cada empleado.
3.- Buscar empleados por edad, si existen; mostrar el total.
4.- Insertar nuevo(s) empleado(s). Mostrar los nuevos resultados.
5.- Retirar empleados que tiene edad mayor a 60 aos.

Algoritmos y Estructura de Datos

34

Algoritmos y Estructura de Datos

35

Proceso ordenarAscen_Ins_Elim
definir n,i,notas,x,pos,edad,codigo,x2,j,d,p,sd,cv,xc,as,h como enteros;
definir nombre,x1,z como caracter;
dimension codigo[20]; dimension nombre[20];
dimension pos[20]; dimension edad[20];
xc<-1;as<-1; cv<-0;sd<-0;h<-0;
Escribir "Ingrese numero de empleados = ";Leer n;sin bajar;
Para i<-1 hasta n con paso 1 hacer
Escribir "codigo[",i,"] = ";leer codigo[i];sin bajar;
si codigo[i]<1000 entonces
Escribir "nombre[",i,"] = ";leer nombre[i];sin bajar;
Escribir "edad[",i,"] = "; leer edad[i];sin bajar;
pos[i]<-i;
Sino
escribir "codigo muy largo ","vuelva a ingresar el codigo ";
i<-1;
FinSi
FinPara
Para i<-1 hasta n-1 con paso 1 hacer

Algoritmos y Estructura de Datos

36

para j<-i+1 hasta n con paso 1 hacer


si (edad[i]>edad[j]) entonces
x<-edad[i];

x1<-nombre[i];

x2<-codigo[i];

edad[i]<-edad[j]; nombre[i]<-nombre[j]; codigo[i]<-codigo[j];


edad[j]<-x;

nombre[j]<-x1;

codigo[j]<-x2;

d<-pos[i];

pos[i]<-pos[j];

pos[j]<-d;

FinSi
FinPara
FinPara
Escribir " #

codigo

Nombre

Edad Posicion actual Posicion anterior ";

Escribir "-------------------------------------------------------------------------";
Para i<-1 hasta n con paso 1 hacer Escribir " ",i,".- ",codigo[i]," ",nombre[i],"
",edad[i],"

",i,"

",pos[i];

FinPara
mientras xc<1000 hacer
Escribir "numero de consulta = ",as;
Escribir " que desea hacer ", "(Retirar,Insertar o Buscar empleado) = ";leer z;
Si z='buscar' || z='BUSCAR' entonces
Escribir "escriba la edad del empleado a buscar = ";leer p;
para i<-1 hasta n con paso 1 hacer
si p = edad[i] Entonces
h<-h+1;
Escribir " #

codigo

Nombre

Edad Posicion actual Posicion anterior ";

Escribir "-------------------------------------------------------------------------";
Escribir "

";

Escribir " ",i,".- ",codigo[i]," ",nombre[i]," ",edad[i]," ",i,"

",pos[i];

FinSi
FinPara
Algoritmos y Estructura de Datos

37

Escribir "numero total de empleados encontrados con ",p," aos = ",h;


Sino
si z= 'insertar' || z='INSERTAR' Entonces
Escribir "cantidad de empleados a insertar = ";leer sd;
para i<-n+1 hasta n+sd con paso 1 hacer
Escribir "codigo[",i,"] = ";leer codigo[i];sin bajar;
si codigo[i]<1000 entonces
Escribir "nombre[",i,"] = ";leer nombre[i];sin bajar;
Escribir "edad[",i,"] = ";leer edad[i];sin bajar;
pos[i]<-i;
Sino
escribir "codigo muy largo ","vuelva a ingresar el codigo ";
i<-1;
FinSi
FinPara
Para i<-1 hasta (n+sd)-1 con paso 1 hacer
para j<-i+1 hasta n+sd con paso 1 hacer
si (edad[i]>edad[j]) entonces
x<-edad[i];

x1<-nombre[i];

x2<-codigo[i];

edad[i]<-edad[j]; nombre[i]<-nombre[j]; codigo[i]<-codigo[j];


edad[j]<-x;
d<-pos[i];

nombre[j]<-x1;
pos[i]<-pos[j];

codigo[j]<-x2;
pos[j]<-d;

FinSi
FinPara
FinPara
Escribir " #

codigo Nombre

Edad

Posicion actual

Posicion

anterior ";
Escribir "--------------------------------------------------------------------------------";
Algoritmos y Estructura de Datos

38

Para i<-1 hasta n+sd con paso 1 hacer


Escribir " ",i,".- ",codigo[i]," ",nombre[i],"

",edad[i]," ",i,"

",pos[i];

FinPara
Sino
para i<-1 hasta n+sd con paso 1 hacer
si edad[i]>=60 Entonces
cv<-cv+1;
x<-edad[n+sd];

x1<-nombre[n+sd];

x2<-codigo[n+sd];

edad[n+sd]<-edad[i]; nombre[n+sd]<-nombre[i]; codigo[n+sd]<-codigo[i];


edad[i]<-x;

nombre[j]<-x1;

codigo[i]<-x2;

d<-pos[n+sd];

pos[n+sd]<-pos[i];

pos[i]<-d;

FinSi
FinPara
Escribir " #

codigo Nombre

Edad

Posicion actual

Posicion anterior ";

escribir "----------------------------------------------------------------------------------------";
Para i<-1 hasta (n+sd)-cv con paso 1 hacer
Escribir " ",i,".-",codigo[i],"

",nombre[i]," ",edad[i]," ",i,"

",pos[i];

FinPara
FinSi
FinSi
xc<-xc+1;
as<-as+1;
FinMientras
FinProceso

Algoritmos y Estructura de Datos

39

Aplicacin

13.-

Disear

un

programa que permita leer n notas


(n>2) de alumnos, las cuales
pueden ser nicamente enteras
entre 1 y 20. Luego mostrar un
reporte de total notas de valor: 1,
7 y 11.Asimismo, mostrar las notas
que no sean 1, 7 o 11 .
Solucin

Algoritmos y Estructura de Datos

40

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

41

rrays

idimensionales

AB

Definicin.-Un array bidimensional es una estructura denominada matriz de


orden

mn,

considerado

como

conjunto

rectangular de elementos aij dispuestos en m


lneas

horizontales(filas)

verticales

(columnas) de la forma:
En la prctica, se expresa en la forma A =(aij),
donde i =1, 2, ..., n, =1, 2, ..., m. Los
subndices indican la posicin del elemento
dentro de la matriz, el primero denota la fila (i) y
el segundo la columna(j) .
Sintaxis
Constantes :
max_f 100,

max_c 100

Tipo
nombre_mat =array[1.. max_f,1.. max_c] de tipo_dato
variables
Nomb_var: nombre_mat
f,i,c,j:enteros
donde:
1.- Tipo es el tipo de datos que guarda la matriz.
2.- nombre_mat es el identificador de la matriz.
3.- max_f : cantidad mximao de filas y max_c : mximo columnas.
Inicializacin
1.
2.

A[3,2] = { {1, 4}, {2, 5}, {3, 6}}; //3 filas, 2 columnas
B[2,3] = { {7, 8, 9}, {10, 11, 12}};

Algoritmos y Estructura de Datos

42

Aplicacin 1.- Disear un programa que permita almacenar datos de ti


entero en una matriz de n filas y m columnas(n,m>1), luego hacer un reporte
y mostrar la suma de sus elementos diagonales. El programa consta de:
Pseudocdigo, Diagrama de flujo de datos y programa en c++.
Programa Pseudocdigo en PSeInt.

Algoritmos y Estructura de Datos

43

Programa en Diagrama de flujo de datos

Algoritmos y Estructura de Datos

44

Implementacin en c++ 5.02


void main()
{ int n,m,i,j,suma,a[10][10];

suma=0;

cout<<"Ingrese Flas ="<<endl;

cin>>n;

cout<<"Ingrese Columnas = "<<endl;

cin>>m;

for(i=1;i<=n;i++) {
for (j=1;j<=m;j++) {
cout<<"A["<<i<<","<<j<<"]="<<endl;

cin>>a[i][j];

}
}
cout<<"REPORTE"<<endl;
for(i=1;i>=n;i++) {
for(j=1;j>=m;j++) {
cout<<"A["<<i<<","<<j<<"] = "<<a[i][j]<<endl;
}
}
cout<<" SUMA DIAGONAL "<<endl;
for (i=1;i<=n;i++) {
for (j=1;j<=m;j++) {
if (i==j)
{suma=suma+a[i][j];
}
}
}
cout<<"Suma Diagobal ="<<suma<<endl;
getche();
}

Algoritmos y Estructura de Datos

45

Aplicacin 2.-- Una empresa importadora de vehculos tiene distribuido tres


tipos de vehculos en tres almacenes diferentes,
tal como se ilustra en la siguiente figura:
Disear un programa que permita leer el
nmero de tipos de vehculos y el nmero de
almacenes (pude usted generalizar para n filas y
m columnas), luego generar reportes:
a).- Total de vehculos por tipo
b).-Total de vehculos en cada almacn
Solucin

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

46

Algoritmos y Estructura de Datos

47

Implementacion en Borland c++ 5.02


void main()
{int almacen[20][20],i,j,x=5,y=10,m,n;
float suma=0,tv=0; clrscr(); gotoxy(15,1);
cout<<"Compania Importadora de Autos ";
do{gotoxy(1,3);cout<<"Ingese Vehiculos:"; cin>>m;
gotoxy(1,4);cout<<" Ingrese Almacenes: "; cin>>n;
}while(m<=0 || m>=10 && n<=0 || n>=10);
gotoxy(1,5);cout<<"Ingrese vehiculos :";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{gotoxy(19+y*j,x+i*2);cout<<"al["<<i<<","<<j<<"]=";
gotoxy(27+y*j,x+i*2);cin>>almacen[i][j];
}//Suma tipos de vehiculos ( filas)
cout<<"\nTotal de Vehiculos por tipo"<<endl;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++) { suma=suma+almacen[i][j];
if(j==n)
{ cout<<"Tipo "<<i<<".-"<<suma<<" vehiculos"<<endl; suma=0;
}
tv=tv+almacen[i][j];
}//Sumando vehiculos por almacen (Columnas)
suma=0;
cout<<"\nTotal por Almacen:"<<endl;
for(j=1;j<=n;j++)
for(i=1;i<=m;i++) { suma=suma+almacen[i][j];
if(i==n) { cout<<"almacen "<<j<<" = "<<suma<<" vehiculos"<<endl;
suma=0;
}
} //total
cout<<"\nTotal de Vehiculos de la empresa :"<<tv<<endl; getch();
}
Algoritmos y Estructura de Datos

48

Aplicacin 3. Disear un programa que permita ingresar nmeros enteros


en una matriz cuadrada de orden n*m (n y m son ingresados por el usuario),
luego se pide mostrar:
a).-La suma diagonal principal
b).- La suma de la fila ingresada por el usuario
c).- La suma de la columna ingresada por el usuario
d).-La matriz ordenada por columnas
Solucion
Implementacion en Borland c++ 5.02
void main()
{ long a[10][10],n,m,i,j,k,aux; int suma=0, suma1=0,suma2=0;

long s[10];

clrscr(); cout<<"\ningrese el numero de filas: ";cin>>n;


cout<<"\ningrese el numero de columnas: ";cin>>m;
int x=5,y=10;
for(i=1; i<=n;i++)
{ for(j=1;j<=m;j++) {gotoxy(19+y*j,x+i*2);cout<<"al["<<i<<","<<j<<"]=";
gotoxy(27+y*j,x+i*2);cin>>a[i][j];
}
}
for(i=1; i<=n;i++)
{ for(j=1;j<=m;j++)
{ if(i==j)
suma=suma+a[i][j];
}

cout<<"\nIngrese el nmero de fila: "; cin>>i;


for(j=1; j<=n;j++)
{ suma1=suma1+a[i][j]; }
cout<<"\nLa suma de la fila es: "<<suma1<<endl;
cout<<"\nIngrese el numero de columna: "; cin>>j;
for(i=1; i<=m;i++)
{ suma2=suma2+a[i][j];
}
Algoritmos y Estructura de Datos

49

cout<<"\nLa suma de la columna es: "<<suma2<<endl; getche(); clrscr();


gotoxy(8,4);cout<<"\nMatriz ordenada pero mostrado por columnas "<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=m-1;j++) //ordenado filas en forma descendente
{for(k=j+1;k<=m;k++)
if (a[i][j]<i][k]) {aux=a[i][j]; a[i][j]=a[i][k];

a[i][k]=aux;

}
}
for (i=1;i<=n;i++)
for (j=1;j<=m;j++) { gotoxy(19+y*j,x+i*2); gotoxy(12+y*j,x+i*2);cout<<a[i][j];
}
getche();
}
Ingreso de datos reporte de la matriz,
descendente:

ordenada por filas y en forma

Implementacin mediante el PseInt

Algoritmos y Estructura de Datos

50

Algoritmos y Estructura de Datos

51

Algoritmos y Estructura de Datos

52

Algoritmos y Estructura de Datos

53

Algoritmos y Estructura de Datos

54

Continuacin

Aplicacin 5.- Disear un programa que permita leer datos de tipo


enteros y almacenarlos en una
matriz de n filas y m columnas
(m,n>1), luego encontrar el
total de nmeros positivos y la
suma

respectiva.

anlogo

para

los

Proceso
nmeros

negativos.
Solucin

Algoritmos y Estructura de Datos

55

Algoritmos y Estructura de Datos

56

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

57

Aplicacin 6.- Disear un programa que


permita almacenar dgitos en forma aleatoria
en una matriz de dimensin n*n, luego en un
vector A mostrar la suma por cada fila y en un
vector B la suma por cada columna.

Algoritmos y Estructura de Datos

58

Diagrama de Flujo de datos

Continua.
Algoritmos y Estructura de Datos

59

Algoritmos y Estructura de Datos

60

Algoritmos y Estructura de Datos

61

Usando Borland C++ 5.02


Aplicacin 1.- Disear un programa que permita ingresar nmeros enteros a
una matriz de orden n*m( n:filas y m:columnas ) n,m definidos por usuario y
luego mostrar sus elementos ordenados en forma ascendente y en
ESPIRAL
Solucion //matriz_espiral.cpp
# define linea "___________________________"
#define taman 20
void main()
{ int matriz[taman][taman], espiral[taman][taman], temp[100],i,j,k,n;
int farribaizq,farribader,cderechaarr,cderechaaba,fabajoder,fabajoizq,
cizqaba;
int cizqarr,contador,

aux;;

gotoxy(15,2);cout<<" MATRIZ ESPIRAL ";gotoxy(6,3);cout<<linea ;


gotoxy(8,4);cout<<" Ingrese dimension de la matriz = ";cin>>n;
gotoxy(8,6);cout<<" Ingrese elementos de la matriz ";
int x,y;

x = 10;

y = 8; //para gotoxy(x,y)

for (i=0;i<n;i++){
for (j=0;j<n;j++){gotoxy(x,y);cout<<"M["<<(i+1)<<","<<(j+1)<<"]=";
cin>>matriz[i][j];

x +=12; }y +=1; x = 10;

}k = 0;

for (i=0;i<n;i++)
for(j=0;j<n;j++)
{temp[k] = matriz[i][j];k ++;}
for (j=0;j<n*n-1;j++)
{ for (i=0;i<n*n-1;i++)
{if (temp[i] > temp[i+1])
{aux=temp[i];temp[i]=temp[i+1];temp[i+1]=aux;
}} }
k = 0;
for (i=0;i<n;i++)
for(j=0;j<n;j++)
{matriz[i][j] = temp[k]; k ++; }
Algoritmos y Estructura de Datos

62

farribaizq =0;farribader = n - 1;cderechaarr = 1;cderechaaba = n - 1;fabajoder


= n - 2;fabajoizq = 0;cizqaba = n - 2;

cizqarr = 1;contador = 0;

while(contador < (n*n))


{for (i = farribaizq; i <= farribader; i++)
{espiral[farribaizq][i] = temp[contador]; contador++;
}
farribaizq++; farribader--;
for( i = cderechaarr; i <= cderechaaba; i++ )
{espiral[i][cderechaaba] =
temp[contador];
contador++;
}
cderechaarr++;cderechaaba--;
for( i=fabajoder;i>=fabajoizq;i-- )
{espiral[fabajoder + 1][i] =
temp[contador]; contador++;
}
fabajoder--; fabajoizq++;
for( i = cizqaba; i >= cizqarr; i-- )
{espiral[i][cizqarr - 1] = temp[contador]; contador++;
} cizqaba--; cizqarr++;
} cout<<"\n\t Matriz de Forma de ESPIRAL "; cout<<"\n\t"linea;
y += 3;
for( i = 0; i < n; i++ )
{for( j = 0; j < n; j++ )
{gotoxy(x,y); if( espiral[i][j] < 10 )
else{cout<<espiral[i][j];

{cout<<espiral[i][j];

x +=6; }
y += 1; x = 10; cout<<"\n";
}
cout<<" \n\n\t ";system("pause");
}
Algoritmos y Estructura de Datos

63

Problema 2.-

Disear un

programa que permita leer n alumnos por

apellidos y tres notas por cada uno, luego genere reportes para conocer
apellidos, promedio y estado (aprobado, desaprobado). El promedio se
calcula eliminando la menor nota por alumno; asimismo, muestre el alumno
que pertenece al tercio superior
Solucin
#define maxf 50

#define maxc 50

void main() { char nom[maxf][maxc],temp[maxf];


float temp1, notas[maxf][3], prom[maxf], min[maxf];

int t i,j,n;clrscr();

gotoxy(8,2);cout<<"RELACION DE ALUMNOS Y RESPECTIVAS NOTAS";


gotoxy(6,3); cout<<"___________________________________"<<endl;
gotoxy(2,5);cout<<"Ingrese Nro de alumnos: "; cin>>n;
for(i=1;i<=n;i++)

{ gotoxy(2,6+i);cout<<endl<<"Alumno

"<<"["<<i<<"=]"<<endl;
gotoxy(2,8+i);cout<<"Apellidos :";cin>>nom[i];
cout<<" Ingrese sus 3 notas: "<<endl;
for(j=1;j<=3;j++)
{gotoxy(8,10+j);clreol(); cout<<"nota["<<j<<"]=";cin>>notas[i][j];
} clrscr();
}

//Calculo de promedios

for(i=1;i<=n;i++)
{ prom[i]=0; min[i]=20;

for(i=1;i<=n;i++)
{ for(j=1;j<=3;j++)
{ if (notas[i][j]<min[i])
{ min[i]=notas[i][j];

prom[i]+=notas[i][j];
}
}
for(i=1;i<=n;i++)
{prom[i]-=min[i];

prom[i]/=2;

} //Ordenar la tabla descendentemente con respecto al promedio


Algoritmos y Estructura de Datos

64

for(i=1;i<=n-1;i++)
for(j=1;j<=n-i;j++)
if (prom[j]<prom[j+1])
{

temp1=prom[j]; strcpy(temp,nom[j]);
prom[j]=prom[j+1]; strcpy(nom[j],nom[j+1]);
prom[j+1]=temp1; strcpy(nom[j+1],temp);

}
cout<<"\n";cout<<"\t\tREPORTE DE ALUMNOS
cout<<"

Apellidos

Promedios

"<<endl; cout<<"\n";

Estado"<<endl;

for (i=1;i<=79;i++) cout<<"";


for (i=1;i<=80;i++) cout<<"_";
for (i=1;i<=n;i++) {cout<<i<<".-"<<setw(10)<<nom[i]; //Nombres
cout<<setiosflags(ios::showpoint+ios::right);
cout<<setw(22)<<setprecision(2)<<prom[i]<<"\t"; //Promedios
if (prom[i]>=10) cout<<" Aprobado";
else
cout<<" Desaprobado";cout<<endl;
}
for

(i=1;i<=75;i++)

cout<<"_";cout<<"\nPertenecen

al

Tercio

Superior:

"<<endl;
if (n<3) cout<<"alumno "<<nom[1]<<endl;
else
{ for(i=1;i<=n/3;i++)
cout<<"alumno "<<nom[i]<<endl; }

system("pause");

Algoritmos y Estructura de Datos

65

rrays

ridimensionales

AT

Definicin.-Un array tridimensional es una estructura denominada cubo de


orden mn*k, considerado como conjunto cubico de elementos a xyz
En la prctica, se expresa en la forma A
=(axyz), donde x =1, 2, ..., n, y=1, 2, ..., m,
z=1,2,3K Los subndices indican la posicin
del elemento . Esta figura representa un cubo
o arreglo tridimensional de orden n*m*k,
donde en cada celda se asigna un dato, el
cual puede ser entero, real, carcter, etc.
Sintaxis
Tipo
nombre_estruct =array[1.. 100.1..100,1..100] de tipo_dato
variables
Nomb_var: nombre_estruct
N,m,j,k,i,j,r:enteros
Guardar un dato en la posicin
[x=2]

[y=5]

[z=3];

la

representacin grfica donde se


guarda

este

dato

es

la

interseccin entre los tres puntos


(triangulo). El valor que le vamos
a asignar es 10, denotando como
matriz 3D, A[2][5][3]=10
Aplicaciones

Algoritmos y Estructura de Datos

66

Aplicacin 1.- Disear un programa que permita leer n cursos, para cada
curso leer m alumnos y para cada alumnos leer k prcticas, luego mostrar
acumulado de sus notas y luego promedio por alumno.
Solucin

Algoritmos y Estructura de Datos

67

Diagrama de flujo de datos

Algoritmos y Estructura de Datos

68

Aplicacin 2.- Un aeropuerto cuenta con los datos de los pasajeros, por
vuelos, de los doce meses del ao pasado. Se tiene nueve destinos desde
donde pueden venir o llegar dichos vuelos y cinco aerolneas a los cuales
pueden pertenecer los vuelos (llammosla A, B, C, D, E). Se desea saber el
mes en el cual llegaron o partieron ms vuelos al aeropuerto, la aerolnea
que realiz el mayor transporte de pasajeros entre enero, febrero, marzo y
los dos destinos ms concurridos por las aerolneas C, D, E.
Solucion . Se implementara en borland c++ 5.02
//mat_vuelos_avion.cpp
void main()
{ int vuelos[2][12][5][9], pasajeros[2][12][5][9][5], cont[12];
int i, j, k, l, m, max, maxi, max_pas, aero, cont_pas[5];
system("cls"); cout<<"\nRegistro de Salidas : ";
for(i=0;i<12;i++)
{ cout<<"\nMes "<<i+1<<" :";
for(j=0;j<5;j++)
{ cout<<"\nAerolinea "<<i+65<<" :";
for(k=0;k<9;k++)
{cout<<"Ingrese # de vuelos para el destino "<<k+1; cin>>vuelos[0][i][j]
[k];
for(l=0;l<vuelos[0][i][j][k];l++)
{cout<<"Nmero de pasajeros del vuelo "<<l+1<<" :";cin>>pasajeros[0][i][j][k]
[l];
}} }
}
system("cls");cout<<"\nRegistro de Llegadas : ";
for(i=0;i<12;i++)
{ cout<<"\nMes "<<i+1<<" :";
for(j=0;j<5;j++)
{ cout<<"\nAerolinea "<<i+65<<" :";
for(k=0;k<9;k++)
Algoritmos y Estructura de Datos

69

{cout<<"Ingrese el nmero de vuelos desde "<<k+1<<" :";


cin>>vuelos[1][i][j][k];
for(l=0;l<vuelos[1][i][j][k];l++)
{cout<<"Nmero de pasajeros del vuelo "<<l+1<<" :";
cin>>pasajeros[1][i][j][k][l];
}} }
}
for(i=0;i<12;i++)
{ cont[i]=0; max = cont[i];
for(m=0;m<2;m++)
for(j=0;j<5;j++)
for(k=0;k<9;k++)
cont[i]=cont[i]+vuelos[m][i][j][k];
if (cont[i] > max)
{ max=cont[i];maxi=i;
}
}
cout<<"\nEl mes de de mayor numeros de vuelos es "<<maxi+1<<" :";
for(j=0;j<5;j++)
{ cont_pas[j]=0;
max_pas = cont_pas[j];
for(i=0;i<3;i++)
for(m=0;m<2;m++)
for(k=0;k<9;k++)
for(l=0;l<vuelos[m][i][j][k];l++)
cont_pas[j]=cont_pas[j]+pasajeros[1][i][j][k][l];
if (cont_pas[j] > max_pas)
{ max_pas=cont_pas[j];aero=j;
}
}
cout<<"\nLa aerolinea con transporte de pasajeros es "<<aero + 65<<" :";
}
Algoritmos y Estructura de Datos

70

Algoritmos y Estructura de Datos

71

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