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

INTRODUCCIÓN A LA

PROGRAMACIÓN
Vectores
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA
FACULTAD DE CIENCIAS DE LA COMPUTACIÓN
Luz A. Sánchez Gálvez
Mario Anzures García
Arreglos (Arrays)

 Es un conjunto de datos del mismo tipo almacenados


en la memoria de la computadora en posiciones
adyacentes.
 Sus componentes individuales se llaman elementos y
se distinguen entre ellos por el nombre del arreglo
seguido de uno o varios índices o subíndices.
 Estos elementos se pueden procesar, individualmente,
determinando su posición dentro del arreglo.
Arreglos (Arrays)

 El número de elementos del arreglo se específica


cuando se crea, definiendo el número de dimensiones
o número de índices del mismo.
 Según sea este número, distinguiremos los siguientes
tipos de arreglos:
 unidimensionales (vectores)
 bidimensionales (matrices)
 multidimensionales
Arreglos (Arrays)

 Arreglo de dimensión 1, 2 ó n, cuyo tamaño


especifica el número de elementos que lo constituyen.
 Este dato lo utiliza el compilador para reservar el
espacio necesario para almacenar en memoria todos
sus elementos ocupando un área contigua.
 No se debe olvidar que, a nivel físico, la memoria es
lineal; por ello los elementos se colocan en la
memoria linealmente según un orden prefijado de los
índices.
Arreglos (Arrays)

 En el ejemplo: la dimensión es 2, su rango (3;5) y el


número total de elementos es 15.
Vector

 Los vectores son arreglos unidimensionales, que


presentan la ventaja de ser estructuras ordenadas
 Las notaciones utilizadas son:
tipo nombre_vector[tamaño]
nombre_vector nombre válido del vector
tamaño número de elementos del vector
tipo tipo de los elementos del vector {entero, real,
carácter, etc.}
Vector

 La declaración de un vector supone una reserva de


espacio, se puede asumir que, hasta que se asigne
valores por cualquier mecanismo a sus distintos
elementos, se tiene una estructura vacía.
 float numeros [20];
 El vector numeros tendrá al menos 20 números de tipo
real, cuyos índices varían desde 0 hasta 19
Vector: Asignación (1)

 Tiene el mismo significado que la asignación de un


valor a una variable, ya que un vector con su índice
representa la misma entidad que una variable:
 int arreglo1[4];
 int arreglo[4]={1,2,3,4};
arreglo[1]=5 //por tanto, arreglo[4]={1,5,3,4};
arreglo[3]=8 //por tanto arreglo[4]={1,5,3,8};
Vector: Asignación (2)

#include <iostream>
using namespace std;

main ()
{
int i,arreglo[5]={1,2,3,4,5}; //asignar valores al arreglo
for(i=0;i<5;i++) //recorrer arreglo para escribirlo
cout << arreglo[i]<< "\t";
cout << "\n";
system("pause");
}
Vector: Asignación (3)

#include <iostream>
using namespace std;
main ()
{
int i,arreglo[5]={1,2,3,4,5};
for(i=0;i<=4;i++)
cout << arreglo[i]<< "\t";
cout << "\n";
// ESTO ES INVALIDO arreglo=4;
arreglo[1]=5; //por tanto, arreglo[5]={1,5,3,4,5};
for(i=0;i<5;i++)
cout << arreglo[i]<< "\t";
cout << "\n";
arreglo[3]=8 ; //por tanto arreglo[5]={1,5,3,8,5};
for(i=0;i<=4;i++)
cout << arreglo[i]<< "\t";
cout << "\n";
system("pause");
}
Vector: Acceso o recorrido

 Consiste en acceder a los elementos de un


vector para un determinado proceso:
 introducir datos (leer -cin),
 visualizar su contenido (escribir -cout),
 insertar un elemento,
 eliminar un elemento, etc.
Vector: Acceso o recorrido

 Recorrido es la operación de efectuar una acción


sobre todos los elementos de un vector
 El recorrido de un vector se realiza utilizando
estructuras repetitivas,
 cuyas variables de control (el contador) se utilizan
como subíndices del vector,
 el incremento del contador del ciclo producirá el
