3 votes

Insérer un élément dans le tableau C

J'ai un tableau de nombres qui a déjà été trié auparavant, il n'y a donc pas besoin de le trier, j'ai besoin d'insérer une valeur donnée, nommée val à une position valide dans mon tableau.

Mon programme fonctionne pour une valeur donnée qui est plus petite que la dernière, mais pour le cas où la valeur est plus grande que la dernière, mon programme ne veut tout simplement pas insérer la valeur.

Par exemple, pour le tableau {1, 2, 3, 4, 6} et la valeur 5 le tableau devrait être {1, 2, 3, 4, 5, 6} mais pour la valeur 7 mon tableau ressemble à {1, 2, 7, 4, 6, 0} .

#include <stdio.h>

void insert(int val, int *n, int v[])
{
    int index;
    index = n - 1;
    if (n == 0)
    {
        v[0] = val; // check if array is empty
        n = n + 1; // v[0] becomes the given value
    }              // increase size of array
    if (val > v[index])
    {
        v[index+1] = val; // given value is bigger than the last value in array
        n = n + 1; // increase size
    }
    else
    {
        while (index >= 0 && v[index] > val)
        {
            v[index+1] = v[index]; //shift items to the right
            index--;
        }

        v[index + 1] = val; //after moving elements to the right
        n = n + 1;   // i set the value to the valid position
    }
}

void display(int n, int v[])
{
    int i;
    for (i = 0;i < n; i++)
        printf("%d ", v[i]);
}

int main(void)
{
    int v[10] = { 12, 23, 34, 41, 69, 71, 81, 91, 100 };
    int n;
    n = 9; // size of array
    insert(101,n,v); // 101 is given value to insert
    display(n,v);
    return 0;
}

3voto

dhDPfKCfJdU4JIW4Sc Points 58

Vous avez quelques erreurs :

  1. Vous passez int au lieu de int * donc vous n'êtes pas en mesure de mettre à jour la taille du tableau
  2. Vous ne placez pas correctement les valeurs dans le tableau

Voici à quoi devrait ressembler votre code :

#include <stdio.h>

void insert(int val, int *nPtr, int v[]);
void display(int n, int v[]);

int main(void) {
  int v[10] = {12, 23, 34, 41, 69, 71, 81, 91, 100};
  int n;
  n = 9;
  insert(101, &n, v);
  display(n, v);
  return 0;
}

void insert(int val, int *nPtr, int v[]) {
  int n = *nPtr;
  int i, j;
  int k = 0;

  for (i = 0; i < n + 1; i++)
    if (!k) {
      if (v[i] > val || i == n) {
        for (j = n - 1; j >= i; j--) {
          v[j + 1] = v[j];
        }

        v[i] = val;
        n++;

        k = 1;
      }
    }

  *nPtr = n;
}

void display(int n, int v[]) {
  int i;
  for (i = 0; i < n; i++)
    printf("%d ", v[i]);
  printf("\n");
}

Vous pouvez également essayer d'insérer un numéro au début, par exemple 0 et ça marchera toujours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X