arreglo en c++

Iniciado por sabar, 30 Noviembre 2014, 22:23 PM

0 Miembros y 1 Visitante están viendo este tema.

sabar

el problema es que no me quiere invertir el arreglo y lo que quiero es que al final me muestre el arreglo original y el arreglo invertido
Código (cpp) [Seleccionar]
#include<iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main(){
          int  j, tam ,num ,i ,vec[30], inverso[30];
          cout<<"ingrese la cantidad de numeros: ";
          cin>>tam;
          for(i=0;i<tam;i++){
           cout<<"ingrese el numero "<<i+1<<": ";
           cin>>vec[i];
          }
          for(i=0; i<tam; i++){
           cout<<vec[i]<<" ";
          }
         
         for(i=tam-1;i>=0;i--){
           inverso[j]=vec[i];
           cout<<inverso[j]<<" "<<endl;
         }


}

someRandomCode

En ningun momento estas incrementando j.
Aparte de eso, no deberias poner using namespace std, sino hacer referencia a std::cout y std::cin.
Eso te va a servir cuando trabajes con multiples namespaces y diferentes elementos del mismo nombre en ellos.
Tampoco necesitas stdio.h ni string.h, solo iostream. Usando esos dos estarias mezclando C y C++
Hay mas cosas, pero fijate hasta donde te nombre que con eso lo vas a solucionar..

sabar

Cita de: someRandomCode en 30 Noviembre 2014, 22:51 PM
En ningun momento estas incrementando j.
Aparte de eso, no deberias poner using namespace std, sino hacer referencia a std::cout y std::cin.
Eso te va a servir cuando trabajes con multiples namespaces y diferentes elementos del mismo nombre en ellos.
Tampoco necesitas stdio.h ni string.h, solo iostream. Usando esos dos estarias mezclando C y C++
Hay mas cosas, pero fijate hasta donde te nombre que con eso lo vas a solucionar..
ya puse lo de incrementar j (j++), pero el programa deja de funcionar a los 5 segundos y creo que tiene que ver con el ultimo ciclo For pero no he visto el error

someRandomCode

#3
No es eso a lo que me referia..

#include <iostream>
int main(int argc,char**argv)
{
std::cout << "Ingrese la cantidad de valores: ";
unsigned cantidad;
std::cin >> cantidad; // por simplicidad, no hago checkeo de si el valor es correcto (numerico y positivo)
int * arreglo = new int[cantidad];
for (unsigned i = 0; i<cantidad;i++) {
std::cout << "Numero(" << i << "):";
std::cin >> arreglo[i]; // tambien podria ser *(arreglo+i)
}
std::cout << "Los valores son los siguientes:" << std::endl;
for (unsigned i=0; i<cantidad;i++) {
std::cout << "[" << arreglo[i] << "]" << std::endl;
}
std::cout << "Invertido queda:" << std::endl;
for (unsigned i=cantidad-1;i>-1;i--) {
std::cout << "[" << arreglo[i] << "]" << std::endl;
}
delete[] arreglo;
}


Eso tendria mas color.. Solo lo muestra, modificalo un poquito si lo queres guardar..
EDIT: Si, ya se que estoy comparando un signed con un unsigned, pero me dio pereza jeje

Ja_90

#4
Código (cpp) [Seleccionar]

int tam ,num ,i ,vec[30];   // El arreglo inverso sobraria al igual que la variable num
 
// en la parte para imprimir el arreglo de manera inversa solo bastaria hacerlo asi

for(i=tam-1 ; i>=0 ; i--)
{
         cout << vec[i] << " ";
}


Lo unico es que tu programa no puede ingresar mas de 30 valores, ya lo has declarado... int vec[30].... Cambialo para que se del tamano que el usuario quiera....Si el usuario ingresa no mas 5 valores, los otros 25 valores del arreglo sobran y eso ocupa memoria.

Por ejemplo:
tamanio es 5 ==> vec[5] ==> ocupa 20 bytes
tamanio es 30 ==> vec[30] ==> ocupa 120 bytes

Nota: En verdad no se ha invertido el arreglo solo lo imprimi de atras hacia adelante.

Para invertirlo y que quede guardado, debes usar una variable auxiliar, y el for
Lo haces hasta la mitad de los elementos, si el # de elementos es
impar. En este caso de que sea par, el elemento del medio no se toma.

Código (cpp) [Seleccionar]

for(int i=0 ; i<TAM/2 ; i++)
    {
        auxi = vec[i];             // Variable auxiliar
        vec[i] = vec[TAM-i-1];       // intercambio de los primeros por los ultimos
        vec[TAM-i-1] = auxi;       // intercambio de los ultimos por los primeros
    }



EDITADO: Para que no tenga problemas con la reglas del subforo, por poner codigo compilable.


:D  ::::Ja_90::::   :D

zShackra

@Ja_90: No se resuelven los ejercicios de los usuarios, se ofrece orientación, no código compilable.

Ja_90

zShackra Ya edite el post, creo que asi deberia haberlo hecho.  :silbar:
:D  ::::Ja_90::::   :D

zShackra

Cita de: Ja_90 en  1 Diciembre 2014, 18:45 PM
zShackra Ya edite el post, creo que asi deberia haberlo hecho.  :silbar:

Exactamente, gracias por cumplir las normas.