Les algorithmes

  • Upload
    saburo

  • View
    72

  • Download
    0

Embed Size (px)

DESCRIPTION

Les algorithmes. Début PortB =0 MLI = 0 Tant Que « vrai » Répéter Si (Bplus =0 OU Bpmoins = 0) Alors Si (Bpplus=0 ET MLI50) Alors MLI =MLI - 51 Fin Si Si MLI = 0 Alors jakubowicz Marc Lycée Loritz Fin Si - PowerPoint PPT Presentation

Citation preview

  • DbutPortB =0MLI = 0Tant Que vrai RpterSi (Bplus =0 OU Bpmoins = 0) AlorsSi (Bpplus=0 ET MLI50)Alors MLI =MLI - 51Fin SiSi MLI = 0 Alors jakubowicz MarcLyce LoritzFin SiAttendre 2sFin SiFin Tant QueFin

  • tapes de programmation

    Dfinition dun cahier des charges fonctionnel (ce que doit faire le programme)

    Dfinition de lenvironnement (A quelle broche brancher telles ou telles commandes)

    Ecriture du programme:A partir du cahier charge fonctionnel (CdCf), le programmeur crit le programme. Le langage utilis est lalgorithme ou lalgorigramme.

    Le codage:A partir de lalgorithme le codeur va transcoder lalgorithme ou algorigramme en un langage de haut niveau: C C++ Basic, ou en un langage de bas niveau: assembleurA ce stade le programme peut-tre simul afin de vrifier que son excution est conforme.

    La Compilation:La compilation consiste transformer le langage de haut ou bas niveau en code machine directement excutable par le microcontrleur.

  • tapes de programmation

    Programmation des composants.Le code machine et les variables de fonctionnement vont tre introduits dans les diffrentes mmoires du microcontrleur. La programmation peut s'effectuer:Sur site, le microcontrleur est dans son environnement, le technicien le place dans un mode "maintenance" ce qui permet de modifier n'importe quelle mmoire.Hors site, le microcontrleur est plac sur un programmateur externe, ce qui permet de modifier la mmoire ROM et EEPROM.

    Vrification.Elle se fait directement sur le systme.

    Points blancs = broche 1

    Cble port COM1 (ne pas visser sur le PC SVP)

    Alimentation 9V

    Support ZIF

    Points blancs = broche 1

    A1

    A0

    A2A3

    B0

    B7

  • Un algorithme est une rgle.

    Processus dfini par une succession finie, ordonne dans le temps, doprations dun acteur unique appliques un nombre fini de donnes conduisant en un nombre fini dtapes un rsultat dfini quelles que soient les valeurs des donnes dans leurs domaines de dfinition.

    Algorigramme Reprsentation graphique conventionnelle dun algorithmeRgle 0

    Lalgorithmique est faite pour dcrire laspect temporel des processus.

    Un algorithme sans fin ne peut reprsenter quun programme mal fait et plant.

    Deux vnements reprsents sur deux lignes (cellules graphiques) conscutivesse succdent strictement dans le temps.

  • Rgle 1

    Deux vnements simultans doivent tre mentionns dans la mme lignedalgorithme, ou dans le mme rectangle dalgorigramme.Rgle 2

    Les mots cls de lalgorithmique (il ny en na mme pas 20, un minimum de 12suffisent) semploient toujours souligns.Rgle 3

    Les couples suivants fonctionnent comme des parenthses algbriques ( uneouverture correspond une et une seule fermeture sans enchevtrement) et sont toujours relis par des traits verticaux de validation :

  • Rgle 4

    Le signe = a toujours une valeur de test boolen (une question laquelle la rponse ne peut tre que oui ou non, un affirmation qui ne peut tre que vraie ou fausse) , laffectation est toujours reprsente par son signe prend pour valeur : Rgle 5

    Tout algorithme a un dbut et une fin. Un processus permanent a toujours une boucle principale qui natteint sa fin que sur rupture des conditions normales de fonctionnement.Rgle 6

    Tout algorithme peut se reprsenter en algorigramme et rciproquement. Rgle 7

    Lalgorigramme nest pas un outil danalyse des systmes, cest un outil devalidation et de prsentation des solutions labores en mode algorithme (texte).

  • Rgle 8

    Les deux formes de boucle lgitimes ne sont pas quivalentes.Les vnements de la boucle rpter sont toujours excuts au moins une fois alors que la boucle tant que peut trs bien ne jamais avoir lieu.Rgle 9

    Un si ne contrle jamais une boucle ! ! !Ce sont les structures tant que et rpter ...jusqu qui contrlent les boucles lgitimesRgle 10

    La description en langage libre ne doit jamais contenir de structures decontrle implicites.

    Cela interdit donc les synonymes plus ou moins avous de nos mots cls :continuer, reprendre, arrter, passer , attendre, stop, sauter en, selon, en fonction de, excuter, attendre, choisir, recommencer, soit que...soit que, quand, ds que, aprs que, vrifier, au cas o, etc...

  • Rgle 11

    Une boucle algorithmique est toujours excute un nombre entier de fois.Rgle 12

    Une boucle GOTO peut apparatre en premire analyse de constatation dunobjet existant mais elle peut et doit toujours tre limine de la version finale.Rgle 14

    Deux boucles peuvent tre successives ou imbriques, jamais enchevtres.Rgle 13

    LE GOTO slimine en rcrivant une boucle tant que ou rpter

    Successives

    Imbriques

    Enchevtres

  • Rgle 15

    La hirarchie matrielle dun systme doit se traduire par la hirarchie delalgorithme : lalgorithme lie une structure matriellement subordonne une autre ne peut tre quun sous- algorithme de lalgorithme de la structure prioritaireRgle 16

    Tout tat physique mmoire (bascule, charge de condensateur, tat duncommutateur...) se reprsente par une variableRgle 17

    La hirarchie algorithmique doit respecter la hirarchie matrielle.Rgle 18

    Le sous-algorithme dune structure qui fonctionne sous le contrle matrielpermanent dune autre ne peut contenir de boucle durable .

  • Squence

    Ensemble d'oprations, d'instructions, comprises entre deux dlimiteurs qui seront excutes successivement dans le temps.

    DbutInstruction 1Instruction 2Opration 1Fin

  • Condition est une variable boolenne.

    Structure algorithmique correspondante :

    Si (condition vraie) alors faire Squence 1sinon faire Squence 2.Fin siAlternative ou choixAlternative multiple

    Cas [variable_cl][condition_boolenne_1 sur variable_cl] [action_1][condition_boolenne_2 sur variable_cl] [action_2]...[condition_boolenne_n sur variable_cl] [action_n]sinon [action_autre]Fin cas

    Condition vraie

    Squence 1

    Condition fausse

    Squence 2

  • Itration (rptition)Rptition dune squence un nombre de fois dtermin ou non.n peut tre connu ou inconnu

    Squence(s)

    Rpter n fois

  • Pour Variable1 de dbut finPour Variable de [dbut] [fin]Squence 1Squence 2Rpter

    Remarque : les variables [Dbut] et [fin] doivent tre dtermine avant litration.Faire jusquFaireSquence 1Squence 2 jusqu (condition = vraie)

    Remarque : les squences sont ralises au moins une fois.Structures algorithmiques possibles :Tant que faireTant que (condition = vraie) Rpter Squence 1 Squence 2Fin tant que

    Remarque : les squences peuvent ne pas tre ralises. Le Fin tant que nest pas obligatoire.

  • Reprsentation sous forme dalgorigramme

    Dbut

    Instruction 2

    Sous programme

    test

    Instruction...

    Sous programme

    Dbut, fin, interruption

    2

    Renvoi

    Test d'une condition

    1

    Renvoi

    Traitement, Instruction, opration...

    oui

    non

  • Reprsentation sous forme dalgorigramme

    Dbut

    Instruction 2

    test

    IO

    Sortie

    Entre

    Fin

    DEL

    Bp

    Test d'une condition

    Oprations sur des entres/sorties avec ou sans

    2

    Renvoi

    xxx

    Commentaire

    Instruction...

    non

    oui

    1

    Renvoi

  • AlgorithmeAlgorigrammeQ BasicSquence linaire

    Dbut :Instruction 1Instruction 2SquenceFin :Exemple de programme

    Y=Y+1X=X*3+2CALL trace

    Choix ou Alternative

    SI (condition vraie) Alors faire Squence Sinon faire InstructionFin SIExemple de programme

    IF touche = 1 THEN CALL clavier ELSE tmp=tmp+1END IFItration Fairejusqu

    Faire SquenceJusqu (condition=vraie)Exemple de programme

    DO CALL encodageLOOP UNTIL res=1

    Dbut

    INITPORT

    t1 t1 minientrer t1 mini dans variable t1

    Instruction 2

    Instruction 1

    Sous programme

    Instruction 2

    Fin

    Front descendant dur bp M/A ?

    Instruction 2

    Sous programme

    Instruction

    Test ?

    oui

    non

    Sous programme

    test

  • AlgorithmeAlgorigrammeQ BasicItrationTant quefaire

    Tant que (condition=vraie) Rpter Instruction SquenceFin Tant queExemple de programme

    WHILE test=1 X=X+1 CALL tempoWENDItrationPour variable de dbut fin

    Pour variable CNT de [dbut] [fin] instructionRpterExemple de programme

    FOR CNT=0 TO 100 Y=CNT*12+3NEXT CNT

    Instruction 2

    Sous programme

    test

    Instruction

    oui

    non

    Instruction 2

    test

    Incrmenter CNT

    CNT dbut

    Y CNT*12+3

    CNT > fin ?

    non

    oui

  • Raliser le programme suivant: Initialisez une variable compteur 0. Sortir la variable compteur sur le port B Incrmenter la variable compteur Attendre 200ms. Recommencer linfini.

    Dbut

    Instruction 2

    Sous programme

    test

    IO

    Fin

    boucle 0

    Incrmenter boucle

    Compteur

    Incrmenter compteur

    boucle >255 ?

    non

    oui

    1

    Compteur 0

    Attendre 200ms

    oui

    non

    Port B

  • Raliser le programme suivant: Initialisez une variable compteur 0. Sortir la variable compteur sur le port B Incrmenter la variable compteur Attendre 200ms. Recommencer linfini.Algorigramme type Flowcode

  • void main(){COMPTEUR = 0 ;while( 1 ){for (LOOP1=0; LOOP1
  • program compteurdim compteur as bytedim boucle as byte

    main:

    trisb = $00 'Le port B est en sortie

    While true compteur = $0 For boucle = 0 to 255 PortB = compteur compteur = compteur + 1 Delay_ms(200) Next boucle Wendend. 'Fin de programme

  • label2BCF STATUS, RP0CLRF gbl_COMPTEURCLRF gbl_LOOP1label6MOVLW 0xFFSUBWF gbl_LOOP1, WBTFSC STATUS,CGOTOlabel2BSF STATUS, RP0CLRF gbl_trisbBCF STATUS, RP0MOVF gbl_COMPTEUR, WMOVWF gbl_portbINCF gbl_COMPTEUR, WMOVWF gbl_COMPTEURMOVLW 0xC8MOVWF delay_ms_00000_arg_delCALL delay_ms_00000INCF gbl_LOOP1, FGOTOlabe6; } main function end

  • Alimentation 9V

    Support ZIF

    Points blancs = broche 1

    A1

    A0

    A2A3

    B0

    B7

  • main: CMCON=7'Configure le portA en entres/sorties numriques trisa = $FF'le port A est en entre trisb = $00'Le port B est en sortie portb = $00'Met les sortie du port B 0 While (bp=1'Tant que bp non appuy faire la boucle Wend del=1'Sortie b0 1 Del allume Delay_ms(2000) 'Attendre 2s del=0 'Sortie b0 0 Del teinteend.'Fin de programme

    Programme 0Eteindre toutes les DEL.Attendre que BP soit 1Allumer la DEL 0 durant 200ms.Eteindre la DEL 0.Termin.

    Dbut

    Instruction 2

    Sous programme

    test

    IO

    Port A en numriquePort A en entrePort B en sortie

    BP=1 ?

    0

    1

    Tempo 200ms

    0

    Fin

    Port B

    Port B.0

    Port B.0

  • main: CMCON=7'Configure je portA en entres/sorties numriques trisa = $FF'le port A est en entre trisb = $00'Le port B est en sortie portb = $0'Met les sortie du port B 0

    PortB = $FF 'Sortie b0 1 Del allume Delay_ms(1000) 'Attendre 1s PortB = 0 'Sortie b0 0 Del teinte Delay_ms(1000)'Attendre 1s

    end.Programme 1

    Allumer toutes les DEL.Attendre 1s.Eteindre toutes les DEL.Attendre 1s.Termin.

    Dbut

    Instruction 2

    Sous programme

    0

    Port B

    Port A en numriquePort A en entrePort B en sortie

    Tempo 200ms

    Tempo 200ms

    Fin

    Tempo 200ms

    $FF

    Port B

  • main: CMCON=7'Configure je portA en entres/sorties numriques trisa = $FF'le port A est en entre trisb = $00'Le port B est en sortie portb = $0'Met les sortie du port B 0

    while true PortB = $FF 'Sortie b0 1 Del allume Delay_ms(1000) 'Attendre 1s PortB = 0 'Sortie b0 0 Del teinte Delay_ms(1000)'Attendre 1s Wendend.Programme 2

    Allumer toutes les DEL.Attendre 1s.Eteindre toutes les DEL.Attendre 1s.Le programme se rpte linfini.

    Dbut

    Instruction 2

    Sous programme

    test

    0

    Port B

    Port A en numriquePort A en entrePort B en sortie

    Fin

    Tempo 200ms

    Tempo 200ms

    1

    OUI

    NON

    $FF

    Port B

  • dim compteur as byte Dfinition de la variable compteur comme un octet

    main: compteur = $0 While true Faire tant que doFaire PortB = compteur Delay_ms(200) compteur = compteur +1 loop until compteur = $FF Jusqu WendRpterend. Programme 3On va compter :Initialisez une variable compteur 0.Sortir la variable compteur sur le port BIncrmenter la variable compteur compteur = compteur +1Attendre 200ms.Et recommencer linfini.

    Dbut

    Instruction 2

    Sous programme

    test

    initialisation PIC

    Compteur 0

    Tempo 200ms

    Incrmenter compteur

    Compteur = 255 ?

    1

    OUI

    NON

    Fin

    OUI

    NON

    compteur

    Port B

  • dim port as byte

    main: While true Port = portA port= NOT Port PortB = port Wendend. Programme 5

    Lire le port A en entre, le stocker dans une variable port on veut sur le port de sortie, linverse de portSortir sur le port B la variable /port .Et recommencer linfini.

    Dbut

    Instruction 2

    test

    Port

    Port A

    Port NOT port

    initialisation PIC

    Port

    1

    OUI

    NON

    Fin

    Port B

  • main:While true chenille = $01 for compteur = 0 to 6 PortB = chenille delay_ms(200) chenille = chenille > 1 Next compteurWendendProgramme 6 7 Un petit chenillard Initialiser une variable chenille 01Sortir sur le port B la variable chenille .Attendre 200ms.Dcaler gauche dun bit la variable chenille Recommencer 7 fois.on veut que la DEL fasse un allez retour perptuel

    Dbut

    Instruction 2

    Sous programme

    test

    initialisation PIC

    Chenille

    Tempo 200ms

    1

    OUI

    NON

    Fin

    Chenille 1Compteur 0

    Dcaler chenille de 1 bit gauche

    OUI

    Compteur > 6

    Incrmenter compteur

    NON

    OUI

    Tempo 200ms

    Compteur 0

    Dcaler chenille de 1 bit droite

    Compteur > 6

    Chenille

    Incrmenter compteur

    Port B

    NON

    OUI

    Port B

  • main: While true port = portA.0 IF port = 1 then chenille = $01 for compteur = 0 to 7 PortB = chenille delay_ms(200) chenille = chenille > 1 Next compteur End IF Wendend. Programme 8Variante du programme 6, on veut que la DEL fasse un allez ou retour dans le sens de linterrupteur A0.

    Dbut

    Instruction 2

    Sous programme

    test

    Port = 1

    initialisation PIC

    Tempo 200ms

    1

    OUI

    NON

    Fin

    Chenille 1Compteur 0

    Dcaler chenille de 1 bit gauche

    Compteur > 7

    OUI

    NON

    Tempo 200ms

    Chenille

    Dcaler chenille de 1 bit droite

    Chenille $80Compteur 0

    Compteur > 7

    OUI

    Incrmenter compteur

    NON

    Incrmenter compteur

    Chenille

    Port B

    NON

    OUI

    Port

    Port A.0

    Port B

  • Ralisez le programme en Qbasic permettant de dessiner une courbe sinusodale.

    Dbut

    Initialiser l'cran en mode graphique 640x480 16 couleurs

    Tracer l'axe des tensions 10 pts du bord gauche

    Tracer l'axe de temps mi-hauteur

    Gnrer la fonction sinus partir de NB (sinus en radian, sortie comprise entre 0 et 480)

    Variable x 10

    x = 640

    Fin

    Incrmenter NB

    Oui

    NON

    Afficher le point de coordonn (x, sin)

    0,0

    640,0

    0,480

    640,480