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

→‎position d'un élément dans un tableau : Modification exercice position.
(Ajout Exercice parcours de tableau.)
(→‎position d'un élément dans un tableau : Modification exercice position.)
}}</div>
 
== positionPosition d'un élément dans un tableau ==
 
Ecrire un programme ''position.c'' contenant une fonction quiprincipale donne l'indice d'main'' déterminant si un élémententier xest donnécontenu dans un tableau, oustatique -1par si x nl'estappel pasà dansune lefonction tableau''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 =
 
Le fichier source prêten à compilerC99 :
<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 <stdlib.h>
 
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 ? ");
cr = sscanf(argv[1], scanf("%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)
 
// Appel de la printf("Lafonction position deet x est : %d\n", position(tableau,affichage 5,du x));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>
 
<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>
 
227

modifications