Structurarea programată este o tehnologie de dezvoltare a programului, care se bazează pe reprezentarea programului sub forma unui set de blocuri. Un bloc face parte din textul unui program care este grupat și perceput ca un întreg. Blocurile pot consta din unul sau mai mulți operatori, pot fi goale sau imbricate.
Orice program este o structură construită din trei tipuri de construcții de bază:
- executarea secvențială - executarea unică a operațiunilor în ordinea în care sunt înregistrate în textul programului;
- ramificare - o singură execuție a uneia sau mai multor operații, în funcție de performanța unei anumite condiții;
- Buclă - Executarea mai multor aceleași operații atâta timp cât este îndeplinită o anumită condiție predeterminată (condiția de continuare a ciclului).
În program, construcțiile de bază pot fi imbricate una în alta în mod arbitrar. Un bloc care începe în interiorul unui alt bloc trebuie să se termine în același bloc exterior. Blocarea intersecțiilor nu este permisă.
Fragmentele repetitive ale programului (sau nu repetitive, dar reprezentând blocuri computaționale integrale logic) pot fi realizate sub formă de subrutine (proceduri sau funcții). În acest caz, operatorul apelului subprogram este inserat în textul programului principal, în loc de fragmentul plasat în subrutină. Atunci când se execută un astfel de operator, se execută subrutina numită, după care executarea programului continuă cu operatorul urmând comanda de apelare a subprogramului.
Un algoritm este o secvență de acțiuni efectuate în program. Compilarea oricărei aplicații începe cu dezvoltarea algoritmului. Mai întâi, este recomandabil să rupem algoritmul în blocuri mari și apoi să le detaliem secvențial, adică umpleți cu umplutură. Unele dintre aceste blocuri ar trebui să fie depanate separat prin scrierea unui program principal special și executând cu seturi diferite de date de intrare. Seturile blocate pot fi inserate în siguranță în aplicația principală.
Programele bine structurate, cu o logică inteligibilă a muncii lor, sunt ușor de dezvoltat, depanat, menținut; modificarea acestor programe cât mai simplă posibil.
O diagramă bloc este o reprezentare grafică a algoritmului unui program sau a unei părți a acestuia, ajută la aranjarea instrucțiunilor executabile în conformitate cu algoritmul. Imaginile grafice facilitează percepția structurilor complexe. Dacă începeți să dezvoltați un program cu o diagramă bine concepută, scrierea și depanarea programului este mult mai ușoară.
Diagrama bloc este construită dintr-un set limitat de blocuri. și săgețile care le conectează în ordinea execuției. Tehnica de desen este simplificată atunci când se utilizează unelte de calculator, în special pachetul MS VISIO sau SMART DRAW 5. Aceste pachete permit crearea diagramelor bloc din blocuri pregătite. Blocurile sunt ușor delimitate, completate cu inscripții, conectate prin linii. Când se deplasează blocuri, liniile urmează blocuri.
Până în prezent, am analizat și am compilat programe care au o structură liniară, adică ele reprezintă primul tip de construcții de bază. Aceste programe utilizează:
1) blochează începutul și sfârșitul fiecărei unități de program.
2) Blocurile constând din operatori simpli au o intrare și o ieșire
O diagramă bloc a unui program cu o structură liniară are următoarea formă:
Blocul "Acțiuni" poate include mai mulți operatori simpli.
În programele mai complexe, operatorii de control sunt utilizați pentru a controla ordinea de execuție a operatorilor. Acestea fac posibilă repetarea unui grup de operatori de mai multe ori, săriți un grup de operatori etc.
Operatorii constând dintr-o singură linie sunt numiți operatori simpli. Operatorii, inclusiv blocurile, se numesc operatori compuși
Un nume opțional poate fi atribuit oricărei instrucțiuni complexe și trebuie să fie un nume valid Fortran unic, compilat în conformitate cu regulile sale. Dacă este atribuit numele operatorului, acesta trebuie specificat pe linia finală. Exemple de utilizare a numelor vor fi date în descrierea operatorilor.
Principalele tipuri de operatori de control sunt operatorii de tranziție și operatorii de buclă.
Operatorii de tranziție modifică ordinea operațiunilor în comparație cu ordinea stabilită în textul programului. Operatorii condiționați vă permit să alegeți una dintre mai multe extensii posibile ale procesului de execuție a programului. Ele implementează cel de-al doilea tip de construcții de bază - ramificare.
Cel mai obișnuit operator condițional este declarația If și soiurile sale. În instrucțiunea If, condiția de selecție este specificată ca expresie booleană. Această expresie logică trebuie să fie închisă în paranteze.
Instrucțiunea if este o instrucțiune simplă, este scrisă într-o singură linie, dacă nu există niciun simbol de despărțire. Operatorul If este cazul celei mai simple ramificări - executarea unei acțiuni de către o condiție. Acest operator are forma:
Acțiunea este o declarație simplă executabilă care va fi executată dacă expresia logică este adevărată.
Diagrama bloc a instrucțiunii If.
Operatorul este utilizat în cazul în care mai mulți operatori trebuie executați atunci când condiția este îndeplinită.
Cuvântul cheie de atunci este scris în același șir ca și expresia logică.
Imaginea acestui operator pe diagramă:
Un bloc de acțiuni poate conține un număr arbitrar de operatori executivi (simple și compuse), cu excepția operatorului End. Acest bloc va fi executat dacă expresia logică este adevărată și nu va fi executată dacă este falsă.
Schimbați valorile variabilelor x și y pentru x Observați utilizarea numelui operatorului. Dacă este necesar să se efectueze acțiuni alternative, dacă construcția. Apoi poate fi prelungit cu un bloc: Atenție, vă rog. Cuvântul cheie de atunci este scris pe aceeași linie cu expresia logică, alt cuvânt cheie este într-o linie separată. Dacă nu există nici un "bloc fals", atunci este mai bine să nu scrieți altceva. Imaginea acestui operator pe diagramă: Într-o astfel de construcție, când condiția specificată de expresia logică este îndeplinită. Blocul este adevărat. dacă condiția nu este îndeplinită - Block false. În cazul declarației cu trei sau mai multe blocuri În forma cea mai completă, operatorul Dacă. atunci. altfel pot conține mai multe blocuri de acțiuni alternative adăugate de constructul elseif. atunci: Blocul implicit. Efectuează dacă nu sunt îndeplinite toate condițiile Cuvântul cheie Elseif, expresia logică și cuvântul vor fi scrise într-o singură linie. Aceasta este o declarație compusă, iar finalul Endif este și singurul. Ramurile lui Elseif. atunci în declarație pot fi mai multe, ramura Elsei poate fi absentă. O imagine a unei astfel de construcții pe o diagramă bloc: Instrucțiunea este executată după cum urmează: expresiile logice din paranteze sunt verificate secvențial până când se găsește adevăratul. Apoi, verificarea se va opri și blocul corespunzător va fi executat, iar controlul va fi transferat operatorului Endif. Dacă între toate condițiile nu există una adevărată, se va executa implicit Bloc. Dacă Else nu este prezent în această situație, nu se va întreprinde nicio acțiune. Aceasta este forma cea mai generală a operatorului de structură Dacă. Este evident că operatorul If. atunci. altul cu două blocuri este cazul său special și poate fi obținut prin eliminarea ramurilor Elseif. Dacă, în plus, eliminați sucursala Else. atunci va exista doar un bloc în instrucțiunea if. Să încercăm să implementăm aceeași construcție folosind operatorii built-inIf Este ușor de văzut claritatea și claritatea operatorului cu mai multe blocuri Dacă. În exemplul 2, este clar de ce fiecare bloc construit într-o anumită structură este recomandat să fie mutat spre dreapta prin mai multe poziții. Acesta este un stil de programare bun. Textul este vizibil mai ușor de citit. Dacă programul are mai mulți operatoriIf. puteți da un nume fiecăruia dintre ei. Numele operatorului este opțional, dar dacă este specificat în antetul său, acesta devine obligatoriu pentru șirul de operatori care urmează. Utilizarea numelor operatorilor A1, A2, A3 este demonstrată și în exemplul 2. Instrucțiunea select este concepută pentru a implementa ramificația prin selectarea uneia dintre variantele posibile. În acest design este verificată o singură expresie; valoarea sa poate fi integrala sau simbolica. În general, structura arată astfel: Diagrama bloc a instrucțiunii select: În paranteze, după cuvântul cheie Case, sunt plasate liste de valori și intervale care nu se suprapun, astfel încât executarea unui operator este executarea a cel mult un bloc de caz. Dacă valoarea expresiei nu aparține niciunui set specificat, atunci blocul implicit este executat, Exemplu (intervalul variabil este atribuit unei valori în funcție de valoarea valorii absolute a variabilei Număr): Integer. Număr, interval Selectați cazul (abs (număr)) Trecerea necondiționată în GoTo Operatorul de ramură necondiționat este considerat învechit. Abuzul de aceasta confundă structura programului și duce la erori greu de găsit. Limbile de programare moderne (inclusiv Fortran) permit în majoritatea cazurilor să renunțe la acestea. Operatorul are forma: Aici eticheta este un întreg nesemnificat format din nu mai mult de 5 cifre. Avertizare. Dacă tot decideți să utilizați operatorul GoTo. atunci rețineți că un operator fără etichetă care urmează GoTo nu va obține niciodată controlul. În unele cazuri, trebuie să întrerupeți aplicația fără a aștepta sfârșitul fizic al programului, de exemplu, dacă se găsește o eroare evidentă. Operatorul Stop are forma: Când această instrucțiune este executată, executarea aplicației este terminată, pe ecranul monitorului este afișat un șir de caractere scrise în operator. Șirul din instrucțiunea Stop poate fi absent. Un exemplu. Utilizați operatorul Stop pentru a evita împărțirea cu 0 sau cu un număr foarte mic. Divizarea cu 0 nu se întâmplă, deoarece aplicația se închide mai devreme. Instrucțiunea Stop întrerupe întotdeauna aplicația, indiferent dacă este utilizată în programul principal sau într-o subrutină. Instrucțiunea End este folosită pentru compilator ca semn de finalizare a programului sau a subrutinei. Prin urmare, instrucțiunea End trebuie să fie întotdeauna ultima instrucțiune din textul programului sau din subrutina. Instrucțiunea Return, spre deosebire de Stop, este utilizată numai în subrutine. Execuția ei termină subrutina și transmite controlul programului de apel. Un ciclu este execuția multiplă a aceleiași secvențe de operații, atâta timp cât este îndeplinită o anumită condiție predeterminată (condiția de continuare a ciclului). O trecere a ciclului se numește iterație. Imaginea ciclului din diagramă: Pentru a organiza buclele în Fortran, se folosește instrucțiunea Do. Reprezentarea generală a tuturor tipurilor de construcțiiDe: [nume:] titlul ciclului Există trei tipuri de cicluri în Fortran: - un ciclu pe o variabilă (cu un număr fix de repetări). - Procedați în timp ce faceți buclă. - o buclă infinită. Reguli generale pentru toate versiunile instrucțiunii buclă: 2) Corpul buclei poate conține operatori simpli și compuși imbricați, operatorii de bucla pot fi imbricați în alte blocuri. Blocarea intersecțiilor nu este permisă: un bloc care începe în interiorul unui alt bloc trebuie să se termine în același bloc extern. Respectarea acestei reguli este simplificată dacă programul este scris "scară". Un exemplu. Corpul buclă conține instrucțiunea Dacă. Face k = 1.10 Dacă (k<5) then Write(*,*) ‘<5’ Else Enddo Write(*,*) ‘>= 5 'endif Face k = 1.10 Dacă (k<5) then Write(*,*) ‘<5’ Else Write(*,*) ‘>= 5 'Endif Enddo 3) În cicluri, și numai în ele. Puteți utiliza instrucțiunile Exit și Cycle. schimbarea ordinii operatorilor. 4) Ca orice instrucțiune compusă, o buclă poate primi un nume. Numele este opțional, dar dacă este specificat în antetul buclă, devine obligatoriu pentru ultimul scop. Instrucțiunea de ieșire oprește buclele. Controlul este transferat primului operator executabil imediat după ciclu. În general, instrucțiunea Exit are numele de atribut al buclă: Numele actual indică ce ciclu să ieșiți. Dacă nu există niciun nume, ieșirea este din bucla curentă (cea mai interioară sau numai dacă nu există cuiburi). Instrucțiunea ciclu trece controlul la începutul buclă. Declarațiile între ciclu și sfârșit nu se execută. Acțiunea acestui operator este echivalentă cu trecerea la următoarea iterație în buclă cu numele specificat. Dacă bucla nu este finalizată, execuția va continua cu următoarea valoare a variabilei. Dacă lipseste numele buclei, instrucțiunea Ciclu oferă un salt la următoarea iterație a bucla curentă. Exemple de utilizare a instrucțiunilor de ieșire și de ciclu vor fi luate în considerare la examinarea operatorilor de buclă. Bucle variabile O buclă variabilă oferă o modificare a valorii unei variabile întregi în limitele specificate și cu un anumit pas. Pentru fiecare valoare a variabilei buclă, se execută un bloc de instrucțiuni, numit corpul ciclului. Reprezentarea generală a operatorului buclă pe o variabilă: [name:] Do variabila = valoarea start, valoarea finala, pasul Rescriem acest operator introducând notația valorilor utilizate: x este o variabilă întreagă sau reală, numită variabila buclă. xn, xk sunt expresii numerice care specifică intervalul de x. pas este o expresie numerică care specifică pasul de a schimba x. Dacă pasul nu este prezent, se presupune că acesta este 1. Imaginea unei buclă pe o variabilă într-un grafic: Numărul de repetiții pentru o variabilă Un ciclu cu o variabilă se numește și un ciclu cu un număr fix de repetări. Numărul de repetări este calculat de compilator folosind formula: Atenție vă rog! Formula arată că etapa de schimbare pas al variabilei bucla poate fi egal cu 0. Este posibil pentru a obține un mesaj de eroare de execuție „Divizia de 0“, chiar și în cazul în care programul nu are nici o diviziune operațiuni. Următoarele funcții sunt utilizate în formula: - Int este o funcție care definește partea intregă a argumentului său unic. În această formulă, argumentul lui Int este expresia aritmetică din parantezele interioare. - Max - o funcție care selectează valoarea maximă între argumentele sale. În această formulă, Max are două argumente: 0 (zero) și rezultatul calculării funcției Int. Dacă al doilea argument este pozitiv, atunci este numărul de repetări ale buclei, dacă negativ, atunci kp = 0. și ciclul nu se va executa o singură dată. Exemple de calcul al numărului de repetări ale unui ciclu cu o variabilă. (xk - xn + pas) / pas = (8,7 - 1,25 + 1,1) / 1,1 = 8,55 / 1,1 = 7,77 Int (7,77) = 7; Max (0, 7) = 7; Răspuns: kp = 7 (xk - xn + pas) / pas = (-4 - 2 + 0.33) / 0.33 = -5.67 / 0.33 = -17.2 Int (-17,2) = -17; Max (0, -17) = 0; Răspuns: kp = 0 (xk - xn + pas) / pas = (3 - 1 - 0.33) / (-0.33) = -0.67 / 0.33 = -2.0 Int (-2,0) = -2; Max (0, -2) = 0; Răspuns: kp = 0 Se vede din exemple că ciclul nu va fi executat o dată, adică kp = 0. dacăArticole similare