Arrays și subrutine

Arrays: umplere și sortare

Familiarizarea cu matrice

nbsp nbsp nbsp nbsp nbsp Arrays, în general, sunt unul dintre cele mai dificile subiecte de programare pentru începători. De fapt, principalul lucru este să înțelegi și apoi totul va merge ca un ceas (bine, pentru cineva ca, bineînțeles!). Deci citiți următorul text după cum puteți.







nbsp nbsp nbsp nbsp nbsp Deci, o matrice este un set de date omogene (numere, simboluri, cuvinte), care are un nume și o numerotare consecutivă a elementelor sale. De exemplu, o listă de studenți - o matrice, un student 1 - un astfel de student, un student 5 - un astfel de student, un student 18 - un astfel de; sau alfabetul - litera 1 - "A", litera 5 - "D", litera 15 - "H", litera 7 - "E". Deoarece matricea din computer este reprezentată fizic, nu voi spune, dar în mod oficial - voi spune. Aceasta este ceea ce trebuie să învățați.

nbsp nbsp nbsp nbsp nbsp Dacă avem nevoie de o matrice, atunci trebuie să definim parametrii - numele, dimensiunea și tipul de date din acesta - de către operatorul DIM în BASIC (DIM - de la "dimensiunea" engleză). De exemplu, avem nevoie de o mulțime COUNT de 20 de numere întregi. scrieți DIM COUNT (20) DE INTEGER. Sau aceeași COUNT, dar constând din 47 de variabile de șir. Se scrie DIM COUNT $ (47) din STRING - după numele matricei cu șiruri de caractere, precum și după numele variabilei șir, se introduce simbolul "$". În Pascal, matricea este specificată după cum urmează: ArrayName: Array [0..Number of Elements] de tip - și este scris în secțiunea declarației Var.

nbsp nbsp nbsp nbsp nbsp Să trecem la un exemplu concret. Să presupunem că avem un tabel cu temperaturile medii pentru fiecare zi dintr-un anumit an. Fiecare temperatură din fiecare zi este înregistrată în variabilele Day1, Day2, Day3. Day365. Este necesar să se găsească temperatura medie anuală. Poate fi scris ca: SRED: = (Ziua1 + Ziua2 + Ziua 3 + + Day365.) / 365, dar vă poate aduce toate datele într-o matrice de dimensiune 365, și apoi prin calcularea sumei tuturor temperaturii, se împarte la 365. De asemenea, este mai ușor? Ei bine, aici. Singurul Pascal negativ - dimensiunea matrice este dat înainte de program, nu se schimbă în timpul programului, și în BASIC, puteți adăuga la o dimensiune variabilă dorită de matrice, și apoi începe imediat matrice în acea dimensiune.

nbsp nbsp nbsp nbsp nbsp Indicele în mese în diferite limbi este indicat în moduri diferite. Deci, în BASIC, indicele unei variabile dintr-o matrice este notată cu parantezele "()", iar în pascal - cu parantezele pătrate "[]". Deci, ce avem pe arrays:

  • matricea are un nume dat de programator;
  • matricea are un tip care este definit de un nume (numai în BASIC) - adică, dacă matricea este un fișier text, atunci după numele său trebuie introdus simbolul "$";
  • matricea are o dimensiune, adică numărul elementelor din ea;
  • matricea are o indexare secvențială secvențială a elementelor ei constituente;
  • fiecare element are o valoare (nume, literă, temperatură - în exemplele anterioare).

Instrucțiunea DIM pentru fiecare matrice specifică trebuie specificată o singură dată în program înainte de prima accesare a acesteia.

De fapt, numerotarea elementelor matricei pornește de la zero, dar este mai convenabil și convenabil pentru noi să începem numerotarea din unitate. Aceasta, în general, nu este ilegală - puteți începe numerotarea de la 5 și 10 și cel puțin cu un element. În principiu, puteți specifica numărul primului element din fiecare matrice (numai în BASIC) - OPTION BASE n, unde n este numărul primului element din fiecare matrice.

Completarea matricelor unidimensionale și afișarea acestora pe ecran

nbsp nbsp nbsp nbsp nbsp Să ne uităm la programul de umplere a matricei și afișarea acesteia pe ecran:

nbsp nbsp nbsp nbsp nbsp Să ne dăm seama în ordine. Prima linie cere dimensiunea matricei noi după ștergerea ecranului. Apoi creează o nouă matrice MASS cu dimensiunea elementelor N - adică câți am introdus. Apoi, într-un ciclu, ne întreabă fiecare element. Am completat matricea și toate elementele cu nume MASS (1), MASS (2), MASS (3) sunt stocate în memorie. MASS (N). După aceasta, este imprimat un șir gol pentru a pune granița dintre setul de matrice și ieșirea acestuia pe ecran. Apoi, într-o buclă, fiecare element al matricei este afișat pe ecran într-o singură linie. În ciclul de matrice de intrare poate livra operatorului de atribuire MASS (I) = INT (RND (100)), de exemplu - în cazul în care nu doriți să tastați toate elementele - computerul doar pentru a umple întreaga matrice este arbitrară.







nbsp nbsp nbsp nbsp nbsp După cum am spus, principalul lucru este de a înțelege. Dacă înțelegeți, continuați cu îndrăzneală.

Cea mai simplă sortare

nbsp nbsp nbsp nbsp nbsp Una dintre operațiile de bază pe matrice este sortarea acestora, și anume, ordonarea elementelor de matrice pe baza unui statut, cel mai adesea, în ordine crescătoare sau descrescătoare - pentru numere, iar alfabetul - pentru caracterele si liniile.

nbsp nbsp nbsp nbsp nbsp Există o mulțime de modalități diferite de sortare, dar vom lua în considerare doar două dintre ele - cele mai simple, dar, din păcate, nu cele mai eficiente.

Prima modalitate este de a sorta după alegere.

nbsp nbsp nbsp nbsp nbsp Să presupunem că, având în vedere o matrice numerică a dimensiunii N, avem nevoie să sortim elementele în ordine ascendentă. Deci, esența acestei metode este după cum urmează: Găsiți elementul maxim și puneți-l în locul său - în ultimul rând, după care vom reduce matricea considerată cu 1, deoarece un element este deja în locul său. Repetați din nou acest caz, apoi din nou și mai mult. Și așa - N-1 ori.

nbsp nbsp nbsp nbsp nbsp Luați în considerare un exemplu concret. Să dăm o serie de cinci elemente: 8 4 9 6 7. Acum mergeți la proces:
  • 8 4 7 6 9
  • 6 4 7 8 (9)
  • 6 4 7 (8) (9)
  • 4 6 (7) (8) (9)

nbsp nbsp nbsp nbsp nbsp Al doilea mod de sortare este metoda de schimb sau "bubble". Programul compară elementele matricei în perechi și, în cazul în care acestea nu sunt în ordine ascendentă, le schimbă în locuri. Maximul (N-1) din pătratul permutărilor se află în "cel mai rău caz" - când toate elementele sunt aranjate în ordine descrescătoare.

nbsp nbsp nbsp nbsp nbsp Încercați să implementați aceste metode de sortare.

Dispozitive bidimensionale

DIM S (4,3) \ Var S: Array [0..5,0..3] de Integer;

nbsp nbsp nbsp nbsp nbsp În continuare - totul este același ca și în cazul machetelor obișnuite unidimensionale, doar puțin mai complicat. Umplerea lor este de asemenea ușoară.

Completarea matricelor bidimensionale și afișarea acestora pe ecran

nbsp nbsp nbsp nbsp nbsp În procesarea matricelor bidimensionale în loc de un singur ciclu, două sunt folosite, una în cealaltă.

Luați în considerare un exemplu de umplere a unei matrice bidimensionale X (3.5) cu numere întregi de la 1 la 20, și apoi ieșirea pe un ecran ca tabel.

nbsp nbsp nbsp nbsp nbsp Deci, cu matricea, ne-am dat seama, sa trecem la subrutine.

subrutine

Și ce este asta?

nbsp nbsp nbsp nbsp nbsp Uneori, în anumite locuri, este necesar să executați aceeași ordine a unor operatori, cu date inițiale diferite. Pentru aceasta folosim subrutine (din subrutina engleza).

nbsp nbsp nbsp nbsp rutinele nbsp reduce cantitatea de programe de text accelerează semnificativ procesul activității sale, precum și să faciliteze activitatea de programatori care nu doresc cu adevărat să tastați o secvență de declarații de mai multe ori, care poate colecta un program modular, adică, a pieselor finite - rutine. Acest lucru vă permite să creați programe mari pentru un grup de programatori.

nbsp nbsp nbsp nbsp nbsp Considerați o subrutină pentru calculul unei astfel de expresii: Z = N! / (M! * (N-M)!). Variabilele N și M, precum și expresia (N-M) sunt echipate cu un semn de exclamare, ceea ce înseamnă factorial (produsul tuturor numerelor până la acest număr, dacă nu știm). În expresie, avem de trei ori să ne referim la subprogramul de calcul factorial, în timp ce facem aceleași acțiuni cu numere diferite. Subrutina descrie calculul factorialului și apoi de trei ori în programul însuși, se fac diferite operații cu valori diferite obținute în această subrutină. Să vedem:

nbsp nbsp nbsp nbsp nbsp Ca întotdeauna, analizăm linia după linie. Începutul este standard - curățarea ecranului și solicitarea datelor de intrare. Apoi distracția începe. Există un apel la subrutina FACT, care calculează factorul. Variabila K este un parametru al subrutinei FACT. În programul principal, atribuim la variabila K valoarea variabilei N, pentru care se calculează primul factorial. Apelul către subrutină este efectuat de operatorul GOSUB, după care este indicat numele subprogramului la care doriți să mergeți (avem FACT). Subrutina execută toate acțiunile din ea și găsește factorialul, după care operatorul RETURN returnează interpretul în programul principal.

Operatorul RETURN transferă controlul către programul principal operatorului, în urma apelării la subrutina GOSUB.

nbsp nbsp nbsp nbsp nbsp Rezultatul subrutinei este variabila P, în care se stochează valoarea factorialului. Rețineți prima valoare obținută (N-factorial) în variabila X1. Acest lucru trebuie făcut, pentru că subrutina va fi executată încă de două ori și de fiecare dată când se va schimba variabila P. Apoi repetați acțiunile pentru variabilele M și (N-M), respectiv. În plus, în acest din urmă caz, valoarea obținută a factorială nu mai este necesară pentru a-și aminti; mai multe apeluri către subrutină nu vor fi făcute. Totul! Rămâne doar să ieșiți valoarea expresiei pe ecran și să terminați programul.

Obișnuiți-vă să realizați programe independente sub formă de subrutine. Programarea cu subrutine este un stil bun! Vom vorbi despre un stil bun cu tine.

nbsp nbsp nbsp nbsp nbsp Voi spune cateva cuvinte despre subrutine in QBasic rusesc. V-am arătat cea mai ușoară cale de a scrie și de a folosi subrutine, dar dacă vă simțiți puternică, încercați să vă ocupați de unelte de bază puternice pentru scrierea de subrutine, cum ar fi DECLARE SUB și CALL SUB. Nu vei regreta!

nbsp nbsp nbsp nbsp nbsp Cu arrays și subrutine, se pare, sortate. Să mergem mai departe! .







Articole similare

Trimiteți-le prietenilor: