[debutante] calcul sur une boucle en c

Résolu
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. Modérateur
    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
    1. 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
      1. salut megan,
        j'ai pas bien compris le truc,
        y'a 3 variables donc toujours 3 caractères ???

        +
        0
        1. 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
          1. Bonsoir à tous,

            Juste un petit up :)

            Bonne soirée
            0
            1. Modérateur
              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
              1. 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
                1. Bonsoir à vous deux,

                  merci pour votre aide

                  Je regarde pour var3

                  A+
                  0
                  1. 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
                    1. ç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
                      1. Merci beaucoup à vous 2,

                        ça fonctionne aussi pour moi

                        Gros bisous, passez une bonne fin de soirée

                        @+
                        0
                        1. Modérateur
                          Bonne continuation ;-)
                          0