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.
upscmp Source=matrice5.upl
matrice5
upssng Source=matrice5.upl
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
/******/
I : Entier;
J : Entier;
Ligne1 : Nul Ou Caractere;
Ligne2 : Nul Ou Caractere;
M2 : Nul Ou Matrice[?,?] De Nul Ou Entier;
Debut
Ecran.Ecrire(Libelle);
Ecran.Ecrire(-------------");
Pour I=0 JusquA M.NbLignes-1 Faire
Si I==0 Alors
Ligne1="[[";
Sinon
Ligne1=" [";
Fin Si
Ligne2=" ";
Pour J=0 JusquA M.NbColonnes-1 Faire
Si J!=0 Alors
Ligne1+="; ";
Ligne2+=" ";
Fin Si
M2=M[I,J];
Ligne1+="{{"+Caractere(M2[0,0], "-&&&.&&&.&&&.&")+","+Caractere(M2[0,1], "-&&&.&&&.&&&.&")+"} ";
Ligne2+=" {"+Caractere(M2[1,0], "-&&&.&&&.&&&.&")+","+Caractere(M2[1,1], "-&&&.&&&.&&&.&")+"}}";
Fin Pour
Si I==M.NbLignes-1 Alors
Ligne1+="]]";
Sinon
Ligne1+="]";
Fin Si
Ecran.Ecrire(Ligne1);
Ecran.Ecrire(Ligne2);
Fin Pour
Fin Procedure
Procedure Appliquer1(M : Nul Ou Matrice[?,?] De Nul Ou Entier)
/************************************************************/
Variable
/******/
I : Entier;
J : Entier;
Ligne : Nul Ou Caractere;
Debut
Ecran.Ecrire("Appliquer1");
Ecran.Ecrire("----------");
Pour I=0 JusquA M.NbLignes-1 Faire
Si I==0 Alors
Ligne="{{";
Sinon
Ligne=" {";
Fin Si
Pour J=0 JusquA M.NbColonnes-1 Faire
Si J!=0 Alors
Ligne+=", ";
Fin Si
Ligne+=Caractere(M[I,J], "-&&&.&&&.&&&.&");
Fin Pour
Si I==M.NbLignes-1 Alors
Ligne+="}}";
Sinon
Ligne+="}";
Fin Si
Ecran.Ecrire(Ligne);
Fin Pour
Fin Procedure
Procedure Appliquer2(M1 : Nul Ou Matrice[?,?] De Nul Ou Entier, M2 : Nul Ou Matrice[?,?] De Nul Ou Entier)
********************************************************************************************************/
Variable
/******/
I : Entier;
J : Entier;
Ligne : Nul Ou Caractere;
Debut
Ecran.Ecrire("Appliquer2");
Ecran.Ecrire("----------");
Pour I=0 JusquA M1.NbLignes-1 Faire
Si I==0 Alors
Ligne="{{";
Sinon
Ligne=" {";
Fin Si
Pour J=0 JusquA M1.NbColonnes-1 Faire
Si J!=0 Alors
Ligne+=", ";
Fin Si
Ligne+=Caractere(M1[I,J], "-&&&.&&&.&&&.&")+"+"+Caractere(M2[I,J], "-&&&.&&&.&&&.&");
Fin Pour
Si I==M1.NbLignes-1 Alors
Ligne+="}}";
Sinon
Ligne+="}";
Fin Si
Ecran.Ecrire(Ligne);
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
/******/
M00 : Matrice[2,2] De Nul Ou Entier;
M01 : Matrice[2,2] De Nul Ou Entier;
M10 : Matrice[2,2] De Nul Ou Entier;
M11 : Matrice[2,2] De Nul Ou Entier;
N00 : Matrice[2,2] De Nul Ou Entier;
N01 : Matrice[2,2] De Nul Ou Entier;
N10 : Matrice[2,2] De Nul Ou Entier;
N11 : Matrice[2,2] De Nul Ou Entier;
A : Matrice[2,2] De Nul Ou Matrice[2,2] De Nul Ou Entier;
B : Matrice[2,2] De Nul Ou Matrice[2,2] De Nul Ou Entier;
C : Nul Ou Matrice[?,?] De Nul Ou Matrice[2,2] De Nul Ou Entier;
D : Matrice[2,2] De Nul Ou Entier;
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
Ecran.Ecrire("EstDiagonale");
Sinon
Ecran.Ecrire("Non EstDiagonale");
Fin Si
Si C.EstTriangulaireSuperieure() Alors
Ecran.Ecrire("EstTriangulaireSuperieure");
Sinon
Ecran.Ecrire("Non EstTriangulaireSuperieure");
Fin Si
Si C.EstTriangulaireInferieure() Alors
Ecran.Ecrire("EstTriangulaireInferieure");
Sinon
Ecran.Ecrire("Non EstTriangulaireInferieure");
Fin Si
Si C.EstSymetrique() Alors
Ecran.Ecrire("EstSymetrique");
Sinon
Ecran.Ecrire("Non EstSymetrique");
Fin Si
Si C.EstAntiSymetrique() Alors
Ecran.Ecrire("EstAntiSymetrique");
Sinon
Ecran.Ecrire("Non EstAntiSymetrique");
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