Programme de l'algorithme naif en C
Fermé
yirachan
-
14 oct. 2013 à 11:42
yira Messages postés 34 Date d'inscription lundi 19 avril 2010 Statut Membre Dernière intervention 23 juillet 2015 - 15 oct. 2013 à 22:01
yira Messages postés 34 Date d'inscription lundi 19 avril 2010 Statut Membre Dernière intervention 23 juillet 2015 - 15 oct. 2013 à 22:01
A voir également:
- Programme de l'algorithme naif en C
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Code ascii algorithme - Guide
- Algorithme qui calcule le carré d'un nombre - Forum Algorithmes / Méthodes
- Tri d'une matrice algorithme - Forum C
6 réponses
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié par [Dal] le 14/10/2013 à 13:00
Modifié par [Dal] le 14/10/2013 à 13:00
La "naïveté" se réfère au caractère évident ou simpliste. On ne sait pas de quel algorithme tu parles. Clarifie, stp (et clarifie aussi quel type d'aide tu attends).
Dal, je parle de l'algorithme naif qui permet de faire une recherche exacte d'un mot dans un texte !
J'espère que c'est plus clair comme ça :P
J'espère que c'est plus clair comme ça :P
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
14 oct. 2013 à 13:31
14 oct. 2013 à 13:31
Non, c'est toujours le brouillard, car tu n'as répondu qu'à moitié : décris ton algorithme, montre ton code C d'implémentation (copie-colle le entre balises "code" - clique sur le bouton à droite du bouton S), et dis nous là où tu bloques.
yira
Messages postés
34
Date d'inscription
lundi 19 avril 2010
Statut
Membre
Dernière intervention
23 juillet 2015
14 oct. 2013 à 17:45
14 oct. 2013 à 17:45
Justement Dal c'est ça le souci, je n'ai jamais fais du C en plus pour l'algorithme j'ai juste trouvé qlq truc en internet donc je te montre ce que j'ai fais mais de n'importe quoi car tu risque de ne rien comprendre :/
"code"
/* Algorithme naif, avec boucle interne, sans boucle rapide, sans sentinelle */
#include <stdio.h>
int i; /*compteur*/
int j; /*compteur*/
int n ;
int m; /*longeur d'un mot*/
int calcul_occ (int occ); /*pour le calcul d'une occurance; pour trouver une occurance*/
char *x (int compt) ;
char *y (int comp);
int calcul_occ (int occ){
j = 0;
while (j <= n-m) {
int i = 0;
while ( (i < m) && (x(i) = y(i+j)) ) {
i = i+1;
if (i >= m) {
return occ;
printf ("Signaler une occurance %d\n", occ);
}
j = j+1;
}
}
}
"code"
/* Algorithme naif, avec boucle interne, sans boucle rapide, sans sentinelle */
#include <stdio.h>
int i; /*compteur*/
int j; /*compteur*/
int n ;
int m; /*longeur d'un mot*/
int calcul_occ (int occ); /*pour le calcul d'une occurance; pour trouver une occurance*/
char *x (int compt) ;
char *y (int comp);
int calcul_occ (int occ){
j = 0;
while (j <= n-m) {
int i = 0;
while ( (i < m) && (x(i) = y(i+j)) ) {
i = i+1;
if (i >= m) {
return occ;
printf ("Signaler une occurance %d\n", occ);
}
j = j+1;
}
}
}
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
15 oct. 2013 à 00:16
15 oct. 2013 à 00:16
Salut yira,
Si l'algorithme n'est pas donné, tu dois le déterminer avant de te lancer dans le codage en C.
Cette page peut certainement t'aider :https://www.irif.fr/~carton//Enseignement/Algorithmique/Programmation/Pattern/MorrisPratt/
Cependant, il te faudra voir ton cours pour valider si cet algorithme comporte une "boucle interne", et ne comporte pas de "boucle rapide" ou de "sentinelle". Ce sont des notions qui ont dû t'être expliquées par la personne ayant rédigé l'énoncé (ton enseignant?).
En ce qui concerne ton code C. Tu devrais sérieusement revoir tes bases.
Je pense que tu confonds la syntaxe de déclaration d'une fonction et celle de déclaration d'un tableau avec tes x et y et le prototype de ta fonction n'a pas de sens pour moi.
Voilà une charpente de code C comportant un prototype raisonnable pour cette fonction, et permettant de tester l'implémentation de ton algorithme.
Je me permets de citer le passage du cours de M. Olivier CARTON, situé à l'adresse précitée, en commentaire de la fonction
A toi de jouer :-)
Dal
Si l'algorithme n'est pas donné, tu dois le déterminer avant de te lancer dans le codage en C.
Cette page peut certainement t'aider :https://www.irif.fr/~carton//Enseignement/Algorithmique/Programmation/Pattern/MorrisPratt/
Cependant, il te faudra voir ton cours pour valider si cet algorithme comporte une "boucle interne", et ne comporte pas de "boucle rapide" ou de "sentinelle". Ce sont des notions qui ont dû t'être expliquées par la personne ayant rédigé l'énoncé (ton enseignant?).
En ce qui concerne ton code C. Tu devrais sérieusement revoir tes bases.
Je pense que tu confonds la syntaxe de déclaration d'une fonction et celle de déclaration d'un tableau avec tes x et y et le prototype de ta fonction n'a pas de sens pour moi.
Voilà une charpente de code C comportant un prototype raisonnable pour cette fonction, et permettant de tester l'implémentation de ton algorithme.
Je me permets de citer le passage du cours de M. Olivier CARTON, situé à l'adresse précitée, en commentaire de la fonction
int premiere_occurrence(char * motif, char * texte).
#include <stdio.h>
/**
* premiere_occurrence - recherche naïve de texte
*
* motif : motif à rechercher
* texte : texte où le motif est recherché
*
* retourne :
* -1 si le motif n'est pas présent
* ou la position de la première occurence
*/
int premiere_occurrence(char * motif, char * texte)
{
/*
* Pour chaque position possible du motif dans le texte,
* on teste si cette position est une occurrence du motif.
* Ce test est effectué en comparant les caractères du
* motif avec les caractères du texte de gauche à droite.
* Si tous les caractères du motif sont égaux aux
* caractères du texte aux positions correspondantes,
* une occurrence a été trouvée et la position de cette
* occurrence est retournée. Sinon, la recherche se poursuit
* en passant à la position suivante.
*/
}
int main(void)
{
char * motif = "Toto";
char * texte = "Le professeur demande à Toto :\n"
"- Toto, 3 et 3 ça fait quoi ?\n"
"- Match nul monsieur !";
int position;
position = premiere_occurrence(motif, texte);
if (position == -1)
{
printf("motif [%s] non trouvé dans le texte\n", motif);
}
else
{
printf("le motif [%s] a été trouvé en position %d\n",
motif, position);
/* le résultat correct est 25 */
}
return 0;
}
A toi de jouer :-)
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yira
Messages postés
34
Date d'inscription
lundi 19 avril 2010
Statut
Membre
Dernière intervention
23 juillet 2015
15 oct. 2013 à 13:39
15 oct. 2013 à 13:39
Bonjour Dal :)
Merci bcp !
Je crois qu'on a pas le même algorithme naif sinon je vais essayer d'adapter ce que tu m'as fais à ce que je posséde moi !
Sinon, je t'avais bien dis que je suis nul en C mais j'essaye de l'apprendre.
Bon je vais un peu abusé mais j'ai encoure une autre question; si au lieu d'écrire l'algorithme naif et trouver un mot dans un texte on te demande d'écrire un analyseur lexical qui compte le nombre d'occurances des motifs : ACAT , ATTA , CGC , CGCAA dans une molécule d'ADN codé sous la forme d'un fichier texte ?
Merci bcp !
Je crois qu'on a pas le même algorithme naif sinon je vais essayer d'adapter ce que tu m'as fais à ce que je posséde moi !
Sinon, je t'avais bien dis que je suis nul en C mais j'essaye de l'apprendre.
Bon je vais un peu abusé mais j'ai encoure une autre question; si au lieu d'écrire l'algorithme naif et trouver un mot dans un texte on te demande d'écrire un analyseur lexical qui compte le nombre d'occurances des motifs : ACAT , ATTA , CGC , CGCAA dans une molécule d'ADN codé sous la forme d'un fichier texte ?
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
15 oct. 2013 à 16:24
15 oct. 2013 à 16:24
Si tu veux compter le nombre d'occurrences, en principe, il "suffit" de modifier l'algorithme pour qu'au lieu de retourner la position de la première occurrence, il incrémente un compteur d'occurrences et continue la recherche sur la suite de la chaine de texte, puis retourne le compteur lorsque la fin de la la chaine de texte est atteinte.
Cela dit, je ne m'y connais pas trop en molécules d'ADN.
Si tu as "CGCAACAT", et que tu cherches "ACAT", tu vas le trouver, et si tu recherches "CGCAA" tu vas le trouver aussi, et je ne sais pas si le fait qu'ils partagent un caractère a une importance pour toi, en particulier si ta recherche doit indiquer le nombre d'occurrences de "ACAT" et de "CGCAA".
Dal
Cela dit, je ne m'y connais pas trop en molécules d'ADN.
Si tu as "CGCAACAT", et que tu cherches "ACAT", tu vas le trouver, et si tu recherches "CGCAA" tu vas le trouver aussi, et je ne sais pas si le fait qu'ils partagent un caractère a une importance pour toi, en particulier si ta recherche doit indiquer le nombre d'occurrences de "ACAT" et de "CGCAA".
Dal
yira
Messages postés
34
Date d'inscription
lundi 19 avril 2010
Statut
Membre
Dernière intervention
23 juillet 2015
15 oct. 2013 à 22:01
15 oct. 2013 à 22:01
En faite Dal, pour dire exacte c'est un analyseur lexical, je ne sais pas si t'as fais de la compilation ou pas mais justement c'est ce qu'il faut faire; un analyseur qui permet d'analyser le nombre d'occurrence dans les 4 mots que je t'avais données sous la forme d'un fichier texte !
Je ne sais pas si je suis clair ou y a qlq chose de bizarre !!!
Je ne sais pas si je suis clair ou y a qlq chose de bizarre !!!