[debutante] calcul sur une boucle en c

Résolu
Megan Fox Messages postés 410 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

Je suis très débutante en C et j'ai un petit problème sur un calcul dans une boucle.

Je dois partir d'une chaîne de caractère, passer chaque caractère un par un.
Puis faire un calcul dessus avec 3 variables
et afficher le résultat.

Donc voila ce qui devrait se passer:
avec variable1 => prend la valeur en hexa de chaque caractère

1. variable1 = variable1 + 0x539
2. variable2 = variable2 + variable1
3. variable3 = variable3 + variable2
4. variable3 = variable3 - 0x21

on sort de la boucle puis un tout petit calcul:
5. variable4 = variable1 * nombreDeCaractère

avec variable1 = dernier caractère rencontré + 0x539

ensuite l'affichage, je dois concaténer les résultats sous cette forme :
variable4ÿvariable1variable3

avec variable4 et variable3 convertis en décimal et variable1 en hexadécimal et avec l'insertion du caractère spécial.

J'avoue que je suis perdue dans tout ça :)

Quelqu'un aurait-il une idée?

Merci pour votre aide.
Configuration: Windows XP
Firefox 2.0.0.14

12 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Peux-tu nous donner un exemple de chaîne (donnée en entrée) et le résultat attendu (valeur de chaque variable notamment) ?

    Bonne chance
    0
  2. Megan Fox Messages postés 410 Statut Membre 9
     
    Salut mamiemando et merci pour ta réponse aussi rapide,

    Il peut y avoir n'importe quelle chaîne de caractère, lettre, numéro ..

    Par exemple si je prend Megan voici le résultat:
    7235˜5A721292

    Encore merci
    0
  3. jeremiethe7
     
    salut megan,
    j'ai pas bien compris le truc,
    y'a 3 variables donc toujours 3 caractères ???

    +
    0
  4. Megan Fox Messages postés 410 Statut Membre 9
     
    Salut jeremiethe7,

    oui en relisant je me suis plantée sur la 1ère variable , (vraiment désolée)

    En fait, tu prends une chaîne de caractères, tu boucles dessus pour passer en revue tous les caractères.

    La première variable:
    variable1 = caractère[i] + 0x539 <= donc on doit pouvoir convertir le caractère qui est entrain d'être "utiliser" dans la boucle en hexa lui ajouter 0x539 est le mettre dans variable1

    ensuite
    variable2 = variable2 + variable1 <= le calcul se fait en hexa et variable2 augment à chaque tour de la valeur de variable1

    après
    variable3 = variable3 + variable2 <= ici c'est la même chose sauf qu'on soustrait à chaque tour 0x21
    variable3 = variable3 - 0x21

    dernier calcul en dehors de la boucle:
    variable4 = variable1 * nombreDeCaractère <- nombre de caractères de la chaîne

    Le résultat doit être de la forme: (pour Megan par exemple)
    7235˜5A721292

    avec
    7235 <= résultat de variable4 convertie en décimal
    ˜ <= caractère spécial
    5A7 <= dernière valeur de variable1 en hexa
    21292 <= valeur de variable3 en décimal

    Voilà

    merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Megan Fox Messages postés 410 Statut Membre 9
     
    Bonsoir à tous,

    Juste un petit up :)

    Bonne soirée
    0
  7. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Voici le programme que je te propose
    #include <stdio.h>
    #include <string.h>
    
    int main(){
        const char *str = "Megan";
        const unsigned n = strlen(str);
        unsigned i;
        int var1,var2,var3,var4;
        for(i=0;i<n;++i){
            var1 = str[i];
            var1 += 0x539; // 1
            var2 += var1;  // 2
            var3 += var2;  // 3
            var3 -= 0x21;  // 4
        }
        var4 = var1 * n;
        printf("%d~%x%d\n",var4,var1,var3);
        return 0;
    }
    

    mais par contre mon var3 ne donne pas ton résultat (ici -965266083) :
    7235~5a7-965266083

    Tu es sûre de ton coup ou c'est moi qui me suis trompée ?

    Bonne chance
    0
  8. bitrate Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   98
     
    moi j'ai ça (variable3 incorrect)

    char chaine[]="Megan";

    int len=strlen(chaine);

    // on part de zéro je pense (pas précisé)

    unsigned long variable1=0,variable2=0,variable3=0,variable4=0;

    for (int i=0;i<len;i++)
    {
    variable1 = chaine[i] + 0x539;
    variable2 = variable2 + variable3;
    variable3 = variable3 + variable2;
    variable3 = variable3 - 0x21;
    }

    variable4 = variable1 * len;

    printf("%ld~%lx%ld\n",variable4,variable1,variable3);

    y'a un problème avec variable3...

    ++
    0
  9. Megan Fox Messages postés 410 Statut Membre 9
     
    Bonsoir à vous deux,

    merci pour votre aide

    Je regarde pour var3

    A+
    0
  10. Megan Fox Messages postés 410 Statut Membre 9
     
    Non c'est ça normalement,

    Je le fait en manuel, avec:
    M -> 4D
    e -> 65
    g -> 67
    a -> 61
    n -> 6E

    1er tour:
    V1 = 4D + 539 = 586
    V2 = V2 + V1 = 586
    V3 = V3 + V2 = 586
    V3 = V3 - 21 = 565

    2ème tour:
    V1 = 65 + 539 = 59E
    V2 = V2 + V1 = 586 + 59E =B24
    V3 = V3 + V2 = 565 + B24 = 1089
    V3 = V3 - 21 = 1089 - 21 = 1068

    3ème tour:
    V1 = 67 + 539 = 5A0
    V2 = V2 + V1 = B24 + 5A0 =10C4
    V3 = V3 + V2 = 1068 + 10C4 = 212C
    V3 = V3 - 21 = 212C - 21 = 210B

    4ème tour:
    V1 = 61 + 539 = 59A
    V2 = V2 + V1 = 10C4+ 59A =165E
    V3 = V3 + V2 = 210B + 165E = 3769
    V3 = V3 - 21 = 3769 - 21 = 3748

    5ème tour:
    V1 = 6E + 539 = 5A7
    V2 = V2 + V1 = 165E+ 5A7 =1C05
    V3 = V3 + V2 = 3748 + 1C05 = 534D
    V3 = V3 - 21 = 534D - 21 = 532C

    et donc

    V3 = 0x532C = 21292 en décimal

    Encore merci

    P.S. la prochaine fois on fera un exemple sur 2 caractères ça ira plus vite :)
    0
  11. bitrate Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   98
     
    ça donne le bon résultat maintenant (mavé trompé) ça donne bien 7235~5a721292

    void main()
    {
    char chaine[]="Megan";
    int len=strlen(chaine);

    // on part de zéro je pense (pas précisé)

    unsigned long variable1=0,variable2=0,variable3=0,variable4=0;

    for (int i=0;i<len;i++)
    {
    variable1 = chaine[i] + 0x539;
    variable2 = variable2 + variable1;
    variable3 = variable3 + variable2;
    variable3 = variable3 - 0x21;
    }

    variable4 = variable1 * len;

    printf("%ld~%lx%ld",variable4,variable1,variable3);
    }
    0
  12. Megan Fox Messages postés 410 Statut Membre 9
     
    Merci beaucoup à vous 2,

    ça fonctionne aussi pour moi

    Gros bisous, passez une bonne fin de soirée

    @+
    0
  13. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonne continuation ;-)
    0