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

C Discussion :

Alphabet rang d'une lettre


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut Alphabet rang d'une lettre
    Bonjour ,

    Une âme charitable pourrait m'écrire ce pseudocode en language c s'il vous plaît , je ne le comprends pas bien Nom : Capture.PNG
Affichages : 275
Taille : 45,2 Ko

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 792
    Par défaut
    Hello,

    Il y a une erreur dans le pseudo code (ou alors je n'ai pas compris la question): les lettres majuscules (en ascii) vont de 65 ('A') à 90 ('Z'). Donc le test (rng>=0 et rng<=25) ne sera jamais vrai....

  3. #3
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    C'est le texte en entier , il est peu probable que ça soit faux Nom : Capture.PNG
Affichages : 236
Taille : 78,3 Ko

  4. #4
    Membre chevronné
    Homme Profil pro
    web a11y
    Inscrit en
    Avril 2014
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : web a11y
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 192
    Par défaut
    @edgarjacobs : oui selon ce que l'on a pris l'habitude de penser. Mais non, si on reprend doucement.
    Si l'on fait ascii(lettre) et que l'on a 65 c'est certes unA.
    Mais si "A" doit être compté à l'indice zéro c'est que l'on a dû faire un ascii(lettre) - ascii("A") -> 65-65==0.

    Bon, perso, dans ma conception, le rang de A serait plutôt 1. Là, c'est juste penser en terme d'indice dans un tableau.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par Stellar7 Voir le message
    @edgarjacobs : oui selon ce que l'on a pris l'habitude de penser. Mais non, si on reprend doucement.
    Si l'on fait ascii(lettre) et que l'on a 65 c'est certes unA.
    Mais si "A" doit être compté à l'indice zéro c'est que l'on a dû faire un ascii(lettre) - ascii("A") -> 65-65==0.

    Bon, perso, dans ma conception, le rang de A serait plutôt 1. Là, c'est juste penser en terme d'indice dans un tableau.
    Ce qui est important dans l'énoncé est la définition précise de ce qu'est un rang dans le pseudo-code. En français on dit que dans l'alphabet A est le premier donc rang de A serait 1 (ça manquait dans le 1er texte.)

    Cependant, le pseudo-code veut "penser en C", et en C tout ce qui est indice commence à 0.
    Ici, la ligne la plus piégeuse du pseudo-code à traduire en C est: "rng <-- rang de txt[i]", qui doit s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int  rng = txt[i] - 'A';  // la lettre A a le rang 'A'-'A' donc 0, la lettre B a le rang 'B'-'A' donc 1...
    On pouvait deviner ça par le test indiqué juste après: "si rng<=0 ou rng>=25", le rang (du pseudo-code) est bien un nombre de 0 à 25 pour 'A' à 'Z'.

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 792
    Par défaut
    J'avais ien compris le pseudo code, j'étais bien conscient que le rang de 'A' est zéro et qu'il faut faire rng=txt[i]-'A'. Je critiquais juste la manière de présenter l'exercice.

  7. #7
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    j'ai essayer de suivre le pseudocode mais je suis vraiment perdu ........ Est-ce que quelqu'un peut me faire le programme pour que je voie mes fautes s'il vous plaît

    Nom : Capture.PNG
Affichages : 211
Taille : 78,2 Ko

    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
    #include<stdio.h>
    int main()
    {
        printf("Saisissez un texte") ;
    int num[26] ;
        int i ;
     
        for (i=0;i<25;i++) 
        num[i]=0 ;
     char txt[80] ;
     
    for (i=0;i<(txt)-1;i++) 
    int  rng = txt[i]-A
     
    if (rng=>0 and 25=>rng) {
        printf("%i" , rng);
    }
    for (i=0;i<25;i++)
    printf("%i" , num[i]) ;

  8. #8
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 792
    Par défaut
    Est-ce que quelqu'un peut me faire le programme pour que je voie mes fautes s'il vous plaît
    Faire ton exercice, surement pas.

    T'aider à le faire, d'accord. Alors question: où demandes-tu à l'utilisateur d'entrer son texte ?

    Et pour poster du code, il faut uliliser la bonne balise

  9. #9
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    > Afficher "Saisissez un texte", là c'est ok !
    > Saisir txt, tu ne l'as pas fait. pour cela tu peux utiliser la fonction scanf ou fgets si tu l'as vu !

    Ensuite le but, c'est de compter chaque lettre de txt et d'obtenir le résultat dans le tableau num (Par exemple s'il y a 5 'a' dans txt, num[0] comportera la valeur 5 à la fin du comptage.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  10. #10
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    oki merci beaucoup j'ai un peut modifier , comment je fais le "i<-- 0..... longueur de txt -1" Je ne sais pas comment implémenter le longueur txt-1 en code c

  11. #11
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 792
    Par défaut
    je ne sais pas comment implémenter le longueur txt-1 en code c
    int len=strlen(txt)-1;

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    "Pour i<-- 0..... longueur de txt -1" correspond à faire une boucle qui va aller de 0 jusqu'au dernier caractère de txt.
    Ça peut s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ( int i = 0 ; i < strlen(txt) ; i++ ) // les i valides sont inférieur à strlen(txt), donc le dernier vaut strlen(txt)-1
    {
        // et entre les accolades tu mets ce que le pseudo-code t'indique 
    }   // jusqu'à FinBoucle
    ou bien, une forme équivalente que tu as pu apprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ( int i = 0 ; txt[i]!='\0' ; i++ ) // on détecte que chaque caractère txt[i] n'est pas l'indicateur de fin
    {
        // et entre les accolades tu mets ce que le pseudo-code t'indique 
    }   // jusqu'à FinBoucle

  13. #13
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    merci pour vos proposition , le for ( int i = 0 ; txt[i]!='\0' ; i++ ) Est la seule proposition qui me compile un programme, en revanche, je crois que mon programme est quand même faux , j'ai fait ceci :



    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
     
    #include<stdio.h>
    #include<string.h>
    int main()
    {
     
        char txt [80] ;
        int num[25] ;
        int i ;
        printf("Saisissez un texte");
        scanf("%c" ,txt);
        for(i=0 ; i<25;i++)
        num[i]=0 ;
     
     
        for ( int i = 0 ; txt[i]!='\0' ; i++ ){
     
       int rng = txt[i] - 'A' ;
     
       if (rng >=0 && 25>=rng) 
       {printf("%i" , num[rng] ) ; 
       }
       }
     
        for(i=0;i<25;i++)
         printf("%i%i\n" , i , num[i]) ;
     
        return 0 ;
     
    }

  14. #14
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    scanf avec le format "%c" ne permet pas de saisir un texte, mais seulement un seul caractère. Pour un texte il faut utiliser "%s" (et de plus avec "%s" la lecture s'arrête au premier espace).

    En ce qui concerne le tableau num il doit aller de 0 à 25 compris (l'alphabet comporte 26 lettres). Donc un tableau de 26 entier.

    Dans la boucle for qui passe en revue le texte (tableau txt) il ne t'est pas demandé d'afficher les cases du tableau num mais d'incrémenter la case qui correspondante à la lettre lu dans txt.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  15. #15
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    Citation Envoyé par CGi Voir le message
    scanf avec le format "%c" ne permet pas de saisir un texte, mais seulement un seul caractère. Pour un texte il faut utiliser "%s" (et de plus avec "%s" la lecture s'arrête au premier espace).
    merci pour la précision j'ai modifié ,comment je fait une incrémentation ? j'ai juste fait un printf("%i" , num[rng])

  16. #16
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Ce qu'on appelle l'incrémentation, c'est d'ajouter 1 à une variable.
    Par exemple si la variable x vaut 2 après l'avoir incrémenté, elle vaudra 3.
    On peut l'écrire de cette façon : x=x+1 , il existe un syntaxe courte qui est x++ .

    Tu as surement eu un cours qui explique tout cela ?
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  17. #17
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    Citation Envoyé par CGi Voir le message
    Ce qu'on appelle l'incrémentation, c'est d'ajouter 1 à une variable.
    Par exemple si la variable x vaut 2 après l'avoir incrémenté, elle vaudra 3.
    On peut l'écrire de cette façon : x=x+1 , il existe un syntaxe courte qui est x++ .

    Tu as surement eu un cours qui explique tout cela ?
    merci pour l'explication , j'ai vu dans mon cours c'est quoi mais je ne sais pas comment l'appliquer avec l'exo car j'ai juste l'exemple de ++i qui devient i++ je vais revoir après , le reste de mon code est-il correct si on oublie ça ?

    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
     #include<stdio.h>
    #include<string.h>
    int main()
    {
     
        char txt [80] ;
        int num[26] ;
        int i ;
        printf("Saisissez un texte\n");
        scanf("%s" ,txt);
        for(i=0 ; i<25;i++)
        num[i]=0 ;
     
     
        for ( int i = 0 ; txt[i]!='\0' ; i++ ){
     
       int rng = txt[i] - 'A' ;
     
       if (rng >=0 && 25>=rng) 
       {printf("%i" , num[rng++] ) ; 
       }
       }
     
        for(i=0;i<25;i++)
         printf("%i\n %i/n" ,i,   num[i]) ;
     
        return 0 ;
     
    }

  18. #18
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Je me répète, mais il ne t'es pas demandé d'afficher mais d'incrémenté la case correspondante dans num de la lettre lu dans txt. (la case, ce n'est pas l'indice). Donc le printf qui sert à afficher à l'écran, n'a rien à faire ici.

    L'affichage, il fait dans la dernière boucle for.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  19. #19
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2024
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2024
    Messages : 10
    Par défaut
    Citation Envoyé par CGi Voir le message
    Je me répète, mais il ne t'es pas demandé d'afficher mais d'incrémenté la case correspondante dans num de la lettre lu dans txt. (la case, ce n'est pas l'indice). Donc le printf qui sert à afficher à l'écran, n'a rien à faire ici.

    L'affichage, il fait dans la dernière boucle for.
    Oui, pardon, j'ai enlevé le printf et j'ai mis num[rng]++ mais j'obtiens ça quand je compile Nom : Capture.PNG
Affichages : 161
Taille : 3,2 Ko
    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
    #include<stdio.h>
    #include<string.h>
    int main()
    {
     
        char txt [80] ;
        int num[26] ;
        int i ;
        printf("Saisissez un texte\n");
        scanf("%s" ,txt);
        for(i=0 ; i<25;i++)
        num[i]=0 ;
     
     
        for ( int i = 0 ; txt[i]!='\0' ; i++ ){
     
       int rng = txt[i] - 'A' ;
     
       if (rng >=0 && 25>=rng) {
        num[rng]++ ; 
       }
       }
     
        for(i=0;i<25;i++)
         printf("%i\n" ,   num[i]) ;
     
        return 0 ;
     
    }

  20. #20
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    Citation Envoyé par livertx Voir le message
    mais j'obtiens ça quand je compile
    Quand tu exécutes !
    Et bien c'est presque bon, parce que tu as 1 à l'indice du 'H' mais le 'i' n'est pas compté car il est en minuscule et ton code tient compte uniquement des majuscules.

    PS pense au 'Z' comme je t'ai dit plus haut.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Calcul d'un rang dans une requête
    Par rossy dans le forum Access
    Réponses: 7
    Dernier message: 26/07/2018, 19h17
  2. Remplacer une lettre par une image (on peut ?)
    Par tunidesign dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 23/10/2005, 12h13
  3. Savoir si une lettre reseau est disponible en C++
    Par barthelv dans le forum Windows
    Réponses: 1
    Dernier message: 02/09/2005, 15h05
  4. Réponses: 3
    Dernier message: 13/12/2004, 14h14
  5. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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