Première · Algorithmique

Parcourir un tableau : rechercher, compter, calculer

Une station mesure successivement 4, -2, 7, 7 et 1 °C. Comment trouver le maximum, compter les mesures positives ou calculer une moyenne sans perdre ce qui a déjà été lu ? Un parcours conserve un résumé pertinent du préfixe examiné.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Construire une recherche séquentielle.
  • Calculer un extremum, une somme et une moyenne.
  • Choisir une initialisation et traiter les cas limites.
Les bases utiles pour commencer

Une case à la fois, un résumé qui évolue

Un parcours séquentiel examine les éléments dans l’ordre. L’indice indique la prochaine case, tandis que des variables mémorisent les informations utiles sur les cases précédentes. Pour compter les valeurs positives, un compteur commence à zéro et augmente seulement si la valeur vérifie la condition. Pour une somme, un accumulateur commence à zéro et reçoit chaque valeur.

La même boucle peut calculer plusieurs informations, mais chaque variable doit avoir un rôle précis. Avant de programmer, formulez une phrase : « après k mesures, somme contient la somme des k premières ». Cette phrase guide la mise à jour et aide à repérer les erreurs.

Voici une trace de somme : avant toute lecture, s=0 ; après 4, s=4 ; après -2, s=2 ; après 7, s=9. Le nombre de valeurs traitées vaut alors 3, mais le dernier indice lu vaut 2. Cette différence entre quantité et indice explique de nombreuses erreurs de borne. Notez toujours ce que désigne votre variable de progression.

Trouver une occurrence sans changer le problème

Une recherche peut demander un booléen, un indice ou le nombre d’occurrences. Ces résultats ne sont pas interchangeables. Pour renvoyer le premier indice d’une cible, on s’arrête dès la première égalité et on renvoie cet indice. Si le parcours entier se termine sans rencontre, une convention comme -1 exprime l’absence.

Avec [4, -2, 7, 7, 1], le premier indice de 7 est 2. Le nombre d’occurrences est 2 également, mais cette égalité est accidentelle. Le dernier indice vaut 3. Une spécification précise évite de produire la bonne valeur pour une mauvaise raison.

Avec une cible absente du préfixe, la recherche n’est pas encore forcément terminée. Sur [4,-2,7,7,1], les deux premières lectures ne trouvent aucun 7, mais la suite en contient. La réponse « absent » est autorisée seulement lorsque toutes les cases pertinentes ont été éliminées. Une réponse positive peut au contraire être certaine dès la première rencontre.

Initialiser correctement un extremum

Pour un tableau non vide, on initialise le maximum à sa première valeur. On compare ensuite les suivantes et on conserve la plus grande. Initialiser à zéro serait incorrect si toutes les données étaient négatives : zéro pourrait être renvoyé sans appartenir au tableau.

Le minimum suit le raisonnement symétrique. Le tableau vide ne possède aucun minimum ou maximum. Il faut imposer une précondition de non-vacuité ou choisir un traitement explicitement documenté. Une sentinelle arbitraire n’est pas une solution si les valeurs autorisées peuvent la dépasser.

def maximum(t):
    assert len(t) > 0
    meilleur = t[0]
    for i in range(1, len(t)):
        if t[i] > meilleur:
            meilleur = t[i]
    return meilleur

Moyenne et coût du parcours

La moyenne est la somme divisée par le nombre de valeurs, pas la moyenne successive de deux nombres. Pour notre série, la somme vaut 17 et la moyenne 17 / 5 = 3,4. Un tableau vide conduit à une division par zéro ; la précondition doit donc l’exclure si aucun résultat spécial n’est défini.

Une somme examine les n valeurs : son coût est linéaire. Une recherche peut finir rapidement, mais son pire cas reste linéaire lorsqu’aucune occurrence n’est trouvée ou que la première est en dernière position. La taille du tableau est la variable pertinente, pas la grandeur des températures.

Calculer plusieurs résultats dans une seule boucle

Pour des températures [-3,4,0,7,-2], on souhaite le total et le nombre de températures strictement positives. Initialement, somme et compteur valent zéro. À chaque valeur, on l’ajoute à la somme ; seulement si elle est supérieure à zéro, on incrémente le compteur. Les états successifs sont (-3,0), (1,1), (1,1), (8,2), (6,2). Zéro contribue à la somme mais n’est pas strictement positif.

Les deux variables résument les mêmes cases, mais selon deux règles différentes. Pour calculer la moyenne des seules températures positives, il faudrait un autre total, limité à 4 et 7 : 11/2=5,5. Diviser la somme générale 6 par le compteur positif 2 mélangerait deux populations. Avant toute division, vérifiez que le numérateur et le dénominateur décrivent exactement le même ensemble de données.

Passer du résultat au contrat et aux tests

Une fonction de recherche peut renvoyer le premier indice, toutes les positions ou un booléen. Ces choix changent son résultat et parfois son arrêt. Pour conserver toutes les positions de 7 dans [7,2,7], on construit [0,2] et on ne s’arrête pas au premier succès. Pour une simple présence, un arrêt à l’indice 0 suffit.

Choisissez des tests qui séparent les erreurs possibles : tableau vide, une valeur, toutes les valeurs négatives, répétitions, cible au début, à la fin et absente. Un test avec maximum positif ne détecte pas l’initialisation incorrecte à zéro. Un test où premier indice et nombre d’occurrences coïncident ne distingue pas deux contrats confondus. Un test utile fait varier une propriété importante du problème, puis annonce précisément le résultat attendu.

À vous de faire varier les choses

Observez le résumé du préfixe

Saisissez jusqu’à douze entiers séparés par des virgules puis choisissez combien de valeurs traiter. Testez des négatifs et un tableau vide.

Lire le résultat de l’expérience initiale

3 valeur(s) examinée(s) sur 5.

Les résultats portent seulement sur le préfixe traité. Une absence dans ce préfixe ne prouve pas l’absence dans la suite.

Indice luValeurSomme aprèsMinimum aprèsMaximum aprèsOccurrences après
044440
1-22-240
279-271

Le nombre de cases traitées détermine exactement ce que chaque variable permet d’affirmer.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · Appliquer#

Les variables après trois mesures

Pour [4, -2, 7, 7, 1], donnez somme, minimum et maximum après les trois premières valeurs.

Indice 1

Le préfixe traité est [4, -2, 7].

Indice 2

La somme inclut la valeur négative.

Comprendre la correction

La somme vaut 9, le minimum -2 et le maximum 7. La quatrième valeur, bien qu’égale à 7, n’a pas encore été traitée. Distinguer indice courant et nombre de valeurs déjà lues évite d’inclure une case trop tôt.

Exercice 2 · Corriger#

Un maximum qui n’existe pas

Un maximum initialisé à 0 renvoie 0 pour [-8, -3, -5]. Corrigez l’initialisation et donnez le résultat attendu.

Indice 1

Le maximum doit être l’une des valeurs présentes.

Indice 2

Le tableau est non vide.

Comprendre la correction

On initialise meilleur à -8, la première valeur. La comparaison avec -3 met meilleur à -3 ; -5 ne le change pas. Le résultat est -3. Initialiser avec t[0] fonctionne quels que soient les signes, sous la précondition que le tableau contienne au moins une valeur.

Exercice 3 · Comprendre#

Première occurrence ou quantité ?

Dans [9, 2, 9, 9], quel est le premier indice de 9 et combien de fois 9 apparaît-il ?

Indice 1

Les indices commencent à zéro.

Indice 2

Le comptage ne s’arrête pas à la première rencontre.

Comprendre la correction

Le premier indice est 0, tandis que le nombre d’occurrences est 3. Une fonction renvoyant un indice peut terminer dès le début. Une fonction comptant toutes les occurrences doit poursuivre le parcours jusqu’au bout, car de nouveaux 9 peuvent apparaître.

Exercice 4 · Justifier#

Pourquoi la moyenne successive échoue

On calcule (2 + 4) / 2, puis on moyenne ce résultat avec 12. Comparez à la moyenne de [2, 4, 12].

Indice 1

La première méthode donne davantage de poids à 12.

Indice 2

La véritable moyenne utilise une somme et trois valeurs.

Comprendre la correction

La méthode proposée donne 3, puis 7,5. La moyenne correcte vaut (2 + 4 + 12) / 3 = 6. La moyenne successive attribue la moitié du poids à la dernière valeur. Accumuler la somme et compter les valeurs conserve les informations nécessaires.

Exercice 5 · Approfondir et transférer#

Les températures retenues

Pour [-3,4,0,7,-2], calculez somme générale, nombre de valeurs strictement positives et somme de ces valeurs positives. Donnez leur moyenne puis expliquez pourquoi diviser la somme générale par le compteur positif ne convient pas.

Indice 1

Séparez les valeurs retenues des valeurs seulement parcourues.

Indice 2

Le zéro ne vérifie pas une comparaison strictement positive.

Comprendre la correction

La somme générale vaut 6. Les deux valeurs retenues sont 4 et 7, de somme 11 et de moyenne 5,5. Le quotient 6/2 mélange le total de cinq mesures avec le nombre de deux mesures : il ne calcule la moyenne d’aucun des ensembles demandés.

Exercice 6 · Approfondir et transférer#

Trois contrats sur un même tableau

Dans [5,2,5,8,5], cherchez 5. Donnez la réponse pour une fonction de présence, une fonction de premier indice et une fonction retournant toutes les positions. Pour chacune, indiquez quand elle peut arrêter la lecture.

Indice 1

Une présence vraie n’exige pas de connaître les répétitions.

Indice 2

Les positions commencent à zéro.

Comprendre la correction

La présence renvoie vrai et le premier indice vaut 0 : les deux fonctions peuvent arrêter dès la première case. La liste des positions est [0,2,4] et demande de parcourir toutes les cases. La dernière occurrence peut être tout à la fin. Les trois réponses expriment des besoins différents malgré la même cible.

Exercice 7 · Approfondir et transférer#

Un maximum et ses occurrences

Pour un tableau non vide, proposez une méthode calculant en un parcours le maximum et son nombre d’occurrences. Déroulez-la sur [-5,-2,-2,-7,-2]. Que faut-il faire au compteur quand un nouveau maximum apparaît ?

Indice 1

Initialisez le maximum à la première valeur et le compteur à 1.

Indice 2

Une nouvelle valeur plus grande rend les anciennes occurrences non pertinentes.

Comprendre la correction

À valeur plus grande, on remplace le maximum et remet le compteur à 1 ; à égalité, on l’incrémente ; sinon on ne change rien. Après -5 : maximum -5, compte 1. Les -2 produisent successivement compte 1 puis 2 ; -7 ne change rien ; le dernier -2 porte le compte à 3. Le maximum final vaut -2.

Les erreurs qui méritent un détour

Confondre indice et valeur.
Dans t[i], i désigne une position et t[i] son contenu. Nommez distinctement les deux dans une trace.
Oublier le tableau vide.
Une somme vide vaut 0, mais un extremum et une moyenne demandent un contrat particulier.

La fiche à garder

L’essentiel à retenir

  • Un accumulateur résume les valeurs déjà parcourues.
  • Initialisez un extremum avec une donnée existante.
  • Les parcours complets ont un coût linéaire.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.