Passer au contenu

Programmation

Informatique A-Level · Sujet 11

Entrainer
Leçon vidéo pour ce sujet Ouvrir la page vidéo
24:05

Principes de base de la programmation

Un programme doit demander un mot de passe, et continuer à demander jusqu'à ce qu'il soit bon. Simple — mais quelle boucle utilisez-vous ? Les programmes prennent des décisions et répètent des travaux, et choisir…

Narration en anglais · Sous-titres anglais + 中文 incrustés

11.1

Bases de la programmation

Programme
Les candidats doivent être capables de : Notes et orientations
Implémenter et écrire du pseudocode à partir d'une conception donnée présentée sous forme de diagramme de flux de programme ou d'anglais structuré
Écrire des instructions de pseudocode pour : • la déclaration et l'initialisation de constantes • la déclaration de variables • l'assignation de valeurs aux variables • les expressions impliquant n'importe quel opérateur arithmétique ou logique l'entrée au clavier et la sortie sur la console
Utiliser des fonctions intégrées et des routines de bibliothèque Toutes les fonctions non données dans le guide de pseudocode seront fournies. Les fonctions de manipulation de chaînes seront toujours données

Source : Programme Cambridge International

Lignes de code source sur un écran sombre
La programmation transforme une conception en instructions écrites sous forme de code
Un programmeur travaillant à un ordinateur
Un programmeur écrit le code et le teste au fur et à mesure

De la conception au code

Vous devriez être capable de transformer une conception — un organigramme 流程图 (program flowchart) ou anglais structuré 结构化英语 — en pseudo-code 伪代码, puis dans un langage réel :

  1. repérez les variables 变量 et leurs types de données 数据类型.
  2. convertissez les boîtes d'entrée/sortie en INPUT / OUTPUT.
  3. convertissez les losanges de décision en IF...ELSE...ENDIF (ou CASE).
  4. convertissez les flèches de boucle en WHILE, REPEAT...UNTIL, ou FOR.
  5. convertissez les boîtes de traitement en affectations ou calculs.
  6. vérifiez en effectuant un traçage avec une petite entrée.
Une correspondance entre les symboles d'organigramme et le pseudo-code : un parallélogramme d'entrée/sortie devient INPUT ou OUTPUT, un losange de décision devient IF...THEN ou CASE, une boîte de traitement devient une affectation x = expression, et une flèche de boucle devient WHILE, FOR ou REPEAT
Chaque symbole d'organigramme devient un mot-clé de pseudo-code

Constantes et variables

Une constante 常量 retient une valeur qui ne change jamais ; une variable retient une valeur qui peut changer. Déclarez-les avec un type :

La valeur d'une variable peut changer ; une constante reste fixe
La valeur d'une variable peut changer ; une constante reste fixe
CONSTANT Pi = 3.14159
DECLARE Radius : REAL
DECLARE Area : REAL

Radius ← 5
Area ← Pi * Radius * Radius

Utilisez des constantes pour les valeurs fixes qui reviennent (Pi, MaxScore) ; elles rendent le code plus clair et facile à modifier en un seul endroit.

Dans l'examen, une constante est la réponse à la question « identifier un moyen plus approprié de représenter » une valeur fixe, comme un taux de taxe ou un score maximum, qui apparaît à plusieurs endroits dans le pseudo-code. Les avantages que le barème liste : la valeur est définie une seule fois et ne peut pas être modifiée accidentellement par le programme ; un changement est fait en un seul endroit et atteint toutes les instructions qui l'utilisent ; l'identifiant donne à la valeur un sens (MaxScore plutôt que 100), donc le code est plus facile à lire et à vérifier ; et il y a moins de risque d'erreur de frappe dans une longue valeur telle que 3.14159. Une question « indiquer une valeur qui pourrait être remplacée par une constante » demande la littérale du pseudo-code (0.2, 40), pas un nouveau nom.

Chaque variable est déclarée une seule fois, avec un identificateur 标识符 (son nom) et un type de données, avant qu'elle ne soit utilisée. Les six types dans le guide de pseudo-code 9618 :

Type Contient Écrit dans le code comme Usage typique
INTEGER nombres entiers 42, -3 un compteur, un index de tableau, un compteur de boucle
REAL nombres avec une partie fractionnaire 3.75 un prix, une moyenne
CHAR un seul caractère 'A' (guillemets simples) une lettre de note, une touche de menu
STRING une séquence de caractères "Hello" (guillemets doubles) un nom, un code postal
BOOLEAN TRUE ou FALSE TRUE un indicateur tel que Found
DATE une date calendaire 12/05/2026 une date de naissance

Une question « donner le type de données approprié » se répond selon la manière dont la variable est utilisée dans le pseudo-code : une valeur avec une virgule décimale est REAL ; quelque chose défini à TRUE ou FALSE est BOOLEAN ; une valeur entre guillemets simples est CHAR ; une valeur utilisée comme index de tableau, ou avec DIV et MOD, est INTEGER. Écrivez le type en majuscules, orthographié comme le guide l'écrit.

Exemple résolu. Indiquez le type de données approprié pour chaque variable.

Found ← FALSE
Initial ← 'K'
Price ← 12.99
Count ← Count + 1
Name ← "Li Wei"

Found est BOOLEAN (elle retient FALSE) ; Initial est CHAR (un caractère entre guillemets simples) ; Price est REAL (une valeur décimale) ; Count est INTEGER (un compteur qui augmente de un) ; Name est STRING (du texte entre guillemets doubles).

Affectation et expressions

Utilisez ← pour l'affectation 赋值 :

Total ← Total + 1
Average ← Sum / Count

Les expressions utilisent des opérateurs 运算符 :

  • arithmétiques + - * /, plus DIV (division entière) et MOD (reste) : 7 DIV 2 = 3 ; 7 MOD 2 = 1.
  • comparaisons =, <>, <, >, <=, >=.
  • logique AND, OR, NOT.

Précédence 优先级 (du plus élevé au plus bas) : NOT → * / DIV MOD → + - → comparaisons → AND → OR. Utilisez des parenthèses si vous n'en êtes pas sûr.

Entrée et sortie

OUTPUT "Enter your name:"
INPUT Name
OUTPUT "Hello, ", Name

Fonctions intégrées et routines de bibliothèque

