Programación General > C/C++
Re: Arrays
mabrev:
Hola de nuevo, es que me explico fatal. Con el malloc, el programa que pusiste al principio quedaría así:
#include<stdlib.h>
#include <conio.h>
#include <iostream.h>
int main()
{
char *array; //Declaras el array
int i;
int tam;
clrscr();
cout<<"Introduce el numero de elementos del array";
cin>>tam; //Se lee el tamaño del array
//Se le asigna al array la memoria necesaria
array=(char*)malloc(tam*sizeof(char));
for(i=0;i<tam;i++)
{
cout<<"Ingresa un numero a la matriz: ";
cin>>array; //Guardas cada valor en una posición del array
}
for(i=tam-1;i>=0;i--) //Vas en reversa
{
cout<<"n"<<array; //Muestras los valores del array, uno por uno
}
getch();
}
Espero que lo veas mejor ahora.
Saludos
Ruben3d:
Me he fijado en que usas cin y cout para leer e imprimir en pantalla, así que he pensado que es más correcto usar los operadores new y delete para reservar y liberar la memoria. Además, no estás usando los índices para acceder a las posiciones del array, así que lo que se modifica es su propia dirección de memoria. A ver qué te parece este código (he sustituido el tipo char por int, ya que cout interpreta char como un carácter):
#include <iostream>
using namespace std;
int main()
{
int tam; // Tamaño del array
int n; // Contador para bucles
cout << "Introduce el numero de elementos del array: ";
cin >> tam;
int *array = new int[tam]; // Reserva de memoria
for(n=0; n<tam; n++) // Petición de números
{
cout << "Ingresa el numero en posicion " << n << ": ";
cin >> array[n];
}
for(n=tam-n; n>=0; n--) //Vas en reversa
{
cout << endl << array[n]; //Muestras los valores del array, uno por uno
}
delete [] array; // Se libera la memoria
return 0;
}
mabrev:
Anda! Pues yo juraría que he puesto los índices al acceder al array.:question:
Bueno, perdón por el despiste.
Saludos
Blag:
Bueno Ruben3d, tu código tiene también un error....
--- Citar --- for(n=tam-n; n>=0; n--) //Vas en reversa
{
cout << endl << array[n]; //Muestras los valores del array, uno por uno
}
--- Fin de la cita ---
En este caso, "n" tiene el valor del for anterior, por lo tanto solamente se va a mostrar un elemento. Además el Borland C++ 3.1, so acepta el STD.
Aquí está el código.
--- Código: Text --- #include <iostream.h>#include <conio.h> int main(){int tam,i; clrscr(); ///Borramos la pantalla cout<<"De que tamaño: ";cin>>tam;int *array = new int; //Declaramos un puntero a un char //y le asignamos un area en memoria for(i=0;i<tam;i++){cout<<"Ingresa elementos: ";cin>>array[i];} for(i=tam-1;i>=0;i--){cout<<"n"<<array[i];} delete array; //Eliminamos la asignacion en memoria de la variable getch(); //Hace una copia de la pantalla}
:devil:
Ruben3d:
Tienes razón, Blag. Donde pone n = tam - n debería poner n = tam - 1. Espero no haber causado confusión a dadevil.
Por otro lado, me he fijado que el uso de new y delete que haces es diferente al que esperaría, ya que
int *array = new int;
le asignaría a array memoria para almacenar un solo int (4 bytes) y al intentar acceder a otras posiciones ocurriría un error de protección de memoria. Al menos en VC++ que es el que uso. ¿new y delete varían con respecto al estándar en el Borland C++ ?
Un saludo.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa