Care program este liniar în s. Programe liniare - abstracte

15. Metode analitice. Metode de programare liniară.

15.1. Metode de analiză

De-a lungul evoluției sale, o persoană, săvârșind anumite fapte, a căutat să se comporte în așa fel încât rezultatul obținut în urma unui anumit act să se dovedească a fi cel mai bun într-un anumit sens. Trecând de la un punct la altul, a căutat să găsească calea cea mai scurtă posibilă. Când construia o locuință, el căuta geometria acesteia, care, cu cel mai mic consum de combustibil, asigura condiții acceptabile de viață confortabile. Fiind angajat în construcția de nave, a încercat să le dea o formă în care apa să aibă cea mai mică rezistență. Lista de astfel de exemple ar putea fi ușor continuată.

Cele mai bune soluții de probleme într-un anumit sens sunt numite optim. Nici o problemă mai mult sau mai puțin complexă nu este rezolvată în prezent fără utilizarea principiilor de optimizare. La stabilirea și rezolvarea problemelor de optimizare apar două întrebări: ce și cum să optimizați?

Răspunsul la prima întrebare se obține în urma unui studiu profund al problemei de rezolvat. Este relevat parametrul care determină gradul de perfecțiune al soluționării problemei apărute. Această setare este de obicei denumită funcție obiectivă sau criteriu de calitate. În continuare, se stabilește un set de valori care determină funcția obiectiv. În cele din urmă, sunt formulate toate restricțiile care trebuie luate în considerare la rezolvarea problemei. După aceea, se construiește un model matematic, care constă în stabilirea dependenței analitice a funcției obiectiv de toate argumentele și formularea analitică a restricțiilor care însoțesc sarcina. Următorul pas este să găsiți un răspuns la a doua întrebare.

Deci, să se stabilească ca urmare a formalizării problemei aplicate că funcția obiectiv , unde mulțimea X este o generalizare a constrângerilor, se numește mulțimea soluțiilor fezabile. Esența problemei de optimizare este căutarea pe mulțimea X - mulțimea soluții fezabile o astfel de decizie
, pentru care funcţia obiectiv f atinge valoarea minimă sau maximă.

O parte integrantă a metodelor de optimizare este programarea liniară.

15.2. Noțiuni de bază programare liniară

Prima mențiune (1938) a metodelor matematice în managementul eficient al producției îi aparține matematicianului sovietic L. V. Kantorovich. Un an mai târziu, în 1939, L. V. Kantorovich a publicat lucrarea „Metode matematice pentru organizarea și planificarea producției” și a aplicat practic rezultatele obținute. Termenul de „programare liniară” a fost introdus de matematicienii americani J. Danzig și T. Koopmans la sfârșitul anilor '40. J. Dantzig a dezvoltat aparatul matematic al metodei simplex pentru rezolvarea problemelor de programare liniară (1951). Metoda simplex găsește aplicație pentru rezolvarea unei game largi de probleme de programare liniară și este încă una dintre metodele principale.

Programarea liniară este o ramură a matematicii axată pe găsirea extremului (maxim sau minim) în probleme care sunt descrise prin ecuații liniare. Mai mult, ecuațiile liniare descriu atât funcția obiectiv în sine, cât și parametrii (variabilele) de intrare ai condițiilor de restricții asupra parametrilor de intrare. O condiție necesară pentru problemele de programare liniară este prezența obligatorie a restricțiilor asupra resurselor (materii prime, materiale, finanțe, cererea de produse fabricate etc.). Alte condiție importantă Soluția problemei este alegerea criteriului de oprire pentru algoritm, adică funcția obiectiv trebuie să fie optimă într-un anumit sens. Optimitatea funcției obiectiv trebuie cuantificată. Dacă funcția obiectiv este reprezentată de una sau două ecuații, atunci în practică astfel de probleme se rezolvă destul de ușor. Criteriul de terminare a algoritmului (sau criteriul de optimitate) trebuie să îndeplinească următoarele cerințe:

    să fie unic pentru o anumită sarcină;

    se măsoară în unități de măsură;

    depind liniar de parametrii de intrare.

Pe baza celor de mai sus, putem formula problema de programare liniară în formă generală:

găsiți extremul funcției obiectiv

sub restricții sub formă de egalități:

(2.2)

sub constrângeri sub formă de inegalități:

(2.3)

și condițiile de non-negativitate a parametrilor de intrare:

Pe scurt, o problemă de programare liniară poate fi scrisă după cum urmează:

(2.5)

dat fiind

Unde
- variabile de intrare;

Numerele pozitive, negative și egale cu zero.

Sub formă de matrice, această problemă poate fi scrisă după cum urmează:

Problemele de programare liniară pot fi rezolvate analitic și grafic.

15.3. Problemă de programare liniară canonică

, i=1,…,m,

, j=1,…,n.

Principalele metode de calcul pentru rezolvarea problemelor de programare liniară au fost dezvoltate special pentru problema canonică.

15.4. Problemă generală a programării liniare

Este necesar să se maximizeze (minimizează) o funcție liniară a n variabile.

sub restricții

, i=1,…, k,

, i=1+ k,…, m,

, …,

Aici km, rn. Problema standard se obţine ca caz special al celei generale pt k= m, r= n; canonic - la k=0, r= n.

Exemplu.

Fabrica de cofetărie produce mai multe soiuri de dulciuri. Să le numim „A”, „B” și „C”. Se știe că vânzarea a zece kilograme de dulciuri „A” oferă un profit de 90 de ruble, „B” - 100 de ruble și „C” - 160 de ruble. Bomboanele pot fi produse în orice cantități (vânzările sunt asigurate), dar materiile prime sunt limitate. Este necesar să se determine ce dulciuri și câte zeci de kilograme trebuie produse pentru ca profitul total din vânzări să fie maxim. Ratele de consum de materii prime pentru producerea a 10 kg de dulciuri de fiecare tip sunt prezentate în tabelul 1.

Tabelul 1. Ratele consumului de materii prime

pentru producție

Formularea economică și matematică a problemei are forma

Găsiți astfel de valori variabile X=(x1, x2, x3), la

funcție obiectivă

in conditii-restrictii:

1.2 Pe scurt despre programarea liniară.

Ce este programarea liniară? Aceasta este una dintre primele și cele mai amănunțite secțiuni ale programării matematice. Programarea liniară a fost secțiunea din care a început să se dezvolte însăși disciplina „programarii matematice”. Termenul „programare” din numele disciplinei nu are nimic în comun cu termenul „programare (adică scrierea de programe) pentru calculatoare”, deoarece disciplina „programare liniară” a apărut chiar înainte de vremea când calculatoarele erau utilizate pe scară largă în rezolvarea problemelor matematice, probleme de inginerie, sarcini economice și alte sarcini. Termenul „programare liniară” a apărut ca urmare a unei traduceri inexacte a limbajului englezesc „programare liniară”. Unul dintre semnificațiile cuvântului „programare” este a face planuri, a planifica. Prin urmare, traducerea corectă a „programare liniară” nu ar fi „programare liniară”, ci „planificare liniară”, care reflectă mai exact conținutul disciplinei. Cu toate acestea, termenul de programare liniară, programare neliniară etc. au devenit obişnuite în literatura noastră.

Așadar, programarea liniară a apărut după al Doilea Război Mondial și a început să se dezvolte rapid, atrăgând atenția matematicienilor, economiștilor și inginerilor datorită posibilității unei largi aplicație practică, precum și „zveltețea” matematică.
Putem spune că programarea liniară este aplicabilă construcției modele matematice acele procese care se pot baza pe ipoteza unei reprezentări liniare a lumii reale: probleme economice, probleme de management și planificare, amplasarea optimă a echipamentelor etc.

Problemele de programare liniară se numesc probleme în care atât funcția obiectiv, cât și constrângerile sub formă de egalități și inegalități sunt liniare. Pe scurt, problema de programare liniară poate fi formulată după cum urmează: găsiți un vector de valori variabile care livrează extremul funcției obiective liniare sub m constrângeri sub formă de egalități sau inegalități liniare.

Programarea liniară este cea mai utilizată tehnică de optimizare. Problemele de programare liniară includ:

utilizarea rațională a materiilor prime și materialelor; reducerea sarcinilor de optimizare;

· optimizarea programului de producţie al întreprinderilor;

Plasarea optimă și concentrarea producției;

intocmirea unui plan optim de transport, operare transport;

gestionarea stocurilor de productie;

si multe altele apartinand domeniului planificarii optime.

Astfel, conform experților americani, aproximativ 75% din numărul total de metode de optimizare utilizate sunt programare liniară. Aproximativ un sfert din timpul petrecut la calculator anul trecut pentru tine cercetare științifică, a fost dedicat rezolvării problemelor de programare liniară și a numeroaselor modificări ale acestora.

Primele enunțuri ale problemelor de programare liniară au fost formulate de celebrul matematician sovietic L.V. Kantorovich, căruia i-a fost distins Premiul Nobel pentru economie pentru aceste lucrări.

Programarea liniară este unul dintre cele mai utilizate instrumente astăzi. teorie matematică luarea deciziilor optime.

Deci, programarea liniară este știința metodelor de cercetare și a găsirii celor mai mari și mai mici valori ale unei funcții liniare, asupra necunoscutelor cărora se impun restricții liniare. Astfel, problemele de programare liniară sunt legate de probleme pentru un extremum condiționat al unei funcții.


1.3 Sarcina principală a programării liniare

Problema principală a programării liniare (OLPP) este stabilită după cum urmează: Există un număr de variabile. Este necesar să se găsească valorile lor nenegative care ar satisface sistemul de ecuații liniare:

{1.1}

și, în plus, ar minimiza funcția obiectiv liniară (TF)

Evident, cazul în care filtrul digital trebuie rotit nu la minim, ci la maximum, poate fi redus cu ușurință la precedentul, dacă schimbăm semnul funcției și luăm în considerare în schimb funcția

O soluție admisibilă a OLP este orice set de variabile care satisface ecuațiile (1.1).

Soluția optimă este cea a soluțiilor fezabile, în care filtrul digital devine minim.

În practică, constrângerile dintr-o problemă de programare liniară sunt adesea date nu de ecuații, ci de inegalități. În acest caz, putem trece la problema principală a programării liniare.

Luați în considerare o problemă de programare liniară cu constrângeri de inegalitate care au forma

{1.2}

și sunt liniar independente. Aceasta din urmă înseamnă că niciuna dintre ele nu poate fi reprezentată ca o combinație liniară a celorlalte. Este necesar să se găsească , care să satisfacă inegalitățile și să le minimizeze

Să introducem ecuațiile:

{1.3}

Unde sunt variabile suplimentare, care sunt, de asemenea, nenegative.

Astfel, avem o problemă generală de programare liniară - pentru a găsi non-negativ , astfel încât să satisfacă sistemul de ecuații (1.3) și să se transforme la un minim .

Coeficienții din formula (1.3) anterior sunt egali cu zero.


1.3. Construcția constrângerilor și gradientul funcției obiectiv: 1.4. Zona soluțiilor fezabile este segmentul AB. 1.5. Punctul A este optim. Coordonatele punctului A: ; ; . 2. Rezolvarea problemei programării liniare prin metoda simplex. sarcină directă. Problema de programare liniară pentru orice vârf într-o formă compactă poate fi reprezentată astfel: Pentru a obține, folosim algoritmul dat în ...



Razele care emană dintr-un punct se numesc con convex poliedric cu un vârf în acest punct. 1.4 Fundamente matematice rezolvarea grafică a unei probleme de programare liniară 1.4.1 Aparatură matematică Pentru a înțelege totul mai departe, este util să cunoaștem și să ne imaginăm interpretarea geometrică a problemelor de programare liniară, care poate fi dată pentru cazurile n = 2 și n = ...

Sarcini f1(x)=max=g1(x) – pentru prima întreprindere; - pentru alte întreprinderi. Rezolvarea problemei repartizării optime a fondurilor între întreprinderi prin metoda programare dinamică Tabelul 12 Fonduri cu, mii gr. Instalație 1 2 3 4 G1(x) G2(x) G3(x) G4(x) 20 11 13 12 10 40 21 20 22 27 60 40 42 34 33 80 54 45 55 57 100 62 62 ...

Dacă setăm variabilele de bază curente dintr-un astfel de tabel simplex la Ai,0 și variabilele libere la zero, atunci vom obține soluție optimă. Practica aplicării metodei simplex a arătat că numărul de iterații necesare pentru a rezolva o problemă de programare liniară variază de obicei între 2m și 3m, deși pentru unele probleme special construite, calculele conform regulilor metodei simplex se transformă într-unul direct. ..

Mai sus, am luat în considerare diverse probleme practice care sunt reduse la o schemă de programare liniară. În unele dintre aceste probleme, constrângerile liniare au avut forma inegalității, în altele - egalități, în a treia - ambele.

Aici luăm în considerare o problemă de programare liniară cu constrângeri de egalitate - așa-numita problemă de programare liniară de bază (BLP).

În cele ce urmează, vom arăta cum este posibil să trecem de la o problemă cu constrângeri de inegalitate la un LLP și invers.

Problema principală a programării liniare este pusă după cum urmează.

Există o serie de variabile

Este necesar să se găsească astfel de valori nenegative ale acestor variabile care să satisfacă sistemul de ecuații liniare:

și, în plus, ar minimiza funcția liniară

Evident, cazul în care o funcție liniară trebuie transformată nu la minim, ci la maximum, poate fi ușor redus la cea anterioară dacă schimbăm semnul funcției și luăm în considerare în schimb funcția

Să fim de acord să numim orice set de variabile

satisfacerea ecuațiilor (2.1).

Soluția optimă este cea a soluțiilor admisibile pentru care funcția liniară (2.2) devine minimă.

O problemă de programare liniară de bază nu trebuie să aibă o soluție.

Se poate dovedi că ecuațiile (2.1) se contrazic între ele; se poate dovedi că au o soluție, dar nu în intervalul valorilor nenegative. Atunci OLP nu are soluții admisibile. În cele din urmă, se poate dovedi că există soluții admisibile ale LLP, dar nu există una optimă între ele: funcția L din regiunea soluțiilor admisibile este nemărginită de jos.

Ne vom familiariza cu exemple de astfel de caracteristici ale OZLP în viitor.

Luați în considerare, în primul rând, problema existenței soluțiilor admisibile ale MLP.

La rezolvarea acestei probleme, putem exclude din considerare funcția liniară L, care trebuie redusă la minimum - prezența soluțiilor admisibile este determinată numai de ecuațiile (2.1).

Deci, să existe un sistem de ecuații (2.1). Există valori nenegative care satisfac acest sistem? Această întrebare este luată în considerare într-o secțiune specială de matematică - algebră liniară.

Să prezentăm pe scurt câteva prevederi ale algebrei liniare fără să ne oprim asupra demonstrațiilor teoremelor corespunzătoare

Matricea sistemului de ecuații liniare

numit tabel alcătuit din coeficienţi pt

Matricea extinsă a unui sistem de ecuații liniare este aceeași matrice, completată de o coloană de termeni liberi:

Rangul unei matrice este cel mai mare ordin al unui determinant diferit de zero care poate fi obținut prin ștergerea unor rânduri și a unor coloane din matrice.

În algebra liniară, se demonstrează că pentru ca sistemul de ecuații liniare (2.1) să fie consistent este necesar și suficient ca rangul matricei sistemului să fie egal cu rangurile matricei sale extinse.

Exemplul 1. Având în vedere un sistem de trei ecuații cu patru necunoscute:

Stabiliți dacă acest sistem este colaborativ?

Soluţie. Matricea sistemului:

Matrice extinsă:

Să determinăm rangul primei matrice. Nu poate fi mai mare de 3 (deoarece numărul de rânduri este 3). Să compunem un anumit determinant ștergând o coloană din matrice, de exemplu, ultima. obține

Calculând acest determinant după regula binecunoscută, obținem:

Acest determinant nu este egal cu zero, ceea ce înseamnă că rangul matricei sistemului este 3. Evident, rangul matricei extinse este tot 3, deoarece același determinant poate fi compus din elementele matricei extinse . Din egalitatea rândurilor matricelor rezultă că sistemul de ecuații este compatibil.

Exemplul 2. Investigați compatibilitatea unui sistem de două ecuații cu trei necunoscute:

Soluţie. Matrice de sistem extinsă:

(partea sa din stânga este matricea sistemului).

Să găsim rangul matricei sistemului, formând toți determinanții de ordinul doi posibili:

Deci, toți determinanții posibili de ordinul doi, alcătuiți din elemente ale matricei sistemului, sunt egali cu zero; de unde rangul acestei matrice a sistemului

Aflați rangul matricei extinse. Determinant

Prin urmare, rangul matricei extinse nu este egal cu rangul matricei sistemului: Grfg, prin urmare, sistemul de ecuații este inconsecvent.

Exemplul 3. Investigați compatibilitatea unui sistem de trei ecuații cu patru necunoscute:

Soluție Matrice de sistem extinsă (împreună cu matricea de sistem):

Aflați rangul matricei sistemului. Luați un determinant de ordinul trei compus din elementele sale, de exemplu:

Se știe că, dacă orice rând al determinantului este o combinație liniară a celorlalte două rânduri, atunci determinantul este egal cu zero. În cazul nostru, al treilea rând este o combinație liniară a primelor două: pentru a-l obține, este suficient să adăugați primul rând cu de două ori pe al doilea Prin urmare .

Este ușor de observat că orice determinant de ordinul trei compus din elemente ale matricei sistemului are aceeași proprietate. Prin urmare, rangul matricei sistemului este.

Deoarece există un determinant de ordinul doi diferit de zero, de exemplu,

atunci rangul matricei sistemului este egal cu

Folosind același raționament, ne asigurăm că rangul matricei extinse este egal cu doi: Prin urmare, sistemul de ecuații este consistent

Rețineți că cele trei ecuații din acest exemplu nu sunt independente: a treia poate fi obținută din primele două înmulțind a doua cu două și adunând la prima. Prin urmare, a treia ecuație este o consecință simplă a primelor două. Există doar două ecuații independente în sistem: acest lucru este reflectat de faptul că rangul matricei sistemului

Deci, dacă sistemul de ecuații de constrângere OZLP este consistent, atunci matricea sistemului și matricea sa extinsă au același rang.

Acest rang general se numește rangul sistemului; nu este altceva decât numărul de ecuații liniar independente dintre constrângerile impuse.

Evident, rangul sistemului nu poate fi mai mult număr ecuatii:

De asemenea, este evident că rangul sistemului nu poate fi mai mare decât numărul total de variabile:

Într-adevăr, rangul unei matrice de sistem este definit ca ordinul cel mai înalt al determinantului compus din elemente de matrice; întrucât numărul rândurilor sale este , atunci ; întrucât numărul coloanelor sale este , atunci .

Structura unei probleme de programare liniară depinde în esență de rangul sistemului de constrângeri (2.1).

Luați în considerare, în primul rând, cazul când , adică când numărul de ecuații liniar independente din sistemul (2.1) este egal cu numărul de variabile n. Să renunțăm la ecuațiile „de prisos”, care sunt combinații liniare ale altora. Sistemul de ecuații de constrângere OZLP ia forma:

De atunci determinantul, compus din coeficienți,

nu este egal cu zero. Din algebră se știe că în acest caz sistemul (2.4) are o soluție unică. Pentru a găsi valoarea, este suficient să înlocuiți coloana din determinant cu coloana de membri liberi și să împărțiți la .

Deci, pentru , sistemul de ecuații de constrângere OZLP are o soluție unică:

Dacă cel puțin una dintre valorile acestei soluții este negativă, aceasta înseamnă că soluția rezultată este inacceptabilă și, prin urmare, OLPP nu are nicio soluție.

Dacă toate valorile sunt nenegative, atunci soluția găsită este admisibilă. De asemenea, este evident optim (pentru că nu există altele).

Evident, acest caz banal nu ne poate interesa.

Prin urmare, în cele ce urmează vom lua în considerare doar cazul când, adică atunci când numărul de ecuații independente care trebuie satisfăcut de numerele variabile ale variabilelor înseși. Atunci, dacă sistemul este consistent, are un număr infinit de soluții. În acest caz, putem atribui variabilelor valori arbitrare (așa-numitele variabile libere), iar variabilele rămase vor fi exprimate prin ele (vom numi aceste variabile de bază).

Un program se numește program liniar, ale cărui toate instrucțiunile sunt executate secvenţial, în ordinea în care sunt scrise. Acesta este cel mai simplu tip de program.

Variabile

O variabilă este o valoare care, în timp ce programul rulează, poate -

schimba valoarea acestuia. Toate variabilele utilizate în program trebuie să fie declarate în secțiunea de declarare a variabilelor începând cu cuvântul cheie var.

Fiecare variabilă primește numele și tipul ei, de exemplu:

var număr: întreg; x, y: real; opțiune: char;

Numele unei variabile specifică locația din memorie în care se află valoarea variabilei. Numele este dat de programator. Ar trebui să reflecte semnificația valorii stocate și să fie ușor de recunoscut.

Tipul de variabile este selectat pe baza intervalului și a acurateței necesare reprezentării datelor.

Când declarați, puteți atribui o valoare inițială unei variabile, de ex. inițializați a ei. Inițializarea este înțeleasă ca setarea unei valori care este efectuată înainte de începerea programului. Variabilele inițiate sunt declarate după cuvânt cheie const:

număr const: întreg = 100; x: real = 0,02; opțiune: char = "u";

În mod implicit, toate variabilele declarate în programul principal sunt setate la zero.

Expresii

O expresie este o regulă pentru evaluarea unei valori. În expresia implicată -

operanzi, unite prin semne de operare. Operanzii unei expresii pot fi constante, variabile și apeluri de funcții. Operaţiile sunt efectuate într-o anumită ordine conform priorități exact ca la matematică. Pentru a schimba ordinea operațiunilor, utilizați paranteze rotunde, nivelul cuibăririi lor este practic nelimitat.

Rezultatul unei expresii este întotdeauna o valoare de un anumit tip, care este determinată de tipurile operanzilor. Valorile implicate în expresie trebuie să fie tipuri compatibile.

  • 1. Operație unară nu, minus unar -, luând adresa @.
  • 2. Operații precum înmulțirea: * / div mod și shl shr.
  • 3. Operatii de tip adunare: + - sau xor.
  • 4. Operatii relationale: = o = in.

Funcțiile utilizate într-o expresie sunt evaluate mai întâi.

Exemple de expresii:

t + sin (x) / 2 * x - rezultatul este de tip real; A

(x > 0) și (y

Structura programului

Un program PASCAL constă dintr-un antet opțional, secțiuni de descriere și o secțiune de instrucțiuni:

numele programului; (header) declarație secțiuni start statement sections end. (* programul se termină cu un punct *)

Programul poate conține comentarii, cuprinse între paranteze () sau paranteze de forma (* *).

Structura generală programul este prezentat în fig. 2.1.

Secțiunea de instrucțiuni conține instrucțiunile executabile ale programului. Cuvintele cheie început și sfârșit nu sunt declarații, ci servesc pentru a le combina într-un așa-zis operator compus, sau bloc. Blocul poate fi scris oriunde în program unde este permisă o instrucțiune normală.

Secțiunile de descriere au mai multe forme: descrieri ale modulelor, constantelor, tipurilor, variabilelor, etichetelor, procedurilor și funcțiilor.

Un modul este o bibliotecă de resurse (subrutine, constante etc.) conectate la program.

Orez. 2.1.

Secțiunea de descriere a modulului, dacă este prezentă, trebuie să fie pe primul loc. Descrierea începe cu cuvântul cheie uses, urmat de o listă separată prin virgulă a tuturor modulelor conectate la program, atât standard, cât și personalizate, de exemplu: uses crt, graph, my_module;

Numărul și ordinea secțiunilor rămase sunt arbitrare, singura restricție este că orice valoare trebuie descrisă înainte de a fi utilizată. Terminația secțiunii de descriere este începutul secțiunii următoare. Un program poate avea mai multe secțiuni de descriere de același tip, dar pentru a simplifica structura programului, se recomandă gruparea tuturor descrierilor de același tip într-o singură secțiune.

În secțiunea de declarare a variabilelor, trebuie să definiți toate variabilele care vor fi utilizate în programul principal.

Secțiunea declarației constantelor este utilizată astfel încât în ​​loc de valorile constantelor, numele acestora să poată fi folosite în program. Există o altă utilizare pentru secțiunea declarație constantă: descrie variabilele cărora trebuie să li se atribuie o valoare înainte de a începe programul:

greutate constantă: reală = 61,5; n = 10;

Secțiunea de descriere a etichetei începe cu cuvântul cheie label, urmat de o listă separată prin virgulă cu toate etichetele găsite în program. O etichetă este fie un nume, fie un număr pozitiv care nu depășește 9999. O etichetă este plasată înaintea oricărei instrucțiuni executabile și separată de aceasta prin două puncte. Exemplu de descriere etichetă: etichetă 1, 2, eroare;

Etichetele sunt folosite pentru a organiza trecerea la un anumit operator folosind operator de sărituri necondiţionate mergi la.

Proceduri I/O Cu orice program interacționează la introducerea datelor inițiale și la ieșirea rezultatelor dispozitive externe. Un set de dispozitive standard de intrare și ieșire, de ex. tastatură și ecran de afișare, apelate consolă.

Intrare de la tastatură. Următoarele proceduri sunt definite pentru introducerea de la tastatură: read și readln: read(list); readln [(lista)];

Parantezele conțin o listă de nume de variabile separate prin virgule. Parantezele pătrate indică faptul că lista poate lipsi. De exemplu:

citiți (a, b, c); readln(y); readln;

ATENŢIE

Puteți introduce valori întregi, reale, caractere și șir. Valorile introduse trebuie separate prin orice număr de caractere de spațiu alb (spațiu, tab, linie nouă).

Introducerea valorii fiecărei variabile se face astfel:

  • ? valoarea variabilei este evidentiata ca un grup de caractere situat intre delimitatori;
  • ? aceste caractere sunt convertite în forma de reprezentare internă corespunzătoare tipului de variabilă;
  • ? valoarea este scrisă în locația de memorie specificată de numele variabilei.

În plus, procedura readln, după introducerea tuturor valorilor, sare la următoarea linie a datelor sursă. Procedura readln fără parametri așteaptă doar apăsarea tastei Enter.

Caracteristica de introducere a caracterelor și a șirurilor este că caracterele cu spații albe din ele nu sunt diferite de toate celelalte, deci nu pot fi separatoare.

Ieșire pe afișaj. Când ieșirea este efectuată transformare inversă: de la reprezentarea internă până la caracterele afișate pe ecran. Pentru a face acest lucru, limbajul definește procedurile standard de scriere și scriere: scrie (listă); writeln [(lista)];

Procedura de scriere tipărește pe ecran valorile specificate în listă, iar procedura de scriere mută, de asemenea, cursorul pe linia următoare. Procedura de scriere fără parametri avansează pur și simplu cursorul la următoarea linie.

Puteți scoate valori de tip logic, întreg, real, caracter și șir. Lista poate conține nu numai nume de variabile, ci și expresii, precum și cazul lor special - constante. În plus, pentru fiecare valoare de ieșire, o puteți seta format, de exemplu: writeln(a:4, b:6:2);

După numele variabilei A două puncte indică numărul de poziții alocate pentru acesta, în interiorul cărora valoarea este aliniată la dreapta. Pentru b sunt specificate două specificații de format, ceea ce înseamnă că pentru această variabilă sunt alocate un total de șase poziții, iar două dintre ele sunt pentru partea fracțională.

Liniar se numește program care este o înregistrare a unui algoritm liniar. Într-un astfel de program, toate instrucțiunile sunt executate strict secvenţial, adică. dupa executarea fiecaruia dintre ele (cu exceptia END), calculatorul trece automat la executarea operatorului care il urmareste.

Scrierea de programe simple

Protozoare vom numi programe liniare care nu contin tablouri. Compilarea unor astfel de programe necesită cunoașterea operatorilor considerați anterior, înțelegerea corespondenței acestora cu blocurile schemei de algoritm și se realizează conform unei reguli atât de simple:

luați în considerare blocurile schemei de algoritm (crede, că este dat) în ordine, începând de la primul, iar pentru fiecare dintre ele notăm operatorul corespunzător DE BAZĂ, adică

pentru bloc start- operator REM cu nume program;

pentru bloc Intrare - operator de intrare;

pentru bloc proces - operator de atribuire;

pentru bloc Concluzie - operator de ieșire;

pentru bloc Stop- Declarație END.

Asta e toata regula!

Dăm acum exemple de programe specifice de tipul luat în considerare.

Sarcina 12.2

Calculați perimetrul unui triunghi dreptunghic având în vedere lungimile catetelor sale.

Sarcina 12.3

Schimbați valorile lui A și B.

Soluţie sarcinile 12.2 și 12.3. Aceste sarcini au fost discutate în Capitolul 10, deci în Fig. 12.2 prezintă fără explicaţie schema algoritmului şi programului problemei 10.2, iar în fig. 12.3 - același lucru pentru problema 10.3.

Pe fig. Săgețile 12.2 și 12.3 arată corespondența instrucțiunilor programului cu blocurile schemei algoritmului.

Vă prezentăm programe pentru rezolvarea a încă două probleme. Programul pentru problema 12.1 ilustrează utilizarea unor cantități de diferite tipuri. Programul sarcinii 12.2 demonstrează organizarea ieșirii datelor către un dispozitiv de imprimare.

Orez. 12.2

Sarcina 12.1

Calculați valori Lași Z după formulele:

Unde ÎN Și IN - valori întregi.

Soluţie

Date inițiale: E%, V%, C, X, A(a).

Rezultat: Y,Z%.

Ordinea operațiilor aici este evidentă, așa că haideți să scriem programul imediat:

  • 10 SARCINA REM 1
  • 20 PRINT „ENTER D%, B%, C, X, A”
  • 30 INTRARE D%, V%, C, X, A 40 R$="HBAH0B, 10A CL"
  • 50 Z%=2*D%-3*B%
  • 60 Y=(3*ABS(X)+C:(1/3)+SIN(A)/COS(A))*Z%
  • 70 PRINT "Z%=";Z%; „Y="; Y 80 PRINT R$
  • 90 SFÂRȘIT

Sarcina 12.2

Calculați valoarea funcției Y \u003d L 2 + ÎN 1și tipăriți (imprimați) valorile datelor și rezultatelor inițiale.

Soluţie

Program de calcul al funcției Y:

  • 20 REM PRINT IEȘIRE 30 PRINT "ENTER A, B"
  • 40 INTRARE A, B 50 U=A L 2+B L 2
  • 60 LPRINT "DATE:"," A=";A;" B=";B 70 LPRINT
  • 80 LPRINT "RESULT:","Y=";Y 90 END

Instrucțiunea din rândul a 30-a a acestui program scoate text pe ecranul de afișare și instrucțiunile 60-80 la imprimantă. Declarația de la rândul 70 tipărește o linie goală pe o bucată de hârtie.

Programe liniare cu tablouri

Matrice în BASIC. Amintiți-vă definiția unui tablou: matrice numită o colecție ordonată de mărimi omogene, fiecare desemnată cu același nume cu indici întregi diferiți, schimbându-se în ordine.

BASIC folosește matrice uni- și bidimensionale (în QBASIC sunt permise chiar și cele opt-dimensionale). Ele, ca și variabilele simple, pot fi tipuri variate: întreg, real, text (șir), etc.

Atenţie! În BASIC, nu există operații pentru procesarea tablourilor în general, adică. operațiuni precum „enter array P(1:99)”, pe care obișnuiam să le folosim în capitolele 8 și 9. Pentru a efectua o operație pe o matrice, trebuie să enumerați operațiunile efectuate pe fiecare dintre elementele sale.

Luați în considerare forma generală a unui element de matrice în BASIC:

Unde - numele unui tablou trebuie să urmeze aceleași reguli ca și numele unei variabile simple;

La - index(număr) element al unui tablou unidimensional, la

eu,j - indici element al unui tablou bidimensional (numerele rândului și coloanei în care se află), i > 0, j > 0. În QBASIC, puteți seta valorile inițiale ale lui k, i, j la 1. Indici k , i, j pot fi reprezentate prin orice expresie aritmetică . Când se evaluează o expresie care reprezintă un index în QBASIC, rezultatul este rotunjit la cel mai apropiat număr întreg.

Exemple de scriere a elementelor de matrice:

P$(0), C2(101) , X(46,5*K+1) , T%(N/2, M) .

În schema algoritmului, aceleași elemente ar avea astfel de denumiri: P 0 ,

C2yu1, X46.5?+i, T w /2>m-

Atenţie! Dacă o matrice este utilizată în program, atunci aceasta trebuie declarată anterior, adică Informațiile despre tipul și dimensiunea acestei matrice trebuie raportate gazdei folosind instrucțiunea DIM.

Exemplu: instrucțiunea DIM P$(6), i_iB% (4,8) raportează prezența în program

matrice text P(0:6) și întreg B(0:4, 0:8).

Pe baza informațiilor conținute în instrucțiunea DIM, computerul alocă (rezervă) pentru fiecare matrice o zonă de memorie de dimensiunea necesară.

Vedere generală a operatorului DIM:

În cazul unui tablou unidimensional:

DIM (d),

În cazul unui tablou bidimensional:

DIM (p, w)

unde DIM este numele operatorului (din cuvântul dimensiune - "dimensiune"); - numele matricei; d, p, sh- dimensiunile matricei, de ex. d- numărul ultimului element al unui tablou unidimensional; n(m)- numărul ultimului rând (ultima coloană) al tabloului bidimensional.

Dimensiunea unei matrice este exprimată în majoritatea versiunilor de BASIC (inclusiv QBASIC) ca un întreg sau o variabilă întreagă.

Caracteristici de intrare a operatorului DIM:

  • 1) o instrucțiune DIM poate declara orice număr de matrice (vezi exemplu);
  • 2) se recomandă plasarea instrucțiunii DIM la începutul programului;
  • 3) nu ar trebui să utilizați o variabilă simplă și o matrice cu același nume în program.

Exemplu: operatorul DIM D% (2), A (2,3), K$ (3) spune:

  • matrice D% - întreg unidimensional care conține elemente D%(0), D%(1), D%(2);
  • matrice K - text unidimensional, include elemente K$(0), k$(1), K$(2), K$(3);
  • tabloul A - real bidimensional, include următoarele elemente:

Compilare de programe liniare cu tablouri.În primul rând, observăm caracteristicile de lucru cu matrice în program.

1. Elementele matrice primesc valori folosind operatori de intrare sau de atribuire ca variabile simple. La introducerea (ieșire) matrice, instrucțiunile de intrare (ieșire) listează numele tuturor elementelor de matrice de intrare (ieșire).

Exemplu: programul de intrare și ieșire pentru matricea P (1:3) ar putea arăta astfel:

  • 20 DIM P(3)
  • 30 INTRARE P(1), P(2), P(3)
  • 40 PRINT P(1), P(2), P(3)
  • 50 SFÂRȘIT
  • 2. Toate matricele pot fi împărțite în două tipuri:
    • matrice de dimensiune constantă(de exemplu, P(1:7), B(1:4, 1:8)];
    • matrice de dimensiuni variabile[de exemplu, A(1:&); C(1 :T, 1: d).În capitolele 8 și 9 am folosit ambele tipuri fără a face distincție între ele.

În unele versiuni de BASIC, instrucțiunea DIM nu vă permite să declarați matrice de dimensiune variabilă, așa că folosirea lor într-un program necesită câteva trucuri. Nu există astfel de restricții în versiunile BASIC luate în considerare în manual, este permisă utilizarea matricelor de orice fel.

Trebuie doar să vă amintiți: variabile - dimensiunile matricelor trebuie definite înainte de a apela instrucțiunea DIM.

Exemplu:

10 INTRARE M 20 DIM X(M)

Programele liniare cu matrice sunt compilate în conformitate cu regula considerată anterior pentru compilarea celor mai simple programe, care pot fi completate cu un punct - „după operatorul REM, operatorul DIM ar trebui să fie scris în program”. În plus, este necesar să se țină cont de informațiile tocmai menționate despre lucrul cu matrice.

Să arătăm acum construcția programelor luate în considerare pe exemple concrete. Mai întâi, să revenim la problema 8.5. Schema algoritmului său este prezentată în fig. 10.11. Înlocuind fiecare bloc al acestui circuit cu instrucțiunea corespunzătoare conform regulii date în 12.2 și adăugând instrucțiunea DIM, obținem programul de mai jos. După ce a citit acest program, recomandăm cititorului să creeze un program pentru rezolvarea Problemei 10.7 și să îl compare cu cel de mai jos:

  • 10 REM SUM
  • 20 DIM B(3, 3), S(2)
  • 30 PRINT „INTRODUCEȚI MATRICE ÎN(3, 3)”
  • 4 0 INTRARE B(1, 1), B(1, 2), B(1, 3)
  • 50 INTRARE V(2, 1), V(2, 2), V(2, 3)
  • 60 INTRARE B(3, 1), B(3, 2), B(3, 3)
  • 70 S(l) \u003d B (1, 1) + B (1, 2) + B (1, 3)
  • 80 S (2) = B (1, 3) + B (2, 3) + B (3, 3)
  • 90 PRINT "S(1)="; S(1); „S(2)=";
  • S(2)
  • 100 SFÂRȘIT
  • 10 REM SHIFT 20 DIM B(4)
  • 30 PRINT „INTRODUCEȚI MATRICE ÎN (4)”
  • 40 INTRARE B(1), B(2),
  • 50 D=B(1)
  • 60 V(1)=V(2)
  • 70 V(2)=V(3)
  • 80 V(3)=V(4)
  • 90V(4)=D
  • 100 PRINT "ARRIGE B=(";
  • 110 PRINT B(1); AT 2);

