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
#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;
}
}
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..
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
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
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.
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.
@Ja_90: No se resuelven los ejercicios de los usuarios, se ofrece orientación, no código compilable.
zShackra Ya edite el post, creo que asi deberia haberlo hecho. :silbar:
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.