exercices sur le binaire - LAMSADE

Exercice 9 : Objets répartis en CORBA. SECOND CHAPITRE .... Comment sont
réalisées les lectures, les écritures. Quelle propriété minimum .... 4) Dans la
procédure précédente send_request la primitive htonl est appliquée à la
longueur du paquet packet_len pour fabriquer la zone req.len (longueur de la
requête).

Part of the document


EXERCICES SUR LE BINAIRE Le but de ces exercices est d'acquérir le langage élémentaire de
Foxpro, avant de l'utiliser dans les bases de données. Exercice I: conversion d'un entier positif en base 2
On suppose que L est une liste Foxpro déclarée dont les éléments
sont soit zéro, soit un. On pourra par exemple dans la fenêtre de commande
taper les instructions suivantes
Declare L (8)
Set 0 to L 1°) Ecrire une procédure affbin ayant pour paramètre L et affichant à
l'écran les éléments de L sous la forme suivante quelque soit la longueur
de L. (0, 0, 0, 0, 0, 0, 0, 0) Indication
On pourra utiliser ?? pour rester sur la même ligne
Commencer par la parenthèse ouvrante
Avec une boucle écrire tous les éléments de 1 à longueur de L moins 1
Enfin écrire le dernier et la parenthèse fermante.
Enfin on pourra utiliser picture '9' pour avoir un format plus
conforme.
Ex:L(i) picture '9' Correction procedure affbin
parameters b
private i
?"("
for i=1 to alen(b)-1
?? b(i) picture '9'
??","
endfor
?? b(alen(b)) picture '9',")"
return 2°) En utilisant une fonction mixte (voir poly page 21 document 2)
écrire une fonction decptob convertissant un décimal en binaire. On prendra
3 paramètres
la liste L préalablement déclarée de longueur 1 qui sera modifiée
en recevant la représentation binaire
N le deuxième paramètre sera le nombre entier à convertir
NBIT sera un entier représentant le nombre de bit de l'écriture
binaire. La fonction retournera la valeur booléenne .T. si la conversion est
possible et .F. sinon. On rappelle que une liste doit être passée toujours par adresse ou variable
dont précédée de @
?dectob(@L,11,16) Indication
Penser à déclarer L dans la procédure en fonction de nbit
Par une boucle tant que constituer sa représentation binaire
Correction
function decptob
parameters b,n,nbit,v
declare b (nbit)
store 0 to b
i=nbit
do while i>0 and n>0
b(i)=mod(n,2)
n=int(n/2)
i=i-1
enddo
if n>0
V=.F.
else
v=.T.
endif
return (V) 3°) Ecrire une fonction Binptod qui donne la valeur décimale d'une
représentation binaire d'un nombre positif. Indication Utiliser ne boucle de 2 à la longueur de la liste en
multipliant la somme par 2 et ajoutant l'élément L(i). Correction
function binptod
parameters L
private i,s
s=L[1]
for i=2 to alen(L)
s=s*2+L(i)
endfor
return(s) Exercice 2 conversion d'un entier relatif On suppose que L est une liste dont chaque élément est soit zéro
soit 1. 1°) Ecrire une procédure compl1 qui calcule le complément à 1 d'une
liste L considérée comme un paramètre d'entrée et sortie. Correction procedure compl1
parameters L
private i
for i=1 to alen(L)
L(i)=1-L(i)
endfor
return 2°) Ecrire une fonction mixte plus1 qui modifie le paramètre d'entrée
L d'une représentation binaire en lui ajoutant 1 et prend comme valeur Faux
en cas de dépassement de capacité et vrai sinon.
Indication on pourra initialiser R=1 puis par une boucle commençant à
L(alen(L)) ajouter R en le gérant . Correction
function plus1
parameters L
private i,R,B
i=alen(L)
R=1
do while i>0 and R=1
if L(i)=1
L(i)=0
else
L(i)=1
R=0
endif
i=i-1
enddo
if R=0
B=.T.
else
B=.f.
endif
return b 3°) Ecrire une fonction mixte dectob calculant la représentation
binaire L sur n bit d'un nombre entier relatif n et retournant vraie si
c'est possible et faux sinon. On pourra prendre comme paramètre de sortie
une liste L et comme paramètres d'entrée n et nbit. Correction
function dectob
parameters L,n,nbit
private nabs,B
B=.T.
if n=-2**(nbit-1)
declare L(nbit)
store 0 to L
L(1)=1
else
nabs=abs(n)
=decptob(@L,nabs,nbit)
if L(1)=1
b=.F.
else
if n