Академический Документы
Профессиональный Документы
Культура Документы
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
Notas [ 20]
[0] [1]
[ 2 ] [ 3 ] ........................................................ [ 18 ] [ 19 ]
ndice
12
11
09
15
.......
11
08
02
12
desde i
0 hasta 19 hacer
2.-
Inicializacin de un Arreglo
1.- Se puede inicializar un array con la declaracin:
int a[3]
{2,1,7}
int b[5]
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
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()
= "<<ap;
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
Desde j
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
Informacin
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;
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
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
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;
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();
}
13
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
14
15
16
17
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
18
19
20
Solucin
21
22
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++;
23
24
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.
26
27
28
29
30
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 "
",apellido[i];
FinPara
Escribir " ";
FinProceso
32
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.
34
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
36
x1<-nombre[i];
x2<-codigo[i];
nombre[j]<-x1;
codigo[j]<-x2;
d<-pos[i];
pos[i]<-pos[j];
pos[j]<-d;
FinSi
FinPara
FinPara
Escribir " #
codigo
Nombre
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
Escribir "-------------------------------------------------------------------------";
Escribir "
";
",pos[i];
FinSi
FinPara
Algoritmos y Estructura de Datos
37
x1<-nombre[i];
x2<-codigo[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
",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];
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
escribir "----------------------------------------------------------------------------------------";
Para i<-1 hasta (n+sd)-cv con paso 1 hacer
Escribir " ",i,".-",codigo[i],"
",pos[i];
FinPara
FinSi
FinSi
xc<-xc+1;
as<-as+1;
FinMientras
FinProceso
39
Aplicacin
13.-
Disear
un
40
41
rrays
idimensionales
AB
mn,
considerado
como
conjunto
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}};
42
43
44
suma=0;
cin>>n;
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();
}
45
46
47
48
long s[10];
49
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:
50
51
52
53
54
Continuacin
respectiva.
anlogo
para
los
Proceso
nmeros
negativos.
Solucin
55
56
57
58
Continua.
Algoritmos y Estructura de Datos
59
60
61
aux;;
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];
}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
cizqarr = 1;contador = 0;
{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
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
int t i,j,n;clrscr();
{ 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;
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;
(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");
65
rrays
ridimensionales
AT
[y=5]
[z=3];
la
este
dato
es
la
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
67
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
70
71