Aller au contenu

Recherche et tri de caractères en C


pacpis

Messages recommandés

:byebye: Salut à tous, je suis débutant en langage C et j'aimerai avoir votre aide svp, j'ai besoin de savoir comment avoir ces programmes :

-Recherche d’un nom dans un tableau

-Tri par ordre alphabétique

-Recherche du minimum et du maximum d’un tableau

- Insertion d’un élément dans un tableau ordonné.

J'aimerai les avoir séparemment, donc si l'un de vous trouve un il me le poste. :transpi:

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 69
  • Créé
  • Dernière réponse

:francais: Salut à tous, je suis débutant en langage C et j'aimerai avoir votre aide svp, j'ai besoin de savoir comment avoir ces programmes :

-Recherche d’un nom dans un tableau

-Tri par ordre alphabétique

-Recherche du minimum et du maximum d’un tableau

- Insertion d’un élément dans un tableau ordonné.

J'aimerai les avoir séparemment, donc si l'un de vous trouve un il me le poste. :zarb:

1- Voir boucle for/while afin de parcourir les entrées du tableau et de comparé avec ta clef/chaine

2- Voir algo de tri ( sequentiel, dicho etc .. )

3- Voir 2

4- Allocation et creation du nouveau tableau, suppression de l'ancien.

Lien vers le commentaire
Partager sur d’autres sites

Comment avoir ces programmes ? en buchant tes cours surement...

en tout cas pas en attendant ici qu'une bonne poire veuille bien faire tes devoirs à ta place... lol

Et tes programmes c'est genre 3 lignes chacun, pas de quoi casser 3 pattes à un canard :francais:

Encore si y'avais du challenge je veux bien mais là :zarb:

Lien vers le commentaire
Partager sur d’autres sites

Ouai tu verras ce que tu demande c'est vraiment pas compliqué et je dirais que c'est des bases donc tu as quand même meilleur temps de bosser dessus seul et si tu coince vraiment a un endroit tu post ton code et on pourra t'aider. Te donner le code tout fait ne t'aiderais pas du tout a comprendre les mécanismes :chinois:

Lien vers le commentaire
Partager sur d’autres sites

alors franchement pour les algo, et bien sers toi de tes neurones, tu verras, ça te seras utile par la suite. Si tu as des problèmes à retranscrire tes algo en C, poste les nous en français/pseudocode/meta-langage et on t'aidera sur la syntaxe.

au passage, pour comparer deux chaine de caractère, il existe strncmp(), à regarder dans le man ;)

Lien vers le commentaire
Partager sur d’autres sites

J'ai commencé par le premier mais la compilation est impossible :j'ai des erreurs, voici mon code source

#include<stdio.h>
#include<string.h>

main()
{

 int nbr_mot, i;
 char tab[nbr_mot], mot;

 /*Remplissage du tableau*/
  printf("Saisir le nombre de mots du tableau:  \n");
  scanf("%d\n", &nbr_mot);
 for(i=1, i=nbr_mot, i++)
 scanf("%c", &tab[i]);

/*Recherche d'un mot dans un tableau*/
printf("\n Saisir le mot à rechercher dans le tableau :  ");
scanf("%c\n", &mot);
  for(i=1, i=nbr_mot, i++);
  while(mot!=tab[i]);
	strcmp(mot, tab[i]);
  printf("Le mot cherché est à la ligne %d", i);

}

Lien vers le commentaire
Partager sur d’autres sites

Tu nous laches un code comme ca, sans même préciser d'où vient le problème de compilation! Tu pourrais au moins indiquer la ligne et le message d'erreur, ca ferait gagner du temps à tout le monde... :incline:

Ah, une petite remarque au passage: les titres de topic dans le genre de celui-ci, évite parce que c'est super-chiant de voir marqué "urgent" "need help pliz!!!" "svp, aidez-moi" et autres conneries du même tonneau :iloveyou::byebye:

edit: après avoir lu rapidement ton code, l'erreur semble venir des boucles 'for', non?

Lien vers le commentaire
Partager sur d’autres sites

:incline: Pour remarque, tu n'es pas forcé de répondre. J'ai pas besoin de me faire sermoner par quelqu'un comme toi donc ............. :iloveyou:

Voici les codes d'erreurs que j'ai recu:

recherchenom.c: In function ‘main’:

recherchenom.c:13: error: expected ‘;’ before ‘)’ token

recherchenom.c:13: error: expected expression before ‘)’ token

recherchenom.c:19: error: expected ‘;’ before ‘)’ token

recherchenom.c:19: error: expected expression before ‘)’ token

recherchenom.c:21: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast

recherchenom.c:21: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast

Merci pour ceux qui pouront m'aider

Lien vers le commentaire
Partager sur d’autres sites

dans le "for", il faut mettre des ; au lieu , !!!

pour l'algo de recherche :

trouve = NON

index_tableau = 1

tant que ( (trouve = NON) ET (index_tableau < taille_tableau))

faire

debut

si (tableau [index_tableau] == mot_a_chercher

alors trouve = OUI

sinon incremente de 1 index_tableau

fin

si (trouve = OUI)

alors afficher tableau [index_tableau]

Lien vers le commentaire
Partager sur d’autres sites

main()	 // <= Il ne faut pas préciser 'void main(void)' ?
{

 int nbr_mot, i;
 char tab[nbr_mot], mot;  // <= En C ou peux pas créer de tableau d'une valeur non fixe...

 /*Remplissage du tableau*/
  printf("Saisir le nombre de mots du tableau:  \n");
  scanf("%d\n", &nbr_mot);
 for(i=1, i=nbr_mot, i++)	// <= C'est des ';' à la place des ','
 scanf("%c", &tab[i]);	  // C'est pas '%s'  pour une chaine et '%c' pour un seul caractère?

/*Recherche d'un mot dans un tableau*/
printf("\n Saisir le mot à rechercher dans le tableau :  ");
scanf("%c\n", &mot);
  for(i=1, i=nbr_mot, i++);
  while(mot!=tab[i]);
	strcmp(mot, tab[i]);  // Il doit manquer des '*' avant les 2 arguments: c'est des pointeur... (je pense :D)
  printf("Le mot cherché est à la ligne %d", i);

}

Je reviens sur la définition des caractères:

il te faudrai un '#define nbr_mot 500' en haut (500 pour être sur que ça ne dépasse pas). Et oubli le 'int nbr_mot' et la demande du nombre ainsi que la question pour le redéfinir :fete: .

Pour définir le mot, je pense que tu est obligé de faire un :

char mot[nbLettre], tab[nbr_mot][nbLettre]; // faut un #define pour nbLettre

char étant un caractère, il te faut un tableau de caractères pour avoir un mot et un tableau de mot pour tab.

Dans ce cas, tu ne devrai plus avoir besoin des '*' dans le strmp.

PS: je n'ai encore jamais manipulé de chaines de caractères, merci de me corriger et/ou de donner le résultat

PS2: Un changement du nom du sujets serai le bien venue... "urgent" ne veux rien dire :s Pense à ceux qui sont là tout le temps et l'état du forum si tout le monde fesait comme toi.

Wii: Il en faut pour tout le monde :craint:

Lien vers le commentaire
Partager sur d’autres sites

Salut j'ai suivi vos deux conseils, mais je commence à m'embrouiller car j'ai plus d'erreur encore voici le code :

#include<stdio.h>
#include<string.h>

main(void)
{
 #define nbr_mot 50;
 #define nbLettre;
 int  i;
 char tab[nbr_mot];
 char mot, trouve=NON;
 int index_tab=1;

 /*Remplissage du tableau*/
 char mot[nbLettre], tab[nbr_mot][nbLettre];
 for(i=1; i=nbr_mot; i++)
 scanf("%s", &tab[i]);

/*Recherche d'un mot dans un tableau*/
printf("\n Saisir le mot à rechercher dans le tableau :  ");
scanf("%c\n", &mot);
 while(trouve=NON && index_tab<nbr_mot);
{
 if(tab[index_tab]==mot);
  trouve=OUI;
  else
	 index_tab++
}
if(trouve=OUI)
  printf("Le mot cherché est à la ligne %d", index_tab);

}

voici les erreurs que j'ai obtenu :

recherchenom.c:7:19: warning: missing whitespace after the macro name

recherchenom.c: In function ‘main’:

recherchenom.c:9: error: expected ‘]’ before ‘;’ token

recherchenom.c:10: error: ‘NON’ undeclared (first use in this function)

recherchenom.c:10: error: (Each undeclared identifier is reported only once

recherchenom.c:10: error: for each function it appears in.)

recherchenom.c:14: error: expected expression before ‘;’ token

recherchenom.c:14: error: expected statement before ‘]’ token

recherchenom.c:14: error: expected expression before ‘[’ token

recherchenom.c:15: error: expected expression before ‘;’ token

recherchenom.c:16: error: ‘tab’ undeclared (first use in this function)

recherchenom.c:21: error: expected ‘)’ before ‘;’ token

recherchenom.c:24: error: ‘OUI’ undeclared (first use in this function)

recherchenom.c:25: error: expected expression before ‘else’

Lien vers le commentaire
Partager sur d’autres sites

#include<stdio.h>
#include<string.h>

#define nbr_mot 50  // Les define sont avec les #include et il n'y a pas de ';' à la fin.
#define nbLettre 20 // Il faut définir un nombre

main(void)
{
 int  i;
 char tab[nbr_mot];	 // Tu créer 2 fois tes variables?
 char mot, trouve=NON; // considère plutôt que trouve est un int : 0 quand c'est "non" et 1 quand c'est oui;) 
 int index_tab=1;

 /*Remplissage du tableau*/
 char mot[nbLettre], tab[nbr_mot][nbLettre];  // Tu crée 2 fois tes varialbles?
 for(i=1; i=nbr_mot; i++)
 scanf("%s", &tab[i]);  // Je ne pense pas qu'il faille le '&'

/*Recherche d'un mot dans un tableau*/
printf("\n Saisir le mot à rechercher dans le tableau :  ");
scanf("%c\n", &mot);  // Je ne pense pas qu'il faille le '&' et ne met pas de '\n' dans un scanf
 while(trouve=NON && index_tab<nbr_mot);  // pour tester une variable (int) il faut faire '=='
{
 if(tab[index_tab]==mot) { // pas de ';' après un if
  trouve=OUI;
 }
  else {		   // moi j'ai tendance à mettre des accolade partout :D 
	 index_tab++
  }
}
if(trouve=OUI)
  printf("Le mot cherché est à la ligne %d", index_tab);

}

Tu devrai aller voir sur Le site du zéro. Ils ont un cours sur le C pas mal du tout...

Et pour info, si tu fait #define toto titi, c'est comme si tu remplacais tout les 'toto' en 'titi' dans tn code :yes:

Lien vers le commentaire
Partager sur d’autres sites

Merci pour cette aide Dush (Tu es un génie en C ou quoi?) , tout se passe bien sauf au niveau de l'exécution, voici mon code final:

#include<stdio.h>
#include<string.h>
#define nbr_mot 50
#define nbLettre 20

main(void)
{
 int  i;
 char tab[nbr_mot], mot;
 int trouve=0, index_tab=1;

 /*Remplissage du tableau*/
printf("Saisir les mots du tableau: ");
 for(i=1; i=nbr_mot; i++)
 scanf("%s", tab[i]);

/*Recherche d'un mot dans un tableau*/
printf("\n Saisir le mot à rechercher dans le tableau :  ");
scanf("%c", mot);
 while(trouve==0 && index_tab<nbr_mot);
{
 if(tab[index_tab]==mot)
  trouve=1;
  else {
	 index_tab++; }
}
if(trouve=1)
  printf("Le mot cherché est à la ligne %d", index_tab);

}

en executant j'obtiens ceci apres avoir saisi: Erreur de segmentation ????

Lien vers le commentaire
Partager sur d’autres sites

pacpis : :ati: d'utiliser la balise code.

Et rappelles toi que toute remarque est bonne à prendre surtout venant de quelqu'un qui peut t'aider. Dans le cas présent, windu faisait la démarche mais il lui manquait de quoi apporter un élément de réponse.

Par contre ces mots étaient peut être fort. Ils ont du dépasser sa pensée.

:yes:

PS : un conseil : tu devrais peut être chercher tout seul à présent. Cela te permettrait très certainement de progresser car on apprend toujours plus par soi-même plutôt que lorsque quelqu'un te dit on sont les erreurs.

Lien vers le commentaire
Partager sur d’autres sites

En fait je comprend pas vraiment ou tu veux en venir --> Au départ tu veux récupérer une chaine de caractère ?

printf("Saisir les mots du tableau: ");
for(i=1; i=nbr_mot; i++)
scanf("%s", tab[i]);

Si tu veux récupérer une chaine de caractère qu'un utilisateur tape dans la console je te conseil plutôt cette manière :

char* string;
printf("Saisir un mot: ");
fgets(string,1024,stdin);

printf("Mot : %s",string);

Après le reste ca découle vachement me semble t'il que tu n'utilise pas les chaine de caractère correctement (char *)

Par contre si tu voulais faire un tableau qui contient plusieurs mots dans ce cas tu devrais utiliser un tableau destring donc un char** et c'est là que ca commence a être interressant :chinois:

Lien vers le commentaire
Partager sur d’autres sites

1/

	 for(i=1; i=nbr_mot; i++)

Comparaison toujours fausse sauf pour nbr_mot à 1.

2/

 scanf("%s", tab[i]);

incohérence. tab est un string et pas un trableau de string.

3/

 scanf("%c", mot);

Mauvaise idée d'appeller mot un caractère

4/

  while(trouve==0 && index_tab<nbr_mot);
{
 if(tab[index_tab]==mot)
  trouve=1;
  else {
	 index_tab++; }
}

Trop compliqué. Plus simple :

 while (tab[index_tab++]!=mot && index_tab<nbr_mot);

5/ Évite de mettre des cartons rouges à quelqu'un qui te fais remarquer une erreur, ça ne donne pas envie d'aider...

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...