Calcul arithmétique

Résolu
totolito3535 Messages postés 7 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 1 février 2008 - 30 nov. 2007 à 10:43
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 ............................

9 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
30 nov. 2007 à 12:35
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.
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 nov. 2007 à 14:10
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
3
totolito3535 Messages postés 7 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 1 février 2008
30 nov. 2007 à 14:15
merci beaucoup je test ça au plus vite.

et surtout pour la rapidité de la réponse
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 nov. 2007 à 14:23
CRC32!


0

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

Posez votre question
totolito3535 Messages postés 7 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 1 février 2008
30 nov. 2007 à 15:01
Merci à tous ça fonctionne

en espérant rendre binetot service a mon tour

A+
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
30 nov. 2007 à 20:12
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 .
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 nov. 2007 à 22:45
L'initialisation des vaiables...pourquoi pas..
Il faut faire un autre topic..
n'est ce pas Julio ?

cantador
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
1 déc. 2007 à 20:08
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
0
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
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
0
Rejoignez-nous