« Exercices en langage C/Tableaux statiques » : différence entre les versions
Contenu supprimé Contenu ajouté
m <source> -> <syntaxhighlight> (phab:T237267) |
Aucun résumé des modifications |
||
Ligne 9 : | Ligne 9 : | ||
La fonction main d'un programme C reçoit en argument : |
La fonction main d'un programme C reçoit en argument : |
||
* un entier '''argc''' indiquant le nombre d'élément du tableau argv; |
* un entier '''argc''' indiquant le nombre d'élément du tableau argv; |
||
* un tableau de |
* un tableau de chaînes de caractère '''argv''' avec : |
||
** argv[0] : Nom d'appel du programme. |
** argv[0] : Nom d'appel du programme. |
||
** argv[i] : Valeur de l'argument de rang i. |
** argv[i] : Valeur de l'argument de rang i. |
||
Ligne 21 : | Ligne 21 : | ||
Nom : argv.c |
Nom : argv.c |
||
Auteur : Thierry46 |
Auteur : Thierry46 |
||
Rôle : Affiche le nom de lancement du programme |
|||
le nombre et les valeurs des paramètres passés passés à ce programme. |
le nombre et les valeurs des paramètres passés passés à ce programme. |
||
Paramètres : |
Paramètres : |
||
- argc : nombre de paramètres |
- argc : nombre de paramètres |
||
- argv : tableau de |
- argv : tableau de chaînes de caractère contenant les paramètres |
||
Code retour : 0 (EXIT_SUCCESS) |
Code retour : 0 (EXIT_SUCCESS) |
||
Pour produire un exécutable avec le compilateur libre GCC : |
Pour produire un exécutable avec le compilateur libre GCC : |
||
Ligne 43 : | Ligne 43 : | ||
(void)printf("Nom d'appel du programme (argv[0]) : %s\n", argv[0]); |
(void)printf("Nom d'appel du programme (argv[0]) : %s\n", argv[0]); |
||
// Affiche le nombre de |
// Affiche le nombre de paramètres passés au programme |
||
(void)printf("Nombre de |
(void)printf("Nombre de paramètres passés au programme : %d\n", argc-1); |
||
// Affiche la valeur des |
// Affiche la valeur des paramètres |
||
for (int i=1; i<argc; i++) |
for (int i=1; i<argc; i++) |
||
{ |
{ |
||
(void)printf(" |
(void)printf("Paramètre %d : %s\n", i, argv[i]); |
||
} |
} |
||
Ligne 60 : | Ligne 60 : | ||
MacMini-TM:~/Documents/developpement/c thierry$ ./argv.exe dudule 1 |
MacMini-TM:~/Documents/developpement/c thierry$ ./argv.exe dudule 1 |
||
Nom d'appel du programme (argv[0]) : ./argv.exe |
Nom d'appel du programme (argv[0]) : ./argv.exe |
||
Nombre de |
Nombre de paramètres passés au programme : 2 |
||
Paramètre 1 : dudule |
|||
Paramètre 2 : 1 |
|||
</pre> |
</pre> |
||
Ligne 74 : | Ligne 74 : | ||
La fonction main : |
La fonction main : |
||
* définira et initialisera le tableau d'entier |
* définira et initialisera le tableau d'entier |
||
* |
* récupérera dans son tableau d'argument argv le nombre à chercher. |
||
* appellera la fonction ''position''. |
* 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é. |
* affichera l'indice de l'élément dans le tableau ou un message indiquant que le nombre n'a pas été trouvé. |
||
Ligne 89 : | Ligne 89 : | ||
/* |
/* |
||
Nom : position.c |
Nom : position.c |
||
Rôle : Affiche le nom de lancement du programme |
|||
le nombre et les valeurs des paramètres passés passés à ce programme. |
le nombre et les valeurs des paramètres passés passés à ce programme. |
||
Paramètres : |
Paramètres : |
||
- argc : nombre de paramètres |
- argc : nombre de paramètres |
||
- argv : tableau de |
- argv : tableau de chaînes de caractères contenant les paramètres |
||
Code retour : 0 (EXIT_SUCCESS) |
Code retour : 0 (EXIT_SUCCESS) |
||
Pour produire un exécutable avec le compilateur libre GCC : |
Pour produire un exécutable avec le compilateur libre GCC : |
||
Ligne 121 : | Ligne 121 : | ||
{ |
{ |
||
(void)fprintf(stderr, |
(void)fprintf(stderr, |
||
"%s : Cherche un entier x passe en |
"%s : Cherche un entier x passe en paramètre\n" |
||
"usage : %s x\n", |
"usage : %s x\n", |
||
argv[0], argv[0]); |
argv[0], argv[0]); |
||
Ligne 133 : | Ligne 133 : | ||
} // if (argc != 2) |
} // if (argc != 2) |
||
// |
// Récupère le nombre passé en paramètre et le convertit |
||
cr = sscanf(argv[1], "%d", &x); |
cr = sscanf(argv[1], "%d", &x); |
||
if (cr != 1) |
if (cr != 1) |
||
Ligne 143 : | Ligne 143 : | ||
} // if (cr != 1) |
} // if (cr != 1) |
||
// Appel de la fonction position et affichage du |
// Appel de la fonction position et affichage du résultat. |
||
resultat = position(tableau, taille, x); |
resultat = position(tableau, taille, x); |
||
if (resultat != -1) |
if (resultat != -1) |
||
Ligne 181 : | Ligne 181 : | ||
MacMini-TM:~/c thierry$ gcc -Wall -std=c99 -o position.exe position.c |
MacMini-TM:~/c thierry$ gcc -Wall -std=c99 -o position.exe position.c |
||
MacMini-TM:~/c thierry$ ./position.exe |
MacMini-TM:~/c thierry$ ./position.exe |
||
./position.exe : Cherche un entier x passe en |
./position.exe : Cherche un entier x passe en paramètre |
||
usage : ./position.exe x |
usage : ./position.exe x |
||
Valeurs contenues dans le tableau : 2 5 45 3 9 |
Valeurs contenues dans le tableau : 2 5 45 3 9 |
Version actuelle du 28 août 2022 à 15:35
Parcours d'un tableau[modifier | modifier le wikicode]
É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 chaînes de caractère argv avec :
- argv[0] : Nom d'appel du programme.
- argv[i] : Valeur de l'argument de rang i.
Solution
Le fichier source en c99 : /*
Nom : argv.c
Auteur : Thierry46
Rôle : 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 chaînes de caractère contenant les paramètres
Code retour : 0 (EXIT_SUCCESS)
Pour produire un exécutable avec le compilateur libre GCC :
gcc -Wall -std=c99 -o argv.exe argv.c
Pour exécuter, tapez : ./argv.exe
Version : 1.0 du 16/1/2008
Licence : GNU GPL
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// Affiche le nom de lancement du programme
(void)printf("Nom d'appel du programme (argv[0]) : %s\n", argv[0]);
// Affiche le nombre de paramètres passés au programme
(void)printf("Nombre de paramètres passés au programme : %d\n", argc-1);
// Affiche la valeur des paramètres
for (int i=1; i<argc; i++)
{
(void)printf("Paramètre %d : %s\n", i, argv[i]);
}
return EXIT_SUCCESS;
} // int main(...
MacMini-TM:~/Documents/developpement/c thierry$ gcc -Wall -std=c99 -o argv.exe argv.c MacMini-TM:~/Documents/developpement/c thierry$ ./argv.exe dudule 1 Nom d'appel du programme (argv[0]) : ./argv.exe Nombre de paramètres passés au programme : 2 Paramètre 1 : dudule Paramètre 2 : 1 |
Position d'un élément dans un tableau[modifier | modifier le wikicode]
Écrire 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é.
Solution
Le fichier source en C99 : /*
Nom : position.c
Rôle : 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 chaînes de caractères contenant les paramètres
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 };
int taille;
int x = 0;
int cr = 0;
int resultat;
// Détermination de la taille du tableau
taille = (int)(sizeof(tableau)/sizeof(tableau[0]));
// Contrôle nombre de paramètre et affiche usage
if (argc != 2)
{
(void)fprintf(stderr,
"%s : Cherche un entier x passe en paramètre\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)
// Récupère le nombre passé en paramètre et le convertit
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)
// Appel de la fonction position et affichage du résultat.
resultat = position(tableau, taille, x);
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
Rôle .......... : Retourne la position de l'entier x dans la tableau t
Paramètres .... :
- t : tableau d'entiers passé en entier.
- taille : nombre d’éléments 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(...
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 paramètre 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 ! |