tableau en escargot

draibins

Touriste
bonjour,
je suis en train de codé un programme qui permet de remplir une matrice 5*5 de maniere escargot c 'est a dire de commencer des le centre .l'affichage sera de la sorte

13 12 11 10 25
14 3 2 9 24
15 4 1 8 23
16 5 6 7 22
17 18 19 20 21
quelqu'un peut m'aider sur lalgorithme?
 
Déjà donne nous le langage :)

Et si c'est tjs une 5x5, bah tu définis manuellement les 25 positions à remplir en suivant.
 
1er
OP
D

draibins

Touriste
c'est en c++ et la dimension c'est tjrs 5*5. sinon je suis debutante donc je ne sais pas par quoi commencer si tu peux me donner une precision .merci
 
Si tu connais pas du tout le C++, commence pas l'apprendre avec des trucs de base :
http://www.siteduzero.com/tutoriel-3-11406-programmez-avec-le-langage-c.html

Ensuite pour ton truc, une méthode bête est de déclarer un tableau :

int tableau[5][5];

et puis tu rempli chaque élément dans l'ordre avec des cin

cin>> tableau[3][3]
cin>> tableau[3][2]
.....

Mais j'ai du mal à voir l'utilité de l'application

Ps : merci aux autres de corriger car ça fait trop longtemps que j'ai plus fait du C, donc possibilité que je confonde des codes ^^
 
1er
OP
D

draibins

Touriste
merci pour ta reponse. si je connais un peu le langage enfin je me debrouille je peux travailler avc des fonctions j'ai aussi fait des programme sur les chaine de caractere et les classe mais ca n'empeche je vais me documenter . en ce qui concerne l'utilité alors ca c'est un defi du prof c'est a dire au lieu de remplire une matrice carré en spirale

1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
ON LE REMPLI en commencant du centre voila
 

Skarbone

Le méchant Ω
Remplir les cases avec un ordre codé "en dur", ca me parait spécialement incohérent et totalement inutile.. Quel serait l'intéret ?

Il est évident qu'il faut un algorithme qui fonctionne tout aussi bien même si le carré fait 10*10 ou 3*3...
 

deNje

Adm¡n
Remplir les cases avec un ordre codé "en dur", ca me parait spécialement incohérent et totalement inutile.. Quel serait l'intéret ?

Il est évident qu'il faut un algorithme qui fonctionne tout aussi bien même si le carré fait 10*10 ou 3*3...
un défi donné par un prof, pas besoin d'avoir une utilité, c'est juste pour apprendre à coder.
 

Skarbone

Le méchant Ω
un défi donné par un prof, pas besoin d'avoir une utilité, c'est juste pour apprendre à coder.
Je sais, merci. L'utilité du défi est claire, ce que je dis c'est que le résoudre en hardcodant les valeurs pour un tableau de 5*5 ca ne présente aucun intéret. La prochaine fois, essaye de lire ce que j'écris :mrgreen:

(edit: je commence a cherche une solution :mrgreen:)
 

deNje

Adm¡n
Je sais, merci. L'utilité du défi est claire, ce que je dis c'est que le résoudre en hardcodant les valeurs pour un tableau de 5*5 ca ne présente aucun intéret. La prochaine fois, essaye de lire ce que j'écris :mrgreen:

(edit: je commence a cherche une solution :mrgreen:)
De rien, si t'as besoin d'autre chose, tu sais où me trouver ;)
 

Skarbone

Le méchant Ω
De rien, si t'as besoin d'autre chose, tu sais où me trouver ;)
Toujours aussi con :)


edit: a priori ca devrait marcher. Je lance netbeans pour vérifier. Ceci dit c'est un premier jet et tout n'est pas très propre donc même si ca marche revoit un peu le code quand même :D

http://pastie.org/3721770

re-edit: merde j'ai plus netbeans ici :colere:
 
Remplir les cases avec un ordre codé "en dur", ca me parait spécialement incohérent et totalement inutile.. Quel serait l'intéret ?

Il est évident qu'il faut un algorithme qui fonctionne tout aussi bien même si le carré fait 10*10 ou 3*3...
Oué c'est ce que je pensais, maintenant c'est pas non plus ultra trash pour toutes les dimensions.

