C++ > Algorithme de vérification de mot par reche

TitreAlgorithme de vérification de mot par reche
Postée le07-05-2011
Affichée235
Mini-lien
Description

Recherche par dichotomie si un mot se trouve dans une matrice

EtatNe contient pas d'erreurs. Ne contient pas d'erreurs.
Code d'insertion
Options
Afficher les numéros de lignes  Mettre la source en plein ecran  Selectionner la source  Partager sur Facebook 
Téléchargement Telecharger en format txt  Telecharger en format pdf  Telecharger en format cpp
Plein ecran
void copyDicoLineInWord (int line, Word word, char dicoList[][TAILLE])
{
  int letter = 0;
  for (; dicoList[line][letter]!='\0'; letter++)
    {
      word[letter] = dicoList[line][letter];
    }
  word[letter]='\0';
}

int getNewLine (int &begin, int &end, int line, int beforeOrAfter)
{
  int result;
  if (beforeOrAfter == 1)
  {
    begin = line;
  }
  else if (beforeOrAfter == -1)
  {
    end = line;
  }
  result = (begin+end)/2;
  return result;
}

int compareWords(Word rightWord, Word word)
{
  bool correctWordEquality = true;
  int placeWord = 0;


  for (int i =0; i < countLetters(word); i++)
  {
    if (word[i] != rightWord[i])
    {
      placeWord = beforeOrAfter (word[i], rightWord[i]);
      i = countLetters(word);
      correctWordEquality = false;
    }
  }
  if (correctWordEquality)
  {
    for (int j=0; j < countLetters(rightWord); j++)     //Boucle seulement si le word est plus
    {                                                   //court ou de la même taille et égal au
      if (word[j] != rightWord[j])                      //mot correct.
      {
        j = countLetters(rightWord);
        placeWord = 1;                                  //Puisque le mot correct est plus
      }                                                 //long il faut voir après.
      else
      {
        placeWord = 0;
      }
    }
  }
  reinitializeWord (word);
  return placeWord;
}


int dichotomyDicoValidityReiteration(Word playerWord, char dicoList[][TAILLE])
{
  int begin = 1, end = getLenghtDico(), line = -2, save, beforeOrAfter=0;
  Word dicoWord;
  bool difference;
  do
  {
    save = line;
    line = getNewLine (begin, end, line, beforeOrAfter);
    copyDicoLineInWord (line, dicoWord, dicoList);
    beforeOrAfter = compareWords (playerWord, dicoWord);

    if (beforeOrAfter!=0)
    {
      difference = true;
    }
    else if (beforeOrAfter == 0)
    {
      difference = false;
    }

    if (save==line)
    {
      save = -1;
      difference = false;
    }
  }
  while (difference);
  return save;
}