manu671
Messages postés7Date d'inscriptionmercredi 14 décembre 2005StatutMembreDernière intervention21 décembre 2005 20 déc. 2005 à 16:19
salut!
moi je suis de paris!
il s'agit dun petit projet sur des matrices !
jai déjà quelque procédures!
mais il faut réalsier le visuel sur windows!
peux tu menvoyer ton mail?!jtenverrai plus de détail!
merci!
bye
exyacc
Messages postés163Date d'inscriptiondimanche 20 octobre 2002StatutMembreDernière intervention31 juillet 2008 20 déc. 2005 à 17:24
ben ecrit directement le detail de ce que tu veux ici, on verra
apres... les matrices, ca date....diagonaliser une matrice pour voir si
une grammaire est valide...beurk mauvis souvenir... lol
manu671
Messages postés7Date d'inscriptionmercredi 14 décembre 2005StatutMembreDernière intervention21 décembre 2005 20 déc. 2005 à 17:29
on fai commen pour envoyer un fichier?!
ne tinkiète pas ya aucun calcul à faire jai déja toutes les procédures!
tu ve pa me donner tn msn?! ça sera plu simple!!
stp........
merci davance!
manu671
Messages postés7Date d'inscriptionmercredi 14 décembre 2005StatutMembreDernière intervention21 décembre 2005 20 déc. 2005 à 20:05
Projet : un logiciel de calcul matriciel sous windows.
Ce projet reprend l'exercice donné en début d'année, avec trois différences importantes :
-
le logiciel fonctionne sous windows en mode graphique "normal" et non pas en mode console,
-
les matrices utilisées sont nommées : l'utilisateur peut désigner toute matrice par le nom qu'il souhaite, tous les noms utilisés doivent être distincts et le nombre des matrices utilisables n'est pas limité,
-
les matrices (nommées) peuvent être sauvegardées dans des fichiers et restaurées.
Les matrices gérées sont des matrices rectangulaires m × n, avec m, n ∈Á* ; les matrices manipulées peuvent avoir des dimensions différentes les unes des autres (la cohérence des dimensions est vérifiée pour les diverses opérations). Les nombres réels pouvant intervenir (comme par exemple dans le produit par un scalaire) pourront être considérés comme des matrices 1 × 1. On utilisera le type réel double.
L'application comporte
-
une fiche principale, toujours affichée,
-
des fiches pour le stockage et l'affichage des valeurs d'une matrice ; ces fiches sont du même type et créées à l'exécution à volonté, et peuvent être affichées ou cachées également à volonté (plusieurs fiches peuvent être affichées en même temps),
-
une fiche spécifique pour l'entrée d'une matrice, qui est visible seulement lors des entrées,
-
une fiche spécifique pour la sauvegarde, qui est visible seulement lors des sauvegardes,
-
une fiche spécifique pour la restauration, qui est visible seulement lors des restauratons.
Dans la fiche principale, on trouvera
-
un menu permettant de choisir une opération (y compris l'entrée, l'affichage, la suppression, la sauvegarde, la restauration),
-
un composant stringGrid avec 3 colonnes et une ligne ; chaque ligne correspond à une matrice et indique le nom et les dimensions de la matrice ; toutes les matrices mémorisées y sont répertoriées ; les noms sont rangés dans l'ordre alphabétique,
-
un label indiquant l'opération en cours,
-
trois éditeurs permettant d'indiquer les noms des matrices utilisées pour l'opération en cours (pouvant être rendus en grisé lorsque l'opération nécessite moins de 3 paramètres ou résultat),
-
à coté de chaque éditeur, un bouton permettant d'entrer directement la matrice voulue par sélection dans le stringGrid,
-
à coté de chaque éditeur, un bouton provoquant un affichage "temporaire" des valeurs de la matrice indiquée,
-
un bouton de validation et un bouton d'annulation pour l'opération en cours
-
un champ permettant de retrouver la fiche associée à chaque matrice (de type array of tfMatrice, voir plus loin).
La commande d'affichage permet l'affichage de n'importe quelle matrice mémorisée, de façon "non temporaire".
Il peut y avoir plusieurs matrices affichées en même temps, mais pas deux fois la même. Chaque matrice est affichée dans une fiche séparée, de type tfMatrice (déclaré dans une unité ufMatrice). Ces fiches sont créées dynamiquement (constructeur tfMatrice.create) et perdurent durant toute la durée de vie de la matrice (c'est-à-dire jusqu'à la fin de l'exécutiondu programme, sauf suppression explicite). Elles stockent les valeurs des matrices, mais elles ne sont pas toujours affichées. Chaque fiche comporte :
-
un strigGrid sg pour l'affichage de la matrice, (ne permettant pas l'édition),
-
un champ nompour le nom de la matrice,
-
un champ valpour stocker les valeurs de la matrice (type : array of array of double),
-
le nom et les dimensions de la matrice sont affichés dans le titre de la fiche
Si une matrice est modifiée alors qu'elle est affichée, l'affichage est mis à jour. La fermeture de ces fiches se fait au gré de l'utilisateur au moyen de la commande de fermeture usuelle (×) . Pour les affichages "temporaires", la fermeture est également provoquée par l'annulation de l'opération ou par le passage à l'opération suivante.
Pour les opérandes, les matrices doivent exister auparavant. Pour les résultats, si le choix de la matrice est effectué en écrivant directement dans l'éditeur correspond à une matrice déjà existante, un message d'avertissement ("warning") d'écrasement des anciennes valeurs est affiché. Par contre, si le choix de la matrice résultat est effectué par sélection dans le stringGrid, il n'y a pas d'avertissement. L'opération doit être validée par un bouton pour être exécutée.
L'entrée d'une matrice se fait au moyen d'une fiche particulière, avec deux composants tEdit ou tSpin edit pour choisir les dimensions et un stringGrid permettant l'édition directe des valeurs.
Les opérations traitées sont celles du début de l'année, plus :
-
l'opposée,
-
la transposée,
-
l'inverse (quand il existe),
-
le déterminant.
La sauvegarde permet de sauver un sous-ensemble des matrices présentes (choisi par l'utilisateur). Elle peut être effectuée à tout moment dans des fichiers (également choisis par l'utilisateur). Chaque sauvegarde utilise trois fichiers de même nom, mais avec les extensions différentes .nom ,.dim, .val , les trois fichiers devant être situés dans un même répertoire.
L'opération de sauvegarde provoque l'ouverture de la fiche de sauvegarde, en mode modal (showModal). Ce mode oblige à fermer la fiche avant de passer à autre chose.
Cette fiche comporte
-
un menu, avec la commande choix fichier
-
deux composants tListBox, pour effectuer la sélection des matrices à sauvegarder ; le premier contient les noms des matrices disponibles (mais non encore sélectionnées), le deuxième contient les noms des matrices sélectionnées (initialement vide), les deux sont dans l'ordre alpabétique,
-
quatre boutons situés entre les deux listBox :
-'>': pour déplacer un nom de matrice du premier listBox dans le deuxième
-'>': pour déplacer toutes les matrices dans le deuxième listBox
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 21 déc. 2005 à 04:23
LOL
lit tes cours ... fait tes devoirs ...
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
manu671
Messages postés7Date d'inscriptionmercredi 14 décembre 2005StatutMembreDernière intervention21 décembre 2005 21 déc. 2005 à 17:54
unit uMatrice;
interface
uses sysUtils;
type tMat=array of array of real; //matrice
type EMatError=class(EMathError) end;
function sommeMat(const M1,M2:tMat):tMat;
function produitMat(const M1,M2:tMat):tMat;
function produitReelMat(const r:real;const M1:tMat):tMat;
function normeMat(const M:tMat):real;
function zeroMat(const nbL,nbC:integer):tMat;
function identiteMat(const dim:integer):tMat;
function egalMat(const M1,M2:tMat):boolean;
function copieMat(const M:tMat):tMat;
function randomMat(const nbL,nbC:integer; const min,max:real):tMat;
function exponentielleMat(const M:tMat; const epsilon:real):tMat;
implementation
function sommeMat(const M1,M2:tMat):tMat;
var nbL,nbC,numL,numC:integer;
begin
nbL:=length(M1);
nbC:=length(M1[0]);
if(length(M2)<>nbL) or (length(M2[0]) <>nbC) then
raise eMatError.Create('erreur : somme de matrices de dim. diff.');
setlength(result,nbL,nbC);
for numL:=0 to nbL-1 do for numC:=0 to nbC-1 do
result[numL,numC]:=M1[numL,numC] + M2[numL,numC];
end;
function produitMat(const M1,M2:tMat):tMat;
var nbL1,nbC1,nbL2,nbC2,numL,numC,i:integer;
var som:real;
begin
nbL1:=length(M1);
nbL2:=length(M2);
nbC1:=length(M1[0]);
nbC2:=length(M2[0]);
som:=0;
if(nbC1<>nbL2) then
raise eMatError.Create('erreur : produit de matrices de dim. diff.');
setlength(result,nbL1,nbC2);
for numL:=0 to nbL1-1 do
for numC:=0 to nbC2-1 do
begin
for i:=0 to nbC1-1 do som:= som+ (M1[numL,i] * M2[i,numC]);
result[numL,numC]:=som;
som:=0;
end;
end;
function produitReelMat(const r:real;const M1:tMat):tMat;
var nbL,nbC,numL,numC:integer;
begin
nbL:=length(M1);
nbC:=length(M1[0]);
setlength(result,nbL,nbC);
for numL:=0 to nbL-1 do for numC:=0 to nbC-1 do
result[numL,numC]:=r*M1[numL,numC];
end;
function normeMat(const M:tMat):real;
var nbL,nbC,numL,numC:integer;
begin
nbL:=length(M);
nbC:=length(M[0]);
result:=abs(M[0][0]);
for numL:=0 to nbL-1 do for numC:=0 to nbC-1 do
if resultnbL) or (length(M2[0]) <>nbC) then
raise eMatError.Create('erreur : matrices de dim. diff.');
for numL:=0 to nbL-1 do for numC:=0 to nbC-1 do
if M1[numL,numC] <> M2[numL,numC] then result:=False;
end;
function copieMat(const M:tMat):tMat;
var nbL,nbC,numL,numC:integer;
begin
nbL:=length(M);
nbC:=length(M[0]);
setlength(result,nbL,nbC);
for numL:=0 to nbL-1 do for numC:=0 to nbC-1 do
result[numL,numC]:=M[numL,numC];
end;
function randomMat(const nbL,nbC:integer; const min,max:real):tMat;
var numL,numC:integer;
begin
if(min>max) then
raise eMatError.Create('erreur : minimum superieur a maximum');
setlength(result,nbL,nbC);
for numL:=0 to nbL-1 do for numC:=0 to nbC-1 do
result[numL,numC]:=min + (max-min)*random;
end;
end.
juste montre moi un exemple pour une operation stp!!!!!!!!!!!!!