Up ! Mathematical - Matrice

Ce programme présente l'usage des matrices de matrices.

Le fichier source est ${UPS_HOME}/upsvtm/demo/${UPS_LANGUAGE}/matrice5.upl.

Cet exemple utilise les instructions de l'extension d'Up ! 5GL pour Up ! Mathematical.

Pour analyser le fichier source, UpsMat.upi doit être déclaré parmi les modules importés dans le fichier ${UPS_HOME}/ini/${UPS_USER}/upsp5l.ini.

Mode compilé

Commande de compilation

upscmp Source=matrice5.upl

Commande d'exécution

matrice5

Mode interprété

upssng Source=matrice5.upl

Fichier source

Source Composant "Exemple d'emploi du type Matrice" Version 4.0.0;

Procedure EcrireMatrice(Libelle : Caractere, M : Matrice[?,?] De Nul Ou Matrice[?,?] De Nul Ou Entier)
/****************************************************************************************************/
Variable
/******/
Debut
Ecran.Ecrire(Libelle);
Ecran.Ecrire(-------------");
Pour I=0 JusquA M.NbLignes-1 Faire Fin Pour
Fin Procedure

Procedure Appliquer1(M : Nul Ou Matrice[?,?] De Nul Ou Entier)
/************************************************************/
Variable
/******/
Debut
Ecran.Ecrire("Appliquer1");
Ecran.Ecrire("----------");
Pour I=0 JusquA M.NbLignes-1 Faire Fin Pour
Fin Procedure

Procedure Appliquer2(M1 : Nul Ou Matrice[?,?] De Nul Ou Entier, M2 : Nul Ou Matrice[?,?] De Nul Ou Entier)
********************************************************************************************************/
Variable
/******/
Debut
Ecran.Ecrire("Appliquer2");
Ecran.Ecrire("----------");
Pour I=0 JusquA M1.NbLignes-1 Faire Fin Pour
Fin Procedure

Fonction Appliquer3(M : Nul Ou Matrice[?,?] De Nul Ou Entier) Retourner Nul Ou Matrice[?,?] De Nul Ou Entier
/**********************************************************************************************************/
Debut
Retourner -M;
Fin Fonction

Fonction Appliquer4(M1 : Nul Ou Matrice[?,?] De Nul Ou Entier, M2 : Nul Ou Matrice[?,?] De Nul Ou Entier) Retourner Nul Ou Matrice[?,?] De Nul Ou Entier
/******************************************************************************************************************************************************/
Debut Retourner -(M1+M2);
Fin Fonction

Principal
/*******/
Variable
/******/
Debut M00[0,0]=0;
M00[0,1]=1;
M00[1,0]=2;
M00[1,1]=3;

M01[0,0]=2;
M01[0,1]=3;
M01[1,0]=4;
M01[1,1]=5;

M10[0,0]=4;
M10[0,1]=5;
M10[1,0]=6;
M10[1,1]=7;

M11[0,0]=6;
M11[0,1]=7;
M11[1,0]=8;
M11[1,1]=9;

N00[0,0]=2;
N00[0,1]=3;
N00[1,0]=4;
N00[1,1]=5;

N01[0,0]=4;
N01[0,1]=5;
N01[1,0]=6;
N01[1,1]=7;

N10[0,0]=6;
N10[0,1]=7;
N10[1,0]=8;
N10[1,1]=9;

N11[0,0]=8;
N11[0,1]=9;
N11[1,0]=0;
N11[1,1]=1;

A[0,0]=M00;
A[0,1]=M01;
A[1,0]=M10;
A[1,1]=M11;
EcrireMatrice("A", A);
B={{N00, N01}, {N10, N11}};
EcrireMatrice("B", B);
Ecran.Ecrire(");

C=A+B;
EcrireMatrice("A+B", C);
C=-A;
EcrireMatrice("-A", C);
C=A-B;
EcrireMatrice("A-B", C);
C=A*B;
EcrireMatrice("A*B", C);
C=A.Cloner();
EcrireMatrice("++C", ++C);
EcrireMatrice("--C", --C);
C=C^4;
EcrireMatrice("C^4", C);
Ecran.Ecrire(");

D=2;
C=D;
EcrireMatrice("C=2", C);
D=3;
C+=D;
EcrireMatrice("C+=3", C);
C-=D;
EcrireMatrice("C-=3", C);
C*=D;
EcrireMatrice("C/=3", C);
C^=4;
EcrireMatrice("C^=4", C);
Ecran.Ecrire(");

C=A.Copier(0, 0, 2, 2);
EcrireMatrice("Copier()", C);
D=0;
C=D;
C.Coller(0, 0, A);
EcrireMatrice("Coller()", C);
D[0,0]=10;
D[0,1]=11;
D[1,0]=12;
D[1,1]=13;
C=A.InsererColonne(1, D);
EcrireMatrice("InsererColonne()", C);
C=A.InsererLigne(1, D);
EcrireMatrice("InsererLigne()", C);
C=A.SupprimerColonne(1);
EcrireMatrice("SupprimerColonne()", C);
C=A.SupprimerLigne(1);
EcrireMatrice("SupprimerLigne()", C);
C=A.Copier(0, 0, 2, 2);
C.PermuterColonnes(0, 1);
EcrireMatrice("PermuterColonnes()", C);
C=A.Copier(0, 0, 2, 2);
C.PermuterLignes(0, 1);
EcrireMatrice("PermuterLignes()", C);
C=A.Copier(0, 0, 2, 2);
C.Transposer();
EcrireMatrice("Transposer()", C);
C=A.Copier(0, 0, 2, 2);
C.AppliquerSymetrieVerticale();
EcrireMatrice("AppliquerSymetrieVerticale()", C);
C=A.Copier(0, 0, 2, 2);
C.AppliquerSymetrieHorizontale();
EcrireMatrice("AppliquerSymetrieHorizontale()", C);
Si C.EstDiagonale() Alors Sinon Fin Si
Si C.EstTriangulaireSuperieure() Alors Sinon Fin Si
Si C.EstTriangulaireInferieure() Alors Sinon Fin Si
Si C.EstSymetrique() Alors Sinon Fin Si
Si C.EstAntiSymetrique() Alors Sinon Fin Si
Ecran.Ecrire(");

A.Appliquer(Appliquer1);
A.Appliquer(Appliquer2, B);
C=A.Appliquer(Appliquer3);
EcrireMatrice("Appliquer3()", C);
C=A.Appliquer(Appliquer4, B);
EcrireMatrice("Appliquer4()", C);
Ecran.Ecrire(");
Fin Principal

Résultat de l'exécution

A ------------- [[{{0,1},; {{2,3},] {2,3}} {4,5}} [{{4,5},; {{6,7},]] {6,7}} {8,9}} B ------------- [[{{2,3},; {{4,5},] {4,5}} {6,7}} [{{6,7},; {{8,9},]] {8,9}} {0,1}} A+B ------------- [[{{2,4},; {{6,8},] {6,8}} {10,12}} [{{10,12},; {{14,16},]] {14,16}} {8,10}} -A ------------- [[{{0,-1},; {{-2,-3},] {-2,-3}} {-4,-5}} [{{-4,-5},; {{-6,-7},]] {-6,-7}} {-8,-9}} A-B ------------- [[{{-2,-2},; {{-2,-2},] {-2,-2}} {-2,-2}} [{{-2,-2},; {{-2,-2},]] {-2,-2}} {8,8}} A*B ------------- [[{{40,46},; {{22,28},] {80,94}} {58,72}} [{{120,142},; {{94,116},]] {160,190}} {130,160}} ++C ------------- [[{{1,2},; {{3,4},] {3,4}} {5,6}} [{{5,6},; {{7,8},]] {7,8}} {9,10}} --C ------------- [[{{0,1},; {{2,3},] {2,3}} {4,5}} [{{4,5},; {{6,7},]] {6,7}} {8,9}} C^4 ------------- [[{{10.192,13.096},; {{16.000,18.904},] {20.368,26.184}} {32.000,37.816}} [{{30.544,39.272},; {{48.000,56.728},]] {40.720,52.360}} {64.000,75.640}} C=2 ------------- [[{{2,2},; {{2,2},] {2,2}} {2,2}} [{{2,2},; {{2,2},]] {2,2}} {2,2}} C+=3 ------------- [[{{5,5},; {{5,5},] {5,5}} {5,5}} [{{5,5},; {{5,5},]] {5,5}} {5,5}} C-=3 ------------- [[{{2,2},; {{2,2},] {2,2}} {2,2}} [{{2,2},; {{2,2},]] {2,2}} {2,2}} C/=3 ------------- [[{{12,12},; {{12,12},] {12,12}} {12,12}} [{{12,12},; {{12,12},]] {12,12}} {12,12}} C^=4 ------------- [[{{1.327.104,1.327.104},; {{1.327.104,1.327.104},] {1.327.104,1.327.104}} {1.327.104,1.327.104}} [{{1.327.104,1.327.104},; {{1.327.104,1.327.104},]] {1.327.104,1.327.104}} {1.327.104,1.327.104}} Copier() ------------- [[{{0,1},; {{2,3},] {2,3}} {4,5}} [{{4,5},; {{6,7},]] {6,7}} {8,9}} Coller() ------------- [[{{0,1},; {{2,3},] {2,3}} {4,5}} [{{4,5},; {{6,7},]] {6,7}} {8,9}} InsererColonne() ------------- [[{{0,1},; {{0,0},; {{2,3},] {2,3}} {0,0}} {4,5}} [{{4,5},; {{10,11},; {{6,7},]] {6,7}} {12,13}} {8,9}} InsererLigne() ------------- [[{{0,1},; {{2,3},] {2,3}} {4,5}} [{{0,0},; {{10,11},] {0,0}} {12,13}} [{{4,5},; {{6,7},]] {6,7}} {8,9}} SupprimerColonne() ------------- [[{{0,1},] {2,3}} [{{4,5},]] {6,7}} SupprimerLigne() ------------- [[{{0,1},; {{2,3},]] {2,3}} {4,5}} PermuterColonnes() ------------- [[{{2,3},; {{0,1},] {4,5}} {2,3}} [{{6,7},; {{4,5},]] {8,9}} {6,7}} PermuterLignes() ------------- [[{{4,5},; {{6,7},] {6,7}} {8,9}} [{{0,1},; {{2,3},]] {2,3}} {4,5}} Transposer() ------------- [[{{0,1},; {{4,5},] {2,3}} {6,7}} [{{2,3},; {{6,7},]] {4,5}} {8,9}} AppliquerSymetrieVerticale() ------------- [[{{2,3},; {{0,1},] {4,5}} {2,3}} [{{6,7},; {{4,5},]] {8,9}} {6,7}} AppliquerSymetrieHorizontale() ------------- [[{{4,5},; {{6,7},] {6,7}} {8,9}} [{{0,1},; {{2,3},]] {2,3}} {4,5}} Non EstDiagonale Non EstTriangulaireSuperieure Non EstTriangulaireInferieure Non EstSymetrique Non EstAntiSymetrique Appliquer1 ---------- {{0, 1} {2, 3}} Appliquer1 ---------- {{2, 3} {4, 5}} Appliquer1 ---------- {{4, 5} {6, 7}} Appliquer1 ---------- {{6, 7} {8, 9}} Appliquer2 ---------- {{0+2, 1+3} {2+4, 3+5}} Appliquer2 ---------- {{2+4, 3+5} {4+6, 5+7}} Appliquer2 ---------- {{4+6, 5+7} {6+8, 7+9}} Appliquer2 ---------- {{6+8, 7+9} {8+0, 9+1}} Appliquer3() ------------- [[{{0,-1},; {{-2,-3},] {-2,-3}} {-4,-5}} [{{-4,-5},; {{-6,-7},]] {-6,-7}} {-8,-9}} Appliquer4() ------------- [[{{-2,-4},; {{-6,-8},] {-6,-8}} {-10,-12}} [{{-10,-12},; {{-14,-16},]] {-14,-16}} {-8,-10}}