Problème avec des conditions dans if

Résolu/Fermé
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 - 28 janv. 2013 à 12:18
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 - 29 janv. 2013 à 11:09
Bonjour,

je veux poser la condition suivante dans mon application, ( pour savoir si les différents d'un tableau sont consecutifs ou non ) ,
j'ai fais :

 if tabeau[i+1] <> tableau[i] +1 then , 


j'ai aussi essayé avec les codes suivants :
   if ( tableau[i+1]  ) <>  ( tableau[i] +1  )  
mais , sa me donne toujours pas le resultat souhaité , pourriez vous m'indiquer , comment est ce que je dois m'y prendre pour que l'application puisse comparer tableau[i] et tableau[i+1] ???

et enfin , j'aimerais savoir , comment placer les begin et les end , lorsque je veux faire les
if condidion else ? 


4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 janv. 2013 à 12:20
Comme ceci tout simplement :

if tableau[i]<>tableau[i+1] 
then begin
     end
else begin
     end; 
0
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 4
28 janv. 2013 à 12:34
non , je ne verifie pas si les cases du tableau ont les mêmes valeurs ( selon ton code ) , mais plutot , si la valeur de la case suivante , est égale à la valeur du tableau de la case précédente + 1 ( c'est différent avec le code que tu m'a donné )
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 janv. 2013 à 12:39
Dans ce cas les deux codes que tu as donné sont corrects. À part peut-être que tu devrais regarder avec = plutôt que <> (c'est le contraire)

if tableau[i+1] = tableau[i]+1
then ...
0
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 4
28 janv. 2013 à 13:05
alors , il y 'a une erreur dans mon code , mais je ne la vois pas , je mets l'énoncé et ce que j'ai saisis , pourrais tu m'aider à trouver l'erreur , je ne sais pas mais apparemment une erreur s'est glissée :


Ecrivez un algorithme qui permette de saisir un nombre quelconque de valeurs, et qui les range au fur et à
mesure dans un tableau. Le programme, une fois la saisie terminée, doit dire si les éléments du tableau sont tous
consécutifs ou non.
Par exemple, si le tableau est :
12 13 14 15 16 17 18
ses éléments sont tous consécutifs. En revanche, si le tableau est :
9 10 11 15 16 17 18
ses éléments ne sont pas tous consécutifs.


maintenant voici mon code :


program notes ;
uses crt;
type table= array[1..100] of integer;

var 
     tableau : table ;
i , n : integer;
controle , resultat : boolean;

      PROCEDURE demandernombre( var tableau3 : table);
      begin
              writeln(' Veuillez saisir le nombre de nombres');
              readln(n);
              writeln;
            
              (* saisie des nombres dans le tableau *)
               for i:= 1 to n do
               begin
                       writeln('Veuillez saisir le nombre ', i);
                       readln(tableau3[i]);
               end;
      end;

      FUNCTION verifiertableau ( tableau1 : table ; n1 : integer ; var controle : boolean) : boolean;

    begin 
             controle := true;
            (* maintenant , je verifie les différents élements du tableau *)
            writeln ( tableau1[i] , ' ' );

            if tableau[i] <> tableau[i] +1 then
            begin
                     controle := false;
           end;
       (* j'assigne la valeu à retourner *)
         verifiertableau := controle;
    end;
  
begin

        clrscr;
        demandernombre(tableau);
     resultat :=  verifiertableau(tableau,n,controle);

   if resultat = true then
begin 
        writeln(' les elements du tableau sont consecutifs');

  else
  begin
          wr iteln(' les elements du tableau ne sont pas consecutifs ');
end;

readln;
end.




mais à chaque fois que je mets les elements élements de mon tableu, il ressort toujours que les elements de mon tableau ne sont pas consecutifs , ( en ( d'autres mots , mon booleen resultat ) vaut toujours false , pourriez vous m'indiquer ou se trouve l'erreur et m'aider à optimiser le resultat ???
merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 janv. 2013 à 13:15
Avant même les erreurs de logique il faudrait corriger les erreurs de compilation.
Dans les 10 dernières lignes, il te manque un "end" avant le else, et tu as écris "wr iteln", c'est le genre d'erreurs qui ne pardonnent pas !

Au niveau de la logique tu as écris if tableau[i] <> tableau[i] +1, c'est forcément faux car un entier n'est jamais égal à lui même +1. L'idéal ce serait que tu fasses ce que tu dis !

Mais après tu as une autre erreur, bien plus grave, c'est que ton "tableau" est une variable globale, ça n'a rien à voir avec le paramètre "tableau1" de ta fonction !
Il faut autant que possible enlever les variables globales qui conduisent systématiquement les débutants à faire des erreurs inextricables. Par exemple dans ton cas avec des i et des n qui ne sont jamais initialisés et qui font donc n'importe quoi !
0
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 4
29 janv. 2013 à 11:09
oups , une erreur s'est glissée quand je recopiais le code ( manuellement ) car ne pouvant pas le copier directement à partir de L'IDE , j'avais plutot mis ,
if tableau[i] <> tableau[i+1] +1 then



tu dois avoir raison , sans doute que c'est le end , que j'avais oublié de mettre, quant au ' writeln ' je ne m'étais pas trompé à ce niveau dans l'IDE , c'est juste en recopiant le code manuellement , que je me suis trompé
merci de tes commentaires .
0