langage c lp a2i iut st die 2012-2013. introduction le langage c fait partie des langages...

46
LANGAGE C LANGAGE C LP A2I IUT St DIE 2012-2013

Upload: bertrand-nicolle

Post on 04-Apr-2015

111 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

LANGAGE CLANGAGE CLP A2I

IUT St DIE 2012-2013

Page 2: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

IntroductionIntroductionLe langage C fait partie des langages structurésCréé en 1970 par Denis Ritchie sous UNIX

Principaux avantages du CLa portabilitéUn grand nombre de bibliothèquesProche de la machineRapide

Page 3: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Un programme en CUn programme en CC’est la traduction d’un algorithme déterminé par une analyse

du problème à traiter.Il est décrit dans un fichier texte, appelé fichier sourceCe fichier n’est pas exécutableIl faut le traduire dans un langage compréhensible par le

microprocesseur

LA COMPILATION

Page 4: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

La compilation en 4 étapesLa compilation en 4 étapesLe traitement par le préprocesseur : le fichier source est

analysé par le préprocesseur qui effectue des transformations textuelles dans le fichier source. (substitution de chaine de caractère, prise en compte des directives de compilation inclusion des autres fichiers sources…)

La compilation : C’est la traduction du fichier généré par le préprocesseur en assembleur, c’est-à-dire en une suite d’instruction du microprocesseur. (en mnémonique rendant la lecture possible)

L’assemblage : Cette opération transforme le code assembleur en un fichier binaire directement compréhensible par le processeur.

L’édition de liens : C’est la liaison de tous les fichiers objets utilisés par le programme (source(s), librairies de fonctions standard ou autres…) EXECUTABLE

Page 5: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Comment créer un programmeComment créer un programmeIl faut :Un éditeur de texteUn compilateurUn debugger

Deux solutions :On utilise trois programmes différents : On utilise un IDE (environnement de développement intégré)

DevCpp, wxDevCpp, Code::Blocks, VisualC++, VisualC++ express, Qt4…

Page 6: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Structure d’un programme CStructure d’un programme C#include <stdio.h>

#define PI 3.14

float r,p;void perimetre(float rayon, float *peri);

void main(){

r=5;perimetre(r,&p);printf("Le périmetre du cercle de rayon %f = %f",r,p);

}

void perimetre(float rayon, float *peri){ *peri = 2*PI*rayon;}

Page 7: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Structure d’un programme CStructure d’un programme CRègles de basesInclure les fichiers d'entête #include

si dans répertoire des fichiers d'entête : <Nom_du_fichier.h> si dans répertoire courant : "Nom_du_fichier.h"

Toutes instructions ou actions se termine par un point virgule Commentaires début : /* fin : */ éventuellement sur plusieurs lignes ou // commentaire… sur une seule ligneUn bloc d'instruction commence par { et se termine par } Le langage C est sensible à la casse. Les mots du langage en minuscules. Adopter une règle uniforme sur les noms de variable et de fonction et toujours les écrire de la même façon. Ma_fonction ≠ ma_fonction ≠ MA_FONCTIONCaractères autorisés pour les noms de variables

Lettres non accentuées Chiffres sauf au début du nom Caractère souligné "_"

Page 8: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Programme C minimumProgramme C minimum#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Bonjour !! \n\n");

system("PAUSE");

return(0);

}

Page 9: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Programme C minimumProgramme C minimum#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Bonjour !! \n\n");

system("PAUSE");

return(0);

}

Page 10: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Programme C minimumProgramme C minimum#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[ ])

{

printf("Bonjour !! \n\n");

system("PAUSE");

return(0);

}

Gestion du passage de paramètres au programme

Page 11: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesDéfinitions:Constante : Elle ne change jamais pendant l'exécution du programmeVariable : Elle peut changer de valeur pendant l'exécution du programme

Une variable ou une constante est définie par cinq élémentsL'identificateur : c'est son nomLe type : entier, caractère, chaine de caractère, réel, booleanLa taille : nombre d'octets occupés en mémoireLa valeur : c'est la valeur que l'on attribue à la variable ou la constanteL'adresse : c'est l'emplacement mémoire où est stocké la valeur de la variable ou de la mémoire

Page 12: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesEntier : int I; short S; long L;C'est un nombre positif ou négatif : ex 1584 ou -458.

Caractère : char C;C'est un nombre entier positif compris entre 0 et 255 et c'est le code ASCII du caractère ex 65 est le code ASCII de "A".

Chaine de caractère : char Chaine[10];C'est un ensemble de caractères : ex [L][A][N][G][A][G][E][\0] [76][65][78][71][65][71][69][\0]

Réel : float F; double DF;C'est un nombre à virgule positif ou négatif avec un exposant ex: 12,45 104

Boolean : pas de déclaration en CIl peut prendre deux états VRAI ou FAUX

Page 13: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesBoolean : pas de déclaration en CIl peut prendre deux états VRAI ou FAUX

Solution pour gérer correctement les booléens en C:

#define true 1

#define false 0

typedef int bool;

Bool B; Déclaration de la variable booléenne B

Page 14: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesConstantes : const

Exemple : const float PI= 1.1416

Remarque :On peut aussi utilise la directive de compilation #define

Exemple : #define PI 1.1416

Identificateur

Valeur

Type

Page 15: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesSyntaxe de déclaration des variables :<type> <identificateur>,..,<identificateur> = valeur;Exemple :

int Entier1 = -15 ;

Exemple d'un entier non signé :unsigned int Entier2 = 15 ;

Identificateur

Valeur

Type

Page 16: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes principaux type de variables :

Page 17: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesExemple de déclarations et d'affectations:

Page 18: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesRemarque concernant les affectations de entiers:On peut forcer la base d'une valeur entière en hexadécimal ou en octalHexadécimal : on ajoute avant la valeur 0x exemple : 0xFF ~ 255 décimalOctal : on ajoute avant la valeur 0 exemple : 010 ~ 8 décimal

Page 19: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesRemarque concernant les affectations de entiers:On peut forcer la base d'une valeur entière en hexadécimal ou en octalHexadécimal : on ajoute avant la valeur 0x exemple : 0xFF ~ 255 décimalOctal : on ajoute avant la valeur 0 exemple : 010 ~ 8 décimal

Page 20: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes tableaux:Ils permettent de stocker des variables de même type de façon contiguë. Ils sont caractérisés par :Le nombre d'élémentsLe nombre de dimensionsSyntaxe :<type> <identificateur> [ nb élément ] … [ nb élément ] exemple :

int i [10] tableau d'entiers à 1 dimensionint i [10][5][3] tableau d'entiers à 3 dimensions

Remarque : le premier élément d'un tableau est l'indice 0

Page 21: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes tableaux:Ils permettent de stocker des variables de même type de façon contiguë. Il sont caractérisés par :Le nombre d'élémentsLe nombre de dimensionsSyntaxe :<type> <identificateur> [ nb élément ] … [ nb élément ] exemple :

int i [10] tableau d'entiers à 1 dimensionint i [10][5][3] tableau d'entiers à 3 dimensions

Remarque : le premier élément d'un tableau est l'indice 0

Page 22: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes tableaux déclaration et initialisation :On peut initialiser un tableau lors de la déclaration

Déclaration d'un tableau et initialisationint Tableau[4] = { 12, 14, 5, 8 };

Déclaration d'un tableau et initialisation à 2 dimint Tableau[2][3] = { 10, 20, 30, 40, 50, 60 };ouint Tableau[2][3] = { {10, 20, 30} , {40, 50, 60} };

Page 23: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes chaines de caractères :Elles sont vue en C comme un tableau.La fin de la chaine est identifié par un caractère nul '\0' (chaine à zéro terminal):Déclaration d'une chaine : char MaChaine [10];Déclaration d'une chaine avec son initialisation : char MaChaine [10] = "Texte"; ou char Chaine[]="bidule"; (calcule automatique de la taille)

Page 24: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes chaines de caractères :Attention pour stocker le mot "bonjour" (qui comprend 7 lettres) il faut un tableau de 8 char (7 + 1) afin de stocker le code nul '\0' en fin de chaine.

Remarque :La présence du code nul en fin de chaine est un avantage pour la manipulation des tableaux contenant des chaines de caractères, car se code évite la gestion de la taille des tableaux (passage de paramètres dans les fonctions) Remarque sur la syntaxe :Pour un char on l'affecte avec 'A'Pour une chaine on l'affecte avec "ABCD"

Page 25: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes chaines de caractères :On peut aussi initialiser une chaine de caractère dans un programme, mais attention on ne peut pas écrire :

MaChaine = "Toto";Il faut utiliser la fonction strcpy(Variable,Chaine)

Initialisation d'une chaine avec strcpy : strcpy( MaChaine, "Toto");

Remarque :Strcpy est déclaré dans le fichier string.h#include <string.h> à ne pas oublier en début de code source

Page 26: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes variables dans les blocs:La position des déclarations des variables dans les différents bloc du programme influence la portée des variables dans le code.Déclaration avant le programme principal (main)les variables sont globales : elles sont accessibles n'importe où dans le programme.Déclaration dans un blocles variables sont locales : elles n'existe que dans le bloc où elles ont été déclarées

Pour mémoire : un bloc commence par { et fini par }

Page 27: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Variables et ConstantesVariables et ConstantesLes variables dans les blocs:La position des déclaration de variable dans les différents bloc du programme influence la portés des variable dans le code.Déclaration avant le programme principal (main)les variables sont globales : elles sont accessibles n'importe où dans le programme.Déclaration dans un blocles variables sont locales : elles n'existe que dans le bloc où elles ont été déclarées

Pour mémoire : un bloc commence par { et fini par }

Page 28: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieLa fonction d'affichage:Elle permet d'afficher des messages et/ou des valeurs de variables sous différents formats.Syntaxe :printf ( <"Format">, Variable_1, … ,Variable_n ); Le format :Il indique comment vont être affiché les valeurs des variables. Il est composé de texte et de codes d'affichage suivant le type de variable.

Exemple :printf("La valeur de %d au carré est égale à %d", i , i*i );

Page 29: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieLa fonction d'affichage:Attention pour utiliser printf il faut la bibliothèque stdio.h, il faut ajouter #include <stdio.h> en début de code.

Exemple :

Page 30: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieCodes d'affichage:

Page 31: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieCodes d'affichage:On peut compléter les cotes d'affichage des variables pour les nombres signé ou flottants.Un caractère de remplissage :'0' au lieu de ' ' pour les numériquesJustifier à gauche:'-' qui permet de justifier à gauche l'affichageAffichage signe:'+' qui permet de forcer l'affichage du signeNombre de chiffres affichés:Syntaxe <Nb car affiché> . <Nb chiffre significatif>

Page 32: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

FonctionsFonctions d'affichage et de saisie d'affichage et de saisieCodes d'affichage:On peut compléter les cotes d'affichage des variables pour les nombres signé ou flottants.Un caractère de remplissage :'0' au lieu de ' ' pour les numériquesJustifier à gauche:'-' qui permet de justifier à gauche l'affichageAffichage signe:'+' qui permet de forcer l'affichage du signeNombre de chiffres affichés:Syntaxe <Nb car affiché> . <Nb chiffre significatif>

Résultat

Page 33: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieCode de contrôle:

Page 34: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieAutres fonctions d'affichage:il existe deux autres fonctions d'affichage.

putchar : affiche un caractèreSyntaxe : putchar ( identificateur); ex : putchar('C'); putchar('\0');

puts : affiche une chaine de caractèresSyntaxe : puts ( identificateur);ex : puts('Un texte'); puts('Autre texte\0');char message[10] = "bonjour";puts(message);

Page 35: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieLa fonction de saisie:Elle permet de saisir des valeurs de variables formatées à partir du clavier. Comme prinft elle est composée d'un format et des identificateurs des variables à saisir.

Syntaxe :scanf ( <"Format">, &Variable_1, … ,&Variable_n );

Remarque:Le symbole & est obligatoire devant les identificateurs car scanf attend des adresses et non des valeurs, sauf devant un identificateur de chaine de caractères qui est déjà une adresse.Exemple :scanf(" %d", &i ); saisie d'un entier et copie dans i

!

Page 36: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieLes codes d'entrées pour scanf:

Page 37: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieExemple de saisie d'une variable:

Page 38: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieExemple de saisie de plusieurs variables:

Page 39: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieExemple de saisie d'une chaine de caractères:

Page 40: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de Fonctions d'affichage et de saisiesaisie

Autres fonctions de saisie:getchar() : saisie d'un caractèresyntaxe : identificateur = getchar( void );

Page 41: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieAutres fonctions de saisie:gets() : saisie d'une chaine de caractères avec des espaces (impossible avec scanf)syntaxe : gets( identificateur de chaine );

Page 42: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

Fonctions d'affichage et de saisieFonctions d'affichage et de saisieAutres fonctions liées à la saisie:getch() : saisie d'un caractère à la "volé" pas de touche [entrée]syntaxe : identificateur = getch( void );A utiliser par exemple dans la gestion de menu.fflush(stdin) : vide le buffer clavierDans certains cas le buffer du clavier n'est pas complétement vide (exemple après la saisie d'une chaine avec un scanf). Cette fonction force la lecture du buffer du clavier jusqu'à rencontrer un caractère nul '\0' Pour info une autre méthode : do { c = getchar(); } while (c != '\n' && c != EOF);

Page 43: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

EXERCICES SERIE 1EXERCICES SERIE 1Déclaration de variables, saisie et affichage

Ex1 : Ecrivez un programme qui demande l'entrée de 2 nombres entiers et calcule la somme, la différence et la moyenne. Chaque résultat sera affiché sous la forme d'une phrase, exemple :

La somme de 5 et 3 est 8

Ex2 : Modifiez le programme précèdent afin de pouvoir saisir des nombres réels.

Formatez les affichages des nombres réels avec deux chiffres après la virgule.

Page 44: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

EXERCICES SERIE 1EXERCICES SERIE 1Déclaration de variables, saisie et affichageEx3 : Affichage d'adresses1) Implantez les déclarations de variables suivantes:

char Chaine[] = {"Bonjour"};

int A;

char C,C2;

float F;

int B,D;

Initialisez les variables avec les valeurs de votre choix.

Ajoutez le code nécessaire pour afficher pour toutes les variables, la valeur et l'adresse.

Vérifiez alors la taille de chaque variable en fonction des adresses.

Page 45: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

EXERCICES SERIE 1EXERCICES SERIE 1Déclaration de variables, saisie et affichageEx3 : Affichage d'adresses2) Ajoutez dans la déclaration de variable short AA:

char Chaine[] = {"Bonjour"};int A;short AA;char C,C2;float F;int B,D;

Complétez le code pour afficher maintenant également la variable AA

Comparez les deux affichages et comment le compilateur implante les variables dans la mémoire.

Page 46: LANGAGE C LP A2I IUT St DIE 2012-2013. Introduction Le langage C fait partie des langages structurés Créé en 1970 par Denis Ritchie sous UNIX Principaux

EXERCICES SERIE 1EXERCICES SERIE 1Déclaration de variables, saisie et affichageEx4 : Saisie abonnéEcrivez un programme qui permet la saisie du Nom, du prénom, de l'âge et de l'adresse mail d'un client.

Après la saisie affichez la fiche client suivant le format ci-dessous.

Fiche client

===========================Nom : Dupont

Prenom : Jean

Age : 45 ans

Email : [email protected]

===========================