Programación General > C/C++

 Re: Arrays

<< < (2/3) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa