Texte incomprehensible !!!

(Cliquez-ici pour accéder à la version originale de cette discussion avec couleurs et images)







Posted by: barbu23

Bonsoir:
J'ai du mal à comprendre le texte suivant, c'est pourquoi je viens solliciter votre aide .. !
le voiçi ce texte:
Les structures statiques sont toutes caractérisées par une taille finie, comme par exemple:
Les scalaires : entiers, réels, intervalles, énuméré ...etc
Les structures: tableaux, les chaînes de caractères et les enregistrements.
Les structures dynamiques sont caractérisées par une taille infinie, comme par exemple:
Fichiers, listes chaînees, les arbres, les graphes ...etc.
Une structures dynamique est donc une structure dont la taille (le nombre de composants ) peut varier en cours d'éxecution
On distingue deux types de structures dynamiques: les structures récursives et non récursives.
Définition d'une structure récursive:
Une structure récursive est une structure ( en général basée sur un enregistrement dont la définition comporte une référence à elle-même comme les listes chaînées et les arbres. Pour la plupart des langages procéduraux, ces references se font à l'aide du type pointeur
On distingue également deux autres types de structures dynamiques : Les structures linéaires et non-lineaires.
Définition d'une structure récursive linéaire:
Une structure récursive qui comporte uniquement une seule reference dans sa définition est une structure linéaire comme les listes chaînées.
Liste=(Element --> Liste).Une seule réference pour définir une liste chaînée.
Définition d'une structure récursive non-linéaire:
Une structure récursive qui fait plus d'une référence pour sa définition est une structure non-linéaire comme les arbres et les graphes.
Arbre = (Arbre binaire <-- noeud --> Arbre binaire ). 2 références pour définir un arbre binaire.
Toutes les structures qui ne sont pas récursives sont des structures non-linéaires, comme les fichiers
Question:
Voiçi donc le texte, et les passages que j'ai pas compris sont en rouge.
Ce texte est tiré du cours de l'informatique de L2 ( il y'a deux ans) de ma fac..j'ai preque tout oublié de ce cours !!
Merçi d'avance !!



Posted by: barbu23

et le language concerné, c'est : Pascal.



Posted by: Joker62

Ben c'est des définitions, y'a rien à comprendre



Posted by: Dominique Lefebvre

Citation:
Posté par barbu23
et le language concerné, c'est : Pascal.


Le langage importe peu! Les définitions que tu cites concernent l'algorithmique, qui est vraie qq soit le langage, heureusement...

Comme ledit Joker, ce sont des définitions : donc tu les apprends d'abord, en essayant de comprendre ce que cela signifie (de préférence avec des petits dessins!).
Les pointeurs et la récursivité peuvent poser qq problèmes assez superficiel, pour le reste c'est assez basique non?



Posted by: GzD

Dans la grande majorité des cas il suffit de parler français pour comprendre de quoi il s'agit.
Après si tu ne comprends toujours pas il faudrait penser à arrêter d'être feignant monsieur.



Posted by: barbu23

Bonjour:
Pouvez vous me dire pourquoi le programme suivant ne marche pas ?!
Le voiçi ce programme:
$\ \hspace{100cm}  ====================== $
program colorier;
uses wincrt;
type couleur=(bleu,vert,jaune,rouge,gris);
var coul1,coul2:couleur;
begin
coul1:=bleu;
coul2:=succ(coul1);
coul1:=pred(coul2);
writeln(coul1,coul2);
end.
$\ \hspace{100cm}  ====================== $
Quant je compile, le programme affiche une erreur...L'erreur est ,selon le programme : "Error64 : Cannot Read or Write variables of this type"..
Comment le corriger ?!
Merçi d'avance !!



Posted by: anima

Citation:
Posté par barbu23
Bonjour:
Pouvez vous me dire pourquoi le programme suivant ne marche pas ?!
Le voiçi ce programme:
$\ \hspace{100cm}  ====================== $
program colorier;
uses wincrt;
type couleur=(bleu,vert,jaune,rouge,gris);
var coul1,coul2:couleur;
begin
coul1:=bleu;

