In order to fulfill the basic functions of our service, the user hereby agrees to allow Xiaomi to collect, process and use personal information which shall include but not be limited to written threads, pictures, comments, replies in the Mi Community, and relevant data types listed in Xiaomi's Private Policy. By selecting "Agree", you agree to Xiaomi's Private Policy and Content Policy .
Agree

Jeux/Détente

[Détente] [JeudiProg] [C] Cours 2 : Types de données et appels de fonctions (Gagnez une médaille)

2020-06-18 18:00:00
1023 34
Bonjour à tous,

Si vous avez manqué les cours précédents, commencez par ceux-ci et revenez ici ensuite :

Cours 0 : Pré-requis et premier programmeConsulter
Cours 1 : DialogueConsulter
Cours 2 : Types de données et appels de fonctionsEn cours
Cours 3 : Opérateur ternaire et masquageConsulter
Cours 4 : Switch et premiers tableauxConsulter
Cours 5 : Incrémentation, boucles et tri de tableauConsulter
Cours 6 : Les fichiersConsulter
Cours 7 : Tableaux et matricesConsulter
Cours 8 : Chaînes de caractèresConsulter
Cours 9 : Introduction à la programmation objetConsulter




Attention : Du fait des limitations actuelles la communauté, il n'est pas possible d'afficher un code correct, c'est pourquoi je vous fournis ce fichier ZIP contenant l'ensemble des codes de ce cours. Décompressez le dans votre dossier MinGW/code/.

Cours2-v2.zip (1.23 KB, Downloads: 4)

Rappel : Pour pouvoir compiler les fichiers, utilisez l'instruction suivante dans votre Invite de commandes où vous remplacerez bien sûr les 2 ''nom de fichier''.

  1. gcc -ansi -Wall -pedantic -o nomdefichier.exe nomdefichier.c
Copy the Code


Les types de données

Comme je vous le disais le langage C est très structuré avec ses avantages et ses inconvénients. Jusqu'à présent nous n'avons vu, et utilisé, que des entiers (int) et il n'y en aura pas beaucoup plus puisqu'il y en a 3 principaux : les entiers, les nombres réels (nombres à virgule) et les caractères.

Chacun de ces 3 types va quand même avoir quelques déclinaisons selon le nombre d'octets utilisé en mémoire ou si l'on veut utiliser des valeurs uniquement non signées (c'est-à-dire sans nombre négatif). Voyons cela en détail :

Type de donnéesDésignation
Taille (octets)
Plage de valeurs
charCaractère
1
-128 à 127
unsigned charCaractère non signé
1
0 à 255
short intCourt entier
2
-32 768 à 32 767
unsigned short intCourt entier non signé
2
0 à 65 535
intEntier
4 (ou 2 sur processeur 16 bits)
-2 147 483 648 à 2 147 483 647
unsigned intEntier non signé
4 (ou 2 sur processeur 16 bits)
0 à 4 294 967 295
long intLong entier
4
-2 147 483 648 à 2 147 483 647
unsigned long intLong entier non signé
4
0 à 4 294 967 295
floatNombre réel
4
-3,4*10^38 à 3,4*10^38
doubleNombre réel
8
-1,7*10^308 à 1,7*10^308
long doubleNombre réel
10
-3.4*10^4932 à 3.4*10^4932


Je vous rassure de suite, nous continuerons d'utiliser les types ''simples'' (char, int et double) mais vous voyez qu'il est possible d'optimiser le code en limitant la mémoire utilisée. Et attention, vous pouvez probablement voir qu'il y a une valeur minimale et maximale pour chacun de ces types, alors à vouloir trop optimiser on peut risquer le ''dépassement de capacité'' et se retrouver avec un bogue ! Vous savez déjà comment faire les déclarations, rien de plus simple.

  1. char a;
  2. unsigned char b;
  3. short int c;
  4. unsigned short int d;
  5. int e;
  6. unsigned int f;
  7. long int g;
  8. unsigned long int h;
  9. float i;
  10. double j;
  11. long double k;
Copy the Code


Si vous avez déjà fait un peu de programmation ou d'algorithmie, il existe désormais dans les ''nouveaux'' langages de programmation un type booléen qui sert à stocker dans une variable la valeur TRUE (VRAI) ou FALSE (FAUX). C'est utile pour faire des comparaisons, par exemple ''si x est vrai alors faire opération''. En C ANSI, on peut toutefois faire la comparaison avec n'importe quel type, la valeur FALSE correspond à 0, la valeur TRUE à tout le reste. Mais si on y tient vraiment on peut créer le booléen grâce au type ''énuméré''.

booleen.c
  1. #include ˂stdio.h˃

  2. int main(void)
  3. {
  4.    enum booleen {FAUX,VRAI} a,b;
  5.    a = VRAI;
  6.    b = FAUX;
  7.    printf(ʺa = %d\nb = %d\nʺ,a,b);

  8.    return 0;
  9. }
Copy the Code


Appels de fonctions

Plus on va ajouter de fonctionnalités et plus notre programme va s'allonger : la fonction main va devenir longue, difficilement lisible et on pourrait avoir des redondances de code car on pourrait avoir de faire une même opération à divers moments. Ainsi, il est possible d'organiser et séparer notre code dans diverses fonctions. Nous allons ici créer un programme qui va nous demander une température en degrés Celsius à convertir en degrés Farenheit, la fonction de conversion sera une fonction à part !

ctof.c
  1. #include ˂stdio.h˃

  2. double celsius_to_farenheit(double c)
  3. {
  4.    return 9*c/5+32;
  5. }

  6. int main(void)
  7. {
  8.    double degre_celsius;
  9.    double degre_farenheit;

  10.    printf(ʺEntrez une température en °C : ʺ);
  11.    scanf(ʺ%lfʺ,&degre_celsius);
  12.    degre_farenheit = celsius_to_farenheit(degre_celsius);
  13.    printf(ʺLa température en Farenheit est : %.2f\nʺ,degre_farenheit);

  14.    return 0;
  15. }
Copy the Code


Vous voyez donc que j'ai déclaré une nouvelle fonction celsius_to_farenheit pour ne pas avoir à réécrire l'opération chaque fois que j'en aurais besoin dans mon programme. A noter que cette fonction doit être déclarée avant son appel. Donc, comme j'appelle la fonction celsius_to_farenheit dans ma fonction main, celle-ci doit être déclarée avant la fonction main !

Exercice 1/2 - Réaliser la conversion inverse

A votre tour de jouer maintenant, c'est à vous de déclarer la fonction de conversion inverse farenheit_to_celsius !

ftoc.c
  1. #include ˂stdio.h˃

  2. double celsius_to_farenheit(double c)
  3. {
  4.    return 9*c/5+32;
  5. }

  6. int main(void)
  7. {
  8.    double degre_celsius;
  9.    double degre_farenheit;
  10.    double verification_celsius;

  11.    printf(ʺEntrez une température en °C : ʺ);
  12.    scanf(ʺ%lfʺ,&degre_celsius);
  13.    degre_farenheit = celsius_to_farenheit(degre_celsius);
  14.    printf(ʺLa température en Farenheit est : %.2f\nʺ,degre_farenheit);
  15.    verification_celsius = farenheit_to_celsius(degre_farenheit);
  16.    printf(ʺLa température en Celsius était : %.2f\nʺ,verification_celsius);

  17.    return 0;
  18. }
Copy the Code


Petit rappel pour la conversion de Farenheit à Celsius : on retire 32 puis on multiplie par 5 et divise par 9 !

Résoudre une équation de premier degré

Vous avez toujours eu des difficultés en mathématiques ? Pourquoi pas vous simplifier la vie grâce à des programmes informatiques ... Une équation du premier degré ça ressemble à ça :

a*x + b = 0

On connaît a et b et on cherche la valeur de x. La solution ici est très simple, c'est :

-b/a

Exercice 2/2 - Réaliser le programme de résolution

Je vous ai préparé la structure du programme à faire, vous n'avez qu'à y ajouter la fonction resoudre !

equation.c
  1. #include ˂stdio.h˃

  2. int main(void)
  3. {
  4.    double a, b, x;

  5.    printf(ʺProgramme de résolution d'une équation de premier degré\nax+b=0\n\nʺ);
  6.    printf(ʺEntrez la valeur de a : ʺ);
  7.    scanf(ʺ%lfʺ,&a);
  8.    printf(ʺEntrez la valeur de b : ʺ);
  9.    scanf(ʺ%lfʺ,&b);
  10.    x = resoudre(a, b);
  11.    printf(ʺLa solution est x = %lf\nʺ,x);

  12.    return 0;
  13. }
Copy the Code




Si vous n'avez pas compris quelque chose n'hésitez pas à poser vos questions en commentaires, entraidez-vous ... et toutes les réponses correctes et originales aux 2 exercices recevront une médaille !


Note : pour partager vos codes, utilisez des captures d'écran car malheureusement la communauté n'est pas encore totalement apte à partager facilement du code !

2020-06-18 18:00:00
Favorites14 RateRate


2020-06-18 21:38:10

Moderator

GuillaumeMi Author |

#2


Le sujet de ce cours est les appels de fonctions, il faut donc s'appuyer sur ce qui est donné dans le cours pour résoudre les exercices.
2020-06-18 21:46:58
GuillaumeMi replied at 2020-06-18 16:46:58
Le sujet de ce cours est les appels de fonctions, il faut donc s'appuyer sur ce qui est donné dans le cours pour résoudre les exercices.


Je pense que je ne pourrai pas obtenir de médaille avec ce départ :-)
2 problèmes ne peuvent pas répondre au contenu :-)
2020-06-18 23:48:32

Wizard Bunny

D.Price | from app

#4

excellent, mais si je m'y remets ca doit être à plein temps
2020-06-19 06:42:07

Moderator

GuillaumeMi Author |

#5

D.Price a posté en 2020-06-19 00:42:07
excellent, mais si je m'y remets ca doit être à plein temps

Peut être attendre la fin et tout faire d'une traite alors :)
2020-06-19 06:46:54

Wizard Bunny

D.Price | from app

#6

GuillaumeMi
Peut être attendre la fin et tout faire d'une traite alors :)

exactement ;)
2020-06-19 18:33:34

Master Bunny

jpbal | from app

#7

dommage je peux pas le faire en ce moment même si le problème est simple.je ne suis que sur mon téléphone
2020-06-19 23:59:04

Moderator

GuillaumeMi Author |

#8

jpbal a posté en 2020-06-19 17:59:04
dommage je peux pas le faire en ce moment même si le problème est simple.je ne suis que sur mon téléphone

C'est moins pratique mais il y a des applications comme Cxxdroid qui permettent tout de même de pouvoir programmer en C sur son téléphone.
2020-06-20 00:41:27
Thanks For Sharing
2020-06-20 01:18:48

Advanced Bunny

Wejdene Gang | from app

#10

de ouf
2020-06-20 03:51:14
please sign in to reply.
Sign In Sign Up

GuillaumeMi

Moderator

  • Followers

    987

  • Threads

    578

  • Replies

    6757

  • Points

    26269

3 Days Check-In
7 Days Check-In
21 Days Check-In
40 Days Check-In
70 Days Check-In
100 Days Check-In
MiA2
SBM teaser
Mi band 3
25K
X-Men
Photography contest
30K
Tech Talent
MI9T
MIUI Geek
Three's A Party
Happy July
App Maniac
MIUI 9th Birthday
Global Community
Medalla Encuesta Mi Phone
better together slogan
Global Community
2020
Médaille des 50K
100K abo
Mi Community Üçüncü Anket Madalyası
Mi 10th Birthday Medal
Medalla #GradientsInLife
Window View
বাংলা নববর্ষ ১৪২৭
Android One
Answer Mi #3
Ulang Tahun Xiaomi ke-10
3 Tahun Mi Community
Mobile Game
App Star
Redmi 8
Bookworm
23 Nisan Kutlu Olsun!
Sondage gaming
MIUI Fan
Favorite Goalkeeper
Ramadan Kareem
Meetings from Home
Mi2U April
Lefty Star
Favorite Author
redminote8series
Streaming Geek
Favorite Actor
Favourite Football Team
200mila Mi Fans
Osneip
Redmi Note 8
Mail Lover
Radio
Super Thursday
Redmi Note 8 Series
Redmi Note 8 Pro
Coin
Chipset
Corona Awareness
Map
Redmi 8A
MIUI 12
First Smartphone
Phone Finder
2 anni insieme
Eid Mubarak
TV Series Freak
BougLo Challenge I
Mi to You May
MIUI12
Neues Zuhause
MIUI Boot Animation
200 Mil Mi Fans En México
Favorite Singer
Gadget
Favorite YouTube Channel
Art Challenge
Father's Day
Redmi Note 9S
Mother's Day
UK Community 300K Users Medal
Redmi Note 9
Cloud Storage
30 Million Redmi Note 8 Series
Redmi Note 9 Pro Feature
ContributeTogether
10 years
K2K #3
Redmi 9 Colors
200K Registered Users
2nd Anniversary
Emoji Day
Mi To You July
Redmi Note 9S Feature
Navigation System
Médaille 6
First Anniversary
10th mi fan stories
K2K #4
Favorite Bangladeshi Food
Redmi 9A
Redmi Note 9 Pro Camera
Material Expert
Redmi 9A Feature
MIUI 12 Dark Mode
10 years

Read moreGet new

Mi Comm APP

Stay updated on Mi Products and MIUI

Copyright©2010-2020 Xiaomi.com, All Rights Reserved
Content Policy
Quick Reply To Top Return to the list