Texte incomprehensible !!!

Discutez d'informatique ici !
Flodelarab
Membre Légendaire
Messages: 6574
Enregistré le: 29 Juil 2006, 15:04

par Flodelarab » 02 Aoû 2007, 18:44

Joker62 a écrit:T'as vu ça un peu !
Desfois j'me dis quand même : David, t'es un mac !

Chacun ses défaults.



Joker62
Membre Transcendant
Messages: 5028
Enregistré le: 24 Déc 2006, 20:29

par Joker62 » 02 Aoû 2007, 19:04

Ben c'est pas mal Mac quand même :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 20:27

:hum: :hum: :hum: :hum: :hum:

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 20:33

Bonjour:
Je cherche à écrire une procédure en langage Pascal, qui calcule la multiplication de deux matrices quelconques...
Je cherche juste la formule mathematique que l'on peut mettre dans cette procédure !!!
Merçi d'avance !!

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 20:37

Pour celle qui calcule l'addition de deux matrices quelconques, la voiçi ,c'est simple :
type matrice = array[1..n,1..n] of real;
procedure somme(m1,m2:matrice; var m3:matrice);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
m3[i,j]:=m1[i,j]+m2[i,j];
end;

Merçi d'avance !!

Joker62
Membre Transcendant
Messages: 5028
Enregistré le: 24 Déc 2006, 20:29

par Joker62 » 02 Aoû 2007, 20:47

Alors ça sera une procédure avec trois arguments
2 en entrées 1 en sortie

La formule pour la mutliplication matricielle est

le coefficient i,j vaut Somme pour k de 1 à n (Aik)(Bkj)
Faut juste traduire
Mais là j'ai pas l'temps j'ai une bière qui m'attend
@Demain tchuss :)

Flodelarab
Membre Légendaire
Messages: 6574
Enregistré le: 29 Juil 2006, 15:04

par Flodelarab » 02 Aoû 2007, 20:52

tu as utilisé le terme général de la matrice. (ou des matrices)
Pkoi tu ne fais pas pareil avec la multiplication ?
Utilise les t g.

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 21:16

Je crois que j'l'ai trouvé:
D'abord, pour la formule mathématique calculant le produit de deux matrices quelconques, telle que :

est : .
En Pascal, cela se traduit par:
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
m3[i,j] = m1[i,k] * m2[k,j]

N'est ce pas Joker ?!

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 21:35

Voiçi comment celà foctionne "Flodelarab" , à l'interieur de l'ordinateur:
Dans un premier temps, on se place au début de la boucle, on fixe , on fixe ensuite , et on calcule en parcourant de à ( for to do ) ..
On retourne au début de la boucle .. on fixe , et on fixe ensuite , et on calcule en parcourant de à ( for to do ) ...
.
.
.
On retourne au début de la boucle..., on fixe , on fixe ensuite , et on calcule en parcourant de à ( for to do ) ..
On retourne au début de la boucle ...mais cette fois çi, on fixe et on calcule en parcourant de à ..
.
.
.
et ainsi de suite jusqu'à arriver à ... on la calcule en parcourant de à ( for to do ).
C'est facile n'est pas.. Ensuite on quitte la boucle et on termine le reste du programme...

Dominique Lefebvre
Membre Légendaire
Messages: 8007
Enregistré le: 03 Déc 2005, 13:00

par Dominique Lefebvre » 02 Aoû 2007, 23:04

Ouahh j'adore le "à l'intérieur de l'ordinateur" c'est cool! Moi qui croyais bêtement qu'à l'intérieur d'un ordinateur, il y avait des bouts de cuivre d'or et de silicium et des électrons qui bougent!

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 23:35

:ptdr: :ptdr: :ptdr:

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 02 Aoû 2007, 23:44

Ah non, il y'a une petite erreur :
voiçi la correction, maintenant :
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
m3[i,j]:=0
m3[i,j]:= m3[i,j] + m1[i,k]*m2[k,j]

Joker62
Membre Transcendant
Messages: 5028
Enregistré le: 24 Déc 2006, 20:29

par Joker62 » 03 Aoû 2007, 00:55

2 instructions dans ta dernière boucle
Nécessite donc un bloc Begin End;

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 03 Aoû 2007, 01:14

D'accord Joker, merçi !
Je mets ça en procédure, ça devient:
type matrice = array[1..n,1..n] of real;
procedure prod_matrice(m1,m2:matrice;var m3:matrice);
var i,j,k:integer;
begin
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
m3[i,j] := 0;
m3[i,j] := m3[i,j] + m1[i,k] * m2[k,j];
end;
end;

Flodelarab
Membre Légendaire
Messages: 6574
Enregistré le: 29 Juil 2006, 15:04

par Flodelarab » 03 Aoû 2007, 01:27

"Dominique Lefebvre" a écrit:Ouahh j'adore le "à l'intérieur de l'ordinateur" c'est cool! Moi qui croyais bêtement qu'à l'intérieur d'un ordinateur, il y avait des bouts de cuivre d'or et de silicium et des électrons qui bougent

Et oui Dominique ! C'est une vue de l'esprit les petits electrons qui bougent dans l'ordinateur.
L'onde électrique va beaucoup plus vite. Heureusement d'ailleurs. Car les electrons, à raison de 10m/s, dans les fils mettrait trop de temps pour que le compte soit bon.

"barbu23 " a écrit:Voiçi comment celà foctionne "Flodelarab" , à l'interieur de l'ordinateur:
ahhhh, j'aime qu'on m'explique. Surtout l'info.

