Supprimer occurrences dans un tableau

Résolu/Fermé
haninoun12 Messages postés 6 Date d'inscription dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015 - 8 nov. 2015 à 16:14
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 nov. 2015 à 21:05
Bonjour, je suis débutante en langage c et je veux faire une fonction récursive qui cherche les occurrences dans un tableau, et les supprimer en décalant les cases..
mais ça ne marche pas quoi que je fasse ! :( si vous pouvez m'aider svp...?
.
.
si je rempli mon tableau avec : 1 | 2 | 2 | 3 | 4 |(pour taille = 5)
j'ai comme resultat : 1 | 2 | 3 | 3 | 4 ... :/
.
voici ma fonction :
.
//--------------------------------------------------------------------
// Methode basée sur la recherche sequentielle (TABLEAU NON TRIE) :
void suppressionSequentielle(int tableau[],int taille){
	int j = 0, i = taille-1;
	if(i < 0)
		return;
	
	if(tableau[i] == tableau[i-1]){
		for(j = i; j < taille; j++){
			tableau[j] = tableau[j+1];
		}
		taille--; 
	}
	suppressionSequentielle(tableau,taille-1);
}
//----------------------------------------------------------------------
A voir également:

1 réponse

NHenry Messages postés 15172 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 décembre 2024 350
8 nov. 2015 à 16:24
Déjà si taille=1, tu fais un buffer underflow.
As-tu essayé de voir en pas à pas ce que ça donne ?
0
haninoun12 Messages postés 6 Date d'inscription dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015
8 nov. 2015 à 16:45
J'ai ajouté à la 1ere condition :
if(i < 0 || taille < 2)
return;
mais rien n'a changé. le probleme est dans la boucle et aussi dans taille--; quand j'affiche le tableau avec la fonction afficherTableau(tableau,taille); la taille n'a pas été diminué..
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > haninoun12 Messages postés 6 Date d'inscription dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015
8 nov. 2015 à 17:44
if(i < 0 || taille < 2)
Du coup, le i est inutile. Mets plutôt : if (taille < 2)

for(j = i; j < taille; j++){
Attention, taille ne représente pas le nombre d'éléments dans ton pointeur puisque tu modifies la variable comme s'il s'agissait d'un compteur...
Il faut que tu utilises une variable supplémentaire en paramètre dans ta fonction (un compteur ET la vraie taille qui elle ne changera pas).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
9 nov. 2015 à 21:05
Je mets en résolu : le posteur est parti sur un autre post...
0