[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.
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:
- [debutante] calcul sur une boucle en c
- Calcul moyenne excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Logiciel gratuit calcul surface m2 - Télécharger - Outils professionnels
12 réponses
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
Bonne chance
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici le programme que je te propose
mais par contre mon var3 ne donne pas ton résultat (ici -965266083) :
Tu es sûre de ton coup ou c'est moi qui me suis trompée ?
Bonne chance
#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
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...
++
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...
++
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 :)
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 :)
ç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);
}
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);
}