Ktorý program je lineárny v c. Lineárne programy - abstraktné

15. Analytické metódy. Metódy lineárneho programovania.

15.1. Analytické metódy

Počas celého svojho vývoja sa človek pri vykonávaní určitých činností snažil správať tak, aby výsledok dosiahnutý ako dôsledok nejakého konania bol v určitom zmysle najlepší. Pohyboval sa z jedného bodu do druhého a snažil sa nájsť najkratšiu možnú cestu. Pri stavbe obydlia hľadal geometriu, ktorá by poskytovala prijateľné životné podmienky s najmenšou spotrebou paliva. Pri stavbe lodí sa im snažil dať tvar, v ktorom by voda kládla najmenší odpor. V zozname podobných príkladov možno ľahko pokračovať.

Najlepšie riešenia problémov v určitom zmysle sú zvyčajne tzv optimálne. V súčasnosti nie je možné vyriešiť ani jeden viac či menej zložitý problém bez použitia optimalizačných princípov. Pri nastavovaní a riešení optimalizačných problémov vyvstávajú dve otázky: čo a ako optimalizovať?

Odpoveď na prvú otázku sa získa ako výsledok hĺbkovej štúdie problému, ktorý sa má vyriešiť. Identifikuje sa parameter, ktorý určuje mieru dokonalosti riešenia vzniknutého problému. Tento parameter sa zvyčajne nazýva cieľová funkcia alebo kvalitatívne kritérium. Ďalej sa stanoví množina veličín, ktoré určujú cieľovú funkciu. Nakoniec sú formulované všetky obmedzenia, ktoré treba brať do úvahy pri riešení problému. Potom sa skonštruuje matematický model, ktorý spočíva v stanovení analytickej závislosti účelovej funkcie na všetkých argumentoch a analytickej formulácii obmedzení spojených s problémom. Potom začneme hľadať odpoveď na druhú otázku.

Takže, ako výsledok formalizácie aplikovaného problému, zistíme, že cieľová funkcia je , kde množina X je zovšeobecnením obmedzení, nazýva sa to množina prípustných riešení. Podstatou optimalizačného problému je hľadanie na množine X – množine prípustné riešenia takéto rozhodnutie
, pri ktorej cieľová funkcia f dosiahne svoju minimálnu alebo maximálnu hodnotu.

Neoddeliteľnou súčasťou optimalizačných metód je lineárne programovanie.

15.2. Základné pojmy lineárne programovanie

Prvá zmienka (1938) o matematických metódach v efektívnom riadení výroby patrí sovietskemu matematikovi L. V. Kantorovičovi. O rok neskôr, v roku 1939, L. V. Kantorovich publikoval prácu „Matematické metódy organizácie a plánovania výroby“ a získané výsledky prakticky aplikoval. Termín „lineárne programovanie“ zaviedli koncom 40. rokov americkí matematici J. Danzig a T. Koopmans. J. Dantzig vyvinul matematický aparát simplexovej metódy na riešenie úloh lineárneho programovania (1951). Simplexová metóda sa používa na riešenie širokého spektra problémov lineárneho programovania a stále je jednou z hlavných metód.

Lineárne programovanie je odvetvie matematiky zamerané na hľadanie extrému (maxima alebo minima) v problémoch, ktoré sú opísané lineárnymi rovnicami. Okrem toho lineárne rovnice opisujú ako samotnú účelovú funkciu, tak aj vstupné parametre (premenné) a podmienky obmedzení vstupných parametrov. Nevyhnutnou podmienkou problémov lineárneho programovania je povinná prítomnosť obmedzení zdrojov (suroviny, materiály, financie, dopyt po vyrobených produktoch atď.). Ostatným dôležitá podmienka vyriešením problému je výber kritéria na zastavenie algoritmu, t.j. cieľová funkcia musí byť v určitom zmysle optimálna. Optimálnosť cieľovej funkcie musí byť vyjadrená kvantitatívne. Ak je cieľová funkcia reprezentovaná jednou alebo dvoma rovnicami, potom sa v praxi takéto problémy dajú vyriešiť celkom jednoducho. Kritérium zastavenia algoritmu (alebo kritérium optimality) musí spĺňať tieto požiadavky:

    byť jediný pre danú úlohu;

    merané v jednotkách množstva;

    lineárne závisia od vstupných parametrov.

Na základe vyššie uvedeného môžeme formulovať problém lineárneho programovania vo všeobecnej forme:

nájsť extrém účelovej funkcie

pod obmedzeniami vo forme rovnosti:

(2.2)

pod obmedzeniami vo forme nerovností:

(2.3)

a podmienky nezápornosti vstupných parametrov:

V skratke možno problém lineárneho programovania napísať takto:

(2.5)

vzhľadom na to

Kde
- vstupné premenné;

Čísla sú kladné, záporné a rovné nule.

V maticovej forme možno tento problém zapísať takto:

Problémy lineárneho programovania je možné riešiť analyticky a graficky.

15.3. Kanonický problém lineárneho programovania

, i=1,…,m,

, j=1,…,n.

Hlavné výpočtové metódy na riešenie problémov lineárneho programovania boli vyvinuté špeciálne pre kanonický problém.

15.4. Všeobecný problém lineárneho programovania

Je potrebné maximalizovať (minimalizovať) lineárnu funkciu n premenné.

pod obmedzeniami

, i=1,…, k,

, i=1+ k,…, m,

, …,

Tu km, rn. Štandardná úloha sa získa ako špeciálny prípad všeobecnej úlohy s k= m, r= n; kanonický – pri k=0, r= n.

Príklad.

Cukráreň vyrába viacero druhov sladkostí. Nazvime ich „A“, „B“ a „C“. Je známe, že predaj desiatich kilogramov sladkostí „A“ prináša zisk 90 rubľov, „B“ - 100 rubľov a „C“ - 160 rubľov. Cukríky je možné vyrobiť v akomkoľvek množstve (predaj je zaručený), ale zásoby surovín sú obmedzené. Je potrebné určiť, aké sladkosti a koľko desiatok kilogramov je potrebné vyrobiť, aby bol celkový zisk z predaja maximalizovaný. Miery spotreby surovín na výrobu 10 kg sladkostí každého druhu sú uvedené v tabuľke 1.

Tabuľka 1. Miery spotreby surovín

na výrobu

Ekonomická a matematická formulácia problému má formu

Nájdite také hodnoty premenných X=(x1, x2, x3), do

objektívna funkcia

za podmienok - obmedzenia:

1.2 Stručne o lineárnom programovaní.

Čo je lineárne programovanie? Toto je jedna z prvých a najdôkladnejšie študovaných oblastí matematického programovania. Práve lineárne programovanie bola sekcia, z ktorej sa začala rozvíjať samotná disciplína „matematické programovanie“. Pojem „programovanie“ v názve disciplíny nemá nič spoločné s pojmom „programovanie (t. j. zostavovanie programov) pre počítač“, keďže disciplína „lineárne programovanie“ vznikla ešte pred časom, keď sa počítače začali vo veľkom používať. pri riešení matematických a inžinierskych úloh, ekonomických a iných úloh. Pojem „lineárne programovanie“ vznikol ako výsledok nepresného prekladu anglického „lineárneho programovania“. Jedným z významov slova „programovanie“ je vytváranie plánov, plánovanie. Správny preklad „lineárneho programovania“ by teda nebol „lineárne programovanie“, ale „lineárne plánovanie“, ktoré presnejšie odráža obsah disciplíny. Avšak pojem lineárne programovanie, nelineárne programovanie atď. sa v našej literatúre stali všeobecne akceptovanými.

Lineárne programovanie teda vzniklo po druhej svetovej vojne a začalo sa rýchlo rozvíjať a pritiahlo pozornosť matematikov, ekonómov a inžinierov vďaka možnosti širokého praktické uplatnenie, ako aj matematická „harmónia“.
Dá sa povedať, že lineárne programovanie je použiteľné na konštruovanie matematických modelov tých procesov, ktoré môžu byť založené na hypotéze lineárnej reprezentácie reálneho sveta: ekonomické problémy, problémy riadenia a plánovania, optimálne umiestnenie zariadení atď.

Problémy lineárneho programovania sú problémy, v ktorých sú cieľová funkcia aj obmedzenia vo forme rovnosti a nerovností lineárne. Stručne povedané, problém lineárneho programovania možno formulovať takto: nájdite vektor hodnôt premenných, ktoré poskytujú extrém lineárnej cieľovej funkcie pod m obmedzeniami vo forme lineárnych rovníc alebo nerovností.

Lineárne programovanie je najčastejšie používaná metóda optimalizácie. Problémy lineárneho programovania zahŕňajú nasledovné:

· racionálne využívanie surovín a zásob; problémy s optimalizáciou rezania;

· optimalizácia výrobného programu podnikov;

· optimálne umiestnenie a koncentrácia výroby;

· vypracovanie optimálneho plánu prepravy a prepravnej operácie;

· riadenie zásob;

· a mnohé ďalšie patriace do oblasti optimálneho plánovania.

Podľa amerických odborníkov teda asi 75 % z celkového počtu použitých optimalizačných metód tvorí lineárne programovanie. Približne štvrtinu času stráveného na počítači posledné roky viesť vedecký výskum, sa venoval riešeniu problémov lineárneho programovania a ich početným modifikáciám.

Prvé formulácie problémov lineárneho programovania sformuloval slávny sovietsky matematik L.V. Kantorovič, ktorý za tieto práce získal Nobelovu cenu za ekonómiu.

V súčasnosti je lineárne programovanie jedným z najčastejšie používaných zariadení. matematická teória optimálne rozhodovanie.

Lineárne programovanie je teda veda o metódach štúdia a hľadania najväčších a najmenších hodnôt lineárnej funkcie, ktorej neznáme podliehajú lineárnym obmedzeniam. Problémy lineárneho programovania sa teda týkajú problémov na podmienenom extréme funkcie.


1.3 Hlavný problém lineárneho programovania

Hlavný problém lineárneho programovania (LPP) je uvedený nasledovne: Existuje množstvo premenných. Je potrebné nájsť ich nezáporné hodnoty, ktoré by vyhovovali systému lineárnych rovníc:

{1.1}

a navyše by sa minimalizovala funkcia lineárneho cieľa (OB)

Je zrejmé, že prípad, keď je potrebné digitálnu funkciu zapnúť nie na minimum, ale na maximum, možno ľahko zredukovať na predchádzajúci, ak zmeníme znamienko funkcie a namiesto toho zvážime funkciu

Prípustným riešením OLP je ľubovoľná množina premenných vyhovujúcich rovnici (1.1).

Optimálne riešenie je jedno z možných riešení, pri ktorom sa CF stáča na minimum.

V praxi sú obmedzenia v úlohe lineárneho programovania často špecifikované nie rovnicami, ale nerovnicami. V tomto prípade môžeme prejsť k hlavnému problému lineárneho programovania.

Zvážte problém lineárneho programovania s obmedzeniami nerovnosti, ktoré majú tvar

{1.2}

a sú lineárne nezávislé. To posledné znamená, že žiadna z nich nemôže byť reprezentovaná ako lineárna kombinácia ostatných. Je potrebné nájsť, ktoré nerovnosti vyhovujú a minimalizujú

Predstavme si rovnice:

{1.3}

Kde sú ďalšie premenné, ktoré sú tiež nezáporné.

Máme teda všeobecný problém lineárneho programovania – nájdi nezáporné , tak aby vyhovovali sústave rovníc (1.3) a zredukovali na minimum.

Koeficienty vo vzorci (1.3) vyššie sa rovnajú nule.


1.3. Konštrukcia obmedzení a gradientu účelovej funkcie: 1.4. Regiónom realizovateľných riešení je segment AB. 1.5. Bod A je optimálny. Súradnice bodu A: ; ; . 2. Riešenie úlohy lineárneho programovania simplexnou metódou. Priama úloha. Problém lineárneho programovania pre akýkoľvek vrchol v kompaktnej forme možno znázorniť takto: Na získanie použijeme algoritmus uvedený v...



Lúče vychádzajúce z jedného bodu sa nazývajú mnohostenný konvexný kužeľ s vrcholom v danom bode. 1.4 Základy matematiky riešenie úlohy lineárneho programovania graficky 1.4.1 Matematický aparát Aby sme všetkému lepšie porozumeli, je užitočné poznať a predstaviť si geometrickú interpretáciu úloh lineárneho programovania, ktorá môže byť uvedená pre prípady n = 2 an = ...

Úlohy f1(x)=max=g1(x) – pre prvý podnik; - pre iné podniky. Riešenie problému optimálneho rozdelenia finančných prostriedkov medzi podniky pomocou metódy dynamické programovanie Tabuľka 12 Prostriedky s, tisíc gr. Podnik 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

Ak do takejto simplexovej tabuľky dáme aktuálne základné premenné rovné Ai,0 a voľné rovné nule, dostaneme optimálne riešenie. Prax používania simplexovej metódy ukázala, že počet iterácií potrebných na vyriešenie úlohy lineárneho programovania sa zvyčajne pohybuje od 2 m do 3 m, aj keď pre niektoré špeciálne konštruované úlohy sa výpočty podľa pravidiel simplexovej metódy menia na priame...

Vyššie sme skúmali rôzne praktické problémy, ktoré možno zredukovať na schému lineárneho programovania. V niektorých z týchto problémov mali lineárne obmedzenia formu nerovnosti, v iných - rovnosti, v iných - oboch.

Tu budeme uvažovať problém lineárneho programovania s obmedzeniami rovnosti – takzvaný základný problém lineárneho programovania (BLP).

V budúcnosti ukážeme, ako môžete prejsť od problému s obmedzeniami nerovnosti k OPLP a späť.

Hlavný problém lineárneho programovania je uvedený nasledovne.

Existuje množstvo premenných

Je potrebné nájsť také nezáporné hodnoty týchto premenných, ktoré by vyhovovali systému lineárnych rovníc:

a navyše by minimalizovala lineárnu funkciu

Je zrejmé, že prípad, keď lineárnu funkciu treba obrátiť nie na minimum, ale na maximum, možno ľahko zredukovať na predchádzajúci, ak zmeníme znamienko funkcie a namiesto toho zvážime funkciu

Dohodnime sa, že akúkoľvek množinu premenných budeme nazývať prípustným riešením OLP

vyhovujúce rovnice (2.1).

Optimálnym riešením budeme nazývať to z prípustných riešení, pri ktorom sa lineárna funkcia (2.2) stane minimom.

Základný problém lineárneho programovania nemusí mať nevyhnutne riešenie.

Môže sa ukázať, že rovnice (2.1) si navzájom odporujú; môže sa ukázať, že majú riešenie, ale nie v oblasti nezáporných hodnôt. Potom OLP nemá žiadne prípustné riešenia. Nakoniec sa môže ukázať, že prípustné riešenia OLP existujú, ale medzi nimi neexistuje žiadne optimálne: funkcia L v oblasti prípustných riešení je zdola neohraničená.

S príkladmi takýchto vlastností OPLP sa zoznámime neskôr.

Uvažujme najskôr o otázke existencie prípustných riešení OĽP.

Pri riešení tohto problému môžeme vylúčiť z úvahy lineárnu funkciu L, ktorú je potrebné minimalizovať - ​​prítomnosť realizovateľných riešení je určená iba rovnicami (2.1).

Nech teda existuje sústava rovníc (2.1). Existujú nezáporné hodnoty, ktoré spĺňajú tento systém? Táto problematika sa rieši v špeciálnom odbore matematiky - lineárnej algebre.

Stručne predstavme niektoré ustanovenia lineárnej algebry bez toho, aby sme sa zaoberali dôkazmi zodpovedajúcich viet

Matica sústavy lineárnych rovníc

je tabuľka zložená z koeficientov pre

Rozšírená matica systému lineárnych rovníc je rovnaká matica doplnená o stĺpec voľných členov:

Hodnosť matice je najvyšším rádom nenulového determinantu, ktorý možno získať odstránením niektorých riadkov a niektorých stĺpcov z matice.

V lineárnej algebre je dokázané, že na to, aby bol systém lineárnych rovníc (2.1) kompatibilný, je potrebné a postačujúce, aby sa hodnosť matice systému rovnala hodnotám jej rozšírenej matice.

Príklad 1. Daná sústava troch rovníc so štyrmi neznámymi:

Zistite, či je tento systém kolaboratívny?

Riešenie. Systémová matica:

Rozšírená matica:

Určme poradie prvej matice. Nemôže byť väčší ako 3 (keďže počet riadkov je 3). Vytvorme nejaký determinant vymazaním nejakého stĺpca z matice, napríklad posledného. Dostaneme

Výpočtom tohto determinantu podľa známeho pravidla dostaneme:

Tento determinant sa nerovná nule, čo znamená, že poradie matice systému je 3. Je zrejmé, že poradie rozšírenej matice sa tiež rovná 3, pretože rovnaký determinant môže byť zložený z prvkov matice. rozšírená matica. Z rovnosti radov matíc vyplýva, že sústava rovníc je konzistentná.

Príklad 2. Preskúmajte kompatibilitu systému dvoch rovníc s tromi neznámymi:

Riešenie. Rozšírená matica systému:

(jeho ľavá strana je matica systému).

Nájdite poradie matice systému zložením všetkých možných determinantov druhého rádu:

Takže všetky možné determinanty druhého rádu zložené z prvkov systémovej matice sú rovné nule; To znamená, že hodnost tejto matice systému je

Poďme nájsť hodnosť rozšírenej matice. Determinant

Hodnosť rozšírenej matice sa teda nerovná hodnote systémovej matice: Grfg, preto je systém rovníc nekonzistentný.

Príklad 3. Preskúmajte konzistenciu systému troch rovníc so štyrmi neznámymi:

Riešenie Rozšírená matica systému (spolu so systémovou maticou):

Poďme nájsť hodnosť matice systému. Zoberme si determinant tretieho rádu zložený z jeho prvkov, napríklad:

Je známe, že ak je ktorýkoľvek riadok determinantu lineárnou kombináciou jeho dvoch ďalších riadkov, potom sa determinant rovná nule. V našom prípade je tretí riadok lineárnou kombináciou prvých dvoch: aby ste to dostali, stačí pridať prvý riadok s dvojnásobkom druhého. Preto.

Je ľahké overiť, že akýkoľvek determinant tretieho rádu zložený z prvkov systémovej matice má rovnakú vlastnosť, preto je poradie systémovej matice.

Keďže existuje nenulový determinant druhého rádu, napr.

potom sa poradie matice systému rovná

Rovnakým zdôvodnením sa ubezpečíme, že poradie rozšírenej matice je rovné dvom: Preto je systém rovníc kompatibilný

Všimnite si, že tri rovnice v tomto príklade nie sú nezávislé: tretiu možno získať z prvých dvoch vynásobením druhej dvoma a pripočítaním k prvej. To znamená, že tretia rovnica je jednoduchým dôsledkom prvých dvoch. V systéme existujú iba dve nezávislé rovnice: to sa odráža v tom, že poradie matice systému

Ak je teda systém obmedzení rovnice OLP konzistentný, potom matica systému a jeho rozšírená matica majú rovnakú úroveň.

Toto celkové poradie sa nazýva hodnosť systému; nepredstavuje nič iné ako počet lineárne nezávislých rovníc medzi uloženými obmedzeniami.

Je zrejmé, že úroveň systému nemôže byť ďalšie číslo rovnice:

Je tiež zrejmé, že poradie systému nemôže byť väčšie ako celkový počet premenných:

Hodnosť matice systému je skutočne definovaná ako najvyšší rád determinantu zloženého z prvkov matice; keďže počet jeho riadkov je rovný , potom ; keďže počet jeho stĺpcov sa rovná , potom .

Štruktúra problému lineárneho programovania výrazne závisí od úrovne systému obmedzení (2.1).

Uvažujme najskôr o prípade, keď , teda keď počet lineárne nezávislých rovníc zahrnutých v systéme (2.1) sa rovná počtu premenných n Vynechajme „extra“ rovnice, ktoré sú lineárnymi kombináciami iných. Systém rovníc-obmedzení OZLP má tvar:

Keďže determinant zložený z koeficientov,

nerovná sa nule. Z algebry je známe, že v tomto prípade má systém (2.4) jedinečné riešenie. Na zistenie množstva stačí nahradiť stĺpec v determinante stĺpcom voľných členov a vydeliť.