De nombreuses tâches disposent de routines de bibliothèque 库例程 prêtes, donc vous n'avez pas besoin de les écrire. La feuille d'insertion Paper 2 insérer 附页 répertorie celles que vous pouvez utiliser, avec leurs noms exacts, paramètres et types de retour ; toute autre fonction dont une question a besoin est donnée dans l'énoncé. Les noms ci-dessous sont ceux de l'insert. VAL et STR sont des noms IGCSE et n'apparaissent ni dans le document 9618, donc ils ne rapportent rien. UCASE et LCASE sont d'un cas différent : ce sont des 9618, définis dans le Guide de Pseudo-code, mais ils prennent un seul CHAR, et l'insert ne les répertorie absolument pas — pour une chaîne complète sur Paper 2, la routine est TO_UPPER.

Une bibliothèque de programmes 程序库 contient des routines déjà écrites, compilées et testées ; un programme les appelle au lieu d'en écrire ses propres. Les avantages que le barème accepte, pour une question « citez trois avantages » : les routines sont déjà testées, donc elles sont moins susceptibles de contenir des erreurs ; elles économisent du temps de développement ; elles peuvent faire des choses qu'un programmeur ne pourrait pas écrire (statistiques complexes, graphismes) ; elles sont écrites par des experts et réutilisées dans de nombreux programmes ; et une routine avec une interface fixe peut être appelée depuis n'importe où dans le programme.

Routine Retourne Exemple
LENGTH(s) le nombre de caractères dans s LENGTH("Hello") = 5
LEFT(s, n) / RIGHT(s, n) les premiers / derniers n caractères RIGHT("Hello", 2) = "lo"
MID(s, start, n) n caractères à partir de la position start (les positions comptent à partir de 1) MID("Hello", 2, 3) = "ell"
TO_UPPER(s) / TO_LOWER(s) s en majuscules / en minuscules TO_UPPER("ab1") = "AB1"
NUM_TO_STR(x) / STR_TO_NUM(s) un nombre sous forme de chaîne / une chaîne sous forme de nombre STR_TO_NUM("3.5") = 3.5
IS_NUM(s) TRUE si s est un nombre valide IS_NUM("12a") = FALSE
ASC(c) / CHR(n) le code caractère de c / le caractère avec le code n ASC('A') = 65, CHR(66) = 'B'
INT(x) la partie entier de x INT(7.9) = 7
RAND(n) un nombre réel aléatoire de 0 jusqu'à, mais sans inclure, n INT(RAND(6)) + 1 est un lancer de dé
DAY(d), MONTH(d), YEAR(d) les parties d'un DATE YEAR(TODAY())
DAYINDEX(d), SETDATE(d, m, y), TODAY() le jour de la semaine (1 = Dimanche) ; une date construite à partir de trois entiers ; la date d'aujourd'hui
EOF(f) TRUE lorsque le fichier f n'a plus de lignes à lire WHILE NOT EOF("data.txt")

Les chaînes sont jointes avec & (concaténation 连接) : "A" & "BC" est "ABC". Utilisez les noms exacts de l'insert, avec les paramètres dans son ordre.

Les dates et nombres aléatoires apparaissent sous forme d'instructions sur une ligne. SETDATE(17, 11, 2007) construit le 17 novembre 2007 ; 12 - MONTH(MyDOB) est le nombre de mois du mois de naissance jusqu'à la fin de l'année ; IF DAYINDEX(MyDOB) = 5 THEN teste pour un jeudi, car dimanche est le jour 1. RAND(n) retourne un nombre réel de 0 jusqu'à, mais sans inclure, n, donc un entier aléatoire de Low à High inclus est INT(RAND(High - Low + 1)) + Low : INT(RAND(21)) - 10 donne une valeur de -10 à 10.

La chaîne COMPUTER représentée comme huit cases de caractères numérotées (positions 1 à 8), avec des résultats résolus : LENGTH(s) = 8, LEFT(s, 3) = COM, MID(s, 4, 3) = PUT, RIGHT(s, 2) = ER, et UCASE/LCASE changent la casse des lettres
Les routines de chaîne courantes agissant sur s = "COMPUTER" (positions 1–8)

Exemple résolu. Évaluez chaque expression, sachant Word ← "Program", Code ← 'Q' et N ← 7.

Expression Valeur Pourquoi
LENGTH(Word) 7 sept caractères
MID(Word, 4, 2) "gr" deux caractères, commençant à la position 4
LEFT(Word, 3) & "!" "Pro!" joints avec &
TO_UPPER(RIGHT(Word, 2)) "AM" la fonction interne s'exécute en premier
ASC(Code) - ASC('A') 16 'Q' est 81 et 'A' est 65
N DIV 2 + N MOD 2 4 3 + 1
NUM_TO_STR(N) & "th" "7th" le nombre devient d'abord une chaîne
INT(N / 2) 3 3.5 est coupé à sa partie entière

Travaillez de l'intérieur vers l'extérieur, et gardez les guillemets : "7" est une chaîne et 7 est un nombre.

Exemple résolu. Chaque instruction peut contenir une erreur dans son utilisation d'une fonction ou d'un opérateur. Décrivez l'erreur, ou écriveZ NO ERROR. (Supposez que chaque variable a le bon type.)

Instruction Erreur
Result ← 2 & 4 & joint des chaînes ; 2 et 4 sont des entiers, donc + est nécessaire
SubString ← MID("pseudocode", 4, 1) NO ERROR : un caractère à partir de la position 4, "u"
IF x = 3 OR 4 THEN OR a besoin d'un Booléen de chaque côté : IF x = 3 OR x = 4 THEN
Result ← Status AND INT(x / 2) AND a besoin de deux Booléens ; INT(x / 2) est un entier
Message ← "Done" + LENGTH(MyString) + ne peut pas ajouter une chaîne à un entier : "Done" & NUM_TO_STR(LENGTH(MyString))

Chaque opérateur fonctionne sur des types particuliers : & sur les chaînes, + - * / DIV MOD sur les nombres, AND OR NOT sur les Booléens, et = <> sur deux valeurs du même type. Un tableau « évaluez chaque expression, ou écrivez ERROR » est noté de la même façon : LENGTH(42) et "A" + 1 sont ERROR, car le type ne correspond pas à la fonction ou à l'opérateur.

Exemple résolu. Avec Points ← 100, Active ← TRUE et Exempt ← FALSE, évaluez chaque expression.

Expression Valeur Pourquoi
(Points > 99) OR Active TRUE les deux côtés sont vrais ; l'un suffirait
(Points MOD 2 = 0) OR Exempt TRUE 100 MOD 2 est 0
(Points <= 75) AND (Active OR Exempt) FALSE le premier côté est faux, et AND a besoin des deux
(Active OR NOT Active) AND NOT Exempt TRUE Active OR NOT Active est toujours vrai

La dernière expression se simplifie : X OR NOT X est TRUE quel que soit X, donc toute l'expression n'est que NOT Exempt. Évaluez d'abord les parenthèses, puis NOT, ensuite AND, puis OR.

Explorer

Une variable est une boîte étiquetée

Chaque affectation stocke une seule valeur dans une boîte nommée ; réaffecter le même nom l'écrase. Suivez le programme et observez chaque boîte prendre sa valeur actuelle.

Vocabulaire Entrainer
Anglais Chinois Pinyin
flowchart/ˈfləʊtʃɑːt/ 流程图 liú chéng tú
structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ 结构化英语 jié gòu huà yīng yǔ
pseudocode/ˈsuːdəʊkəʊd/ 伪代码 wěi dài mǎ
variables/ˈveərɪəblz/ 变量 biàn liàng
data types/ˈdeɪtə taɪps/ 数据类型 shù jù lèi xíng
assignment/əˈsaɪnmənt/ 赋值 fù zhí
constant/ˈkɒnstənt/ 常量 cháng liàng
identifier/aɪˈdentɪfaɪə/ 标识符 biāo shí fú
function/ˈfʌŋkʃn/ 函数 hán shù
library routines/ˈlaɪbrəri ruːˈtiːnz/ 库例程 kù lì chéng
insert/ˈɪnsɜːt/ 附页 fù yè
parameters/pəˈræmɪtəz/ 参数 cān shù
program library/ˈprəʊɡræm ˈlaɪbrəri/ 程序库 chéng xù kù
concatenation/kənˌkætəˈneɪʃn/ 连接 lián jiē
11.2

Sélection

Programme
Les candidats doivent être capables de : Notes et orientations
Utiliser du pseudocode pour écrire : • une instruction 'IF' incluant la clause 'ELSE' et des instructions IF imbriquées • une structure 'CASE' • une boucle 'contrôlée par compteur' : • une boucle 'post-condition' • une boucle 'pré-condition'
Justifier pourquoi une structure de boucle peut être mieux adaptée pour résoudre un problème que les autres

Source : Programme Cambridge International

Sélection 选择 choisit quelles étapes s'exécutent.

IF age >= 18 THEN
    OUTPUT "Adult"
ELSE
    OUTPUT "Minor"
ENDIF
Un organigramme : à partir du début, un losange de décision teste age >= 18 ; la branche TRUE affiche Adult et la branche FALSE affiche Minor, et les deux se rejoignent à la fin
Un IF...ELSE teste la condition une seule fois, puis exécute exactement une branche

Pour plus de deux cas, vous pouvez utiliser un IF imbriqué nested 嵌套, mais une forte imbrication est difficile à lire — un CASE est plus propre lors du test d'une valeur contre plusieurs options :

CASE OF Grade
    "A": OUTPUT "Excellent"
    "B": OUTPUT "Good"
    OTHERWISE: OUTPUT "Try again"
ENDCASE

Cambridge CASE permet les valeurs simples, les listes de valeurs (1, 2, 3:) et les plages (1 TO 5:).

Un IF imbriqué est un IF à l'intérieur d'une branche d'un autre IF. Chaque IF a besoin de son propre ENDIF, et l'examinateur vérifie que chaque construction est fermée :

IF Mark >= 50 THEN
    IF Mark >= 80 THEN
        OUTPUT "Distinction"
    ELSE
        OUTPUT "Pass"
    ENDIF
ELSE
    OUTPUT "Fail"
ENDIF

Les limites sont là où des points sont perdus. "Une note de 50 ou plus suffit" est Mark >= 50, pas Mark > 50 ; la dernière CASE branche, pour "tout le reste", s'écrit OTHERWISE, pas une condition comme > 200. Une mauvaise comparaison ici est une erreur logique 逻辑错误 : le programme s'exécute, mais donne la mauvaise sortie pour certaines entrées — et une table de traçage avec une valeur limite telle que 50 est la méthode pour la détecter.

Un organigramme d'une instruction CASE OF Grade : la valeur est testée contre chaque garde séquentiellement (une valeur simple, une liste de valeurs, puis une plage) ; la première branche correspondante exécute son instruction, sinon la branche OTHERWISE s'exécute, et toutes les branches se rejoignent à ENDCASE
Une instruction CASE exécute la branche qui correspond à la valeur

Exemple résolu. Réécrivez ceci avec la même fonctionnalité, sans utiliser de structure CASE.

CASE OF MySwitch
    1: ThisChar ← 'a'
    2: ThisChar ← 'y'
    3: ThisChar ← '7'
    OTHERWISE: ThisChar ← '*'
ENDCASE

Chaque valeur devient une branche d'une chaîne de IFs, et OTHERWISE devient la dernière ELSE :

IF MySwitch = 1 THEN
    ThisChar ← 'a'
ELSE
    IF MySwitch = 2 THEN
        ThisChar ← 'y'
    ELSE
        IF MySwitch = 3 THEN
            ThisChar ← '7'
        ELSE
            ThisChar ← '*'
        ENDIF
    ENDIF
ENDIF

Deux clauses qui attribuent la même valeur sont fusionnées en une seule clause avec une liste de valeurs : 1, 2: ThisChar ← 'a'. Les gardes sont testés dans l'ordre : avec des plages telles que 1 TO 50: suivies de 40 TO 60:, une valeur de 45 suit la première branche correspondante, donc une attribution dans une branche ultérieure peut ne jamais être exécutée — et lorsque les branches précédentes couvrent déjà toutes les valeurs possibles, la branche OTHERWISE n'est jamais atteinte non plus.

Dans l'autre sens, les IF imbriqués qui testent plusieurs booléens sont plus clairs sous la forme d'une condition par résultat : IF A AND B AND C THEN CALL Sub1(), puis IF A AND B AND NOT C THEN CALL Sub2(), et ainsi de suite. Le regroupement des tests avec AND et OR élimine l'imbrication, et IF A THEN est accepté à la place de IF A = TRUE THEN.

Explorer

Sélection (SI / SINON)

Changez l'entrée et voyez quelle branche s'exécute — l'essence de la sélection.

Vocabulaire Entrainer
Anglais Chinois Pinyin
nested/ˈnestɪd/ 嵌套 qiàn tào
logic error/ˈlɒdʒɪk ˈerə/ 逻辑错误 luó jí cuò wù
trace table/treɪs ˈteɪbl/ 跟踪表 gēn zōng biǎo
11.2

Itération

Itération 迭代 répète un bloc. Trois boucles diffèrent par le nombre de fois que le corps s'exécute.

Boucle contrôlée par compteur (FOR)

Une boucle contrôlée par compteur 计数循环 — utilisez-la lorsque vous savez combien de fois répéter :

FOR i ← 1 TO 10
    OUTPUT i
NEXT i

Un STEP peut modifier le compteur (par ex. FOR i ← 10 TO 1 STEP -1). Idéal pour un nombre fixe de répétitions ou pour traiter chaque élément d'un tableau 数组.

Boucle à précondition (WHILE)

Une boucle à précondition 前测循环 teste la condition avant chaque passage, elle peut donc s'exécuter zéro fois :

WHILE total < 100 DO
    INPUT n
    total ← total + n
ENDWHILE

Boucle à postcondition (REPEAT...UNTIL)

Une boucle à postcondition 后测循环 teste la condition après chaque passage, elle s'exécute donc toujours au moins une fois :

REPEAT
    INPUT password
UNTIL password = correctPassword

Choisir la bonne boucle

Trois colonnes d'organigrammes. FOR : une boîte de compteur (i = 1 to N) puis une boîte de corps, boucle vers le haut, pour un nombre fixe de passages. WHILE : un losange de test au-dessus d'une boîte de corps, la condition est donc vérifiée avant le corps et la boucle peut s'exécuter zéro fois. REPEAT : une boîte de corps au-dessus d'un losange de test, la condition est donc vérifiée après le corps et la boucle s'exécute au moins une fois
Les trois boucles diffèrent par l'emplacement du test de condition — avant le corps (WHILE), après (REPEAT), ou un nombre défini de fois (FOR)
  • compteur connu à l'avance → FOR.
  • peut nécessiter zéro passages → WHILE.
  • toujours au moins un passage → REPEAT...UNTIL.

Justifiez votre choix selon si le compteur est connu et si le corps doit s'exécuter au moins une fois. Une question typique donne un scénario ("demander un mot de passe jusqu'à ce qu'il soit correct, mais toujours demander au moins une fois") et demande quelle boucle convient.

Les deux points sont attribués au nom de la boucle et à la raison, dans les termes du barème : count-controlled, because the number of iterations is known before the loop starts; post-condition, because the loop body must be executed at least once; pre-condition, because the loop may not need to execute at all. Une boucle sur les quatre éléments d'un tableau écrit comme un WHILE avec un compteur est "pas la plus appropriée" : le compteur, quatre, est connu, donc une boucle FOR convient.

Exemple résolu. Quelle boucle convient à chaque tâche ? (a) imprimer la table de multiplication de 12 ; (b) continuer à lire des nombres jusqu'à ce que l'utilisateur entre 0 ; (c) demander un mot de passe jusqu'à ce qu'il soit correct. Choisissez en demandant combien de fois le corps s'exécute et quand le test a lieu. (a) Le compteur est connu à l'avance (12), donc utilisez une boucle FOR. (b) Le compteur est inconnu, et la toute première entrée pourrait déjà être 0 - donc le test doit venir avant le corps : une boucle WHILE, qui s'exécute zéro ou plus fois. (c) Le compteur est inconnu, mais vous devez toujours demander au moins une fois avant qu'il y ait quoi que ce soit à tester - donc le test vient après le corps : une REPEAT...UNTIL, qui s'exécute une ou plus fois. La question décisive est de savoir si le corps doit s'exécuter au moins une fois : WHILE peut s'exécuter zéro fois, REPEAT s'exécute toujours une fois.

Exécution manuelle avec une table de traçage

Une table de traçage 跟踪表 enregistre la valeur de chaque variable pendant que vous faites une exécution manuelle 手工跟踪 (passez en revue à la main) un algorithme. C'est comment vous testez une boucle sur papier, et c'est une question de six points sur la plupart des Paper 2s.

DECLARE Count, Total : INTEGER
Count ← 1
Total ← 0
WHILE Total < 10
    Total ← Total + Count * 2
    Count ← Count + 1
ENDWHILE
OUTPUT Count, Total
Count Total Total < 10 OUTPUT
1 0 TRUE
2 2 TRUE
3 6 TRUE
4 12 FAUX 4, 12

Règles qui rapportent les points : une colonne par variable, dans l'ordre donné par la question ; n'écrivez une valeur que lorsqu'elle changement ; commencez une nouvelle ligne à chaque fois que la boucle se répète ; évaluez la condition avec les valeurs actuelles, et arrêtez-vous dès qu'elle est FALSE ; mettez la sortie dans sa propre colonne, exactement tel qu'elle apparaîtrait. Tracez l'algorithme tel qu'il est écrit, pas celui que vous pensez avoir été intendu — s'il ne s'arrête jamais, dites-le.

Exemple résolu. Quelles constructions utilise chaque ligne — sélection, itération ou appel de sous-routine ?

Pseudocode Sélection Itération Subroutine
IF Ready = TRUE THEN
CALL Start()

FIN SI | FOR I ← 1 TO 20 ... NEXT I | | yes | | | WHILE NOT IsFull() ... ENDWHILE | | yes | yes | | CASE OF Key ... OTHERWISE ... ENDCASE | yes | | |

IF et CASE sont des sélections ; FOR, WHILE et REPEAT sont des itérations ; un nom suivi de parenthèses — Start(), IsFull() — est un appel à une procédure ou une fonction, partout où il apparaît, y compris dans une condition.

Explorer

Suivez une boucle, passage par passage

Un tableau de traçage enregistre chaque variable après chaque passage de la boucle. Observez le compteur i grimper pendant que le total cumulatif se construit — exactement ce qu'une question de traçage d'examen vous demande de remplir.

Explorer

Tracer une boucle

Parcourez la boucle et observez les variables changer à chaque itération — c'est exactement ce qu'enregistre une table de traçage.

Vocabulaire Entrainer
Anglais Chinois Pinyin
selection/sɪˈlekʃn/ 选择 xuǎn zé
iteration/ˌɪtəˈreɪʃn/ 迭代 dié dài
count-controlled loop/kaʊnt kənˈtrəʊld luːp/ 计数循环 jì shù xún huán
pre-condition loop/priː kənˈdɪʃn luːp/ 前测循环 qián cè xún huán
post-condition loop/pəʊst kənˈdɪʃn luːp/ 后测循环 hòu cè xún huán
dry run/draɪ rʌn/ 手工跟踪 shǒu gōng gēn zōng
11.3

Procédures et fonctions

Programme
Les candidats doivent être capables de : Notes et orientations
Définir et utiliser une procédure
Expliquer où, dans la construction d'un algorithme, il serait approprié d'utiliser une procédure
Utiliser des paramètres Une procédure peut avoir zéro, un ou plusieurs paramètres Un paramètre peut être passé par référence ou par valeur
Définir et utiliser une fonction
Expliquer où, dans la construction d'un algorithme, il est approprié d'utiliser une fonction Une fonction est utilisée dans une expression, ex. la valeur de retour remplace l'appel
Utiliser la terminologie associée aux procédures et fonctions y compris en-tête de procédure/fonction, interface de procédure/fonction, paramètre, argument, valeur de retour
Écrire du pseudocode efficace

Source : Programme Cambridge International

Programmation structurée 结构化编程 construit un programme à partir de petites sous-routines 子程序 nommées, chacune ayant une seule tâche.

Procédure

Une procédure 过程 est un bloc nommé qui exécute une action ; elle peut prendre des paramètres 参数 mais ne retourne pas de valeur.

PROCEDURE Greet(name : STRING)
    OUTPUT "Hello, ", name
ENDPROCEDURE

CALL Greet("Ada")

Fonction

Une fonction 函数 est semblable à une procédure mais elle retourne une valeur qui fait partie d'une expression.

FUNCTION Square(x : INTEGER) RETURNS INTEGER
    RETURN x * x
ENDFUNCTION

result ← Square(5) + 1     // result = 26

Utilisez une procédure lorsque la sous-routine effectue une action ; utilisez une fonction lorsqu'elle calcule une valeur pour l'appelant.

Le syllabus demande où, dans la construction d’un algorithme, chacun est approprié. Une procédure est appropriée lorsque le même groupe d’étapes est nécessaire à plusieurs endroits (valider une entrée, imprimer un menu, échanger deux valeurs) : les étapes sont écrites une fois et CALLées par nom. Une fonction est appropriée lorsqu’une seule valeur doit être calculée puis utilisée dans une expression — un total, un résultat TRUE/FALSE, le plus grand de deux nombres — car la valeur de retour 返回值 remplace l’appel : IF IsValid(Code) THEN.

Deux panneaux. Procédure : appeler Greet(Ada) exécute une action et affiche Hello, Ada, sans retourner de valeur. Fonction : définir y = Square(5) calcule 5 fois 5 = 25, retourne 25, donc y contient alors 25
Une procédure exécute une action et ne retourne rien ; une fonction retourne une valeur que vous utilisez dans une expression

Paramètres

Un paramètre est une variable qu'une sous-routine déclare pour recevoir une entrée ; les valeurs fournies par l'appelant sont des arguments 实参. Deux façons de les passer :

  • passage par valeur 传值 — la routine reçoit une copie ; les modifications à l'intérieur n'affectent pas l'appelant. Utilisez pour les entrées qu'elle lit uniquement.
  • passage par référence 传引用 — la routine reçoit une référence à la variable de l'appelant ; les modifications affectent l'appelant. Utilisez lorsqu'elle doit mettre à jour un paramètre.
Deux schémas de boîtes mémoire. Passage par valeur : la variable x = 5 de l'appelant est copiée dans une boîte de paramètre distincte a = 5, donc modifier a laisse x à 5. Passage par référence : le paramètre a est une flèche pointant vers la propre boîte x de l'appelant, donc modifier a modifie aussi x
Passage par valeur copie la valeur dans une nouvelle boîte ; passage par référence permet à la routine de modifier la propre variable de l'appelant
PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER)
    DECLARE temp : INTEGER
    temp ← a
    a ← b
    b ← temp
ENDPROCEDURE

Le pseudocode Cambridge écrit le mode dans l'en-tête, BYVAL ou BYREF, avant chaque paramètre. Si aucun n'est écrit, BYVAL est supposé, donc une routine qui doit modifier la variable de l'appelant — Swap, ou une procédure qui met à jour un total accumulé — nécessite BYREF dans son en-tête.

Exemple résolu. Quelle est la sortie ?

PROCEDURE Adjust(BYREF X : INTEGER, BYVAL Y : INTEGER)
    X ← X + Y
    Y ← Y * 2
ENDPROCEDURE

A ← 5
B ← 3
CALL Adjust(A, B)
OUTPUT A, B

X est une référence à A, donc A devient 8. Y est une copie de B, donc doubler Y laisse B à 3. La sortie est 8, 3. Si l'en-tête avait dit BYVAL X, A serait toujours 5.

Variables locales vs globales

Une variable locale 局部变量 est déclarée à l'intérieur d'une sous-routine et n'existe que tant qu'elle s'exécute. Une variable globale 全局变量 est déclarée à l'extérieur et est visible partout. Privilégiez les variables locales et les paramètres — une utilisation excessive des variables globales rend le code difficile à suivre et à tester. (La zone où un nom est visible est sa portée 作用域.)

La différence d'une ligne : une variable globale peut être accédée de n'importe où dans le programme, une variable locale uniquement à l'intérieur de la sous-routine qui la déclare. Avantages des variables locales acceptés par le barème : le même identificateur peut être utilisé dans une autre sous-routine sans conflit ; la valeur ne peut pas être changée accidentellement par d'autres parties du programme ; la mémoire est libérée lorsque la sous-routine se termine ; et la sous-routine est autonome, elle peut donc être testée individuellement et réutilisée dans un autre programme.

Une variable locale est créée chaque fois que la sous-routine est appelée et détruite lors du retour, elle ne peut donc pas conserver une valeur d'un appel à l'autre. Une procédure qui construit une chaîne sur des appels répétés a donc besoin que cette chaîne soit globale (ou passée BYREF). Si MyString est changée d'une variable globale à une variable locale déclarée à l'intérieur de MyOutput(), chaque appel commence avec une nouvelle MyString vide, le texte ajouté par les appels précédents est perdu, et la procédure "ne fonctionne pas comme prévu".

Trois appels de la même procédure sur une ligne temporelle ; chaque appel crée sa propre boîte locale MyString, neuve et vide, qui disparaît lorsque l'appel se termine, tandis qu'une boîte globale MyString au-dessus conserve sa valeur entre les appels
Une variable locale est une nouvelle boîte vide à chaque appel ; seule une variable globale (ou un paramètre BYREF) conserve une valeur entre les appels
Une grande boîte extérieure étiquetée portée globale contient la variable globale Total, visible partout, et une petite boîte intérieure étiquetée PROCEDURE Calc, portée locale, contient la variable locale temp, qui n'existe que pendant l'exécution de Calc
Une variable globale est visible partout ; une variable locale n'existe que dans sa propre procédure

Quand utiliser une sous-routine

Utilisez une sous-routine lorsque :

  • la même logique apparaît à plusieurs endroits — écrivez-la une fois, appelez-la plusieurs fois.
  • un bloc a un but nommé clair — le nom documente ce qu'il fait.
  • le programme est complexe — divisez-le en parties (décomposition 分解).
  • vous voulez tester une partie isolément.

Ne les rendez pas si petites que le coût de l'appel dépense plus que le travail à l'intérieur.

Terminologie

  • définition — le bloc PROCEDURE ... ENDPROCEDURE (ou fonction).
  • appel — là où il est invoqué. argument — une valeur passée. paramètre — la variable qui le reçoit.
  • valeur de retour — ce qu'une fonction renvoie.
  • en-tête de procédure/fonction — la première ligne donnant le nom et les paramètres (PROCEDURE Name(params) ou FUNCTION Name(params) RETURNS type).
  • interface de procédure/fonction / signature 签名 — nom + paramètres + type de retour : ce qu'un appelant doit savoir pour l'utiliser.

Exemple résolu. Décrivez chaque terme utilisé dans l'en-tête FUNCTION Pass2(Count : INTEGER) RETURNS BOOLEAN.

Terme Signification
FUNCTION une sous-routine qui retourne une valeur
Pass2 l'identifiant utilisé pour l'appeler
Count le paramètre : l'identifiant qui reçoit l'argument passé
INTEGER le type de données du paramètre
RETURNS BOOLEAN le type de données de la valeur retournée par la fonction

Les deux identifiants dans PROCEDURE MyProc(Count : INTEGER, Message : STRING) sont des paramètres : ils reçoivent les valeurs passées lors de l'appel de la procédure et sont utilisés à l'intérieur comme des variables locales.

Pour convertir une procédure en fonction : remplacez PROCEDURE par FUNCTION et ajoutez RETURNS <type> ; remplacez le OUTPUT (ou le paramètre BYREF qui transportait le résultat vers l'extérieur) par une instruction RETURN ; et modifiez chaque appel pour que la valeur retournée soit utilisée, Result ← Unpack(Text) au lieu de CALL Unpack(Text, Result). Pour une question « écrire l'en-tête », écrivez toute la ligne : FUNCTION Calculate(Expression : STRING) RETURNS INTEGER. Un paramètre tableau est passé par référence, donc une procédure qui écrit dans un tableau modifie le tableau de l'appelant.

Lorsqu'un programme acquiert un nouveau module, l'interface est d'abord agreed : le nom, les paramètres (combien, dans quel ordre, de quel type) et le type de retour, ainsi que toute donnée globale que le module lit ou écrit. Un module envoyant un rappel avant une date limite a besoin du record (ou de son index) comme paramètre et ne retourne rien, c'est donc une procédure ; le programme principal l'appelle une fois par record.

Écrire un module pour Paper 2

La moitié de Paper 2 est « écrire du pseudocode pour le module X ». Le barème attribue une marque par élément, donc un module inachevé obtient encore des points pour chaque bonne partie. Les éléments que l'examinateur recherche :

Une fonction pseudocode annotée, CountAbove, avec une étiquette sur chaque partie rapportant une marque : l'en-tête avec son paramètre et son type de retour, les déclarations locales, le total initialisé avant la boucle, la boucle FOR sur chaque élément, la condition IF avec la bonne borne, la mise à jour à l'intérieur de l'IF, les constructions fermées, et le RETURN après la boucle
Chaque partie d'une réponse de module porte sa propre marque, donc écrivez-les toutes même si l'une est incertaine
  1. L'en-tête, tel que décrit par la question : PROCEDURE Name(Param : TYPE) ou FUNCTION Name(Param : TYPE) RETURNS TYPE, avec BYREF où la routine doit modifier l'argument.
  2. Déclarations locales : DECLARE chaque variable locale avec son type, et initialisez les compteurs et totaux (Count ← 0).
  3. La boucle visitant chaque élément : FOR Index ← 1 TO 50 pour un tableau dont la taille est donnée ; WHILE NOT EOF(...) pour un fichier.
  4. La condition, avec la bonne comparaison et borne, sur le bon élément : IF Score[Index] > Limit THEN.
  5. La mise à jour à l'intérieur de la branche : le compteur augmenté, la valeur stockée, ou le message affiché.
  6. La fin : RETURN une fois, après la boucle, dans une fonction ; ENDFUNCTION ou ENDPROCEDURE ; et chaque IF, FOR et WHILE fermé.

Exemple résolu. Un tableau global Score : ARRAY[1:50] OF INTEGER contient les notes. Écrivez une fonction CountAbove(Limit : INTEGER) qui retourne combien de notes sont supérieures à Limit.

FUNCTION CountAbove(BYVAL Limit : INTEGER) RETURNS INTEGER
    DECLARE Index, Count : INTEGER
    Count ← 0
    FOR Index ← 1 TO 50
        IF Score[Index] > Limit THEN
            Count ← Count + 1
        ENDIF
    NEXT Index
    RETURN Count
ENDFUNCTION

Marques : l'en-tête avec son paramètre et RETURNS INTEGER ; Count déclaré et mis à 0 ; une boucle sur les 50 éléments ; la comparaison > Limit (pas >=) ; le compteur mis à jour à l'intérieur du IF ; RETURN Count après la boucle. Le programme principal utilise la valeur de retour dans une expression ou une sortie : OUTPUT "Above 70: ", CountAbove(70).

Exemple résolu. Écrivez une fonction IsValid(Code : STRING) qui retourne TRUE lorsque Code est deux lettres majuscules suivies de quatre chiffres — le format 格式 AB1234 — et FALSE sinon.

FUNCTION IsValid(BYVAL Code : STRING) RETURNS BOOLEAN
    DECLARE Index : INTEGER
    DECLARE Ch : STRING
    IF LENGTH(Code) <> 6 THEN
        RETURN FALSE
    ENDIF
    FOR Index ← 1 TO 6
        Ch ← MID(Code, Index, 1)
        IF Index <= 2 THEN
            IF Ch < "A" OR Ch > "Z" THEN
                RETURN FALSE
            ENDIF
        ELSE
            IF Ch < "0" OR Ch > "9" THEN
                RETURN FALSE
            ENDIF
        ENDIF
    NEXT Index
    RETURN TRUE
ENDFUNCTION

Le contrôle de longueur vient en premier, donc MID n'est jamais demandé pour une position inexistante. Une validation 验证 comme celle-ci retourne un BOOLEAN pour que l'appelant puisse écrire IF IsValid(Entry) THEN ... ELSE OUTPUT "Invalid code" ENDIF : un message à l'utilisateur est affiché par l'appelant, pas par la fonction — une fonction calcule, une procédure agit.

Exemple résolu. Écrivez une fonction IsPalindrome(Word : STRING) qui retourne TRUE lorsque Word se lit de la même manière à l'envers, comme "RACECAR".

Comparez les caractères des deux extrémités, en avançant vers l'intérieur : la position Index est appariée avec la position Len - Index + 1, et seule la première moitié doit être testée.

Le mot RACECAR dans sept cases numérotées ; des arcs appairont la position 1 avec 7, 2 avec 6 et 3 avec 5, étiquetés position i et position Len moins i plus 1 ; le caractère central n'a pas de paire
Un contrôle de palindrome appaire la position i avec la position Len - i + 1 et s'arrête au milieu
FUNCTION IsPalindrome(BYVAL Word : STRING) RETURNS BOOLEAN
    DECLARE Len, Index : INTEGER
    Len ← LENGTH(Word)
    FOR Index ← 1 TO Len DIV 2
        IF MID(Word, Index, 1) <> MID(Word, Len - Index + 1, 1) THEN
            RETURN FALSE
        ENDIF
    NEXT Index
    RETURN TRUE
ENDFUNCTION

Les mêmes trois outils — une FOR sur les positions, MID(s, i, 1) pour lire un caractère, et & pour construire une nouvelle chaîne — répondent à la plupart des modules de chaînes sur Paper 2 : compter combien de fois un caractère apparaît (IF MID(s, i, 1) = Ch THEN Count ← Count + 1), remplacer chaque instance d'un caractère (ajouter soit NewChar ou le caractère original à NewString à chaque position), masquer tout sauf les quatre derniers chiffres d'un numéro de carte (ajouter '*' pour chaque position jusqu'à Len - 4), ou écrire votre propre MID() en joignant les caractères de Start à Start + Length - 1. Demander MID pour une position beyond la fin de la chaîne est une erreur d'exécution, donc vérifiez LENGTH d'abord.

Fichiers. Les valeurs dans les variables disparaissent quand le programme se termine, donc un module qui doit conserver des données pour la prochaine exécution les écrit dans un fichier : OPENFILE "scores.txt" FOR WRITE, une WRITEFILE "scores.txt", NUM_TO_STR(Score[Index]) par ligne à l'intérieur de la boucle, et CLOSEFILE "scores.txt" une fois, après la boucle ; la lecture utilise FOR READ, READFILE et WHILE NOT EOF("scores.txt"). Topic 10 a la section complète sur les fichiers ; ici les marques sont pour l'ouverture dans le bon mode, la lecture ou l'écriture à l'intérieur de la boucle, et la fermeture une fois après celle-ci.

Explorer

La pile d'appels : poussée lors de l'appel, retirée lors du retour

Appeler une sous-routine pousse un nouveau cadre sur le dessus ; retourner retire celui-ci et renvoie une valeur à l'appelant. L'appel en cours d'exécution est toujours le cadre du sommet.

Vocabulaire Entrainer
Anglais Chinois Pinyin
array/əˈreɪ/ 数组 shù zǔ
operators/ˈɒpəreɪtəz/ 运算符 yùn suàn fú
precedence/ˈpresɪdəns/ 优先级 yōu xiān jí
procedure/prəˈsiːdʒə/ 过程 guò chéng
structured programming/ˈstrʌktʃəd ˈprəʊɡræmɪŋ/ 结构化编程 jié gòu huà biān chéng
subroutines/ˈsʌbruːtiːnz/ 子程序 zi chéng xù
return value/rɪˈtɜːn ˈvæljuː/ 返回值 fǎn huí zhí
arguments/ˈɑːɡjuːmənts/ 实参 shí cān
pass by value/pæs baɪ ˈvæljuː/ 传值 chuán zhí
pass by reference/pæs baɪ ˈrefrəns/ 传引用 chuán yǐn yòng
global variable/ˈɡləʊbl ˈveərɪəbl/ 全局变量 quán jú biàn liàng
local variable/ˈləʊkl ˈveərɪəbl/ 局部变量 jú bù biàn liàng
scope/skəʊp/ 作用域 zuò yòng yù
decomposition/ˌdiːkɒmpəˈzɪʃn/ 分解 fēn jiě
signature/ˈsɪɡnɪtʃə/ 签名 qiān míng
format/ˈfɔːmæt/ 格式 gé shì
Validation/ˌvælɪˈdeɪʃn/ 验证 yàn zhèng
run-time error/rʌn taɪm ˈerə/ 运行时错误 yùn xíng shí cuò wù
11.3

Écrire du pseudocode efficace

Trois caractéristiques qui facilitent la compréhension du pseudocode — la réponse à une question « énoncer trois caractéristiques » — sont les identifiants significatifs (Total, pas t), l'indentation des instructions à l'intérieur de chaque construction, et les commentaires (// ...) expliquant le but ; les mots-clés en majuscules, une instruction par ligne et des lignes vides entre les sections sont aussi acceptés. Le pseudocode efficace va plus loin :

  • déplacer les invariants hors des boucles — si une valeur (un invariant 不变量) ne change pas avec le compteur de boucle, calculez-la une fois avant la boucle.
  • sortir d'une boucle tôt lorsque la réponse est trouvée (arrêter une recherche linéaire 线性查找 dès que la cible apparaît).
  • éviter le travail redondant — stocker un résultat et le réutiliser au lieu de recalculer.
  • choisir la bonne structure de données — un tableau bat de nombreux variables séparées lorsque les éléments appartiennent ensemble.
  • remplacer les IF imbriqués profonds par CASE lorsqu'on teste une valeur contre beaucoup.
  • commenter l'intention, pas la mécanique (// validate the postcode, pas // loop 6 times).
  • utiliser des noms significatifs (numberOfPupils, pas n) et initialiser les variables avant usage.
Déplacer le travail qui ne change jamais hors de la boucle, afin qu'il s'exécute une fois au lieu de chaque passage
Déplacer le travail inchangé hors de la boucle afin qu'il s'exécute une fois
Vocabulaire Entrainer
Anglais Chinois Pinyin
invariant/ɪnˈveərɪənt/ 不变量 bù biàn liàng
linear search/ˈlɪnɪə sɜːtʃ/ 线性查找 xiàn xìng chá zhǎo
syntax error/ˈsɪntæks ˈerə/ 语法错误 yǔ fǎ cuò wù
11.3

Tests et erreurs

Trois types d'erreurs, chacun trouvé d'une manière différente :

Erreur Ce que c'est Exemple Trouvé par
erreur de syntaxe 语法错误 une instruction qui viole les règles du langage une⟩ENDIF manquante ; OUTPT "Hi" le traducteur, avant l'exécution du programme
erreur d'exécution 运行时错误 le programme s'exécute, mais une instruction ne peut être exécutée division par zéro ; un index de tableau de 0 ou 51 ; une fonction appelée avec un paramètre invalide ; une boucle qui ne se termine jamais, donc le programme « gèle » pendant l'exécution : le programme s'arrête ou reste bloqué
erreur logique le programme s'exécute jusqu'au bout, mais la sortie est fausse > au lieu de >= ; un total jamais mis à 0 le test avec une table de traçage et des données de test choisies

Un IDE 集成开发环境 aide à trouver les deux derniers : un point d'arrêt 断point arrête le programme à une ligne choisie ; le pas à pas 单步执行 exécute ensuite une instruction à la fois ; et la fenêtre de rapport (ou surveillance) montre la valeur de chaque variable à cet instant, donc la ligne où une valeur devient erronée est vue directement. Les méthodes de test et les données de test sont dans le topic 12.

Vocabulaire Entrainer
Anglais Chinois Pinyin
IDE/ˌaɪ diː ˈiː/ 集成开发环境 jí chéng kāi fā huán jìng
breakpoint/ˈbreɪkpɔɪnt/ 断点 duàn diǎn
single stepping/ˈsɪŋɡl ˈstepɪŋ/ 单步执行 dān bù zhí xíng
11.3

Définitions acceptées par l'examinateur

Une question de définition est notée selon un libellé fixe. Apprenez-le exactement.

Terme Définition
procédure une sous-routine qui effectue une tâche (une séquence d'étapes) et ne retourne pas de valeur ; elle est appelée avec CALL
fonction une sous-routine qui retourne une valeur unique au point où elle a été appelée, donc elle peut être utilisée dans une expression
paramètre l'identifiant dans l'en-tête d'une sous-routine qui reçoit une valeur ou une référence lorsque la sous-routine est appelée
argument la valeur (ou variable) fournie dans l'appel, associée à un paramètre
passage par valeur une copie de la valeur de l'argument est donnée à la sous-routine, donc les modifications à l'intérieur n'affectent pas la variable originale
passage par référence l'adresse de la variable est donnée à la sous-routine, donc les modifications à l'intérieur changent la variable originale
en-tête la première ligne d'une définition de sous-routine : son nom, ses paramètres et, pour une fonction, son type de retour
interface ce qu'un programme appelant doit savoir pour utiliser une sous-routine : son nom, ses paramètres (nombre, ordre, type) et son type de retour
valeur de retour la valeur qu'une fonction renvoie à l'expression qui l'a appelée
variable locale déclarée à l'intérieur d'une sous-routine ; elle n'existe que pendant l'exécution de la sous-routine et ne peut être utilisée que dans celle-ci
variable globale déclarée en dehors de toute sous-routine ; elle peut être utilisée partout dans le programme
boucle contrôlée par compteur répète un nombre fixe de fois, contrôlée par un compteur (FOR ... NEXT)
boucle précondition teste sa condition avant chaque itération, donc le corps peut ne jamais s'exécuter (WHILE ... ENDWHILE)
boucle postcondition teste sa condition après chaque itération, donc le corps s'exécute au moins une fois (REPEAT ... UNTIL)
constante une valeur nommée qui ne peut pas changer pendant l'exécution du programme
sous-routine bloc de code autonome qui effectue une tâche et est appelé par son nom : une procédure ou une fonction
routine de bibliothèque sous-routine déjà écrite et testée, disponible pour être appelée depuis un programme
11.3

Conseils d'examen

  • Distiguez une procédure (pas de valeur de retour) d'une fonction (renvoie une valeur) ; maîtrisez le passage par valeur vs par référence.
  • Choisissez la bonne boucle : contrôlée par compteur (FOR) lorsque le nombre de répétitions est connu, contrôlée par condition (WHILE/REPEAT) sinon.
  • Distiguez les variables locales vs globales et leur portée ; privilégiez les variables locales dans les modules réutilisables.
  • Utilisez les noms exacts des routines et l'ordre des paramètres de l'insertion. VAL et STR sont des noms IGCSE et ne rapportent aucun point ; UCASE et LCASE sont de vraies routines 9618 du Guide de Pseudocode mais agissent sur un seul caractère, donc sur Paper 2, une chaîne entière prend TO_UPPER ou TO_LOWER.
  • Dans une réponse « écrire du pseudocode », l'en-tête, les déclarations, la boucle, la condition, la mise à jour et la ⟨RETURN⟩ rapportent chacun un point : écrivez les six parties, même si l'une vous est incertaine.

Erreurs courantes

  • Appeler une fonction sans utiliser ce qu’elle retourne. Assigner le résultat, ou l’utiliser dans l’expression ou la sortie : Sorted ← BubbleSort(MyArray, 7).
  • Passer une longueur d'un : 6 pour un tableau de sept éléments, ou le dernier index où la longueur était souhaitée. Décidez si le paramètre est une longueur ou un index, et vérifiez que le dernier élément est visité.
  • Fermer un fichier à l'intérieur de la boucle qui le lit. Ouvrez une fois, fermez une fois, après la boucle.
  • Utiliser l'entrée directement comme nom de fichier. Ajoutez l'extension donnée par la question : FileName ← Choice & ".txt".
  • Laisser des structures ouvertes. Chaque IF a son ENDIF, chaque FOR a son NEXT, chaque WHILE a son ENDWHILE, et chaque fonction a son RETURN ; le schéma prévoit une marque pour cela.
  • Mauvaises bornes : > pour "au moins" (qui est >=), ou un FOR qui commence à 0 pour un tableau déclaré [1:50].
  • Un compteur ou un total qui n'est jamais initialisé à 0 avant la boucle.
  • Dans une table de traçage, réécrire toutes les variables à chaque ligne, ou modifier une valeur avant que la instruction qui la modifie ne se soit exécutée.
  • Moitié de condition : IF x = 3 OR 4 — chaque côté de OR et AND doit être une comparaison complète. Et + ne joint pas les chaînes ; & le fait.
  • Déclarer comme locale une valeur qui doit persister entre les appels. Un total cumulé ou une chaîne construite sur plusieurs appels est global ou BYREF.

Leçons interactives sur ce sujet

Traversez-le étape par étape, avec des exercices à vérification instantanée.

Épreuves Passées

Plus de sujets dans Informatique A-Level

Se connecter ou créer un compte

IGCSE, A-Level & AP