N'ayant jamais fait de pascal, je ne peux qu'hasarder, mais ta "couleur" est un tableau non-associatif, non?



Posted by: barbu23

le problème, d'après le programme, c'est au niveau de :
writeln(coul1,coul2);
et plus précisement, à l'endroit | dans : writeln(coul1 | ,coul2);
Pour être plus clair !
merçi "GzD", je suis feignant !!



Posted by: Joker62

Bé c'est simple, cannot read or write variable of this types

On ne peut pas écrire une variable de ce type
Tu as définit un nouveau type couleur que l'on ne peut pas écrire puisqu'après tout tu sais pas ce que ça vaut toi même !

Donc tu dois faire un truc dans le genre :

procedure AfficheCouleur ( Col : Couleur ) ;
Begin
case Col of
bleu : writeln('bleu');
rouge : writeln('rouge');
...
END;
END;



Posted by: barbu23

"anima" bonjour :
je ne sais pas... c'est quoi un tableau non associatif...?
Ici ce n'est pas un tableau, c'est un type comme integer, real.. etc .
Par exemple, une variable x de "type" : integer prend les valeurs 1,2,..., etc ...Dans notre cas ici, une variable coul1 de "type" : couleur, prend les valeurs : bleu, vert, jaune, rouge, gris !!!



Posted by: barbu23

Joker, j'ai pas trop compris ce que tu veux dire ...
Citation:
Tu as définit un nouveau type couleur que l'on ne peut pas écrire puisqu'après tout tu sais pas ce que ça vaut toi même !

non, je sais ce que ça vaut, ça vaut : soit bleu, soit jaune, soit rouge, soit gris ...tu voulais dire qu'il faut les ecrire comme ça: couleur = ('bleu','vert', 'jaune','rouge','gris',)...pour qu'il deviennent des constantes au lieu de : couleur (bleu,vert,jaune,rouge,gris);
Enfin, je ne sais pas, c'est quoi le role de ta procedure exactement ?!



Posted by: Joker62

Ben la meilleure façon de le savoir c'est de la tester... :)

La fonction WriteLn ne connait pas le type couleur puisque c'est toi qui l'a définie, donc y'a aucune raison pour que ça marche.

La fonction que je t'ai donnée marche comme ça :

On a une couleur en argument
Et selon la couleur
On affiche un texte

Si c'est du bleu, on affiche 'bleu'
Si c'est du vert, on affiche 'vert'
Etc...



Posted by: barbu23

Joker, ça marche pas quant je compile :
j'ai tapé le code source suivant:
Citation:
program colorier;
uses wincrt;
type couleur=(bleur,vert,jaune,rouge,gris);
procedure affich_coul(col : couleur);
begin
case col of
bleu : writeln('bleu');
vert : writelnt('vert');
jaune : writeln('jaune');
rouge : writeln('rouge');
gris: writeln('gris');
end;
var coul1,coul2: couleur;
begin
coul1 :=bleu;
coul2 := succ(coul1);
coul1 := pred(coul2);
procedure affich_coul;
end.

Joker, tu peux voir ou est l'erreur ?
Merçi d'avance !!
l'erreur c'est au niveau de cette ligne : "|"var coul1,coul2: couleur;
le programme affiche comme erreur : Error113 : Error in statement.
Merçi d'avance !!



Posted by: Joker62

Déjà il manque le End; de ta procédure, le premier étant pour le case of

Ensuite, il manque un argument dans l'appel de ta procédure, j'ai pas de compilo sous la main, j'ai arrêter le pascal depuis bien longtemp mais teste ça :

Citation:
Posté par Pascal
PROGRAM Colors;
USES crt;
TYPE couleur=(bleu,vert,jaune,rouge,gris);

VAR Coul1, Coul2 : couleur;

