Texte incomprehensible !!!

Discutez d'informatique ici !
Dominique Lefebvre
Membre Légendaire
Messages: 8005
Enregistré le: 03 Déc 2005, 12:00

par Dominique Lefebvre » 03 Aoû 2007, 07:57

Flodelarab a écrit: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?



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

par Dominique Lefebvre » 03 Aoû 2007, 08:04

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é...

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

par Flodelarab » 03 Aoû 2007, 12:51

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" ?

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

par Dominique Lefebvre » 03 Aoû 2007, 14:39

Flodelarab a écrit: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é ...

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

par Dominique Lefebvre » 03 Aoû 2007, 14:44

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!

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

par Flodelarab » 03 Aoû 2007, 17:33

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: Tout sélectionner
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

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

par Dominique Lefebvre » 03 Aoû 2007, 17:44

Flodelarab a écrit: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: Tout sélectionner
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...

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

par Dominique Lefebvre » 03 Aoû 2007, 17:57

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

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

par Flodelarab » 03 Aoû 2007, 19:08

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.

cesar
Membre Rationnel
Messages: 841
Enregistré le: 05 Juin 2005, 07:12

par cesar » 04 Aoû 2007, 08:37

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

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

par Dominique Lefebvre » 04 Aoû 2007, 11:20

Flodelarab a écrit: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!

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

par barbu23 » 05 Aoû 2007, 01:45

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

Joker62
Membre Transcendant
Messages: 5027
Enregistré le: 24 Déc 2006, 19:29

par Joker62 » 05 Aoû 2007, 03:22

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

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

par Flodelarab » 05 Aoû 2007, 10:09

Joker62 a écrit: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 :we:

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

par Dominique Lefebvre » 05 Aoû 2007, 11:11

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

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 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