Data types & operations
Types et opérations
أنواع البيانات والعمليات
By the end of this section, you should be able to read a variable declaration, follow assignments line by line, predict integer division and remainder correctly, and explain why one decimal point can change the result of a calculation.
À la fin de cette section, vous devriez pouvoir lire une déclaration de variable, suivre des affectations ligne par ligne, prédire correctement une division entière et un reste, puis expliquer pourquoi un seul point décimal peut changer le résultat d'un calcul.
بنهاية هذا القسم، يجب أن تكون قادراً على قراءة تعريف المتغير، وتتبع الإسناد سطراً بعد سطر، وتوقّع ناتج القسمة الصحيحة والباقي بدقة، وشرح كيف يمكن لنقطة عشرية واحدة أن تغيّر نتيجة العملية.
Start here: how to read this lesson
Commencez ici : comment lire cette leçon
ابدأ من هنا: كيف تقرأ هذا الدرس
This lesson is about reading values carefully, not memorizing random facts. Start with one declaration and split it into three parts before you do any calculation.
int apples = 6;
| Part to spot | Example from the line |
|---|---|
| Type | int |
| Name | apples |
| Current value | 6 |
Once that habit is solid, the rest becomes easier: you can tell when int / int drops the decimal part, when % gives the leftover part, and when one decimal point changes the whole expression.
| First habit | Why it matters |
|---|---|
| Read top to bottom | Later lines often depend on the updated value from earlier lines. |
| Separate code from output | cout << x; is code, but the answer may be only 5. |
| Watch for decimal points | One decimal operand can change the whole division. |
Cette leçon sert à lire les valeurs avec méthode, pas à mémoriser des règles isolées. Commencez par une seule déclaration et découpez-la en trois éléments avant de faire un calcul.
int apples = 6;
| Élément à repérer | Exemple dans la ligne |
|---|---|
| Type | int |
| Nom | apples |
| Valeur actuelle | 6 |
Quand cette habitude est solide, le reste devient plus simple : vous pouvez distinguer le cas où int / int supprime la partie décimale, celui où % donne le reste, et celui où un seul point décimal change toute l’expression.
| Première habitude | Pourquoi elle compte |
|---|---|
| Lire de haut en bas | Les lignes suivantes dépendent souvent de la valeur mise à jour plus haut. |
| Séparer code et sortie | cout << x; est du code, mais la réponse peut être seulement 5. |
| Surveiller les points décimaux | Un seul opérande décimal peut changer toute la division. |
هذا الدرس يركّز على قراءة القيم بعناية، لا على حفظ قواعد متفرقة. ابدأ بتعريف واحد فقط، ثم قسّمه إلى ثلاثة أجزاء قبل أن تفكر في أي عملية حسابية.
int apples = 6;
| الجزء الذي تبحث عنه | المثال من السطر |
|---|---|
| النوع | int |
| الاسم | apples |
| القيمة الحالية | 6 |
عندما تكتسب هذه العادة، يصبح باقي الدرس أوضح بكثير: ستعرف متى تحذف int / int الجزء العشري، ومتى يعطي % الباقي، ومتى تكفي نقطة عشرية واحدة لتغيير نتيجة التعبير كله.
| العادة الأولى | لماذا هي مهمة |
|---|---|
| اقرأ من الأعلى إلى الأسفل | لأن الأسطر اللاحقة تعتمد غالباً على القيمة التي تم تحديثها في الأسطر السابقة. |
| افصل بين الكود والمخرجات | cout << x; هو كود، لكن الإجابة قد تكون فقط 5. |
| انتبه للنقطة العشرية | وجود عامل عشري واحد قد يغيّر نتيجة القسمة كلها. |
Two habits matter in this section:
- Keep code tokens exactly as written.
- Update the value after each line before you predict the next line.
Deux habitudes comptent ici :
- Gardez les éléments du code exactement tels qu’ils sont écrits.
- Mettez la valeur à jour après chaque ligne avant de prévoir la suivante.
هناك عادتان أساسيتان في هذا القسم:
- اترك رموز الكود كما هي تماماً.
- حدّث القيمة بعد كل سطر قبل أن تتوقّع السطر التالي.
- Read a variable declaration and identify its type, name, and starting value.Lire une déclaration de variable et identifier son type, son nom et sa valeur initiale.قراءة تعريف متغير وتحديد نوعه واسمه وقيمته الابتدائية.
- Trace assignments in order instead of guessing from the final line only.Suivre les affectations dans l'ordre au lieu de deviner à partir de la dernière ligne seulement.تتبّع الإسناد بالترتيب بدلاً من التخمين من السطر الأخير فقط.
- Distinguish
int / int,%, and expressions that includedouble.Distinguerint / int,%et les expressions qui incluentdouble.التمييز بينint / intو%والتعابير التي تحتوي علىdouble.
- Code, operators, and numeric answers stay left-to-right even when the interface is Arabic.Le code, les opérateurs et les réponses numériques restent de gauche à droite même si l'interface est en arabe.يبقى الكود والعوامل والإجابات الرقمية من اليسار إلى اليمين حتى عندما تكون الواجهة بالعربية.
- When a question asks for exact code, every symbol matters. When it asks for output, type only the visible result.Quand une question demande le code exact, chaque symbole compte. Quand elle demande la sortie, tapez seulement le résultat visible.عندما يطلب السؤال الكود نفسه فكل رمز مهم، وعندما يطلب المخرجات فاكتب فقط النتيجة الظاهرة.
- Read one line, update the value, then move on. Beginners lose points by jumping ahead too early.Lisez une ligne, mettez la valeur à jour, puis passez à la suivante. Les débutants perdent souvent des points en allant trop vite.اقرأ سطراً واحداً، حدّث القيمة، ثم انتقل إلى السطر التالي. كثير من المبتدئين يخطئون لأنهم يقفزون بسرعة.
Variables, types, and assignment
Variables, types et affectation
المتغيرات والأنواع والإسناد
A variable is a named storage place. The type tells C++ what kind of value belongs there. In beginner examples, int stores whole numbers such as 6, while double stores numbers that may include a decimal part such as 4.5.
The symbol = in a declaration or assignment means “store this value now.” So apples = apples + 2; does not ask whether two things are equal. It reads the current value of apples, adds 2, and stores the new value back into the same variable.
| Line shape | How to read it |
|---|---|
int apples = 6; |
Create a variable named apples and start it at 6. |
apples = 9; |
Replace the old value with 9. |
apples = apples + 2; |
Read the old value, add 2, then store the new value. |
| Before the line | After the line |
|---|---|
apples = 6 |
apples = 6 after int apples = 6; |
apples = 6 |
apples = 9 after apples = 9; |
apples = 9 |
apples = 11 after apples = apples + 2; |
Une variable est un emplacement nommé qui stocke une valeur. Le type indique au C++ quelle sorte de valeur y appartient. Dans les exemples débutants, int stocke des nombres entiers comme 6, tandis que double stocke des nombres pouvant contenir une partie décimale comme 4.5.
Le symbole = dans une déclaration ou une affectation signifie « stocker cette valeur maintenant ». Ainsi, apples = apples + 2; ne demande pas si deux choses sont égales. La ligne lit la valeur actuelle de apples, ajoute 2, puis range la nouvelle valeur dans la même variable.
| Forme de ligne | Comment la lire |
|---|---|
int apples = 6; |
Créer une variable nommée apples avec la valeur initiale 6. |
apples = 9; |
Remplacer l’ancienne valeur par 9. |
apples = apples + 2; |
Lire l’ancienne valeur, ajouter 2, puis stocker la nouvelle valeur. |
| Avant la ligne | Après la ligne |
|---|---|
apples = 6 |
apples = 6 après int apples = 6; |
apples = 6 |
apples = 9 après apples = 9; |
apples = 9 |
apples = 11 après apples = apples + 2; |
المتغير هو مكان له اسم تُخزَّن فيه قيمة. النوع يخبر C++ ما نوع القيمة التي تناسب هذا المكان. في أمثلة البداية، يخزن int الأعداد الصحيحة مثل 6، بينما يخزن double الأعداد التي قد تحتوي على جزء عشري مثل 4.5.
الرمز = في التعريف أو الإسناد يعني: «خزّن هذه القيمة الآن». لذلك فالسطر apples = apples + 2; لا يسأل إن كان الطرفان متساويين، بل يقرأ القيمة الحالية لـapples، ثم يضيف 2، ثم يعيد تخزين القيمة الجديدة في المتغير نفسه.
| شكل السطر | كيف تقرؤه |
|---|---|
int apples = 6; |
أنشئ متغيراً اسمه apples وابدأه بالقيمة 6. |
apples = 9; |
استبدل القيمة القديمة بالقيمة 9. |
apples = apples + 2; |
اقرأ القيمة القديمة، ثم أضف 2، ثم خزّن القيمة الجديدة. |
| قبل السطر | بعد السطر |
|---|---|
apples = 6 |
apples = 6 بعد int apples = 6; |
apples = 6 |
apples = 9 بعد apples = 9; |
apples = 9 |
apples = 11 بعد apples = apples + 2; |
When you read a line such as int apples = 6;, say it to yourself as: “type int, name apples, starting value 6.”
Quand vous lisez une ligne comme int apples = 6;, dites-vous : « type int, nom apples, valeur initiale 6 ».
عند قراءة سطر مثل int apples = 6; قل في ذهنك: «النوع int، الاسم apples، والقيمة الابتدائية 6».
Worked example: trace one variable carefully
Exemple guidé : suivre une variable avec soin
مثال محلول: تتبّع متغيراً واحداً بدقة
Start with score = 4. After the next line, the current value is no longer 4; it becomes 6 because we add 2. Then the third line uses that updated value, so it multiplies 6, not 4.
That is the key tracing habit: do not jump from the first line to the last line. Pause after each assignment and rewrite the current value in your head before you continue.
On commence avec score = 4. Après la ligne suivante, la valeur actuelle n’est plus 4 ; elle devient 6 parce qu’on ajoute 2. Puis la troisième ligne utilise cette valeur mise à jour : elle multiplie donc 6, et non 4.
Voilà l’habitude essentielle pour le traçage : ne sautez pas de la première à la dernière ligne. Arrêtez-vous après chaque affectation et remettez à jour la valeur courante dans votre tête avant de continuer.
نبدأ بالقيمة score = 4. بعد السطر التالي لا تبقى القيمة 4، بل تصبح 6 لأننا أضفنا 2. ثم يأتي السطر الثالث فيستخدم هذه القيمة الجديدة، لذلك يضرب 6 وليس 4.
هذه هي عادة التتبّع الأساسية: لا تقفز من أول سطر إلى آخر سطر. توقّف بعد كل عملية إسناد، وحدّث القيمة الحالية في ذهنك، ثم أكمل.
Line by line, the values are 4, then 6, then 18. So the final cout prints 18, not 12 and not 6.
Ligne par ligne, les valeurs sont 4, puis 6, puis 18. Le cout final affiche donc 18, et non 12 ni 6.
إذا تتبعت السطور واحداً واحداً فستحصل على القيم 4 ثم 6 ثم 18. لذلك تطبع cout الأخيرة القيمة 18، وليس 12 ولا 6.
First, practice recognizing exact type and operator tokens. Then switch to reading the current value after reassignment, and finally trace a variable through several updates.
Commencez par reconnaître les mots-clés de type et les opérateurs exacts. Passez ensuite à la lecture de la valeur courante après réaffectation, puis au traçage d’une variable sur plusieurs mises à jour.
ابدأ بالتعرّف على كلمات النوع والعوامل الدقيقة، ثم انتقل إلى قراءة القيمة الحالية بعد إعادة الإسناد، وبعدها إلى تتبّع متغير عبر عدة تحديثات.
x after each step.x après chaque étape.x بعد كل خطوة.| StepÉtapeخطوة | MeaningSensالمقصود | xxx |
|---|---|---|
| 1 | after int x = 3; | |
| 2 | after x = x + 4; | |
| 3 | after x = x - 2; | |
| 4 | printed value |
Integer division and remainder
Division entière et reste
القسمة الصحيحة والباقي
When both operands of / are integers, C++ performs integer division. That means it counts full groups and drops the decimal part. The % operator answers a different question: it gives the leftover part after those full groups have been counted.
These two results belong together. If 17 / 5 gives 3 and 17 % 5 gives 2, then you can rebuild the original number as 17 = 5 × 3 + 2. Thinking in “full groups + leftover” keeps quotient and remainder from getting mixed up.
| Operator | Main question | Example result |
|---|---|---|
/ with int and int |
How many full groups fit? | 17 / 5 = 3 |
% with int and int |
What is left after the full groups? | 17 % 5 = 2 |
Quand les deux opérandes de / sont des entiers, le C++ effectue une division entière. Cela signifie qu’il compte les groupes complets et supprime la partie décimale. L’opérateur % répond à une autre question : il donne ce qu’il reste après avoir compté ces groupes complets.
Ces deux résultats vont ensemble. Si 17 / 5 donne 3 et 17 % 5 donne 2, on peut reconstruire le nombre d’origine avec 17 = 5 × 3 + 2. Penser en « groupes complets + reste » aide à ne pas confondre quotient et reste.
| Opérateur | Question principale | Exemple de résultat |
|---|---|---|
/ avec int et int |
Combien de groupes complets tiennent ? | 17 / 5 = 3 |
% avec int et int |
Que reste-t-il après ces groupes complets ? | 17 % 5 = 2 |
عندما يكون طرفا / عددين صحيحين، فإن C++ تجري قسمة صحيحة. هذا يعني أنها تعدّ المجموعات الكاملة ثم تحذف الجزء العشري. أما العامل % فيجيب عن سؤال مختلف: ما الذي تبقّى بعد حساب تلك المجموعات الكاملة؟
هاتان النتيجتان مرتبطتان معاً. فإذا كان 17 / 5 يساوي 3 وكان 17 % 5 يساوي 2، فيمكنك إعادة بناء العدد الأصلي هكذا: 17 = 5 × 3 + 2. التفكير بطريقة «مجموعات كاملة + باقٍ» يمنع الخلط بين خارج القسمة والباقي.
| العامل | السؤال الأساسي | مثال على النتيجة |
|---|---|---|
/ بين int وint |
كم مجموعة كاملة يمكن تكوينها؟ | 17 / 5 = 3 |
% بين int وint |
ما الذي يتبقى بعد المجموعات الكاملة؟ | 17 % 5 = 2 |
Quick mental check: quotient asks “how many full groups?”, while remainder asks “what is left after those full groups?”
Vérification mentale rapide : le quotient demande « combien de groupes complets ? », tandis que le reste demande « qu’est-ce qu’il reste après ces groupes ? »
اختبار ذهني سريع: خارج القسمة يجيب عن سؤال «كم مجموعة كاملة؟»، بينما الباقي يجيب عن سؤال «ماذا تبقّى بعد هذه المجموعات؟».
Worked example: quotient first, remainder second
Exemple guidé : quotient d'abord, reste ensuite
مثال محلول: خارج القسمة أولاً ثم الباقي
Read the first line as: “How many full groups of 4 fit into 14?” The answer is 3, because three full groups use 12. Then read the second line as: “What is left after those full groups?” The answer is 2.
Notice that the same pair of numbers can produce two different correct results, because the operators ask two different questions.
Lisez la première ligne ainsi : « combien de groupes complets de 4 tiennent dans 14 ? » La réponse est 3, car trois groupes complets utilisent 12. Puis lisez la deuxième ligne ainsi : « qu’est-ce qu’il reste après ces groupes complets ? » La réponse est 2.
Remarquez que la même paire de nombres peut produire deux résultats corrects différents, parce que les opérateurs ne posent pas la même question.
اقرأ السطر الأول بهذه الطريقة: «كم مجموعة كاملة من 4 يمكن تكوينها من 14؟» الجواب هو 3 لأن ثلاث مجموعات كاملة تستهلك 12. ثم اقرأ السطر الثاني بهذه الطريقة: «ما الذي تبقّى بعد هذه المجموعات الكاملة؟» الجواب هو 2.
لاحظ أن الزوج نفسه من الأعداد يمكن أن يعطي نتيجتين صحيحتين مختلفتين، لأن كل عامل يسأل سؤالاً مختلفاً.
So the full story is 14 / 4 = 3 and 14 % 4 = 2. Keep both answers connected through 14 = 4 × 3 + 2.
L’histoire complète est donc 14 / 4 = 3 et 14 % 4 = 2. Gardez ces deux réponses reliées par 14 = 4 × 3 + 2.
إذن الصورة الكاملة هي 14 / 4 = 3 و14 % 4 = 2. اربط النتيجتين دائماً بالعلاقة 14 = 4 × 3 + 2.
Start with one result at a time, then compare quotient and remainder side by side for the same numbers.
Commencez par un résultat à la fois, puis comparez quotient et reste côte à côte avec les mêmes nombres.
ابدأ بنتيجة واحدة في كل مرة، ثم قارن بين خارج القسمة والباقي جنباً إلى جنب باستخدام الأعداد نفسها.
| StepÉtapeخطوة | ExpressionExpressionالتعبير | ResultRésultatالنتيجة |
|---|---|---|
| 1 | 19 / 5 | |
| 2 | 19 % 5 |
When a decimal changes the result
Quand un décimal change le résultat
عندما تغيّر القيمة العشرية النتيجة
The expression changes as soon as one operand is a double. In 5 / 2, both operands are integers, so the result is the integer quotient 2. In 5.0 / 2, one operand is decimal, so C++ performs decimal division and keeps 2.5.
This change happens inside the expression itself. That is why double average = 7 / 2; still stores 3: the division was already finished as integer division before the result was placed into the double variable.
| Expression | Why it behaves that way | Result |
|---|---|---|
5 / 2 |
Both operands are int |
2 |
5.0 / 2 |
One operand is double |
2.5 |
7 / 2 inside double average = 7 / 2; |
The division finishes as int / int before storage |
3 |
Dès qu’un opérande est un double, l’expression change de nature. Dans 5 / 2, les deux opérandes sont entiers, donc le résultat est le quotient entier 2. Dans 5.0 / 2, un opérande est décimal, donc le C++ effectue une division décimale et conserve 2.5.
Ce changement se produit à l’intérieur même de l’expression. C’est pourquoi double average = 7 / 2; stocke quand même 3 : la division a déjà été terminée comme division entière avant que le résultat ne soit placé dans la variable double.
| Expression | Pourquoi elle se comporte ainsi | Résultat |
|---|---|---|
5 / 2 |
Les deux opérandes sont de type int |
2 |
5.0 / 2 |
Un opérande est de type double |
2.5 |
7 / 2 dans double average = 7 / 2; |
La division se termine comme int / int avant le stockage |
3 |
يتغيّر سلوك التعبير بمجرد أن يكون أحد العاملين من النوع double. ففي 5 / 2 يكون العاملان عددين صحيحين، لذلك تكون النتيجة هي خارج القسمة الصحيح 2. أما في 5.0 / 2 فهناك عامل عشري، ولذلك تجري C++ قسمة عشرية وتحتفظ بالقيمة 2.5.
هذا التغيّر يحدث داخل التعبير نفسه. ولهذا السبب يبقى double average = 7 / 2; مخزّناً للقيمة 3: فالقسمة انتهت أولاً على أنها قسمة صحيحة قبل وضع الناتج داخل المتغير من النوع double.
| التعبير | لماذا يتصرف بهذه الطريقة | النتيجة |
|---|---|---|
5 / 2 |
العاملان من النوع int |
2 |
5.0 / 2 |
أحد العاملين من النوع double |
2.5 |
7 / 2 داخل double average = 7 / 2; |
القسمة تنتهي أولاً على أنها int / int قبل التخزين |
3 |
One decimal operand is enough. You do not need both operands to be double.
Un seul opérande décimal suffit. Vous n’avez pas besoin que les deux opérandes soient de type double.
يكفي وجود عامل عشري واحد فقط. لا تحتاج إلى أن يكون العاملان معاً من النوع double.
Worked example: compare int and double division
Exemple guidé : comparer la division int et double
مثال محلول: قارن بين قسمة int وقسمة double
Read the three lines as three separate experiments. The first line keeps both operands as integers, so the result is 2. In the second line, 9.0 makes the division decimal, so the result becomes 2.25. In the third line, 4.0 does the same job from the other side, so the result is still 2.25.
The important pattern is not “decimal on the left” or “decimal on the right.” The important pattern is: if either operand is double, the division becomes decimal.
Lisez les trois lignes comme trois expériences séparées. La première garde les deux opérandes entiers, donc le résultat est 2. Dans la deuxième ligne, 9.0 rend la division décimale, donc le résultat devient 2.25. Dans la troisième ligne, 4.0 joue le même rôle de l’autre côté, donc le résultat est encore 2.25.
Le motif important n’est pas « décimal à gauche » ou « décimal à droite ». Le motif important est : si l’un des opérandes est double, la division devient décimale.
اقرأ الأسطر الثلاثة على أنها ثلاث تجارب منفصلة. السطر الأول يبقي العاملين عددين صحيحين، لذلك تكون النتيجة 2. في السطر الثاني تجعل 9.0 القسمة عشرية، فتصبح النتيجة 2.25. وفي السطر الثالث تؤدي 4.0 الوظيفة نفسها من الجهة الأخرى، فتظل النتيجة 2.25.
النمط المهم ليس «العشري على اليسار» أو «العشري على اليمين». النمط المهم هو: إذا كان أحد العاملين من النوع double فإن القسمة تصبح عشرية.
So the outputs are 2, then 2.25, then 2.25. The decimal result appears twice because a single double operand is already enough.
Les sorties sont donc 2, puis 2.25, puis 2.25. Le résultat décimal apparaît deux fois parce qu’un seul opérande double suffit déjà.
إذن تكون المخرجات 2 ثم 2.25 ثم 2.25. تظهر النتيجة العشرية مرتين لأن وجود عامل واحد من النوع double يكفي وحده.
Begin by comparing two outputs on the same screen, then force a decimal result deliberately, and finish by separating integer-only division from decimal division in a small table.
Commencez par comparer deux sorties sur le même écran, puis forcez volontairement un résultat décimal, et terminez en séparant la division entière de la division décimale dans un petit tableau.
ابدأ بمقارنة مخرجين على الشاشة نفسها، ثم اجعل النتيجة عشرية بشكل مقصود، وفي النهاية فرّق بين القسمة الصحيحة والقسمة العشرية في جدول صغير.
double?double ?double؟| StepÉtapeخطوة | ExpressionExpressionالتعبير | ResultRésultatالنتيجة |
|---|---|---|
| 1 | 9 / 4 | |
| 2 | 9.0 / 4 | |
| 3 | 9 / 4.0 |
Recap: the rules that matter
Synthèse : les règles essentielles
ملخص: القواعد التي تهم
Types are not decoration. They control what a variable can hold and how an expression behaves. If you read declarations carefully, update values one line at a time, and watch for whether an operand is int or double, most beginner mistakes in this section disappear.
Les types ne sont pas décoratifs. Ils contrôlent ce qu’une variable peut contenir et la manière dont une expression se comporte. Si vous lisez soigneusement les déclarations, mettez les valeurs à jour ligne par ligne et surveillez si un opérande est int ou double, la plupart des erreurs de débutant dans cette section disparaissent.
الأنواع ليست زينة في الكود. فهي تتحكم في ما يمكن أن يخزنه المتغير، وفي الطريقة التي يتصرف بها التعبير. إذا قرأت التعاريف بعناية، وحدّثت القيم سطراً بعد سطر، وراقبت ما إذا كان العامل من النوع int أو double، فستختفي أغلب أخطاء المبتدئين في هذا القسم.
- A declaration names a variable, gives its type, and can also give a starting value.Une déclaration nomme une variable, donne son type et peut aussi fournir une valeur initiale.التعريف يسمّي المتغير ويحدّد نوعه، ويمكنه أيضاً إعطاؤه قيمة ابتدائية.
- Assignments must be read in order. Each new line uses the value produced by the previous line.Les affectations se lisent dans l'ordre. Chaque nouvelle ligne utilise la valeur produite par la ligne précédente.يجب قراءة الإسناد بالترتيب. كل سطر جديد يستخدم القيمة الناتجة من السطر السابق.
/on two integers gives the quotient only, while%gives the remainder./sur deux entiers donne seulement le quotient, tandis que%donne le reste.العامل/بين عددين صحيحين يعطي خارج القسمة فقط، بينما%يعطي الباقي.- A single
doubleoperand is enough to make the division decimal, but storing intodoublelater does not change an earlier integer division.Un seul opérandedoublesuffit pour rendre la division décimale, mais stocker ensuite dans undoublene change pas une division entière déjà calculée.يكفي وجود عامل واحد من النوعdoubleلتصبح القسمة عشرية، لكن التخزين لاحقاً في متغيرdoubleلا يغيّر قسمة صحيحة تم حسابها مسبقاً.