Eficiencia en uso de recursos y memoria

Slides:



Advertisements
Presentaciones similares
PROF. CARLOS RODRIGUEZ SANCHEZ COMP 242 Introducci Ó n a los Arreglos (arrays) en C++
Advertisements

Searching data in Arrays COMP 242. Linear Search Algoritmo: Comenzando con el primer elemento, se compara cada uno con el valor a buscar y se detiene.
Ejemplo de Programa C++
MANUAL EXPRESS DE C J.M.sevilla.
Listas enlazadas c++ Prof. Franklin Cedeño.
Procedimientos y Funciones
Programación I Teoría III
Funciones. Programación, Algoritmos y Estructuras de Datos.
INFORMATICA I Funciones CLASE 13.
Tema 1. Introducción a la programación (Lenguaje java).
Funcionamiento, programación
PROGRAMACION DE ESTRUCTURAS DE DATOS
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Implementación de Listas
SOBRECARGA DE FUNCIONES
Unidad 3 Punteros.
Herramientas para el acceso directo a memoria en C++
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Material de apoyo Unidad 2 Estructura de datos
Tema 6: Clases Antonio J. Sierra.
Tema 3 Entrada y Salida.
Introducción a la Computación
Sección 5-2 Estructuras de Control de Decisión Expresiones Lógicas.
ÁRBOLES BINARIOS DE BÚSQUEDA
Programación III Clase 07 Funciones.
Arreglos.
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Algoritmos para Ordenar datos
Introducción al análisis de algoritmos
Algoritmos de búsqueda
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
METODOLOGÍA DE LA PROGRAMACIÓN
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Manejo de Punteros y objetos en memoria dinámica en C++
Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)
Elementos básicos del lenguaje
Unidad II Introducción a la programación en C++
Vectores y Matrices.
Clase 10 Apuntadores & Memoria Dinámica
Análisis de Algoritmos 2
Elementos básicos del lenguaje
Principios de programación LIA. Suei Chong Sol, MCE. Sentencias de Control Repetitivas.
Arreglos Computción.
Tema ‧ Comando - while Repeticiones. Comando while ‧ Un ciclo es cualquier construcción de programa que repite una sentencia ó secuencia de sentencias.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Matrices Prof. Flor Narciso Departamento de Computación
Estructuras de Repetición (Hacer-Mientras)
Programación Básica con NQC Patricio A. Castillo 10/05/2008.
Registros Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Fundamentos de Programación
INTRODUCCION A LA PROGRAMACION
PRINCIPIOS DE PROGRAMACIÓN
LENGUAJE “C” Programación.
Fundamentos de Programación
Al finalizar el curso el alumno será capaz de: Diseñar algoritmos utilizando estructuras estáticas de datos y programación modular.
Ingeniería en Software Facultad de Ingeniería 2014
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Algoritmo.
Arreglos Ejemplo paso a paso. Planteamiento Como estudiante de ingeniería, quieres usar tus habilidades de programador para llevar un registro de tus.
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
ARREGLOS O ARRAYS.
Paso de Parámetros a una Función Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de.
¿Cómo programar un Botón para agregar registros a una base de datos?
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
IntroducciÓn a los Arreglos (“arrays”) en C++
++
Transcripción de la presentación:

Eficiencia en uso de recursos y memoria Programación avanzada C++

Ejemplo práctico para calcular tiempo de ejecución. #include <iostream> #include <time.h> //librería para calcular tiempo de ejecución #include <math.h> //librería para obtener números aleatorios using namespace std; void tiempoProc1(void);//procedimiento que contiene instrucciones para calcular // tiempo que tarda cierto algoritmo int main(){ tiempoProc1(); //procedimiento para calcular el tiempo que tarda cierto //algoritmo system("pause"); return 0; }//fin main

void tiempoProc1(void){ int inicio, fin, t; float tiempoSeg; inicio = clock();//guarda tiempo inicial /*Código a calcular el tiempo---lo podemos cambiar para ver cómo se comportan diferentes algoritmos*/ for (int i = 0; i<1000; i++) cout <<i<<"\n"; /*Se puede poner el código al cuál queremos calcular el tiempo*/ fin = clock();//guarda tiempo final t = fin - inicio;//calcula tiempo transcurrido tiempoSeg=((float)t) / CLOCKS_PER_SEC;//investiga qué // significa esta línea cout << "El tiempo transcurrido fue: " << tiempoSeg << "\n"; }//fin tiempoProc1

Probemos este código con varios sub-algoritmos

Usando el ejemplo anterior, investiga y responde lo siguiente

¿Cuánto tarda en ejecutarse este ciclo for? for(int i=0; i<1000;i++) cout <<i<<"\n";

¿Cuánto tarda este procedimiento de arreglo estático? void arregloEstatico(void){ int aE[10]; //aquí se declara el arreglo estático cuyo tamaño fijo //está definido por la constante TAM srand(5);//"semilla" para generar números aleatorios cout << "\nARREGLO ESTATICO\n"; //ciclo para llenar el arreglo estático for (int i = 0; i < 10; i++){ cout << "\nElemento " << i << " del arreglo: "; aE[i] = rand(); cout << aE[i]; } cout << "\n";//imprime en pantalla una línea en blanco //ciclo para mostrar arreglo estático for (int i = 0; i < 10; i++) cout << aE[i] << " "; cout << "\n";//imprime en pantalla una línea en blanco }//fin procedimiento arregloEstatico

¿Cuánto tarda este procedimiento de arreglo dinámico? void arregloDinamico(void){ int tamDin = 0; //variable para que el usuario indique el tamaño del arreglo que quiere cout << "\nARREGLO DINAMICO\n"; cout << "Calcula el tamaño del arreglo de enteros: ";//indica a usuario tamaño deseado srand(5);//"semilla" para generar números aleatorios tamDin = rand(); //se guarda el tamaño en variable tamDin cout << " " << tamDin << "\n";//se muestra el tamaño aleatorio elegido int *pArregloDin; //apuntador para guardar dirección de inicio del arreglo dinámico pArregloDin = new int[tamDin]; //se aparta memoria dinámica para el arreglo pArregloDin //ciclo para llenar los elementos del arreglo dinámico for (int i = 0; i < tamDin; i++){ cout << "\nElemento " << i << " ";//pide al usuario ingrese cada uno de //los elementos del arreglo pArregloDin[i] = rand(); }//fin for cout << "\n";//imprime en pantalla una línea en blanco //ciclo para mostrar arreglo dinámico for (int i = 0; i < tamDin; i++) cout << pArregloDin[i] << " "; //fin for delete pArregloDin; //librea la memoria dinámica reservada para el arreglo }//fin procedimiento arreglo dinámico

Continuación – otros algoritmos a probar tiempo de ejecución

Escribe el tiempo de ejecución encontrado para las tres subrutinas que se indicaron en la sección anterior.

For: Arreglo estático: Arreglo dinámico:

Ahora probaremos con un algoritmo más complejo Probemos el tiempo que tarda en realizarse algunos algoritmos de ordenamiento Primero veamos el ordenamiento burbuja

void ordenamientoBurbuja(void){ int c[100], num, b; //Llenar arreglo rand(); for (int i = 0; i<100; i++){ num = rand() % 100; if (i>0){ for (int j = 0; j<i; j++) if (num == c[j]){ num = rand() % 100; j = -1; } c[i] = num; //ordenar arreglo for (int x = 0; x<100; x++){ for (int y = 0; y<99; y++){ if (c[y]>c[y + 1]){ b = c[y]; c[y] = c[y + 1]; c[y + 1] = b; //mostrar arreglo for (int h = 0; h<100; h++) cout << c[h] << "\t"; cout << endl;

Ahora veamos el tiempo para el ordenamiento por inserción Copia todo el código que se muestra a continuación

//parte del ordenamiento de insercion int inicial(int o[], int c){ int p = c; int d = o[c]; for (int h = c; h<100; h++){ if (o[h]<d){ d = o[h]; p = h; } return p;

void ordenamientoInsercion(void){ int m, pos_m, num; int k[100]; //Llenar arreglo rand(); for (int i = 0; i<100; i++){ num = rand() % 100; if (i>0){ for (int j = 0; j<i; j++) if (num == k[j]){ num = rand() % 100; j = -1; } k[i] = num; //ordenar arreglo for (int l = 0; l<99; l++){ pos_m = inicial(k, l); if (k[l]>k[pos_m]){ m = k[pos_m]; for (int g = pos_m - 1; g >= 1; g--){ k[g + 1] = k[g]; k[l] = m; for (int h = 0; h<100; h++) cout << k[h] << "\t"; cout << endl;

¿Cuál es el tiempo de ejecución de cada código ¿Cuál es el tiempo de ejecución de cada código? -El código y la respuesta a esta pregunta deberá enviarse por email el 27 de octubre. Con tu investigación sobre la notación “Big-O”, analiza ambos algoritmos de ordenamiento y describe cuál es su comportamiento de acuerdo con esta notación. Ambos deben entregarse en MRR el 28 de octubre en la clase.