IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Expression constante attendue


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    en informatique option Base de donnée
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : en informatique option Base de donnée
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Expression constante attendue
    Bonjour,
    je suis un débutant (noob) en programmation , Notre Prof nous a donnée une série d'exercice je suis bloquer au dernier ...bref
    le but est de crée un programme qui donne la date (jour,mois,année) du lendemain en prenant en compte les mois de 30 , 31 etc jusque ici j'ai bien gérer,
    cas spéciale février 28 ,29 ou 1 mars la j ai eu un petit souci j ai beau écrire l'algorithme juste mais le compilateur donne toujours la même erreur (E2026 Expression constante attendue).
    bref donne moi votre avis . (j'utilise Embracadero 10.1 berline. ). et Merci D'avance .
    voici des Screenshots Nom : image 1.png
Affichages : 1333
Taille : 69,7 Ko
    Nom : image 2.png
Affichages : 1641
Taille : 100,7 Ko

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Le comportement du compilateur est normal : chaque valeur ou plage de valeurs du case doit être une constante. On ne peut pas y mettre des variables.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case j of
      1..n-1:  // ne passe pas car n est variable
           [...]
    end;
    case j of
      1..31:  // passe car la plage de valeurs est constante
           [...]
    end;
    Comme il s'agit d'un exercice, bonne continuation dans le codage de ton algo Attention, une année bissextile doit effectivement être un multiple de 4 mais également de 400 et pas de 100...

    Après pour ceux qui ne sont pas en exercice et qui ne veulent pas réinventer la roue, Delphi dispose de l'unité System.DateUtils qui contient plein de routines de manipulation des dates. Par exemple, il y a la fonction IncDay qui permet d'incrémenter un TDateTime d'un certain nombre de jours (nombre passé en paramètre à la fonction)

    PS : faire attention à l'indentation du code ça ne coute pas cher et ça peut grandement aider à la relecture/maintenance du code.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour et Bienvenue

    plutôt que des captures d'écrans, un bon petit balisage de code (bouton #) avec un copier coller du code aurait été plus lisible
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Futur Membre du Club
    Homme Profil pro
    en informatique option Base de donnée
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : en informatique option Base de donnée
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Désoler pour le retard
    Merci pour vos réponse , j ai réalisée que case ne peut contenir de variable mais pouvez vous me dirigé je suis bloqué et a court d'idée voila le code de mon programme soyer indulgent je débute

    Mon problème est vers la fin (2: précisément) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    uses
      System.SysUtils;
      var
     j,m,a,n:integer;
     tj,tm:boolean;
     
     begin
      writeln ('saisir j/m/a');
      read (j,m,a);
      Tj :=true ;
      Tm :=true ;
     
      case m of
       1,3,5,7,8,10 :
       begin
         case j of
          1..30:
         begin
         J:=j+1;
         writeln ('le jours est ' , J ,'/' , m ,'/', a ,'/' );
         end;
     
        31:
         begin
          j:=1;
          m:=m+1;
          writeln ('la date ', J ,'/', m,'/' , a,'/')
         end
        else
        tj :=false ;
        end;
     
       end;
     
     
     
     
     
        4,6,9,11:
       begin
        case j of
         1..29:
         begin
          J:=j+1;
          writeln ('le jours est ' , J ,'/' , m ,'/', a ,'/' );
            end;
         30:
          begin
         j:=1;
         m:=m+1;
         writeln('la date est ',j,'/',m,'/',a,'/');
         end
        else
         tj :=false ;
     
           end;
         end;
     
     
     
       12:
        case j of
        1..30:
         begin
          j:=j+1;
         writeln ('la date est ',j,'/',m,'/',a,'/');
          end;
         31:
     
         begin
         j:=1 ;
         m:=1 ;
         a:=a+1;
         writeln('la date est ' ,j,'/' , m ,'/',a,'/');
         end
         Else tj :=false ;
           end;
     
     
     
     
     
     
     
     
       2:
       begin
     
         if  a mod 4 or 400 = 0 then
         n:=29
     
         else
     
         n:=28;
     
        case j of
          1..n-1:
     
          j:=j+1;
     
          n:
         begin
           j:=1;
           m:=3;
     
            end
          Else
          Tj :=false ;
          end;
          end
         else
        tm :=false;
         end;
        if tm=false then
        writeln('mois erroné')
        else
        if tj=false then
        writeln('jour erroné')
        else
        writeln('la date de lendemain est ',j,'/',m,'/',a);
    sleep (50000);
    end.

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Dommage que le but de l'exercice soit créer un algo, sinon, c'est facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      annee, mois, jour: word;
      Dte: TDate;
    begin
      decodedate(Now, annee, mois, jour);
      Dte := encodedate(annee, mois, jour + 1);
    (piste: qu'est-ce que peuvent bien faire ces 2 fonctions ? ;-) )

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    la lisibilité (tout dans un même bloc) laisse à désirer d'où les problèmes

    faire quelques fonctions (déjà existante dans certaines unités mais comme il s'agit d'exercice d'algorithmie ....) aurait certainement l'avantage d'améliorer la lecture
    suggestions :
    - function JoursDansMois(Mois : word) : word
    - function AnBisextile(an : word) : Boolean
    ainsi un simple appel à la fonction JourDansMois et plus d'une centaine de lignes pourraient être supprimées du corps principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if  j+1<JourDansMois(m) 
         then j:=j+1
         else begin
            // je ne vais pas tout dévoiler
         end;
    et vous pourrez plus facilement vous concentrez sur chaque fonction , en particulier sur votre partie de code (faux) pour détecter une année bisextile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         if  a mod 4 or 400 = 0 then
         n:=29
    je vous rappelle les principes du calcul
    (si l'année est divisible par 400) ou (si l'année est divisible par 4 et si cette même année n'est pas divisible par 100)
    écrite ainsi la fonction AnBisextile est facile à coder
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/12/2008, 20h13
  2. Traducteur Langage Pascal -> Langage C
    Par judge06 dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 17/04/2007, 03h04
  3. [KUBUNTU] Problème de langage avec le bureau KDE
    Par rayga dans le forum Ubuntu
    Réponses: 2
    Dernier message: 09/03/2007, 15h23
  4. le langage pascal et les couleurs
    Par mickael.be dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2006, 22h14
  5. Avenir du langage Pascal
    Par JoseF dans le forum Langage
    Réponses: 10
    Dernier message: 27/07/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo