Programación de Ordenadores

Documentos relacionados
Vectores y Matrices. Dept. Ciencias de la Computación e I.A. Universidad de Granada

TEMA. Vectores y Matrices. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Programación 1 Tema 5. Instrucciones simples y estructuradas

Cálculo del histograma de una imagen

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

Definición. Procesamiento de Arreglos. Paso de Parámetro a funciones. Arreglos multidimensionales 8/28/2013. Arreglos Unidad 0 Programación AVANZADA

Programación 1 Tema 5. Instrucciones simples y estructuradas

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Cátedra I Informática Autor I Carlos Bartó

Tipo de Dato: Arreglos

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes

Cátedra I Informática Autor I Carlos Bartó

Programación 1 Tema 3. Información, datos, operaciones y expresiones

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Tema: Plantillas en C++.

Tema 2. Tipos y Estructuras Básicas

Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

PUNTEROS (Apuntadores)

Funciones: Pasos por Referencia Recursividad

Estructuras y clases. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Fundamentos de la programación

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

Funciones. Parámetros por valor

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Preliminares: programación con C++

Introducción a C++ y Code::Blocks

Vectores. 27/05/05 Programación Digital I 1

Laboratorio 4 Tema 6. Procedimientos: Acciones, Funciones y Pase de Parámetros

Programación de Ordenadores

Estructura de Datos ARREGLOS

Cadenas y Estructuras

Introducción a c++ Introducción a la programación EIS Informática III

Matrices. Matrices Transversal de Programación Básica Proyecto Curricular de Ingeniería de Sistemas

Funciones II. Fundamentos de Programación Fundamentos de Programación I

Informática Ingeniería en Electrónica y Automática Industrial

Laboratorio 5 Tema 7. Tipos de Datos Estructurados: Arreglos, Registros y Archivos

Macros LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

Tipos de Datos Simples Contenido del Tema

Estructuras de control. Dept. Ciencias de la Computación e I.A. Universidad de Granada

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Cadenas (strings) y Estructuras

FUNDAMENTOS DE PROGRAMACIÓN. 1º ING. INFORMÁTICA (Plan 2000) 1ª Convocatoria. 21 de Enero de 2002

Introducción general al Lenguaje C (2010/2011)

Objetivos. El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria.

UNIVERSIDAD TECNOLÓGICA DE LOS ANDES INGENIERÍA DE SISTEMAS E INFORMÁTICA FUNDAMENTOS DE PROGRAMACIÓN ARREGLOS (ARRAYS)

Examen escrito de Programación 1

* Operador de Indirección ( o de referencia ) ( o de desreferencia )

Informática II Vectores y Matrices

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n

Introducción al tipo de dato ARRAY

Programación 1 Grado de Ingeniería Robótica

LENGUAJES DE PROGRAMACIÓN. Pregunta 1 (3 puntos)

Objetivo N 2. Conocer la Estructura General de un Programa en C++ Estructura de Datos Prof. Egilde Márquez

Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición

Bloque II. Elementos del lenguaje de programación Java

ARREGLOS UNIDAD 2 PROGRAMACIÓN. Primavera 2009

Funciones I. Fundamentos de Programación Fundamentos de Programación I

Introducción al lenguaje C

Examen de prácticas de Programación 1

Clases y Objetos en C++

Informática Lección 5. Arreglos (vectores) Curso Pedro Álvarez y José Ángel Bañares 2/11/2010. Dpto. Informática e Ingeniería de Sistemas.

En Java, un arreglo es un grupo de variables (llamados elementos o componentes) que contienen valores, todos del mismo tipo.

Sobrecarga de Operadores II

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2015

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Nociones básicas sobre C++ Agustín J. González Patricio Olivares ELO-329

Plantillas (Templates)

TIPOS DE DATOS ESTRUCTURADOS

Programación 1 Tema 3. Información, datos, operaciones y expresiones

El operador contenido ( ) permite acceder al contenido de

Declaración. Introducción. Definición o implementación. Llamada. Un programa en C consta de una o más funciones.

Lectura y escritura de datos en archivos binarios

LENGUAJES DE PROGRAMACIÓN. Solución al Ejercicio de Autocomprobación 1

Principal material bibliográfico utilizado

Tema 13: Apuntadores en C

Programación de Ordenadores

FUNDAMENTOS DE PROGRAMACIÓN

Fundamentos de Programación

8. Vectores (arrays)

Tema 6: Memoria dinámica

Sobre Carga de Operadores

PRUEBA DE FUNDAMENTOS DE INFORMÁTICA. 1.- Qué se mostrará por pantalla tras ejecutar el código correspondiente a la función main?

Fundamentos de la programación

Formato para Prácticas de Laboratorio

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014. Apellido y nombre: Legajo: Cursó con Prof:

Índice. Estructuras de datos en Memoria Principal: Vectores. Matrices. Cadenas de caracteres. Estructuras. Estructuras de datos en Memoria Externa:

Práctica Guiada: Vectores y Matrices

Tipos Recursivos de Datos

INTRODUCCIÓN A LA POO EN C++

identificador: Es el nombre que le damos a la variable matriz y por el cual la referenciaremos en nuestro programa.

Tema: Funciones Virtuales y Polimorfismo.

Transcripción:

Programación de Ordenadores Ingeniería Química Curso 2007-2008 David Pelta Depto de Ciencias de la Computación e I.A. Universidad de Granada VECTORES Y MATRICES Motivación. Operaciones Básicas. Ejemplos Paso de vectores como parámetros. Matrices Ejemplos Avanzados

Motivación En casi todos los problemas, es necesario mantener una relación entre variables diferentes o almacenar y referenciar variables como un grupo. Para ello, los lenguajes ofrecen tipos más complejos que los vistos hasta ahora. Un tipo de dato compuesto es una composición de tipos de datos simples (o incluso compuestos) caracterizado por la organización de sus datos y por las operaciones que se definen sobre él. Una matriz es un tipo de dato, compuesto de un número fijo de componentes del mismo tipo y donde cada una de ellas es directamente accesible mediante un índice. Un vector es una matriz de una dimensión. Un Ejemplo /* Programa para realizar la media de TRES notas, y calcular cuántos alumnos han superado la media */ #include <iostream.h> int main(){ int cuantos=0; double nota1, nota2, nota3, media; leer nota1, nota2, leer nota3; media = (nota1+nota2+nota3)/3.0; if (nota1 > media) cuantos++; if (nota2 > media) cuantos++; if (nota3 > media) cuantos++; cout << "Media Aritmetica = " << media << endl; cout << cuantos << " alumnos han superado la media" << endl;

Qué sucede si queremos almacenar las notas de 150 alumnos? Número de variables imposible de sostener y recordar Solución: Introducir un tipo de dato nuevo que permita representar dichas variables en una única estructura de datos Notas[1] Notas[2] Notas[3] NOTAS 3.8 5.7 6.5 El tipo nuevo será una matriz o vector. Se declara una variable notas de tipo vector y cada componente se accede en la forma: notas[indice] Declaración <tipo><identificador>[<cantvalores>]; donde <tipo> indica el tipo de dato común a todas las componentes del vector. <CantValores> determina el número de componentes del vector. Puede ser un literal entero o una constante entera. Ejemplos double notas[3]; bool casados[40]; int temp[100];

Operaciones Básicas Acceso: <identificador>[indice] 0 Indice CantValores-1 Dada la declaración: double v[3]; Cada componente del vector es una variable de tipo double. v[2], v[0] son variables de tipo double v['3'], v[9] no son accesos correctos. Operaciones Básicas Asignación de Valores: <identificador>[indice] = <Expresion> Donde <Expresión> ha de ser del mismo tipo que el definido en la declaración del vector (o al menos compatible). V[0] = 3.45 v[1] = sqrt(256); No se permiten asignaciones globales sobre todos los elementos del vector, salvo en el momento de la definición de la variable, la inicialización. Las asignaciones se deben realizar componente a componente.

