Prof. Dr. Paul Bustamante

Documentos relacionados
Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr.Paul Bustamante

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Prof. Dr. Paul Bustamante

Tema 6: Memoria dinámica

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

Prof. Dr. Paul Bustamante

Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1

Prof. Dr. Paul Bustamante

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Ejercicios de la sesión 4 de C resueltos

Estructuras de Datos Estáticas. Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos estáticas

Programación. Test Autoevaluación Tema 3

Prof. Dr. Paul Bustamante

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Prof. Dr. Paul Bustamante

Apuntadores en C y C++

LENGUAJE. Tema 4 Vectores, Matrices y Cadenas de caracteres.

Escuela Politécnica Superior de Elche

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Introducción al tipo de dato ARRAY

Algoritmos y Programación I

Prof. Dr. Paul Bustamante

GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales

PROBLEMAS DEL TEMA 8: Estructuras de Datos Complejas

ALGORITMOS Y PROGRAMACIÓN I Unidad 3

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

Instituto Tecnológico de Celaya

PROGRAMACIÓN ESTRUCTURADA

Prof. Dr. Paul Bustamante

Tema: Plantillas en C++.

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

Prof. Dr. Paul Bustamante

EJERCICIO 1. CREACIÓN DE UNA FUNCIÓN

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Tema 13: Apuntadores en C

Punteros y Memoria Dinámica II

Cadenas de caracteres. 1. Definición 2. Funciones para manejo de cadenas

En un arreglo x de n elementos los elementos del arreglo son: El número de índices determina la dimensionalidad del arreglo.

Funciones: Pasos por Referencia Recursividad

Prof. Dr. Paul Bustamante

Tipos de Datos Estructurados

Punteros. Índice. 1. Qué es un puntero y por que son importantes.

Práctica 7e: Uso de estructuras en C.

Tema 2: La clase string. Índice. Notas. Programación 2. Curso Notas. Definición Declaración Entrada / salida Métodos Operaciones

Funciones. Parámetros por valor

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

PROGRAMACIÓN ORIENTADA A OBJETOS

Operadores aritméticos

Punteros. Programación en C 1

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

Práctica 7c: Uso de estructuras en C.

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

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

Práctica Guiada: Vectores y Matrices

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Punteros. Lenguaje C ANSI

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

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

Prof. Dr. Paul Bustamante

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

Principal material bibliográfico utilizado

Seminario 1. Excel Básico

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

Tipos de datos y Operadores Básicos

7ª Práctica. Matlab página 1 EJERCICIO 1. ORDENAR UN VECTOR CON EL MÉTODO DE LA BURBUJA...1

Algebra de Matrices 1

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

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina

Hoja de ejercicios del Tema 9

GUIA DE EJERCICIOS N 1 LENGUAJE C# Página 1 de 5. Instructor: Ing. Néstor Raúl Suarez Perpiñan

PUNTEROS (APUNTADORES)

Prof. Dr. Paul Bustamante

Codificación en C. Como pasar de Pseudocódigo a C (con pequeños trucos de C++)

TEMA 8: Gestión dinámica de memoria

Capítulo 2: Variables - Constantes - Tipos de datos

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Tema 2: La clase string

Transcripción:

Prácticas de C++ Practica Nº 5 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante

Practica Nº5 Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1. Introducción... 1 1.1 Ejercicio 1: Trabajando con complejos... 1 1.2 Ejercicio 2: Reserva dinámica de memoria para vectores... 1 1.3 Ejercicio 3: Introducción a la estadística... 2 1.4 Ejercicio 4: Matrices dinámicas.... 2 1.5 Ejercicio 5: Producto de matriz por matriz.... 3 1.6 Ejercicio 6: Ordenando Nombres... 4 1. Introducción. Como ya lo hemos venido haciendo, el primer ejercicio de esta práctica debe realizarlo solo, con el fin de que pueda ganar más experiencia en la programación en C++. En algunos ejercicios se dará el código, lo que no significa que sólo tenga que escribirlo en el ordenador, debe tratar de realizarlos por su cuenta. Recuerde borrar los ficheros que estén en los subdirectorios \debug y \release del proyecto, para que libere espacio en su disco G\. 1.1 Ejercicio 1: Trabajando con complejos. En este ejercicio va a utilizar las estructuras, ya vistas en clase. Para ello ha de crear una estructura Complejo para sumar, restar, multiplicar y dividir dos números complejos. El resultado del programa debe ser el complejo resultante, su módulo y su fase. Debe utilizar las funciones matemáticas ( sqrt(), atan() ) que se encuentran definidas en el fichero math.h. El programa debe pedir al usuario que seleccione de un menú la operación que desea realizar: sumar, restar, multiplicar o dividir dos complejos. La estructura debe tener esta forma: struct Complejo{ float real; float imag; ; El algoritmo para multiplicar y dividir dos complejos, por si alguien no lo recuerda es: (a+bi)*(c+di) = a*c b*d, (a*d + b*c) i (a+bi)/(c+di) = (a*c + b*d)/(c^2+d^2),(( b*c - a*d)/(c^2+d^2)) i Recuerde que debe crear un proyecto nuevo Ejer1 y el fichero Complejo.cpp en el que escribirá el código. 1.2 Ejercicio 2: Reserva dinámica de memoria para vectores. En este ejercicio vamos a hacer uso de la reserva dinámica de memoria para almacenar un número determinado de valores (obtenidos de forma aleatoria, entre 0 y 100) y ordenarlos de mayor a menor. El código para obtener los números y para la reserva dinámica de memoria se lo doy, el resto debe tratar de implementarlo solo.

Practica Nº5 Programación en C++ Pág. 2 Debe crear el proyecto Ejer2 y el fichero ordena.cpp para introducir el código. // fichero ordena.cpp // ordena usando memoria dinamica #include <iostream.h> #include <stdlib.h> //para rand() void main(void) { int Num; //Numero de datos int *datos; //puntero a int cout << "Cuantos numeros desea generar:"; cin >> Num; //asignacion de memoria datos = new int[num]; if (datos == NULL) cout << "Error"; //Llenar el vector for (int i=0;i<num;i++){ datos[i] = rand() * 100 / RAND_MAX; //ordena los datos -> Hacer aquí el algoritmo //imprime los datos ordenados for (i=0;i<num;i++) cout << i << ":" << datos[i] <<endl; //liberar memoria delete [] datos; 1.3 Ejercicio 3: Introducción a la estadística. En este ejercicio va a tener una pequeña introducción a la estadística (realmente ya la ha tenido y quizá no lo ha notado). El ejercicio consiste en pedir una serie de números al usuario y hallar el máximo, el mínimo y la media aritmética de ellos. Debe crear una variable puntero tipo float y pedir al usuario que introduzca el número de datos, luego debe introducir todos los datos a calcular. Recuerde que debe reservar memoria de forma dinámica para almacenar el vector de datos. Debe crear el proyecto Ejer3 y el fichero estadistica.cpp para escribir el código en él. La salida del programa debe ser algo así (es un ejemplo, no tienen que coincidir): Numero de datos: 10 Máximo: 25 Minimo: 4 Media Aritmética: 14.6 1.4 Ejercicio 4: Matrices dinámicas. Ha llegado el momento de empezar a trabajar con la reserva de memoria dinámica para matrices. Los pasos para hacer la reserva dinámica de memoria para matrices son: a. Crear el array de punteros del tipo de datos: float **datos; b. Reservar memoria para el array de punteros: datos = new float*[fil]; c. Hacer un bucle para reservar memoria para col columnas de cada fila: for (int i=0;i<fil;i++) datos[i] = new float[col];

Practica Nº5 Programación en C++ Pág. 3 d. Ya tenemos creada la matriz, podemos trabajar con ella con los índices, por medio de los corchetes [], de la forma datos[i][j]. e. Finalmente, debemos hacer otro bucle para liberar la memoria de cada fila y luego debemos liberar la memoria asignada al array de punteros, en ese estricto orden En el siguiente ejemplo verá cómo asignar memoria para una matriz de fil x col: // fichero matriz.cpp // crear matrices usando memoria dinamica #include <iostream.h> #include <string.h> //para strlen #include <stdlib.h> //para atoi() void main(void) { int fil; //numero de filas int col; //numero de columnas float **datos; cout << Num. Filas: ; cin >> fil; cout << Num. Columnas: ; cin >> col; datos = new float*[fil]; //vector filas //reserva memoria para las columnas de cada fila for (int i=0;i<fil;i++) datos[i] = new float[col]; //ya puede usar la matriz for (int f=0;f<fil;f++) for (int c=0;c<col;c++) datos[f][c] = (float)rand()/rand_max; //imprime los valores for ( f=0;f<fil;f++){ for (int c=0;c<col;c++) { cout << f << "," << c << ":"<<datos[f][c]<< " "; cout <<endl; //liberar memoria for (f=0;f<fil;f++) delete [] datos[f]; //libera filas delete [] datos; //libera vector Debe crear un proyecto Ejer4 y el fichero matriz.cpp para escribir el código. 1.5 Ejercicio 5: Producto de matriz por matriz. Basándose en el ejercicio anterior, vamos a realizar la versión 2.0 del ejercicio 2 de la práctica Nº4: producto de matrices con asignación dinámica de memoria. Debe crear un proyecto llamado Ejer5 que contenga un programa que multiplique dos matrices MatA y MatB de cualquier tamaño; llámalo matxmat2.cpp. Pasos a seguir: 1- Debe crear tres punteros a punteros: float **ma, **mb, **mc. 2- Pedir por teclado las dimensiones de la matriz MatA (filas y columnas). 3- Pedir por teclado sólo las columnas de la matriz MatB, ya que las filas tienen que ser igual a las columnas de MatA para la multiplicación. 4- Realizar la reserva dinámica de memoria de todas las matrices, usando para ello el operador new. 5- Pedir los datos de las dos matrices MatA y MatB.

Practica Nº5 Programación en C++ Pág. 4 6- Realizar la multiplicación, como en el ejercicio de la práctica anterior, en sendos bucles for anidados, y almacenar el resultado en la matriz C. 7- Finalmente debe sacar por consola los datos de la matriz resultante: 8- Liberar la memoria asignada de todas las matrices, utilizando el operador delete. Recuerde la fórmula para multiplicar dos matrices: c ij = n k = 1 a ik b kj i = 1... n, j = 1,..., n 1.6 Ejercicio 6: Ordenando Nombres Este sexto y último ejercicio consiste en crear un programa capaz de leer desde el teclado un número determinado de nombres, almacenarlos en un "vector de punteros a caracteres" (en otras palabras, una matriz de caracteres) y ordenarlos, por medio de la función strcmp. Se recuerda que cada letra (char) es "tratada como si fuera un número" (una casilla) y por lo tanto almacenar un nombre se asemeja a almacenar una fila de una matriz. Se necesita por lo tanto un doble puntero (char **nombres) para poder almacenar un conjunto de palabras. En esta "matriz de letras" el número de columnas puede variar para cada fila (es strlen(nombre)+1). Utilizando una única llamada a la función strcpy() es posible rellenar una fila completa de dicha matriz de caracteres. Para utilizar dicha función es necesario incluir el fichero string.h. Crea un proyecto llamado Ejer6 y el fichero nombres.cpp, donde va a escribir el siguiente código y completar lo que falta: // fichero nombres.cpp #include <iostream.h> #include <string.h> #include <stdio.h> void main(void) { char tmp[120]; char** pnombres; int Num; //para gets() cout << "Cuantos Nombres desea ordenar:"; cin >> Num; pnombres = new char*[num]; //Espacio para Num nombres //pedir datos for (int i=0;i<num;i++) { cout << "Escriba el nombre " << i+1 << ":" << flush; gets(tmp); // +1 porque hay que guardar '\0' pnombres[i] = new char[strlen(tmp)+1]; // debe copiar las letras de tmp a la matriz pnombres //algoritmo de ordenación //sacar datos por consola //liberar memoria de la matriz de caracteres