Notation

Fermé
theniet - Modifié le 30 juil. 2017 à 14:48
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 30 juil. 2017 à 16:19
Bonjour,
algo mot_palindrome

variables n,x,y : entier
mot : chaine

debut
ecrire("entrer un mot : ")
lire(mot)
n:=len(mot) //longueur de mot
x:=0
y:=1
pour i=1 à n/2
si milieu(mot,i,1)=milieu(mot,n-i+1,1) alors
x:=1
sinon
y:=0
finsi
finpour

si y:=0 alors
ecrire("Bravo! ce mot est un palindrome")
sinon
ecrire("Désolé, ce mot n'est pas un palindrome")
finsi
fin





si cet exercie est sur 05 points .combien vous me donnez sur 05 pts?
A voir également:

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié le 30 juil. 2017 à 15:51
Bonjour

comme il s'agit d'un algorithme en pseudo code, j'ai déplacé ta question dans le bon forum, cependant, par la suite je vais revenir au fait que tu l'as posté en C++

je suis incapable de noter sur 5, mais sur 1 oui:
  • 0 ça marche pas
  • 1 ça marche.


variables n,x,y : entier 
mot : chaine 

debut 
  ecrire("entrer un mot : ") 
  lire(mot) 'je saisie kayak
  n:=len(mot) 'longueur de mot = 5
  x:=0 
  y:=1 
  pour i=1 à n/2 'pour i = 1 (à supposer donc que l'index de départ est 1, pour la majorité des langages dont C++, l'index de départ est 0) à 2.5 (tronqué à 2 ou arrondi à 3?, on va supposer 2)
    lettre1 = milieu(mot,i,1)'juste pour décortiquer
    lettre2 = milieu(mot,n-i+1,1)
    si lettre1 = lettre2 alors
    'pour i = 1 : lettre1 = k, lettre2 = k => x = 1, y reste à 1
    'pour i = 2 : lettre1 = a, lettre2 = a => x = 1, y reste à 1
      x:=1 
    sinon 
      y:=0 
    finsi 
  finpour 

  si y:=0 alors 'dans le cas d'un palindrome  y vaut 1
    ecrire("Bravo! ce mot est un palindrome") 
  sinon 
    ecrire("Désolé, ce mot n'est pas un palindrome") 
  finsi 
fin 


Hormis l'incertitude sur l'index de départ (0 comme en C++, Java, C#, Delphi, etc.. ou 1 comme en VB si on le précise), en supposant que la division utilisée pour n/2 est une division entière donc tronque le résultat, ton algo ne marche pas.

variables n,x,y : entier 
mot : chaine 

debut 
  ecrire("entrer un mot : ") 
  lire(mot) 'je saisie kayak
  n:=len(mot) 'longueur de mot = 5
  x:=0 
  y:=1 
  pour i=1 à n/2 'pour i = 1 (à supposer donc que l'index de départ est 1, pour la majorité des langages dont C++, l'index de départ est 0) à 2.5 (tronqué à 2 ou arrondi à 3?, on va supposer 3)
    lettre1 = milieu(mot,i,1)'juste pour décortiquer
    lettre2 = milieu(mot,n-i+1,1)
    si lettre1 = lettre2 alors
    'pour i = 1 : lettre1 = k, lettre2 = k => x = 1, y reste à 1
    'pour i = 2 : lettre1 = a, lettre2 = a => x = 1, y reste à 1
    'pour i = 3 : lettre1 = y, lettre2 = y => x = 1, y reste à 1
      x:=1 
    sinon 
      y:=0 
    finsi 
  finpour 

  si y:=0 alors 'dans le cas d'un palindrome  y vaut 1
    ecrire("Bravo! ce mot est un palindrome") 
  sinon 
    ecrire("Désolé, ce mot n'est pas un palindrome") 
  finsi 
fin 


En supposant que la division arrondit, ça ne marche pas non plus.

Au lieu de te servir de 2 variables, x et y, il ne t'en faut qu'une.

    si lettre1 different lettre2 alors
         x = x + 1
    finsi


De plus dès que x ne vaut plus 0, il faut sortir de la boucle, ça n'est pas la peine de continuer. Là, on va évidement rentrer des palindromes de petite taille. 10 itérations au lieu de 2, c'est pas la mer à boire.
Mais imagine que tu doives faire un traitement compliqué sur 2 millions d'images, le but étant d'en trouver une qui ne correspond pas à une condition.
Si cette image est la 5eme, tu vas en calculer 1 999 994 pour rien.


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 juil. 2017 à 15:42
Vu que Whismeril est allé assez loin dans le détail, je complète :

si y:=0 alors
vu le code précédent c'est
=
qu'il faut mettre car
:=
est réservé à l'affectation. Idem avec la boucle
pour i=1 à n/2
pour lequel on devrait avoir
:=
pour affecter i.

De plus, on ne sait pas ce qu'est censé faire
milieu
et si ton prof connaît cette instruction, mais cela ressemble à un substring de 1 caractère, ce qui est inefficace, il vaudrait mieux utiliser une instruction qui récupère un seul caractère.

Et toujours selon le niveau d'exigence que l'on te demande d'avoir, il faudrait créer une fonction séparée pour le calcul du palindrome et ne pas y mélanger les instructions ecrire/lire qui sont là uniquement à des fins de tests (potentiellement inutile donc).

De plus il faudrait manipuler des booléens vrai/faux plutôt que les entiers 0/1 comme tu fais avec x et y.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
30 juil. 2017 à 16:19
Salut, oui j'ai supposé que milieu() est un substring.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 juil. 2017 à 15:23
Bonjour,

Le problème avec les algorithmes c'est qu'il n'y a pas de règles universelles pour les écrires. Ici tu utilises des notations qui sont peut être connues de toi et ton prof mais que nous on ignore, donc on pourrait considérer que c'est faux alors que c'est vrai, et inversement on pourrait supposer que quelque chose est vrai alors que ton prof ne va pas le comprendre et ce sera faux.

De plus ça dépendra de ton niveau et ce que tu es censé savoir ou non.

En l'état ça ne vaut pas 5 c'est sûr, il y a plusieurs incohérences, même si dans l'esprit l'algorithme est le bon à part que son résultat est faux.

Je me lance, je dirais 3 (peut être 2 selon le niveau d'exigence).
0