Takže, keď má systém obmedzení rovnice OLP jedinečné riešenie:

Ak je v tomto riešení aspoň jedna z veličín záporná, znamená to, že výsledné riešenie je neprijateľné, a preto OLP nemá riešenie.

Ak sú všetky množstvá nezáporné, nájdené riešenie je prípustné. Je tiež, samozrejme, optimálne (pretože žiadne iné neexistujú).

Je zrejmé, že tento triviálny prípad nás nemôže zaujímať.

Preto budeme v budúcnosti uvažovať len o tom, kedy, t.j. keď počet nezávislých rovníc, ktoré musia premenné spĺňať, sú počty samotných premenných. Potom, ak je systém konzistentný, má nekonečne veľa riešení. V tomto prípade môžeme premenným (tzv. voľné premenné) priradiť ľubovoľné hodnoty a ostatné premenné budú vyjadrené prostredníctvom nich (tieto premenné budeme nazývať základné).

Program sa nazýva lineárny, ak sa všetky jeho príkazy vykonávajú postupne v poradí, v akom sú napísané. Toto je najjednoduchší typ programu.

Premenné

Premenná je hodnota, ktorá počas behu programu môže -

zmeniť jeho význam. Všetky premenné použité v programe musia byť popísané v časti popis premennej, začínajúc funkčným slovom var.

Pre každú premennú je určený jej názov a typ, napríklad:

číslo var: celé číslo; x, y: skutočné; možnosť: char;

Názov premennej určuje umiestnenie v pamäti, kde sa nachádza hodnota premennej. Názov je daný programátorom. Mala by odrážať význam uloženej hodnoty a mala by byť ľahko rozpoznateľná.

Typ premenných sa volí na základe rozsahu a požadovanej presnosti reprezentácie údajov.

Pri deklarácii môžete premennej priradiť počiatočnú hodnotu, t.j. inicializovať jej. Inicializácia znamená nastavenie hodnoty, ktorá sa vykoná pred spustením programu. Inicializované premenné sú deklarované po kľúčové slovo const:

const number: integer = 100; x: skutočné = 0,02; možnosť: char = "yu";

Štandardne sú všetky premenné definované v hlavnom programe nastavené na nulu.

Výrazy

Výraz je pravidlo na výpočet hodnoty. Výraz zahŕňa -

operandy, spojené prevádzkovými značkami. Operandmi výrazu môžu byť konštanty, premenné a volania funkcií. Operácie sa vykonávajú v určitom poradí v súlade s priority, ako v matematike. Ak chcete zmeniť poradie operácií, použite okrúhle zátvorky,úroveň ich hniezdenia je prakticky neobmedzená.

Výsledkom výrazu je vždy hodnota konkrétneho typu, ktorá je určená typmi operandov. Množstvo zahrnuté vo výraze musí byť kompatibilné typy.

  • 1. Unárny operácia nie, jednočlenné mínus -, pričom adresa @.
  • 2. Operácie typu násobenia:* / div mod a shl shr.
  • 3. Operácie ako sčítanie: + - alebo xor.
  • 4. Relačné operácie: = o = in.

Ako prvé sa vyhodnotia funkcie použité vo výraze

Príklady výrazov:

t + sin (x)/2 * x - výsledok je skutočného typu; A

(x > 0) a (y

Štruktúra programu

Program PASCAL pozostáva z voliteľnej hlavičky, časti popisu a časti príkazu:

názov programu; (nadpis) sekcie popisov začiatok sekcia príkazov koniec. (* program končí bodkou *)

Program môže obsahovať komentáre, v zložených zátvorkách () alebo v zátvorkách formulára (* *).

Všeobecná štruktúra program je znázornený na obr. 2.1.

Sekcia príkazov obsahuje spustiteľné príkazy programu. Kľúčové slová begin a end nie sú operátory, ale slúžia na ich spojenie do tzv zložený operátor alebo blokovať. Blok je možné zapísať kdekoľvek v programe, kde je prijateľný bežný príkaz.

Popis sekcií má niekoľko typov: popisy modulov, konštánt, typov, premenných, návestí, procedúr a funkcií.

Modul je knižnica zdrojov (podprogramov, konštánt atď.), ktorá je pripojená k programu.

Ryža. 2.1.

Sekcia popisu modulu, ak existuje, by mala byť na prvom mieste. Popis začína kľúčovým slovom use, za ktorým nasleduje zoznam všetkých modulov pripojených k programu, štandardných aj vlastných, oddelených čiarkami, napríklad: use crt, graph, my_module;

Počet a poradie zostávajúcich sekcií je ľubovoľné, existuje len jedno obmedzenie: akákoľvek hodnota musí byť opísaná pred jej použitím. Koniec časti popisu je označený začiatkom ďalšej časti. Program môže mať niekoľko sekcií popisu rovnakého typu, ale na zjednodušenie štruktúry programu sa odporúča zoskupiť všetky podobné popisy do jednej sekcie.

V časti popis premenných musíte definovať všetky premenné, ktoré sa budú používať v hlavnom programe.

Časť popisu konštanty sa používa tak, že namiesto hodnôt konštánt je možné v programe použiť ich názvy. Sekcia deklarácie konštanty má ďalšie využitie: popisuje premenné, ktorým je potrebné priradiť hodnotu pred spustením programu:

konštantná hmotnosť: skutočná = 61,5; n = 10;

Časť s popisom štítku začína štítkom kľúčového slova, za ktorým nasleduje zoznam všetkých štítkov, ktoré sa nachádzajú v programe, oddelených čiarkami. Označenie je buď meno, alebo kladné číslo nepresahujúce 9999. Označenie je umiestnené pred ľubovoľným spustiteľným príkazom a je od neho oddelené dvojbodkou. Príklad popisu štítku: štítok 1, 2, chyba;

Štítky sa používajú na organizáciu prechodu na konkrétneho operátora pomocou operátor bezpodmienečného skokuísť do.

Vstupno-výstupné procedúry Každý program pri zadávaní počiatočných údajov a výstupe výsledkov interaguje s externých zariadení. Súbor štandardných vstupných a výstupných zariadení, t.j. klávesnica a displej, tzv konzoly.

Vstup z klávesnice. Pre vstup z klávesnice sú definované nasledujúce procedúry: read a readln: read(list); readln[(zoznam)];

Zoznam názvov premenných oddelených čiarkami je uvedený v zátvorkách. Hranaté zátvorky označujú, že zoznam nemusí byť prítomný. Napríklad:

čítaj (a, b, c); readln(y); readln;

POZOR

Môžete zadať celočíselné, skutočné, znakové a reťazcové hodnoty. Vstupné hodnoty musia byť oddelené ľubovoľným počtom prázdnych znakov (medzera, tabulátor, posun riadkov).

Zadanie hodnoty každej premennej sa vykonáva takto:

  • ? hodnota premennej je zvýraznená ako skupina znakov umiestnených medzi oddeľovačmi;
  • ? tieto symboly sa prevedú do formy internej reprezentácie zodpovedajúcej typu premennej;
  • ? hodnota sa zapíše do pamäťového miesta označeného názvom premennej.

Okrem toho sa procedúra readln po zadaní všetkých hodnôt presunie na ďalší riadok zdrojových údajov. Procedúra readln bez parametrov jednoducho čaká na stlačenie klávesu Enter.

Funkcie zadávania znakov a reťazcov je, že medzery v nich sa nelíšia od všetkých ostatných, takže nemôžu byť oddeľovačmi.

Výstup na displeji. Keď sa vykoná výstup inverzná konverzia: od interného zobrazenia po znaky zobrazené na obrazovke. Na tento účel jazyk definuje štandardné procedúry write a writeln: write (zoznam); writeln[(zoznam)];

Procedúra zápisu zobrazí hodnoty zadané v zozname na obrazovke a procedúra writeln okrem toho presunie kurzor na ďalší riadok. Procedúra writeln bez parametrov jednoducho presunie kurzor na ďalší riadok.

Môžete vydávať hodnoty logických, celočíselných, skutočných, znakov a reťazcov. Zoznam môže obsahovať nielen názvy premenných, ale aj výrazy, ako aj ich špeciálny prípad – konštanty. Navyše, pre každú výstupnú hodnotu ju môžete nastaviť formát, napríklad: writeln(a:4, b:6:2);

Za názvom premennej A Dvojbodka označuje počet jej pridelených pozícií, v rámci ktorých je hodnota zarovnaná doprava. Pre b sú uvedené dve špecifikácie formátu, čo znamená, že pre túto premennú je priradených iba šesť pozícií, z toho dve pre zlomkovú časť.

Lineárne nazývaný program, ktorý je nahrávkou lineárny algoritmus. V takomto programe sa všetky príkazy vykonávajú striktne sekvenčne, t.j. po vykonaní každého z nich (okrem END) počítač automaticky prejde na vykonanie ďalšieho príkazu.

Vytváranie jednoduchých programov

Najjednoduchšie budeme nazývať lineárne programy, ktoré neobsahujú polia. Kompilácia takýchto programov si vyžaduje znalosť vyššie diskutovaných operátorov, pochopenie ich zhody s blokmi diagramu algoritmu a vykonáva sa podľa tohto jednoduchého pravidla:

zvážte bloky diagramu algoritmu (my si myslíme, že je daný) v poradí, počnúc prvým a pre každý z nich napíšeme zodpovedajúci operátor BASIC, t.j.

pre blok Štart- príkaz REM s názvom programu;

pre blok Zadajte - vstupný operátor;

pre blok proces - operátor priradenia;

pre blok Záver - výstupný operátor;

pre blok Stop- operátor END.

To je celé pravidlo!

Teraz uvádzame príklady konkrétnych programov uvažovaného typu.

Problém 12.2

Vypočítajte obvod pravouhlého trojuholníka vzhľadom na dĺžku jeho nôh.

Problém 12.3

Zmeňte usporiadanie hodnôt veličín A a B.

Riešenie problémy 12.2 a 12.3. O týchto problémoch sa hovorilo v kapitole 10, preto na obr. 12.2 ukazuje bez vysvetlenia schému algoritmu a programu úlohy 10.2 a na obr. 12.3 - to isté pre problém 10.3.

Na obr. 12.2 a 12.3 šípky znázorňujú zhodu príkazov programu s blokmi diagramu algoritmu.

Predstavme si programy na riešenie ďalších dvoch problémov. Program pre úlohu 12.1 ilustruje použitie rôznych typov veličín. Program pre Problém 12.2 demonštruje organizáciu výstupu dát do tlačového zariadenia.

Ryža. 12.2

Problém 12.1

Vypočítajte hodnoty U a Z podľa vzorcov:

Kde IN A IN - celé množstvá.

Riešenie

Východiskové údaje: E %, V %, C, X, A(a).

Výsledok: Y,Z %.

Poradie operácií je zrejmé, takže program napíšeme hneď:

  • 10 REM ÚLOHA 1
  • 20 VYTLAČTE "ZADAJ D%, B%, C, X, A"
  • 30 INPUT D%,B%, 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 VYTLAČIŤ "Z%=";Z%; "Y="; Y 80 TLAČ R$
  • 90 KONIEC

Problém 12.2

Vypočítajte hodnotu funkcie Y = L 2 + V 1 a vytlačte (výstup na tlačiareň) hodnoty počiatočných údajov a výsledkov.

Riešenie

Program na výpočet funkcií Y:

  • 20 REM VÝSTUP TLAČE 30 TLAČ "ZADAJ A, B"
  • 40 VSTUP A, B 50 U=A L 2+V L 2
  • 60 LPRINT "ÚDAJE:"," A=";A;" B=";B 70 LPRINT
  • 80 LPRINT "VYSLEDOK:"," Y=";Y 90 KONIEC

Operátor v 30. riadku tohto programu zobrazuje text na displeji a operátori 60-80 - na tlačiarni. Operátor na riadku 70 vytlačí prázdny riadok na kus papiera.

Lineárne programy s poľami

Polia v jazyku BASIC. Pripomeňme si definíciu poľa: pole je usporiadaný súbor homogénnych množstiev, z ktorých každé je označené rovnakým názvom s rôznymi celočíselnými indexmi, ktoré sa líšia v poradí.

BASIC používa jedno- a dvojrozmerné polia (v QBASIC sú prijateľné aj osemrozmerné). Rovnako ako jednoduché premenné môžu byť rôzne druhy: celé číslo, skutočné číslo, text (reťazec) atď.

Pozor! V BASICu neexistujú žiadne operácie na spracovanie polí vo všeobecnosti, t.j. operácie tvaru „zadajte pole P(1:99)“, ktoré sme zvyknutí používať v kapitolách 8 a 9. Na vykonanie operácie na poli je potrebné uviesť zoznam operácií vykonaných na každom jeho prvku.

Uvažujme všeobecná forma prvok poľa v BASICu:

Kde - názov poľa sa musí riadiť rovnakými pravidlami ako názov jednoduchej premennej;

Komu - index(číslo) prvku jednorozmerného poľa, k

ja,j- indexy prvok dvojrozmerného poľa (číslo riadku a stĺpca, na priesečníku ktorého sa nachádza), i > 0, j > 0. V QBASICu môžete nastaviť počiatočné hodnoty k, i, j až 1. Indexy k, i, j môžu byť vyjadrené ľubovoľnými aritmetickými výrazmi . Pri vyhodnocovaní výrazu reprezentujúceho index v QBASIC sa výsledok zaokrúhli na najbližšie celé číslo.

Príklady zápisu prvkov poľa:

P$(0), C2(101), X(4b,5xK+l), T%(N/2, M).

V diagrame algoritmu by tie isté prvky mali nasledujúce označenia: P 0,

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

Pozor! Ak program používa pole, musí byť predtým deklarované, t.j. Počítač musí byť informovaný o type a veľkosti tohto poľa pomocou príkazu DIM.

Príklad: operátor DIM Р$(6), i_iB% (4,8) hlási prítomnosť v programe

textové polia P(0:6) a celé číslo B(0:4, 0:8).

Na základe informácií obsiahnutých vo vyhlásení DIM počítač pridelí (rezervuje) pamäťovú oblasť požadovanej veľkosti pre každé pole.

Celkový pohľad na operátora DIM:

V prípade jednorozmerného poľa:

DIM (d)

V prípade dvojrozmerného poľa:

DIM (p, w)

kde DIM je názov operátora (zo slova rozmer - "rozmer"); - názov poľa; d, p, w- rozmery poľa, t.j. d-číslo posledného prvku jednorozmerného poľa; n (m)- číslo posledného riadku (posledného stĺpca) dvojrozmerného poľa.

Veľkosť poľa je vo väčšine verzií BASICu (vrátane QBASIC) vyjadrená ako celé číslo alebo celočíselná premenná.

Funkcie nahrávania operátora DIM:

  • 1) v jednom príkaze DIM môžete deklarovať ľubovoľný počet polí (pozri príklad);
  • 2) príkaz DIM sa odporúča umiestniť na začiatok programu;
  • 3) v programe by ste nemali používať jednoduchú premennú a pole s rovnakým názvom.

Príklad: operátor DIM D% (2), A (2,3), K$ (3) uvádza:

  • pole D% - jednorozmerné celé číslo obsahujúce prvky D%(0), D%(1), D%(2);
  • pole K je jednorozmerné textové pole, obsahuje prvky K$(0), k$(1), K$(2), K$(3);
  • pole A je dvojrozmerné skutočné pole, ktoré obsahuje nasledujúce prvky:

Vytváranie lineárnych programov s poľami. V prvom rade si všimnime vlastnosti práce s poľami v programe.

1. Prvky poľa sú priradené hodnoty pomocou vstupných alebo priraďovacích operátorov ako jednoduché premenné. Pri zadávaní (výstupných) poliach vstupné (výstupné) príkazy uvádzajú názvy všetkých vstupných (výstupných) prvkov poľa.

Príklad: Vstupný a výstupný program pre pole P (1:3) môže vyzerať takto:

  • 20 DIM P(3)
  • 30 INPUT P(1), P(2), P(3)
  • 40 TLAČ P(1), P(2), P(3)
  • 50 KONIEC
  • 2. Všetky polia možno rozdeliť do dvoch typov:
    • polia konštantnej veľkosti(napríklad P(1:7), B(1:4, 1:8)];
    • polia s premenlivou veľkosťou[napríklad A(1:&); C(1 :T, 1: d). V kapitolách 8 a 9 sme použili oba typy bez toho, aby sme ich rozlišovali.

V niektorých verziách BASICu operátor DIM neumožňuje deklarovať polia s premenlivou veľkosťou, takže ich použitie v programe vyžaduje určité triky. Vo verziách BASICu, o ktorých sa hovorí v príručke, nie sú žiadne takéto obmedzenia, je povolené používať polia akéhokoľvek typu.

Stačí si zapamätať: premenné - veľkosť poľa sa musí určiť pred volaním operátora DIM.

Príklad:

10 VSTUPOV M 20 DIM X(M)

Lineárne programy s poľami sú zostavené v súlade s vyššie diskutovaným pravidlom pre zostavovanie najjednoduchších programov, ktoré možno doplniť jedným bodom - „za operátorom REM by mal byť v programe napísaný operátor DIM“. Okrem toho je potrebné vziať do úvahy práve prezentované informácie o práci s poľami.

Teraz si ukážeme konštrukciu príslušných programov pomocou konkrétne príklady. Najprv sa vráťme k problému 8.5. Schéma jeho algoritmu je znázornená na obr. 10.11. Nahradením každého bloku tohto obvodu zodpovedajúcim operátorom podľa pravidla uvedeného v 12.2 a pridaním operátora DIM získame program uvedený nižšie. Po oboznámení sa s týmto programom odporúčame, aby si čitateľ sám vytvoril program na riešenie problému 10.7 a porovnal ho s nižšie uvedeným:

  • 10 REM SUMA
  • 20 DIM B(3, 3), S(2)
  • 30 VYTLAČIŤ "ZADAJTE MATER. IN(3, 3)"
  • 4 0 INPUT B(1, 1), B(1, 2), B(1, 3)
  • 50 INPUT V(2, 1), V(2, 2), V(2, 3)
  • 60 INPUT V(3, 1), V(3, 2), V(3, 3)
  • 70 S(1) = B (1, 1) + B (1, 2) + B (1, 3)
  • 80 S (2) = B (1, 3) + B (2, 3) + B (3, 3)
  • 90 VYTLAČIŤ "S(1)="; S(1); "S(2)=";
  • S (2)
  • 100 KONIEC
  • 10 REM SHIFT 20 DIM B(4)
  • 30 VYTLAČIŤ „ZADAJ POLE DO (4)“
  • 40 INPUT B(1), B(2),
  • 50 D=B(1)
  • 60 V(1)=V(2)
  • 70 V(2)=V(3)
  • 80 V (3) = V (4)
  • 90 V(4)=D
  • 100 TLAČ "ARAY B=(";
  • 110 TLAČ B(1); AT 2);

