<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Le+touz%C3%A9.florian</id>
	<title>Wiki du LAMA (UMR 5127) - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Le+touz%C3%A9.florian"/>
	<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php/Sp%C3%A9cial:Contributions/Le_touz%C3%A9.florian"/>
	<updated>2026-05-21T13:57:25Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO719_:_rappels_d%27algorithmique_et_programmation_C&amp;diff=2340</id>
		<title>INFO719 : rappels d&#039;algorithmique et programmation C</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO719_:_rappels_d%27algorithmique_et_programmation_C&amp;diff=2340"/>
		<updated>2008-10-02T15:32:37Z</updated>

		<summary type="html">&lt;p&gt;Le touzé.florian : /* Question 4 : palindromes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ce wiki est un complément de cours pour le cours &amp;quot;info-719 : rappels d&#039;algorithmique et programmation C&amp;quot;. La participation au wiki n&#039;est pas obligatoire mais fortement encouragée. Pour pouvoir modifier les pages, inscrivez-vous (lien en haut à droite) pour obtenir un login et mot de passe. (Utilisez votre vrai nom...)&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aller voir [http://meta.wikimedia.org/wiki/Aide:Contenu ce guide] pour vous familiariser avec les wikis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exercice :&amp;lt;/u&amp;gt; si vous n&#039;en avez pas, créez-vous un compte et essayez de modifier cette page (correction de fôtes d&#039;aurtograffe, rajout de détails, mise en page, ...)&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi utiliser la page de discussion pour ... discuter. (Ou poser des questions, faire des commentaires etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Détails techniques=&lt;br /&gt;
&lt;br /&gt;
==Nouvelles==&lt;br /&gt;
&lt;br /&gt;
Les nouvelles récentes sont en haut de la liste...&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Hyvernat|Hyvernat]] 12 septembre 2008 à 15:43 (CEST) : création du wiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Organisation des séances==&lt;br /&gt;
&lt;br /&gt;
Comme vous n&#039;êtes pas nombreux, le cours sera entièrement en mode &#039;&#039;cours / TD&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* première séance (12/09/2008) : introduction, calcul du maximum,&lt;br /&gt;
* deuxième séance (16/09/2008) : introduction au C (partie I), début du TD1,&lt;br /&gt;
* troisième séance (23/09/2008) : TP0 (reprise du TD1 en salle machines),&lt;br /&gt;
&lt;br /&gt;
==Les support de TD et TP==&lt;br /&gt;
&lt;br /&gt;
* [http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0809/info719/td1.pdf TD1]&lt;br /&gt;
&lt;br /&gt;
* [http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/0809/info719/tp0.pdf TP0]&lt;br /&gt;
&lt;br /&gt;
* Compléments pour le TP 0 :&lt;br /&gt;
** Pour compiler un programme, allez voir la page [[Comment compiler le C ?]]&lt;br /&gt;
** Pour faire du C chez vous, vous pouvez :&lt;br /&gt;
*** soit installer linux (je vous conseille [http://www.ubuntu-fr.org/ Ubuntu])&lt;br /&gt;
*** soit installer une &amp;quot;émulation Unix&amp;quot; pour Windows ([http://www.cygwin.com/ Cygwin], en précisant à l&#039;installation que vous voulez installer au moins &amp;lt;tt&amp;gt;gcc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; dans la partie &amp;lt;tt&amp;gt;Devel&amp;lt;/tt&amp;gt;)&lt;br /&gt;
*** soit installer un environnement de programmation C pour Windows (par exemple, [http://www.bloodshed.net/dev/devcpp.html Dev-C++])&lt;br /&gt;
&lt;br /&gt;
==Correction TDP0==&lt;br /&gt;
&lt;br /&gt;
=== Question 1 : sur les minimums et maximums===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define N 10  /* la taille de mes tableaux */&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /* la fonction qui échange le minimum et le maximum dans un tableau */&lt;br /&gt;
 void change (int T[N]) {&lt;br /&gt;
 &lt;br /&gt;
  int i=0;&lt;br /&gt;
  int max=0;   /* indice du maximum */&lt;br /&gt;
  int min=0;   /* indice du minimum */&lt;br /&gt;
 &lt;br /&gt;
  for(i=0;i&amp;lt;N;i=i+1) {&lt;br /&gt;
    if (T[i] &amp;lt; T[min]) { min=i; }&lt;br /&gt;
    if (T[i] &amp;gt; T[max]) { max=i; }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  i=T[min];&lt;br /&gt;
  T[min] = T[max];&lt;br /&gt;
  T[max] = i;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* recherche et affichage des deux valeurs maximales dans un tableau */&lt;br /&gt;
 void deux_max (int T[N]) {&lt;br /&gt;
  int i;&lt;br /&gt;
  int max,maxbis;&lt;br /&gt;
 &lt;br /&gt;
  if (T[0] &amp;lt; T[1]) { max=1 ; maxbis=0; }&lt;br /&gt;
              else { max=0 ; maxbis=1; }&lt;br /&gt;
 &lt;br /&gt;
  for(i=2;i&amp;lt;N;i=i+1) {&lt;br /&gt;
           if (T[i] &amp;gt; T[max])  { maxbis=max; max=i; }&lt;br /&gt;
    else { if (T[i] &amp;gt; T[maxbis]) { maxbis=i; } }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  printf(&amp;quot;Le grand maximum se trouve à l&#039;indice %i et vaut %i ; &amp;quot;, max, T[max]);&lt;br /&gt;
  printf(&amp;quot;le petit maximum se trouve à l&#039;indice %i et vaut %i.\n&amp;quot;, maxbis, T[maxbis]);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /* recherche et affichage des deux valeurs maximales distinctes dans un tableau */&lt;br /&gt;
 void deux_max_bis (int T[N]) {&lt;br /&gt;
  int i;&lt;br /&gt;
  int max,maxbis;&lt;br /&gt;
 &lt;br /&gt;
  max=0;&lt;br /&gt;
  maxbis=0;&lt;br /&gt;
 &lt;br /&gt;
  for(i=1;i&amp;lt;N;i=i+1) {&lt;br /&gt;
          if (max==maxbis &amp;amp;&amp;amp; T[i]&amp;lt;T[max])         { maxbis=i; }&lt;br /&gt;
    else {if (T[i] &amp;gt; T[max])                      { maxbis=max; max=i; }&lt;br /&gt;
    else {if (T[i] &amp;lt; T[max] &amp;amp;&amp;amp; T[i] &amp;gt; T[maxbis])  { maxbis=i; }}}&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  if (max != maxbis) {&lt;br /&gt;
    printf(&amp;quot;Le grand maximum se trouve à l&#039;indice %i et vaut %i ; &amp;quot;, max, T[max]);&lt;br /&gt;
    printf(&amp;quot;le petit maximum se trouve à l&#039;indice %i et vaut %i.\n&amp;quot;, maxbis, T[maxbis]);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    printf(&amp;quot;!!! Le tableau ne contient qu&#039;une seule valeur : %i !\n&amp;quot;,T[max]);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int main () {&lt;br /&gt;
  int T[N] = { 0 , 1 , 2 , 3 , 4 , 55 , 666 , 42 , 0 , -7 };&lt;br /&gt;
  int i ;&lt;br /&gt;
 &lt;br /&gt;
  /* affichage du tableau */&lt;br /&gt;
  for (i=0;i&amp;lt;N;i=i+1) printf(&amp;quot;T[%i] = %i\n&amp;quot;,i,T[i]);&lt;br /&gt;
  printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
  change(T) ;&lt;br /&gt;
 &lt;br /&gt;
  for (i=0;i&amp;lt;N;i=i+1) printf(&amp;quot;T[%i] = %i\n&amp;quot;,i,T[i]);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  return(1);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Question 3 : renverser un tableau===&lt;br /&gt;
&lt;br /&gt;
(Merci à Diane et Florian... Leur solution était correcte, j&#039;ai juste modifié un ou deux trucs sans grande importance.)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #define N 10&lt;br /&gt;
 &lt;br /&gt;
 /* Fonction renverse */&lt;br /&gt;
 void renverse (int T[N]) {&lt;br /&gt;
  int tmp;&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i=0;i&amp;lt;N/2;i=i+1){&lt;br /&gt;
    tmp=T[i];&lt;br /&gt;
    T[i]=T[N-i-1];&lt;br /&gt;
    T[N-i-1]=tmp;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* permet d&#039;afficher les valeurs du tableau dans le terminal */&lt;br /&gt;
 void affiche_tableau(int T[N]) {&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i = 0; i &amp;lt; N; i=i+1) {&lt;br /&gt;
    printf(&amp;quot;T[%d]=%d\n&amp;quot;,i,T[i]);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /* Programme principal */&lt;br /&gt;
 int main () {&lt;br /&gt;
  int T[N]={0,1,2,3,4,5,6,7,8,9};&lt;br /&gt;
 &lt;br /&gt;
  affiche_tableau(T);&lt;br /&gt;
  printf(&amp;quot;Son tableau renversé est: \n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
  renverse(T);&lt;br /&gt;
  affiche_tableau(T);&lt;br /&gt;
 &lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Question 4 : palindromes===&lt;br /&gt;
&lt;br /&gt;
Écrire un test pour vérifier si un tableau est un &#039;&#039;palindrome&#039;&#039;. Si c&#039;est le cas, il devra renvoyer la valeur -1;  sinon, il devra renvoyer la plus grande valeur longueur du préfixe qu&#039;on retrouve inversé en suffixe du tableau.&lt;br /&gt;
&lt;br /&gt;
(Merci à Diane et Florian... Leur solution était correcte, j&#039;ai par contre modifié la question pour renvoyer -1 dans le cas des palindromes. C&#039;est plus logique.)&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #define N 10&lt;br /&gt;
 &lt;br /&gt;
 /* Fonction palindrome*/&lt;br /&gt;
 int palindrome (int T[N]){&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i=0;i&amp;lt;N/2;i=i+1){&lt;br /&gt;
    if (T[i] != T[N-i-1]) {return i;}&lt;br /&gt;
  }&lt;br /&gt;
  return -1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* permet de taper les 10 valeurs dans le terminal et de les afficher */&lt;br /&gt;
 int lire_tableau(int T[N]) {&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i = 0; i &amp;lt; N; i=i+1) {&lt;br /&gt;
    printf(&amp;quot;T[%d]= &amp;quot;,i);&lt;br /&gt;
    scanf(&amp;quot;%d&amp;quot;,&amp;amp;(T[i]));&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* Programme principal*/&lt;br /&gt;
 int main () {&lt;br /&gt;
  int T[N];&lt;br /&gt;
  int x;&lt;br /&gt;
  lire_tableau(T);&lt;br /&gt;
  x=palindrome(T);&lt;br /&gt;
  if (x==-1)&lt;br /&gt;
    {printf(&amp;quot;Le tableau est un palindrome. \n&amp;quot;);}&lt;br /&gt;
  else&lt;br /&gt;
    {printf(&amp;quot;La plus grande longueur d&#039;u prefixe que l&#039;on retrouve inversé en suffixe est %i. \n&amp;quot;,x);}&lt;br /&gt;
  return 1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Question 5 : recherche dans un tableau trié===&lt;br /&gt;
&lt;br /&gt;
On suppose que T est un tableau de taille N contenant des entiers triés par ordre croissant. Ecrivez une fonction qui va vérifier si un entier n aopparaît dans le tableau.&lt;br /&gt;
&lt;br /&gt;
*Première méthode: recherche séquentielle&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /*fonction qui cherche un élément dans un tableau trié*/&lt;br /&gt;
 int recherche_trier (int T[10],int cherche){&lt;br /&gt;
 		int i=0;&lt;br /&gt;
 		int trouve=0;&lt;br /&gt;
 		&lt;br /&gt;
 	if (cherche== T[0]){trouve=1;}&lt;br /&gt;
 	else{&lt;br /&gt;
 	    while ((!trouve) &amp;amp;&amp;amp; (i&amp;lt;10) &amp;amp;&amp;amp; (cherche &amp;gt;= T[i])){&lt;br /&gt;
 		i=i+1;&lt;br /&gt;
 		if (cherche==T[i]){trouve=1;}&lt;br /&gt;
  	    }&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	if (trouve==1){&lt;br /&gt;
  	   printf(&amp;quot;L&#039; entier %i a été trouvé à la case %i du tableau \n&amp;quot;,cherche,i);&lt;br /&gt;
 	}&lt;br /&gt;
 	else {&lt;br /&gt;
 	   printf(&amp;quot;L&#039; entier %i n&#039;a pas été trouvé dans le tableau \n&amp;quot;,cherche);&lt;br /&gt;
 	}		&lt;br /&gt;
 return 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  /*Programme principal*/&lt;br /&gt;
 int main(){&lt;br /&gt;
 	int T[10]={1,2,3,4,5,9,10,15,24,42};&lt;br /&gt;
 	int cherche;&lt;br /&gt;
 &lt;br /&gt;
    /*permet à l&#039;utilisateur de rentrer un entier a chercher*/&lt;br /&gt;
 	printf(&amp;quot;Rentrez un entier \n&amp;quot;);&lt;br /&gt;
 	scanf(&amp;quot;%i&amp;quot;,&amp;amp;cherche);&lt;br /&gt;
 			&lt;br /&gt;
   	/*Appel de la fonction qui permet de rechercher l&#039;entier*/&lt;br /&gt;
 	recherche_trier (T,cherche);&lt;br /&gt;
  &lt;br /&gt;
 return 1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Deuxième méthode: recherche dichotomique&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /*Recherche dichotomique*/&lt;br /&gt;
 int recherche_dicho(int T[10],  int cherche){&lt;br /&gt;
 	int trouve, indice, inf , sup, milieu;&lt;br /&gt;
 &lt;br /&gt;
 	trouve=0;&lt;br /&gt;
 	if (cherche==T[0]){   /* on vérifie si l&#039;élément est a la case 0 du tableau*/&lt;br /&gt;
 		trouve=1;&lt;br /&gt;
 		indice=0;&lt;br /&gt;
 	}&lt;br /&gt;
 	else{&lt;br /&gt;
 	   if (cherche==T[9]){ /* on vérifie si l&#039;élément est a la case 9 du tableau*/&lt;br /&gt;
 		trouve=1;&lt;br /&gt;
 		indice=9;&lt;br /&gt;
 	   }&lt;br /&gt;
 	   else{&lt;br /&gt;
 	      inf=0;&lt;br /&gt;
 	      sup=9;&lt;br /&gt;
 				&lt;br /&gt;
 	     while ((!trouve) &amp;amp;&amp;amp; (inf&amp;lt;=sup)){&lt;br /&gt;
 	       milieu=(inf+sup)/2;	    /*calcul du milieu du tableau*/&lt;br /&gt;
 	       if (cherche==T[milieu]) { /* on vérifie si  l&#039;élément du milieu est celui recherché*/&lt;br /&gt;
 		 trouve=1;&lt;br /&gt;
     		 indice=milieu;&lt;br /&gt;
 	       }&lt;br /&gt;
 	       else {&lt;br /&gt;
 		  if (cherche&amp;lt;T[milieu]){	&lt;br /&gt;
 		      sup=milieu-1;&lt;br /&gt;
 		  }&lt;br /&gt;
 	          else{&lt;br /&gt;
 	          inf=milieu+1;&lt;br /&gt;
 	          }&lt;br /&gt;
 	       }&lt;br /&gt;
 	      }/*fermeture du while*/&lt;br /&gt;
       }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  if (trouve==1){&lt;br /&gt;
      printf(&amp;quot;L&#039; entier %i a été trouvé à la case %i du tableau \n&amp;quot;,cherche,indice);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
      printf(&amp;quot;L&#039; entier %i n&#039;a pas été trouvé dans le tableau \n&amp;quot;,cherche);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /*Programme principal*/&lt;br /&gt;
 int main(){&lt;br /&gt;
 	int T[10]={1,4,14,18,24,42,100,104,118,124};&lt;br /&gt;
 	int cherche;&lt;br /&gt;
 &lt;br /&gt;
 	/*permet à l&#039;utilisateur de rentrer un entier a chercher*/&lt;br /&gt;
 	printf(&amp;quot;Rentrez un entier \n&amp;quot;);&lt;br /&gt;
 	scanf(&amp;quot;%i&amp;quot;,&amp;amp;cherche);&lt;br /&gt;
 	&lt;br /&gt;
        /*appel de la fonction qui permet de recherche l&#039;élément*/&lt;br /&gt;
 	recherche_dicho (T,cherche);&lt;br /&gt;
 &lt;br /&gt;
 return 1;&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&lt;br /&gt;
* mettre tout le monde à niveau sur les compétences de base en algorithmique&lt;br /&gt;
* donner des notions de base sur l&#039;informatique concrète&lt;br /&gt;
* Étudier quelques techniques importantes d&#039;algorithmique&lt;br /&gt;
* apprendre les bases du langage C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Plan==&lt;br /&gt;
&lt;br /&gt;
* intro, étude d&#039;un exemple&lt;br /&gt;
* rappel d&#039;algorithmique (probablement faits en TD)&lt;br /&gt;
* rappel mathématiques, complexité&lt;br /&gt;
* quelques techniques d&#039;algorithmique&lt;br /&gt;
* notions de complexité&lt;br /&gt;
&lt;br /&gt;
* le langage C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rappels historiques==&lt;br /&gt;
Vous pouvez partir de [http://fr.wikipedia.org/wiki/Chronologie_informatique cette page] pour avoir un peu plus de détails...&lt;br /&gt;
&lt;br /&gt;
===La préhistoire : le calcul===&lt;br /&gt;
&lt;br /&gt;
* le boulier chinois&lt;br /&gt;
* la [http://fr.wikipedia.org/wiki/Pascaline pascaline] de Pascal, inventée en 1641/42 : elle ne permet de faire que des additions (et des soustractions&lt;br /&gt;
* Leibniz rajoute la multiplication à la pascaline (1673)&lt;br /&gt;
* les &amp;quot;moulins à chiffres&amp;quot; de [http://fr.wikipedia.org/wiki/Babbage Charles Babbage] (1834-36), malheureusement jamais construits...&lt;br /&gt;
* la &amp;quot;tabulating business machine&amp;quot; de Hollerith permet d&#039;automatiser les calculs pour le recensement de la population américaine. Ceci donnera ensuite la société &amp;quot;international business machine&amp;quot; (IBM).&lt;br /&gt;
* l&#039;apparition du relais électromécanique (1900) d&#039;une fréquence de 100 Hz, permet la construction du [http://fr.wikipedia.org/wiki/Harvard_Mark_I Harvard Mark I] en 1944&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Les programmes et instructions===&lt;br /&gt;
&lt;br /&gt;
* les [http://fr.wikipedia.org/wiki/Orgue_de_Barbarie orgues de Barbarie]&lt;br /&gt;
* les métiers à tisser de Vaucanson et [http://fr.wikipedia.org/wiki/M%C3%A9tier_Jacquard Jacquard] (1801)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Les ordinateurs &amp;quot;modernes&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
* l&#039;invention du tube à vide permet le développements d&#039;ordinateurs entièrement électroniques : l&#039;[http://fr.wikipedia.org/wiki/ENIAC ENIAC] en est le premier exemplaire (1946) ; il pèse environ 30 tonnes...&lt;br /&gt;
* la machine de Turing (ordinateur théorique)&lt;br /&gt;
* le Manchester Mark I (1948) et l&#039;[http://fr.wikipedia.org/wiki/EDVAC EDVAC] (1951) améliorent l&#039;ENIAC et commencent à ressembler à des ordinateurs modernes&lt;br /&gt;
* l&#039;[http://fr.wikipedia.org/wiki/UNIVAC_I UNIVAC I] est le premier ordinateur commercialisé, en 1951.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rappels d&#039;algorithmique=&lt;br /&gt;
&lt;br /&gt;
==Un exemple==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Exercice :&amp;lt;/u&amp;gt; écrivez un programme qui fait la chose suivante :&lt;br /&gt;
on dispose d&#039;un tableau d&#039;entier &amp;lt;tt&amp;gt;T&amp;lt;/tt&amp;gt; de taille &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;. L&#039;élément &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; du tableau est&lt;br /&gt;
noté &amp;lt;tt&amp;gt;T[i]&amp;lt;/tt&amp;gt;. On veut modifier &amp;lt;tt&amp;gt;T&amp;lt;/tt&amp;gt; en interchangeant le plus petit et le plus grand&lt;br /&gt;
élément.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Solution possible&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 int i=0&lt;br /&gt;
 int max=0   /* indice du maximum */&lt;br /&gt;
 int min=0   /* indice du minimum */&lt;br /&gt;
 &lt;br /&gt;
 if (n==0) then  exit  /* est-ce que le tableau est vide ? */&lt;br /&gt;
 &lt;br /&gt;
 for i:=0 to n-1                /* j&#039;ai pris la convention du C : les tableaux commencent à l&#039;indice 0 */&lt;br /&gt;
   if T[i] &amp;lt; T[min] then min:=i&lt;br /&gt;
   if T[i] &amp;gt; T[max] then max:=i&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 i:=T[min]&lt;br /&gt;
 T[min] := T[max]&lt;br /&gt;
 T[max] := i&lt;br /&gt;
 &lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
==Le langage C, partie 1==&lt;br /&gt;
&lt;br /&gt;
Un exemple caractéristique :&lt;br /&gt;
&lt;br /&gt;
 /* « ouverture » des bibliothèques utilisées */&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /* première fonction : elle prend deux entiers en argument et renvoie un entier */&lt;br /&gt;
 int minimum (int n, int m) {&lt;br /&gt;
   if (n&amp;lt;m) { return(n); }&lt;br /&gt;
   else  { return(m); }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* la fonction principale */&lt;br /&gt;
 int main () {&lt;br /&gt;
   int i=42,x;  /* i et x sont deux variables entières */&lt;br /&gt;
   int j;&lt;br /&gt;
   j=24;&lt;br /&gt;
   x=minimum(i,j*2);&lt;br /&gt;
   printf(&amp;quot;Le minimum de %i et %i est %i.\n&amp;quot;, i, j*2, x);&lt;br /&gt;
   return(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Quelques points importants :&lt;br /&gt;
* il faut explicitement déclarer les bibliothèques utilisées,&lt;br /&gt;
* on n&#039;est pas obligé d&#039;avoir des fonctions autre que la fonction &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, mais les fonctions doivent être déclarées dans l&#039;ordre&lt;br /&gt;
* la fonction &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt; est obligatoire, et il est conseillé de lui donné le type de retour &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* une variable ne « vit » qu&#039;à l&#039;intérieur du bloc &amp;lt;tt&amp;gt;{ ... }&amp;lt;/tt&amp;gt; dans lequel elle est déclarée&lt;br /&gt;
* les variables ne sont pas initialisées automatiquement à 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la syntaxe de base et des exemples concernant les conditions et les boucles, reportez-vous au chapitre [http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node9.html « les bases »] et [http://clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C/node31.html « les tableaux »] du polycopié de Bernard Cassagne.&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;The C programming language&amp;quot;, de Kernighan et Ritchie,&lt;br /&gt;
* « Le langage C », version française du précédent,&lt;br /&gt;
* le polycopié de Bernard Cassagne, disponible [http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C.html ici], au format [http://www-clips.imag.fr/commun/bernard.cassagne/Introduction_ANSI_C.html html] (en ligne) ou [ftp://ftp.imag.fr/pub/labo-CLIPS/commun/C/Introduction_ANSI_C.pdf pdf],&lt;br /&gt;
* « Programmation C », un livre collaboratif sur le mode Wikipedia, disponible [http://fr.wikibooks.org/wiki/Programmation_C ici].&lt;/div&gt;</summary>
		<author><name>Le touzé.florian</name></author>
	</entry>
</feed>