Déjà faut des tailles impaires i, et pour trouver l'élément milieu, bah tu fais (i+1)/2
Ensuite, pour le 2 ème élément, tu fais -1 sur la ligne, etc...

Fin ça reste séquentiel, mais je vois pas comment faire ça avec une boucle ^^

EDIT : je viens de voir ton code, malade va :love:
 
1er
OP
D

draibins

Touriste
Toujours aussi con :)


edit: a priori ca devrait marcher. Je lance netbeans pour vérifier. Ceci dit c'est un premier jet et tout n'est pas très propre donc même si ca marche revoit un peu le code quand même :D

http://pastie.org/3721770

re-edit: merde j'ai plus netbeans ici :colere:

je vais verifier et je te dis quoi merci
 

Skarbone

Le méchant Ω
Oué c'est ce que je pensais, maintenant c'est pas non plus ultra trash pour toutes les dimensions.

Déjà faut des tailles impaires i, et pour trouver l'élément milieu, bah tu fais (i+1)/2
Ensuite, pour le 2 ème élément, tu fais -1 sur la ligne, etc...

Fin ça reste séquentiel, mais je vois pas comment faire ça avec une boucle ^^

EDIT : je viens de voir ton code, malade va :love:
a priori mon code devrai* fonctionner même pour un tableau de taille paire, comme je l'ai dit y'a ptet quelques modifications a faire vu que le code n'est pas testé. Pas oublier de virer la partie décimale de la taille, comme je l'ai écrit... En java ca passerait (5/2 = 2 si on utilise un int), mais en PHP par exemple ca ne marcherait pas trop :D

Pour le code, la premiere chose a faire, c'est d'écrire a la main l'escargot. Tu vois rapidement que tu dois faire:

- 1 pas vers le haut
- 1 pas vers la gauche
- 2 pas vers le bas
- 2 pas vers la droite
- 3 pas vers le haut
- 3 pas vers la gauche
- 4 pas vers le bas
- 4 pas vers la droite

[...]

Donc tu vois que

- tu enchaines les directions dans l'ordre haut, gauche, bas, droite,
- Tu fais 2 fois le même nombre de pas, avant d'augmenter le nombre de pas de 1.

A partir de la, faut réussir a le transposer en code quoi..
 
1er
OP
D

draibins

Touriste
Toujours aussi con :)


edit: a priori ca devrait marcher. Je lance netbeans pour vérifier. Ceci dit c'est un premier jet et tout n'est pas très propre donc même si ca marche revoit un peu le code quand même :D

http://pastie.org/3721770

re-edit: merde j'ai plus netbeans ici :colere:
par contre il fat initialiser posX et posY
 
1er
OP
D

draibins

Touriste
:D ok ok jte tiens au couurant merci en tt cas
 

Skarbone

Le méchant Ω
http://pastie.org/3722016

vala, le code marche et en prime t'as un affichage a chaque étape. Ca marche pour des tableau jusqu'a 99*99, au dela tu aura des problemes d'affichage m'enfin c'est dja largement suffisant :D.

PS: la gestion de l'affichage est mal foutue hein, j'ai juste pas envie de trop me casser la tête pour ca.


(bon, il plante a la derniere position, vu qu'elle existe pas, mais ca sera pas dur a régler)
 
1er
OP
D

draibins

Touriste
:D ok ok jte tiens au couurant merci en tt cas
merci. donc a kel niveau on affiche le tableau parceque si on l'affiche comme g fait :
tableau[posHauteur][posLargeur] = aPlacer;
cout<<tableau[posHateur][posLargeur];
aPlacer ++;
compteur2++;

ca maffiche
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 
1er
OP
D

draibins

Touriste
oui je me demandais l'affichage je teste et jte repond ;-D
 

Skarbone

Le méchant Ω
merci. donc a kel niveau on affiche le tableau parceque si on l'affiche comme g fait :
tableau[posHauteur][posLargeur] = aPlacer;
cout<<tableau[posHateur][posLargeur];
aPlacer ++;
compteur2++;

ca maffiche
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

c'est la partie avec 2 for imbriqués. PS: j'ai modifié le lien de pastie, ca gerera mieux l'affichage avec ca :p
 
Haut