Problème de somme avec une liste

G0belins Messages postés 7 Date d'inscription mardi 3 octobre 2023 Statut Membre Dernière intervention 29 octobre 2023 - 4 oct. 2023 à 21:21
Whismeril Messages postés 19064 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juin 2024 - 5 oct. 2023 à 11:57
​
​
​

VARIABLES
  NP EST_DU_TYPE LISTE
  S EST_DU_TYPE NOMBRE
  P EST_DU_TYPE NOMBRE
  i EST_DU_TYPE NOMBRE

DEBUT_ALGORITHME
  NP[1] PREND_LA_VALEUR 2
  NP[2] PREND_LA_VALEUR 3
  NP[3] PREND_LA_VALEUR 5
  NP[4] PREND_LA_VALEUR 7
  NP[5] PREND_LA_VALEUR 11
  NP[6] PREND_LA_VALEUR 13
  NP[7] PREND_LA_VALEUR 17
  NP[8] PREND_LA_VALEUR 19
 
 POUR i ALLANT_DE 1 A 7
    DEBUT_POUR
    S PREND_LA_VALEUR NP[1]+NP[i+1]
    AFFICHER " ; "
    P PREND_LA_VALEUR NP[1]*NP[i+1]
    FIN_POUR

  AFFICHER "La somme des nombres premiers <20 est de : "
  AFFICHER* S
  AFFICHER "Le produit des nombres premiers <20 est de :"


​

​

​

Bonjour,

je suis d'avance désolé car mon code est codé sous Algobox et non en basic mais c'est ce qui en ressemble le plus.

Néanmoins, je voudrais faire en sorte qu'à la fin j'obtienne facilement la somme et le produit de ces nombres premiers. Je dois absolument utiliser une liste.

Savez vous comment faire ?

Je vous remercie d'avance

2 réponses

Whismeril Messages postés 19064 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juin 2024 657
5 oct. 2023 à 07:12

Bonjour

il y a une étape tout aussi importante que coder, c'est déboguer.

Concevoir l'algorithme, il est évident que c'est essentiel au codage

Mais si on se trompe, comprendre ce que fait réellement notre algo par rapport à ce qu'il devrait faire et tout aussi crucial.

J'ai modifié ton algo pour qu'il t'affiche ce qui se passe dans ta boucle pour la somme.

VARIABLES
  NP EST_DU_TYPE LISTE
  S EST_DU_TYPE NOMBRE
  P EST_DU_TYPE NOMBRE
  i EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
  NP[1] PREND_LA_VALEUR 2
  NP[2] PREND_LA_VALEUR 3
  NP[3] PREND_LA_VALEUR 5
  NP[4] PREND_LA_VALEUR 7
  NP[5] PREND_LA_VALEUR 11
  NP[6] PREND_LA_VALEUR 13
  NP[7] PREND_LA_VALEUR 17
  NP[8] PREND_LA_VALEUR 19
  POUR i ALLANT_DE 1 A 7
    DEBUT_POUR
    S PREND_LA_VALEUR NP[1]+NP[i+1]
    AFFICHER "Pour i vallant : "
    AFFICHER* i
    AFFICHER "NP[1] vaut : "
    AFFICHER* NP[1]
    AFFICHER "NP[i+1] vaut : "
    AFFICHER* NP[i + 1]
    AFFICHER "S vaut : "
    AFFICHER* S
    AFFICHER " ; "
    P PREND_LA_VALEUR NP[1]*NP[i+1]
    FIN_POUR
  AFFICHER "La somme des nombres premiers <20 est de : "
  AFFICHER* S
  AFFICHER "Le produit des nombres premiers <20 est de :"
FIN_ALGORITHME

Lance-le, et étudie tout ce qui est affiché.

Demande toi si le calcul de chaque itération va dans le sens d'une somme globale.

N'hésite pas à revenir expliquer ce que tu a compris et ce que tu n'as pas compris si tu ne trouves pas ce qu'il faut modifier par toi même


0
G0belins Messages postés 7 Date d'inscription mardi 3 octobre 2023 Statut Membre Dernière intervention 29 octobre 2023
5 oct. 2023 à 09:40

Rebonjour,

je vous remercie j'ai pu modifier mon code qui maintenant est sous cette forme

FONCTIONS_UTILISEES
VARIABLES
  NP EST_DU_TYPE LISTE
  S EST_DU_TYPE NOMBRE
  P EST_DU_TYPE NOMBRE
  i EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
  NP[1] PREND_LA_VALEUR 2
  NP[2] PREND_LA_VALEUR 3
  NP[3] PREND_LA_VALEUR 5
  NP[4] PREND_LA_VALEUR 7
  NP[5] PREND_LA_VALEUR 11
  NP[6] PREND_LA_VALEUR 13
  NP[7] PREND_LA_VALEUR 17
  NP[8] PREND_LA_VALEUR 19
  S PREND_LA_VALEUR NP[1]
  P PREND_LA_VALEUR NP[1]
  POUR i ALLANT_DE 1 A 7
    DEBUT_POUR
    S PREND_LA_VALEUR S+NP[i+1]
    P PREND_LA_VALEUR P*NP[i+1]
    FIN_POUR
  AFFICHER "La somme des nombres premiers <20 est de : "
  AFFICHER* S
  AFFICHER "Le produit des nombres premiers <20 est de :"
  AFFICHER P
FIN_ALGORITHME

mon code fonctionne maintenant.

Est-ce de forme qu'il est le plus optimisé ?

0
Whismeril Messages postés 19064 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 juin 2024 657
5 oct. 2023 à 11:57

Très bien comme correction.

Et surtout c'est la tienne, celle qui vient de ta réflexion. C'est ça qu'il faut acquérir en algorithmique.

Alors oui, on peut optimiser un peu.

Ta boucle allant de 1 à 7, tu calcules 2 fois i +  1 par itération.

Optimisation 1, tu stockes i + 1 dans une autre variable (j par exemple) et tu l'utilises comme indice de liste => un seul calcul, mais une variable de plus

Optimisation 2, ta boucle va de 2 à 8 et tu utilises i directement, plus de calcul 


0
Rejoignez-nous