Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NicolasPileci en 23 Agosto 2017, 21:28 pm



Título: Error con arreglos
Publicado por: NicolasPileci en 23 Agosto 2017, 21:28 pm
Estimados,
buenos dias.

Serian tan amables de indicarme que error estoy cometiendo en el siguiente programa.
La idea es insertar un nuevo elemento en un arreglo de enteros pero sin eliminar ni pisar nada. Es decir, si el arreglo cuenta con 5 elementos, se debe ingresar uno nuevo, de acuerdo a la posicion ingresada por teclado y correr el resto para no perder nada.

El error que me da es que se pisa el contenido del elemento 3 y el 6 me arroja basura.

Desde ya muchas gracias.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 20
  4.  
  5. int ingresarVector (int vec[TAM]);
  6. void insertarElemento (int vec[TAM], int cant);
  7. void mostrarVector (int vec[TAM], int cant);
  8.  
  9. int main ()
  10. {
  11.    system ("color 0a");
  12.    int vec[TAM],
  13.        cant;
  14.    cant = ingresarVector (vec);
  15.    insertarElemento (vec, cant);
  16.    mostrarVector (vec, cant);
  17.    return 0;
  18. }
  19.  
  20. int ingresarVector (int vec[TAM])
  21. {
  22.    int i,
  23.        cant;
  24.    printf ("Ingrese cantidad de elementos: ");
  25.    scanf ("%d", &cant);
  26.    for (i=0; i<cant; i++)
  27.    {
  28.        printf ("\n\nIngrese elementos: ");
  29.        scanf ("%d", &vec[i]);
  30.    }
  31.    return cant;
  32.  
  33. }
  34.  
  35. void insertarElemento (int vec[TAM], int cant)
  36. {
  37.    int i,
  38.        pos,
  39.        ele;
  40.    cant++;
  41.    printf ("\n\nIngrese posicion de insercion: ");
  42.    scanf ("%d", &pos);
  43.    printf ("\n\nIngrese elemento: ");
  44.    scanf ("%d", &ele);
  45.    for (i=cant-1; i<pos; i--)
  46.        vec[i] = vec[i-1];
  47.    vec[pos-1] = ele;
  48. }
  49.  
  50. void mostrarVector (int vec[TAM], int cant)
  51. {
  52.    int i;
  53.    cant++;
  54.    for (i=0; i<cant; i++)
  55.        printf ("\nPosicion: %d, Elemento: %d", i+1, vec[i]);
  56.        printf ("\n");
  57. }


Título: Re: Error con arreglos
Publicado por: ivancea96 en 23 Agosto 2017, 21:46 pm
CUando pides la posición de inserción, ¿esperas un número en el rango [0, TAM) o [1, TAM]?

Luego:
Código
  1. for (i=cant-1; i<pos; i--)
La condición de ese for es incorrecta. i no va a ser menor que pos (ten en cuenta que empieza en el final del vector). Querrías poner i> o i>=.

Hecha esta corrección y suponiendo que ese fuera el único error, debería estar.
De todos modos:
Código
  1. vec[pos-1] = ele;
ahí le restas 1 a pos. Intuyo que es porque pides la posición en el rango [1, TAM]. Si es así, ten cuidado a la hora de trabajar con "pos". Tal vez te covnendría restarle 1 después de pedirla.
Si no es así, entonces esa línea debería ser:
Código
  1. vec[pos] = ele;