Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

algorithmique

Posté par
dominiqu
18-11-10 à 19:56

Bonsoir,

Pourriez-vous m'aider à résoudre ce problème,
s'il vous plait?

voici le programme serarien avec les modules utilisés:
programme seraien
a,b,c :entier
debut
a<-3
b<-calcul (a,7,2)
c<-calcul (b,b-2,a)
afficher a,b,c
fin
fonction calcul (E/S:a: entier,E:b,c :entier):entier
debut
a<-a+b div c
c<-c div 2
retourner (a+b+c)
fin
donner l'état variables a,b e c du programme serarien en fin d'exécution de ce programme.
Vous préciserez l'état intermédiaire des variables après chaque ligne d'exécution du programme serarien.Inutile cependant de détailler sur la copie l'évolution des variables dans la fonction calcul.

Rappels:
E signifie que le paramètre est en entrée, donc le transfert se fait par valeur (transfert classique,d'ailleurs E est optionnel).
E/S signifie le paramètre est en entrée/sortie,donc le transfert se fait par adresse.
Cela signifie que toute modification sur le paramètre affectera la variable qui lui a été transférée.
div permet d'obtenir le résultat de la division entière d'un nombre (par exemple,25 div 3 donne 8 car 3*8=24 et il reste 1)

c'est confirmé!

programme seraien
a,b,c :entier
debut
a<-3
b<-calcul (3,7,2)=(3-7-2)=-6
c<-calcul (b,b-2,a) =(-6-(-6-2)-3)=-1
afficher 3,-6,-1
fin
fonction calcul (E/S:3: entier,E:-6,-1 :entier):entier
debut
a<-a+b div c=a<- 3+(-6) div3=-3div3=0
c<-c div 2=-1div2=0
retourner (a+b+c)=(0+(-6)+0)=-6
fin


je vous remercie pour votre aide

Posté par
dominiqu
re : algorithmique 19-11-10 à 14:59

Pouvez vous confirmer?
Dans ce qui suit, je note [x], y et z les éléments apparaissants dans la fonction calcul pour les distinguer des a, b et c du programme principal, je trouve que c'est plus parlant, surtout pour le deuxième appel de la fonction. Je mets [x] pour mettre en évidence que le premier paramètre est passé par adresse.

Avec ces notations, la fonction calcul s'écrit donc
fonction calcul (E/S:[x]: entier,E:y,z :entier):entier
debut
[x]←[x]+y div z
z←z div 2
retourner ([x]+y+z)
fin

b←calcul (a,7,2) => appel de la fonction calcul(3,7,2)
[x]=3, y=7, z=2
[x]+y => 3+7=10
[x]+y div z => 10 div 2 = 5
[x]←[x]+y div z => [x] = 5 donc, le paramètre à l'adresse correspondante, soit a, vaut 5.
z div 2 => 2 div 2 = 1
z←z div 2 => z = 1
retourner ([x]+y+z) => retourner(5+7+1=13)
d'où, comme b←calcul (a,7,2), b=13.
A la fin de cette partie, a=5, b=13 et c n'est pas affecté pour le moment.

c←calcul (b,b-2,a) => appel de la fonction calcul(13,11,5)
[x]=13, y=11, z=5
[x]+y => 13+11=24
[x]+y div z => 24 div 5 = 4
[x]←[x]+y div z => [x] = 4 donc, le paramètre à l'adresse correspondante, soit b, vaut 4.
z div 2 => 5 div 2 = 2
z←z div 2 => z = 2
retourner ([x]+y+z) => retourner(4+11+2=17)
d'où, comme c←calcul (b,b-2,a), c=17.

A la fin du programme, a=5, b=4 et c=17.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !