question

Un programme qui se compile est sûrement syntaxiquement correct (sinon, le compilateur, y comprend pas)
smile.gif
.

Mais ça ne dit rien de sa correction sémantique
frown.gif
: un programme dont la spécification est de multiplier deux nombres mais qui en réalité les divise peut très bien être compilé et même exécuté. Maintenant, le résultat n'es pas vraiment celui attendu. Ce programme sera syntaxiquement correct, sémantiquement incorrect.

Par contre, un programme syntaxiquement incorrect ne peut pas être sémantiquement correct (puisqu'il n'a pas de sémantique).

Entre les deux, tu peux avoir un programme syntaxiquement correct mais algorithmiquement incorrect (donc a fortiori sémantiquement incorrect).

Par exemple, si tu as une boucle infinie, ça peut compiler, mais ça n'exécutera pas.

Un programme correct doit l'être à tous les niveaux : syntaxe, algorithme, sémantique.

Reste encore à être sûr que le programme est correct pour toutes les données (si certaines données te conduisent à une division par zéro, le programme est correct sur un sous-ensemble du domaine d'application)
rolleyes.gif
.

Reste encore, en plus de la "correction" du programme, à être sûr de son "utilisabilité" sur une machine cible : s'il lui faut 34 téraoctets de mémoire vive ou 3 milliards d'années de calcul pour arriver au bout, ça va être dur
mad.gif
.

Bon, quelqu'un a déjà fait un programme parfaitement correct (il y a des moyens théoriques pour ça) et utilisable ?
grin.gif
grin.gif


(Et on pourrait encore chercher des poils aux oeufs plus loin vu que les langages informatiques ne sont pas "parfaits", (orthogonaux, disent les spécialistes, si je ne dis pas, moi, des bêtises).

Sur ce, je retourne lire Proust, c'est pas toujours correct, même syntaxiquement, mais qu'est-ce que c'est simple, à côté.
tongue.gif
 
hehe, c'était une de mes question d'examen, et je pouvais répondre vrai ou faux. (pas de place pour justifier, c'est une feuille a lecture optique)

en fait tout dépend de la valeur du "est"
si c'est implique, c'est vrai, si c'est une affirmation, c'est faux...

ben je devais mettre quoi moi?
confused.gif
confused.gif
confused.gif
 
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>Posté à l'origine par decus:
hehe, c'était une de mes question d'examen, et je pouvais répondre vrai ou faux. (pas de place pour justifier, c'est une feuille a lecture optique)

en fait tout dépend de la valeur du "est"
si c'est implique, c'est vrai, si c'est une affirmation, c'est faux...

ben je devais mettre quoi moi?
confused.gif
confused.gif
confused.gif
<HR></BLOCKQUOTE>

Moi j'aurai mis faux
wink.gif
grin.gif
 
Pour moi, un programme est juste seulement s'il fait ce que tu veux.

Prends l'exemple d'un texte écrit en français (ou une autre langue en fait, sauf que pour moi les autres langues c'est de toute manière incompréhensible ;-). Il peut être orthographiquement et grammaticalement correct, mais ne rien vouloir dire. C'est un peu pareil.
 
Si c'est une question oui/non, c'est clairement non. Un programme est correct s'il donne des résultats corrects, pas s'il est exécutable. Alors vu que compilable, c'est même pas forcément exécutable, comme le dit Gwenhiver.

Répondre oui, c'est énerver les profs : un compilateur n'est pas là pour t'assurer qu'un programme est correct (et réfléchir à ta place), il est là pour traduire. Que ce que veuilles traduire soit un tissu d'âneries, il s'en fout, pourvu que ça soit traduisible. "la terre est plate", ça se traduit en javanais sans problème, c'est pas pour ça que c'est vrai.

Accessoirement, c'est dommage de limiter l'étude de la "correction" d'un programme à répondre oui/non. En informatique, un peu de subtilité et de nuance, ça ferait des fois du bien
grin.gif


Je me souviens d'un bouquin consacré à quelques mathématiciens du très haut du panier (médailles fields pour un bon nombre), ils étaient souvent très prudents sur la notion de "vrai", même en maths. Je crois que c'est Grothendieck (mais je ne suis pas sûr) qui disait en gros : "faire une démonstration correcte, c'est convaincre ceux qui la lisent qu'elle est juste".

[28 juin 2002 : message édité par Luc G]
 
Si c'est une question oui/non, c'est clairement non. Un programme est correct s'il donne des résultats corrects, pas s'il est exécutable.

Répondre oui, c'est énerver les profs : un compilateur n'est pas là pour t'assurer qu'un programme est correct (et réfléchir à ta place), il est là pour traduire. Que ce que veuilles traduire soit un tissu d'âneries, il s'en fout, pourvu que ça soit traduisible. "la terre est plate", ça se traduit en javanais sans problème, c'est pas pour ça que c'est vrai.

Accessoirement, c'est dommage de limiter l'étude de la "correction" d'un programme à répondre oui/non. En informatique, un peu de subtilité et de nuance, ça ferait des fois du bien
grin.gif


Je me souviens d'un bouquin consacré à quelques mathématiciens du très haut du panier (médailles fields pour un bon nombre), ils étaient souvent très prudents sur la notion de "vrai", même en maths. Je crois que c'est Grothendieck (mais je ne suis pas sûr) qui disait en gros : "faire une démonstration correcte, c'est convaincre ceux qui la lisent qu'elle est juste".
 
j'ai mis faux, et c'était la bonne réponse. mais vous avez déjà vu un programme correct qui ne se compile pas??? moi non...
donc un programme correct se compile forcément...
wink.gif
 
Un programme correct, c'est un programme qui répond à vos besoins et qui plante pas pour un rien.

Peu importe, qu'il soit compilé ou interprété. Et oui, on peut aussi utiliser un langage interprété ou semi-interprété.

On peut aussi aller un peu plus loin en disant aussi qu'un programme correct doit aussi être bien écrit, lisible et facilement maintenable et extensible. Là c'est un programme parfait
grin.gif


Il y a des tas de programmes Horribles qui sont compilés, Une compilation réussie, ça montre seulement que le compilateur a compris le code, ça n'empeche pas les erreurs de fonctionnement.

[01 juillet 2002 : message édité par mfay]
 
La réponse est évidemment : faux

Car il ne suffit pas qu'un programme se compile pour qu'il soit correct...

Effectivement, s'il est correct il se compile forcément (et il a déjà été compilé bien des fois avant d'être correct !) mais la compilation ne s'occupe que de la syntaxe et pas de la logique d'exécution.

Je dirais même plus pour être correct, un programme doit se compiler sans erreurs; quand il se compile sans erreurs, la première partie du job est faite, mais il reste le plus difficile, la correction des bugs...
 
Decu, tu prend le probleme l'envers la...
Tu as fait de la logique?
Reflechit bien a ce que tu viens d'ecrire.

Si A implique B, est-ce que B implique A???

Reponse : pas forcement...

Donc si un programme correcte se compile forcement, ca ne veut pas dire que Tous les programmes qui se compiles sont corrects!

Programme Correct IMPLIQUE compilation : oui
Compilation IMPLIQUE Programme correct : non

pour raisonner a l'envers, il te faudrait prendre ce que l'on appelle la contraposee :

Si A implique B, alors non B implique non A.

Programme Correct IMPLIQUE compilation

EST EQUIVALENT A

Pas de compilation IMPLIQUE Pas de programme correct.


Voila, tu me demandes quand tu as des problemes de logiques, je te file des cours sur les forums.
Tcho!
 
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>Posté à l'origine par SuperCed:
Decu, tu prend le probleme l'envers la...
Tu as fait de la logique?
Reflechit bien a ce que tu viens d'ecrire.

Si A implique B, est-ce que B implique A???

Reponse : pas forcement...

Donc si un programme correcte se compile forcement, ca ne veut pas dire que Tous les programmes qui se compiles sont corrects!

Programme Correct IMPLIQUE compilation : oui
Compilation IMPLIQUE Programme correct : non

pour raisonner a l'envers, il te faudrait prendre ce que l'on appelle la contraposee :

Si A implique B, alors non B implique non A.

Programme Correct IMPLIQUE compilation

EST EQUIVALENT A

Pas de compilation IMPLIQUE Pas de programme correct.


Voila, tu me demandes quand tu as des problemes de logiques, je te file des cours sur les forums.
Tcho!
<HR></BLOCKQUOTE>


C'est limpide comme explication !!!
grin.gif
tongue.gif
 
Arrrrghhhhh... non pas de la logique élémentaire non non non !!

Je viens me détendre sur le forum entre deux révisions de logique élémentaire et je tombe sur ça !!!
 
Grumpf !

Un programme peut être correct et être sur un langage interprété. Dans ce cas il ne se compile pas, pourtant il reste correct.
grin.gif


En réalité, Une compilation n'empeche pas les BUGS, donc même un programme compilé peut ne pas être correct, une preuve : WINDOWS, moi, je ne le trouve pas très correct
grin.gif
 
la logique j'y avais pensé, mais ici il n'est pas mis implique, mais "est"... tout dépend donc du sens que l'on donne au "est"...

sinon le coup du programme interprété, ne connaissant pas, j'y avais pas pensé...