Chaque étudiant possède un accès au serveur WORKBOOT
https://sites.google.com/view/workboot/accueil
Le travail s'y fera dans le répertoire Works
on y retrouvera tp0 , tp1 .. etc (pour être noté)
Les paramètres et le système, communication avec le terminal
EXIT_SUCCESS (vu dans le fichier .h stdlib.h)
EXIT_FAILURE
int argc
char ** argv
Compilation et debugger:
gcc hello.c -o hello -ansi -pedantic -Wall -g
pour debugger:
gdb hello (un outil précieux pour bien comprendre le langage et pour trouver vos BUGs)
On veut un programme qui va faire cela :
./bonjour
Donner moi en argument votre prenom SVP
./bonjour etudiant
Bonjour etudiant
Algorithme en pseudo code:
fonction main
DEBUT de main ( argc entier contenant le nombre d'argument passé au programme,
argv est un tableau de chaîne de caractère )
Si argc est diffèrent de 2
debut Si
Afficher a l'utilisateur qu'il faut donner en paramètre le prenom
Fin de main(sortie avec erreur)
fin Si
le caractere en position 2 de argv n°2(argv[1]) est = au caracter null (0)
Afficher à l'utilisateur "Bonjour " et argv[1]
FIN de main (sortie avec succès)
et ce qui donne en C:
#include <stdio.h> /* pour le printf */
#include <stdlib.h> /* pour le EXIT_SUCCESS */
int main (int argc, char **argv)
{
if (argc!=2) /* si il n y a pas un argument derriere l executable*/
{
printf("Il me faudrait votre prenom en parametre \n");
return EXIT_FAILURE;
}
argv[1][2]=0;
printf("Bonjour %s \n", argv[1]);
return EXIT_SUCCESS;
}
Présentation de la chaîne de caractère
#include <stdio.h> /* pour le printf */
#include <stdlib.h> /* pour le EXIT_SUCCESS */
int main (int argc, char **argv)
{
char chaine[100];
if (argc!=2) /* si il n y a pas un argument derriere l executable*/
{
printf("Il me faudrait un parametre \n");
return EXIT_FAILURE;
}
chaine [0]= argv[1][0];
chaine [1]= argv[1][1];
chaine [2]= argv[1][2];
chaine [3]= argv[1][3];
chaine [4]= argv[1][4];
chaine [5]= 0;
printf("La chaine est %s \n",chaine);
return EXIT_SUCCESS;
}
2h suivantes
Travail sur la chaîne de caractère
Code passant une chaîne en minuscule en majuscule.
./majuscule test
TEST
./majuscule t?est
T?EST
./majuscule
Donnez moi un argument!
Solution : https://onlinegdb.com/B1os6xMNV
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
/* declaration des variables locales au main*/
int compteur_caractere;
/* on teste si argc est different de 2 pour arreter le programme */
if (argc!=2)
{
printf ("Donnez moi un argument!\n");
return (EXIT_FAILURE);
}
/* ici argv[1] contient la chaine a passer en majuscule */
/* on va parcourir la chaine argv[1] */
compteur_caractere=0;
while (argv[1][compteur_caractere]!='\0')
{
if ( (argv[1][compteur_caractere] >= 'a') &&
(argv[1][compteur_caractere] <= 'z') )
{
printf("%c\n",argv[1][compteur_caractere]-('a'-'A')); /* maj */
} /* (hexa) 0x20 =32 en decimal*/
else
if ( (argv[1][compteur_caractere] >= 'A') &&
(argv[1][compteur_caractere] <= 'Z') )
{
printf("%c\n",argv[1][compteur_caractere]); /* on laisse */
}
else
{
printf("%c\n",'.');
}
compteur_caractere=compteur_caractere+1;
}
return (EXIT_SUCCESS);
}
transformer un valeur numérique entière
./nb_dec 321
l'entier est : 321
./nb_dec A321
ca n'est pas un nombre decimal
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
/* declaration des variables locales au main*/
int compteur_caractere;
int nombre_decimal;
int poids;
/* on teste si argc est different de 2 pour arreter le programme */
if (argc!=2)
{
printf(" un argument svp !\n");
return (EXIT_FAILURE);
}
/* ici argv[1] contient la chaine a passer en majuscule */
/* on va parcourir la chaine argv[1] */
compteur_caractere=0;
while (argv[1][compteur_caractere]!='\0')
{
if ( (argv[1][compteur_caractere] >= '0') &&
(argv[1][compteur_caractere] <= '9') )
{
compteur_caractere=compteur_caractere+1;
}
else
{/* sortie */
printf("ca n'est pas un nombre décimal \n");
return (EXIT_FAILURE);
}
/* le compteur pointe la fin de chains \0 */
}
compteur_caractere = compteur_caractere-1;
/* on est sur les unites */
nombre_decimal=0;
poids=1;
while (compteur_caractere >= 0)
{
nombre_decimal+=(argv[1][compteur_caractere]-'0')*poids;
poids=poids*10; /* on prepare la colonne suivante */
compteur_caractere=compteur_caractere-1;
}
printf ("Le nombre decimal est : %d \n",nombre_decimal);
return (EXIT_SUCCESS);
}
solution :https://onlinegdb.com/H1WqCxMVV
Exercice , réaliser la version hexa du programme.
./nb_hex A
l'entier est 10
./nb_hex FF
l'entier est 255
./nb_hex ff
l'entier est 255
./nb_hex U3
ca n'est pas un nombre hexa !
Solution:
Convertisseur Binaire
./nb_bin 10
le nombre binaire est 2 en décimal
./nb_bin
veuillez entrer un nombre en binaire svp.
Solution :