recorrido sucesivo de los elementos del vector.
Vector: Acceso o recorrido
Ejemplo 1
 Programa que recorre secuencialmente un vector numeros de 10 elementos,
se realiza la lectura y escritura.
 Usando ciclo for
#include <iostream>
using namespace std;

main()
{
int numeros[20], i;
cout << "Introduce 10 numeros para almacenarlos en un arreglo \n \n ";
for (i=0; i <=9; i++) { //se recorre el arreglo para introducir los datos
cout << "Introduce el numero " << i+1 << " : \n";
cin >>numeros [i];
}
cout << "Escribe los 10 numeros almacenados en el arreglo numeros \n \n ";
for (i=0;i<=9;i++)
cout << " "<< numeros [i];
cout << endl;
system("pause");
}
Vector: Acceso o recorrido
Ejemplo 1
 Programa que recorre secuencialmente un vector numeros de 10
elementos, se realiza la lectura y escritura.
 Usando CICLO mientras

#include <iostream>
using namespace std;
main()
{
int numeros[20], i=0;
cout << "Introduce 10 numeros para almacenarlos en un arreglo \n \n ";
while (i <=9) { //se recorre el arreglo para introducir los datos
cout << "Introduce el numero " << i+1 << " : \n";
cin >>numeros [i];
i++;
}
cout << "Escribe los 10 numeros almacenados en el arreglo numeros \n \n ";
i=0;
while(i<=9){
cout << " "<< numeros [i];
i++;
}
cout << endl;
system("pause");
}
Vector: Acceso o recorrido
Ejemplo 3
 Programa que recorre secuencialmente un vector numeros de 10
elementos, se realiza la lectura y escritura.
 Usando CICLO do{ …}while(…);

#include <iostream>
using namespace std;
main()
{
int numeros[20], i=0;
cout << "Introduce 10 numeros para almacenarlos en un arreglo \n \n ";
do{ //se recorre el arreglo para introducir los datos
cout << "Introduce el numero " << i+1 << " : \n";
cin >>numeros [i];
i++;
}while (i <=9);
cout << "Escribe los 10 numeros almacenados en el arreglo numeros \n \n ";
i=0;
do{
cout << " "<< numeros [i];
i++;
}while (i <=9) ;
cout << endl;
system("pause");
Vector: Acceso o recorrido
Ejemplo 4
 Programa que considera el vector num de n números y realiza:
 lectura del vector ;
 cálculo de la suma de los valores del vector
 cálculo de la media de los valores
#include <iostream>
using namespace std;
main()
{
int n,i;
float num[100],suma,media;
cout<<"Introduce cuantos numeros desea guardar en un arreglo ";
cin >> n;
if (n>0) {
suma=0;
for(i=0; i<=n-1;i++){
cout <<"Introduce el valor "<<i+1<<": ";
cin >> num[i];
suma= suma + num[i];
}
media = suma/n;
cout <<"la media es: "<<media <<endl;
}
else cout <<"\n ERROR ";
system("pause");
Vector: Acceso o recorrido
Objetos (1)
 Para los ejemplos de arreglos utilizados en objetos, se
emplearán:
 la clase Persona1.hpp (que se muestra en la siguiente
diapositiva y no se modifica)
 la clase Estudiante1.hpp (que se muestra en la siguiente
diapositiva y no se modifica)
 el programa principal (que se modificará de acuerdo a
lo que se desee mostrar).
Vector: Acceso o recorrido
Objetos (2)
//clase Estudiante1
#include <iostream>
#include <string>
#include "Persona1.hpp"

class Estudiante1: public Persona1 {


//Atributos de instancia
private:
string facultad;
float promedio;
public:
Estudiante1(string n, string r, int e, string facultad, float promedio) : Persona1(n,r,e){
//Constructor
this->facultad = facultad;
this->promedio = promedio;
}
string getFacultad() { return facultad; }
float getPromedio() { return promedio; }
void setFacultad(string nuevaFacultad) { facultad = nuevaFacultad; }
void setPromedio(float nuevoPromedio) { promedio = nuevoPromedio;
}
};
Vector: Acceso o recorrido Objetos (3)
Promedio con while y do...while
#include <iostream>
#include <string>
#include "Estudiante1.hpp"
using namespace std;

main()
{
float cal,suma=0.0,promedio;
int i;
//SOLO SE UTILIZA LA CLASE ESTUDIANTE PARA CALCULAR EL PROMEDIO MEDIANTE CICLO WHILE Y DO...WHILE
cout<<"\n\n CALCULANDO EL PROMEDIO DE UN ESTUIANTE\n\n " <<endl;
//calcular promedio
i=1;
while(i<5)
{
do{
cout<<"introduce calificacion " << i << ": " <<endl;
cin>>cal;
}while((cal < 5) || (cal > 10) );
suma+=cal;
i++;
}
promedio=suma/4;
Estudiante1 e("Jacobo", "Merida", 19, "Ingenieria",promedio);
cout << "Nombre: " << e.getNombre() << endl;
cout << "Residencia: "<< e.getResidencia() << endl;
cout <<"Edad: "<< e.getEdad() << endl;
cout <<"Facultad: "<< e.getFacultad() << endl;
cout <<"Promedio: "<< e.getPromedio() << endl; if (e.getPromedio() > 9)
cout << e.getNombre() << " es un alumno excelente " << endl;
e.mayorEdad();
system("pause");
}
Vector: Acceso o recorrido Objetos (4)
Promedio con while, do…while y arreglo
#include <iostream>
#include <string>
#include "Estudiante1.hpp"
using namespace std;

main()
{
float cal[4],suma=0.0,promedio; //Ahora cal se declara como un arreglo de al menos 4 elementos reales
int i;
//SOLO SE UTILIZA LA CLASE ESTUDIANTE PARA CALCULAR EL PROMEDIO CON WHILE Y DO...WHILE Y ARREGLO
cout<<"\n\n CALCULANDO EL PROMEDIO DE UN ESTUIANTE\n\n " <<endl;
//calcular promedio
i=0;
while(i<4)
{
do{
cout<<"introduce calificacion " << i+1 << ": " <<endl;
cin>>cal[i];
}while((cal[i] < 5) || (cal[i] > 10) );
suma+=cal[i];
i++;
}
promedio=suma/4;
Estudiante1 e("Jacobo", "Merida", 19, "Ingenieria",promedio);
cout << "Nombre: " << e.getNombre() << endl;
cout << "Residencia: "<< e.getResidencia() << endl;
cout <<"Edad: "<< e.getEdad() << endl;
cout <<"Facultad: "<< e.getFacultad() << endl;
cout <<"Promedio: "<< e.getPromedio() << endl;
if (e.getPromedio() > 9)
cout << e.getNombre() << " es un alumno excelente " << endl;
e.mayorEdad();
system("pause");
}
Vector: Acceso o recorrido Objetos (5)
Promedio con for, do..while y arreglo
#include <iostream>
#include <string>
#include "Estudiante1.hpp"
using namespace std;

main()
{
float cal[4],suma=0.0,promedio; //Ahora cal se declara como un arreglo de al menos 4 elementos reales
int i;
//SOLO SE UTILIZA LA CLASE ESTUDIANTE PARA CALCULAR EL PROMEDIO CON FOR Y DO...WHILE, ARREGLO
cout<<"\n\n CALCULANDO EL PROMEDIO DE UN ESTUIANTE\n\n " <<endl;
//calcular promedio
for(i=0;i<4;i++) {
do{
cout<<"introduce calificacion " << i+1 << ": " ;
cin>>cal[i];
}while((cal[i] < 5) || (cal[i] > 10) );
suma+=cal[i];
}
promedio=suma/4;
Estudiante1 e("Jacobo", "Merida", 19, "Ingenieria",promedio);
cout << "Nombre: " << e.getNombre() << endl;
cout << "Residencia: "<< e.getResidencia() << endl;
cout <<"Edad: "<< e.getEdad() << endl;
cout <<"Facultad: "<< e.getFacultad() << endl;
cout <<"Promedio: "<< e.getPromedio() << endl;
if (e.getPromedio() > 9)
cout << e.getNombre() << " es un alumno excelente " << endl;
e.mayorEdad();
system("pause");
}
Vector: Acceso o recorrido Método (1)
Clase Estudiante y Programa Principal
//clase EStudiante2
#include <iostream>
#include <string>
#include "Persona1.hpp"

class Estudiante2: public Persona1 {


//Atributos de instancia
private:
string facultad;
float promedio;
string materia[5]; // se agrega la variable de instancia materia como un arreglo de al menos 5 cadenas
public:
//Constructor
Estudiante2(string n, string r, int e, string facultad, float promedio) : Persona1(n,r,e){
this->facultad = facultad;
this->promedio = promedio;
}
string getFacultad() {
return facultad; }
float getPromedio() {
return promedio; }
void setFacultad(string nuevaFacultad) {
facultad = nuevaFacultad; }
void setPromedio(float nuevoPromedio) {
promedio = nuevoPromedio; }
void setMateria(string nuevamateria, int i){ //se asignan nuevos valores al arreglo de nombres de materias
materia[i]=nuevamateria; }
void escribirMateria(){ / /se escriben las materias almacenadas en el arreglo materia
int i;
for(i=0;i<5;i++) cout << "Materia " << i+1<<": "<<materia[i]<<endl;
}
Vector: Acceso o recorrido Método (2)
Clase Estudiante y Programa Principal
#include <iostream>
#include <string>
#include "Estudiante2.hpp"
using namespace std;
main()
{
float cal[4],suma=0.0,promedio; //Ahora cal se declara como un arreglo de al menos 4 elementos reales
int i;
string mat;
//SOLO SE UTILIZA LA CLASE ESTUDIANTE PARA CALCULAR EL PROMEDIO MEDIANTE CICLO WHILE Y DO...WHILE
cout<<"\n\n CALCULANDO EL PROMEDIO DE UN ESTUIANTE\n\n " <<endl;
//calcular promedio
for(i=0;i<4;i++) {
do{
cout<<"introduce calificacion " << i+1 << ": " ;
cin>>cal[i];
}while((cal[i] < 5) || (cal[i] > 10) );
suma+=cal[i];
}
promedio=suma/4;
Estudiante2 e("Jacobo", "Merida", 19, "Ingenieria",promedio);
cout << "Nombre: " << e.getNombre() << endl;
cout << "Residencia: "<< e.getResidencia() << endl;
cout <<"Edad: "<< e.getEdad() << endl;
cout <<"Facultad: "<< e.getFacultad() << endl;
cout <<"Promedio: "<< e.getPromedio() << endl;
cin.ignore();
for(i=0;i<5;i++){ // se utiliza para ingresar las materias al arreglo mediante el método setMateria(...);
cout <<"Introduce la materia " << i+1 <<": "<< endl;
getline(cin,mat);
e.setMateria(mat,i);
}
e.escribirMateria();//escribe las cinco materias ingresadas al arreglo materia
if (e.getPromedio() > 9) cout << e.getNombre() << " es un alumno excelente " << endl;
e.mayorEdad();
system("pause");
}
Eliminar un carácter en una cadena
#include <iostream>
#include <string>
using namespace std;
string eliminarcaracter(string cad, char car)
{
int i,j;
for(i=0;i<cad.length();i++)
if (cad[i]==car)
for(j=i;j<cad.length();j++) /* se recorren los caracteres una posición anterior para eliminar el caracter buscado*/
cad[j]=cad[j+1];
return cad;
}
main()
{
char car;
string cad;
cout << "Introduce una cadena: ";
getline(cin,cad);
cout << "Introduce caracter a eliminar de la cadena: ";
cin >> car;
cout << "Cadena: " << eliminarcaracter(cad, car) << endl;
system("pause");
}
Vector: Inserción

 La operación insertar consiste en colocar un nuevo


elemento, en una determinada posición del vector; ello
supone:
 no perder la información, que pudiera hallarse anteriormente,
en la posición que va a ocupar, el valor a insertar.
 que el vector no tenga todas sus casillas ocupadas con datos.
 que cada vez que insertamos un dato en una posición, se
deben de correr todos los elementos posteriores a esa
posición, cuidando en que no se pierda ninguno de estos
datos.
Vector: Inserción
Ejemplo
 Programa que lee los elementos de un vector e inserta un
elemento en la posición indicada por el usuario.
 Análisis
 Se necesita:
 Definir un tamaño del vector: TAMAÑO 100;
 Leer el tamaño (n) del vector
 Comprobar que n es menor que el TAMAÑO del vector
 Utilizar ciclo for que lea los elementos del vector
 Solicitar (cin) el número (num) a insertar en el vector
 Solicitar (cin) la posición pos dónde se insertará num
 Verificar que pos es menor o igual a n
 Utilizar ciclo Mientras que permita la inserción del número,
moviendo los elementos existentes a la derecha
#include <iostream>
#define TAMANO 100 //definida como una constante
using namespace std;
main()
{
int n, i,pos,num, arreglo[100];
cout << "Introduce el tamaño del vector ";
cin >>n;
if ((n > 0) && (n < TAMANO))
{
for(i=0 ;i<=n-1;i++){
cout << "Introduce el valor " <<i+1<<" ";
cin >>arreglo[i];
}
cout << "Introduce el elemento a insertar: ";
cin >> num;
cout << "Introduce la posición donde se insertará el elemento: ";
cin >> pos;
if (pos<=n)
{ i=n-1; //Indicar número de posiciones del vector que ya están ocupadas
while (i>=pos) {//movemos los elementos a la derecha
arreglo[i+1]= arreglo[i];
i=i-1;
}
arreglo[pos]=num; //Se inserta el elemento elem en la posición pos
n=n+1; //Se actualiza el tamaño porque el vector tiene un elemento más
for(i=0 ;i<=n-1;i++)
cout << arreglo[i] << endl;
}
else cout << "\n ERROR: Se ha rebasado el límite del vector ";
}
else cout << "\n ERROR: No se pueden insertar elementos en el arreglo ";
system("pause");
}
Tarea de Vectores (1)

 Para cada ejercicio elaborar un programa en C++ y prueba de ejecución.


1. Determinar la cantidad de números primos existentes en un arreglo de n
números denominado vector.
2. Realizar un programa en C++ que determine cuantas veces aparece un número
num introducido por el usuario, en un arreglo de números denominado vector;
hacer (do) esto mientras (while) el usuario desee continuar buscando números.
3. Elaborar un programa en C++ que inserte un número introducido por el
usuario en la posición indicada por el usuario e indique cuantos números se
recorrieron para insertarlo.
4. Realizar un programa en C++ que ordene los n elementos introducidos por un
usuario en el arreglo num, que escriba el arreglo ordenado, el número mínimo y
máximo de esos elementos.
5. Generar los n primeros números pares y almacenarlos en un arreglo.
6. Sumar dos arreglos unidimensionales de longitud n.
7. Obtener el producto punto de dos vectores.
8. Generar los n primeros números primos y almacenarlos en un arreglo.
Tarea de Vectores (2)

 Para cada ejercicio elaborar programa en C++ y hacer varias pruebas.


1. Introducir números en un arreglo llamado vector y un número num, para establecer
cuántas veces cada número del vector es divisible por num de manera exacta en los
enteros.
2. Leer N números en un arreglo y obtener el promedio solo de los números pares.
3. Introducir un conjunto de m números, determinar la cantidad de números positivos y
negativos del conjunto.
4. Leer n números en un arreglo, sumar solo los que no sean divisibles por un número x.
5. Leer dos números y un carácter, si el carácter es ‘+’, sumar ambos números, si es ‘-‘,
restarlos, si es ‘*’ multiplicarlos, si es ‘/’ dividirlos, en caso contrario escribir el mensaje
‘Fin’.
6. Almacenar el sueldo de n profesores en un arreglo. El sueldo se determina de acuerdo a
las horas que trabaje, la categoría y grado que tenga, consideré la siguiente tabla.
Categoría Maestría Doctorado
A $60 $80
B $80 $100
C $100 $120
D $120 $140
E $140 $160
F $160 $180
Tarea de Vectores (3)

 Para cada ejercicio elaborar programa en C++ y prueba de escritorio.


1. Introducir dos frases por teclado y compararlas si son iguales o no.
2. Diseñar un programa, que muestre el siguiente menú y utilice un vector:
 Introducir n números.
 Listar los n números.
 Buscar un número.
 Salir del programa.