Tri alphabétique
Résolu/Fermé
Ola_J
Messages postés
11
Date d'inscription
lundi 17 février 2020
Statut
Membre
Dernière intervention
25 avril 2020
-
Modifié le 17 févr. 2020 à 07:38
Ola_J Messages postés 11 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 avril 2020 - 18 févr. 2020 à 14:08
Ola_J Messages postés 11 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 avril 2020 - 18 févr. 2020 à 14:08
A voir également:
- Tri alphabétique
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum Excel
- Trier par ordre alphabétique excel - Guide
- Tri automatique excel ✓ - Forum Excel
- Tri a bulle en c - Forum C
4 réponses
yg_be
Messages postés
21079
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 janvier 2023
1 309
17 févr. 2020 à 08:56
17 févr. 2020 à 08:56
bonjour, n'as-tu pas oublié de préciser quelle ligne de code générait les caractères anormaux?
as-tu testé ta fonction echange()?
as-tu testé ta fonction echange()?
Ola_J
Messages postés
11
Date d'inscription
lundi 17 février 2020
Statut
Membre
Dernière intervention
25 avril 2020
17 févr. 2020 à 12:41
17 févr. 2020 à 12:41
Au fait il me semble que c'est la fonction échange qui est défaillante. Lorsque je la teste j'ai une erreur au niveau des pointeurs
yg_be
Messages postés
21079
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 janvier 2023
1 309
Modifié le 17 févr. 2020 à 13:07
Modifié le 17 févr. 2020 à 13:07
comment la testes-tu?
je suggère, par ailleurs, d'utiliser %29s dans scanf.
je pense que tu devrais commencer par des exercices plus simples.
je suggère, par ailleurs, d'utiliser %29s dans scanf.
je pense que tu devrais commencer par des exercices plus simples.
Ola_J
Messages postés
11
Date d'inscription
lundi 17 février 2020
Statut
Membre
Dernière intervention
25 avril 2020
>
yg_be
Messages postés
21079
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 janvier 2023
17 févr. 2020 à 15:02
17 févr. 2020 à 15:02
Merci pour le conseil mais pourrai je savoir ce qui cloche dans le programme ?
Ola_J
Messages postés
11
Date d'inscription
lundi 17 février 2020
Statut
Membre
Dernière intervention
25 avril 2020
>
yg_be
Messages postés
21079
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 janvier 2023
17 févr. 2020 à 15:03
17 févr. 2020 à 15:03
Je l'ai testé en la copiant dans un autre algorithme qui devait afficher les chaînes
yg_be
Messages postés
21079
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 janvier 2023
1 309
>
Ola_J
Messages postés
11
Date d'inscription
lundi 17 février 2020
Statut
Membre
Dernière intervention
25 avril 2020
17 févr. 2020 à 19:40
17 févr. 2020 à 19:40
montre-nous cela.
[Dal]
Messages postés
6044
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 janvier 2023
1 040
Modifié le 17 févr. 2020 à 16:25
Modifié le 17 févr. 2020 à 16:25
Salut Ola_J,
Tu devrais aussi te pencher sur les avertissements du compilateur.
Chez moi, lorsque je tente de compiler ton programme, il produit un exécutable mais avec une multitude d'avertissements que tu devrais traiter un par un, en commençant par le premier.
Comme tes données sont supposées être dans un tableau
La chose serait différente si tu avais déclaré un tableau de 5 pointeurs sur char, alloué 5 espaces mémoire avec malloc pour un espace de stockage de 30 char chacun et mis les adresses mémoire vers chaque espace dans ton tableau de pointeurs. Dans ce cas tu aurais pu procéder en permutant les adresses mémoires contenues dans chaque pointeur.
Dal
Tu devrais aussi te pencher sur les avertissements du compilateur.
Chez moi, lorsque je tente de compiler ton programme, il produit un exécutable mais avec une multitude d'avertissements que tu devrais traiter un par un, en commençant par le premier.
$ gcc -Wall 36465943.c 36465943.c: In function ‘main’: 36465943.c:16:11: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[30]’ [-Wformat=] scanf("%s",&liste[len]); ~^ ~~~~~~~~~~~ 36465943.c:29:13: warning: passing argument 1 of ‘echange’ from incompatible pointer type [-Wincompatible-pointer-types] echange(&liste[i],&liste[pos]); ^~~~~~~~~ 36465943.c:5:20: note: expected ‘char *’ but argument is of type ‘char (*)[30]’ void echange(char *mot1, char *mot2); ~~~~~~^~~~ 36465943.c:29:23: warning: passing argument 2 of ‘echange’ from incompatible pointer type [-Wincompatible-pointer-types] echange(&liste[i],&liste[pos]); ^~~~~~~~~~~ 36465943.c:5:32: note: expected ‘char *’ but argument is of type ‘char (*)[30]’ void echange(char *mot1, char *mot2); ~~~~~~^~~~ 36465943.c:9:7: warning: unused variable ‘tmp’ [-Wunused-variable] char tmp; ^~~ 36465943.c: In function ‘echange’: 36465943.c:50:7: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] *mot2=tmp; ^ 36465943.c:46:6: warning: ‘tmp’ is used uninitialized in this function [-Wuninitialized] *tmp= *mot1; ~~~~^~~~~~~
Comme tes données sont supposées être dans un tableau
char liste [5][30];pour permuter deux chaînes, tu devrais utiliser
strcpy()ou
strncpy()en passant par un tableau de char d'une capacité de 30 chars pour le stockage de la chaîne temporaire.
La chose serait différente si tu avais déclaré un tableau de 5 pointeurs sur char, alloué 5 espaces mémoire avec malloc pour un espace de stockage de 30 char chacun et mis les adresses mémoire vers chaque espace dans ton tableau de pointeurs. Dans ce cas tu aurais pu procéder en permutant les adresses mémoires contenues dans chaque pointeur.
Dal
Ola_J
Messages postés
11
Date d'inscription
lundi 17 février 2020
Statut
Membre
Dernière intervention
25 avril 2020
18 févr. 2020 à 14:08
18 févr. 2020 à 14:08
Merci beaucoup pour vos conseils. J'ai corrigé le programme et il est fonctionnel
=======================================Prog=================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char tab[5][30];
char tmp[30];
int i,j,value;
printf("Veuillez entrer cinq mots. Nous allons les classer par ordre alphabetique\n");
for(i=0;i<5;i++)
{
printf("Veuillez entrer le %de nom\n",i+1);
scanf("%s",tab[i]);
}
printf("L'ordre actuel des noms est :\n");
for(i=0;i<5;i++)
{
printf("%s\n",tab[i]);
}
printf("Nous allons maintenant trier les noms\n");
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
value= strcmp(tab[i],tab[j]);
if(value<0)
{
strcpy(tmp,tab[i]);
strcpy(tab[i],tab[j]);
strcpy(tab[j],tmp) ;
}
}
}
printf("Tri termine\n");
printf("L'ordre actuel des noms est :\n");
for(i=0;i<5;i++)
{
printf("%s\n",tab[i]);
}
return 0;
}
=======================================Prog=================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char tab[5][30];
char tmp[30];
int i,j,value;
printf("Veuillez entrer cinq mots. Nous allons les classer par ordre alphabetique\n");
for(i=0;i<5;i++)
{
printf("Veuillez entrer le %de nom\n",i+1);
scanf("%s",tab[i]);
}
printf("L'ordre actuel des noms est :\n");
for(i=0;i<5;i++)
{
printf("%s\n",tab[i]);
}
printf("Nous allons maintenant trier les noms\n");
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
value= strcmp(tab[i],tab[j]);
if(value<0)
{
strcpy(tmp,tab[i]);
strcpy(tab[i],tab[j]);
strcpy(tab[j],tmp) ;
}
}
}
printf("Tri termine\n");
printf("L'ordre actuel des noms est :\n");
for(i=0;i<5;i++)
{
printf("%s\n",tab[i]);
}
return 0;
}