Contacte

limba algoritmică rusă. Limbaje algoritmice și programare. Structura de bază de ramificare

Ministerul Educației Federația Rusă Universitatea Tehnică de Stat Perm

Departament tehnologia Informatieiși sisteme automate

Vikentieva O.L.

Note de curs pentru curs " Limbaje algoritmiceși programare „(Fundamentele limbajului C++, semestrul I)

Introducere

În primul semestru sunt luate în considerare construcțiile de bază ale limbajului C și tehnologia de programare de bază (programare structurată).

Programarea structurata este o tehnologie de realizare a programelor care permite, prin respectarea anumitor reguli, reducerea timpului de dezvoltare si a numarului de erori, precum si facilitarea posibilitatii de modificare a unui program.

1.1. Algoritm și program

Algoritmul este o prescripție precisă care determină proces de calcul trecând de la date inițiale variabile la rezultatul final, adică este o rețetă pentru atingerea unui scop.

Setul de instrumente și reguli pentru reprezentarea unui algoritm într-o formă adecvată pentru execuție de către un computer se numește limbaj de programare, un algoritm scris în acest limbaj se numește program.

În primul rând, un algoritm de acțiuni este întotdeauna dezvoltat și apoi este scris într-unul dintre limbajele de programare. Textul programului este procesat de programe utilitare speciale - traducători. Limbajele de programare sunt limbaje artificiale. Ele diferă de limbile naturale printr-un număr limitat de „cuvinte” și reguli foarte stricte pentru scrierea comenzilor (operatori). Totalitatea acestor cerințe formează sintaxa limbajului de programare, iar sensul fiecărei construcții este semantica acesteia.

1.2 Proprietăţile algoritmului

1. Masivitate: algoritmul ar trebui aplicat nu unei singure probleme, ci unei întregi clase de probleme similare (un algoritm pentru rezolvarea unei ecuații pătratice ar trebui să rezolve nu o ecuație, ci toate ecuațiile pătratice).

2. Eficiență: algoritmul ar trebui să conducă la un rezultat într-un anumit număr de pași (la împărțirea 1 la 3, se obține o fracție periodică de 0,3333 (3); pentru a obține rezultatul final, este necesar să se precizeze acuratețea obținerii acestei fracții , de exemplu, până la 4 zecimale).

3. Certitudine (determinism) - fiecare acțiune a algoritmului trebuie să fie clară pentru executantul său (instrucțiunile pentru un aparat de uz casnic în limba japoneză pentru o persoană care nu vorbește japoneză nu este un algoritm, deoarece nu are proprietatea determinismului).

4. Discretență - procesul trebuie descris folosind indivizibil

operațiunile efectuate la fiecare pas (adică pașii nu pot fi împărțiți în pași mai mici).

Algoritmii pot fi prezentați în următoarele forme:

1) o descriere verbală a algoritmului.

2) descrierea grafică a algoritmului.

3) folosind un limbaj de programare algoritmică

1.2. Compilatori și interpreți

CU folosind un limbaj de programare, este creat un text care descrie un algoritm compilat anterior. Pentru a obține un program de lucru, trebuie să traduceți acest text într-o secvență de instrucțiuni pentru procesor, care este efectuată folosind programe speciale care se numesc traducători. Există două tipuri de traducători: compilatori și interpreți. Compilatorul traduce textul modulului sursă în cod mașină, numit modul obiect, într-un proces continuu. În același timp, el caută mai întâi prin codul sursă al programului erori de sintaxă... Interpretul execută modulul sursă al programului în modul operator cu operator, prin

progresul lucrării, traducând fiecare operator în limbajul mașinii.

1.3 limbaje de programare

Diferite tipuri de procesoare au seturi de instrucțiuni diferite. Dacă un limbaj de programare se concentrează pe un anumit tip de procesor și ia în considerare particularitățile acestuia, atunci se numește limbaj de programare de nivel scăzut. Limbajul de cel mai jos nivel este limbajul de asamblare, care reprezintă pur și simplu fiecare instrucțiune a codului mașinii sub forma unor simboluri speciale numite mnemonice. Cu ajutorul limbajelor de nivel scăzut, sunt create programe foarte eficiente și compacte, deoarece dezvoltatorul are acces la toate capacitățile procesorului. pentru că seturi de instrucţiuni pentru diferite modele procesoarele sunt și ele diferite, atunci fiecărui model de procesor îi corespunde propriul limbaj de asamblare, iar programul scris în el poate fi folosit doar în acest mediu. Limbi similare sunt folosite pentru a scrie mic aplicații de sistem, drivere de dispozitiv etc.

Limbaje de programare nivel inalt nu ține cont de particularitățile arhitecturilor specifice computerelor, așadar programe create la nivel de sursă, acestea sunt portate cu ușurință pe alte platforme dacă au fost creați pentru ei traducătorii corespunzători. Dezvoltarea de programe în limbaje de nivel înalt este mult mai ușoară decât în ​​limbaje de mașină.

Limbile de nivel înalt sunt:

1. Fortran este primul limbaj compilat creat în Anii 50 ai secolului XX. A implementat o serie de concepte de programare esențiale. Pentru acest limbaj a fost creat o cantitate mare biblioteci variind de la complexe statistice la management prin satelit, deci continuă să fie folosit în multe organizații.

2. Cobol - Limbajul compilat pentru calcule și decizii economice problemele de afaceri s-au dezvoltat la începutul anilor '60. În Cobol au fost implementate instrumente foarte puternice pentru lucrul cu cantități mari de date stocate pe medii externe.

3. Pascal - creat la sfârșit Matematicianul elvețian Niklaus Wirth din anii '70 special pentru predarea programării. Vă permite să dezvoltați gândirea algoritmică, să construiți un scurt, bine program lizibil, demonstrează tehnicile de bază de algoritmizare, este, de asemenea, potrivit pentru implementarea proiectelor mari.

4. BASIC - creat în Anii 60 și pentru predarea programării. Există compilatoare și interpreți pentru el, este unul dintre cele mai populare limbaje de programare.

5. C - a fost creat în anii 70 și nu a fost considerat inițial un limbaj de programare mainstream. Acesta a fost destinat să înlocuiască asamblatorul, astfel încât să poată crea programe cât mai eficiente și scurte posibil, fără a fi dependent de procesor. El este în multe privințe asemănător cu Pascal și are caracteristici suplimentare a lucra cu memoria. Conține multe aplicate și programe de sistem, precum și sistem de operare Unix.

