f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
29 avril 2009 à 03:42
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
17 avril 2013 à 11:57
Salut, c'est pas souvent ... mais ça arrive, j'aurais besoin qu'un matheux se penche la dessus :
est-il possible de simplifier ceci :
J = (3 * (X div 3)) + (Y div 3)
N = (3 * (X mod 3)) + (Y mod 3)
sincerement, les equations ... c'est vachement loin (scolairement parlant) ... et je me souviens plus comment on les simplifie...
j'ai bien essayé de "tripoter" dans tout les sens ... mais ... ça donne rien, exemple :J (3*(X+Y)) div 9 gros caca qui pue.
dans le contexte : X et Y vont de 0 a 8
soit
for X := 0 to 8 do
for Y := 0 to 8 do
begin
J[X,Y] := (3*(X div 3))+(Y div 3);
N[X,Y] := (3*(X mod 3))+(Y mod 3);
end;
la sequence que j'obtiens etant :
pour J :
X
Y 0 1 2 3 4 5 6 7 8
0 0,0,0,1,1,1,2,2,2,
1 0,0,0,1,1,1,2,2,2,
2 0,0,0,1,1,1,2,2,2,
3 3,3,3,4,4,4,5,5,5,
4 3,3,3,4,4,4,5,5,5,
5 3,3,3,4,4,4,5,5,5,
6 6,6,6,7,7,7,8,8,8,
7 6,6,6,7,7,7,8,8,8,
8 6,6,6,7,7,7,8,8,8
pour N :
X
Y 0 1 2 3 4 5 6 7 8
0
0,1,2,0,1,2,0,1,2,
1
3,4,5,3,4,5,3,4,5,
2
6,7,8,6,7,8,6,7,8,
3
0,1,2,0,1,2,0,1,2,
4
3,4,5,3,4,5,3,4,5,
5
6,7,8,6,7,8,6,7,8,
6
0,1,2,0,1,2,0,1,2,
7
3,4,5,3,4,5,3,4,5,
8 6,7,8,6,7,8,6,7,8
Il me semble que je ne puisse simplifier plus les deux equations ... mais dans le doute, je pose la question.
merci a tous pour vos futures réflexions sur ce sujet.
un peu de glucose pour votre cerveau ?
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta name="GENERATOR" content="OpenOffice.org 3.0 (Win32)" /><style type="text/css"><!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
--></style>Si on regarde de plus près on constate des redondances
X
Y
0 1 2 3 4 5 6 7 8
0
0,0,0,1,1,1,2,2,2,
1
0,0,0,1,1,1,2,2,2,
2
0,0,0,1,1,1,2,2,2,
3
3,3,3,4,4,4,5,5,5,
4
3,3,3,4,4,4,5,5,5,
5
3,3,3,4,4,4,5,5,5,
6
6,6,6,7,7,7,8,8,8,
7
6,6,6,7,7,7,8,8,8,
8
6,6,6,7,7,7,8,8,8
Pourquoi
ne pas faire un tableau de J et utiliser cette redondance:
Var
X,Y:Integer;
Begin
For Y:=0 To 8 Do
If Y Mod 3 =0 Then
Begin
For X:=0 To 8 Do
Begin
J[X,Y]:=(3*(X div 3))+(Y div 3);
move(J[X,Y],J[X,Y+1],1);
move(J[X,Y],J[X,Y+2],1);
End;
End;
End;
Je me trompe peut etre mais copier des octets est plus rapide que de refaire un J[X,Y]:=(3*(X div 3))+(Y div 3). Puis en plus tu pourrais utiliser des pointeurs
Arfff le boulet : Y doit alors etre compris entre 0 et 6 sinon aie aie aie
Rectification :
Arfff le boulet :
Var
X,Y:Integer;
Begin
For Y:=0 To 6 Do
If Y Mod 3 =0 Then
Begin
For X:=0 To 8 Do
Begin
J[X,Y]:=(3*(X div 3))+(Y div 3);
move(J[X,Y],J[X,Y+1],1);
move(J[X,Y],J[X,Y+2],1);
End;
End;
End;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 29 avril 2009 à 15:20
@Cantador
Si le contexte change c'est pourri bien sûr. Sinon, c'est ce qui donne la meilleure perf'
Sinon, y'a aussi ça (sauf erreur) :
var
Qx,Rx,Qy,Ry: Word;
...
for X := 0 to 8 do
for Y := 0 to 8 do
begin
DivMod(X,3,Qx,Rx);
DivMod(Y,3,Qy,Ry);
J[X,Y] := 3 * Qx + Qy; // ou Qx+Qx+Qx+Qy
N[X,Y] := 3 * Rx + Ry; // ou Rx+Rx+Rx+Ry
end;
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 29 avril 2009 à 13:55
Arf zut oui j'ai trop pensé mathématiques et pas assez "nombre entiers".
Ca ne marche que pour les nombres pairs ...
C'est bête ^^
Mais au fond, je me demande si ça ne serait pas plus rapide de travailler en Single et d'utiliser la division décimale (/) plutôt que d'effectuer (en nombre entier, certes) une division puis une multiplication ? Je ne crois pas au fond ...
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 30 avril 2009 à 00:36
salut, merci pour toutes vos reponses.
@Bacterius :
oui X/3*3 = X mais X div 3 * 3 <> X
normal tu avait oublié le contexte des entiers
en fait comme je l'ai dis precedement j'utilise 4 tableaux de 9 valeurs (36) et pas un tableau de 81!
en gros cela donne :
var
X,Y : integer;
const
CXA : array[0..8] of integer = (0,0,0,3,3,3,6,6,6);
CXB : array[0..8] of integer = (0,3,6,0,3,6,0,3,6);
CYA : array[0..8] of integer = (0,0,0,1,1,1,2,2,2);
CYB : array[0..8] of integer = (0,1,2,0,1,2,0,1,2);
begin
for X := 0 to 8 do
for Y := 0 to 8 do
Square[X,Y] := @ColRow[CXA[X]+CYA[Y], CXB[X]+CYB[Y]];
end;
puisque le but est de transformer les coordonnées d'une matrice colones+lignes en matrice decoupée en 9 matrices de 3x3
donc de 9x9 a 9x3x3 :)
et vous aurez tous reconnus ... je vous le donne en mille, une grille de Sudoku.
le but etant ben sur d'avoir 3 mode de lecture de la matrice :
en colones ou en lignes par ColRow
et en carré de 3x3 par Square
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202114 30 avril 2009 à 13:04
Je me disais bien que le contexte devait surement avoir son importance sinon
f0xi nous aurait fourni les deux tableaux de résultats en demandant de faire un programme permettant de les obtenir..
Heureusement que f0xi a fait "un peu" l'école buissonnière pendant ses cours de maths sinon, nous serions dans de beaux draps aujourd'hui pour lire ses sources..
Déjà que c'est difficile.. !!!
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 13 avril 2013 à 17:28
Désolé d'intervenir quatre ans après que la discussion soit terminée mais, ayant eu deux questions à poser ces temps-ci, je commence seulement à m'intéresser au forum. Je suis venu faire un tour dans les maths et comme le mot "simplifier" m'attire, j'ai été attiré par ce message.
S'il s'agissait d'une question faisant partie d'un problème, je pense que la réponse attendue était:
Pour le calcul de J: remplacer X par (X mod 3) et Y par (Y mod 3), ce qui donnait:
J = X + Y/3
Pour le calcul de N, je ne vois pas de simplification (car 3*(X mod 3), ce n'est pas égal à (3x mod 9).
Mais si on remplaçait X par (X mod 3) et Y par (Y mod 3), on obtenait
N= 3*X + Y
On s'apercevait alors de ce qui n'était pas évident a priori: N=3*J.
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 16 avril 2013 à 09:23
Je m'aperçois que je me suis trompé. Je reprends.
Je maintiens X'= (X mod 3) et Y= (Y mod 3)
Commençons par modifier J.
(X div 3) ça peut aussi s'écrire
. (X- (X Mod 3)) /3
ou
. (X/3) - (X'/3)
Donc si on multiplie ça par 3, on trouve (X - X')
(Y div 3) peut s'écrire (Y-Y')/3 soit (Y/3) - (Y'/3)
Donc J peut s'écrire (X - X') + (Y/3 - Y'/3)
A quoi est égal 3J ?
3J = 3X - 3X' + Y - Y
ou
(3X+Y) - (3X'+Y')
Pour N, aucun calcul à faire, ça vient tout seul
N= 3 X' + Y'.
[i] (On voit bien qu'on ne peut y apporter aucune simplification. C'est la somme de 2
nombres sans lien entre eux. C'est comme si on avait 3a+b , a et b n'ayant aucun lien entre eux.)/i
On voit que 3J = (3 X + Y) - N
d'où
J = X + Y/3 - N/3
Pas terrible comme simplification mais c'est mieux que rien.
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 16 avril 2013 à 19:32
D'accord mon intervention n'était pas absolument indispensable mais on ne sait jamais.
Si une commission d'enquête venait un jour vérifier le sérieux du groupe, elle pourrait constater qu'ici on ne rigole pas. Tant qu'il y a de la vie, il y a des réponses.