Ayuda con vectores c++

Iniciado por Faceless, 16 Noviembre 2015, 00:30 AM

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

Faceless

Muy buenas, necesito saber como consigo hacer lo siguiente:

-Que pida al usuario ingresar un vector de números enteros positivos.

-Los números del vector se deben ingresar separados por uno o mas espacios.

-El final del vector estar indicado por un numero negativo. El vector se debe cargar dentro de la función
"cargar_vector".


-El tamaño máximo del vector esta indicado por la constante entera MAX=10. Si el usuario ingresa un vector mas grande de lo soportado,el programa deberá utilizar los primeros 10 números.

- Posteriormente, el programa debe imprimir por pantalla los elementos
del vector mediante la función "imprimir_vector".


Lo que necesito ayuda es en lo siguiente:

-Que una variable almacene el vector ingresado, el cual no debe tener mas de 10 numeros, y excluir el numero negativo que se ingresó al final para terminar de ingresarlo en el caso de que se ingresen menos de 10 numeros

y que la otra función imprimir_vector almacene la variable de la función cargar_vector



Ejemplo de funcionamiento:

Ingrese los números del vector: 7 6 5 4 3 2 1 -1

El vector es: 7 6 5 4 3 2 1


#include <iostream>
#include<iomanip>
using namespace std;

void cargar_vector(int [],int);
void imprimir_vector(int [],int);

const int MAX=10;

int main()
{

int vector[MAX];

int longitud;



  cargar_vector(vector, longitud);

imprimir_vector(vector, longitud);




return 0;
}

void cargar_vector(int vector[],int longitud)
{
longitud=0;
    cout<<"Ingrese los numeros del vector: ";


while(longitud<MAX)
{
cin>>vector[longitud];

if(vector[longitud]<0)
{

break;
}

longitud++;

}



}

Zodiak98

#1
Cita de: Faceless en 16 Noviembre 2015, 00:30 AM
y excluir el numero negativo que se ingresó al final para terminar de ingresarlo
Eso me ha confundido. XD

Según lo que entendí lo que puedes hacer es pedir los valores, si es menor que 0 cortas el búcle, y es imposible que ingreses más de 10 valores ya que el búcle te lo prohíbe, una vez llegues ahí se cortará. Y si quieres saber cuántos elementos hay en el arreglo entonces la función cargar_vector hazla entera y retorna el valor de longitud, no tiene mucho sentido que lo pases como parámetro e inmediatamente lo pongas igual a cero. Es decir, quedaría algo así:

Código (cpp) [Seleccionar]

int cargar_vector(int vector[])
{
int longitud=1; //El 1 es porque ya contarás al primer elemento
   cout<<"Ingrese los numeros del vector: ";

while(longitud<(MAX + 1)) /* el + 1 es porque estamos contando desde 1, si no estaríamos cogiendo solo 9 valores.*/
{
 cin>>vector[longitud];

 if(vector[longitud]<0)
 {
 break;
 }

 longitud++;

}

return longitud;
}


Y el main quedaría así:
Código (cpp) [Seleccionar]

int main()
{

int vector[MAX];

imprimir_vector(vector, cargar_vector(vector));

return 0;
}



Y imprimir_vector te quedaría así:
Código (cpp) [Seleccionar]

void imprimir_vector(int vector[], int longitud) {
    for(int i = 0; i < longitud; ++i) {
         if(vector[i] < 0) {
              vector[i] = 0; // Encontramos un valor negativo y lo sustituimos por 0.
              break;
         }
         cout << vector[i];
    }
}


Edit: Una cosa que me he dado cuenta a último momento, en la función main el arreglo está cogiendo 11 valores, no 10, tendrías que hacer MAX igual a 9. Pero entonces quitarías el + 1 que he puesto en el búcle.

Zodiak98

#2
He presionado "citar" en lugar de editar, vaya torpe. xD

Faceless

Quizá me explique mal

Lo que debe suceder es esto:

El vector, tiene que tener como máximo 10 valores enteros positivos( puede tener menos valores, no es necesario que sea un vector de 10 números, ni tampoco rellenar con cero )



En el caso de ingresar menos de 10 valores, se debe ingresar un valor negativo cualquiera con el fin de cortar el bucle, y asi quedarnos con un vector de cualquier dimensión menor que 10, pero no se debe incluir el numero negativo, si no los anteriores solamente.



Igual muchas gracias por tu ayuda , por que me quitaste algunas dudas