PROCEDURE Affiche_Couleur ( Col : Couleur ) ;
BEGIN
...CASE Col OF
......bleu : Writeln('Bleu');
......vert : Writeln('Vert');
......jaune : Writeln('Jaune');
......rouge : Writeln('Rouge);
......gris : Writeln('Gris');
...END;
END;

BEGIN
...Coul1 = bleu;
...Coul2 = Succ(Coul1);
...Affiche_Couleur(Coul1);
...Affiche_Couleur(Coul1);
END.


Les ... c'est juste pour l'indentation !
J'ai toujours eu horreur du fouilli !



Posted by: barbu23

Joker !
Mais j'ai une autre question pour toi que j'ai pas compris , tu as mis deux "end", à la fin de procédure...Il y'a un seul "begin" , alors tu dois mettre un seul "end" et non pas deux n'est ce pas.., et pourtant ça marche quant je compile...?!donc tu as raison, mais je comprends pas pourquoi !!!



Posted by: barbu23

Mes questions sont hyperstupides



Posted by: Joker62

J'ai utilisé un

CASE ... OF


END;

En fait, c'est une structure conditionnel cachée...
ça représente :

SELON QUE ... VAUT :
ça : Alors faire ça;
ceci : alors faire ceci:
FIN;

va sur www.developpez.com tu y retrouveras tout ce qui faut ;)
N'est stupide que la stupidité comme dirait un ami acteur



Posted by: barbu23

Merçi beaucoup !



Posted by: Flodelarab

Citation:
Posté par Joker62
Bé c'est simple, cannot read or write variable of this types

On ne peut pas écrire une variable de ce type

WAaaaaaaaaaaaaaa

T'es trop fort en informatique, Joker

Déjà que notre ami ne comprend pas le français, tu t'attendais pas à ce qu'il comprenne l'anglais






Posted by: Joker62

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



Posted by: Flodelarab

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

Chacun ses défaults.



Posted by: Joker62

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



Posted by: barbu23





Posted by: barbu23

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 !!



Posted by: barbu23

Pour celle qui calcule l'addition de deux matrices quelconques, la voiçi ,c'est simple :
Citation:
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 !!



Posted by: Joker62

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 :)



Posted by: Flodelarab

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.



Posted by: barbu23

Je crois que j'l'ai trouvé:
D'abord, pour la formule mathématique calculant le produit de deux matrices quelconques, telle que :
$\<br />
\begin{pmatrix} <br />
a_{11}&amp;a_{12}&amp;\cdots&amp;a_{1n} \\ <br />
a_{21}&amp;a_{22}&amp;\cdots&amp;a_{2n} \\<br />
\vdots &amp;\vdots&amp;\ddots&amp;\vdots \\<br />
a_{n1}&amp;a_{n2}&amp;\cdots&amp;a_{nn}<br />
\end{pmatrix} \times \begin{pmatrix} <br />
b_{11}&amp;b_{12}&amp;\cdots&amp;b_{1n} \\ <br />
b_{21}&amp;b_{22}&amp;\cdots&amp;b_{2n} \\<br />
\vdots &amp;\vdots&amp;\ddots&amp;\vdots \\<br />
b_{n1}&amp;b_{n2}&amp;\cdots&amp;b_{nn}<br />
\end{pmatrix} = \begin{pmatrix} <br />
c_{11}&amp;c_{12}&amp;\cdots&amp;c_{1n} \\ <br />
c_{21}&amp;c_{22}&amp;\cdots&amp;c_{2n} \\<br />
\vdots &amp;\vdots&amp;\ddots&amp;\vdots \\<br />
c_{n1}&amp;c_{n2}&amp;\cdots&amp;c_{nn}<br />
\end{pmatrix}$
est : $\ c_{ij} = \displaystyle \sum_{k=1}^{n} a_{ik}.b_{kj} $.
En Pascal, cela se traduit par:
Citation:
for i:=1 to n do
$ \hspace{25cm} $ for j:=1 to n do
$ \hspace{50cm} $ for k:=1 to n do
$ \hspace{60cm} $ m3[i,j] = m1[i,k] * m2[k,j]

N'est ce pas Joker ?!



Posted by: barbu23

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 $\ i = 1 $, on fixe ensuite $\ j = 1 $, et on calcule $\ m3[1,1] $ en parcourant $\ k $ de $\ 1 $ à $\ n $ ( for $\ k=1 $ to $\ n $ do ) ..
On retourne au début de la boucle .. on fixe $\ i=1 $, et on fixe ensuite $\ j = 2 $, et on calcule $\ m3[1,2] $ en parcourant $\ k $ de $\ 1 $ à $\ n $ ( for $\ k=1 $ to $\ n $ do ) ...
.
.
.
On retourne au début de la boucle..., on fixe $\ i=1 $, on fixe ensuite $\ j=n $, et on calcule $\ m3[1,n] $ en parcourant $\ k $ de $\ 1 $ à $\ n $ ( for $\ k=1 $ to $\ n $ do ) ..
On retourne au début de la boucle ...mais cette fois çi, on fixe $\ j = 2 $ et on calcule $\ m[2,1] $ en parcourant $\ k $ de $\ 1 $ à $\ n $..
.
.
.
et ainsi de suite jusqu'à arriver à $\ m3[n,n] $... on la calcule en parcourant $\ k $ de $\ 1 $ à $\ n $ ( for $\ k=1 $ to $\ n $ do ).
C'est facile n'est pas.. Ensuite on quitte la boucle et on termine le reste du programme...



Posted by: Dominique Lefebvre

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!



Posted by: barbu23





Posted by: barbu23

Ah non, il y'a une petite erreur :
voiçi la correction, maintenant :
Citation:
for i:=1 to n do
$\ \hspace{15cm} $ for j:=1 to n do
$\ \hspace{30cm} $ for k:=1 to n do
$\ \hspace{35cm} $ m3[i,j]:=0
$\ \hspace{35cm} $ m3[i,j]:= m3[i,j] + m1[i,k]*m2[k,j]




Posted by: Joker62

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



Posted by: barbu23

D'accord Joker, merçi !
Je mets ça en procédure, ça devient:
Citation:
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
$\ \hspace{25cm} $ for j:=1 to n do
$\ \hspace{30cm} $ for k:=1 to n do
$\ \hspace{30cm} $ begin
$\ \hspace{35cm} $ m3[i,j] := 0;
$\ \hspace{35cm} $ m3[i,j] := m3[i,j] + m1[i,k] * m2[k,j];
$\ \hspace{30cm} $ end;
end;




Posted by: Flodelarab

Citation:
Posté par Dominique Lefebvre
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.

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

Citation:
Posté par Joker
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 ça sert a rien.



Posted by: Flodelarab

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.



Posted by: barbu23

"Flodelarabe", tu n'as rien compris de ce que j't'ai expliqué plus haut ..
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: $\ 1 \leq i,j \leq n $, .
Maintenant pour calculer, chaque composante m3[i,j] qu'on a énumerer à l'aide des deux premiers boucles , avec, $\ 1 \leq i,j \leq n $, 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 !!



Posted by: Joker62

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.



Posted by: barbu23