"Joker" a écrit:2 instructions dans ta dernière boucle
Nécessite donc un bloc Begin End;

Ya que ça qui te choque ?
Barbu, tu initialises ton t g a chaque fois avant de l'augmenter :ptdr: ça sert a rien.

Flodelarab
Membre Légendaire
Messages: 6574
Enregistré le: 29 Juil 2006, 15:04

par Flodelarab » 03 Aoû 2007, 01:35

Et puis meme.
Je ne comprends que tu aies 3 boucles.
Si tu mettais la signification en commentaire a droite, on comprendrais mieux.
Car:

for i:=1 to n do // Pour chaque ligne de M,
for j:=1 to n do // Pour chaque colonne de M, faisons ....

est suffisant ... je ne vois pas pkoi tu ferais plus de n² calculs pour trouver ta matrice finale.

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 03 Aoû 2007, 02:25

"Flodelarabe", tu n'as rien compris de ce que j't'ai expliqué plus haut .. :ptdr:
Voiçi le role des deux boucles : for i:=1 to n do et for j:=1 to n do
Pour i fixé à 1 et pour j fixé à 1 --> m3[i,j] = m3[1,1] ( c'est la composante de la matrice m3 située à la 1-ième ligne et 1-ème colonne )
Pour i fixé à 1 et pour j fixé à 2 --> m3[1,2] ( c'est la composante de la matrice m3 située à la 1-ième ligne et 1-ème colonne )
.
.
.
Pour i fixé à 1 et pour j fixé à n --> m3[1,n] ( c'est la composante de la matrice m3 située à la 1-ième ligne et n-ème colonne )
Pour i fixé à 2 et pour j fixé à 1 --> m3[2,1] ( c'est la composante de la matrice m3 située à la 2-ième ligne et 1-ème colonne )
Pour i fixé à 2 et pour j fixé à 2 --> m3[2,2] ( c'est la composante de la matrice m3 située à la 2-ième ligne et 2-ème colonne )
.
.
.
Pour i fixé à n et pour j fixé à 1 --> m3[n,1] ( c'est la composante de la matrice m3 située à la n-ième ligne et 1-ème colonne )
Pour i fixé à n et pour j fixé à 2 --> m3[n,2] ( c'est la composante de la matrice m3 située à la n-ième ligne et 2-ème colonne )
.
.
.
Pour i fixé à n et pour j fixé à n --> m3[n,n] ( c'est la composante de la matrice m3 située à la n-ième ligne et n-ème colonne )

Donc, tu vois, les deux premiers boucles i et j de 1 à n servent à énumérer les composantes de la matrice m3 qui sont de la forme m3[i,j] avec: , .
Maintenant pour calculer, chaque composante m3[i,j] qu'on a énumerer à l'aide des deux premiers boucles , avec, , il faut une autre boucle k qui va de 1 à n.
En effet:
chaque composante m3[i,j] est la somme de m3[i,1]*m[1,j] et m3[i,2]*m[3,j] et ... et m3[i,n]*m[n,j]... c'est à dire la somme de n termes ( donc on a besoin d'une autre boucle k de 1 à n )..En pascal, celà se traduit par : m3[i,j]=0; et m3[i,j]=m3[i,j]+m3[i,k]*m3[k,j];

On initialise m3[i,j] à 0 au départ, c'est pour que dans la case memoire correspodante à la variable m3[i,j], il ait 0 et non pas autrechose au début de calcul... Parceque, il se peut que cette case comporte autre chose que 0, par exemple 2, ou un cafard lol ... , c'est l'ordinateur qui nous a alloué cette case.. il nous l'a alloué sans qu'il efface ce qu'il y'a à l'interieur...et nous on sait pas ce qu'il y'a dedans, c'est comme ça que notre prof nous l'a expliqué ...
j'espere que c'est clair maintenant !!

Joker62
Membre Transcendant
Messages: 5028
Enregistré le: 24 Déc 2006, 20:29

par Joker62 » 03 Aoû 2007, 02:34

Ce que voulait dire Flodelarab
C'est qu'à chaque itération de ta variable k
Le terme de ta matrice redevient 0, vu que tu le réinitialise

Tu devrais sortir m3[i,j] := 0; dans la bouche du dessus.

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 03 Aoû 2007, 02:43

ah maintenant je comprends:
Donc on écrit comme ça ( j'ai pas vu ça ):
for i:=1 to n do
for j:=1 to n do
m3[i,j]:=0;
for k:=1 to n do
m3[i,j]:=m3[i,j] + m3[i,k]*m3[k,j];

ça va maintenant ?!!

Flodelarab
Membre Légendaire
Messages: 6574
Enregistré le: 29 Juil 2006, 15:04

par Flodelarab » 03 Aoû 2007, 02:52

"Flodelarabe", tu n'as rien compris de ce que j't'ai expliqué plus haut

1) Sans guillemets ni faute d'orthographe, c'est aussi sympa.
2) Ce n'est pas que j'ai pas compris, c'est surtout que je n'ai pas lu. Moi, les explications de programmes ou les pseudo-codes, ça m'horripile plutôt.
3) Oui tu peux effectivement faire 3 boucles.
Mais j'attire ton attention sur le fait que 2 seulement sont nécessaires....
Imagine que pour chaque terme de la matrice i, tu calcules sa contribution dans la matrice M
seuls n² opértions sont nécessaires.


PS: Les matrices et le turbo pascal, je connais.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite