Structurat programare - studopediya

Structurat programare - o metodă, care implică crearea de programe îmbunătățite. Ea servește pentru a organiza proiectarea și codificarea programelor, astfel încât să se prevină cele mai multe erori logice, și să detecteze pe cei care sunt admise.

Utilizarea unui limbaj de nivel înalt (cum ar fi Fortran) programatorii ar putea scrie programe la câteva mii de linii lungi. Cu toate acestea, limbajul de programare, care este ușor de înțeles în programul scurt, atunci când vine vorba de programe mari, devine imposibil de citit (și incontrolabil). A scăpa de astfel de programe nestructurate vin după crearea în 1960 de limbaje de programare structurate. Acestea includ Algol, Pascal și C.

Programarea structurată presupune exact anumite structuri de control, blocuri de program, instrucțiuni GOTO rutinele autonome care susțin recursivitate și variabile locale. În principal în programarea structurată este posibilitatea de divizare a programului în elementele sale constitutive. Prin utilizarea de programare structurată, programator medie poate crea și menține un program de mai mult de 50 000 de linii lungi.

Programarea structurată este strâns legată de concepte, cum ar fi „de design de sus în jos“ și „programarea modulară.“

sus în jos metodă de proiectare implică descompunerea secvențială a funcțiilor de prelucrare a datelor pe un elemente funcționale simple (de tip „top-down“).

Ca rezultat, au construit o diagramă ierarhică care prezintă compoziția și vzaimopodchinenost funcțiile individuale, care se numește o structură funcțională a aplicației algoritmului (FSA).

Structura funcțională a algoritmului razrabatyaetsya aplicare în următoarea succesiune:

1) definește scopurile domeniului de automatizare și ierarhizarea acestora;

2) compoziția este setată aplicație (sarcina de procesare), oferind obiective;

3) clarifică natura relației dintre aplicații și principalele lor caracteristici (informații pentru soluții de rezolvare a problemelor, de timp și frecvență etc.) .;

4) sunt determinate pentru a face față provocărilor de funcții de prelucrare a datelor;

5) să fie funcții de procesare a descompus complexitatea structurală necesară implementate instrumente prospective.

Un astfel de cadru de aplicare reflectă cel mai important - compoziția și relația dintre funcțiile de procesare a informației pentru punerea în aplicare a cererilor, cu toate că nu dezvăluie performanțele fiecărui individ funcții logice, condiții sau frecvența apelurilor lor.

Descompunerea ar trebui să fie de natură strict funcțională, adică, VEA element separat trebuie să descrie o funcție informativă completă de prelucrare a informației, ceea ce implică un anumit mod de a pune în aplicare la nivel de software.

Programarea modulară se bazează pe conceptul de modul - interconectate în mod logic multitudine de elemente funcționale proiectate sub forma unor module software separate. Programarea modulară este considerată în secțiunea 7.

Programarea structurată este de a obtine dreptul de program al unor structuri logice simple. Ea se bazează pe o teoremă strict dovedită, structurare, care prevede că orice program corect (o singură intrare, comenzi imposibil de găsit în buclă și fără o singură ieșire) pot fi scrise folosind numai următoarele structuri logice de bază:

· Ciclicitate (ciclu sau repetare).

Această teoremă a fost formulată în 1966 și Boim Yakopini (Corrado Bohm, Guiseppe Jacopini). Ideea principală a teoremei - de a transforma fiecare parte a programului într-una din cele trei structuri principale, sau o combinație a acestora, astfel încât partea nestructurat a programului a scăzut. După un număr suficient de astfel de transformări rămase parțial nestructurate sau dispare sau devine inutilă. Teorema se poate dovedi că rezultatul este un program echivalent cu originalul și este menționată doar structura de bază.

Combinație de programe regulate obținute cu ajutorul acestor trei structuri de bază sunt, de asemenea, programe regulate. Aplicarea iterație și încorporarea structurilor de bază, puteți obține un program de orice mărime și complexitate. Atunci când se utilizează numai aceste structuri eliminând nevoia de salturi necondiționate și etichete. Deci, uneori structurale de codificare este înțeleasă în sens restrâns ca programarea fără un «GOTO».

Limbajul de programare C (C ++) Următorii operatori sunt utilizate pentru a pune în aplicare structurale de codificare:

Structura "următor" (fig. 5.1, a) este realizată integral operatorul, expresie, asm operator și altele.

Compusul declarație. sau blocul este o listă (posibil gol) declarațiilor închise în paranteze. Sintactic, un bloc este considerat ca un singur operator, dar afectează identificatorii de context declarate în ea. Blocurile pot avea orice adâncime de imbricare.

Declarație expresie este o expresie urmată de virgulă. Formatul său este după cum urmează:

