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

Ada Discussion :

programme majuscule ada


Sujet :

Ada

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut programme majuscule ada
    Bonjour je programme en ada ( ou j'essaye ^^) depuis peu et j'ai récement eu un devoir ou il fallait réaliser une fonction qui prend en entrée une chaine de caractères et qui transforme toutes les minuscules en majuscules mais il peut déja y avoir des majuscules dans la chaine.

    C'est le seul exercice que je n'ai pas su faire donc si vous pouviez m'aider à le faire afin de m'entrainer, j'en serai très heureux ou du moins me donner des pistes.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Quel est exactement ton problème (ie. quel est le point qui t'a posé problème ?)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Eh bien je ne sais pas du tout comment faire étant un débutant en ada.

    (peut être un début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function majuscule (c:character) return character
     
    begin
    if (c>="A" and c<="Z") then
    return c

    après je sèche)

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    L'idée que j'utiliserai pour faire ça simplement, c'est d'avoir un tableau de caractères indexé par des caractères, ce tableau peut très bien avoir la déclaration suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type To_Maj is array (Character range 'a' .. 'z') of Character;
    A toi de le remplir comme il faut pour l'utiliser comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my_tab : To_Maj := ...
    if (c>="A" and c<="Z") then
         return c;
    else
         return my_tab( c ) ;
    begin

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Bon j'essaye quelquechose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function majuscule (s:string) return string is
     
    for i in 1..s'lenght loop
    j:=tab(i)
          if (tab(i)>='A' and tab(i)='Z') then
          tab(i)='j'
          else 
          tab(i)='J'
    end if
    end loop
     
    end majuscule
    Je ne sais pas si ça marche par contre.

    pour cette ligne:
    type To_Maj is array (Character range 'a' .. 'z') of Character;

    je ne sais pas ce que veut dire range mais si je remplace to_maj par tab est ce que ça marche ?

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    pour cette ligne:
    type To_Maj is array (Character range 'a' .. 'z') of Character;

    je ne sais pas ce que veut dire range mais si je remplace to_maj par tab est ce que ça marche ?
    Ca indique simplement que c'est un tableau qui est indéxé par des caractères minuscules et donc que tu peux accéder à un élément via une commande du style :

    Ce qui te donnera le cas échéant la première case du tableau.

    Si maintenant on reprend ce que je te disais, imaginons qu'à une case i du tableau tu aies la même lettre mais en majuscule ça te permettrait d'avoir directement la conversion.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Salut


    type To_Maj is array (Character range 'a' .. 'z') of Character;

    A toi de le remplir comme il faut pour l'utiliser comme ceci :

    my_tab : To_Maj := ...
    if (c>="A" and c<="Z") then
    return c;
    else
    return my_tab( c ) ;
    begin
    Ici, je ne comprend pas ce que tu veut me faire faire :

    1-Je ne vois pas ce qu'il faut mettre à la place des ...

    2-Je ne vois pas la fonction dans l'histoire qui prend en entrée une chaine de caractères et les tranforment en majuscules.

    3-Pour ce que tu m'a écrit si je comprend bien il prend un caractères c et le retourne comme il est s'il est déja en majuscule par contre pour l'autre cas je ne comprend pas ce qu'il retourne.

  8. #8
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    1-Je ne vois pas ce qu'il faut mettre à la place des ...
    Ca doit être une ligne de commande qui initialise le tableau (ie pour avoir un tableau de caractères)

    2-Je ne vois pas la fonction dans l'histoire qui prend en entrée une chaine de caractères et les tranforment en majuscules.
    Tu ne l'as pas encore écrite, je ne suis pas là pour le faire à ta place non plus. La seule partie du code que je t'ai donné, c'est le corps de la fonction Majuscule. Et puis la difficulté de ce genre d'exercice résulte dans la fonction majuscule, le passage en majuscule de toute la chaîne de caractère est plutôt simple.

    3-Pour ce que tu m'a écrit si je comprend bien il prend un caractères c et le retourne comme il est s'il est déja en majuscule par contre pour l'autre cas je ne comprend pas ce qu'il retourne.
    Si le caractère c est en majuscule, alors tu renvoies ce caractère. S'il est en minuscule alors tu renvoie le caractère qui est à la position c. Ce qui te donnera le caractère c en majuscule.

    En fait, j'ai peur que tu ne comprennes pas tout à fait ma démarche. Voici un exemple, c'est une fonction qui renvoie le carré d'un nombre qui aura été passé en paramètre, ce nombre est nécessairement entre 1 et 10 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    subtype small_int is integer range 1..10 ;
     
    function carre( x : smal_int ) return integer
         type tab_int is array( 1..10 ) of integer ;
         tab_carre : tab_int := ( 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 100 ) ;
    begin
         return tab_carre( x ) ;
    end;
    Le passage en majuscule résulte du même principe, utiliser un tableau où le résultat est déjà précalculé (ie: la majuscule d'un caractère).

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Je crois avoir compris quelque chose ^^ :

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    type To_maj is array (character range 'a'..'z') of character
     
    function majuscule (c:character) return character
     
    my_tab : to_maj := (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);
    if (c>="A" and c<="Z") then
    return c;
    else
    return my_tab (c);
    end if;
    end majuscule;
    J'aimerais savoir si cela marche pour savoir si j'ai compris.

    Par contre je ne vois pas comment faire pour que la fonction prenne une chaine de caractère au lieu d'un caractère.

    Au fait je ne t'ai pas encore remercier pour l'aide que tu m'apporte donc merci.

  10. #10
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_tab : to_maj := (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);
    C'est pas tout à fait ça, il faut que chacun de tes caractères soient entre guillemets simples (ie: ('A','B',...,'Z') )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (c>="A" and c<="Z") then
    Même remarque pour les guillemets simples.

    Par contre je ne vois pas comment faire pour que la fonction prenne une chaine de caractère au lieu d'un caractère.
    En fait, il faut faire une seconde fonction (ou procedure, c'est au choix), qui travaillera sur une chaîne de caractères et appellera sur chacun des caractères de la chaîne la fonction majuscule.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Voila ou j'en suis :

    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
    A:Character;
    type To_maj is array (character range 'a'..'z') of character;
     
    function majuscule (c:character) return character is
     
    my_tab : to_maj := ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
    begin
    if (c>='A' and c<='Z') then
    a:=c;
    else
    a:=my_tab (c);
    END IF;
    return a;   
    END Majuscule;
     
     
     
    FUNCTION Chaine (S:String) RETURN String IS
       c:Character;
       e:string;   
       begin
          FOR I IN 1..S'Length LOOP
          e:=Majuscule(c);   
          END LOOP; 
          return e;
    end chaine;
    par contre je ne suis pas sur de ma fonction chaine

  12. #12
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    par contre je ne suis pas sur de ma fonction chaine
    Effectivement, c'est pas tout à fait ça

    J'ai peur que certains concepts basiques ne te soient pas familiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FUNCTION Chaine (S:String) RETURN String IS
       c:Character;
       e:string;   
       begin
          FOR I IN 1..S'Length LOOP
          e:=Majuscule(c);   
          END LOOP; 
          return e;
    end chaine;
    Ici, deux choses :
    -> Tu remplaces un caractère c par sa majuscule, mais qu'est-ce que le caractère c ? Quelle relation a t'il avec la chaîne S ? Ou fais-tu cette relation ?
    -> Tu remplaces toute ta chaîne de caractère e par la majuscule de c. Mais que devient la chaîne e au prochain tour de boucle ? D'ailleurs est-ce correct de remplacer une chaîne de caractère par un caractère ? Sont-ce deux types identiques ?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Salut

    je comprend pourquoi ce n'est pas bon mais j'ai un peu de mal a voir comment il faut faire.

    FUNCTION Chaine (S:String) RETURN String IS
    c:Character;
    e:character;
    begin
    FOR I IN 1..S'Length LOOP
    e:=Majuscule(c);
    return e
    end loop
    end chaine;
    J'ai essayé de changer certaine chose mais je pense pas que ce soir ça. Je pense qu'il faudrait que c soit un character de s.

  14. #14
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Deux choses :

    -> c doit être le i-ème caractère de S
    -> Le résultat n'est pas à mettre dans e mais dans le i-ème caractère de e.

    Au passage, comme les chaînes de caractères en Ada ont plusieurs modes de fonctionnement, ça peut compliquer les choses. Avant de pouvoir utiliser e, il lui faut une taille. Ici, tu la connais, c'est la taille de s.

Discussions similaires

  1. Programme C en ADA ?
    Par babylone_59 dans le forum Ada
    Réponses: 3
    Dernier message: 26/10/2006, 07h54
  2. Traduction programme Pascal en ADA
    Par Argol dans le forum Ada
    Réponses: 1
    Dernier message: 02/10/2006, 13h17
  3. [Ada] Comment générer un programme graphique
    Par busymante dans le forum Ada
    Réponses: 2
    Dernier message: 01/03/2006, 17h06
  4. Réponses: 2
    Dernier message: 04/11/2005, 15h50

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