6. C++ este o extensie orientată pe obiecte a limbajului C, creată de Bjarne Stroustrup în 1980.

7. Java este un limbaj care a fost creat de Sun la început 90 bazat pe C++. Este conceput pentru a simplifica dezvoltarea aplicațiilor C++ prin eliminarea caracteristicilor de nivel scăzut din acesta. caracteristica principală limbajul este că nu este compilat în codul mașinii, ci într-un bytecode independent de platformă (fiecare instrucțiune are un octet). Acest cod poate fi executat folosind un interpret - mașina virtuală Java (JVM).

2. Structura unui program C++

Un program C are următoarea structură: # directive de preprocesor

. . . . . . . . .

# directive de preprocesor funcția a ()

operatori de funcții în ()

operatori

void main () // funcția, care pornește instrucțiunile de execuție a programului

descrieri

sarcinile

funcția operator gol

compozit

tranziție

Directive preprocesor - controlează transformarea textului programului înainte ca acesta să fie compilat. Program originalîntocmit în SI sub forma fisier text, trece prin 3 etape de procesare:

1) transformarea textului prin preprocesor;

2) compilare;

3) layout (editare link sau asamblare).

După aceste trei etape, se formează codul executabil al programului. Sarcina de a prepro-

cessor - transformarea textului programului înainte ca acesta să fie compilat. Regulile de preprocesare sunt definite de programator folosind directive de preprocesor. Directiva începe cu #. De exemplu,

1) #define - indică regulile de înlocuire în text. #define ZERO 0.0

Înseamnă că fiecare utilizare a numelui ZERO în program va fi înlocuită

2) #include< имя заголовочного файла>- destinat includerii în textul programului a textului din catalogul „Fișiere antet” furnizat cu biblioteci standard... Fiecare funcție de bibliotecă C are o descriere corespunzătoare într-unul dintre fișierele antet. Lista fișierelor de antet este definită de standardul de limbă. Utilizarea directivei include nu include biblioteca standard corespunzătoare

bibliotecă, dar vă permit doar să inserați descrieri din fișierul antet specificat în textul programului. Codurile bibliotecii sunt conectate în etapa de conectare, adică după compilare. Deși fișierele antet conțin toate descrierile funcțiilor standard, numai acele funcții care sunt utilizate în program sunt incluse în codul programului.

După procesarea preprocesării, nu rămâne nici o directivă de preprocesare în textul programului.

Un program este un set de descrieri și definiții și constă dintr-un set de funcții. Aceste funcții ar trebui să includă întotdeauna o funcție numită main. Fără el, programul nu poate fi executat. Numele funcției este precedat de informații despre tipul valorii returnate de funcție (tipul rezultatului). Dacă funcția nu returnează nimic, atunci este indicat tipul void: void main (). Fiecare functie, inclusiv main, trebuie sa aiba un set de parametri, poate fi goala, apoi (void) este indicat in paranteze.

Corpul funcției este plasat în spatele antetului funcției. Un corp de funcție este o secvență de definiții, descrieri și instrucțiuni executabile cuprinse între acolade. Fiecare definiție, descriere sau declarație se termină cu punct și virgulă.

Definiții - introduceți obiecte (un obiect este o zonă de memorie numită, un caz special al unui obiect este o variabilă) necesare pentru a reprezenta datele procesate în program. Un exemplu este

int y = 10; // numit constant float x; //variabil

Descrieri - notifică compilatorul despre proprietățile și numele obiectelor și funcțiilor descrise în altă parte în program.

Operatori - determină acțiunile programului la fiecare pas al executării acestuia

Un exemplu de program C:

#include // directivă de preprocesor

Întrebări de control

1. Care sunt părțile unui program C++?

2. Cum este o definiție diferită de o reclamă?

3. Enumerați etapele creării unui program executabil în C++.

4. Ce este un preprocesor?

5. Ce este o directivă de preprocesor? Dați exemple de directive de preprocesor.

6. Scrieți un program care imprimă textul „Primul meu program C++”

2. Mijloacele de bază ale limbajului C++ 2.1.Compunerea limbajului

Într-un text în orice limbă naturală se pot distinge patru elemente principale: simboluri, cuvinte, fraze și propoziții. Limbajul algoritmic conține și astfel de elemente, doar cuvintele se numesc lexeme (construcții elementare), fraze - expresii, propoziții - operatori. Lexemele sunt formate din simboluri, expresii din jetoane și simboluri, operatori din simboluri ale expresiilor și jetoane (Fig. 1.1)

Orez. 1.1. Compoziția limbajului algoritmic Astfel, elementele limbajului algoritmic sunt:

Identificatorii sunt numele obiectelor pentru programele SI. Identificatorul poate conține litere latine, cifre și liniuță de subliniere. Se disting literele mari și mici, de exemplu PROG1, prog1 și Prog1 sunt trei identificatori diferiți. Primul caracter trebuie să fie o literă sau un caracter de subliniere (dar nu un număr). Nu sunt permise spații în identificatori.

Cuvintele cheie (rezervate) sunt cuvinte care au o semnificație specială pentru compilator. Ele nu pot fi folosite ca identificatori.

- Caracterele operației sunt unul sau mai multe caractere care definesc o acțiune asupra unui operand. Operațiile sunt împărțite în unare, binare și ternare în funcție de numărul de operanzi implicați în această operație.

Constantele sunt valori imuabile. Există constante întregi, reale, caractere și șir. Compilatorul selectează o constantă ca simbol (construcție elementară) și o atribuie unuia dintre tipuri după aspectul său.

Separatoarele sunt paranteze, punct, virgulă, spații albe.

2.1.1. Constante în C++

O constantă este un simbol care reprezintă o imagine a unei valori fixe numerice, șir sau caracter.

Constantele sunt împărțite în 5 grupuri:

întregi;

- real (virgula flotantă);

Numerabil;

Simbolic;

Şir.

Compilatorul extrage un token și îl atribuie unui grup sau altuia și apoi intern

trei grupe la un anumit tip după forma sa de înregistrare în textul programului și după valoarea sa numerică.

