Calcul arithmétique [Résolu]

Messages postés
7
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
1 février 2008
- - Dernière réponse : Choukri_m
Messages postés
3
Date d'inscription
jeudi 4 mai 2006
Statut
Membre
Dernière intervention
15 septembre 2009
- 27 août 2009 à 22:10
Bonjour,

voila deux jours et plus que je cherche quelque chose que je pense simpleet qui existe forcément. Je ne peux plus me permettre de perdre de temps.

Je voudrais effectuer un checksum d'une chaine de caractère afin de pouvoir envoyer une trame vers mon port COM.

Ma question : comment faire la somme de mes caractère ascii (dont je connai la valeur hexadecimal) et y appliquer un modulo 256

pour etre plus concret : comment faire pour codeer la chose suivante

chaine de départ : 9 5 H E L L O qui correspond en hexa a 39 35 48 45 4C 4C 4F
et qui devrai donner apres addition : 1E2 modulo 256 = E2

sachant que je veux récupérer ce fameux E2 qui correspond a mon checksum

c'est surement simple voir facile mais je n'ai plus de recul et la je desespere ............................
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
3
Merci
salut,

je suppose que tu cherche l'opérateur mod.

sinon, je te rappel que l'hexa est juste un moyen d'afficher une valeur. comme le binaire, le décimal ou l'octal. et comme les char sont des bytes... T'as juste à les additioner.

si j'ai bien compris ce que tu veux faire, un for sur ton tableau avec un checksum := checksum + tab[i] mod 256; devrait faire l'affaire. (à vérifier)

bon code,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Loda
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
3
Merci
procedure TForm1.Button1Click(Sender: TObject);
var
  str: string;
  i, total: integer;
begin
  Total := 0;
  str := '95HELLO';
  for i := 1 to Length(str) do
    total := total + Byte(Str[i]);
  ShowMessage(IntToStr(total mod 256));
end;


prends un avatar..c'est plus convivial..

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
7
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
1 février 2008
0
Merci
merci beaucoup je test ça au plus vite.

et surtout pour la rapidité de la réponse
Commenter la réponse de totolito3535
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
CRC32!


Commenter la réponse de f0xi
Messages postés
7
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
1 février 2008
0
Merci
Merci à tous ça fonctionne

en espérant rendre binetot service a mon tour

A+
Commenter la réponse de totolito3535
Messages postés
121
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
1
0
Merci
Hi ; j’ai une question  SVP .





Dans le code fourni par cantador la variable totale est initialisée à zéro(alors que moi , je pensai qu’une variable integer sous Delphi est initialisée à zéro au moment de sa déclaration ) alors j’ai tester le code en enlevant l’initialisation et à ma surprise le résultat à changer !!! ce qui veut dire que l’initialisation là n’était pas fortuite ; j’ai bien lu et relu le code cherchant à comprendre le pourquoi du comment mais je ne pige toujours rien et j’ai le sentiment que je « zappe »  quelque chose d’important mais quoi au juste   MERCI à vous .
Commenter la réponse de khawarizm
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
L'initialisation des vaiables...pourquoi pas..
Il faut faire un autre topic..
n'est ce pas Julio ?

cantador
Commenter la réponse de cs_cantador
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
0
Merci
Bonsoir

Khawarizm, comme le dis la documentation de Delphi sur les variables :
"Si vous n'initialisez pas explicitement une variable globale, le compilateur l'initialise à 0."
"Les variables locales, par contre, ne peuvent être initialisées dans leur déclaration et contiennent des données aléatoires tant qu'elles ne sont pas initialisées."

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Commenter la réponse de WhiteHippo
Messages postés
3
Date d'inscription
jeudi 4 mai 2006
Statut
Membre
Dernière intervention
15 septembre 2009
0
Merci
Bonsoir tout le monde, j'ai besoin de votre aide, j'ai un code pédagogique de calcul matriciel en fortran et je veux le traduire en Turbo Pascal puis en Delphi je compte sur votre aide les amis
voici le code :
logical IPRINT, PGIVEN, INCID, CONV
real L, NUMER
dimension P(10), PGIVEN(10), A(10,10), C(10,10), D(10,10),
1 L(10,10), INCID(10,10), Q(10,10)
*****************************************
***** Lecture des Données *****
*****************************************
1 read (5,100) N, IMAX, RHO, EPS, F, IPRINT, (PGIVEN(i), i = 1,N)
read (5,101) (P(i), i = 1,N)
do 2 i = 1,N
read (5,102) (INCID(i,,j), j = 1,i)
read (5,101) (D(i,j), j = 1,i)
2 read (5,101) (L(i,j), j = 1,i)
*****************************************
***** transformation des matrices symetriques D, L et INCID et
calcul des elements de la matice C *****
*****************************************
FACTOR = 8.*12.**5*RHO*F/(3.1415926**2*32.2*(60.*7.48)**2*144.)
do 3 i = 1,N
do 3 j = 1,i
C(i,j) = 0.
if (i.EQ.j) go to 3
if (INCID(i,j)) C(i,j) = FACTOR*L(i,j)/D(i,j)**5
D(j,i) = D(i,j)
L(j,i) = L(i,j)
INCID(j,i) = INCID(i,j)
C(j,i) = C(i,j)
3 continue
*****************************************
***** ecriture des données initiales du reseau *****
*****************************************
write (6,200) N,ITMAX,RHO,EPS,F,IPRINT,(i, P(i),PGIVEN(i),i=1,N)
write (6,201)
do 4 i = 1,N
4 write (6,202) i, i, N, (INCID(i,j), j = 1,N)
write (6,201)
do 5 i = 1,N
5 write (6,203) i, i, N, (D(i,j), j = 1,N)
write (6,201)
do 6 i = 1,N
6 write (6,204) i, i, N, (L(i,j), j = 1,N)
*****************************************
***** calcul des approximations successives des pressions aux
noeuds *****
****************************************
if (IPRINT) write (6,205) (i, i = 1,N)
do 9 ITER = 1, IMAX
CONV = .true.
do 8 j = 1, N
if (PGIVEN) go to 8
NUMER = 0.
DENOM = 0.
do 7 i = 1, N
if (.not. INCID(i,j)) go to 7
A(i,j) = 1.0/SQRT(C(i,j)*ABS(P(i)-P(j)))
NUMER = NUMER + A(i,j)*P(i)
DEMON = DEMON + A(i,j)
7 continue
SAVEP = P(j)
P(j) = NUMER/DENOM
if (ABS(SAVEP-P(j)).GE.EPS) CONV = .false.
8 continue
if (IPRINT) write (6,206) ITER, (P(i), i = 1,N)
if (CONV) go to 10
9 continue
write (6,207) ITMAX
*****************************************
***** calcul des debits dans chaque troncon *****
*****************************************
10 do 11 i = 1,N
do 11 j = 1,i
Q(i,j) = 0.
Q(j,i) = 0.
if (i.EQ.j.OR..not.INCID(i,j)) go to 11
Q(i,j) = (P(i)-P(j))/SQRT(C(i,j)*ABS(P(i)-P(j)))
Q(j,i) = -Q(i,j)
11 continue
****************************************
***** ecriture des pressions finales et des debits *****
****************************************
write (6,208) ITER, N
do 12 i = 1,N
12 write (6,209) i, P(i), (Q(i,j), j = 1,N)
go to 1
***************************************
***** formats des etats d'entrées/sorties *****
***************************************
100 format(3x,i2,17x,i3,15x,F5.1,15x,E5.0/4x,F6.3,14x,L1 /
1 (30x,20(L1,1x)))
101 format(30x,5F8.3)
102 format(30x,20(L1,1x))
200 format(23H1FLOW IN A PIPE NETWORK/ 10H0N = ,13/ 10H ITMAX
1=, i3/ 10H RHO =, F7.3/ 10H EPS =, E10.2/ 10H F =,
2 F7.3/10H IPRINT =, 2x, L1/ 3H0 i, 6x, 4HP(i), 4x,9HPGIVEN(i)
3 (1H, i2, F10.3, 6x, L1))
201 format(1H0/1H0)
202 format(7H0INCID(,i2,13H, 1)...INCID(, i2, 1H,,i2, 3H) = ,
1 40(L1, 1x)/ (1H, 29x, 40(L1, 1x)))
203 format(3H0D(,i2, 9H, 1)...D(,i2,1H,,i2, 1H), 9x, 1H= , 8F10.3 /
1 (1H, 29x, 8F10.3))
204 format(3H0L(,i2, 9H, 1)...L(,i2,1H,,i2, 1H), 9x, 1H= , 8F10.3 /
1 (1H, 29x, 8F10.3))
205 format(1H0/ 5H0ITER,7x,16HPRESSURE AT NODE/ (1H,11x,8(i1,9x)))
206 format(1H, i3, 3x, 8F10.4/ (1H , 6x, 8F10.4))
207 format(35H0SOLUTIONS FAILED TO CONVERGE AFTER,i3,11H ITERATIONS)
208 format(1H0/26H0PRESSURES AND FLOWS AFTER, i3,15H ITERATIONS ARE/
1 3H0 i,5x,4HP(i),7x,16HQ(i, 1)...Q(i,,i2,1H) / 1H , 7x, 3HPSI,
2 14x, 7HGAL/MIN//)
209 format(1H , i2, F10.4, 5x, 8F10.3/ (1H , 17x, 8F10.3))
end
Commenter la réponse de Choukri_m