A voir également:
- Algorithme Avancé
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Trottinette qui s'allume mais n'avance pas - Forum Loisirs / Divertissements
- Code ascii algorithme - Guide
- Algorithme qui calcule le carré d'un nombre - Forum Algorithmes / Méthodes
17 réponses
MoodZy
Messages postés
1029
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
28 juillet 2014
845
20 janv. 2010 à 09:27
20 janv. 2010 à 09:27
Juste un algorithme...
Hmmm...
Dans le genre de :
On parcourt la liste L. On compare chaque élément avec X au fur et à mesure qu'on passe en revue la liste.
Si l'élément est égal à X on appelle une fonction qui supprime X dans la liste et qui rappelle la première fonction supprimer_x avec la nouvelle liste. (de cette manière on ira à chaque fois plus loin dans la liste)
Si l'élément n'est pas égal à X on passe au suivant.
A la fin de la fonction tu renvoies L ...
Hmmm...
Dans le genre de :
On parcourt la liste L. On compare chaque élément avec X au fur et à mesure qu'on passe en revue la liste.
Si l'élément est égal à X on appelle une fonction qui supprime X dans la liste et qui rappelle la première fonction supprimer_x avec la nouvelle liste. (de cette manière on ira à chaque fois plus loin dans la liste)
Si l'élément n'est pas égal à X on passe au suivant.
A la fin de la fonction tu renvoies L ...
Salut,
Quel langage?
Quel langage?
MoodZy
Messages postés
1029
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
28 juillet 2014
845
20 janv. 2010 à 09:12
20 janv. 2010 à 09:12
En quel langage?
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
20 janv. 2010 à 09:45
20 janv. 2010 à 09:45
fonction supprimer (tableau:tableau de chaine, elemsuppr: chaine):tableau de chaine i : entier tabretourne:tableau de chaine i=0 tant que tableau[i]<>"" si tableau [i]<>elemsuppr alors tabretourne=tableau[i] i=i+1 fin tant que retourner tabretourne
ca devrai le faire, donc en faite ca veut dire qu'on parcours le tableau original et si la valeur a l'index i est différent de l'élément supprimé alors on l'ajoute dans le tableau a retourner
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Flaiso
Messages postés
4
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
20 janv. 2010 à 10:56
20 janv. 2010 à 10:56
Ce n'est pas un tableau mais plutot une liste et c'est exactement comme MoodZy l'a expliqué.
bjr;
Je me souviens !
Ta liste doit être une liste chainée avec en structure de données de type cellule qui contient un caractère (dans ton cas) et un pointeur sur l'adresse de la cellule suivante. on initie avec la cellule de début et celle de fin qui prend la valeur NULL
on lit la liste tant que le pointeur n'est pas fin
si caractère = x alors on récupère le pointeur de la cellule précédente et on lui donne la valeur de l'adresse de la cellule suivante, c à dire l'adresse qui est le pointeur de la cellule contenant x. La plupart des étudiants détestent les pointeurs mais c'est non seulement utile mais en plus ça peut être 'fun'. JE ne peux en dire plus car j'ai décroché depuis longtemps mais je suis sûr que quelqu'un va prendre le fil sinon j'essaierai de piocher dans ce qui me reste de notes cours de licence. Le mieux est de faire un petit dessin avec flèches pour les poineurs.
Je me souviens !
Ta liste doit être une liste chainée avec en structure de données de type cellule qui contient un caractère (dans ton cas) et un pointeur sur l'adresse de la cellule suivante. on initie avec la cellule de début et celle de fin qui prend la valeur NULL
on lit la liste tant que le pointeur n'est pas fin
si caractère = x alors on récupère le pointeur de la cellule précédente et on lui donne la valeur de l'adresse de la cellule suivante, c à dire l'adresse qui est le pointeur de la cellule contenant x. La plupart des étudiants détestent les pointeurs mais c'est non seulement utile mais en plus ça peut être 'fun'. JE ne peux en dire plus car j'ai décroché depuis longtemps mais je suis sûr que quelqu'un va prendre le fil sinon j'essaierai de piocher dans ce qui me reste de notes cours de licence. Le mieux est de faire un petit dessin avec flèches pour les poineurs.
Flaiso
Messages postés
4
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
20 janv. 2010 à 10:59
20 janv. 2010 à 10:59
En fait, c'est la redaction qui pose problème
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
20 janv. 2010 à 11:19
20 janv. 2010 à 11:19
moodzy: le seul truc c'est que ta liste devra etre trié avant d'etre renvoyé
et un algorithme n'est pas qu'une suite de phrase, c'est aussi du pseudo code (aucun language précis)
et un algorithme n'est pas qu'une suite de phrase, c'est aussi du pseudo code (aucun language précis)
MoodZy
Messages postés
1029
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
28 juillet 2014
845
20 janv. 2010 à 11:22
20 janv. 2010 à 11:22
Tu as surement raison, j'y connais rien en algorithmes, j'ai juste écrit comment moi je coderais... ;)
Que veux tu dire en disant que la liste devra être triée?
Que veux tu dire en disant que la liste devra être triée?
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
20 janv. 2010 à 11:27
20 janv. 2010 à 11:27
ben je ne sais pas si dans ton texte tu prend en compte qu'une nouvelle liste est généré après chaque suppression mais selon moi, ta suppression est sensé laisser des trous a la place de la valeur
genre avec la valeur c a supprimer
i1: a
i2: b
i3: c
i4: d
ca ferai
i1: a
i2: b
i3:
i4: d
au lieu de faire
i1: a
i2: b
i3: d
genre avec la valeur c a supprimer
i1: a
i2: b
i3: c
i4: d
ca ferai
i1: a
i2: b
i3:
i4: d
au lieu de faire
i1: a
i2: b
i3: d
MoodZy
Messages postés
1029
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
28 juillet 2014
845
20 janv. 2010 à 12:33
20 janv. 2010 à 12:33
Souvent pour pouvoir 'supprimer' un élément, il faut recopier la liste dans une nouvelle sans l'élément incriminé... (à moins qu'il existe déjà une fonction remove ou quelque chose du genre) (je ne sais pas s'il existe des langages ou on peut avoir des éléments vides dans une liste)
Et donc il ne reste pas de trou... Enfin moi j'ai pas l'expérience d'énormément de langages informatiques donc ça doit en dépendre...
Et donc il ne reste pas de trou... Enfin moi j'ai pas l'expérience d'énormément de langages informatiques donc ça doit en dépendre...
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
20 janv. 2010 à 12:35
20 janv. 2010 à 12:35
alors on a bien la même vision du problème, l'algo que j'ai écris fait exactement ca
Flaiso
Messages postés
4
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
20 janv. 2010 à 13:02
20 janv. 2010 à 13:02
Vous avez tous, d'une manière ou d'une autre, raison! En fait, on aura une liste principale qu'on sauvera dans une nouvelle liste tierce pour pouvoir la modifier à souhait; On aura aussi des listes intermédiaires pour la sauvegarde de la liste après suppression de l'élément X. Avec ces éléments, quelqu'un peut-il me proposer une redaction?
Salut,
Souvent pour pouvoir 'supprimer' un élément, il faut recopier la liste dans une nouvelle sans l'élément incriminé...
Ce n'est pas obligatoire.
Ca dépends ce qu'on comprends pas une liste.
L'implémentation de l'algo peut être différent en fonction de langage. (Un exemple avec les listes chaînées
C'est c'est un tableau alors il faudra penser décaler les termes après la suppréssion, pas vraiment besoin d'une recopie.
Si c'est une liste chaînée il suffit de garder la liaison entre les termes après la suppression.
Souvent pour pouvoir 'supprimer' un élément, il faut recopier la liste dans une nouvelle sans l'élément incriminé...
Ce n'est pas obligatoire.
Ca dépends ce qu'on comprends pas une liste.
L'implémentation de l'algo peut être différent en fonction de langage. (Un exemple avec les listes chaînées
C'est c'est un tableau alors il faudra penser décaler les termes après la suppréssion, pas vraiment besoin d'une recopie.
Si c'est une liste chaînée il suffit de garder la liaison entre les termes après la suppression.
tibobo_77
Messages postés
1357
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
263
20 janv. 2010 à 13:25
20 janv. 2010 à 13:25
En fait en algo une liste est composé de cellules.
Chaque cellule comporte 2(ou+) éléments:
---une/des données.
---l'adresse de la cellule suivante.
Exemple en C:
struct Cell{
int a;
struct Cell *suivante;
}
Donc pour trouver les valeurs X dans une Liste il faut la parcourir de bout en bout.
Lorsque l'on efface une cellule il faut faire attention a ne pas perdre la suivante.
Supposons une liste ou les cellule s'appelleraient cell1,cell2 et cell3
Si on supprime cell2 brutalement ==> cell1->suivante vaux toujours cell2... ce qui pose problème!
Donc le plus simple ,pour supprimer cell2 de la liste est de faire cela:
cell1->suivant=cell2-suivant
Même plus besoin de se soucier de ce qu'est devenu la cellule 2 ( faire attention a la place mémoire d'un ordi, le plus propre c'est de faire un "free(Cell2)" avant de sortir)
Donc pour ton problème, il faut que tu garde en mémoire 2 cellules: celle que tu regarde et celle d'avant (car on ne peux pas revenir en arrière) et c'est tout.
Si tu as besoin de plus de détails répond direct au post.
Chaque cellule comporte 2(ou+) éléments:
---une/des données.
---l'adresse de la cellule suivante.
Exemple en C:
struct Cell{
int a;
struct Cell *suivante;
}
Donc pour trouver les valeurs X dans une Liste il faut la parcourir de bout en bout.
Lorsque l'on efface une cellule il faut faire attention a ne pas perdre la suivante.
Supposons une liste ou les cellule s'appelleraient cell1,cell2 et cell3
Si on supprime cell2 brutalement ==> cell1->suivante vaux toujours cell2... ce qui pose problème!
Donc le plus simple ,pour supprimer cell2 de la liste est de faire cela:
cell1->suivant=cell2-suivant
Même plus besoin de se soucier de ce qu'est devenu la cellule 2 ( faire attention a la place mémoire d'un ordi, le plus propre c'est de faire un "free(Cell2)" avant de sortir)
Donc pour ton problème, il faut que tu garde en mémoire 2 cellules: celle que tu regarde et celle d'avant (car on ne peux pas revenir en arrière) et c'est tout.
Si tu as besoin de plus de détails répond direct au post.
Flaiso
Messages postés
4
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
20 janv. 2010 à 16:45
20 janv. 2010 à 16:45
Je vous remercie pour toutes ces informations très utiles. Je comprend l'exo mais j'ai des difficultés au niveau de la redaction de la solution. Si je pouvais avoir un exemple... Merci d'avance
tibobo_77
Messages postés
1357
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
263
21 janv. 2010 à 09:49
21 janv. 2010 à 09:49
Un essaie en C, mais ne m'en veux pas si c'est pas super bien codé..
Je suppose la liste déja faite. typedef struct Cell{ int val; struct Cell *suivante; }cell; //Tu fera attention au cas particulier de l'initialisation (que je te laisse faire si tu reprend ce bout de code), car cette méthode demande une mémoire de 2 cellules(evite de reparcourir n fois la boucle) void rechercherEtSupprimer (&cellA,&cellB,valCherche){ //Fait un dernier test if(cellB->suivant == null){ if(cellB->val=valCherche) cellA->suivant=NULL; } //Passe en revue toutes les cellules de la liste Sauf la derniere faiete ci dessus while(cellB->suivant != null){ //si la valeur est trouvée, on la "supprime" et on avance. if(cellB->val=valCherche){ cellA->suivant=cellB->suivant; *cellB=cellB->suivant; } // si elle n'est pas trouvée, on avance else{ *cellA=cellA->suivant; // ou cellA=cellB *cellB=cellB->suivant; } } }
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
21 janv. 2010 à 09:58
21 janv. 2010 à 09:58
écrit ici l'algo de ce que tu as compris (l'ordre d'execution de toutes les taches) on te dira si c'est correct ou pas
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
27 janv. 2010 à 10:39
27 janv. 2010 à 10:39
avec le systeme du lien suivant, c'est a tibobo de t'aider ^^'
mais apparament ca a l'air faux:
tu remplace L1 par L1.lien
ca fait genre: camion=camion.porte_gauche
donc tu remplace le camion par sa propre porte
ca serai plutot L1.valeur=L1.lien
bon après une recherche sur les listes j'ai trouvé 2 type de liste(exemple en perl) mais le principe est qu'une liste et un tableau c'est pareil, c'est juste des synonyme
donc mon algo devrai t'aller (le principe c'est de remplacer la valeur de l'indice i par la valeur de l'indice i+1, afin de "remonter" les valeurs)
mais apparament ca a l'air faux:
tu remplace L1 par L1.lien
ca fait genre: camion=camion.porte_gauche
donc tu remplace le camion par sa propre porte
ca serai plutot L1.valeur=L1.lien
bon après une recherche sur les listes j'ai trouvé 2 type de liste(exemple en perl) mais le principe est qu'une liste et un tableau c'est pareil, c'est juste des synonyme
donc mon algo devrai t'aller (le principe c'est de remplacer la valeur de l'indice i par la valeur de l'indice i+1, afin de "remonter" les valeurs)
tibobo_77
Messages postés
1357
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
263
27 janv. 2010 à 11:13
27 janv. 2010 à 11:13
Remplacer L1 par L1.lien est juste si il suit mon exemple.
Regardez ça, il y a plein de dessins, c'est plus simple qu'à l'écrit.
https://perso.limsi.fr/ancien.html
Sinon il y a d'autre point ou ton algo flanche,Flaiso , try again ;-)
Regardez ça, il y a plein de dessins, c'est plus simple qu'à l'écrit.
https://perso.limsi.fr/ancien.html
Sinon il y a d'autre point ou ton algo flanche,Flaiso , try again ;-)