AT 3); AT 4); ")"

Kontrolné otázky

  • 1. Ktorý operátor v BASICu označuje typ a veľkosť poľa?
  • 2. Aký je zápis prvkov poľa v BASICu? Aká je najmenšia hodnota indexu prvku poľa?

Problémy riešiť samostatne

  • 2. Vypočítajte aritmetický priemer premenných V, C I.
  • 3. Robotníci Ivanov a Petrov vyrobili počas zmeny diely A a B, čo prevyšovalo normu. Určte percento prekročenia normy (norma - Z dielov za zmenu).
  • 4. Určte rozdiel vo veku neviest pre dvoch bratov Petya a Dima. Ich vek A A b resp. Vek nevesty sa určuje podľa vzorca

kde (7 je vek ženícha.

5. Vypočítajte hodnotu y:

Kde

Prijmime kf 0; g,f 0.

  • 6. Vypočítajte objem a povrch valca s priemerom O a výška N.
  • 7. Vypočítajte si náklady na nábytkovú zostavu obsahujúcu štyri stoličky, dve kreslá a jeden stôl. Náklady na produkty sú A, B a C rub.
  • 8. Určte aritmetický priemer prvkov poľa C(1:5).
  • 9. Určte súčin súčtu prvkov každého riadku matice P(1:2, 1:3).
  • 10. Preusporiadajte zodpovedajúce prvky prvého a druhého riadku matice A (1:2, 1:2).
  • 11. Preusporiadajte prvky poľa R(1:6): 1. prvok a 6., 2. a 5., 3. a 4. prvok.


Načítava...
Hore