Proyecto 0151 14 UNA Mora Coto 2015 Programacin

  • Slides: 89
Download presentation
Proyecto 0151 -14 UNA – Mora & Coto, 2015 Programación Orientada a Objetos Compilado

Proyecto 0151 -14 UNA – Mora & Coto, 2015 Programación Orientada a Objetos Compilado por: Mag. Sonia Mora. Dra. Mayela Coto. EIF 200 FUNDAMENTOS DE INFORMÁTICA

Problema p 1. 2. 3. Suponga que su profesor de Fundamentos desea realizar un

Problema p 1. 2. 3. Suponga que su profesor de Fundamentos desea realizar un análisis de las calificaciones obtenidas durante el I examen parcial. En particular desea: Calcular el promedio de calificación obtenido Encontrar la calificación más alta y la más baja. Determinar cuántos estudiantes tuvieron una calificación superior a 8, cuántos una calificación entre 6 y 8, y cuántos una calificación inferior a 6.

Problema p ¿Cómo podemos resolverlo? p ¿Qué estructuras de programación son necesarias? p ¿Qué

Problema p ¿Cómo podemos resolverlo? p ¿Qué estructuras de programación son necesarias? p ¿Qué estructuras de datos son necesarias? ARREGLOS

Arreglos p Se utilizan cuando se necesita almacenar múltiples valores del mismo tipo. p

Arreglos p Se utilizan cuando se necesita almacenar múltiples valores del mismo tipo. p Permiten agrupar muchos datos usando un mismo identificador. p El tamaño o el número de elementos de un arreglo debe ser constante y debe ser declarado con anterioridad. p La memoria utilizada por los arreglos se conoce como memoria estática.

Arreglos En el POO vamos a desarrollar colecciones p Estas clases tienen como atributos

Arreglos En el POO vamos a desarrollar colecciones p Estas clases tienen como atributos estructuras o arreglos multidimensionales. p En este curso se estudiarán arreglos unidimensionales (vectores) y bidimensionales (matrices) p Hay varias formas de definirlos: p n Arreglos estáticos de longitud fija o de “longitud variable”.

Arreglos unidimensionales Un arreglo es un grupo de posiciones en memoria relacionadas entre sí,

Arreglos unidimensionales Un arreglo es un grupo de posiciones en memoria relacionadas entre sí, por el hecho de que todas tienen el mismo nombre y son del mismo tipo. Ejemplo: int valores[5] Se utilizan cuando se necesita almacenar y procesar múltiples valores del mismo tipo. Permiten agrupar datos usando un mismo identificador. 25 4 33 14 5 [0] [1] [2] [3] [4]

Arreglos unidimensionales Para referirse a una posición en particular o elemento dentro del arreglo,

Arreglos unidimensionales Para referirse a una posición en particular o elemento dentro del arreglo, se especifica el nombre del arreglo y el número de posición del elemento particular dentro del mismo (un índice entero) El índice de los arreglos inicia en cero (0), el primer elemento de un arreglo tendrá siempre índice cero (0), mientras que el último elemento tiene como índice la longitud del arreglo menos uno. int a = valores[3] a = 14 valores[2] = 100 25 4 33 14 5 [0] [1] [2] [3] [4] 25 4 100 14 5 [0] [1] [2] [3] [4]

Arreglos unidimensionales p Para crear arreglos en C++, hay que indicar: n El tipo

Arreglos unidimensionales p Para crear arreglos en C++, hay que indicar: n El tipo de los elementos p ejemplo: int, char, float, bool, string p o un tipo definido por el programador El nombre del arreglo n El tamaño del arreglo, entre [ ] n Sintaxis <tipo de los elementos> <identificador del arreglo> [tamaño];

Arreglos unidimensionales p Declaración n p Nombre del grupo: n p char vector[4]; //

Arreglos unidimensionales p Declaración n p Nombre del grupo: n p char vector[4]; // forma una secuencia de cuatro elementos de tipo char vector Nombre de los elementos n n vector[0] → primer elemento vector[1] → segundo elemento vector[2] → tercer elemento vector[3] → cuarto elemento

Arreglos unidimensionales p p p El tamaño o el número de elementos de un

Arreglos unidimensionales p p p El tamaño o el número de elementos de un arreglo debe ser determinado y es declarado con anterioridad, en tiempo de compilación o en tiempo de ejecución (mediante punteros). Para recorrer un vector es necesario usar un ciclo. El ciclo clásicamente usado para recorrer un arreglo es un ciclo for.

Arreglos unidimensionales p Un arreglo unidimensional por lo general es llamado vector. p Una

Arreglos unidimensionales p Un arreglo unidimensional por lo general es llamado vector. p Una colección es una clase que “contiene” elementos con algún significado. p Vamos a definir colecciones que almacenan datos de un mismo tipo, de forma particular: a través de un vector.

