À chaque étape de programmation, vous devez vérifier si le programme :
gcc -Wall exo.c -o nomExecutable
./nomExecutable
#include <stdio.h>
#include <stdlib.h>
int main(){
char prenom[100];
int a,b;
("Bonjour, comment vous appelez vous ? \n");
printf("%s",prenom);
scanf
("entrez un entier : \n");
printf("%d",&a);
scanf
("entrez une entier : \n");
printf("%d",&b);
scanf
("L'addition de %d et %d est %d",a,b,a+b);
printf
return 0;
}
À quoi sert l’instruction dans les printf* ?
Quelle est la différence entre la compilation et l’exécution ?
Quels sont les différences principales entre ALGO et C ?
Ajouter dans l’arborescence précédement créée le répertoire exo2
Écrire un exo2.c qui demande la saisie d’un nombre puis l’affiche.
PROGRAMME SaisieNombre
VARIABLES: entier
nb
DÉBUT("veuillez saisir un nombre : ")
ECRIRE(nb)
LIRE("le nombre saisie est : " + nb)
ECRIRE FIN
Il faut récupérer la valeur de retour du scanf et si cette valeur de retour est égale à 0 alors il y a une erreur de saisie.
Dans notre cas scanf est une fonction C qui prend 2 paramètres (“%d”, et &nb), et renvoi 0 s’il y a une erreur de typage sinon elle renvoie 1.
./votreProgramme < data.txt
cat data.txt | ./votreProgramme
#include <stdio.h>
#include <stdlib.h>
/* exo 3 : le pgcd */
int main(){
return 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) : ... */
int PGCD (int a, int b);
Le Plus Grand Commun Diviseur est le plus grand nombre qui divise à la fois a et b.
PGCD(48,18)= 6 PGCD(14,17)= 1
On utilise la méthode des divisions successives
Pour trouver le PGCD de 48 et 18, nous devons réaliser les étapes suivantes :
Le dernier diviseur est le PGCD lorsqu’il reste 0.
PGCD(48,18)= 6
// FONCTION qui permet de calculer le pgcd entre a et b
// Precondition : Prend en paramètre 2 entiers e et b. Attention : a doit être strictement supérieur à b
// Postcondition : Retourne le PGCD de a et de b.
(a,b:entier):entier FONCTION PGCD
Où coder les fonctions/procédures dans un programme en C ?
#include <stdio.h>
#include <stdlib.h>
/* Auteur : Inès */
/* Date : 17/07/24 */
/* Résumé : procédure qui affiche un entier passé en paramètre */
/* Entrée(s) : un entier */
/* Sortie(s) : aucune */
void maSuperProcedure (int a);
int main(){
(42);
maSuperProcedurereturn 0;
}
//maSuperFonction
void maSuperProcedure (int a){
("%d",a);
printf}
#include <stdio.h>
#include <stdlib.h>
/* Auteur : Inès */
/* Date : 17/07/24 */
/* Résumé : procédure qui affiche un entier passé en paramètre */
/* Entrée(s) : un entier */
/* Sortie(s) : aucune */
void maSuperProcedure (int a){
("%d",a);
printf}
int main(){
(42);
maSuperProcedurereturn 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(){
return 0;
}
: ...
Entrez votre nom : ...
Entrez votre prénom : ...
Entrez votre âge
:
Voici ce que vous avez entré : Cobain
Nom : Kurt
Prénom : 27 ans Âge
/* Auteur : Peio */
/* Date : 19/11/20 */
/* Résumé : procédure qui permet de vider le buffer d'un scanf */
/* Entrée(s) : aucune */
/* Sortie(s) : aucune */
void emptyBuffer() {
char c;
while (((c = getchar()) != '\n') && (c != EOF));
}
Il s’agit d’un exercice classique de l’algorithmique permettant de bien comprendre l’utilité du découpage d’un problème selon les différents cas rencontrés. On rappelle que le mois de février compte 28 jours sauf si l’année est bissextile et qu’une année est bissextile si elle est divisible par 4 mais pas par 100 exception faite des années divisibles par 400, qui sont également bissextiles.
#include <stdio.h>
#include <stdlib.h>
/* exo 5 : validité d'une date */
int main(){
return 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : predicat qui permet de vérifier si une annee est bixestille */
/* Entrée(s) : 1 entier : l'année */
/* Sortie(s) : 0 => si c'est faux || 1 => si c'est vrai */
int estBissexstile(int annee);
int estBissexstile(int annee)
est correct./* Auteur : ... */
/* Date : ... */
/* Résumé : predicat qui permet de vérifier si une date est valide */
/* Entrée(s) : 3 entiers :
- le jour (il doit être compris entre 1 et 31),
- le mois (il doit être compris entre 1 et 12),
- l'année */
/* Sortie(s) : 0 => si c'est faux || 1 => si c'est vrai */
int estValide(int jour, int mois, int annee);
#include <stdio.h>
#include <stdlib.h>
/* exo 6 : Approximation de PI */
int main(){
return 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : fonction permettant de calculer l'aproximation de pi selon la méthode de Leibniz en utilisant le critére d'arrêt par nombre d'étape */
/* Entrée(s) : Le nombre d'étape que l'on souhaite réaliser */
/* Sortie(s) : Le réel de l'approximation de pi */
double approximationPiNbEtape(int nbEtape);
\(\pi\) = 4 \(\times\) (\(\frac{1}{1}\) - \(\frac{1}{3}\) + \(\frac{1}{5}\) - \(\frac{1}{7}\) + …)
On peut utiliser la puissance de (-1) sur l’itérateur i.
On pourra donc alterner et respecter la formule d’approximation.
Attention
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* exo 6 : Approximation de PI */
int main(){
return 0;
}
gcc -Wall exo6.c -o exo6 -lm
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* exo 6 : Approximation de PI */
int main(){
int nb;
= pow(4,2); /* 4 à la puissance 2 */
nbreturn 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : fonction permettant de calculer l'aproximation de pi selon la méthode de statistique en utilisant */
/* Entrée(s) : Le nombre de points que l'on souhaite utiliser */
/* Sortie(s) : Le réel de l'approximation de pi */
double approximationPiMethodeStat(int nbPoints);
Traçons un carré dont le demi-côté mesure une unité et inscrivons y un cercle de rayon unitaire. La surface du carré est de 4 et celle du cercle est de π. Si on choisi au hasard un point dans le carré, la probabilité qu’il se trouve dans le cercle est de \(\frac{\pi}{4}\) . Et par conséquent, en recommençant de plus en plus souvent le choix aléatoire d’un point du carré, le rapport entre le nombre de points se trouvant dans le cercle (dont la distance à l’origine est inférieure à 1) et le nombre de points choisis doit s’approcher de π.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
srand(time(NULL));
. Si on ne met pas cette instruction, une
fois, alors le nombre aléatoire généré sera toujours le même./* exo 6 : Approximation de PI */
int main(){
(time(NULL));
srand
return 0;
}
int a = rand() % 5; /* génération d'un entier aléatoire entre 0 et 5 */
double x = (rand()/(double) RAND_MAX * 2.0 - 1.0); /* génération d'un réél aléatoire entre -1 et 1.*/
#include <stdio.h>
#include <stdlib.h>
/* exo 7 : Palindrome */
int main(){
return 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : prédicat permettant de savoir si un mot est un palindrome */
/* Entrée(s) : Le mot que l'on souhaite tester */
/* Sortie(s) : 0 => si ce n'est pas un Palindrome | 1 => si c'est un Palindrome */
int estPalindrome(char mot[100]);
L’équivalent de longueur(ch)
que nous utilisions en Algo
est strlen(ch)
Exemple d’utilisation *attention, n’oubliez pas
d’inclure la bibliothèque string.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* exo 7 : Palindrome */
int main(){
int taille;
char monMot[100];
("entrez un mot \n");
printf("%s",monMot);
scanf
=strlen(monMot);
taille
return 0;
}
#include <stdio.h>
#include <stdlib.h>
/* exo 8 : le triangle */
int main(){
return 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : Procédure permettant d'afficher un triangle de taille n */
/* Entrée(s) : La taille du triangle */
/* Sortie(s) : aucunes */
void triangle(int n);
#include <stdio.h>
#include <stdlib.h>
/* exo 9 : Le menu */
int main(){
return 0;
}
/* Auteur : ... */
/* Date : ... */
/* Résumé : Procédure permettant d'afficher un menu */
/* Entrée(s) : aucunes */
/* Sortie(s) : aucunes */
void afficherMenu();
1 - Exercice 1 : Helloworld
2 - Exercice 2 : La saisie
3 - Exercice 3 : PGCD
4 - Exercice 4 : Décliner votre identité
5 - Exercice 5 : Validité d’une date
6 - Exercice 6 : Approximation de PI
7 - Exercice 7 : Un palindrome
8 - Exercice 8 : Le triangle
0 - Quittez
Vous pouvez télécharger ici, un exemple de gestion de menu
TD