Créer un tableau et supprimer une case sans décalage

[Fermé]
Signaler
Messages postés
4
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
2 août 2020
-
Messages postés
5630
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 octobre 2021
-
Salut,

je suis étudiant en informatique L1 et débutant en langage de programmation C. Ayant une faible base en programmation (algorithme aussi) de tableau puisque ça fait une semaine qu'on a commencé ce chapitre.

Notre prof d'algorithmique nous a passé un devoir qui consiste à créer un tableau N élément de type entier, puis le programme doit supprimer le contenu d'une case MAIS il ne fera pas de décalage(la case restera vide).

Vous trouverez en bas le code que j'ai édité (incomplet) en langage C et un exemple de ce que le programme est censé afficher

PS: que ce soit en langage C ou en langage naturel, toute proposition est la bienvenue.

Merci

Le code :

#include <stdio.h>
int main()
{
 int i, n;
 int ta[i];
 
 /*i=compteur
  ta=tableau
  n=Nombre de case*/
 
printf("Saisir le nombre de case a creer\n");
 scanf("%d", &n);
 
  printf("Remplir le tab\n");
  
 
 for(i=1;i<=n;i++)
 {
 scanf("%d", ta[i]);
 }
 
 
 
 
 
 
 
 return 0;
}


Exemple du résultat attendu

2 réponses

Messages postés
5630
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 octobre 2021
950
Salut patronus891,

En ligne 5, que vaut
i
à ton avis ?

En ligne 17, ta boucle commence à 1, or, les indices de tableaux commencent à 0.

Ton code ne propose qu'une saisie d'un tableau dimensionné à l'exécution (c'est du C99). Après correction des problèmes ci-dessus, il faudra :

- afficher le contenu du tableau saisi
- retirer l'un des éléments
- afficher le contenu du tableau modifié

Puisque tu ne fais pas de décalage, tu auras toujours la même taille de tableau et il te faudra marquer la case supprimée comme étant "vide".

Pour cela, voilà quelques idées : tu peux définir une convention en mettant dans la case supprimée une valeur signifiant "vide" et que l'utilisateur ne doit pas saisir (il faudra informer l'utilisateur). Ou tu peux stocker séparément l'index de la case qui est réputée "vide", ou la liste des cases qui sont réputées "vides" si plusieurs suppressions doivent être possibles.

Dal
Messages postés
4
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
2 août 2020

Le Problème ce que si j'avais un peu de temps avant la date limite(du dev à rendre) je pourrais faire des recherches et mieux écrire mon code. Je n'ai pas compris la moitié de ce t'as écris , non pas par faute d'explication mais plutôt par mon manque de connaissance en ce sujet.

Donc si vs pouvez me donner le script en langage naturel je saurai le traduire en langage C.
Messages postés
5630
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 octobre 2021
950 >
Messages postés
4
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
2 août 2020

OK :
  • demander à l'utilisateur le nombre d'éléments du tableau et stocker ce nombre dans une variable entière
    N
    déclarée au préalable
  • déclarer et dimensionner un tableau de type entier afin qu'il puisse contenir
    N
    éléments
  • demander à l'utilisateur de saisir les éléments du tableau, et les stocker de l'indice
    0
    à l'indice
    N-1
    ...
  • afficher le contenu des
    N
    éléments du tableau, de l'indice
    0
    à l'indice
    N-1
    ...
  • demander à l'utilisateur d'indiquer quelle "case" de
    1
    à
    N
    il veut supprimer et stocker ce numéro dans une variable entière
    case_supprimee
    déclarée au préalable
  • afficher le contenu des
    N
    éléments du tableau, de l'indice
    0
    à l'indice
    N-1
    en vérifiant si l'on est arrivé à l'indice
    case_supprimee-1
    , et si c'est le cas ne rien afficher
Messages postés
4
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
2 août 2020
>
Messages postés
5630
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 octobre 2021

En suivant vos instructions et grâce à l'aide de quelques camarades, j'ai pu créer un programme qui demande à l'utilisateur de dimensionner un tableau, de le remplir et qui lui demande de supprimer un élément du tableau.

Le code est en bas.

Après quelques recherches, j'ai appris que pour que l'emplacement soit vide il faut faire un décalage à l'endroit supprimé donc s'il vous plaît dites-moi comment décaler( y'a t-il un truc comme while ou if pour décaler un élément) aussi s'il faut déclarer une nouvelle variable, grosso modo le code ????????

Le code :

#include <stdio.h>

int main()
{

int pos, i, nbr;
int t[50];

//---1) Demande à l'utilisateur le nombre de case à créer & remplissage du tableau-----//

printf(" Entrez le nombre des éléments dans le tableau : ");
scanf("%d", &nbr);
i=0;

printf(" Entrez les %d éléments : \n", nbr);
while(i < nbr)
{
scanf("%d", &t[i]);
i++;
}

//----2) suppression d'element------//

printf(" Entrez la case dont vous voulez supprimer l'élément: ");
scanf("%d", &pos);

if (pos >= nbr+1)
{
printf("la Suppression n'est pas possible.\n");
}
else
{
i=pos-1;

while (i< nbr - 1)
{
t[i] = t[i+1];
i++;
}

printf(" Aprés la suppression, le tableau = ");
i=0;
while (i < nbr - 1)
{
printf("%d", t[i]);
i++;
}
}

return 0;
}
Messages postés
5630
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 octobre 2021
950
Il y a quelques maladresses dans ton code.

Par exemple, en ligne 27
if (pos >= nbr+1)
pourrait s'écrire plus simplement
if (pos > nbr)
. Tu pourrais tester aussi le signe. L'affichage du tableau peut être amélioré avec des espaces ou des taburations (et/ou des barres verticales, etc.).

Sinon, le code fonctionne et il fonctionne déjà par décalage (qui est fait par la boucle
while
en ligne 35 à 39).

Cependant, j'avais cru comprendre que tu ne devais pas faire de décalage, et juste disposer d'un moyen pour considérer un case existante comme étant "vide" de façon à ne pas l'afficher.

Dal