Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Bucle de program1

autocad



+ Font mai mare | - Font mai mic



Bucle de program1

Buclele de program reprezinta un concept important pentru orice limbaj de programare. Buclele permit instructiunilor programului sa fie executate de nenumarate ori pe baza valorii unei espresii test.

Obiective

in acest capitol veti studia:



Cum sa folositi buclele pentru a repeta un set de expresii.

Sintaxa functiilor repeat si while.

Explicarea modului de functionare a buclelor

O bucla se explica astfel:

' Testati o expresie. Daca expresia este adevarata, atunci executati un set de instructiuni ale programului, pe rind, apoi testati expresia din nou. Daca este tot adevarata, executati toate instructiunile programului apoi testati din nou expresia la infini.

Asa lucreaza functia while. Functia repeat executa un set de expresii de un numar de ori prestabilit.

Ca exemplu sa presupunem ca avem un set de expresii pe care vrem sa-l executam de 5 ori. Este mai intelept sa scrieti setul de expresii o singura data in program si sa folositi unele functii care sa ceara AutoLISP-ului sa repete expresiile de 5 ori decit sa scrieti setul de expresii de 5 ori.

Ca exemplu (si nu unul stralucit) vom construi o functie simpla de numarare folosind functia repeat. Functia va adauga numarul intreg 1 la valoarea unei variabile ori de cite ori functia este apelata si apoi va tipari valoarea variabilei in zona liniei de comanda.

Functia repeat

Functia repeat cere doua argumente si un numar oarecare de argumente optionale.

Primul argument trebuie sa fie un numar intreg (sau evaluat intr-un numar intreg). Acesta spune functiei repeat de cite ori sa execute al doilea argument pina la al n -lea argument.

Exemplu

Command: (repeat 3 (prompt 'anHello'))
Hello
Hello
Hellonil

nil de la sfirsit este valoarea returnata de functia repeat.

Exemplu

Introduceti expresiile care urmeaza.

Expresiile definesc functia count.

in functia count, dupa ce variabila num este legata de 0, valoarea lui num este vizualizata pe monitor si incrementata cu 1 pina la un total de 10 ori.

Command: (defun count ()
1> (setq num 0)
1> (repeat 10 (print num) (setq num (1+ num)))
1> (prin1))
COUNT

Folositi functia count. Aceasta va introduce numerele de la 0 la 9 in zona liniei de comanda.

Command: (count)
0
1
2
3
4
5
6
7
8
9

O versiune ceva mai interesanta a functiei count va {TERGE ultimele trei entitati desenate si care sint vizibile pe monitor.

Exemplu

intr-un desen nou, desenati cel putin trei (3) entitati de orice fel.

Introduceti expresiile care urmeaza.

Command: (defun count () (repeat 3 (command 'erase' 'l' '')))
COUNT

Folositi functia count pentru a sterge ultimele entitati din desen.

Command: (count)

Mai multe despre intrarile utilizatorului

Functia initget poate reface valorile permise pentru intrarea utilizatorului in timpul oricarei apelari a functiilor de tip getxxx, de exemplu functiile getpoint si getdist.

Apelati initget care are un numar intreg ca argument si/sau o lista de cuvinte cheie acceptabile, imediat dupa apelarea unei functii GETXXX.

Acest exemplu admite numai numere intregi cu exceptia lui 0, ca raspuns la getint.

(initget (+ 1 2 4))

(setq response (getint 'anEnter an integer: '))

Functia getkword reface un cuvint cheie de la utilizator bazat pe un sir de cuvinte cheie stabilite de functia initget.

Acest exemplu permite utilizatorului sa raspunda cu YES sau NO la cererea de comanda. Un raspuns nul sau un return nu sint admise.

(initget 1 'Yes No')

(getkword 'anContinue? Yes/No: ')

exercitiul 21[N.N.1] : buclare in program

in acest exercitiu:

Veti consolida cunostintele despre bucle de program.

Veti consolida cunostintele despre functia cond.

Veti folosi functia repeat pentru a executa un set de s-expresii de un numar stabilit de ori.

Veti scrie o functie care cere utilizatorului numarul de buclari de program.

Veti folosi instructiunea cond in cadrul buclei.

Etape de lucru

incepeti un desen nou in AutoCAD.

Desenati un Cerc cu centrul in punctul 5,5 sI o raza de o unitate.

in editorul text, deschideti fisierul numit displace.lsp din directorul student.

Creati functia c:displace. Folositi codul in displace.lsp ca baza pentru functie.

DISPLACE ar trebui sa execute urmatoarele:

Sa ceara utilizatorului o incrementare a deplasarii.

Sa ceara utilizatorului de cite ori sa execute deplasarea.

Sa ceara utilizatorului directia de deplasare.

Sa repete codul care restabileste ultima entitate desenata si care este vizualizata pe monitor si sa o deplaseze cu un increment adecvat de un numar de ori.

continuare pe pagina urmatoare

;No null, zero or negative response allowed

(initget (+ 1 2 4))

(setq increment (getdist 'anIncrement for movement: '))

;No null, zero or negative response allowed

(initget (+ 1 2 4))

(setq number_of_times (getint 'anNumber of times to displace: '))

;No null response allowed, setup keywords for response

(initget 1 'Up Down Right Left')

(setq direction (getkword 'anUp/Down/Left/Right: '))

(repeat number of times (command "MOVE" (entlast)"" (list 0.0 0.0 0.0)

(cond ;match direction of movement

((= direction 'Up') ;based on keyword supplied by user

(command (list 0.0 increment))

)

((= direction 'Down')

(command (list 0.0 (- 0.0 increment)))

)

((= direction 'Right')

(command (list increment 0.0))

)

((= direction 'Left')

(command (list (- 0.0 increment) 0.0))

)

)

(command '') ;second point of displacement

;for MOVE command prompt

Salvati fisierul text.

incarcati fisierul in AutoCAD.

Activati comanda DISPLACE.

Functia while

Functia repeat este cea mai simpla functie de buclare utila daca stiti exact de cite ori trebuie sa repetati evaluarea grupului de expresii anterioare intrarii buclei.

Totusi veti intilni ocazii cind veti dori sa repetati ceva de un numar nedefinit de ori; adica numarul de repetitii nu poate fi determinat inaintea intrarii in bucla.

intr-un astfel de caz, functia while va da posibilitatea sa repetati un set de expresii de cite ori este necesar pina ce valoarea unei expresii test se schimba.

Exemplu

(setq x 0) ;set initial value for test

(while

(< x 10) ;while x is less than 10

(print x) ;print value of x

(setq x (+ 1 x)) ;add 1 to x and then

;go back to test expression

Figuae 3. Diagrama buclei functiei while

Pentru a iesi dintr-o bucla while, valoarea expresiei test trebuie sa fie egala cu nil. De aceea, daca expresia test este initial t, valoarea expresiei test trebuie sa se schimbe ca rezultat al unei atribuiri din cadrul corpului buclei.

Recapitulare

Buclele repeta un set de expresii.

Buclele pot repeta de un numar de ori prestabilit sau pina ce valoarea expresiei test este nil.

Functia repeat repeta un set de expresii de un numar de ori stabilit.

Functia while repeta un set de s-expresii pina ce expresia test este egala cu nil.

exercitiul 21: utilizarea functiei while pentru buclare in progam

in acest exercitiu:

Veti consolida cunostintele despre buclele de program din AutoLISP.

Veti modifica o functie existenta de la exercitiul anterior.

Veti crea un program care deseneaza dreptunghiuri multiple.

Veti folosi functia while.

Etape de lucru

in editorul de text, incarcati fisierul rectangle.lsp.

Salvati fisierul ca mrectang.lsp in directorul student.

Faceti modificari in fisier.

Modificati functia c:rectangle pentru a cere utilizatorului sa deseneze dreptunghiuri multiple in timpul unei singure secvente de functionare.

Plasati corpul codului care cere colturile si deseneaza polilinia in cadrul unei functii while.

Un raspuns nul, adica un return la cererea 'first corner' va termina functia.

Numiti noua functie c:mrectangle pentru 'dreptunghiuri multiple'.

Salvati fisierul.

incarcati fisierul in AutoCAD.

Activati comanda MRECTANGLE.




Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1108
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved