Академический Документы
Профессиональный Документы
Культура Документы
INFORMATICA (PNFI)
ALGORITMICA Y PROGRAMACION
Algortmica y Programacin
3. Para reservar memoria dinmica para matrices se siguen los siguientes pasos:
a. Se crea un puntero a punteros del tipo de datos: float **datos;
b. Se reserva memoria para el array de filas: datos = new float*[fil];
c. Se hace un bucle para reservar memoria para col columnas de cada fila:
for (int i=0;i<fil;i++) datos[i] = new float[col];
d. Creada la matriz, se puede trabajar con ella con los ndices y los
corchetes [].
e. Finalmente, se debe hacer otro bucle para liberar la memoria de cada fila
y la asignada al vector de filas.
En el siguiente ejemplo se ve cmo asignar memoria a una matriz de filxcol:
// fichero matriz.cpp
// crear matrices usando memoria dinmica
#include <iostream>
#include <string.h> //para strlen
#include <stdlib.h> //para atoi()
using namespace std;
void main(void)
int fil = 8; //numero de filas
int col = 5; //numero de columnas
float **datos;
Algortmica y Programacin
int NumFrases;
cout << "Cuantas frases desea almacenar:";
cin >> NumFrases;
pfrases = new char*[NumFrases]; //Espacio para NumFrases
//pedir datos
for (int i=0;i<NumFrases;i++)
{
cout << "Escriba la frase " << i+1 << ":" << flush;
gets(frase);
// +1 porque strlen no guarda para el '\0'
pfrases[i] = new char[strlen(frase)+1];
strcpy(pfrases[i], frase);
}
//sacar datos por consola
for (i=0;i<NumFrases;i++)
cout << "Frase " << i+1 << ":" << pfrases[i] << endl;
//liberar memoria
for (i=0;i<NumFrases;i++) delete pfrases[i];
delete [ ] pfrases;
}
2. Ejercicios Propuestos de Punteros
1. Se pide crear un programa que haciendo uso de la reserva dinmica de
memoria almacene un nmero determinado de valores (obtenidos de forma
aleatoria, entre 0 y 100) y los ordene de mayor a menor. El cdigo para obtener
los nmeros y para la reserva dinmica de memoria es dado, y el resto debe ser
implementado.
//fichero ordena.cpp
// ordena usando memoria dinamica
#include <iostream>
#include <stdlib.h> //para rand()
using namespace std;
void main(void)
{
int Num; //Numero de datos
int *datos; //puntero a int
cout << "Cuantos nmeros deseas generar:";
cin >> Num;
//asignacion de memoria
Algortmica y Programacin
2. Se pide crear un programa que pida una serie de nmeros al usuario y halle el
mximo, el mnimo y la media aritmtica de ellos. Para ello se debe crear una
variable puntero tipo float, pedir al usuario que introduzca el nmero de datos, y
despus los datos a calcular. Recordar que se debe reservar memoria de forma
dinmica para almacenar el vector de dato. La salida del programa debe ser algo
as:
Numero de datos: 10
Mximo: 25
Minimo: 4
Media Aritmtica: 14.6
3. Este ejercicio consiste en hacer un programa que cuente cuantas veces se
repiten las vocales (se deben contar las maysculas y las minsculas) en un texto
dado por el usuario. La estructura del programa debe ser la siguiente:
#include <iostream>
#include <string.h>
using namespace std;
char *PideTexto();
void ContarVocales(char *, int [ ]);
void Imprime(int [ ]);
Algortmica y Programacin
void main()
{
char *texto;
int Num[5];
texto = PideTexto();
ContarVocales(texto,Num);
Imprime(Num);
delete [ ] texto; //libera memoria
}
A continuacin se explican cada una de las funciones llamadas desde main:
1. La funcin PideTexto devuelve un puntero a la cadena que el usuario ha
escrito.
2. La funcin ContarVocales recibe el array que contiene el texto y otro array de
enteros, en el cual va a devolver cuantas veces se repite cada una de las vocales,
es decir, en Num[0] vendrn las veces que se repite la vocal a , en Num[1] la vocal
e y as sucesivamente.
3. La funcin Imprime recibe el array de enteros e imprime en la consola lo que ha
encontrado.
Algortmica y Programacin