ah maintenant je comprends:
Donc on écrit comme ça ( j'ai pas vu ça ):
Citation:
for i:=1 to n do
$\ \hspace{25cm} $ for j:=1 to n do
$\ \hspace{30cm} $ m3[i,j]:=0;
$\ \hspace{35cm} $ for k:=1 to n do
$\ \hspace{40cm} $ m3[i,j]:=m3[i,j] + m3[i,k]*m3[k,j];

ça va maintenant ?!!



Posted by: Flodelarab

Citation:
"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.



Posted by: Dominique Lefebvre

Citation:
Posté par Flodelarab
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.



Oh là, je n'allais pas si loin, moi, j'en restais aux électrons qui bougent sans préciser pourquoi ni comment!
Si tu veux aller par là, la vitesse des électrons de conduction dépend du milieu et des interfaces...
Mais bon! le problème n'est pas là mais dans la confusion apparente entre l'ordinateur et le programme. Et d'ailleurs, est-ce aussi simple?



Posted by: Dominique Lefebvre

Et je vois une autre petite faille à ton prog, barbu: il ne fonctionne que pour des matrices carrées...

Je t'en propose un autre (du moins la trame, à toi de finaliser), avec 3 boucles...

VAR a: ARRAY[1..l, 1..m] OF REAL;
b: ARRAY[1..m, 1..n] OF REAL;
c: ARRAY[1..l, 1..n] OF REAL;

FOR i := 1 TO l DO
FOR j := 1 TO n DO
sum := 0;
BEGIN
FOR k := 1 TO m DO
sum := sum + a[i,k]*b[k,j];
c[i,j] := sum;
END;

Excuse moi pour la forme, mon Pascal est un peu rouillé...



Posted by: Flodelarab

Oui les begin/end sont mal placés.
Mais c'est pas grave.
Par contre, bonne idée pour la taille.
Enfin, pour le calcul proprement dit, tu n'as pas l'impression de faire pareil avec 1 instruction et 1 variable de plus ?
A quoi sert la variable "sum" ?



Posted by: Dominique Lefebvre

Citation:
Posté par Flodelarab
Oui les begin/end sont mal placés.
Mais c'est pas grave.
Par contre, bonne idée pour la taille.
Enfin, pour le calcul proprement dit, tu n'as pas l'impression de faire pareil avec 1 instruction et 1 variable de plus ?
A quoi sert la variable "sum" ?


Je te l'accorde, c'est du pascal scolaire: le sum est là pour expliquer la démarche...
Quant au BEGIN/END, ils m'ont l'air bien placés, du moins il m'a l'air bien placé, il n'y en a qu'un... regarde bien les ;

PS : tu aurais pu me dire que le sum := 0; était mal placé ...



Posted by: Dominique Lefebvre

Donc en le refaisant un peu plus proprement :

VAR a: ARRAY[1..l, 1..m] OF REAL;
b: ARRAY[1..m, 1..n] OF REAL;
c: ARRAY[1..l, 1..n] OF REAL;

FOR i := 1 TO l DO
FOR j := 1 TO n DO
BEGIN
FOR k := 1 TO m DO
c[i,j] := c[i,j] + a[i,k]*b[k,j];
END;
ça te va mieux?

PS : il ne garde pas les indentations ce foutu éditeur!



Posted by: Flodelarab

Tu as carrément viré l'initialisation ?
Alors du coup, le begin/end ne sert a rien.


J'aurais aimé que vous vous intéressassiez à une solution en 2 boucles.
Car si n=m=l=1000000000, je ne veux pas être là pour attendre la fin de la multiplication.

Code:
Si tu veux mettre du code: Si tu veux retrouver ton indentation: Alors il faut mettre une balise CODE
Ceci est l'indentation Python :), mon nouveau jouet, source d'émerveillement programmatoire fourni et inattendu



Posted by: Dominique Lefebvre

Citation:
Posté par Flodelarab
Tu as carrément viré l'initialisation ?
Alors du coup, le begin/end ne sert a rien.


J'aurais aimé que vous vous intéressassiez à une solution en 2 boucles.
Car si n=m=l=1000000000, je ne veux pas être là pour attendre la fin de la multiplication.

Code:
Si tu veux mettre du code: Si tu veux retrouver ton indentation: Alors il faut mettre une balise CODE
Ceci est l'indentation Python :), mon nouveau jouet, source d'émerveillement programmatoire fourni et inattendu


La balise CODE mais c'est bien sur!!
Mon compilo PASCAL initialise les données à zéro lors de la déclaration (c'est un compilo HP).

C'est curieux, je regarde aussi Python (un récent article dans IEEE Computing in S&E...) Et effectivement, ça ma l'air pas mal...



Posted by: Dominique Lefebvre

Si l'on prend le cas général du produit de deux matrices quelconques (pas forcément carrées ni creuses), le produit se fait avec un calcul d'ordre n^3 (ou n^log8 avec log en base 2).

Il y a bien l'algo de Strassen qui diminue l'ordre à n^log7 (toujours log base 2), mais je ne vois pas bien comment diminuer plus l'ordre du calcul!

Tu as une nouvelle classe d'algo, Flo?

Ceci dit, moi je m'en fiche, je demande à LINPACK de me faire ça: il le fait mieux que moi...



Posted by: Flodelarab

J'ai bien fait d'insister. Car pour le coup, je disais une grosse bêtise.

En essayant d'écrire la boucle, je me suis rendu compte que j'avais démonté une boucle, mais que je faisais bien 3 parcours comme tout le monde.



Posted by: cesar

joker t'a donné la bonne reponse et la solution: la commande writeln ne peut pas écrire autre chose qu'un des types predéfinis....



Posted by: Dominique Lefebvre

Citation:
Posté par Flodelarab
J'ai bien fait d'insister. Car pour le coup, je disais une grosse bêtise.

En essayant d'écrire la boucle, je me suis rendu compte que j'avais démonté une boucle, mais que je faisais bien 3 parcours comme tout le monde.


C'est bien dommage Flo, on se serait fait des c... en or!

Ceci dit, tu sais sans doute qu'on utilise toujours des algo particuliers pour chaque typologie de matrice, et que heureusement, la plupart du temps les matrices ont toujours une particularité intéressante qui permet de gagner un peu de temps de calcul (creuses, diagonales, symétriques, etc...).

Dans la vraie vie, on ne s'amuse d'ailleurs pas à coder ce genre de chose! Les librairies de calcul du commerce font ça très bien. Et à ma grande honte, j'avoue ne pas savoir et me ficher éperdument de la manière dont elles procèdent... Il y a quand même plus amusant et intéressant dans la vie!



Posted by: barbu23

Bonsoir:
Est ce que quelqu'un peut m'expliquer ce qu'on entend par structure de taille finie et structure de taille infinie...
Je comprends pas le sens de "taille"... Quelqu'un peut me clarifier ce point et son rapport avec les cases memoires de l'ordinateur ...
Merçi infiniment !!!



Posted by: Joker62

Je ne connais pas ces termes mais j'imagine quand même

STRUCT Finie
{
a : integer;
c : caracter;
}

STRUCT Infinie
{
a : interger
p : ^infinie; // pointeur vers une structure infinie
}

Enfin j'ai perdu mes notions de Pascal mais t'as compris
C'est une espèce de liste chainée quoi



Posted by: Flodelarab

Citation:
Posté par Joker62
Je ne connais pas ces termes mais j'imagine quand même

STRUCT Finie
{
a : integer;
c : caracter;
}

STRUCT Infinie
{
a : interger
p : ^infinie; // pointeur vers une structure infinie
}

Enfin j'ai perdu mes notions de Pascal mais t'as compris
C'est une espèce de liste chainée quoi

C'est pas faux (même plutôt juste) mais ça ne répond pas entièrement à la question.

D'un point de vue case mémoire, on peut réserver une bonne fois pour toute la place pour un objet de taille fini. Pour un objet de taille infini, on prend et on libère les cases mémoires au fur et à mesure.
Attention! C'est justement là qu'il faut séparer "déclaration" et "Instanciation".
Dans un objet de taille fini, on peut réserver tout de suite la place et une bonne fois pour toute. La déclaration entraine l'instanciation (à vérifier selon le langage). Dans un objet de taille infini, tu devras déclarer ta variable PUIS explicitement réserver la mémoire pour avoir l'instance.

Voila pkoi on parle de statique et dynamique.

ps: Moi aussi le terme de "taille infinie" me fait tiquer.
Il est intéressant à ce propos de voir que:
l'infini est un concept mathématique,
l'infini perd du sens en physique,
l'infini n'a aucune valeur en informatique



Posted by: Dominique Lefebvre

Oui, moi aussi, ça m'a fait bondir! Une structure de taille infinie en informatique n'existe pas, car la mémoire d'un ordinateur est toujour finie (ce n'est pas une machine de Türing réelle...).

Il vaut mieux dire en effet allocation statique ou dynamique de mémoire et donc parler de structure à taille prédéfinie (à l'initialisation) ou de structure dynamique (la taille évolue en fonction des besoins du programme et dans ce cas, il faut vérifier en faisant l'allocation de mémoire qu'il reste bien de la place en mémoire, sinon plantage assuré)











-