LA 3) ; AT 4) ; ")"

Întrebări de control

  • 1. Care operator din BASIC specifică tipul și dimensiunea unui tablou?
  • 2. Care este denumirea elementelor de matrice în BASIC? Care este cea mai mică valoare a indexului elementului de matrice?

Sarcini pentru soluție independentă

  • 2. Calculați media aritmetică a variabilelor V, Si I.
  • 3. Muncitorii Ivanov și Petrov au produs piesele A și, respectiv, B pentru o tură, după ce au îndeplinit norma. Determinați procentul de îndeplinire excesivă a normei (normă - Din părți pe schimb).
  • 4. Stabiliți diferența de vârstă a mireselor pentru cei doi frați Petya și Dima. Vârsta lor AȘi b respectiv. Vârsta miresei este determinată de formulă

unde (7 este vârsta mirelui.

5. Calculați valoarea la:

Unde

Accept cf 0; g, f 0.

  • 6. Calculați volumul și aria suprafeței unui cilindru cu un diametru DESPRE si inaltime N.
  • 7. Calculați costul unui set de mobilier care conține patru scaune, două fotolii și o masă. Costul produselor, respectiv, ruble A, B și C.
  • 8. Determinați media aritmetică a elementelor tabloului С(1:5).
  • 9. Determinați produsul sumelor elementelor fiecărui rând al matricei P (1:2, 1:3).
  • 10. Rearanjați elementele corespunzătoare din primul și al doilea rând ale matricei A (1:2, 1:2).
  • 11. Rearanjați elementele matricei R(1: 6): primul element și al 6-lea, al 2-lea și al 5-lea, al 3-lea și al 4-lea.


Se încarcă...
Top