<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?action=history&amp;feed=atom&amp;title=INFO517-cours2</id>
	<title>INFO517-cours2 - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?action=history&amp;feed=atom&amp;title=INFO517-cours2"/>
	<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO517-cours2&amp;action=history"/>
	<updated>2026-05-21T04:56:10Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO517-cours2&amp;diff=3065&amp;oldid=prev</id>
		<title>Lvaux le 18 novembre 2008 à 22:55</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO517-cours2&amp;diff=3065&amp;oldid=prev"/>
		<updated>2008-11-18T22:55:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 18 novembre 2008 à 22:55&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 1 :&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 1 :&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Séance 2 du Cours-TD de [[INFO517|Programmation C]].&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Rappels et précisions; fonctions; tableaux. &lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Rappels et précisions; fonctions; tableaux. &lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lvaux</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO517-cours2&amp;diff=2861&amp;oldid=prev</id>
		<title>Lvaux : Création de la page</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=INFO517-cours2&amp;diff=2861&amp;oldid=prev"/>
		<updated>2008-11-10T17:29:10Z</updated>

		<summary type="html">&lt;p&gt;Création de la page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Rappels et précisions; fonctions; tableaux. &lt;br /&gt;
&lt;br /&gt;
== Les exemples vus en cours ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;puissance-v1.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define MAXEXP 16&lt;br /&gt;
&lt;br /&gt;
/* Fonction puissance(a: int, b: int) : int &lt;br /&gt;
 * renvoie a à la puissance b, si b positif, 1 sinon */ &lt;br /&gt;
int puissance (int a, int b) {&lt;br /&gt;
	int i, ret ;&lt;br /&gt;
	ret = 1 ; &lt;br /&gt;
	for (i=0; i&amp;lt;b; ++i) /* ++i incrémente i */&lt;br /&gt;
		ret = a * ret ; &lt;br /&gt;
	return ret ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Procédure affiche(a: int, b: int)&lt;br /&gt;
 * formatte le résultat de puissance(a,b) */ &lt;br /&gt;
void affiche(int a, int b) {&lt;br /&gt;
	printf(&amp;quot;%2d^%2d = %10d\n&amp;quot;,a,b,puissance(a,b)) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fonction principale: affiche les puissances de 2, de 1 à 2^MAXEXP */ &lt;br /&gt;
void main () {&lt;br /&gt;
	int i ; &lt;br /&gt;
	for (i=0; i&amp;lt;=MAXEXP; ++i)&lt;br /&gt;
		affiche(2,i) ; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;puissance-v2.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define MAXEXP 16&lt;br /&gt;
&lt;br /&gt;
/* Prototype de la fonction puissance(a: int, b: int) : int &lt;br /&gt;
 */&lt;br /&gt;
int puissance (int a, int b) ; &lt;br /&gt;
&lt;br /&gt;
/* Procédure affiche(a: int, b: int)&lt;br /&gt;
 * formatte le résultat de puissance(a,b) */ &lt;br /&gt;
void affiche(int a, int b) {&lt;br /&gt;
	printf(&amp;quot;%2d^%2d = %10d\n&amp;quot;,a,b,puissance(a,b)) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fonction principale: affiche les puissances de 2, de 1 à 2^MAXEXP */ &lt;br /&gt;
void main () {&lt;br /&gt;
	int i ; &lt;br /&gt;
	for (i=0; i&amp;lt;=MAXEXP; ++i)&lt;br /&gt;
		affiche(2,i) ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code de la fonction puissance :&lt;br /&gt;
 * puissance(a,b) renvoie a à la puissance b, si b positif, 1 sinon */ &lt;br /&gt;
int puissance (int a, int b) {&lt;br /&gt;
	int ret ;&lt;br /&gt;
	ret = 1 ; &lt;br /&gt;
	/* On utilise l&amp;#039;argument b comme une variable locale */&lt;br /&gt;
	for (/* pas d&amp;#039;initialisation nécessaire */; b&amp;gt;0; --b) &lt;br /&gt;
		ret = a * ret ; &lt;br /&gt;
	return ret ; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;fibonacci.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define MAX 30&lt;br /&gt;
&lt;br /&gt;
/* calcule u[n], où u[0]=u[1]=1 et u[n+2]=u[n+1]+u[n] */&lt;br /&gt;
int fibo (int n, int rec) {&lt;br /&gt;
	if (n&amp;lt;=1) return 1 ; &lt;br /&gt;
	else return (fibo(n-1,rec+1)+fibo(n-2,rec+1)) ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* affiche fibo(n) pour n de 0 à MAX */ &lt;br /&gt;
int main () {&lt;br /&gt;
	int i ; &lt;br /&gt;
	for (i=0;i&amp;lt;=MAX;++i)&lt;br /&gt;
		printf(&amp;quot;fibo(%2d)=%8d\n&amp;quot;,i,fibo(i,0)) ; &lt;br /&gt;
	return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tracerec.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define N 15&lt;br /&gt;
&lt;br /&gt;
/* Procédure blanks(n: int)&lt;br /&gt;
 * insère n espaces. */&lt;br /&gt;
void blanks (int n) {&lt;br /&gt;
        for(;n&amp;gt;0;--n) putchar(&amp;#039; &amp;#039;) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Calcule fibo(n) (voir fibo.c) et affiche le résultat.&lt;br /&gt;
 * Cet affichage dans la fonction permet de tracer le&lt;br /&gt;
 * flot de récursion (l&amp;#039;ordre dans lequel les appels se font).&lt;br /&gt;
 *&lt;br /&gt;
 * On représente la profondeur de récursion par l&amp;#039;indentation,&lt;br /&gt;
 * au moyen du second argument : tous les affichages sont décalés&lt;br /&gt;
 * de rec espaces. L&amp;#039;entier rec est incrémenté dans l&amp;#039;appel récursif,&lt;br /&gt;
 * et on démarre avec rec=0 dans main()&lt;br /&gt;
 * */&lt;br /&gt;
int fibo_rec (int n, int rec) {&lt;br /&gt;
        blanks(rec) ; printf(&amp;quot;fibo(%2d)=?\n&amp;quot;,n) ;&lt;br /&gt;
        if (n&amp;lt;=1) {&lt;br /&gt;
                blanks(rec) ; printf(&amp;quot;fibo(%2d)=1\n&amp;quot;,n) ;&lt;br /&gt;
                return 1 ;&lt;br /&gt;
        } else {&lt;br /&gt;
		/* On peut déclarer des variables locales à un bloc */&lt;br /&gt;
                int ret=fibo_rec(n-1,rec+1)+fibo_rec(n-2,rec+1) ;&lt;br /&gt;
                blanks(rec) ; printf(&amp;quot;fibo(%2d)=%d\n&amp;quot;,n,ret) ;&lt;br /&gt;
		return ret ;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Calcule fibo(N) avec affichage des étapes de récursion */&lt;br /&gt;
int main () {&lt;br /&gt;
        fibo_rec(N,0) ;&lt;br /&gt;
        return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;segfault.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* CE CODE EST VOLONTAIREMENT FAUTIF ! */&lt;br /&gt;
&lt;br /&gt;
/* Notre première erreur de segmentation: &lt;br /&gt;
 * les appels récursifs s&amp;#039;empilent sans limite et on sort de la mémoire&lt;br /&gt;
 * disponible. */&lt;br /&gt;
&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#define MAX 30&lt;br /&gt;
&lt;br /&gt;
/* calcule u[n], où u[0]=u[1]=1 et u[n+2]=u[n+1]+u[n] */&lt;br /&gt;
int fibo (int n, int rec) {&lt;br /&gt;
	return (fibo(n-1,rec+1)+fibo(n-2,rec+1)) ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* affiche fibo(n) pour n de 0 à MAX */ &lt;br /&gt;
int main () {&lt;br /&gt;
	int i ; &lt;br /&gt;
	for (i=0;i&amp;lt;=MAX;++i)&lt;br /&gt;
		printf(&amp;quot;fibo(%2d)=%8d\n&amp;quot;,i,fibo(i,0)) ; &lt;br /&gt;
	return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;textstat.c&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* En théorie, les valeurs entières des caractères &lt;br /&gt;
 * sont dans un intervalle non précisé par la norme.&lt;br /&gt;
 *&lt;br /&gt;
 * Dans cet exemple, on considère que les caractères sont des entiers sur 8&lt;br /&gt;
 * bits non signés (cf. CHAR_MIN, CHAR_MAX).&lt;br /&gt;
 *&lt;br /&gt;
 * Ceci était passé sous silence lors du cours.&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#define CHAR_MIN 0&lt;br /&gt;
#define CHAR_MAX 255&lt;br /&gt;
&lt;br /&gt;
/* CHAR_NUM = CHAR_MAX - CHAR_MIN + 1 */&lt;br /&gt;
&lt;br /&gt;
#define CHAR_NUM 256 &lt;br /&gt;
&lt;br /&gt;
/* Une macro évidente */&lt;br /&gt;
void aff (char c, int n) { printf(&amp;quot;%c:%2d    &amp;quot;,c,n) ; }&lt;br /&gt;
&lt;br /&gt;
/* Compte le nombre d&amp;#039;occurrences de chaque caractère &lt;br /&gt;
 * et affiche certains résultats */ &lt;br /&gt;
int main() {&lt;br /&gt;
	int c, i ; &lt;br /&gt;
	int nb [CHAR_NUM] ; &lt;br /&gt;
&lt;br /&gt;
	/* Mise à zéro */&lt;br /&gt;
	for (i=0;i&amp;lt;CHAR_NUM;++i) &lt;br /&gt;
		nb[i]=0 ;&lt;br /&gt;
&lt;br /&gt;
	/* Calcul */&lt;br /&gt;
	while((c=getchar()) != EOF) &lt;br /&gt;
		++nb[CHAR_MIN+c] ; &lt;br /&gt;
&lt;br /&gt;
	/* Affichage */ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/* Les lettres minuscules sont consécutives de &amp;#039;a&amp;#039; à &amp;#039;z&amp;#039;. */&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;Minuscules:\n&amp;quot;) ; &lt;br /&gt;
	for (c=&amp;#039;a&amp;#039;; c&amp;lt;=&amp;#039;z&amp;#039; ; ++c) &lt;br /&gt;
		aff(c,nb[CHAR_MIN+c]) ;&lt;br /&gt;
&lt;br /&gt;
	/* De même pour les majuscules de &amp;#039;A&amp;#039; à &amp;#039;Z&amp;#039;. */&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;\nMajuscules:\n&amp;quot;) ; &lt;br /&gt;
	for (c=&amp;#039;A&amp;#039;; c&amp;lt;=&amp;#039;Z&amp;#039; ; ++c) &lt;br /&gt;
		aff(c,nb[CHAR_MIN+c]) ;&lt;br /&gt;
	&lt;br /&gt;
	/* Et les chiffres de &amp;#039;0&amp;#039; à &amp;#039;9&amp;#039;. */&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;\nChiffres:\n&amp;quot;) ; &lt;br /&gt;
	for (c=&amp;#039;0&amp;#039;; c&amp;lt;=&amp;#039;9&amp;#039; ; ++c) &lt;br /&gt;
		aff(c,nb[CHAR_MIN+c]) ;&lt;br /&gt;
	&lt;br /&gt;
	printf(&amp;quot;\nSauts de lignes: %d\n&amp;quot;,nb[CHAR_MIN+&amp;#039;\n&amp;#039;]) ;&lt;br /&gt;
&lt;br /&gt;
	return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exercices pour le 6 octobre ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sur les fonctions ===&lt;br /&gt;
&lt;br /&gt;
* Réécrire le programme [[INFO517#Solutions_possibles_pour_les_exercices|&amp;lt;tt&amp;gt;conversion.c&amp;lt;/tt&amp;gt;]] en utilisant une fonction pour l&amp;#039;affichage.  Rendre ce programme plus modulaire en écrivant une procédure avec le prototype &amp;lt;tt&amp;gt;void francs_euros (int min, int max, int pas)&amp;lt;/tt&amp;gt; qui afffiche la conversion de &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; francs en euros pour &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; variant de &amp;lt;tt&amp;gt;min&amp;lt;/tt&amp;gt; à &amp;lt;tt&amp;gt;max&amp;lt;/tt&amp;gt; par pas de &amp;lt;tt&amp;gt;pas&amp;lt;/tt&amp;gt; et une procédure &amp;lt;tt&amp;gt;void euros_francs (int min, int max, int pas)&amp;lt;/tt&amp;gt; qui affiche la même chose mais dans l&amp;#039;autre sens de conversion.&lt;br /&gt;
&lt;br /&gt;
* Écrire une fonction &amp;lt;tt&amp;gt;int fact (int n)&amp;lt;/tt&amp;gt; qui calcule la [http://fr.wikipedia.org/wiki/Factorielle factorielle] de &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; de deux manières différentes: une par récursion, une en utilisant une boucle. Essayer ces fonctions sur des valeurs pas trop petites et détecter quand ça dégénère.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sur les tableaux et les chaînes ===&lt;br /&gt;
&lt;br /&gt;
* Écrire une procédure &amp;lt;tt&amp;gt;void aff (int t[], int n)&amp;lt;/tt&amp;gt; qui affiche les &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; premiers éléments du tableau &amp;lt;tt&amp;gt;t&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* On donne le programme:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void incr (int n) {&lt;br /&gt;
	++n ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void incr_t0 (int t[]) {&lt;br /&gt;
	++t[0] ; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main () {&lt;br /&gt;
	int n = 0 ; &lt;br /&gt;
	int t[1] = { 0 } ; &lt;br /&gt;
	incr(n) ; &lt;br /&gt;
	incr_t0(t) ;&lt;br /&gt;
	printf(&amp;quot;n: %d\n&amp;quot;,n) ; &lt;br /&gt;
	printf(&amp;quot;t[0]: %d\n&amp;quot;,t[0]) ; &lt;br /&gt;
	return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Compiler et exécuter ce programme. Que remarque-t-on ? Qu&amp;#039;en déduire sur les tableaux comme arguments de fonctions.&lt;br /&gt;
&lt;br /&gt;
* Que fait le programme &amp;lt;tt&amp;gt;fin_chaine.c&amp;lt;/tt&amp;gt; suivant ? Expliquer.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main () {&lt;br /&gt;
	printf(&amp;quot;Bateau.\n\0Et puis aussi...&amp;quot;) ;&lt;br /&gt;
	return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Écrire un programme qui affiche les lignes données en entrée seulement si elles comportent plus de 20 caractères. Penser à structurer intelligemment.&lt;br /&gt;
*&lt;br /&gt;
* Écrire une fonction &amp;lt;tt&amp;gt;void pal(char s[])&amp;lt;/tt&amp;gt; qui renvoie &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; si la chaîne &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; est un [http://fr.wikipedia.org/wiki/Palindrome palindrome] et &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; sinon.&lt;br /&gt;
&lt;br /&gt;
* Écrire une procédure &amp;lt;tt&amp;gt;void renverse(char s[])&amp;lt;/tt&amp;gt; qui renverse la chaîne &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Solutions possibles ==&lt;br /&gt;
&lt;br /&gt;
Un exemple complet de programme utilisant les fonctions (on n&amp;#039;hésite pas à en rajouter): &lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  #define UN_EURO 6.55957 /* un euro en francs */ &lt;br /&gt;
  &lt;br /&gt;
  void aff_col (int a, float b)&lt;br /&gt;
  {&lt;br /&gt;
      printf(&amp;quot;   %3d\t\t    %6.2f\n&amp;quot;, a, b ) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void aff_en_tete (const char a[], const char b[])&lt;br /&gt;
  {&lt;br /&gt;
      printf(&amp;quot;%s\t\t%s\n&amp;quot;, a, b ) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void table_conv (float taux, int min, int max, int pas)&lt;br /&gt;
  {&lt;br /&gt;
          int i ;&lt;br /&gt;
          if (pas &amp;gt; 0)&lt;br /&gt;
                  /* si le pas est positif on va du min au max */&lt;br /&gt;
                  for (i=min; i&amp;lt;=max; i=i+pas)&lt;br /&gt;
                          aff_col(i,taux*i) ;&lt;br /&gt;
          else if (pas &amp;lt; 0)&lt;br /&gt;
                  /* si le pas est négatif on va du max au min */&lt;br /&gt;
                  for (i=max; i&amp;gt;=min; i=i+pas)&lt;br /&gt;
                          aff_col(i,taux*i) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void francs_euros (int min, int max, int pas)&lt;br /&gt;
  {&lt;br /&gt;
          aff_en_tete(&amp;quot;Francs&amp;quot;,&amp;quot;Euros&amp;quot;) ;&lt;br /&gt;
          table_conv (1/UN_EURO,min,max,pas) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void euros_francs (int min, int max, int pas)&lt;br /&gt;
  {&lt;br /&gt;
          aff_en_tete(&amp;quot;Euros&amp;quot;,&amp;quot;Francs&amp;quot;) ;&lt;br /&gt;
          table_conv (UN_EURO,min,max,pas) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  int main()&lt;br /&gt;
  {&lt;br /&gt;
          francs_euros(10,100,10) ;&lt;br /&gt;
          euros_francs(1,10,-1) ;&lt;br /&gt;
          return 0 ;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Sur les factorielles: &lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  #define MAX 30&lt;br /&gt;
  &lt;br /&gt;
  /* calcule n! par récurrence sur n  */&lt;br /&gt;
  unsigned long int fact_rec (unsigned int n) {&lt;br /&gt;
          if (n&amp;lt;=1) return 1 ;&lt;br /&gt;
          else return n*fact_rec(n-1) ; &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /* calcule n! par comme un produit itéré */&lt;br /&gt;
  unsigned long int fact_it (unsigned int n) {&lt;br /&gt;
  	unsigned int i ; &lt;br /&gt;
  	unsigned long int acc = 1; &lt;br /&gt;
  	for (i=2;i&amp;lt;=n;++i)&lt;br /&gt;
  		acc=i*acc ;&lt;br /&gt;
  	return acc ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  /* fonctions d&amp;#039;affichage */&lt;br /&gt;
  void aff (unsigned int n, unsigned long int res, const char nom[]) {&lt;br /&gt;
  	printf(&amp;quot;On calcule %u!=%lu par %s\n&amp;quot;, n, res, nom) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void aff_fact_rec (unsigned int n) {&lt;br /&gt;
  	aff(n,fact_rec(n),&amp;quot;fact_rec&amp;quot;) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void aff_fact_it (unsigned int n) {&lt;br /&gt;
  	aff(n,fact_it(n),&amp;quot;fact_it&amp;quot;) ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /* affiche fact_rec(n) et fact_it(n) pour n de 0 à MAX */&lt;br /&gt;
  /* noter que malgré toutes nos précautions, ça dégénère vite, &lt;br /&gt;
   * car n! croit vite */&lt;br /&gt;
  int main () {&lt;br /&gt;
  	unsigned int i ;&lt;br /&gt;
  	for (i=1; i&amp;lt;MAX; ++i) {&lt;br /&gt;
  		aff_fact_rec(i) ;&lt;br /&gt;
  		aff_fact_it(i) ;&lt;br /&gt;
  	}&lt;br /&gt;
          return 0 ;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Afficher un tableau d&amp;#039;entiers: &lt;br /&gt;
  /* Affiche les n premiers éléments du tableau t sous la forme &lt;br /&gt;
   * {t[0],t[1],...,t[n-1]} &lt;br /&gt;
   * */&lt;br /&gt;
  void aff (int t[], int n) {&lt;br /&gt;
  	int i ; &lt;br /&gt;
  	putchar(&amp;#039;{&amp;#039;) ;&lt;br /&gt;
  	for (i=0;i&amp;lt;n;++i) {&lt;br /&gt;
  		printf(&amp;quot;%d&amp;quot;,t[i]) ; &lt;br /&gt;
  		if (i!=n-1)&lt;br /&gt;
  			putchar(&amp;#039;,&amp;#039;) ;&lt;br /&gt;
  	}&lt;br /&gt;
  	putchar(&amp;#039;}&amp;#039;) ;&lt;br /&gt;
  	putchar(&amp;#039;\n&amp;#039;) ;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Afficher uniquement les lignes avec au moins 20 caractères&lt;br /&gt;
(ici, une version plus générique):&lt;br /&gt;
  void ligne_au_moins (int n) {&lt;br /&gt;
          char s[n] ;&lt;br /&gt;
          int c = getchar() ;&lt;br /&gt;
          while (c != EOF) {&lt;br /&gt;
                  // Dans cette boucle, on traite une ligne, qui commence par c.&lt;br /&gt;
                  int i = 0 ;&lt;br /&gt;
                  // On commence par essayer de stocker les n premiers caractères :&lt;br /&gt;
                  while (c != &amp;#039;\n&amp;#039; &amp;amp;&amp;amp; c != EOF &amp;amp;&amp;amp; i&amp;lt;n) {&lt;br /&gt;
                          s[i] = c ;&lt;br /&gt;
                          ++ i ;&lt;br /&gt;
                          c = getchar() ;&lt;br /&gt;
                  }&lt;br /&gt;
                  // Si on a lu n caractères sans rencontrer de retour à la ligne&lt;br /&gt;
                  // ni de fin de fichier, on recopie et on vide la ligne.&lt;br /&gt;
                  if (i==n) {&lt;br /&gt;
                          // On recopie s&lt;br /&gt;
                          for (i=0; i&amp;lt;n; ++i)&lt;br /&gt;
                                  putchar(s[i]) ;&lt;br /&gt;
                          // On recopie la fin de la ligne&lt;br /&gt;
                          while (c != &amp;#039;\n&amp;#039; &amp;amp;&amp;amp; c != EOF) {&lt;br /&gt;
                                  putchar(c) ;&lt;br /&gt;
                                  c = getchar() ;&lt;br /&gt;
                          }&lt;br /&gt;
                          // Retour à la ligne, si besoin&lt;br /&gt;
                          if (c == &amp;#039;\n&amp;#039;) {&lt;br /&gt;
                                  putchar(c) ;&lt;br /&gt;
                                  c = getchar () ;&lt;br /&gt;
                          }&lt;br /&gt;
                  } else if (c == &amp;#039;\n&amp;#039;) {&lt;br /&gt;
                          // Si la ligne se termine avant le n-ième caractère, &lt;br /&gt;
                          // on passe à la suivante.&lt;br /&gt;
                          c = getchar() ;&lt;br /&gt;
                  }&lt;br /&gt;
          }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Pour le test de palindrome et le renversement, on a d&amp;#039;abord besoin de connaître la longueur de la chaîne:&lt;br /&gt;
  unsigned int longueur (char s[]) {&lt;br /&gt;
  	unsigned int l ;&lt;br /&gt;
  	for (l=0; s[l]!=&amp;#039;\0&amp;#039;; ++l) ; &lt;br /&gt;
  	return l ;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  int pal (char s[]) {&lt;br /&gt;
  	unsigned int l = longueur(s) ;&lt;br /&gt;
  	int i ; &lt;br /&gt;
  	int ret = 1 ; &lt;br /&gt;
  	// On parcourt la moitié du tableau (au plus) et on s&amp;#039;arrête si jamais&lt;br /&gt;
  	// on trouve des valeurs différentes dans des cases symétriques.&lt;br /&gt;
  	for (i=0; i&amp;lt;l/2 &amp;amp;&amp;amp; ret ; ++i)&lt;br /&gt;
  		ret = (s[i]==s[l-i-1]) ;&lt;br /&gt;
  	return ret ;&lt;br /&gt;
  }&lt;br /&gt;
  	&lt;br /&gt;
  void renverse (char s[]) {&lt;br /&gt;
  	unsigned int l = longueur(s) ;&lt;br /&gt;
  	int i ; &lt;br /&gt;
  	char c ; &lt;br /&gt;
  	// On parcourt la moitié du tableau (au plus).&lt;br /&gt;
  	for (i=0; i&amp;lt;l/2 ; ++i) {&lt;br /&gt;
  		c = s[i] ; &lt;br /&gt;
  		s[i] = s[l-i-1] ; &lt;br /&gt;
  		s[l-i-1] = c ; &lt;br /&gt;
  	}&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Lvaux</name></author>
	</entry>
</feed>