Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3043 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  fonction ( titre austère s'il en est )

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction ( titre austère s'il en est )

n°1430320
klinfran
Posté le 24-08-2006 à 01:05:49  profilanswer
 

Alors voilà mon problème, ça doit être très simple pour un type qui comprend la programmation mais pas pour moi, j'ai une fonction ,déjà je sais à peine m'en servir, en fait pas du tout.
 Est ce que je peux l'appeler dans une procedure ?
 Si oui comment, car tout ce que je tente me refuse la syntaxe de mon appel de fonction ( je suppose donc que je ne peux pas appeler une fonction dans une procedure mais j'en sais rien en fait ), et le problème c'est que ma fonction dépend de types déclarés dans une procedure, de plus je serais bien incapable de faire " fonctionner une fonction " toute seule. (déjà que je ne vois pas la différence entre fonction et procedure )
 
C'est une fonction qui renvoie un booleen true /false, mais soit l'appel ne lui plait pas, soit il me dit qu'il a perdu mes paramètres .
Comment faire ?  
 
 
 
 
 
Même si c'est une question surement inintéressante pour des experts , j'ai vraiment besoin d'une réponse .
 
Voilà sans oublier la politesse : merci d'avance .

mood
Publicité
Posté le 24-08-2006 à 01:05:49  profilanswer
 

n°1430737
apprentitu​x
Posté le 24-08-2006 à 15:33:11  profilanswer
 

Montres un peu ton code, et on pourra t'éclairsir plus précisemment.
 
Sinon:
1) Oui on peut évidemment appeler une fonction dans une procédure
2) La différence entre une procédure et une fonction c'est qu'une fonction renvoie une valeur et la procédure non.
3) Si tu déclares un type dans un sous-programme (procédure ou fonction), ce type ne sera visible que dans ce sous programme.
Alors déclares ton type avant le sous-programme qui en a besoin.

n°1430948
klinfran
Posté le 24-08-2006 à 18:55:27  profilanswer
 

Et moi j'attendais tranquillement dans ma boite mail , quelle tache , donc voilà tout le truc , ce qu'il y a en plus du problème d'appel de fonction , c'est que j'aimerais avoir les mêmes paramètres dans la procedure et la fonction :
 
 
WITH ADA.Text_IO,Ada.Integer_Text_IO;
USE Ada.Text_IO,Ada.Integer_Text_IO;
 
 
Procedure TP_7_g_If is
   SUBTYPE T_Mois IS Natural RANGE 1..12 ;
   SUBTYPE T_Jour IS Natural RANGE 1..31 ;
   SUBTYPE T_Annee IS Natural RANGE 1..9999;
   TYPE T_Date is RECORD
      J: T_Jour ;
      M: T_Mois ;
      A: T_Annee ;
   END RECORD ;  
   FUNCTION Anterieure_Ou_Egale( D3,D4 :T_Date )  RETURN Boolean IS
   BEGIN  
      IF (D3.A < D4.A)
          THEN return True;
      ELSIF (D3.A = D4.A )      
            THEN IF (D3.M < D4.M )
               THEN return True ;
            ELSIF  (D3.M = D4.M )
               THEN IF (D3.J <= D4.J)
                    THEN return True ;
                    ELSE return False ;
                    END IF;
            ELSE return False;    
            END IF;
      ELSE return False ;
      END IF ;        
  END Anterieure_Ou_Egale;
BEGIN
    LOOP
   Put("donnez le jour puis le mois puis l'annee , séparez par un espace , appuyez sur entrée en fin de saisi " );
   New_Line ;
      Get(D3.J);Get(D3.M);Get(D3.A);Skip_Line;
   Put("donnez le jour puis le mois puis l'annee , séparez par un espace , appuyez sur entrée en fin de saisi " );
   New_Line ;
      Get(D4.J);Get(D4.M);Get(D4.A);Skip_Line;
  -- C'est là que j'aimerais appeler ma fonction :
      Anterieure_Ou_Egale ; -- C'est là ( en partie ) que ça foire même si je met ( D3,D4)
   END LOOP;
   End;      
 
 
PS : Pourtant c'est pas dur de renvoyer une valeur avec une procedure je comprend pas pourquoi on écrit toujours ça .


Message édité par klinfran le 24-08-2006 à 21:05:16
n°1431906
apprentitu​x
Posté le 26-08-2006 à 18:45:34  profilanswer
 

Premièrement, comme ton compilateur doit te signaler, D3 et D4 n'existent pas pour la procedure TP_7_g_If, comme je te l'ai dit dans mon précédent post.
 
Deuxièmement, Anterieure_Ou_Egale est une fonction qui a 2 paramètres de type natural.
Pourquoi écris-tu Anterieure_Ou_Egale sans paramètre ???
 
Tu dois (comme tu l'as indiqué en commentaire) rajouter les paramètres, et là, tu as une erreur de compilation qui te dis "tp_7_g_if.adb:59:07: expect procedure name in procedure call", car tu n'utilises pas la valeur renvoyée par ta fonction.
Le compilateur concidère cela comme un appel de procédure d'où le message...
 
En C, tu aurais pu compiler ce programme (un bien mauvais programme) et quel aurait été le résultat de ton programme? RIEN
 
Du devrais faire un truc du style

Code :
  1. if Anterieure_Ou_Egale(date1,date2) then
  2.  Ada.text_io.put("bla bla bla" );
  3. end if;


 
ps: utilise les balises de code pour écrire du code


Message édité par apprentitux le 26-08-2006 à 18:53:00
n°1432016
klinfran
Posté le 27-08-2006 à 03:43:11  profilanswer
 

J'ai corrigé les erreurs , ça m'a permis de comprendre (un peu) comment ça fonctionne :

Code :
  1. WITH ADA.Text_IO,Ada.Integer_Text_IO;
  2. USE Ada.Text_IO,Ada.Integer_Text_IO;
  3. Procedure TP_7_g_If is
  4.    SUBTYPE T_Mois IS Natural RANGE 1..12 ;
  5.    SUBTYPE T_Jour IS Natural RANGE 1..31 ;
  6.    SUBTYPE T_Annee IS Natural RANGE 1..9999;
  7.    TYPE T_Date is RECORD
  8.       J: T_Jour ;
  9.       M: T_Mois ;
  10.       A: T_Annee ;
  11.    END RECORD ;
  12.    FUNCTION Anterieure_Ou_Egale( DA,DB :T_Date )  RETURN Boolean IS
  13.    BEGIN
  14.       IF (DA.A < DB.A)
  15.           THEN return True;
  16.       ELSIF (DA.A = DB.A )     
  17.             THEN IF (DA.M < DB.M )
  18.                THEN return True ;
  19.             ELSIF  (DA.M = DB.M )
  20.                THEN IF (DA.J <= DB.J)
  21.                     THEN return True ;
  22.                     ELSE return False ;
  23.                     END IF;
  24.             ELSE return False; 
  25.             END IF;
  26.       ELSE return False ;
  27.       END IF ;       
  28.    END Anterieure_Ou_Egale;
  29.    D1,D2:T_Date;
  30.    B:Boolean ;
  31.  
  32. BEGIN
  33.     LOOP
  34.    Put("donnez le jour puis le mois puis l'annee , séparez par un espace , appuyez sur entrée en fin de saisi " );
  35.    New_Line ;
  36.       Get(D1.J);Get(D1.M);Get(D1.A);Skip_Line;
  37.    Put("donnez le jour puis le mois puis l'annee , séparez par un espace , appuyez sur entrée en fin de saisi " );
  38.    New_Line ;
  39.       Get(D2.J);Get(D2.M);Get(D2.A);Skip_Line;
  40.       B:=Anterieure_Ou_Egale(D1,D2) ;
  41.    END LOOP;
  42.    End;


 
Voilà, Maintenant je sais qu'une fonction ça s'appelle et que ça ne se pose pas bêtement comme une procedure .Pour ce qui est de la qualité du programme , je n'ai peut-être pas fait au plus simple mais je ne vois pas comment faire mieux sachant qu'on doit comparer d'abord les années , puis les mois si années égales, puis les jours si années égales et mois égaux, et puis les mots il faut bien les écrire, mais c'est vrai j'ai parfois l'impression de faire trop long .
 
Merci quand même !!!


Message édité par klinfran le 27-08-2006 à 03:48:15

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  fonction ( titre austère s'il en est )

 

Sujets relatifs
probleme avec la fonction socket_send{resolu}[access] bloquer la fonction d'insertion dans un formulaire
Optimiser une fonction [RESOLU][C/GTK++]Paramètre d'une fonction appeler par un G_CALLBACK
fonction mail()Fonction de pop-up
problème avec une fonction qui renvoie un pointeur de char[VBA -EXCEL] AIDE SVP !! copie modele + nom + titre + case a cocher..
projet C#/.NET fonction d'impression de pageProbleme avec la fonction HEADER
Plus de sujets relatifs à : fonction ( titre austère s'il en est )


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR