În plus față de programele cu o structură liniară a căror instrucțiuni sunt executate strict în ordine, există mulți algoritmi a căror structură este neliniară. În acest caz, secvența elementelor algoritmului poate fi efectuată în funcție de anumite condiții, uneori cu un număr finit de repetiții - cicluri regulate, uneori sub formă de cicluri terminate când condiția specificată este îndeplinită. Practic fiecare program grav are o structură neliniară. Pentru a crea astfel de programe, sunt necesare structuri speciale de control. Ele sunt disponibile în orice limbaj de programare la nivel înalt, și în special în Matlab.
Să analizăm mai detaliat operatorii de fișiere m.
Operator de atribuire. Operatorul principal al sistemului de programare MatLab este operatorul de atribuire. având următoarea structură:
Operatorul este conceput pentru a identifica variabilele și este indicat de simbolul =. la stânga este numele variabilei, iar în dreapta este o expresie aritmetică sau șir (regulile pentru scrierea expresiilor aritmetice și șir au fost luate în considerare la 1.1.2). Iată câteva exemple de operatori de atribuire (a se vedea Figura 1.3.4-1).
Fig. 1.3.4-1. Exemple de operatori de atribuire
Toate variabilele folosite în partea dreaptă a operatorului de alocare trebuie să fie predefinite. Dacă linia de comandă se termină cu un caracter punct și virgulă (;), atunci rezultatul instrucțiunii nu este afișat, altfel este afișat în următoarea linie a ferestrei de comandă. Această remarcă se extinde la execuția operatorilor de atribuire localizați în fișierele m.
Operatori de introducere de date. Intrarea datelor în Matlab poate fi efectuată atât cu ajutorul operatorului de atribuire (a = 5;), cât și cu ajutorul funcției de introducere a datelor de la tastatură:
Această funcție introduce o expresie din tastatură și rezultatul este stocat într-o variabilă numită a. În exemplul de mai jos, o valoare numerică a fost introdusă mai întâi într-o, urmată de o expresie numerică (Figura 1.3.4-2).
Fig. 1.3.4-2. Introducerea datelor de pe tastatură
Funcția input () poate fi de asemenea utilizată pentru a introduce expresii de șir arbitrare. În acest caz, este prezentată în următoarea formă:
Când această funcție este executată, calculele nu mai așteaptă intrarea expresiei șir. Expresia introdusă este afișată în următoarea linie. Pentru a calcula expresia specificată în forma simbolică, se folosește funcția eval (). Acest lucru este ilustrat de exemplul din Fig. 1.3.4-3.
Fig. 1.3.4-3. Calculând o expresie specificată într-o formă simbolică
Operatorul condițional dacă ... se termină. Operatorul condițional dacă este în forma generală este scris după cum urmează:
Regulile pentru scrierea expresiilor logice sunt descrise în Tema 1.1.
Acest design permite câteva variante speciale. Cea mai simplă ramificare trunchiată [x] este următoarea:
Rețineți că dacă LogicalExpression returnează o valoare booleană de 1 (adică "Adevăr"), Instrucțiunile sunt executate. constituind corpul structurii if. end. Instrucțiunea de sfârșit indică sfârșitul listei de instrucțiuni. Instrucțiunile din listă sunt separate prin virgulă sau punct și virgulă. Dacă Explicația Logică nu este executată (oferă o valoare logică de 0. "False"), atunci Instrucțiunile nu sunt executate.
Mai jos este un exemplu de utilizare a celei mai simple ramificații trunchiate implementate folosind instrucțiunea if (vezi Figura 1.3.4-4).
Fig. 1.3.4-4. Exemplu de ramificație trunchiată
A doua construcție particulară seamănă cu ramificarea standard [x]:
Instrucțiunile1 sunt executate aici. dacă este adevărat
LogicheskoeVyrazhenie. sau, altfel, sunt îndeplinite
Instruktsii2.
În exemplul prezentat în Fig. 1.3.4-5, considerăm ramificația standard implementată folosind instrucțiunea if.
Fig. 1.3.4-5. Exemplu de ramură standard
Din exemplul de mai sus, vedem că instrucțiunea if poate fi una sau mai multe rânduri.
Să luăm în considerare un exemplu de ramificare mai complexă. Luați în considerare un exemplu
Pentru a reflecta pe deplin structura ramificării complexe fără a ne îngrijora de transferul liniilor lungi de comandă, folosim funcția m (Figura 1.3.4-7). Se selectează datele pentru verificarea ramificației principale și se întoarce la funcția raz () cu diferite date inițiale (Figura 1.3.4-6).
Fig. 1.3.4-6. Un apel la funcția raz () cu diferite date inițiale
Fig. 1.3.4-9. Apel la funcția multifunc ()
Funcția multifunc (x, n) are doi parametri, iar al doilea joacă rolul unui indicator care determină tipul dependenței funcționale. Valoarea funcției este scrisă la variabila y. Dacă n = 1, atunci primul bloc de caz este executat, dacă 2, atunci al doilea caz, dacă n = 2, 3 sau 4, apoi - al treilea. Dacă valoarea variabilei n nu se potrivește cu niciuna dintre valorile listate, atunci comanda localizată după cuvântul cheie altfel este executată.
Operatorul de bucla obișnuită este pentru. end. Operatorul pentru buclă. sfârșitul este de obicei folosit pentru a organiza calculele cu un număr specificat de repetări ale ciclurilor. Structura unui astfel de ciclu are următoarea formă:
unde s este valoarea inițială a variabilei var. d este creșterea acestei variabile și e este valoarea finală a variabilei de control, atunci când depășește această limită, buclă termină. Este, de asemenea, posibil să scrieți în forma s: e (în acest caz d = l). Lista instrucțiunilor executate în buclă este terminată de instrucțiunea de sfârșit.
Ca exemplu de utilizare a instrucțiunii pentru. la sfârșit calcula suma elementelor din matricea x. ale căror valori sunt definite în fereastra de comandă utilizând funcția m (summa) (Figura 1.3.4-10), cu parametrul x fiind vectorul. Numărul de elemente ale matricei x este determinat de funcția de lungime. Pe lângă accesarea funcției în fereastra de comandă, rezultatul calculului este verificat utilizând funcția sumă (x) (a se vedea Figura 1.3.4-11).
Fig. 1.3.4-10. Funcție care calculează suma elementelor matrice
Fig. 1.3.4-11. Apelul la funcția summa () și la funcția sum () încorporată
În buclă, se poate folosi instrucțiunea continuă. care trece controlul la următoarea iterație a buclei, sărind peste operatorii care sunt scrise în spatele ei, iar în bucla imbricată trece controlul la următoarea iterație a bucla principală. Instrucțiunea de pauză poate fi utilizată pentru a întrerupe prematur executarea unei buclă (de exemplu, atunci când se depanează o secțiune de program). De îndată ce apare în program, bucla este întreruptă.
În plus față de ciclurile simple regulate din Matlab, este posibilă organizarea unor bucle imbricate. Luați în considerare un exemplu de formare a unei matrice bidimensionale a, fiecare element al căruia reprezintă suma indicilor săi (Figura 1.3.4-12). Fișierul de șabloane vzikl este referit în Fig. 1.3.4-13.
Fig. 1.3.4-12. Fișier script care ilustrează bucle imbricate
Fig. 1.3.4-13. Apel la fișierul script cu numele vzikl
Operatorul de buclă iterativă este în timp ce ... sfârșitul. Vederea generală a structurii de sfârșit ... arata astfel:
O caracteristică distinctă a acestei structuri este că instrucțiunile localizate în corpul structurii de repetare sunt executate numai dacă o Explicație logică este "adevărată". De îndată ce condiția devine "falsă", ieșirea din structura de repetare are loc, iar controlul este transmis instrucțiunilor situate după terminarea cuvântului cheie.
Să dăm un exemplu simplu (figura 1.3.4-14).
Fig. 1.3.4-14. Un program de dialog care folosește sfârșitul ...
Acest program este stocat într-un fișier m numit primer11. Se utilizează pentru calcularea mai multor circumferințe ale unui cerc cu valoarea razei r introdusă de utilizator. unde dialogul este implementat folosind comanda de intrare. Rândurile asociate cu introducerea variabilei r și calcularea lungimii cercului sunt incluse în structura de control în timp. end. Acest lucru este necesar pentru repetarea ciclică a calculelor la introducerea diferitelor valori ale lui r. Atâta timp cât r> = 0. ciclul se repetă. Dar merită setarea r<0. вычисление длины окружности перестает выполняться, а цикл завершается. Поскольку во второй строке программы величинаr определена равной 0, цикл повторяется хотя бы один раз.
Lucrul cu programul din fereastra de comandă este prezentat în Fig. 1.3.4-15.
Fig. 1.3.4-15. Apel la programul de calcul al lungimii unui cerc
În structurile de control, în special pentru și în timp ce buclele. operatorii care influențează implementarea lor sunt adesea utilizați. De exemplu, o declarație de pauză poate fi utilizată pentru a întrerupe un ciclu înainte de a se termina. De îndată ce apare în program, bucla este întreruptă.
Să considerăm un exemplu de întrerupere timpurie a ciclului atunci când condiția i = 5 este îndeplinită (Figura 1.3.4-16).
Fig. 1.3.4-16. Întrerupeți programul utilizând instrucțiunea de pauză
Instrucțiunea continuă trece controlul la următoarea iterație a buclei, trecând instrucțiunile care sunt scrise în spatele ei, iar în bucla imbricată trece controlul la următoarea iterație a bucla principală. Mai jos este un exemplu de calcul al sumei și al produsului elementelor pozitive ale unei matrice b-dimensionale b (3,3) (Figura 1.3.4-17).
Fig. 1.3.4-17. Întreruperea unui program folosind instrucțiunea continuă
Exemple de rezolvare a problemelor folosind
Exemplul 1.3.5-1. Se dau numere N. Este necesar să se calculeze suma: unde
Pentru a rezolva această problemă, a fost dezvoltată funcția fb (x). realizarea algoritmului de calcul al valorii curente a funcției. Funcția are un parametru de intrare - valoarea curentă a elementului matricei b și un parametru de ieșire - y (Figura 1.3.5-1). Apelul la funcție are loc într-o buclă organizată pentru a calcula suma (Figura 1.3.5-2).
Fig. 1.3.5-1. Funcția care implementează algoritmul din Exemplul 1.3.5-1
Fig. 1.3.5-2. Un program care calculează suma numerelor
Pentru a calcula suma valorilor funcției, a fost creat un fișier script cu numele zadashα.m. în care sunt date mai întâi numărul de numere (n = 10) și vectorul valorilor lor (b) și apoi este organizat un ciclu obișnuit pentru a accesa funcția fb () și pentru a calcula suma.
Calculele se fac executând fișierul script scriind zadasha în fereastra de comandă a ferestrei de comandă. Rezultatele implementării sale sunt prezentate în Fig. 1.3.5-3.
Fig. 1.3.5-3. Rularea fișierului de script-uri pentru a rula
Exemplul 1.3.5-2. Formați o matrice bidimensională a (3,4) de la numere arbitrare. Calculați și extrageți o matrice unidimensională b, fiecare element al căruia este media aritmetică a elementelor din rândul corespunzător al matricei a [].
În Fig. 1.3.5-4 este un fișier script numit zadasha2. unde matricea este introdusă, a. alcătuită din trei rânduri și patru coloane. O buclă este organizată de numărul de elemente ale matricei b formate prin accesarea funcției sred_ar (). O matrice a este transmisă funcției. numărul liniei (i) și numărul elementelor din șir (m). Ieșirea elementelor din matricea b este furnizată într-o coloană.
Fig. 1.3.5-4. Array b program de generare
Funcția sred_ar () (Figura 1.3.5-5) este utilizată pentru a genera elementul i al matricei b. egală cu media elementelor aritmetice ale rândului matricei a.
Fig. 1.3.5-5. Funcția sred_ar (). media aritmetică
elemente ale șirului de matrice a
Ca rezultat al rularea fișierului script cu numele zadasha2, o coloană de elemente ale matricei b este afișată în fereastra de comandă
Un exemplu. 1.3.5-3. Specificați numere reale a, b, întreg n (a
Soluția problemei necesită dezvoltarea a două funcții: fab (a, h, i). (Figurile 1.3.5-7) și sumf (a, h, n) pentru calculul sumei i-a (Figura 1.3.5-8).
Fig. 1.3.5-7. Funcția fab (), care calculează valoarea summandului i