Constantele întregi pot fi zecimale, octale și hexazecimale. O constantă zecimală este definită ca o secvență de cifre zecimale care încep cu un non-0, dacă numărul nu este 0 (exemple: 8, 0, 192345). O constantă octală este o constantă care începe întotdeauna de la 0. 0 este urmat de cifre octale (exemple: 016 - valoarea zecimală 14, 01). Constantele hexazecimale sunt o succesiune de cifre hexazecimale precedate de caractere 0x sau 0X (exemple: 0xA, 0X00F).

V în funcție de valoarea constantei întregi compilatorul o va prezenta altfel

v memoria computerului (adică, compilatorul va atribui constantei tipul de date corespunzător).

Constantele reale au o formă diferită de reprezentare internă în memoria computerului. Compilatorul recunoaște astfel de constante după aspectul lor. Constantele reale pot avea două forme de reprezentare: virgulă fixă ​​și virgulă mobilă. Tip constantă în virgulă fixă: [cifre] [cifre] (exemple: 5.7,. 0001, 41.) Tip constantă în virgulă mobilă: [cifre] [.] [cifre] E | e [+ | -] [cifre ] (exemple: 0,5e5, .11e-5, 5E3). În notarea constantelor reale, poate fi omis fie partea întreagă sau fracțională, fie punctul zecimal, fie semnul exponentului cu exponentul.

Constantele enumerate sunt introduse folosind cuvântul cheie enum. Acestea sunt constante întregi obișnuite cărora le sunt atribuite desemnări unice și ușor de utilizat. Exemple: enum (unu = 1, doi = 2, trei = 3, patru = 4);

enum (zero, unu, doi, trei) - dacă omiteți semnele = și în definiția constantelor enumerate valori numerice, atunci valorile vor fi atribuite implicit. În acest caz, identificatorul din stânga va primi valoarea 0, iar fiecare ulterior va crește cu 1.

enum (zece = 10, trei = 3, patru, cinci, șase);

enumerare (duminică, luni, marți, miercuri, joi, vineri, sâmbătă)

Constantele de caractere sunt unul sau două caractere incluse în apostrofe. Constantele de caractere formate dintr-un caracter sunt de tip char și ocupă un octet în memorie, constantele de caractere formate din două caractere sunt de tip int și ocupă doi octeți. Secvențele care încep cu \ se numesc secvențe de control, sunt folosite:

- Pentru a reprezenta simboluri care nu au un afișaj grafic, de exemplu:

\ a - semnal sonor,

\ b - mergeți înapoi cu un pas, \ n - avans de linie,

\ t - filă orizontală.

- Pentru a reprezenta caractere: \, ',? , ”(\\, \’, \?, \”).

- Pentru a reprezenta caractere folosind coduri hexazecimale sau octale (\ 073, \ 0xF5).

O constantă șir este o secvență de caractere cuprinsă între ghilimele.

Caracterele de control pot fi folosite și în șiruri. De exemplu: „\ nLinie nouă”,

„\ N \” Limbaje de programare algoritmică de nivel înalt \ ””.

2.2. Tipuri de date în C++

Datele sunt afișate în program în întreaga lume. Scopul programului este prelucrarea datelor. Date tipuri diferite stocate și prelucrate în moduri diferite. Tipul de date definește:

1) reprezentare internă a datelor în memoria computerului;

2) un set de valori care poate lua valori de acest tip;

3) operațiuni și funcții care pot fi aplicate datelor de acest tip.

V În funcție de cerințele sarcinii, programatorul alege tipul pentru obiectele programului. Tipurile C++ pot fi împărțite în tipuri simple și compuse. Tipurile simple sunt tipuri care se caracterizează printr-o singură valoare. C++ definește 6 tipuri de date simple:

int (întreg)

caracter (caracter)

wchar_t (caracter larg) bool (boolean) float (real)

dublu (dublă precizie reală)

Există 4 specificatori de tip pentru a specifica reprezentarea internă și gama de tipuri standard.

scurt lung semnat

nesemnat

2.2.1. tip int

Valorile de acest tip sunt numere întregi.

Mărimea tipului int nu este definită de standard, dar depinde de computer și de compilator. Pentru un procesor pe 16 biți, îi sunt alocați 2 octeți, pentru un procesor pe 32 de biți - 4 octeți.

Dacă int este precedat de specificatorul scurt, atunci sunt alocați 2 octeți pentru număr, iar dacă specificatorul lung, atunci 4 octeți. Cantitatea de memorie alocată pentru obiect depinde de setul de valori valide pe care obiectul le poate lua:

short int - ia 2 octeți, prin urmare, are un interval de –32768 .. + 32767;

long int - ocupă 4 octeți, prin urmare, are un interval de –2 147 483 648 .. + 2 147 483 647

Tipul int este același cu short int pe computerele pe 16 biți și cu long int pe computerele pe 32 de biți.

Modificatorii semnati și nesemnati afectează, de asemenea, setul de valori valide pe care le poate lua un obiect:

unsigned short int - ocupă 2 octeți, prin urmare, are un interval de 0 ..65536; unsigned long int - ocupă 4 octeți, prin urmare, are o gamă de 0 .. + 4 294 967

2.2.2. Tipul de caractere

Valorile de acest tip sunt membri ai unui set ordonat finit de caractere. Fiecărui caracter i se atribuie un număr numit cod de caracter. 1 octet este alocat pentru valoarea tipului de caracter. Tipul char poate fi folosit cu specificatorii semnati și nesemnati. Tipul de date char semnat poate stoca valori în intervalul de la –128 la 127. Când utilizați tipul de date char nesemnat, valorile pot varia de la 0 la 255. ASCII (American Standard Code foe International Interchange) este utilizat pentru codificare. Caracterele cu coduri de la 0 la 31 se referă la cele de service și au sens independent numai în declarațiile I/O.

Valorile de tip char sunt, de asemenea, folosite pentru a stoca numere din intervalele specificate.

2.2.3. Wchar_t tip

Proiectat pentru a funcționa cu un set de caractere pentru care 1 octet nu este suficient, de exemplu Unicode. Acest tip are, în general, aceeași dimensiune cu cea scurtă. Constantele șir de caractere de acest tip sunt scrise cu prefixul L: L „Șir # 1”.

2.2.4. tip bool

Tipul bool se numește boolean. Valorile sale pot fi adevărate și false. Forma internă este falsă - 0, orice altă valoare este interpretată ca adevărată.

2.2.5. Tipuri în virgulă mobilă.

Reprezentarea internă a unui număr real constă din 2 părți: mantisa și ordinea. În computerele compatibile cu IBM, valorile float ocupă 4 octeți, dintre care un bit este rezervat pentru semnul mantisei, 8 pentru ordin și 24 pentru mantise.

Valorile tipurilor duble ocupă 8 octeți, 11 și 52 de biți sunt alocați pentru ordine și, respectiv, mantise. Lungimea mantisei determină precizia numărului, iar lungimea este de ordinul intervalului său.

Dacă există un specificator lung înainte de numele tipului dublu, atunci sunt alocați octeți pentru valoare.

2.2.6. Tip gol

LA tipurile principale includ și tipul de gol.Setul de valori de acest tip este

2.3. Variabile

O variabilă în C++ este o zonă de memorie numită care stochează date de un anumit tip. O variabilă are un nume și o valoare. Numele este folosit pentru a face referire la zona de memorie în care este stocată valoarea. Orice variabilă trebuie declarată înainte de utilizare. Exemple:

Vedere generală a operatorului de descriere:

[clasa de memorie] nume tip [inițializator];

Clasa de memorie poate lua următoarele valori: auto, extern, static, register. Clasa de memorie definește durata de viață și domeniul de aplicare a variabilei. Dacă clasa de memorie nu este specificată în mod explicit, atunci compilatorul o determină pe baza contextului declarației. Durata de viață poate fi constantă - în timpul execuției programului sau temporară - în timpul blocării. Domeniul de aplicare este o parte a textului programului din care este permis accesul normal la o variabilă. De obicei, domeniul de aplicare este același cu domeniul de aplicare. Cu excepția cazului în care o variabilă cu același nume există în blocul interior.

Const - indică faptul că această variabilă nu poate fi modificată (denumită constantă). Când descrieți, puteți atribui o valoare inițială variabilei (inițializare). Cursuri de memorie:

auto este o variabilă locală automată. Specificatorul automat poate fi specificat numai la definirea obiectelor bloc, de exemplu, în corpul unei funcții. Pentru aceste variabile, memoria este alocată la intrarea în bloc și eliberată la ieșire. Astfel de variabile nu există în afara blocului.

extern este o variabilă globală, se află în alt loc din program (în alt fișier sau mai departe de-a lungul textului). Folosit pentru a crea variabile care sunt disponibile în toate fișierele de program.

static este o variabilă statică, există doar în fișierul în care este definită variabila.

register - sunt similare cu auto, dar memoria pentru ele este alocată în registrele procesorului. Dacă acest lucru nu este posibil, atunci variabilele sunt tratate ca auto.

int a; // variabilă globală void main () (

int b; // variabilă locală

extern int x; // variabila x este definită în altă parte static int c; // variabila statică locală a = 1; // atribuirea unei variabile globale

int a; // variabilă locală a

a = 2; // atribuire unei variabile locale :: a = 3; // atribuire unei variabile globale

int x = 4; // definirea și inițializarea lui x

În exemplu, variabila a este definită în afara tuturor blocurilor. Sfera variabilei a este întregul program, cu excepția acelor linii în care este utilizată variabila locală a. Variabilele b și c sunt locale, domeniul lor este bloc. Durata de viață este diferită: memoria de sub b este alocată la intrarea blocului (deoarece în mod implicit clasa de memorie este automată) și este eliberată la ieșirea din bloc. Variabila cu (static) există în timp ce programul rulează.

Dacă valoarea inițială a variabilelor nu este specificată în mod explicit în timpul definiției, compilatorul va seta variabilele globale și statice la zero. Variabilele automate nu sunt inițializate.

Numele variabilei trebuie să fie unic în domeniul său de aplicare.

O declarație de variabilă poate fi efectuată fie ca declarație, fie ca definiție. Declarația conține informații despre clasa de memorie și tipul variabilei, definiția împreună cu aceste informații oferă o instrucțiune de alocare a memoriei. În exemplu extern int x; - declarație, iar restul sunt definiții.

2.4.Semne de operare în C++

Semnele de operare asigură formarea expresiilor. Expresiile constau din operanzi, semne operator și paranteze. Fiecare operand este, la rândul său, o expresie sau un caz special al unei expresii - o constantă sau o variabilă.

Operații unare

& obținerea adresei operandului

* Adresarea adresei (dereferențiere)

- minus unar, schimbă semnul operandului aritmetic

++ Creste cu unu:

operație de prefix - incrementează operandul înainte de a fi utilizat

Operația postfix incrementează operandul după ce a fost utilizat

int a = (m ++) + n; // a = 4, m = 2, n = 2

int b = m + (++ n); // a = 3, m = 1, n = 3

scade cu unu:

operație cu prefix - decrește operandul înainte de a fi utilizat

Operația postfix decrește operandul după ce este utilizat

calculând dimensiunea (în octeţi) pentru un obiect de tipul care

are un operand

are două forme

dimensiunea expresiei

dimensiunea (plutitoare) // 4

sizeof (1.0) // 8, deoarece constantele reale sunt implicite

limbaj algoritmic - este un sistem de notație și reguli pentru înregistrarea uniformă și precisă a algoritmilor și execuția lor. Un limbaj algoritmic este un mijloc de înregistrare a algoritmilor într-o formă analitică, intermediar între înregistrarea unui algoritm într-un limbaj natural (uman) și o înregistrare într-un limbaj de calculator (limbaj de programare).

Există o diferență între conceptele de „limbaj algoritmic” și „limbaje de programare”. În primul rând, un program scris într-un limbaj algoritmic nu este neapărat destinat unui computer. Implementarea practică a unui limbaj algoritmic este o problemă separată în fiecare caz specific.

Ca orice limbă, un limbaj algoritmic are propriul său vocabular. Baza acestui dicționar este formată din cuvintele folosite pentru a scrie comenzile incluse în sistemul de comandă al executorului unuia sau altui algoritm. Astfel de comenzi se numesc comenzi simple. Într-un limbaj algoritmic, sunt folosite cuvinte, al căror sens și metodă de utilizare sunt stabilite o dată pentru totdeauna. Aceste cuvinte sunt numite serviciu. Utilizarea cuvintelor funcționale face ca înregistrarea algoritmului să fie mai descriptivă, iar forma de prezentare a diverșilor algoritmi este uniformă.

Un algoritm scris într-un limbaj algoritmic trebuie să aibă un nume. Este recomandabil să alegeți numele astfel încât să fie clar ce soluție a problemei descrie algoritmul dat. Pentru a evidenția numele algoritmului, în fața acestuia este scris cuvântul de serviciu ALG (ALGoritm). Numele algoritmului (de obicei cu linie nouă) notează-i comenzile. Pentru a indica începutul și sfârșitul algoritmului, comenzile acestuia sunt incluse într-o pereche de cuvinte de serviciu START (START) și KON (END). Comenzile sunt scrise secvenţial.

ALG - numele algoritmului

serie de comenzi de algoritm

De exemplu, un algoritm care determină mișcarea unui robot poate fi următorul:

ALG - w_warehouse

Când se construiesc algoritmi noi, algoritmii compilați mai devreme pot fi utilizați. Algoritmii utilizați în întregime ca parte a altor algoritmi sunt numiți algoritmi auxiliari. Orice algoritm din cei compilați anterior poate fi auxiliar. De asemenea, este posibil ca un algoritm care conține în sine o legătură către algoritmi auxiliari să se dovedească a fi auxiliar într-o anumită situație.

Foarte des, la compilarea algoritmilor, devine necesară folosirea aceluiași algoritm ca unul auxiliar, care, în plus, poate fi foarte complex și greoi. Ar fi irațional, să începem munca, de fiecare dată să recompunem și să memorezi un astfel de algoritm pentru utilizarea lui ulterioară. Prin urmare, în practică, așa-numiții algoritmi auxiliari încorporați (sau standard) sunt utilizați pe scară largă, i.e. astfel de algoritmi care sunt permanent la dispoziția interpretului. Referirea la astfel de algoritmi se realizează în același mod ca și la algoritmii auxiliari „obișnuiți”. Executorul robotului are încorporat un algoritm auxiliar care se poate deplasa în depozit din orice punct al câmpului de lucru; pentru executant, limbajul de programare BASIC, acesta este, de exemplu, algoritmul SIN încorporat.

Algoritmul poate conține un apel la sine ca auxiliar și, în acest caz, este numit recursiv. Dacă comanda pentru adresarea algoritmului către sine este în algoritmul însuși, atunci o astfel de recursivitate este numită Drept. Există cazuri când un apel recursiv al unui algoritm dat provine de la un algoritm auxiliar, la care în acest algoritm exista un recurs. Această recursivitate se numește indirect. Un exemplu de recursivitate directă:

ALG - mișcare

mişcare

Se numesc algoritmi, în executarea cărora ordinea comenzilor este determinată în funcție de rezultatele verificării anumitor condiții. ramificare. Pentru a le descrie într-un limbaj algoritmic, se folosește o comandă compusă specială - comanda ramificare. Așa cum se aplică robotului executant, condiția poate fi verificarea dacă robotul se află la marginea câmpului de lucru (marginea / nu_marginea); verificarea prezenței unui obiect în celula curentă (da / nu) și a altora:

IF condiție IF condiție IF muchie

TO seria 1 TO seria TO dreapta

ELSE seria2 TOTUL ALLA înainte

Următoarea este o notație algoritmică a comenzii de selecție, care este o dezvoltare a comenzii de ramificare:

CÂND condiția 1: seria 1

CÂND condiția 2: seria 2

CÂND condiția N: seria N

ELSE seria N + 1

Algoritmii, în executarea cărora sunt executate în mod repetat comenzi individuale sau serii de comenzi, se numesc ciclici. Pentru a organiza algoritmii ciclici într-un limbaj algoritmic, se folosește o instrucțiune specială în buclă compusă. Corespunde diagramelor bloc de tip „iterație” și poate lua următoarea formă:

În timp ce starea NTS

serie pana la conditie

Algoritm - o instrucțiune precisă și ușor de înțeles pentru executant pentru a efectua o secvență de acțiuni care vizează rezolvarea sarcinii atribuite.

Numele „algoritm” provine din forma latină a numelui matematicianului din Asia Centrală al-Khwarizmi - Algorithmi. Algoritmul este unul dintre conceptele de bază ale informaticii și matematicii.

Un executor de algoritm este un sistem abstract sau real (tehnic, biologic sau biotehnic) capabil să efectueze acțiunile prescrise de algoritm.

Interpretul se caracterizează prin:

actiuni elementare;

sistem de comandă;

Mediul (sau decorul) este „habitatul” interpretului. De exemplu, pentru un robot interpret dintr-un manual școlar, miercuri este un câmp celular nesfârșit. Pereții și celulele umbrite fac, de asemenea, parte din mediu. Iar locația lor și poziția Robotului însuși determină starea specifică a mediului.

Fiecare executant poate executa comenzi doar dintr-o anumită listă strict specificată - sistemul de comandă al executorului. Pentru fiecare comandă trebuie specificate condiții de aplicabilitate (în ce stări ale mediului poate fi executată comanda) și trebuie descrise rezultatele execuției comenzii. De exemplu, comanda „sus” a Robotului poate fi executată dacă nu există niciun zid deasupra Robotului. Rezultatul este o deplasare a robotului cu o celulă în sus.

După apelarea comenzii, executantul execută acțiunea elementară corespunzătoare.

Eșecurile executorului apar atunci când o comandă este invocată cu o stare invalidă a mediului.

De obicei, executantul nu știe nimic despre scopul algoritmului. Efectuează toate comenzile pe care le primește fără a pune întrebările „de ce” sau „de ce”.

În informatică, computerul este executantul universal al algoritmilor.

Principalele proprietăți ale algoritmilor sunt următoarele:

Comprehensibilitatea pentru interpret - i.e. executantul algoritmului trebuie să știe să-l execute.

Discreteness (discontinuitate, separare) - i.e. algoritmul ar trebui să reprezinte procesul de rezolvare a problemei ca o execuție secvențială a unor etape (etape) simple (sau definiți anterior).

Definitie - i.e. fiecare regulă a algoritmului ar trebui să fie clară, lipsită de ambiguitate și să nu lase loc arbitrarului. Datorită acestei proprietăți, execuția algoritmului este mecanică și nu necesită instrucțiuni sau informații suplimentare despre problema care se rezolvă.

Performanță (sau membru). Această proprietate constă în faptul că algoritmul trebuie să conducă la rezolvarea problemei într-un număr finit de pași.

Caracter de masă. Aceasta înseamnă că algoritmul de rezolvare a problemei este dezvoltat în vedere generala, adică ar trebui să fie aplicabilă pentru o anumită clasă de probleme care diferă doar în datele inițiale. În acest caz, datele inițiale pot fi selectate dintr-o anumită zonă, care se numește zona de aplicabilitate a algoritmului.

În practică, următoarele forme de prezentare a algoritmilor sunt cele mai comune:

verbal (înregistrări în limbaj natural);

grafic (imagini din simboluri grafice);

pseudocoduri (descrieri semi-formalizate ale algoritmilor într-un limbaj algoritmic condiționat, incluzând atât elemente ale limbajului de programare, cât și fraze în limbaj natural, notație matematică general acceptată etc.);

software (texte în limbaje de programare).

Modul verbal de scriere a algoritmilor este o descriere a etapelor secvențiale ale procesării datelor. Algoritmul este setat în formă liberă în limbaj natural.

De exemplu. Scrieți algoritmul pentru găsirea celui mai mare divizor comun (MCD) a două numere naturale.

Algoritmul poate fi după cum urmează:

setați două numere;

dacă numerele sunt egale, atunci luați oricare dintre ele ca răspuns și opriți, altfel continuați algoritmul;

determinați cel mai mare dintre numere;

înlocuiți cel mai mare dintre numere cu diferența dintre cel mai mare și mai mic dintre numere;

repetați algoritmul de la pasul 2.

Algoritmul descris este aplicabil oricăror numere naturale și ar trebui să conducă la rezolvarea problemei. Vedeți singuri folosind acest algoritm pentru a determina cel mai mare divizor comun dintre 125 și 75.

Calea verbală nu are răspândită următoarele motive:

astfel de descrieri nu sunt strict formalizate;

suferă de verbozitatea înregistrărilor;

permit ambiguitatea în interpretarea prescripțiilor individuale.

Modul grafic de prezentare a algoritmilor este mai compact și clar în comparație cu cel verbal.

Într-o prezentare grafică, algoritmul este descris ca o secvență de blocuri funcționale interconectate, fiecare dintre acestea corespunzând execuției uneia sau mai multor acțiuni.

Astfel de reprezentare grafică numită diagramă de flux sau diagramă de flux.

În diagrama bloc, fiecărui tip de acțiune (introducerea datelor inițiale, calculul valorilor expresiei, condițiile de verificare, controlul repetării acțiunilor, finalizarea prelucrării etc.) corespunde unei figuri geometrice reprezentate sub forma unui simbol bloc. Simbolurile bloc sunt conectate prin linii de tranziție care determină ordinea în care sunt efectuate acțiunile.

Tabelul 1 enumeră simbolurile cele mai frecvent utilizate.

Blocul „proces” este folosit pentru a desemna o acțiune sau o secvență de acțiuni care modifică valoarea, forma de prezentare sau plasarea datelor. Pentru a îmbunătăți claritatea diagramei, mai multe blocuri de procesare separate pot fi combinate într-un singur bloc. Reprezentarea operațiunilor individuale este destul de gratuită.

Blocul „decizie” este folosit pentru a indica tranzițiile de control condiționat. Fiecare bloc „soluție” trebuie să indice întrebarea, condiția sau comparația pe care o definește.

Blocul „modificare” este folosit pentru a organiza structuri ciclice. (Cuvântul modificare înseamnă modificare, transformare). Parametrul buclei este scris în interiorul blocului, pentru care valoarea sa inițială, condiția de limită și pasul de modificare a valorii parametrului sunt specificate pentru fiecare repetare.

Blocul „proces predefinit” este folosit pentru a indica apelurile la algoritmi auxiliari care există autonom sub forma unor module independente, și pentru apelurile la rutine de bibliotecă.

Pseudocod este un sistem de notații și reguli conceput pentru a înregistra constant algoritmii.

Ocupă un loc intermediar între limbajele naturale și cele formale.

Pe de o parte, este aproape de limbajul natural obișnuit, astfel încât algoritmii pot fi scrieți și citiți în el ca un text obișnuit. Pe de altă parte, pseudocodul folosește unele construcții formale și notație matematică, ceea ce aduce notația algoritmului mai aproape de notația matematică general acceptată.

Pseudocodul nu acceptă regulile sintactice stricte de scriere a comenzilor inerente limbajelor formale, ceea ce facilitează scrierea unui algoritm în faza de proiectare și face posibilă utilizarea unui set mai larg de comenzi concepute pentru un executor abstract. Cu toate acestea, pseudocodul conține de obicei unele constructe care sunt inerente limbajelor formale, ceea ce facilitează trecerea de la scrierea în pseudocod la scrierea unui algoritm într-un limbaj formal. În special, în pseudocod, la fel ca în limbajele formale, există cuvinte funcționale, al căror sens este determinat o dată pentru totdeauna. Ele sunt evidențiate cu aldine în textul tipărit și subliniate în textul scris de mână. Nu există o definiție unică sau formală a pseudocodului, prin urmare, sunt posibile diverse pseudocoduri, care diferă în setul de cuvinte de serviciu și construcții de bază (de bază).

Un exemplu de pseudocod este un limbaj algoritmic școlar în notație rusă (școală AY), descris în manualul de A.G. Kushnirenko și colab. „Fundamentals of Informatics and tehnologie de calcul", 1991. În continuare vom numi acest limbaj simplu "limbaj algoritmic".

Cuvinte de serviciu de bază

Vedere generală a algoritmului:

nume algoritm alg (argumente și rezultate)

sunt date condiţiile de aplicabilitate a algoritmului

ai nevoie de obiectivul algoritmului

începe descrierea valorilor intermediare

| secvență de comenzi (corp algoritm)

Partea algoritmului de la cuvântul alg la cuvântul început se numește antet, iar partea cuprinsă între cuvintele început și sfârșit se numește corpul algoritmului.

În propoziția al, după numele algoritmului, sunt indicate caracteristicile (arg, res) și tipul valorii (întreg, lucru, sim, lit sau log) ale tuturor variabilelor de intrare (argumente) și de ieșire (rezultate). în paranteze. La descrierea tablourilor (tabelelor), se folosește tab-ul de cuvânt de serviciu, completat de perechi de limite pentru fiecare index al elementelor matricei.

Exemple de propoziții alg:

alg Volumul și aria unui cilindru (arg item R, H, res item V, S)

alg Roots KvUr (arg lucru a, b, c, lucru rez x1, x2, rez lit t)

alg Exclude element (arg întreg N, fila lucru arg rez A)

alg diagonal (arg cel N, arg cel tab A, res lit Otvet)

Sunt oferite sugestii și ar trebui să fie opționale. Se recomandă să scrieți în ele declarații care descriu starea mediului în care execută algoritmul, de exemplu:

Alg Înlocuire (arg lit Str1, Str2, arg res lit Text)

dat | lungimile subșirurilor Str1 și Str2 sunt aceleași

este necesar | peste tot în șirul Text, subșirul Str1 este înlocuit cu Str2

alg Numărul de maxime (arg int N, arg real fila A, res întreg K)

dat | N> 0

este necesar | K - numărul maxim de elemente din tabelul A

alg Rezistență (arg lucru R1, R2, arg int N, res lucru R)

dat | N> 5, R1> 0, R2> 0

este necesar | R - rezistența circuitului

Aici în propoziții este dat și necesar după „|” comentariile sunt înregistrate. Comentariile pot fi plasate la sfârșitul oricărui rând. Ele nu sunt procesate de traducător, dar fac algoritmul mult mai ușor de înțeles.

Algoritmii pot fi gândiți ca niște structuri, constând din elemente de bază separate (adică de bază).

Desigur, cu o astfel de abordare a algoritmilor, studiul principiilor de bază ale proiectării lor ar trebui să înceapă cu studiul acestor elemente de bază.

Pentru a le descrie, vom folosi limbajul schemelor algoritmice și limbajul algoritmic școlar.

Structura logică a oricărui algoritm poate fi reprezentată printr-o combinație de trei structuri de bază:

urma,

ramificare,

Structurile de bază se caracterizează prin prezența unei intrări și a unei ieșiri.

Limbajul de programare algoritmică- un limbaj formal folosit pentru scrierea, implementarea și învățarea algoritmilor. Spre deosebire de majoritatea limbajelor de programare, limbajul algoritmic nu este legat de arhitectura computerului, nu conține detalii legate de structura mașinii.

Pentru a studia elementele de bază ale algoritmizării, așa-numitele limba algoritmică rusă(limbaj algoritmic școlar), folosind cuvinte în rusă care sunt ușor de înțeles pentru elev.

Un limbaj algoritmic asemănător algoritmului cu sintaxă rusă a fost introdus în uz de către academicianul A. P. Ershov la mijlocul anilor 1980, ca bază pentru un curs de informatică „fără mașini”.

Principalele cuvinte cu funcții ale limbajului algoritmic

Descrierea algoritmului

  • alg(algoritm)
  • arg(argument)
  • a tăia(rezultat)
  • din timp(start) - începutul algoritmului
  • con(sfârșit) - sfârșitul algoritmului
  • dat- date inițiale sub orice formă
  • necesar- scopul algoritmului

Tipuri de date:

  • intact(întreg)
  • lucruri(real)
  • Sim(caracter)
  • litas(literal) - șir
  • Buturuga(logic)
  • fila(tabel) - pentru a desemna o matrice
  • lungimi(lungime) - numărul de elemente ale matricei

Desemnarea stării

  • dacă
  • in caz contrar
  • alegere
  • sens

Notarea ciclului

  • nts(începutul ciclului)
  • kts(sfârșitul ciclului)
  • pa

Funcții booleene și valori pentru construirea expresiilor

Intrare ieșire

  • intrare
  • concluzie

Vedere generală a algoritmului

1
2
3
4
5
6

alg numele algoritmului (argumente și rezultate)
| dat condiții de aplicabilitate a algoritmului
| necesar scopul algoritmului
din timp descrierea valorilor intermediare
| secvență de comenzi (corp algoritm)
con

O parte a algoritmului din cuvânt alg la cuvânt din timp numit titlu și partea dintre cuvinte din timpși con- corpul algoritmului.

Într-o propoziție alg după numele algoritmului din paranteză sunt caracteristicile ( arg, a tăia) și tipul valorii ( intact, lucruri, Sim, litas sau Buturuga) a tuturor variabilelor de intrare (argumente) și de ieșire (rezultate). Când descrieți tablouri (tabele), este folosit un cuvânt special fila, completat de perechi de limite pentru fiecare index al elementelor matricei.

Înregistrarea algoritmului Cuvinte cheie de obicei subliniate sau cu caractere aldine. Pentru a evidenția blocurile logice, se aplică indentarea, iar cuvintele pereche de la începutul și sfârșitul blocului sunt conectate cu o linie verticală.

Structuri algoritmice de bază

O descriere detaliată a principalelor structuri algoritmice este dată în acest articol. Mai jos sunt șabloanele pentru alcătuirea acestor structuri într-un limbaj algoritmic.
Furcă incompletă

| dacă condiție
| | atunci actiuni
| toate

Furca plină

1
2
3
4
5

| dacă condiție
| | atunci acțiunea 1
| | in caz contrar acțiunea 2
| toate

Ramificare

1
2
3
4
5
6
7
8

| alegere parametru
| | la sens valoarea 1
| | | acțiunea 1
| | la sens valoarea 2
| | | acțiunea 2
| | in caz contrar
| | | acțiuni implicite
| toate

Buclă cu precondiție

| nc la revedere condiție
| | actiuni
| kts

Bucla cu postcondiție

Cel mai adesea, instrucțiunile sunt scrise într-un limbaj algoritmic. Este necesar pentru prescrierea precisă a tuturor etapelor și executarea acestora. Există diferențe clare între limbajul algoritmic școlar și limbajele de programare. De regulă, nu numai un computer acționează ca un interpret în prima versiune, ci și un alt dispozitiv care este capabil să efectueze lucru. Orice program scris într-un limbaj algoritmic nu trebuie să fie realizat prin tehnologie. Implementarea tuturor instrucțiunilor în practică este o problemă pur separată. Mai jos va fi luată în considerare și o descriere a algoritmului în limbaj algoritmic. Vă va ajuta să înțelegeți structura acestui sistem.

Studiind la școală

Limbajul algoritmic este adesea predat în școli, cel mai bine cunoscut drept limbaj de predare. A devenit larg răspândit datorită faptului că folosește cuvinte care sunt cel mai ușor de înțeles pentru orice student. O limbă similară cu sintaxă în rusă a fost introdusă cu mult timp în urmă, și anume la mijlocul anilor 1980. A fost folosit pentru a da o fundație școlarilor și pentru a le preda un curs de informatică fără computer. Publicat limba dată a fost în 1985 într-unul din manuale. De asemenea, a fost retipărită de mai multe ori pentru cărți speciale care erau destinate predării în clasele a 9-a și a 10-a. Tirajul total al publicației a fost de 7 milioane de exemplare.

Secvența de înregistrare a algoritmului

În primul rând, trebuie să scrieți combinația de litere ALG. Urmează numele algoritmului. Apoi, după NACH, trebuie să descrii o serie de comenzi. Operatorul KOH înseamnă sfârșitul programului.

Descrierea algoritmului în limbaj algoritmic:

Compania ALG

START

întoarce 90 de grade la stânga

KOH

Când scrieți, cuvintele cheie trebuie subliniate sau îngroșate. Pentru a indica blocurile logice, ar trebui să utilizați indentarea, iar dacă există cuvinte pereche de început și sfârșit, trebuie să utilizați bara verticală, care denotă conexiunea.

Compilare de algoritmi

Notele vechi pot fi folosite pentru a compune instrucțiuni noi. Astfel de instrucțiuni se numesc instrucțiuni auxiliare. Un algoritm similar poate fi oricare dintre cei descriși anterior. De asemenea, este posibil ca în acest sistem să fie aplicat un algoritm suplimentar, care însuși a primit o referință la sisteme auxiliare.

Adesea, atunci când se creează o instrucțiune, este necesar să se folosească un singur algoritm ca unul suplimentar. Acesta este motivul pentru care înregistrările pot fi adesea complexe și greoaie. Dar este de remarcat faptul că abilitatea de a face o referință este mai ușoară decât a rescrie aceleași înregistrări de mai multe ori.

De aceea, în practică, este adesea folosit un algoritm auxiliar standard, care este constant subordonat utilizatorului. Instrucțiunea poate fi referită, atât la sine, cât și la oricine altcineva. Comenzile limbajului algoritmic sunt concepute pentru astfel de acțiuni. Aceste instrucțiuni se numesc recursive.

Comanda de auto-legare este în cadrul sistemului însuși. Această recursivitate este directă. Unul indirect este unul în care algoritmul este numit în orice altă instrucțiune auxiliară.

Algoritmii, care au o anumită ordine a instrucțiunilor, se pot schimba constant în funcție de rezultatele execuției părților speciale ale programului. Astfel de sisteme se numesc sisteme de ramificare. Pentru a le crea, trebuie să utilizați o comandă specială de ramură. Are o schemă de ortografie prescurtată și completă. Nu este neobișnuit să vezi algoritmi ciclici care execută anumite comenzi de mai multe ori.

Atelier electronic

Pentru a îmbunătăți studiul teoriei în limbajul gramatical, profesioniștii Facultății de Mecanică și Matematică a Universității de Stat din Moscova au creat în 1985 un compilator special. A fost numit „E-workshop”. Cu ajutorul acestuia a fost posibilă introducerea, modificarea și executarea programelor. În anul următor, a fost lansat un set specific de interpreți. Este despre „Robot”, „Desenător”, „Cu două picioare”, „Vehicul de teren”. Acest lucru a făcut posibilă implementarea algoritmilor simplu și ușor. Acest compilator a devenit foarte popular și a fost folosit pe unele computere. Suficient pentru mult timp acest limbaj de programare a fost rafinat și schimbat. În 1990, o versiune ulterioară a acesteia a apărut într-un manual.

Idol

Acum, limbajul algoritmic al școlii se confruntă cu renașterea sa, după ce un pachet special „Idol” a fost dezvoltat pentru Windows și Linux. Sistemul funcționează cu mai mulți interpreți. Printre ele clasice se numără „Robot”, „Draftsman”. Este inclus în același pachet fișier de configurare Linux „Școală”. Acest sistem a fost dezvoltat special din ordinul Academiei Ruse de Științe. Este distribuit gratuit și gratuit. În ultimii ani, limbajul descris a fost propus în mod activ pentru a fi folosit în examen ca unul dintre

Alocarea de limbă

Limbajul algoritmic este folosit pentru a rezolva o gamă destul de largă de probleme. Este potrivit pentru stăpânirea atât a matematicii, cât și a exercițiilor la alte materii. Trebuie remarcat faptul că este folosit și pentru a facilita elevilor să studieze subiecte similare.

Diferențele dintre limbajele mașină și algoritmice

Cel mai faimos reprezentant al limbajelor dependente de mașină este „Assembler”. În timpul programării pe acesta, o persoană trebuie să indice clar traducătorului, datorită operatorilor speciali, care celule de memorie trebuie să fie umplute sau transferate. Deoarece sintaxa lui „Assembler” este cât mai apropiată de forma computerizată de scriere, este destul de dificil să o studiezi. De aceea, limbajul algoritmic este predat la școală, precum și la începutul predării programării în primul an de învățământ superior.

Funcții standard

Limbajul algoritmic are special funcții standard, care au primit statutul de „încorporat”. Datorită lor, puteți scrie cu ușurință multe operații cu numere și expresii fără a efectua intrări de rutină. Programul de limbaj algoritmic este destul de simplu. Funcțiile standard vă pot permite să calculați rădăcina pătrată, logaritmii, modulul și așa mai departe. Cele mai populare metode încorporate sunt următoarele:

  • modul absolut abs (X);
  • rădăcină pătrată sqrt (X);
  • natural și ln (X), lg (X);
  • minim și maxim min (X, Y), max (X, Y);
  • funcții trigonometrice sin (X), cos (X), tg (X), ctg (X).

Datorită acestui lucru, orice programator sau doar o persoană care învață să lucreze cu un limbaj algoritmic poate scrie cu ușurință o problemă de matematică fără a recurge la invenția bicicletei. Astfel, trebuie remarcat faptul că acest limbaj este destul de ușor de utilizat. Este simplu de înțeles și, de asemenea, cât se poate de ușor de înțeles. Nu degeaba a fost inclusă în programa școlară. Scolarii sunt bucuroși să-l studieze.



Ți-a plăcut articolul? Împărtășește-l