Mecanismos de Inicialización C++ permite inicializar una variable de tipo vector, en la declaración. int v[3]={4,5,6; inicializa v[0]=4, v[1]=5 y v[2]=6 int v[7]={3,5; inicializa v[0]=3 v[1]=5 y el resto se inicializan a cero. int v[7]={0; inicializa todas las componentes a cero. int v[]={1,3,9; automáticamente el compilador asume int v[3] Recorriendo Vectores La lectura y/o escritura de los valores de un vector, se realiza componente a componente (salvo en la inicialización). Para recorrer las componentes, utilizaremos el siguiente esquema: const int TAM = 20; int main() {int vec[tam]; int i; for(i=0; i < TAM; i=i+1) { manipulo vec[i];

Búsqueda de un Elemento (I) int main(){ const int TAM = 100; int V[TAM]; int i, posicion, elemento; bool Encontrado; // supongamos que V ya tiene valores cout << "Ingrese el elemento a buscar:"; cin >> elemento; Encontrado=false; for(i=0; i < TAM; i=i+1) {if (V[i] == elemento) {posicion=i; Encontrado=true; if (Encontrado) cout << "Encontrado en la posición " << posicion << endl; else cout << "No Encontrado" << endl; Búsqueda de un Elemento II int main(){ const int TAM = 100; int V[TAM]; int i, posicion, elemento; bool Encontrado; // supongamos que V ya tiene valores cout << "Ingrese el elemento a buscar:"; cin >> elemento; Encontrado=false; i=0; while ((i<tam) &&!Encontrado) {if (V[i] == elemento) {posicion=i; Encontrado=true; else i++; if (Encontrado) cout << "Encontrado en la posición " << posicion << endl; else cout << "No Encontrado" << endl;

Frecuencia de un Elemento int main(){ const int TAM = 100; int V[TAM]; int i, contador, elemento; bool Encontrado; // supongamos que V ya tiene valores cout << "Ingrese el elemento:"; cin >> elemento; Contador = 0; for(i=0; i<tam; i=i+1) {if (V[i] == elemento) contador = contador + 1; cout << El elemento << elemento << aparece << contador << veces. << endl; Vectores como Parámetros La declaración de un vector produce la reserva de un conjunto consecutivo de posiciones de memoria (tantas como componentes tenga el vector). Notar que para acceder a cualquier elemento, basta con conocer la posición inicial del vector mas el desplazamiento. Nombre del Vector Indice del elemento en el vector V[0] V[1] V[2] V[3] V[4] V[5] V[6] V[7] V[8] V[9] V[10] V[11] -45 6 0 72 1543-89 0 62-3 1 6453 78

Vectores como Parámetros En el parámetro actual, indicaremos el nombre del vector sin los corchetes. El paso de un vector int Medidas[ 24 ] a una función denominada Calculo, será similar a Calculo(Medidas, 24 ); Por lo general, siempre se pasa el tamaño del vector como parámetro. Vectores como Parámetros Los vectores se pasan por referencia (aunque no se indique &) El nombre del vector es la dirección del primer elemento La función conoce donde está almacenado el vector La función modifica las posiciones de memoria originales Por defecto, los valores individuales del vector, son pasados por valor

Vectores como Parámetros El prototipo de la función será: void Calculo(int V[], int nroelems) Como antes, los nombres son opcionales en el prototipo int V[] puede ser int [] int nroelems puede ser int Ejemplo /* multiplica por 2 cada componente del vector*/ #include <iostream> void doble(int[], int); void mostrarvector(int[], int); int main() {const int TAM = 12; int vector[tam]; int i; for(i=0; i < TAM; i=i+1) vector[i] = i; mostrarvector(vector, TAM); doble(vector, TAM); mostrarvector(vector, TAM); system("pause"); return(1); void doble(int T[], int N) {int i; for(i=0; i < N; i=i+1) T[i] = T[i] * 2; void mostrarvector(int T[], int N) {int i; for(i=0; i < N; i=i+1) cout << T[i] << ","; cout << endl;

Ejercicios Dado un vector V de enteros, con elementos V[i], i [0,N], construir un vector A de forma tal que A[ i] V[ j] = i j = 0 Dado un vector C de tamaño N, donde cada componente C[i] representa el i-esimo coeficiente de un polinomio de grado N, construir una función que permita evaluarlo para un valor X dado. 0 1 ax + bx +... + Dados dos vectores X e Y de enteros, ambos de tamaño N, implemente una función que permita calcular el producto escalar N 1 i = 0 x [ i ] * px n y [ i ] Ordenación de un Vector I Inicial 97 64 74 65 7 43 66 6 28 94 Paso 0 6 64 74 65 7 43 66 97 28 94 Paso 1 6 7 74 65 64 43 66 97 28 94 Paso 2 6 7 28 65 64 43 66 97 74 94 Paso 3 6 7 28 43 64 65 66 97 74 94 Paso 4 6 7 28 43 64 65 66 97 74 94 Paso 5 6 7 28 43 64 65 66 97 74 94 Paso 6 6 7 28 43 64 65 66 97 74 94 Paso 7 6 7 28 43 64 65 66 74 97 94 Paso 8 6 7 28 43 64 65 66 74 94 97 Final 6 7 28 43 64 65 66 74 94 97

Ordenación de un Vector II #include <iostream> int buscamenor(int v[], int posi, int posf); int swap(int & a, int & b); int main() {const int TAM = 20; int v[tam]; int i,posmenor; //asumimos que el vector tiene valores for(i=0;i<tam-1;i++) {posmenor = buscamenor(v,i,tam); swap(v[i],v[posmenor]); for(i=0;i<tam;i++) cout << v[i] << " "; return(0); Ordenación de un Vector III int swap(int & a, int & b) {int tmp; tmp = a; a = b; b = tmp; int buscamenor(int v[], int posi, int posf) {int min,j; min = posi; for(j=posi+1;j<posf;j++) {if(v[j] < v[min]) min = j; return(min);

Matrices: definición y uso La definición de una estructura multidimensional también es posible. <tipo><identificador>[d1] [d2] [dn]; Solo debemos indicar los valores de cada dimensión. Por ejemplo int a[3][4] define una estructura a de 3 filas y 4 columnas. Columna 0 Columna 1 Columna 2 Columna 3 Fila 0 a[ 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 3 ] Fila 1 a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ] Fila 2 a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ] Matrices: definición y uso El acceso y manipulación de componentes sigue el mismo formato que en los vectores. const int FILA = 10; const int COL = 20; int main() {int mat[fila][col]; int i,j; for(i=0; i < FILA; i=i+1) {for(j=0; j < COL; j=j+1) manipulo mat[i][j]; Declaración Para cada fila Para cada columna

Matrices: definición y uso Inicialización int b[ 2 ][ 2 ] = { { 1, 2, { 3, 4 ; 1 3 2 4 int b[ 2 ][ 2 ] = { { 1, { 3, 4 ; 1 3 0 4 Paso de Matrices a Funciones En el parámetro actual, indicaremos el nombre de la matriz sin los corchetes. El paso de una matriz int tabla[ 24 ][12] a una función denominada Calculo, será similar a Calculo(tabla, 24,12 ); Por lo general, siempre se pasan todos los valores de las dimensiones

Paso de Matrices a Funciones El prototipo de la función será: void Calculo(int V[][12], int nrofil, int nrocol) Si la matriz tiene mas de dos dimensiones, entonces en el prototipo deben indicarse los valores máximos para todas excepto la primera. void tresd(int v[][10][15], int d1, int d2, int d3) Ejemplo #include <iostream> const int FILA = 4; const int COL = 8; void cargamatriz(int M[][COL], int f, int c); int main() { int mat[fila][col]; int i,j; cargamatriz(mat, FILA, COL); for(i=0; i < FILA; i=i+1) {cout << endl; for(j=0; j < COL; j=j+1) cout << mat[i][j] << "\t"; void cargamatriz(int M[][COL], int f, int c) {int i,j; for(i=0; i < f; i=i+1) {cout << endl; for(j=0; j < c; j=j+1) M[i][j] = i*col + j;

Ejercicios 1. Diseñe un procedimiento que permita, dada una matriz y sus dimensiones, mostrar los elementos de la triangular superior 2. Utilizando una matriz cuyos elementos son de tipo char sugiera una manera de implementar graficos de barras 3. Diseñe un esquema para calcular el histograma de un conjunto de valores