{"id":457,"date":"2018-02-01T11:58:27","date_gmt":"2018-02-01T10:58:27","guid":{"rendered":"http:\/\/wollef.org\/?p=457"},"modified":"2018-02-01T11:58:27","modified_gmt":"2018-02-01T10:58:27","slug":"histoire-de-la-programmation-24-les-langages-historiques","status":"publish","type":"post","link":"https:\/\/wollef.org\/blog\/histoire-de-la-programmation-24-les-langages-historiques\/","title":{"rendered":"Histoire de la programmation 2\/4 : Les langages historiques"},"content":{"rendered":"<p>Dans mon travail personnel pr\u00e9c\u00e9dent, j&#8217;ai parl\u00e9 de l&#8217;histoire des ordinateurs, des origines jusqu&#8217;aux\u00a0ordinateurs personnels\u00a0d&#8217;aujourd&#8217;hui.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>Avec la deuxi\u00e8me g\u00e9n\u00e9ration de grands ordinateurs\u00a0(1960), j&#8217;avais vu que deux langages \u00e9taient apparus \u00e0 cette \u00e9poque : Fortran et Cobol.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>De m\u00eame, l&#8217;invention\u00a0des micro-ordinateurs\u00a0(1970), combin\u00e9e\u00a0\u00e0\u00a0l&#8217;utilisation du Basic a permis\u00a0d&#8217;imaginer plein de nouveaux\u00a0logiciels.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>Les machines et les langages de programmation \u00e9voluent en m\u00eame temps, au fil de l&#8217;inventivit\u00e9 des ing\u00e9nieurs et des informaticiens.\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h1>Fortran\u202f:<span data-ccp-props=\"{&quot;335559738&quot;:120}\">\u00a0<\/span><\/h1>\n<p>Le Fortran (Formula Translator) est le premier langage de programmation \u00e9volu\u00e9 de l\u2019histoire de l\u2019informatique. Cr\u00e9\u00e9 en 1957 par John\u00a0Backus\u00a0chez IBM pour simplifier le dialogue avec la machine et le rendre\u00a0 plus proche du langage humain.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>Il est tr\u00e8s souvent utilis\u00e9 pour faire\u00a0faire\u00a0\u00e0 la machine des calculs compliqu\u00e9s dans les domaines scientifiques.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre><span data-ccp-props=\"{}\">\u00a0<\/span>*\u00a0\u00a0\u00a0\u00a0\u00a0euclid.f\u00a0(FORTRAN 77)<span data-ccp-props=\"{}\">\u00a0<\/span>\n*\u00a0\u00a0\u00a0\u00a0\u00a0Find\u00a0greatest\u00a0common\u00a0divisor\u00a0using\u00a0the\u00a0Euclidean\u00a0algorithm<span data-ccp-props=\"{}\">\u00a0<\/span>\n\n\u00a0 \u00a0 \u00a0 PROGRAM\u00a0EUCLID<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 PRINT\u00a0*,\u00a0'A?'<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 READ\u00a0*,\u00a0NA<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 IF\u00a0(NA.LE.0)\u00a0THEN<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 PRINT\u00a0*,\u00a0'A must\u00a0be\u00a0a positive\u00a0integer.'<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 STOP<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 END IF<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 PRINT\u00a0*,\u00a0'B?'<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 READ\u00a0*,\u00a0NB<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 IF\u00a0(NB.LE.0)\u00a0THEN<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 PRINT\u00a0*,\u00a0'B must\u00a0be\u00a0a positive\u00a0integer.'<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 STOP<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 END IF<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 PRINT\u00a0*,\u00a0'The GCD of',\u00a0NA,\u00a0' and',\u00a0NB,\u00a0'\u00a0is',\u00a0<b>NGCD<\/b>(NA,\u00a0NB), '.'<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 STOP<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 END<span data-ccp-props=\"{}\">\u00a0<\/span>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FUNCTION\u00a0<b>NGCD<\/b>(NA,\u00a0NB)<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 IA\u00a0=\u00a0NA<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 IB\u00a0=\u00a0NB<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0<b>\u00a0<\/b><b>1<\/b>\u00a0\u00a0\u00a0IF\u00a0(IB.NE.0)\u00a0THEN<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ITEMP\u00a0=\u00a0IA<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IA\u00a0=\u00a0IB<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IB\u00a0=\u00a0<b>MOD<\/b>(ITEMP,\u00a0IB)<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 GOTO\u00a0<b>1<\/b><span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 END IF<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 NGCD\u00a0=\u00a0IA<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 \u00a0 RETURN<span data-ccp-props=\"{}\">\u00a0<\/span>\n\u00a0 \u00a0 \u00a0 END<span data-ccp-props=\"{}\">\u00a0<\/span><\/pre>\n<p>Je profite de ce premier exemple (en fortran de 1977) pour expliquer diff\u00e9rents aspects du langage de programmation :<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"1\" data-aria-level=\"1\">Utiliser des mots cl\u00e9s pour\u00a0<b>structurer\u00a0<\/b>le programme et donner des\u00a0<b>instructions\u00a0<\/b>\u00e0 l&#8217;ordinateur : je les ai colori\u00e9s en bleu (PROGRAM ,\u00a0FUNCTION, THEN, etc.).<span data-ccp-props=\"{&quot;134233279&quot;:true}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"2\" data-aria-level=\"1\">Mettre les\u00a0<b>donn\u00e9es\u00a0<\/b>qu&#8217;on manipule dans des\u00a0<b>variables\u00a0<\/b>avec un nom. Je les ai colori\u00e9s en orange.(\u00a0NA, NB, ITEMP\u00a0, etc.).<span data-ccp-props=\"{&quot;134233279&quot;:true}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"2\" data-aria-level=\"1\">Permettre de saisir des\u00a0<b>valeurs fixes<\/b>\u00a0dans le code. Je les ai colori\u00e9es en vert.<span data-ccp-props=\"{&quot;134233279&quot;:true}\">\u00a0<\/span>\u00a0(&#8216;A?&#8217;, &#8216;B must be\u00a0a\u00a0positive\u00a0integer.&#8217;,\u00a0etc.)<span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-aria-posinset=\"2\" data-aria-level=\"1\">Permettre de cr\u00e9er des\u00a0<b>sous-programme<\/b><b>s<\/b>\u00a0et de les appeler depuis le code principal.\u00a0Ici il y a le sous-programme\u00a0<b>NGCD\u00a0<\/b>qui est appel\u00e9\u00a0depuis le programme principal\u00a0<b>EUCLID<\/b>.<span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1>Cobol\u202f:<span data-ccp-props=\"{&quot;335559738&quot;:120}\">\u00a0<\/span><\/h1>\n<p>Cobol est un langage de programmation cr\u00e9\u00e9 en 1959. Le but \u00e9tait de cr\u00e9er\u00a0un langage naturel humain, avec des phrases compl\u00e8tes r\u00e9dig\u00e9es\u00a0en anglais, sans oublier le point \u00e0 la fin de la phrase\u202f!<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>Cobol est un langage bavard.\u00a0Le langage Cobol \u00e9tait de loin le langage le plus employ\u00e9 dans les domaines de la gestion et\u00a0de\u00a0la comptabilit\u00e9 jusque dans les ann\u00e9es 1980, et reste toujours utilis\u00e9 en particulier dans les banques. C\u2019est en partie l\u2019existence de programmes\u00a0anciens\u00a0dans ce langage qui a fait craindre le bogue de l\u2019an 2000.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>Voici\u00a0un exemple de petit programme o\u00f9\u00a0j&#8217;ai colori\u00e9 avec la m\u00eame logique que pour le programme Fortran.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre>$ SET SOURCEFORMAT\"FREE\"<span data-ccp-props=\"{}\">\u00a0<\/span>\nIDENTIFICATION DIVISION.<span data-ccp-props=\"{}\">\u00a0<\/span>\nPROGRAM-ID.\u00a0\u00a0<b>Multiplier<\/b>.<span data-ccp-props=\"{}\">\u00a0<\/span>\nAUTHOR.\u00a0\u00a0Michael Coughlan.<span data-ccp-props=\"{}\">\u00a0<\/span>\n\n* Example program\u00a0using\u00a0ACCEPT, DISPLAY and MULTIPLY to\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\n*\u00a0get\u00a0two\u00a0single digit\u00a0numbers\u00a0from\u00a0the user and\u00a0multiply\u00a0them\u00a0together<span data-ccp-props=\"{}\">\u00a0<\/span>\n\nDATA DIVISION.<span data-ccp-props=\"{}\">\u00a0<\/span>\nWORKING-STORAGE SECTION.<span data-ccp-props=\"{}\">\u00a0<\/span>\n01\u00a0\u00a0Num1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PIC 9\u00a0 VALUE ZEROS.<span data-ccp-props=\"{}\">\u00a0<\/span>\n01\u00a0\u00a0Num2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PIC 9\u00a0 VALUE ZEROS.<span data-ccp-props=\"{}\">\u00a0<\/span>\n01\u00a0\u00a0Result\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PIC 99 VALUE ZEROS.<span data-ccp-props=\"{}\">\u00a0<\/span>\n\nPROCEDURE DIVISION.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nDISPLAY\u00a0\"Enter first\u00a0number\u00a0 (1 digit) : \"\u00a0WITH NO ADVANCING.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nACCEPT\u00a0Num1.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nDISPLAY\u00a0\"Enter second\u00a0number\u00a0(1 digit) : \"\u00a0WITH NO ADVANCING.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nACCEPT\u00a0Num2.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nMULTIPLY\u00a0Num1\u00a0BY\u00a0Num2\u00a0GIVING\u00a0Result.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nDISPLAY\u00a0\"Result\u00a0is\u00a0= \",\u00a0Result.\u00a0\u00a0\u00a0\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span>\nSTOP RUN.<span data-ccp-props=\"{}\">\u00a0<\/span><\/pre>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><i>Pour l&#8217;histoire familiale, ma grand-m\u00e8re paternelle a appris le cobol dans les ann\u00e9es 70 et a programm\u00e9 penda<\/i><i>nt 2-3 ann\u00e9es ! L&#8217;ordinateur \u00e9tait<\/i><i>\u00a0un ordinateur de troisi\u00e8me g\u00e9n\u00e9ration dans une administration dont j&#8217;ai parl\u00e9 dans mon pr\u00e9c\u00e9dent Trape<\/i><i>\u00a0(comme sur la photo \u00e0 cot\u00e9.<\/i><i>)<\/i><i>.<\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h1>Basic\u202f:<span data-ccp-props=\"{&quot;335559738&quot;:120}\">\u00a0<\/span><\/h1>\n<p>Basic est un langage de programmation, invent\u00e9 en 1964. Il a \u00e9t\u00e9 rendu c\u00e9l\u00e8bre car un interpr\u00e9teur Basic \u00e9quipait tous les premiers ordinateurs personnels dans les ann\u00e9es 70. Comme son nom l\u2019indique, il a \u00e9t\u00e9 con\u00e7u pour \u00eatre facilement et rapidement appris\u00a0par un d\u00e9butant.<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p>Ce langage est encore utilis\u00e9 de nos jours.\u00a0<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre>10\u00a0<b>INPUT<\/b>\u00a0\"What\u00a0is\u00a0your\u00a0name: \";\u00a0U$<span data-ccp-props=\"{}\">\u00a0<\/span>\n20\u00a0<b>PRINT<\/b>\u00a0\"Hello \";\u00a0U$<span data-ccp-props=\"{}\">\u00a0<\/span>\n30\u00a0<b>INPUT<\/b>\u00a0\"How\u00a0many\u00a0stars do\u00a0you\u00a0want: \";\u00a0N<span data-ccp-props=\"{}\">\u00a0<\/span>\n40\u00a0S$\u00a0=\u00a0\"\"<span data-ccp-props=\"{}\">\u00a0<\/span>\n50\u00a0<b>FOR<\/b>\u00a0I\u00a0=\u00a01\u00a0<b>TO<\/b>\u00a0N<span data-ccp-props=\"{}\">\u00a0<\/span>\n60\u00a0S$\u00a0=\u00a0S$\u00a0+\u00a0\"*\"<span data-ccp-props=\"{}\">\u00a0<\/span>\n70\u00a0<b>NEXT<\/b>\u00a0I<span data-ccp-props=\"{}\">\u00a0<\/span>\n80\u00a0<b>PRINT<\/b>\u00a0S$<span data-ccp-props=\"{}\">\u00a0<\/span>\n90\u00a0<b>INPUT<\/b>\u00a0\"Do\u00a0you\u00a0want more stars? \";\u00a0A$<span data-ccp-props=\"{}\">\u00a0<\/span>\n100\u00a0<b>IF<\/b>\u00a0<b>LEN<\/b>(A$)\u00a0=\u00a00\u00a0<b>THEN<\/b>\u00a0<b>GOTO<\/b>\u00a090<span data-ccp-props=\"{}\">\u00a0<\/span>\n110\u00a0A$\u00a0=\u00a0<b>LEFT$<\/b>(A$,\u00a01)<span data-ccp-props=\"{}\">\u00a0<\/span>\n120\u00a0<b>IF<\/b>\u00a0A$\u00a0=\u00a0\"Y\"\u00a0<b>OR<\/b>\u00a0A$\u00a0=\u00a0\"y\"\u00a0<b>THEN<\/b>\u00a0<b>GOTO<\/b>\u00a030<span data-ccp-props=\"{}\">\u00a0<\/span>\n130\u00a0<b>PRINT<\/b>\u00a0\"Goodbye \";\u00a0U$<span data-ccp-props=\"{}\">\u00a0<\/span>\n140\u00a0<b>END<\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/pre>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span>En Basic toutes les lignes ont un num\u00e9ro (rouge); Le mot GOTO permet d&#8217;aller directement \u00e0 la ligne qui\u00a0a ce num\u00e9ro. Si vous allez voir l&#8217;exemple Fortran il y avait aussi un GOTO, je vous laisse le trouver \ud83d\ude09<span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><i>Pour un autre clin d&#8217;\u0153il \u00e0 l&#8217;histoire familiale, c&#8217;est en<\/i><i>\u00a0basic que mon p\u00e8re a commenc\u00e9 \u00e0 programmer<\/i><i>\u00a0quand il\u00a0<\/i><i>\u00e9tait<\/i><i>\u00a0en 2<\/i><i>\u00e8me ann\u00e9e<\/i><i>\u00a0de lyc\u00e9e. Les ordinateurs \u00e9taient un TO7-70 et un TRS-80<\/i><i>, comme sur les photos ci-dessous.<\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><i>Dans mon pr\u00e9c\u00e9dent\u00a0<\/i><i>Trape<\/i><i>, j&#8217;ai expliqu\u00e9 que ces ordinateurs \u00e9taient au d\u00e9but de la micro informatique. Bien loin du PC de gamer que j&#8217;ai construit pour mon\u00a0<\/i><i>Trape<\/i><i>\u00a0!<\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans mon travail personnel pr\u00e9c\u00e9dent, j&#8217;ai parl\u00e9 de l&#8217;histoire des ordinateurs, des origines jusqu&#8217;aux\u00a0ordinateurs personnels\u00a0d&#8217;aujourd&#8217;hui.\u00a0 Avec la deuxi\u00e8me g\u00e9n\u00e9ration de grands ordinateurs\u00a0(1960), j&#8217;avais vu que deux langages \u00e9taient apparus \u00e0 cette \u00e9poque : Fortran et Cobol.\u00a0 De m\u00eame, l&#8217;invention\u00a0des micro-ordinateurs\u00a0(1970), combin\u00e9e\u00a0\u00e0\u00a0l&#8217;utilisation du Basic a permis\u00a0d&#8217;imaginer plein de nouveaux\u00a0logiciels.\u00a0 Les machines et les langages de programmation <a class=\"read-more\" href=\"https:\/\/wollef.org\/blog\/histoire-de-la-programmation-24-les-langages-historiques\/\">Continue Reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,36,38,41,4,14],"tags":[54],"class_list":["post-457","post","type-post","status-publish","format-standard","hentry","category-histoire-programmation-java","category-basic","category-cobol","category-fortran","category-histoire","category-programmation","tag-fortran"],"_links":{"self":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/comments?post=457"}],"version-history":[{"count":0,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/457\/revisions"}],"wp:attachment":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/media?parent=457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/categories?post=457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/tags?post=457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}