Error con arreglos

Iniciado por NicolasPileci, 23 Agosto 2017, 21:28 PM

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

NicolasPileci

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.

#include <stdio.h>
#include <stdlib.h>
#define TAM 20

int ingresarVector (int vec[TAM]);
void insertarElemento (int vec[TAM], int cant);
void mostrarVector (int vec[TAM], int cant);

int main ()
{
    system ("color 0a");
    int vec[TAM],
        cant;
    cant = ingresarVector (vec);
    insertarElemento (vec, cant);
    mostrarVector (vec, cant);
    return 0;
}

int ingresarVector (int vec[TAM])
{
    int i,
        cant;
    printf ("Ingrese cantidad de elementos: ");
    scanf ("%d", &cant);
    for (i=0; i<cant; i++)
    {
        printf ("\n\nIngrese elementos: ");
        scanf ("%d", &vec[i]);
    }
    return cant;

}

void insertarElemento (int vec[TAM], int cant)
{
    int i,
        pos,
        ele;
    cant++;
    printf ("\n\nIngrese posicion de insercion: ");
    scanf ("%d", &pos);
    printf ("\n\nIngrese elemento: ");
    scanf ("%d", &ele);
    for (i=cant-1; i<pos; i--)
        vec[i] = vec[i-1];
    vec[pos-1] = ele;
}

void mostrarVector (int vec[TAM], int cant)
{
    int i;
    cant++;
    for (i=0; i<cant; i++)
        printf ("\nPosicion: %d, Elemento: %d", i+1, vec[i]);
        printf ("\n");
}

ivancea96

CUando pides la posición de inserción, ¿esperas un número en el rango [0, TAM) o [1, TAM]?

Luego:
Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
vec[pos] = ele;