bonjour,
j'ai passée toute une journée a ecrire un algorithme pour une matrice en zig-zag mais aucun resultat
svp qu'elqu'un peut me proposer comment procède pour que je démarre
![]()
bonjour,
j'ai passée toute une journée a ecrire un algorithme pour une matrice en zig-zag mais aucun resultat
svp qu'elqu'un peut me proposer comment procède pour que je démarre
![]()
salut
pour commencer
tu initialise deux variable a zero appelons au hasard x et y
donc le but est au final d'arrivé au point maximal de ta matrice
xmax et ymax
tans que tu n'as pas atteint les deux valeur tu doit bouger
donc :
maintenant il faut définir les différents cas possible
Code x : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TansQue x <= xMax et y <= yMax Faire DEBUT
on sait que lorsque l'on atteint les bord il va falloir changer de direction
il ne te reste plus que les diagonales soit montantes soit descendantes
Code x : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SI (X = 0) Or (X = Xmax) ALORS // ON DECEND SI (Y = Ymax) ALORS // CAS OU ON ATEINT LE BAS X = X + 1 // ON SE DECALE SUR LA DROITE SINON Y = Y + 1 // ON SE DECALE VERS LE BAS FIN SI AfficherValeur(tableau(X,Y)) SINON SI (Y = 0) Or (Y = Ymax) ALORS If (X = Xmax) ALORS // CAS OU ON ATEINT LE COTE DROIT Y = Y + 1 // ON SE DECALE VERS LE BAS SINON X = X + 1 // ON SE DECALE SUR LA DROITE FIN SI AfficherValeur(tableau(X,Y)) FIN SI FIN SI
pour se faire c'est toujours pareil c'est les extrêmes qui vont te fournir le sens
le reste est très simple je te laisse donc finir de compléter par toi même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SI (X = 0 Or Y = Ymax) ALORS croissant = FAUX FIN SI SI (Y = 0 Or X = Xmax) ALORS croissant = VRAI FIN SI
sur quel base j'attribue les valeurs de xmax et ymax ?
salut
la taille de ta matrice
si tu as une matrice de 7*7
Xmax = 7 et Ymax = 7
ce n'est pas plus compliqué que cela
A mon avis, xmax, ça veut dire x.maximum, et ymax y.maximum.
Bonjour
D'où vient ce dessin ? Moi, je ne ferais pas comme ça. Je prendrais toutes les pseudo-diagonales dans le même sens.
Et comme elles ont toutes la propriété d'avoir le même x+y, le parcours devient facile.
Soit NxN la taille de la matrice carrée.
Il faut donc faire une boucle de 2 à N+N (indiquant la diagonale que tu traites)
A l'intérieur, faire une autre boucle pour les x de 1 à N. Le y se déduit facilement.
Et tu remplis le tableau final.
Maintenant, si tu tiens tellement à ton changement de sens, il suffit de rajouter un facteur -1indice.
Et voilà !
salut
sauf que tu ne répond pas à la question vu que tu as des flèches t'indiquant que c'est un chemin et non un remplissage de diagonal
je dis ça je dis rien![]()
sinon effectivement avec une boucle for de 1 à N*N il y a une solution
et pas besoin d'une boucle interne pour les x
on initialise
on boucle sur la matrice carré
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 x = 1; y = 1; direction = 1;
il y a 4 test a faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 POUR element de 1 à taille*taille FAIRE DEBUT TAB[X,Y] := element; x = x + direction; y = y - direction;
Fin de la boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 SI (x = 0) ALORS // Si x = 0 direction := -direction; x := x + 1; FIN SI; SI (X = taille +1) ALORS // si X est au max direction := -direction; x := x - 1; y := y + 2; FIN SI; SI (y = 0) ALORS // si y est a zero direction := -direction; y := y + 1; FIN SI SI (y = taille + 1) ALORS // si y est au max direction := -direction; y := y - 1; x := x + 2; FIN SI
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2FIN
Partager