compilator C ++ efectuează operatorii de expresie pentru a evalua expresia. Toate efectele secundare ale acestui calcul este finalizată înainte de începerea declarației următoare. Majoritatea operatorilor de expresii reprezintă declarații de atribuire sau apeluri de funcții (de exemplu, printf (), scanf ()). Un caz special este o afirmație goală constând dintr-o singură virgulele (;). O declarație goală nu face nimic. Cu toate acestea, este util în cazurile în care sintaxa C ++ teaptă prezența unui operator, dar programul nu este necesară (de exemplu, o buclă infinită pentru).

Asm-operatorii furnizează programare la nivel de asamblare (folosind indicii, operații la nivel de bit, operațiune de deplasare, etc.). Utilizarea subrutine limbaj de asamblare pentru prelucrarea unor situații critice, operații repetitive, este posibil să se mărească viteza de optimizare fără nici o îmbunătățire a limbajului de nivel înalt.

Structura „furcii“ (fig. 5.1, b, c) fiind puse în aplicare de către operatorii de alegere. Selectarea operatorului. sau operatorii de flux de control funcționează pentru a selecta una dintre ramurile alternative programului, verificând această anumită valoare. Există două tipuri de operatori alegere: dacă. altceva și comutator.

Operatorul de bază în cazul în care (. Figura 5.1, b) are următorul format:


Limbajul C ++, spre deosebire, de exemplu, Pascal nu are nici un tip special de date boolean. Controalele condiționate rolul de acest gen poate juca o variabilă întreg sau un tip de indicator. Condition_expression ar trebui să fie scrise în paranteze. Această expresie este evaluată. În cazul în care este zero (sau gol, în cazul unui tip pointer), spunem că condition_expression fals (false); în caz contrar este adevărat (adevărat).

În cazul în care clauza else este absent, iar condition_expression dă o valoare „true“, atunci operator_esli_ „adevăr“; în caz contrar acesta este ignorat.

În cazul în care propunerea este stabilită operator_esli_ „minciună“ și condition_expression dă o valoare „true“, atunci operator_esli_ „adevăr“; în caz contrar executați operator_esli „minciună.“

Transformări efectuate de indicii, astfel încât valoarea pointer poate fi întotdeauna corect în comparație cu expresia tip constant da 0. Astfel, comparativ cu un pointer nul se poate face sub forma:

if (! PTR). sau dacă (= = 0 ptr).

Operator_esli_ „minciună“ și operator_esli_ „adevăr“ pot fi ei înșiși în cazul în care operatorii, care vă permite să organizați orice adâncime cuiburi de teste condiționate. Atunci când se utilizează structuri imbricate în cazul în care. altfel ar trebui să fie atent și să se asigure că alegerea corectă a declarațiilor executabile. Orice ambiguitate în proiectarea „altceva“ este permisă comparația cu ultima parte a constatat la nivelul unității dacă nu altceva.

oferă o soluție greșită, ca altfel, indiferent de stilul de înregistrare este comparat nu cu primul și al doilea, dacă. Prin urmare, înregistrarea corectă a ultima linie ar trebui să fie:

Cu toate acestea, cu acolade pot fi realizate și prima structură:

pune altceva ( "x = 1!"); // decizie dreapta

Instrucțiunea switch (.. a se vedea figura 5.1, c) utilizează următorul format de bază:

comutator (pereklyuchayuschee_vyrazhenie) case_operator;

Acesta vă permite să transfere controlul la unul dintre mai mulți operatori cu o etichetă caz ​​în funcție de valoarea pereklyuchayuschego_vyrazheniya. Orice operator în case_operatore (inclusiv operatorul gol) pot fi etichetate cu una (sau mai multe) opțiuni de etichetare:

caz konstantnoe_vyrazhenie_i: case_operator_i;

konstantnoe_vyrazhenie_i unde fiecare trebuie să aibă un număr întreg unic (convertit la pereklyuchayuschego_vyrazheniya tip), în interiorul comutatorului operatorului înfășurătoare.

Permis de a avea o declarație de comutare repetată caz ​​constantă.

Operatorul poate, de asemenea, nu mai mult de o etichetă implicită:

După calcul se efectuează comparația pereklyuchayuschego_vyrazheniya rezultat cu unul dintre konstantnyh_vyrazheniy_i. Dacă un meci este găsit, case_operatoru_i apoi se trece Etichetat pentru care se găsește un meci. În cazul în care nu se potrivesc este găsit și există o etichetă implicită, controlul este transferat operatoru_umolchaniya. Dacă un meci nu este găsit, și nici o etichetă implicit, nici un operator nu sunt îndeplinite. Pentru a opri un grup de operatori pentru o anumită versiune, ar trebui să utilizați instrucțiunea break.