Clase Colección class Coleccion { private: int vector[50]; int tamano; int cantidad; . .

Clase Colección class Coleccion { private: int vector[50]; int tamano; int cantidad; . . . } Número máximo de elementos del vector Atributo que indica el tamaño real del vector de acuerdo a las necesidades particulares del usuario Atributo que indica la cantidad de elementos que el vector tiene en uso en un momento dado

Clase Colección: métodos constructores class Coleccion { private: int vector[50]; int tamano; int cantidad;

Clase Colección: métodos constructores class Coleccion { private: int vector[50]; int tamano; int cantidad; public: Coleccion() { cantidad=0; tamano= 50; for(int i=0; i< tamano; i++) vector[i]=0; } class Coleccion { private: int vector[50]; int tamano; int cantidad; Dos tipos de constructores Coleccion(int n) { cantidad=0; tamano= n; for(int i=0; i< tamano; i++) vector[i]=0; }

Clase Colección: métodos set y get class Coleccion { private: int vector[50]; int tamano;

Clase Colección: métodos set y get class Coleccion { private: int vector[50]; int tamano; int cantidad; int get. Cantidad() {return cantidad; } int get. Tamano() { return tamano; } void set. Cantidad(int can) { if ((can < tamano)&&(can >0)) cantidad = can; } void set. Tamano(int ptamano) // NO se implementa { tamano = ptamano; }

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: creación de

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: creación de objetos int main() { int n; cout<<"Que tamano desea para el arreglo? "<<endl; cin>>n; Coleccion Numeros(n); // construimos un vector de n posiciones …. Numeros Si n=8 } vector 0 0 0 0 [0] [1] [2] [3] [4] [5] [6] [7] cantidad=0 tamano=8 … [49]

Clase Coleccion class Coleccion { private: int vector[50]; int tamano; int cantidad; Para que

Clase Coleccion class Coleccion { private: int vector[50]; int tamano; int cantidad; Para que la colección Numeros sea útil, debemos tener la capacidad de “administrarlo”. p De esta manera se requieren métodos para: p n n n imprimir el contenido realizar operaciones con sus valores insertar un elemento en el vector eliminar un elemento en el vector buscar un elemento en el vector etc……

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: insertar Elemento

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: insertar Elemento void insertar. Ele(int elem ) Este método agrega un elemento al vector y modifica la cantidad { if (cantidad < tamano) de elementos que el vector contiene { vector[cantidad]=elem; set. Cantidad(cantidad+1); } } Si n=8 Numeros vector … 25 0 0 0 0 [0] [1] [2] [3] [4] cantidad=1 En el main Numeros. insertar. Ele(25); [5] [6] [7] tamano=8 [49]

insertar Elemento versión mejorada class Coleccion { private: int vector[50]; int tamano; int cantidad;

insertar Elemento versión mejorada class Coleccion { private: int vector[50]; int tamano; int cantidad; bool insertar. Ele(int elem ) { if (cantidad < tamano) { vector[cantidad]=elem; set. Cantidad(cantidad+1); return true; } else return false; } En el main if (! Numeros. insertar. Ele(25)) cout<<“No se pudo insertar el elemento”; else …. .

Clase Coleccion p class Coleccion { private: int vector[50]; int tamano; int cantidad; Escriba

Clase Coleccion p class Coleccion { private: int vector[50]; int tamano; int cantidad; Escriba la sección del main() que permita agregar en el vector (usando el método anterior) valores digitados por el usuario.

Note que debe considerarse la cantidad de elementos que tiene el vector para no

Note que debe considerarse la cantidad de elementos que tiene el vector para no sobrepasar su tamaño Clase Coleccion …… // recuerde que la colección Numeros ya fue creado int num, cont, k, elem; No deben agregarse más elementos de los indicados por el usuario cout<<"cuántos elementos desea agregar? "; cin>>num; cont=0; while (cont<num) { cout<<"digite el valor del elemento "<<cont+1<<": "; cin>>elem; Numeros. insertar. Ele(elem); Si num=5 cont++; } …. vector Números 25 8 10 41 6 12 0 0 [0] [1] [2] [3] [4] [5] [6] [7] Cantidad=6

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: to. String()

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: to. String() p En la clase Coleccion escriba un método para mostrar los elementos de un vector (debe incluir <sstream>) string to. String(){ stringstream s; for(int i=0; i<cantidad; i++) { s<< "elemento "<<i<<" es: "<<vector[i]<<endl; } return s. str(); } En el main() cout<<"Vector Numeros : cout<<Numeros. to. String(); "<<endl;

Clase Colección: eliminar elementos p class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: eliminar elementos p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que permita eliminar el último elemento del arreglo

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: eliminar último

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: eliminar último elemento void eliminar. Ele( ) { set. Cantidad(cantidad-1); } Este método modifica la cantidad de elementos que el vector contiene Numeros «basura» vector 25 8 10 41 6 12 0 0 [0] [1] [2] [3] [4] [5] [6] [7] Cantidad=5 En el main Numeros. Eliminar. Ele();

Clase Colección: suma de elementos p class Coleccion { private: int vector[50]; int tamano;

Clase Colección: suma de elementos p class Coleccion { private: int vector[50]; int tamano; int cantidad; Haga un método que sume los elementos de la colección. int sumar. Ele() { int suma=0; for(int i=0; i<cantidad; i++) suma = suma + vector[i]; return suma; }

Clase Colección: media de elementos p class Coleccion { private: int vector[50]; int tamano;

Clase Colección: media de elementos p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método para calcular la media de sus elementos float media() { int suma=0; for(int i=0; i<cantidad; i++) suma = suma + vector[i]; return suma/cantidad; }

media de elementos versión mejorada class Coleccion { private: int vector[50]; int tamano; int

media de elementos versión mejorada class Coleccion { private: int vector[50]; int tamano; int cantidad; float media() { return sumar. Ele()/cantidad; } mejor forma En el main cout<<"La media de los elementos del vector <<Numeros. media()<<endl; es "

Casting necesario Al ser enteros C++ retorna un valor entero float media() { return

Casting necesario Al ser enteros C++ retorna un valor entero float media() { return sumar. Ele()/cantidad; } casting float media() { return (float) sumar. Ele()/cantidad; }

Clase Colección: valor máximo p class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: valor máximo p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que retorne el valor máximo del vector.

Clase Colección: valor máximo int valor. Max(){ int max = vector[0]; for(int i=1; i<cantidad;

Clase Colección: valor máximo int valor. Max(){ int max = vector[0]; for(int i=1; i<cantidad; i++) if (vector[i]>max) { max=vector[i]; } return max; } En el main cout<<“El elemento maximo del vector es: " <<Numeros. valor. Max()<<endl; class Coleccion { private: int vector[50]; int tamano; int cantidad;

Clase Colección: posición del mayor p class Coleccion { private: int vector[50]; int tamano;

Clase Colección: posición del mayor p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que retorne la posición del vector en el que se encuentra el valor máximo

Clase Colección: posición del mayor class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: posición del mayor class Coleccion { private: int vector[50]; int tamano; int cantidad; int pos. Max() { int posic=0; int max=vector[0]; for(int i=1; i<cantidad; i++) if (vector[i]>max) { posic= i; max=vector[i]; } return posic; } En el main cout<<"La posicion del elemento maximo del vector es: " <<Numeros. pos. Max()<<endl;

Clase Colección: posición del menor p class Coleccion { private: int vector[50]; int tamano;

Clase Colección: posición del menor p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que retorne la posición del vector en el que se encuentra el valor mínimo

Clase Colección: posición del menor class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: posición del menor class Coleccion { private: int vector[50]; int tamano; int cantidad; int pos. Min() { int posic=0; int min=vector[0]; for(int i=1; i<cantidad; i++) if (vector[i]<min) { posic= i; min=vector[i]; } return posic; } En el main cout<<"La posicion del elemento minimo del vector es: " <<Numeros. pos. Min()<<endl;

Clase Colección: intercambio mínimo y máximo p class Coleccion { private: int vector[50]; int

Clase Colección: intercambio mínimo y máximo p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que intercambie los valores máximo y mínimo del vector

Clase Colección: intercambio mínimo y máximo class Coleccion { private: int vector[50]; int tamano;

Clase Colección: intercambio mínimo y máximo class Coleccion { private: int vector[50]; int tamano; int cantidad; void intercambia. Max. Min() { int i, j, aux; i=pos. Max(); j=pos. Min(); aux= vector[i]; vector[i]=vector[j]; vector[j]=aux; } En el main cout<<"Intercambiando maximo y minimo en el vector "<<endl; Numeros. intercambia. Max. Min();

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: invertir elementos

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: invertir elementos En la clase Coleccion escriba un método para invertir los elementos de un vector p Por ejemplo: p vector 4 6 8 9 2 [0] [1] [2] [3] [4] vector 2 9 8 6 4 [0] [1] [2] [3] [4]

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: invertir elementos

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: invertir elementos void invertir. Ele() { int i, fin= cantidad-1, aux; for (i=0; i<cantidad/2; i++){ aux= vector[i]; vector[i]=vector[fin]; vector[fin]=aux; fin --; } } En el main Numeros. invertir. Ele(); cout<<"El vector invertido queda como: Numeros. to. String(); "<<endl;

Clase Colección: intercambiar dos posiciones class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: intercambiar dos posiciones class Coleccion { private: int vector[50]; int tamano; int cantidad; Otra forma: Primero necesitamos un método que nos permita intercambiar dos posiciones determinadas void intercambia. Pos( int i, int j) { int temp; temp = vector[i]; vector[i] = vector[j]; vector[j]=temp; }

Clase Colección: invertir los elementos class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: invertir los elementos class Coleccion { private: int vector[50]; int tamano; int cantidad; void invertir. Ele() { int k, i; for(i=0, k=cantidad-1; i<k; i++, k--) intercambia. Pos( i, k); } En el main Numeros. invertir. Ele(); cout<<"El vector invertido queda como: Numeros. to. String(); "<<endl;

Clase Colección: encontrar un elemento p class Coleccion { private: int vector[50]; int tamano;

Clase Colección: encontrar un elemento p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que retorne true si un elemento determinado se encuentra en el arreglo y false si no.

Clase Colección: encontrar un elemento class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: encontrar un elemento class Coleccion { private: int vector[50]; int tamano; int cantidad; bool encuentra. Elemento(int elem) { for (int i=0; i<cantidad; i++) if (vector[i]==elem) return true; return false; } En el main cout<<"que elemento desea buscar? "; cin>>elem; if ( Numeros. encuentra. Elemento(elem)) cout<<elem<<" si se encuentra en el vector"<<endl; else cout<<elem<<" no se encuentra en el vector"<<endl;

Clase Colección: búsqueda de la posición p class Coleccion { private: int vector[50]; int

Clase Colección: búsqueda de la posición p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion escriba un método que retorne la posición de un elemento determinado en el arreglo. Si el elemento no se encuentra retorna -1.

Clase Colección: búsqueda de la posición class Coleccion { private: int vector[50]; int tamano;

Clase Colección: búsqueda de la posición class Coleccion { private: int vector[50]; int tamano; int cantidad; int encuentra. Pos. Elemento(int elem) { for (int i=0; i<cantidad; i++) if (vector[i]==elem) return i; return -1; } En el main cout<<“Que elemento desea buscar? "; cin>>elem; cout<<"el elemento "<<elem<<" se encuentra en la posicion " <<Numeros. encuentra. Pos. Elemento(elem);

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: eliminar un

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Colección: eliminar un elemento p En la clase Coleccion escriba un método que permita eliminar el elemento en la posición x del arreglo. vector Numeros 25 8 [0] [1] 10 41 6 [2] [3] [4] 41 6 12 12 0 0 [5] [6] [7] 0 0 0 [5] [6] Cantidad=6 Tamano=8 x=2 vector Numeros 25 8 [0] [1] [2] [3] [4] [7] Cantidad=5 Tamano=8

Clase Colección: eliminar un elemento class Coleccion { private: int vector[50]; int tamano; int

Clase Colección: eliminar un elemento class Coleccion { private: int vector[50]; int tamano; int cantidad; void eliminar. Elemento. Pos(int pos) { for (int i=pos; i<cantidad-1; i++) vector[i]=vector[i+1]; cantidad--; } En el main cout<<"que posicion desea eliminar? "; cin>>pos; Numeros. eliminar. Elemento. Pos(pos); Numeros. Imprime. Vector();

Clase Colección: insertar un elemento en 1 posición p class Coleccion { private: int

Clase Colección: insertar un elemento en 1 posición p class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion diseñe un método que permita insertar el valor x en el lugar k-ésimo de un vector, produciendo un corrimiento hacia la derecha de los restantes elementos. Ejemplo: si el vector 25 Cantidad=6 Tamano=8 [0] 8 10 41 6 12 0 0 [1] [2] [3] [4] [5] [6] [7] y el llamado es insertar. Ele. Pos(15, 4), el vector quedaría como: Cantidad=7 Tamano=8 25 8 10 41 15 6 12 0 [0] [1] [2] [3] [4] [5] [6] [7] Suponga que el tamaño definido del vector permite la inserción.

Clase Colección: insertar un elemento en 1 posición class Coleccion { private: int vector[50];

Clase Colección: insertar un elemento en 1 posición class Coleccion { private: int vector[50]; int tamano; int cantidad; void insertar. Ele. Pos(int elem, int pos) { for (int i=cantidad; i>pos; i--) vector[i] = vector[i-1]; //hace un corrimiento a la derecha para abrir espacio vector[pos] = elem; cantidad++; } En el main cout<<"Que elemento desea insertar y en que posicion? "; cin>>elem>>pos; Numeros. inserta. Elem. Pos(elem, pos); Numeros. to. String();

Tarea para entregar class Coleccion { private: int vector[50]; int tamano; int cantidad; En

Tarea para entregar class Coleccion { private: int vector[50]; int tamano; int cantidad; En la clase Coleccion p n n Escriba un método que reciba dos elementos a y b y reemplace cada ocurrencia del elemento a por el b. Escriba un método que reciba un elemento y devuelva el número de veces que aparece el elemento en el arreglo.

ORDENAMIENTO Imagen de ordenamiento por Nmnogueira en English Wikipedia (Own work by uploader using

ORDENAMIENTO Imagen de ordenamiento por Nmnogueira en English Wikipedia (Own work by uploader using Matlab) [CC BY-SA 2. 5 (http: //creativecommons. org/licenses/by-sa/2. 5)], via Wikimedia Commons. EIF 200 FUNDAMENTOS DE INFORMÁTICA Imagen de Lupa de Dominio Público

Problema p Se requiere ordenar las notas del I examen parcial de menor a

Problema p Se requiere ordenar las notas del I examen parcial de menor a mayor, ya que de esta forma es más sencillo identificar cuántos estudiantes necesitan ayuda extra. p Hay varias formas de resolver el problema de ordenamiento

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Coleccion En la

class Coleccion { private: int vector[50]; int tamano; int cantidad; Clase Coleccion En la clase Coleccion escriba un método para ordenar los elementos de un vector p Por ejemplo: p vector 4 6 8 9 2 [0] [1] [2] [3] [4] vector 2 4 6 8 9 [0] [1] [2] [3] [4]

Ordenamiento de burbuja (bubble sort) Algoritmo de ordenamiento más sencillo. Revisa cada elemento del

Ordenamiento de burbuja (bubble sort) Algoritmo de ordenamiento más sencillo. Revisa cada elemento del arreglo que va a ser ordenado con el siguiente elemento, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda el arreglo hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. Obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas".

Ordenamiento burbuja https: //www. youtube. com/v/ly. ZQPj. UT 5 B 4? start=52&end=2 36&autoplay=1 Created

Ordenamiento burbuja https: //www. youtube. com/v/ly. ZQPj. UT 5 B 4? start=52&end=2 36&autoplay=1 Created at Sapientia University, Tirgu Mures (Marosvásárhely), Romania. Directed by Kátai Zoltán and Tóth László. In cooperation with "Maros Művészegyüttes", Tirgu Mures (Marosvásárhely), Romania. Choreographer: Füzesi Albert. Video: Lőrinc Lajos, Körmöcki Zoltán. Supported by "Szülőföld Alap", MITIS (NGO) and evoline company.

Ordenamiento de burbuja (bubble sort) Imagine que el arreglo a ordenar se coloca verticalmente

Ordenamiento de burbuja (bubble sort) Imagine que el arreglo a ordenar se coloca verticalmente y que los objetos menos “pesados” suben más rápidamente hacia el tope del arreglo como las burbujas menos pesadas lo hacen a la superficie. Se hacen repetidas pasadas sobre el arreglo. Si dos objetos adyacentes están desordenados entonces se intercambian de posición. El efecto de esta operación es que en el primer pase el objeto más “pesado” es llevado hacia la última posición; en el segundo pase, el segundo objeto más pesado es llevado a la penúltima posición y así sucesivamente. De forma general en la pasada i-ésima, el i-ésimo objeto menos “pesado” es llevado a la posición i.

Clase Coleccion class Coleccion { private: int vector[50]; int tamano; int cantidad; void Orden.

Clase Coleccion class Coleccion { private: int vector[50]; int tamano; int cantidad; void Orden. Bur. Vector() //ordena el vector por el método burbuja { int aux, i, j; for (i =cantidad-1; i > 0; i--) for(j = 0; j <i; j++) if(vector[j] > vector[j+1]) { aux = vec[j]; vector[j] = vector[j+1]; vector[j+1] = aux; } } En el main A. Orden. Bur. Vector(); cout<<"El vector A ordenado queda como: "<<endl; cout<<A. to. String(); Imagen “an example on bubble sort” por Swfung 8 CC-SA 3, 0 Tomado de https: //en. wikipedia. org/wiki/File: Bubble-sort-example-300 px. gif

Ordenamiento por selección https: //www. youtube. com/v/Ns 4 TPTC 8 whw? start=7&end=387& autoplay=1 Created

Ordenamiento por selección https: //www. youtube. com/v/Ns 4 TPTC 8 whw? start=7&end=387& autoplay=1 Created at Sapientia University, Tirgu Mures (Marosvásárhely), Romania. Directed by Kátai Zoltán and Tóth László. In cooperation with "Maros Művészegyüttes", Tirgu Mures (Marosvásárhely), Romania. Choreographer: Füzesi Albert. Video: Lőrinc Lajos, Körmöcki Zoltán. Supported by "Szülőföld Alap", MITIS (NGO) and evoline company.

Ordenamiento por selección Es uno de los algoritmos más intuitivos de ordenamiento. p Consiste

Ordenamiento por selección Es uno de los algoritmos más intuitivos de ordenamiento. p Consiste en lo siguiente: p n Si el vector consta de «cantidad» elementos, encuentre el elemento de menor valor e intercámbielo con la posición 0, luego tome el menor elemento a partir de la posición 1 e intercámbielo con el de la posición 1 y así sucesivamente hasta intercambiar el menor elemento entre la posición «cantidad-1» y «cantidad» y ubicarlo en la posición «cantidad-1» .

Ordenamiento por selección class Coleccion { private: int vector[50]; int tamano; int cantidad; void

Ordenamiento por selección class Coleccion { private: int vector[50]; int tamano; int cantidad; void Ordena. Seleccion() { int i, k, pos. Menor, temp; for(k = 0; k < cantidad-1; k++) { pos. Menor = k; for(i = k+1; i < cantidad; i++) if(vector[i] < vector[pos. Menor]) pos. Menor = i; if(pos. Menor != k) { temp = vector[pos. Menor]; vector[pos. Menor] = vector[k]; vector[k] = temp; } } }

The sound of sorting p Burbuja n p https: //youtu. be/Cq 7 SMs. QBEUw

The sound of sorting p Burbuja n p https: //youtu. be/Cq 7 SMs. QBEUw Selección n https: //youtu. be/92 Bfux. Hn 2 XE por Timo Bingmann

BÚSQUEDA EIF 200 FUNDAMENTOS DE INFORMÁTICA

BÚSQUEDA EIF 200 FUNDAMENTOS DE INFORMÁTICA

Problemas de búsquedas p Búsquedas en arreglos: n n n p Tiempo Eficacia Eficiencia

Problemas de búsquedas p Búsquedas en arreglos: n n n p Tiempo Eficacia Eficiencia Posibles soluciones: n n Arreglos ordenados (vs costo de ordenarlos) Búsquedas especiales

Búsqueda de un elemento en un arreglo ordenado p class Coleccion { private: int

Búsqueda de un elemento en un arreglo ordenado p class Coleccion { private: int vector[50]; int tamano; int cantidad; Si se quiere buscar un elemento en un arreglo ordenado, NO hace falta recorrer todo el arreglo para determinar que el elemento no se encuentra Ejemplo: si el vector Cantidad=6 Tamano=8 3 8 10 21 36 52 0 0 [0] [1] [2] [3] [4] [5] [6] [7] y se quiere buscar el valor 15, en el momento que se encuentra el valor 21 (21>15) se puede detener la búsqueda p Escriba un método que retorne true si el elemento se encuentra en el arreglo y false si no

Búsqueda de un elemento en un arreglo ordenado class Coleccion { private: int vector[50];

Búsqueda de un elemento en un arreglo ordenado class Coleccion { private: int vector[50]; int tamano; int cantidad; bool encuentra. Elem. Ordenado(int elem) { if (elem< vector[0] || elem > vector[cantidad - 1]) return false; else { for (int i = 0; i<cantidad && vector[i]<=elem; i++) if (vector[i]==elem) return true; return false; } } En el main cout<<"que elemento desea buscar? "; cin>>elem; if ( Numeros. encuentra. Elem. Ordenado(elem)) cout<<elem<<" si se encuentra en el vector"<<endl; else cout<<elem<<" no se encuentra en el vector"<<endl;

Búsqueda binaria Se utiliza en arreglos ordenados. p Consiste en tomar el objeto que

Búsqueda binaria Se utiliza en arreglos ordenados. p Consiste en tomar el objeto que ocupa en el arreglo la posición del medio (si la cantidad de objetos es impar se toma el que ocupa la posición mitad - 1) p Se comparan los elementos: p n n n Si el objeto que se busca es mayor entonces hay que buscarlo en la mitad de la derecha. y si es menor se busca en la mitad de la izquierda. Este proceso se repite hasta encontrar el número o concluir que no está.

Búsqueda binaria Intervalo de búsqueda vector Elem 7 2 4 7 8 10 12

Búsqueda binaria Intervalo de búsqueda vector Elem 7 2 4 7 8 10 12 13 0 1 2 3 4 5 6 INI FIN MED = ( INI + FIN) / 2 = (0 + 6 ) / 2 = 3

Búsqueda binaria Intervalo de búsqueda vector Elem 7 INI 2 4 7 8 10

Búsqueda binaria Intervalo de búsqueda vector Elem 7 INI 2 4 7 8 10 12 13 00 11 22 33 44 55 66 FIN MED = ( INI + FIN) / 2 = (0 + 2 ) / 2 = 1

Búsqueda binaria Intervalo de búsqueda vector Elem 7 2 4 7 8 10 12

Búsqueda binaria Intervalo de búsqueda vector Elem 7 2 4 7 8 10 12 13 0 1 2 3 4 5 6 INI FIN MED = ( INI + FIN) / 2 = (2 + 2 ) / 2 = 2 67

Búsqueda binaria bool busqueda. Binaria(int elem) { int inicio=0; int fin=cantidad-1; int mitad; while

Búsqueda binaria bool busqueda. Binaria(int elem) { int inicio=0; int fin=cantidad-1; int mitad; while (inicio <= fin) { mitad = (inicio + fin ) / 2; if (elem == vector [mitad]) return true; else if (elem > vector [mitad]) inicio = mitad+1; else fin = mitad -1; } return false; } class Coleccion { private: int vector[50]; int tamano; int cantidad;

PARÁMETROS EIF 200 FUNDAMENTOS DE INFORMÁTICA

PARÁMETROS EIF 200 FUNDAMENTOS DE INFORMÁTICA

Parámetros p Recuerde…. n La sintaxis que se usa para definir un método es

Parámetros p Recuerde…. n La sintaxis que se usa para definir un método es la siguiente: <Tipo. Devuelto> <identificador> ([<Parámetros>]) { <instrucciones> }

Parámetros p p p Un parámetro es un tipo de variable que es recibida

Parámetros p p p Un parámetro es un tipo de variable que es recibida por un método. Un parámetro influye en el comportamiento o el resultado de la ejecución del método que lo recibe. Tipos: n n n Parámetros de Entrada: contienen datos que son pasados al método desde el código llamador. Parámetros de Salida: contienen datos que son calculados dentro del método y retornados al código llamador. Parámetros de Entrada/Salida: reciben datos desde el código llamador, se modifican los datos, y se retornan al código llamador.

Paso de parámetros Por valor Se utilizan como parámetros de entrada Por referencia Se

Paso de parámetros Por valor Se utilizan como parámetros de entrada Por referencia Se utiliza como parámetros de salida o de entrada/salida

Parámetros por valor Se usan para proporcionar información de entrada a un método Hasta

Parámetros por valor Se usan para proporcionar información de entrada a un método Hasta ahora en todos los métodos estudiados, los parámetros pasados a los métodos han sido pasados por valor Pasar por «valor» indica que a los métodos se han pasado copias de los valores pero nunca las variables Quiere decir que el cambio de un valor de un parámetro no actualiza el valor de la variable que se pasó al método Cuando invocamos un método pasando una variable como parámetro por valor, a pesar de que cambiemos el valor del parámetro dentro del método, la variable original no se ve afectada por ese cambio.

Parámetros por referencia Se usan cuando un método debe modificar el valor de la

Parámetros por referencia Se usan cuando un método debe modificar el valor de la variable pasada como parámetro Está basado en pasar al método una referencia a la variable actual en lugar de su valor La referencia que un método recibe es la dirección de la variable. Las referencias sirven para definir "alias" o nombres alternativos para una misma variable. Para ello se usa el operador de referencia (dirección) (&), el cual devuelve la dirección donde se ubica una variable en la memoria Una limitación es que se pueden pasar sólo variables al método. No se pueden utilizar constantes ni expresiones en la línea de llamada al método.

Parámetros de entrada p p class Coleccion { private: int vector[50]; int tamano; int

Parámetros de entrada p p class Coleccion { private: int vector[50]; int tamano; int cantidad; Son variables locales al método que se inicializan con los valores que existen en la llamada Ejemplo: void eliminar. Ele. Pos(int pos) { for (int i=pos; i<cantidad; i++) vector[i]=vector[i+1]; cantidad--; } En el main cout<<"que posicion desea eliminar? "; cin>>x; Numeros. eliminar. Ele. Pos(x); El método usa el valor que entra en «pos»

Parámetros de salida p class Ecu. Cuadratica {private: int a; int b; int c;

Parámetros de salida p class Ecu. Cuadratica {private: int a; int b; int c; El método fija los valores de los parámetros y los devuelve al main (o al punto donde fue invocado) void raices(float &R 1, float &R 2 ) { R 1 = (-b + sqrt (b*b-4*a*c) / (2*a); R 2 = (-b - sqrt (b*b-4*a*c) / (2*a); } En el main int main() { float x 1, x 2; Ecu. Cuadratica ecuacion. A(2, 2, -12); ecuacion. A. raices(x 1, x 2); cout<< "La solucion a la ecuacion es"<<x 1<<" "<<x 2; return 0; } El método calcula R 1 y R 2 y estos valores son luego accedidos desde el main

Parámetros de entrada y salida void intercambio(int &valor 2) { int aux; aux= valor

Parámetros de entrada y salida void intercambio(int &valor 2) { int aux; aux= valor 2; valor 2=valor; valor=aux; } class Numero { private: int valor; …. . El método recibe valor 2 y lo modifica En el main int main() { int a; Numero num(5) ; a = 10; cout << "a, num ->" << a << ", " << num. get. Valor() << endl; num. intercambio(a); cout << "a, num ->" << a << ", " << num. get. Valor() << endl; return 0; }

Cuando se utilizan parámetros por valor y por referencia se deben tener presentes los

Cuando se utilizan parámetros por valor y por referencia se deben tener presentes los siguientes aspectos: Resumiendo… Los parámetros por valor (declarados sin &) reciben copias de valores pasados a ellos. Las asignaciones a parámetros por valor en un método nunca cambian los valores originales pasados a los parámetros. Los parámetros referencia (declarados con &) reciben la dirección de los valores pasados a ellos. En un método, las asignaciones a parámetros por referencia cambian los valores de los parámetros originales

class Coleccion { private: int vector[50]; int tamano; int cantidad; Paso de parámetros p

class Coleccion { private: int vector[50]; int tamano; int cantidad; Paso de parámetros p Suponga que en la clase Coleccion se desea un método suma. Coleccion() que recibe una segunda colección como parámetro y modifique la primera colección con la suma de los elementos de la segunda colección vector 4 6 8 9 2 [0] [1] [2] [3] [4] vector 3 4 5 8 1 [0] [1] [2] [3] [4] vec 2 7 10 13 17 3 [0] [1] [2] [3] [4]

class Coleccion { private: int vector[50]; int tamano; int cantidad; Ejemplo: Paso de parámetros

class Coleccion { private: int vector[50]; int tamano; int cantidad; Ejemplo: Paso de parámetros void suma. Coleccion(Colección obj){ // es una forma de enviar una copia del arreglo completo for(int i=0; i<cantidad; i++) vector[i]= vector[i] + obj. vector[i]; // note que la suma altera el arreglo vector } En el main int elem; Coleccion A(5); Coleccion B(5); cout<<"Escriba los valores de la colección A"<<endl; for (int i=0; i<5; i++) { cin>>elem; A. insertar. Ele(elem); } cout<<"Escriba los valores de la colección B"<<endl; for (int i=0; i<5; i++) { cin>>elem; B. insertar. Ele(elem); } A. suma. Coleccion(B); cout<<"La suma de los elementos de ambas colecciones: "<<endl; cout<<A. to. String(); …. }

class Coleccion { private: int vector[50]; int tamano; int cantidad; Ejemplo: Paso de parámetros

class Coleccion { private: int vector[50]; int tamano; int cantidad; Ejemplo: Paso de parámetros void suma. Coleccion(Coleccion obj) {for(int i=0; i<cantidad; i++) vector[i]= vector[i] + obj. vector[i]; } Note que obj es un objeto de la clase Coleccion B En el main int elem; Colección A(5); Coleccion B(5); …… A. suma. Coleccion(B); vector 6 7 8 9 10 [0] [1] [2] [3] [4] Cantidad=5 Tamano=5

class Coleccion { private: int vector[50]; int tamano; int cantidad; Ejemplo: Paso de parámetros

class Coleccion { private: int vector[50]; int tamano; int cantidad; Ejemplo: Paso de parámetros p p A B En la clase Coleccion escriba un método que ahora intercambie los elementos de dos colecciones. Para hacer esto debe recibir la colección a intercambiar, es decir debe recibir como parámetro una instancia de tipo Coleccion Ejemplo: 4 6 8 9 2 [0] [1] [2] [3] [4] 3 4 5 8 1 [0] [1] [2] [3] [4] A B 3 4 5 8 1 [0] [1] [2] [3] [4] 4 6 8 9 2 [0] [1] [2] [3] [4]

Ejemplo: Paso de parámetros class Coleccion { private: int vector[50]; int tamano; int cantidad;

Ejemplo: Paso de parámetros class Coleccion { private: int vector[50]; int tamano; int cantidad; void intercambio(Colección obj) { int temp; for(int i=0; i<cantidad; i++) { temp= vector[i]; vector[i]= obj. vector[i]; obj. vector[i] = temp; } } En el main // suponiendo que ambos arreglos ya fueron creados y están llenos A. intercambio(B); cout<<“Mostrando A: "<<endl; cout<<A. to. String(); cout<<“Mostrando B: "<<endl; cout<<B. to. String();

Paso de parámetros p p En el ejemplo anterior el arreglo real NO se

Paso de parámetros p p En el ejemplo anterior el arreglo real NO se pasa al método sólo una copia de su valor. void intercambio(Contenedor vec 2) {…. } Su uso es local, al terminar el método la copia se pierde y el original no es alterado

Ejemplo: Paso de parámetros class Contenedor { private: int vector[50]; int tamano; int cantidad;

Ejemplo: Paso de parámetros class Contenedor { private: int vector[50]; int tamano; int cantidad; void intercambio. Ref(Contenedor &vec 2) { int temp; for(int i=0; i<cantidad; i++) { temp= vector[i]; vector[i]= vec 2. vector[i]; vec 2. vector[i] = temp; } } En el main // suponiendo que ambos arreglos ya fueron creados y están llenos A. intercambio. Ref(B); // intercambia los valores de ambos arreglos cout<<"Imprimiendo A: "<<endl; cout<<A. to. String(); cout<<"Imprimiendo B: "<<endl; cout<<B. to. String();

Paso de arreglos como parámetros En el ejemplo anterior al método se le pasa

Paso de arreglos como parámetros En el ejemplo anterior al método se le pasa la dirección del arreglo void intercambio. Ref(Contenedor &vec 2) {…. } p p Al terminar el método el arreglo original es alterado

class Coleccion { private: int vector[50]; int tamano; int cantidad; Tarea: p p Suponga

class Coleccion { private: int vector[50]; int tamano; int cantidad; Tarea: p p Suponga que en el main() se han creado los objetos A y B de tipo Coleccion y que ambos ya tienen valores definidos: Escriba un método que reciba una instancia tipo Coleccion como entrada y devuelva true si ambas colecciones son iguales y false, en caso contrario. § p A. son. Iguales(B) Escriba un método que reciba una instancia tipo Coleccion como entrada y modifique cada uno de sus valores con el producto de los valores de la colección de A y B. § A. multiplica(B)

REFERENCIAS C. Lethbridge, Timothy. (2001). Object-Oriented Software Engineering, United Kingdom. Booch, Grandy. (1996 ).

REFERENCIAS C. Lethbridge, Timothy. (2001). Object-Oriented Software Engineering, United Kingdom. Booch, Grandy. (1996 ). “ Análisis y Diseño Orientado a Objetos con Aplicaciones”. , Editorial Addison Wesley Logman, 2 da edición, México, . Martín, James. (1994). Odell, James J; “Análisis y Diseño Orientado a Objetos”, Editorial Prentice Hall, 1 era edición, México, Rodríguez Rojas, Oldemar. (1997). “ C ++ para ambientes gráficos”. , Editorial Tecnológica de Costa Rica, 1 era edición, Costa Rica. EIF 200 FUNDAMENTOS DE INFORMÁTICA

Proyecto 0151 -14 UNA – Mora & Coto, 2015 Uso didáctico curso EIF 200

Proyecto 0151 -14 UNA – Mora & Coto, 2015 Uso didáctico curso EIF 200 Escuela de Informática Universidad Nacional Costa Rica EIF 200 FUNDAMENTOS DE INFORMÁTICA