[debutante] calcul sur une boucle en c

Résolu/Fermé
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 - 15 mai 2008 à 09:41
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 17 mai 2008 à 01:58
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.
A voir également:

12 réponses

mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
15 mai 2008 à 09:46
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
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 9
15 mai 2008 à 09:53
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
jeremiethe7
15 mai 2008 à 10:22
salut megan,
j'ai pas bien compris le truc,
y'a 3 variables donc toujours 3 caractères ???

+
0
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 9
15 mai 2008 à 10:38
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 9
16 mai 2008 à 21:50
Bonsoir à tous,

Juste un petit up :)


Bonne soirée
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
16 mai 2008 à 22:06
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
bitrate Messages postés 439 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 22 mars 2011 98
16 mai 2008 à 22:21
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
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 9
16 mai 2008 à 22:26
Bonsoir à vous deux,



merci pour votre aide

Je regarde pour var3


A+
0
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 9
16 mai 2008 à 22:54
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
bitrate Messages postés 439 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 22 mars 2011 98
16 mai 2008 à 23:07
ç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
Megan Fox Messages postés 410 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 10 juin 2011 9
16 mai 2008 à 23:15
Merci beaucoup à vous 2,

ça fonctionne aussi pour moi


Gros bisous, passez une bonne fin de soirée


@+
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
17 mai 2008 à 01:58
Bonne continuation ;-)
0