« Exercices en langage C/Tableaux statiques » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Thierry46 (discussion | contributions)
Ajout Exercice parcours de tableau.
Thierry46 (discussion | contributions)
→‎position d'un élément dans un tableau : Modification exercice position.
Ligne 66 : Ligne 66 :
}}</div>
}}</div>


== position d'un élément dans un tableau ==
== Position d'un élément dans un tableau ==


Ecrire une fonction qui donne l'indice d'un élément x donné dans un tableau, ou -1 si x n'est pas dans le tableau.
Ecrire un programme ''position.c'' contenant une fonction principale ''main'' déterminant si un entier est contenu dans un tableau statique par l'appel à une fonction ''position''.


La fonction main :
Le tableau contiendra des éléments de type <tt>int</tt>, la fonction retournera une valeur de type <tt>int</tt>.
* définira et initialisera le tableau d'entier
* récupèrera dans son tableau d'argument argv le nombre à chercher.
* appellera la fonction ''position''.
* affichera l'indice de l'élément dans le tableau ou un message indiquant que le nombre n'a pas été trouvé.


La fonction ''position'' :
* aura pour prototype : <code>static int position(int t[], int taille, int x)</code>.
* donnera l'indice d'un élément x dans le tableau t, ou -1 si x n'est pas trouvé.


<div style="width:70%">{{Boîte déroulante|titre=Solution|contenu =
<div style="width:70%">{{Boîte déroulante|titre=Solution|contenu =


Le fichier source prêt à compiler :
Le fichier source en C99 :
<source lang="c">
<source lang="c">
/*
Nom : position.c
Role : Affiche le nom de lancement du programme
le nombre et les valeurs des paramètres passés passés à ce programme.
Paramètres :
- argc : nombre de paramètres
- argv : tableau de chaine de caractere contenant les parametres
Code retour : 0 (EXIT_SUCCESS)
Pour produire un exécutable avec le compilateur libre GCC :
gcc -Wall -std=c99 -o position.exe position.c
Pour exécuter, tapez : ./position.exe
Version : 1.0 du 16/1/2008
Licence : GNU GPL
*/
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>

int position (int t[], int taille, int x)
static int position(int t[], int taille, int x);
int main(int argc, char *argv[])
{
{
int tableau[] = { 2, 5, 45, 3, 9 };
while (taille > 0)
int taille;
{
int x = 0;
--taille;
int cr = 0;
if (t[taille] == x)
int resultat;
return taille;
}
return -1;
}


// Determination de la taille du tableau
int main(void)
taille = (int)(sizeof(tableau)/sizeof(tableau[0]));
{
int tableau[] = { 2, 5, 45, 3, 9 };
// Controle nombre de parametre et affiche usage
int x;
if (argc != 2)
{
(void)fprintf(stderr,
"%s : Cherche un entier x passe en parametre\n"
"usage : %s x\n",
argv[0], argv[0]);
(void)fputs("Valeurs contenues dans le tableau : ", stderr);
for (int i=0; i<taille; i++)
{
(void)fprintf(stderr, "%d ", tableau[i]);
}
(void)fputs("\n",stderr);
exit(EXIT_FAILURE);
} // if (argc != 2)


// Recupere le nombre passe en parametre et le convertit
printf("x ? ");
scanf("%d", &x);
cr = sscanf(argv[1], "%d", &x);
if (cr != 1)
{
(void)fprintf(stderr,
"Erreur : parametre \"%s\" invalide : doit etre un entier.\n",
argv[1]);
exit(EXIT_FAILURE);
} // if (cr != 1)


printf("La position de x est : %d\n", position(tableau, 5, x));
// Appel de la fonction position et affichage du resultat.
resultat = position(tableau, taille, x);
return 0;
if (resultat != -1)
{
(void)printf("La position de %d est : %d\n", x, resultat);
}
else
{
(void)printf("%d non trouve !\n", x);
}

return EXIT_SUCCESS;
}
}

/*
Fonction ...... : position
Role .......... : Retourne la position de l'entier x dans la tableau t
Parametres .... :
- t : tableau d'entiers passé en entier.
- taille : nombre d'elements du tableau
- x : valeur a rechercher.
Retour : L'indice dans le tableau de l'élément x ou -1 si non trouve.
*/
static int position(int t[], int taille, int x)
{
// On commence la recherche à partir de la fin du tableau
int indice = taille - 1;
while ((indice >= 0) && (t[indice] != x))
{
indice--;
}
return indice;
} // static int position(...
</source>
</source>


<pre>
MacMini-TM:~/c thierry$ gcc -Wall -std=c99 -o position.exe position.c
MacMini-TM:~/c thierry$ ./position.exe
./position.exe : Cherche un entier x passe en parametre
usage : ./position.exe x
Valeurs contenues dans le tableau : 2 5 45 3 9
MacMini-TM:~/c thierry$ ./position.exe a
Erreur : parametre "a" invalide : doit etre un entier.
MacMini-TM:~/c thierry$ ./position.exe 5
La position de 5 est : 1
MacMini-TM:~/c thierry$ ./position.exe 99
99 non trouve !
</pre>
}}</div>
}}</div>



Version du 16 janvier 2008 à 16:04

Parcours d'un tableau

Écrire un programme nommé argv.c qui affiche :

  • son nom de lancement (argv[0]);
  • le nombre des ces arguments;
  • la valeur de chaque argument reçu.

Rappels : La fonction main d'un programme C reçoit en argument :

  • un entier argc indiquant le nombre d'élément du tableau argv;
  • un tableau de chaines de caractère argv avec :
    • argv[0] : Nom d'appel du programme.
    • argv[i] : Valeur de l'argument de rang i.

Position d'un élément dans un tableau

Ecrire un programme position.c contenant une fonction principale main déterminant si un entier est contenu dans un tableau statique par l'appel à une fonction position.

La fonction main :

  • définira et initialisera le tableau d'entier
  • récupèrera dans son tableau d'argument argv le nombre à chercher.
  • appellera la fonction position.
  • affichera l'indice de l'élément dans le tableau ou un message indiquant que le nombre n'a pas été trouvé.

La fonction position :

  • aura pour prototype : static int position(int t[], int taille, int x).
  • donnera l'indice d'un élément x dans le tableau t, ou -1 si x n'est pas trouvé.