Aller au contenu

Recherche et tri de caractères en C


pacpis

Messages recommandés

Posté(e)

: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:

  • Réponses 69
  • Créé
  • Dernière réponse
Posté(e)
  pacpis a dit :

: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.

Posté(e)

Comment avoir ce type de programme... Très simplement en se servant de son cerveau et en regardant les indices de tsubasa. C'est plutôt de l'algo qui n'utilise pas des choses très compliqué en C.

Bonne chance et si tu as encore du mal,poste du code au lieu de demander que l'on te ponde un code entier :francais:

Posté(e)

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:

Posté(e)

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:

Posté(e)

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 ;)

Posté(e)

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);

}

Posté(e)

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?

Posté(e)

: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

Posté(e)

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]

Posté(e)

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:

Posté(e)
:fete: Merci pour ceux qui veulent bien m'aider, je vais suivre tous vos conseils. Pour commencer, j''éditer le titre du Topic. Je vais faire les modifications necessaires et je vous poste le résultat. :craint:
Posté(e)

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’

Posté(e)

#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:

Posté(e)

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 ????

Posté(e)

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.

Posté(e)
:ati: Merci pour tes conseils Quarky, j'avais pas vu la balise code, mais je vais éditer. Le problème est que je n'ai jamais rencontré d'erreur à propos de la segmentation. J'ai essayé de modifier mon code autant que possible, mais rien (Bizarre) :yes:
Posté(e)

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:

Posté(e)

Enfin un qui comprend mon problème, Je veux créer un tablleu contenant des mots, puis ensuite rechecher un mot dans ce tableau. suis -je clair à présent?

Posté(e)

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...

Archivé

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

×
×
  • Créer...