Bonjour
Dans un lycée, un code d'accès à la photocopieuse est attribué à chaque professeur. Ce code est un nombre à 4 chiffres choisis dans la liste {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, chaque chiffre pouvant être repéré à l'intérieur d'un même code. Par exemple 0027 et 5855 sont des codes possibles.
1)Combien de codes peut-on ainsi former ?
2)Ce code permet aussi de définir un identifiant pour l'accès au réseau informatique. L'identifiant est constitué du code à 4 chiffres suivie d'une clé calculée à l'aide de l'algorithme suivant :
Entrée : N est le code à 4 chiffres
Initialisation : Affecter à P la valeur de N ;
Affecter à S la valeur 0 ;
Affecter à K la valeur 1.
Traitement : Tant que K 4 :
Affecter à U le chiffre des unités de P ;
Affecter à K la valeur K+1 ;
Affecter à S la valeur S+K*U ;
Affecter à P la valeur P −U/10;
Affecter à R le reste de la division euclidienne de S par 7 ;
Affecter à C la valeur 7-R.
Sortie (la « clé ») : Afficher C.
a) Faire fonctionner l'algorithme avec N = 2 282.
b) Dans cette question, toute trace de recherche, même incomplète, ou d'initiative même non fructueuse, sera prise en compte dans l'évaluation.
Un professeur s'identifie sur le réseau informatique en entrant le code 4732 suivi de la clé 7. L'accès au réseau lui est refusé. Le professeur est sûr des 3 derniers chiffres du code et de la clé, l'erreur porte sur le 1er chiffre du code (qui n'est donc pas égal à 4). Quel est ce 1er chiffre ?
Pour la 1) comment doit on procéder pour trouver tous les codes?
Pour la 2)
a-
Entrée : 2282
Initialisation P 2282
S: 0
K 1
K4 :
U---> 2
K---> 1+1 = 2
S--->0+2*2=4
P--->(2282-2)/10 = 2280/10=228
R--->228+(4/7)
C--->7-288.5
Sortie C --->-221.5
C'est correct?
Merci
1/ pour chaque chiffre du code, il y a 10 possiblités.
et il y a 4 chiffres..
2/
Entrée : 2282
Initialisation P 2282
S: 0
K 1
K4 4 :
U---> 2
K---> 1+1 = 2
S---> 0+2*2=4
P---> (2282-2)/10 = 2280/10=228
R---> 4/7 = 0*7 + 4 --> 4
C---> 7-4 = 3
----------- à FAIRE TANt que K 4
...
1/ 10*10*10*10
2/
K 1
TANT QUE K 4
FAIRE :
U---> 2
K---> 1+1 = 2
S--->0+2*2=4
P--->(2282-2)/10 = 2280/10=228
R--->228+(4/7)
C--->7-288.5
----------- En fin de 1° boucle K = 2 -------
---------- donc c'est pas fini ---------
---------- on continue tant que K est 4 ------
---------- ce qui est bien le cas -----------------------------
-----------------------------------------------------------------
FIN DE TANT QUE
...
Bonsoir
Il ne s'agit pas ici d'un test conditionnel :
IF (K 4)
ALORS FAIRE ...(1 fois)
mais bien d'une boucle itérative qui doit s'effectuer
plusieurs fois, TANT QUE la condition EST REMPLIE.
On sort de la boucle, quand la condition n'est plus remplie.
Le FIN DE TANT QUE, ... c'est un détail.
Il dépend du language qui est utilisé pour programmer l'algorithme.
...
Bonjour Jasmine et Pgeod.
Au premier tour de la boucle, on alimente S avec K fois le chiffre des unités; à ce moment, K = 2; donc S devient le double du chiffre des unités.
Au deuxième tour, le chiffre des unités du reste du code est le chiffre de dizaines du code lui-même; K est devenu 3; on augmente S du triple du chiffre des dizaines.
Au troisième tour, on augmente S du quadruple du chiffre des centaines.
Au quatrième tour et dernier tour, on augmente S du quintuple du chiffre des milliers.
La clef est le nombre qu'il faut ajouter à S pour atteindre le multiple de 7 immédiatement strictement supérieur.
Le signalement de la fin de la boucle est obligatoire, sinon on pourrait considérer que la boucle va jusqu'à la dernière ligne du programme.
La forme de ce signalement dépend du langage de programmation.
Ce signalement doit se situer entre les lignes :
Affecter à P la valeur P −U/10;
et
Affecter à R le reste de la division euclidienne de S par 7 ;
Au début du cinquième tour, K vaut 5 et le programme refuse d'exécuter la boucle une nouvelle fois. Il passera donc à la ligne du calcul du reste, puis au calcul de la clef et à son affichage.
Dans le cas de 4732 on calcule le S provisoire après les trois premiers tours de boucles.
La clef est 7, donc la valeur finale de S doit être divisible par 7.
On cherche donc le chiffre des milliers tel que son quintuple ajouté au S provisoire donne un multiple de 7. Il n'y a ici qu'une solution.
Bonjour!
Ah! On a remplie la condition puisque 2 < 4 !
Donc pour cette question c'est finie
Bonjour.
Le premier chiffre peut être supérieur à 4.
C'est le multiplicateur K, utilisé par le programme et qui ne fait pas partie du code secret, qui ne peut pas être supérieur à 4, sinon la boucle 'Tant que' n'est plus exécutée.
Bonjour Plumemeteore
Le K est nécessaire.
S est une somme de produits. Chacun de ces produits est la multiplication d'un chiffre du code et de la valeur de K.
S peut être supérieur à 7 (il peut aller jusqu'a 126).
Exemple avec 2282.
premier tour : K = 2, U = 2, S = 0 + 2*2 = 4
deuxième tour : K = 3, U = 8, S = 4 + 8*3 = 28
troisième tour : K = 4, U = 2, S = 28 + 2*4 = 36
quatrième tour : K = 5, U = 2, S = 36 + 2*5 = 46
K = 5 : on ne recommence plus de tour
S divisé par 7 = 6 reste 4 : R = 4
C = 7-4 = 3 : chiffre affiché
A chaque tour, K est incrémenté de 1 par l'instruction :
Affecter à K la valeur K+1 ; c-à-d K = K + 1
...
Bonjour.
C'est le programme qui détermine la valeur de K.
Au début du premier tour de la boucle, K = 1; mais il est augmenté de 1 et devient 2 pour l'affectation à S de S + K*U.
Il reste 2 tant qu'on ne le modifie pas, c'est-à-dire juste encore au deuxième tour juste avant l'instruction qui augmente sa valeur de 1; il devient alors 3 pour l'affectation à S de S + K*U.
Au troisième tour, K devient 4 du fait de sa nouvelle augmentation de 1. De même au quatrième tour, il devient 4+1 = 5.
A la tentative du cinquième tour, le programme note que K n'est plus inférieur ni égal à 4. Il saute la boucle et se retrouve dans les trois premières lignes.
Il importe de comprendre la valeur de chaque variable à chaque moment de l'exécution du programme.
Bonsoir!
J'ai compris! J'ai tout refais:
1er boucle:
Entrée : 2282
Initialisation: P=2282
S=0
K=1
Traitement: TANT QUE K4
U=2
K=1+1=2
S=0+2*2=4
P=(2282-2)/10=2280/10=228
R=4/7=0
C=7-0=7
Sortie " la clé": 7
K est toujours4
2ème boucle:
Entrée : 2282
Initialisation: P=2282
S=0
K=2
Traitement: TANT QUE K4
U=8
K=2+1=3
S=0+23*8=24
P=(2282-2)/10=2280/10=228
R=24/7=3
C=7-3=4
Sortie " la clé": 4
K est toujours4
3ème boucle:
Entrée : 2282
Initialisation: P=2282
S=0
K=3
Traitement: TANT QUE K4
U=2
K=3+1=4
S=0+4*2=8
P=(2282-2)/10=2280/10=228
R=8/7=1
C=7-1=6
Sortie " la clé": 6
K est toujours4
4ème boucle:
Entrée : 2282
Initialisation: P=2282
S=0
K=4
Traitement: TANT QUE K4
U=2
K=4+1=5
S=0+5*2=10
P=(2282-2)/10=2280/10=228
R=10/7=1
C=7-1=6
Sortie " la clé": 6
FIN DU TANT QUE K4
Voilà! C'est comme ça qu'il faut présenter les boucles?
Je dois avoir tout bon normalement!
Je cherche un algorithme pour le b) maintenant!
Bonjour Jasmine.
Dans chaque boucle, il faut tenir compte de la valeur actuelle des variables, qui peut avoir changé, pas de la valeur de départ
Un mot au sujet de l'affectation :
affecter à V le résultat d'un calcul se note souvent V = calcul
si V fait partie du calcul, c'est sa valeur avant affectation qui est utilisée pour le calcul
par exemple au premier tour
affecter à P la valeur (P-U)/10; à propos, (P-U)/10 n'est pas la même chose que P -U/10
P = (P-U)/10
valeur de U : 2; valeur de P avant affectation : 2282
calcul à droite de = : (2282-2)*10 = 228
P est maintenant 228 et restera jusqu'à ce qu'on lui affecte une autre valeur
Entrée : N est le code à 4 chiffres
Initialisation : Affecter à P la valeur de N ; P = 2282
Affecter à S la valeur 0 ; S = 0
Affecter à K la valeur 1. K = 1
Traitement : Tant que K <= 4 :
Premier tour
Affecter à U le chiffre des unités de P ; U = 2
Affecter à K la valeur K+1 ; K = 2
Affecter à S la valeur S+K*U ; S = 0+2*2 = 2
Affecter à P la valeur (P−U)/10; P = 228
Fin du premier tour
Deuxième tour
Affecter à U le chiffre des unités de P ; U = 8; car P est maintenant 228
Affecter à K la valeur K+1 ; K = 3, car avant cette affectation, K = 2
Affecter à S la valeur S+K*U ; S = 4 + 3*8 = 28; car avant cette affectation, S = 4
Affecter à P la valeur (P−U)/10; P = (228-8)/10 = 22
Fin du deuxième tour
Troisième tour
Affecter à U le chiffre des unités de P ; U = 2; car P = 22
Affecter à K la valeur K+1 ; K = 3+1 = 4
Affecter à S la valeur S+K*U ; S = 28 + 4*2 = 36
Affecter à P la valeur P −U/10; P = (22-2)/10 = 2
Fin du troisième tour
Quatrième tour
Affecter à U le chiffre des unités de P ; U = 2; car P = 2
Affecter à K la valeur K+1 ; K = 4+1 = 5
Affecter à S la valeur S+K*U ; S = 36+5*2 = 46
Affecter à P la valeur (P-U)/10; P = (2-2)/10 : 0
Fin du quatrième tour
Cinquième tour
On constate que K n'est pas plus petit ou égal à 4; on passe donc à la suite du programme, après la boucle.
Affecter à R le reste de la division euclidienne de S par 7 ; R = 4, car 46/7 donne un reste 4
Affecter à C la valeur 7-R. C = 7-4 = 3
Sortie (la « clé ») : Afficher C. '3 s'affiche
Bonjour!
Ah oui! Je viens de comprendre : je gardais toujours 2282 et on disait " le chiffre des unités" mais moi je mettais le chiffre des dixièmes, centaines, millième! Et ce n'ai pas demandé! Pour pourvoir garder le chiffre des unités on doit faire en sorte qu'il reste toujours en dernier!
Et sa grâce à l'algorithme"Affecter à P la valeur (P−U)/10"
!
Sinon pour la b- je n'ai pas trouvé l'algorithme qui convient!
Je pense qu'il faut commencer par l'algorithme du a-avec comme entrée 4732 :
1er boucle
Entrée : 4732
Initialisation : Affecter à P la valeur de N ;4732
Affecter à S la valeur 0 ;
Affecter à K la valeur 2.
Traitement : Tant que K <= 4 :
Affecter à U le chiffre des unités de P ;2
Affecter à K la valeur K+1 ;1+1=2
Affecter à S la valeur S+K*U ;0+2*2=4
Affecter à P la valeur P −U/10;(4732-2)/10=4730/10=473
2ème boucle
Entrée : 473
Initialisation : Affecter à P la valeur de N ;473
Affecter à S la valeur 0 ;
Affecter à K la valeur 1.
Traitement : Tant que K < ou égale à 4 :
Affecter à U le chiffre des unités de P ;3
Affecter à K la valeur K+1 ;2+1=3
Affecter à S la valeur S+K*U ;0+3*3=9
Affecter à P la valeur P −U/10;(473-3)/10=470/10=47
3ème boucle
Entrée : 47
Initialisation : Affecter à P la valeur de N ;47
Affecter à S la valeur 0 ;
Affecter à K la valeur 3.
Traitement : Tant que K = < 7 :
Affecter à U le chiffre des unités de P ;7
Affecter à K la valeur K+1 ;3+1=4
Affecter à S la valeur S+K*U ;0+4*7=28
Affecter à P la valeur P −U/10;(47-7)/10=40/10=4
Affecter à R le reste de la division euclidienne de S par 7 ;28/7=4
Affecter à C la valeur 7-4;7-4=3
Mais: Sortie (la « clé ») : Afficher C qui est 3 mais la clé 7!
Le code devient 3732 ? Mon traitement tant que K < = 4 est juste?
Où est la faute?
Bonjour Jasmine.
La boucle du programme se limite à :
Traitement : Tant que K <= 4 :
Affecter à U le chiffre des unités de P ;
Affecter à K la valeur K+1 ;
Affecter à S la valeur S+K*U ;
Affecter à P la valeur P −U/10;
ici, il manque une ligne qui pourrait s'écrire: Revenir à la ligne Tant que
Donc :
la première partie du programme, qui précède la boucle Tant que est exécutée une seule fois
la boucle est exécutée tant que la condition K <= 4 est respectée
la partie après la boucle est exécutée une seule fois
Le programme suivant calcule le premier chiffre manquant du code quand on connaît les trois derniers chiffres et la clef. Les lignes qui commencent par ' sont des commentaires qui ne sont pas exécutés; elles peuvent même être supprimées.
Entrée : N est le nombre formé des trois derniers chiffres du code;
Entrée : C est la clef
Initialisation : Affecter à P la valeur de N ;
Affecter à S la valeur 0 ;
Affecter à K la valeur 1;
'Calcul de la valeur de S après le traitement des trois derniers chiffres du code
Traitement : Tant que K <= 3 :
Affecter à U le chiffre des unités de P ;
Affecter à K la valeur K+1 ;
Affecter à S la valeur S+K*U ;
Affecter à P la valeur (P−U)/10;
Revenir à la ligne Tant que
Affecter à R la valeur 7-C
'R = reste de la division par 7 de la valeur finale de S
'Le S trouvé jusqu'à présent devra être augmenté de 5 autant de fois que nécessaire pour que le S final divisé par 7 donne R comme reste
'Ce nombre de fois sera le premier chiffre inconnu
'Si S est bon dès le début, la boucle n'est pas exécutée et donc X reste 0
X = 0
Tant que le reste de la division euclidienne de S par 7 est différent de R
X = X+1
S = S+5
Revenir à la ligne Tant que
'on teste si la prochaine valeur de S est bonne
Sortie : afficher "le premier chiffre est "
Afficher X
Donc comme 3 ne convient pas au code (1er chiffre) on doit le supprimer de l'algorithme:
Donc on prend comme entré 732
1er boucle
Tant que K<=3
U: 2
K: 1+1=2
S:0+2*2=4
P: (732-2)/10=730/10=73
Tant que K<=3
2ème boucle
U:3
K:2+1=3
S:0+3*3=9
P73-3)/10=70/10=7
Fin du tant que K<=4 car dans la 3ème boucle on aura K=4
R:9/7=1
C:7-1=6
Et là! La clé n'est pas 7! Oh là là! Sa recommence! Alors que j'ai tout suivi!
Bonjour,
Euh! J'exagère, je sais!
Mais il faut que je comprenne! Je n'arrête pas de refaire cet exercice! Et je n'ai toujours pas réussie!
Je suis découragée!
Bonjour
je travaille aussi sur ce devoir et je ne comprends pas pourquoi vous continuez d'affecter à U le chiffre des unités de P lorsque K=5
on n'est plus dans la boucle là, non?
svp j'ai vraiment besoin d'1 explication
je ne comprends pas pourquoi vous continuez d'affecter à U le chiffre des unités de P lorsque K=5 alors que l'algorithme précise : tant que K4
bonjour fedjer.
c'est déjà un topic un peu ancien.
on fait bien 4 itérations.
Au cours de la 4° itération, K prend la valeur 5
ce qui permet, lorsque la 4° itération est excécutée de sortir de la boucle.
merci de répondre!
pour K=4 on a :
P=2 S=36 U=2
on a donc fait 3 fois tourner le programme
étape suivante :
Affecter à U le chiffre des unités de P : I=2
K=5
c'est là que je ne comprends plus
pour moi je sortirais de la boucle et je ne calcule plus de nouvelle valeur pour S et P vu qu'on n'est plus dans le cas où K4
pourtant j'ai vu le corrigé 'donné en bac L option Maths et ils ont bien continué l'itération où K=5
et on trouve S=46 C=3
d'ailleurs l'algorithme dit bien pour K4 et non pas pour i allant de 1 à 4
j'ai besoin de comprendre cet exo pour lundi!
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :