Pascal popunjava niz. Jednodimenzionalni nizovi

22.03.2022

Do sada smo radili sa jednostavnim tipovima podataka - logički (boolean), integer (integer, word, byte, longint), real (real), karakter (char). Bilo koji algoritam se može programirati koristeći ova četiri osnovna tipa. Ali za obradu informacija o raznolikom stvarnom svijetu potrebni su podaci sa složenijom strukturom. Takve složene konstrukcije zasnovane na najjednostavnijim skalarnim tipovima nazivaju se strukture. Struktura je neki kompozitni tip podataka sastavljen od osnovnih skalarnih. Ako struktura ne mijenja svoju strukturu tijekom cijelog izvršavanja programa u kojem je opisana, tada se takva struktura naziva statičkom.

Niz – homogena kolekcija elemenata

Najčešća struktura, implementirana u gotovo svim programskim jezicima, je niz.

Nizovi se sastoje od ograničenog broja komponenti, a sve komponente niza imaju isti tip, koji se naziva osnovni tip. Struktura niza je uvijek uniformna. Niz se može sastojati od elemenata tipa integer, real ili char ili drugih elemenata istog tipa. Međutim, iz ovoga ne treba zaključiti da komponente niza mogu imati samo skalarni tip.

Još jedna karakteristika niza je da se bilo kojoj njegovoj komponenti može pristupiti na bilo koji način. Šta to znači? Program može odmah dobiti element koji mu je potreban po njegovom serijskom broju (indeksu).

Indeks niza

Poziva se broj elementa niza index. Indeks je vrijednost ordinalnog tipa, definirana kao tip indeksa ovog niza. Vrlo često je to cjelobrojni tip (cijeli broj, riječ ili bajt), ali može biti i logički i karakterni.

Opis niza u Pascalu. U Pascalu, tip niza je specificiran pomoću posebne riječi niz(engleski – niz), a njegova deklaracija u programu izgleda ovako:

Tip< имя _ типа >= niz [I] od T;

gdje je I tip indeksa niza, T je tip njegovih elemenata.

Može se opisati odmah varijable tipa niz, tj. u odjeljku opisa varijable:

Var a,b: niz [I] od T;

Tipično, tip indeksa karakterizira određeni raspon vrijednosti bilo kojeg ordinalnog tipa: I 1 .. I n . Na primjer, indeksi mogu varirati u rasponu od 1..20 ili "a ".." n".

U ovom slučaju, dužinu Pascal niza karakterizira izraz:

ord (I n)- ord (I 1)+1.

Evo, na primjer, deklaracija dva tipa: vektor kao Pascal niz od 10 cijelih brojeva i string kao niz od 256 znakova:

Tip
Vektor=niz cijelih brojeva;
Stroka=niz char;

Koristeći indeks niza, možete pristupiti pojedinačnim elementima bilo kojeg niza kao da su regularna varijabla: možete dobiti vrijednost tog elementa, dodijeliti mu vrijednost zasebno i koristiti je u izrazima.

Hajde da opišemo varijable tipa vektora i nizova:

Izračunavanje Pascal Array indeksa

Indeks niza u Pascalu ne mora biti eksplicitno specificiran. Možete koristiti varijablu ili izraz koji odgovara tipu indeksa kao indeks niza. Drugim riječima, indeksi se mogu izračunati.

Ovaj mehanizam je veoma moćan alat za programiranje. Ali stvara uobičajenu grešku: rezultat izračuna može biti izvan raspona važećih vrijednosti indeksa, odnosno pokušat će se pristupiti elementu koji ne postoji. Ovo tipična greška naziva se "izvan granica niza".

Primjer programa sa greškom Pascal niza

Program primer_error;
Tip
vektor=niz riječi;
var
n:integer;
a:vektor;
početi
n:=45;
a:=25;
kraj.

Iako ovaj program u potpunosti odgovara sintaksi jezika, a prevodilac će to "promašiti" u fazi izvršavanja, doći će do greške kada je Pascal niz izvan granica. Kada je n = 45, izraz n * 2 = 90, računar će pokušati da pristupi elementu niza a, ali takvog elementa nema, jer je opisan niz dimenzije 80.

Pretpostavićemo to dobar program treba prikazati poruku upozorenja ako se pokuša pristupiti nepostojećim elementima niza. Ne bi škodilo provjeriti mogući izlaz i desnu i lijevu granicu niza, jer je moguće da će kao rezultat izračunavanja vrijednosti izraza rezultat biti broj koji se nalazi lijevo od granice Pascalovog niza.

Iz svega ovoga možemo zaključiti: programer mora biti veoma oprezan kada radi sa nizom indeksa.

Osnovne operacije sa Pascal nizovima

Kao što znate, definisanje tipa podataka znači ograničavanje opsega dozvoljenih vrednosti, internu reprezentaciju u računaru, kao i skup dozvoljenih operacija nad podacima ovog tipa. Definirali smo tip podataka kao Pascal niz. Koje su operacije definirane na ovom tipu podataka? Jedina radnja koja se može izvršiti na cijelim nizovima, i samo ako su nizovi istog tipa, je dodjela. Ako program opisuje dvije varijable istog tipa, npr.

Var
a , b: niz realnih;

tada možete koristiti varijablu a dodijeliti vrijednost varijabli b(a:= b). U ovom slučaju, svaki element niza a bit će dodijeljena odgovarajuća vrijednost iz niza b. Sve ostale akcije na Pascal nizovima se izvode element po element (važno je!) .

Pascal niz ulaz

Da biste unijeli vrijednosti elemenata niza, morate uzastopno mijenjati vrijednost indeksa, počevši od prvog do posljednjeg, i unijeti odgovarajući element. Za provedbu ovih radnji zgodno je koristiti petlju s određenim brojem ponavljanja, tj. jednostavna aritmetička petlja, gdje će parametar petlje biti varijabla - indeks Pascal niza. Vrijednosti elemenata se mogu unijeti s tipkovnice ili specificirati pomoću operatora dodjele.

Primjer fragmenta programa za unos Pascal niza

Var
A: niz cijelih brojeva;
Počni
Za i:=1 do 10 do
Readln(a[i]); (i-ti element se unosi sa tastature)

Razmotrimo sada slučaj kada se Pascal niz automatski popunjava slučajni brojevi, za ovo ćemo koristiti funkciju nasumično (N).

Primjer fragmenta programa za popunjavanje Pascal niza slučajnim brojevima

Var
I: bajt ; (promenljiva I se unosi kao indeks niza)
Počni
Za i:=1 do 10 do
A[i]:= random(10); (i-om elementu niza je dodijeljen "slučajni" cijeli broj u rasponu od 0 do 10)

Pascal niz izlaz

Izlaz niza u Pascalu se također izvodi element po element, u petlji, gdje je parametar indeks niza, uzimajući uzastopno sve vrijednosti od prve do posljednje.

Primjer fragmenta Pascal niza izlaznog programa

Var
A: niz cijelih brojeva;
I: bajt ; (promenljiva I se unosi kao indeks niza)
Počni
Za i:=1 do 10 do
Write(a[i]," "); (niz se ispisuje u red, razmak se ispisuje nakon svakog elementa)

Izlaz se također može napraviti u stupcu koji označava odgovarajući indeks. Ali u ovom slučaju morate uzeti u obzir da ako je niz velik, svi elementi možda neće stati na ekran i doći će do pomicanja, tj. Kada se popune sve linije ekrana, sledeći element će biti odštampan, a gornji će biti pomeren sa ekrana.

Primjer programa za prikaz Pascal niza u koloni

Var
A: niz cijelih brojeva;
I: bajt ; (promenljiva I se unosi kao indeks niza)
Počni
Za i:=1 do 10 do
Writeln("a[", i,"]=", a[i]); (prikazivanje elemenata niza u koloni)

Na ekranu ćemo vidjeti, na primjer, sljedeće vrijednosti:

a =2
a =4
a =1, itd.

Primjer rješavanja problema korištenjem Pascal nizova

zadatak: data su dva n-dimenzionalna vektora. Nađite zbir ovih vektora.

Rješenje problema:

  • Ulazni podaci u ovom problemu će biti dva jednodimenzionalna niza. Veličina ovih nizova može biti proizvoljna, ali sigurna. One. možemo opisati namjerno veliki niz, a u programu odrediti koliko će elemenata zapravo biti korišteno. Elementi ovih nizova mogu biti cijeli brojevi. Tada će opis izgledati ovako:

    var a, b: niz cijelih brojeva;

  • Izlaz će biti elementi rezultirajućeg niza, nazovimo ga c . Tip rezultirajućeg niza također mora biti cijeli broj.
  • Pored tri niza, biće nam potrebna varijabla - parametar petlje i indeks niza, nazovimo ga i, kao i varijabla n za određivanje broja elemenata u svakom nizu.

Napredak u rješavanju problema:

  • Odredimo broj elemenata (dimenzija) nizova, unesemo vrijednost n;
  • hajde da uvedemo niz a;
  • uvedemo niz b;
  • u petlji, iterirajući kroz vrijednosti indeksa i od 1 do n, izračunavamo sekvencijalno vrijednosti elemenata niza c koristeći formulu:

    c [ i ]= a [ i ]+ b [ i ];

  • Hajde da prikažemo rezultujući niz na ekranu.

Tekst programa:

Primjer programa vektorske sume

program summa;
Var
a, b, c: niz cijelih brojeva;
I, n: bajt;
Počni
Write("unesite veličinu niza:");
Readln(n);
Za i:=1 do n do
Readln(a[i]); (unos niza a)
Za i:=1 do n do
Readln(b[i]); (ulaz niza b)
Za i:=1 do n do
C[i]:=a[i]+b[i]; (izračunavanje sume nizova)
Za i:=1 do n do
napiši(c[i],""); (izlaz niza sa)
kraj.

1 Metod (puna tastature. Dinamičnaunospodaci)

M: niz cijelih brojeva;

Za I:=1 do 10 Počnite

Write("Unesite ",I," vrijednost ");

2 Metod (koristeći generator slučajnih brojeva)

M: niz cijelih brojeva;

Za I:=1 do 25 Počnite

M[I]:=Random(50);

3 Metod (statički unos podataka)

M: niz cijelih brojeva = (31,28,31,30,31,30,31,31,30,31,30,31);

Za I:=1 do 9 Do

1.4 Primjeri rješavanja problema

1. Algoritmi za pretraživanje i dodjeljivanje vrijednosti elementima niza

1. Kreirajte program za obradu niza dimenzije n ispunjenih cijelim brojevima unesenim s tastature. Ispišite indekse i vrijednosti pozitivnih elemenata niza.

A:NIZ INTEGER;

(Popunjavanje niza)

FOR I:=1 TO N DO Počni

Write("Enter ",I," element niza "); ReadLn(A[I]);

(Obrada elemenata niza)

ZA I:=1 DO N RADITI

IF A[I]>0 THEN WriteLn("Pozitivan element = ",A[I]," njegov indeks = ",I);

2. Kreirajte program za izračunavanje i ispis vrijednosti funkcije Y=sin(x-1)/2x. Postavite vrijednosti argumenata u nizu X koji se sastoji od 6 elemenata. Upišite vrijednosti funkcije u Y niz.

X,Y:NIZ REAL;

FOR I:=1 DO 6 DO Počni

Write("Unesite ",I," vrijednost argumenta "); ReadLn(X[I]);

FOR I:=1 DO 6 DO Počni

Y[I]:=SIN(X[I]-1)/(2*X[I]);

WriteLn(" X= ",X[I]:4:1," Y=",Y[I]:5:2);

3. Dat je niz M, koji se sastoji od 30 elemenata. Elementi niza su proizvoljni cijeli brojevi. Prikažite vrijednost svakog petog i pozitivnog elementa. Iznesite navedene elemente u string.

M:NIZ INTEGER;

ClrScr; Randomize;

WriteLn("Vrijednosti elementa niza");

ZA I:=1 DO 30 POČNI

M[I]:=Random(20)-4; Napiši(M[I]:3);

WriteLn("Vrijednosti svakog petog i pozitivnog elementa niza");

Dok sam ja<=30 DO Begin

AKO M[I] > 0 THEN Write(M[I]:3);

Primjeri za nezavisna rješenja:

    Dat je jednodimenzionalni niz dimenzije 10, ispunjen cijelim brojevima unesenim s tastature, i vrijednošću N. Zamijenite negativne elemente sa N. Prikažite izmijenjeni niz u jednom redu.

    Dat je jednodimenzionalni niz dimenzije N, ispunjen slučajnim brojevima u rasponu od -15 do 20. Prikaži vrijednosti elemenata niza čija je apsolutna vrijednost >10.

    Dat je jednodimenzionalni niz dimenzije N, ispunjen slučajnim brojevima. Kvadratirajte svaki treći element niza ako je element negativan. Prikažite modifikovani niz na ekranu.

    Kreirajte program za izračunavanje i ispis vrijednosti funkcije Y=(sinx+1)cos4x. Postavite vrijednosti argumenata u nizu X koji se sastoji od 10 elemenata. Upišite vrijednosti funkcije u Y niz.

    Od elemenata niza A, koji se sastoji od 25 elemenata, formirajte niz D iste dimenzije po pravilu: prvih 10 elemenata nalazi se po formuli Di=Ai+i, ostali - po formuli Di=Ai -i.

Lekcija objašnjava kako raditi s jednodimenzionalnim nizovima u Pascalu, kako koristiti generator slučajnih brojeva - funkciju nasumično Pascal. Razmatran je primjer kako se izvode Fibonačijevi brojevi.


Materijali na stranici su usmjereni na praktično savladavanje programskog jezika Pascal. Kratke teorijske informacije ne pretenduju na potpunu pokrivenost materijala o ovoj temi; potrebne informacije možete pronaći na Internetu na adresi velike količine. Naši zadaci uključuju pružanje mogućnosti za stjecanje praktičnih vještina programiranja u Pascalu. Riješeni vizualni primjeri i zadaci prikazani su po sve većoj složenosti, što će olakšati proučavanje gradiva od nule.

Deklaracija niza

Postoje dvije vrste nizova u Pascalu: jednodimenzionalni i dvodimenzionalni.
Definiranje jednodimenzionalnog niza u Pascalu zvuči ovako: jednodimenzionalni niz je određeni broj elemenata koji pripadaju istom tipu podataka, koji imaju isto ime, a svaki element ima svoj indeks - serijski broj.
Opis niza u Pascal-u (deklaracija) i pristup njegovim elementima je sljedeći:

Deklaracija niza

dužina var: niz [ 1 .. 3 ] od cijelog broja; početna dužina [ 1 ] : = 500 ; dužina[ 2 ] : = 400 ; dužina[ 3 ] : = 150 ; ...

dužina var: niz cijelih brojeva; dužina početka:=500; dužina:=400; dužina:=150; ...

  • dlina — identifikator niza (ime);
  • za deklaraciju se koristi službena riječ Array (prevedena s engleskog kao "niz" ili "skup");
  • - u uglastim zagradama stavlja se broj (indeks) prvog elementa, zatim dvije tačke i indeks posljednjeg elementa niza, tj. u suštini, naznačen je broj elemenata; broj elemenata u nizu se poziva dimenzija niza
  • od integer (od engleskog “od integers”) - označava koji je tip niz, ovdje je pomoćna riječ.
  • Najaviti veličina se može koristiti kroz konstantu:

    Inicijalizacija niza

    Osim toga, sam niz može biti konstantan, tj. svi njegovi elementi u programu su unapred određeni. Opis takvog niza izgleda ovako::

    const a: niz [ 1 .. 4 ] od cijelog broja = (1, 3, 2, 5) ;

    const a: niz cijelih brojeva = (1, 3, 2, 5);

    Popunjavanje uzastopnim brojevima:

    Rezultat: A = 8, A = 9, A = 10, ..., A[N] = A + 1

    Unos sa tastature:

    primjer: Pogledajmo kako se niz upisuje u Pascal:

    writeln("unesite broj elemenata: "); readln(n); (ako količina nije poznata unaprijed, tražimo je) for i:= 1 do n do begin write("a[", i, "]="); pročitaj(a[i]); ...kraj; ...


    ✍ Primjer rezultata:

    Unesite broj elemenata: 3 a=5 a=7 a=4

    Štampanje elemenata niza

    primjer: Pogledajmo kako prikazati niz u Pascalu:

    1 2 3 4 5 6 7 8 9 10 11 12 13 var a: niz [ 1 .. 5 ] od cijelog broja; (niz od pet elemenata) i:integer ; započeti a[ 1 ] : = 2 ; a[ 2 ] : = 4 ; a[ 3 ] : = 8 ; a[ 4 ] : = 6 ; a[ 5 ] : = 3 ; writeln("Niz A:"); za i : = 1 do 5 upiši (a[ i] : 2 ) ; (izlaz elemenata niza) kraj.

    var a: niz cijelih brojeva; (niz od pet elemenata) i: cijeli broj; započeti a:=2; a:=4; a:=8; a:=6; a:=3; writeln("Niz A:"); za i:= 1 do 5 do write(a[i]:2); (elementi izlaznog niza) kraj.

    ✍ Primjer rezultata:

    Niz A: 2 4 8 6 3

    Za rad sa nizovima najčešće se koristi u Pascalu sa parametrom, pošto obično znate koliko elemenata ima u nizu, a kao indekse elemenata možete koristiti brojač petlje.

    Niz 0 zadatak. Morate navesti pravi niz dimenzija 6 (tj. šest elemenata); ispunite niz ulaznim vrijednostima i prikažite elemente na ekranu. Koristite dvije petlje: prvu za unos elemenata, drugu za izlaz.


    IN u ovom primjeru Rad s jednodimenzionalnim nizom ima očiglednu neugodnost: dodjeljivanje vrijednosti elementima.

    Obrada nizova u Pascalu, kao i popunjavanje niza, obično se dešava pomoću for petlje.

    Slučajna funkcija u Pascalu

    Kako se ne bi stalno tražile vrijednosti elemenata niza, koristi se generator slučajnih brojeva u Pascalu, koji se implementira pomoću funkcije Random. Zapravo, generišu se pseudoslučajni brojevi, ali to nije poenta.

    Za generiranje brojeva od 0 do n (ne uključujući vrijednost samog n, cijeli brojevi u intervalu cijelog broja; i:integer; počnite randomizirati; za i:=1 do 10 početi f[i]:=random(10); (interval) write(f[i],"" end;

    ✍ Primjer rezultata:

    9 8 9 2 0 3 6 9 5 0

    Za realni brojevi u intervalu i prikaz elemenata na ekranu: definirajte tri pozicije za prikaz svakog elementa.

    Fibonačijevi brojevi u Pascalu

    Najčešći primjer rada s nizom je izlaz niza Fibonačijevih brojeva u Pascalu. Hajde da to razmotrimo.

    primjer: Fibonačijev niz brojeva: 1 1 2 3 5 8 13…

    f[ 0 ] : = 1 ; f[ 1 ] : = 1 ; f[ 2 ] : = 2 ; ...

    f:=1; f:=1; f:=2; ...

    f[ 2 ] : = f[ 0 ] + f[ 1 ] ; f[ 3 ] : = f [ 1 ] + f [ 2 ] ;
    f[ i] : = f[ i- 2 ] + f[ i- 1 ] ;

    f[i]:=f+f;

    Dobili smo formulu za elemente serije.

    primjer: Izračunajte i odštampajte prvih 20 Fibonačijevih brojeva.

    1 2 3 4 5 6 7 8 9 10 11 var i: cijeli broj; f: niz [0 .. 19] od cijelog broja; početak f[ 0 ] : = 1 ; f[ 1 ] : = 1 ; za i: = 2 do 19 počinje f[ i] : = f[ i- 1 ] + f[ i- 2 ] ; writeln (f[ i] ) end ; kraj.

    var i:integer; f: niz cijelih brojeva; početak f:=1; f:=1; za i:=2 do 19 počinje f[i]:=f+f; writeln(f[i]) end; kraj.

    U ovom primjeru postaje jasan princip rada sa nizovima brojeva. Obično se za izvođenje niza brojeva nađe formula za određivanje svakog elementa ovog niza. Dakle, u slučaju Fibonačijevih brojeva, ovo pravilo-formulo izgleda kao f[i]:=f+f. Stoga se mora koristiti u za petlju prilikom formiranja elemenata niza.

    Zadatak niza 2. Dat je red od 10 proizvoljno brojevi: a, a, ... , a (koristite funkciju random()). Izračunajte i ispišite zbir trojki susjednih brojeva: a+a+a, a+a+a, a+a+a, ……, a+a+a

    pseudokod:

    Pronalaženje maksimalnog elementa po njegovom indeksu:


    Array_min zadatak: Pronađite minimalni element niza. Ispišite element i njegov indeks.

    Zadatak niza 4. Dat je niz od 10 cjelobrojnih elemenata. Pronađite broj negativnih i prikažite broj na ekranu.

    Zadatak niza 5. Pronađite minimum i maksimum od n unesenih brojeva (niz). Odredite udaljenost između ovih elemenata. 3 2 6 1 3 4 7 2 >>> min=1, max=7, udaljenost=3

    Zadatak niza 6. Dat je cijeli niz veličine N. Izlaz sve sadržano u ovaj niz parni brojevi u opadajućem redoslijedu njihovih indeksa, kao i njihov broj K. N=4 mas: 8 9 2 5 >>> 2 8 količina= 2

    Zadatak niza 7. Unesite niz od 5 elemenata sa tastature, pronađite dva maksimalna elementa i njihove brojeve u njemu.

    primjer:

    Početni niz: 4 -5 10 -10 5 maksimalno A=10, A=5

    Traži u nizu

    Pogledajmo složen primjer rada s jednodimenzionalnim nizovima:

    primjer: Dat je niz od 10 brojeva. Odredite da li je broj koji je unio korisnik u nizu. Ako postoji, ispišite "pronađeno", ako ne - "nije pronađeno".
    Poteškoća zadatka je u tome da se odštampaju reči "pronađeno" ili "nije pronađeno" potrebno jednom.


    Da biste riješili ovaj problem, trebat će vam naredba break za izlazak iz petlje.
    Opcija rješenja 1. For petlja:

    Pokaži rješenje

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var f: niz [ 1 .. 10 ] od cijelog broja; flag:boolean ; i, c: cijeli broj; početi randomizirati; za i: = 1 do 10 počinje f[ i] : = random(10) ; napisati (f[ i] , " " ) ; end ; zastava: = false ; pisati( "unesi uzorak") ; readln(c); za i: = 1 do 10 uradi ako je f[ i] = c onda počni writeln ("pronađeno"); zastava: = istina ; break ; kraj ; ako je flag= false onda writeln ("nije pronađeno"); kraj.

    var f: niz cijelih brojeva; flag:boolean; i,c:ceo broj; početi randomizirati; za i:=1 do 10 počinje f[i]:=random(10); napisati(f[i]," "); kraj; flag:=false; writeln("unesite uzorak"); readln(c); za i:=1 do 10 uradi ako f[i]=c onda započni writeln("found"); flag:=true; break; kraj; ako je flag=false onda writeln("nije pronađeno"); kraj.

    Hajde da razmotrimo efikasno rešenje:

    zadatak: pronaći element jednak X u nizu, ili utvrditi da ne postoji.

    algoritam:

    • početi od 1. elementa (i:=1);
    • ako je sljedeći element (A[i]) jednak X, onda završite pretragu, inače idite na sljedeći element.

    rješenje u Pascal Opciji 2. while petlja:

    Pozivamo vas da pogledate detaljnu video analizu traženja elementa u nizu (efikasan algoritam):

    Zadatak niza 8. Popunite niz od 10 elemenata slučajnim brojevima u intervalu i ispišite brojeve svih elemenata jednake X.

    primjer:

    Početni niz: 4 0 1 2 0 1 3 4 1 0 Šta tražimo? 0 A, A, A

    Ciklična promjena

    primjer: pomaknite elemente niza ulijevo za 1 poziciju, prvi element zamjenjuje zadnji.



    Rješenje:

    algoritam:
    A:=A; A:=A;… A:=A[N];

    Program:

    Zadatak niza 9. Popunite niz od 10 elemenata slučajnim brojevima u intervalu [-10..10] i izvršite ciklički pomak ulijevo bez prvog elementa.
    primjer: Početni niz: 4 -5 3 10 -4 -6 8 -10 1 0 Rezultat: 4 3 10 -4 -6 8 -10 1 0 -5

    Preuređivanje elemenata u nizu

    Pogledajmo kako je niz preuređen ili obrnut.

    primjer: preurediti elemente niza obrnutim redoslijedom


    Rješenje:

    algoritam:

    pseudokod:

    Program:

    Zadatak niza 10. Popunite niz od 10 elemenata slučajnim brojevima u intervalu [-10..10] i obrnite sve elemente osim posljednjeg.
    primjer: Izvorni niz: -5 3 10 -4 -6 8 -10 1 0 4 Rezultat: 0 1 -10 8 -6 -4 10 3 -5 4

    Odabir elemenata i spremanje u drugi niz

    primjer: pronađite elemente u nizu koji zadovoljavaju neki uslov (na primjer, negativan) i kopirajte ih u drugi niz

    Rješenje:

    Rješenje: prebrojite broj pronađenih elemenata pomoću brojača brojača, instalirajte sljedeći element na mjesto B. Koristeći varijablu count mora biti dodijeljen 1 .


    Izlaz niza B:

    writeln("Odabrane stavke"); za i:=1 za brojanje-1 upiši (B[i], " ")

    Zadatak niza 11. Popunite niz slučajnim brojevima u intervalu i upišite u drugi niz sve brojeve koji završavaju na 0.
    primjer: Izvorni niz: 40 57 30 71 84 Završava sa 0: 40 30

    Sortiranje elemenata niza

    Bubble sorting

    • U ovoj vrsti sortiranja, niz je predstavljen kao voda, mali elementi su mehurići u vodi koji plutaju do vrha (najlakše).
    • Tokom prve iteracije petlje, elementi niza se međusobno upoređuju u parovima: pretposljednji sa posljednjim, pretposljednji sa pretposljednjim, itd. Ako se prethodni element ispostavi da je veći od sljedećeg, tada se zamjenjuju.
    • Tokom druge iteracije petlje, nema potrebe da se poslednji element poredi sa pretposljednjim. Poslednji element je već postavljen, najveći je. To znači da će broj poređenja biti jedan manji. Isto važi i za svaku sledeću iteraciju.

    Izvođenje u Pascalu:

    1 2 3 4 5 6 7 8 za i: = 1 do N- 1 počinje za j: = N- 1 do i radi ako A[ j] > A[ j+ 1 ] onda počinje sa : = A[ j] ; A[ j] : = A[ j+ 1 ] ; A[ j+ 1 ] : = s; end ; end ;

    za i:=1 do N-1 počinje za j:=N-1 dolje do i radi ako A[j] > A onda počinje od:= A[j]; A[j] := A; A := c; kraj; kraj;

    Zadatak niza 12. Ispunite niz od 10 elemenata slučajnim brojevima u intervalu i sortirajte prvu polovinu niza uzlaznim redoslijedom, a drugu opadajućom (koristeći metodu 'Bubble'). primjer: Izvorni niz: 14 25 13 30 76 58 32 11 41 97 Rezultat: 13 14 25 30 76 97 58 41 32 11

    Sortiranje po izboru

    • minimalni element se pretražuje u nizu i stavlja na prvo mjesto (zamijenjena mjesta sa A);
    • Među preostalim elementima traži se i onaj minimalni, koji se stavlja na drugo mjesto (zamijenjena mjesta sa A) itd.

    početak c: = A[ i] ; A[ i] : = A[ min] ; A[ min] : = c; end ; end ;

    za i:= 1 do N-1 počinje min:= i ; za j:= i+1 do N uradi ako A[j]< A then min:=j; if min <>i tada počinjem c:=A[i]; A[i]:=A; A:=c; kraj; kraj;

    Zadatak niza 13: Ispunite niz od 10 elemenata slučajnim brojevima u intervalu i sortirajte ga uzlaznim redoslijedom zbira cifara primjer: Izvorni niz: 14 25 13 12 76 58 21 87 10 98 Rezultat: 10 21 12 13 14 25 76 58 87 98

    Brzo sortiranje ili brzo sortiranje

    algoritam:

    Izvođenje u Pascalu:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 procedura QSort (prva, zadnja: cijeli broj) ; var L, R, c, X: cijeli broj; početi ako prvi< last then begin X: = A[ (first + last) div 2 ] ; L: = first; R: = last; while L <= R do begin while A[ L] < X do L: = L + 1 ; while A[ R] >X do R: = R - 1 ; ako L<= R then begin c: = A[ L] ; A[ L] : = A[ R] ; A[ R] : = c; L: = L + 1 ; R: = R - 1 ; end ; end ; QSort(first, R) ; QSort(L, last) ; end ; end .

    procedura QSort(prvi, zadnji: cijeli broj); var L, R, c, X: cijeli broj; početi ako prvi< last then begin X:= A[(first + last) div 2]; L:= first; R:= last; while L <= R do begin while A[L] < X do L:= L + 1; while A[R] >X do R:= R - 1; ako L<= R then begin c:= A[L]; A[L]:= A[R]; A[R]:= c; L:= L + 1; R:= R - 1; end; end; QSort(first, R); QSort(L, last); end; end.

    Zadatak niza 14:
    Popunite niz od 10 elemenata slučajnim brojevima u rasponu [-50..50] i sortirajte ga pomoću algoritma brzog sortiranja.

    Elemente jednodimenzionalnog niza možemo ispuniti vrijednostima: unosom vrijednosti sa tastature; nasumično; prema formuli. Metode za specificiranje jednodimenzionalnih nizova Petlje se koriste za unos i izlaz vrijednosti numeričkog niza. Procedura uzima parametar prema referenci, Mssiv niz datog tipa i cjelobrojnu varijablu n odgovornu za broj ćelija niza koje treba popuniti. Formiranje jednodimenzionalnog niza nasumično.


    Podijelite svoj rad na društvenim mrežama

    Ako vam ovaj rad ne odgovara, na dnu stranice nalazi se lista sličnih radova. Možete koristiti i dugme za pretragu


    Punjenje.

    Elemente jednodimenzionalnog niza možemo ispuniti vrijednostima:

    Unošenje vrednosti sa tastature;

    Randomly;

    Prema formuli.

    Metode za definiranje jednodimenzionalnih nizova

    Petlje se koriste za unos i izlaz vrijednosti numeričkog niza.

    Razmotrimo procedure koje bi formirale jednodimenzionalni niz na dva načina

    1) nasumično,

    2) unos elemenata sa tastature

    Pretpostavimo da ćemo raditi s nizom cijelih brojeva. Neka nam bude dovoljno da imamo maksimalan broj elemenata jednak 50. Procedura uzima parametar po referenci, masiv niz datog tipa i cjelobrojnu varijablu n , koji je odgovoran za broj ćelija niza koje treba popuniti. Također će nam trebati lokalna varijabla i , koji će djelovati kao parametar petlje i koristi se za specificiranje broja koji određuje lokaciju elementa u nizu.

    1. Formiranje jednodimenzionalnog niza nasumično. Postavimo vrijednost svakog elementa na rezultat slučajne funkcije Random(10). Popunjavanje niza ćemo postaviti pomoću cikličkog for operatora u čijem se tijelu slučajni broj izračunava pomoću funkcije Random(10), nakon čega se ova vrijednost dodjeljuje sljedećem i -ti element niza.

    Procedura InsertMas1(Var massiv:mas; n:integer);

    I: cijeli broj;

    Počni

    Randomize;

    Za i:=1 do n do

    Masiv[i] := Slučajni(10);

    End ;

    2. Formiranje jednodimenzionalnog niza unosom elemenata sa tastature.

    Procedura InsertMas2(Var massiv:mas; n:integer);

    I: cijeli broj;

    Počni

    Za i:=1 do n do

    Počni

    write("Enter", tj ,"th element niza");

    readln(niz[i]);

    End;

    End;

    Niz je prikazan na ekranu na sledeći način:

    Procedura PrintMas(massiv:mas; n:integer);

    I: cijeli broj;

    Počni

    Za i:=1 do n

    Napiši(Masiv[i]:5);

    Kraj.

    Moramo zapamtiti da u sva tri slučaja ne možemo bez organiziranja ciklusa.

    Pronalaženje maksimalnog (minimalnog) elementa niza.

    Hajde da imamo jednodimenzionalni niz:

    20,-2, 4, 10,7, 21,-12, 0, 4, 17.

    Razmislimo o tome koje operacije treba izvesti ako trebamo pronaći maksimalni element. Naravno, operacija poređenja Ne razmišljamo o tome da uvek upoređujemo par, "prolazeći" kroz sve elemente niza. Konstruisaćemo algoritam za pronalaženje maksimalnog (minimalnog) elementa na način da uporedimo par brojeva, ponavljajući radnju poređenja potreban broj puta.

    Dakle, moramo odgovoriti na dva pitanja:

    1) koji su brojevi uključeni u par koji čini operaciju relacije;

    2) koliko puta se operacija poređenja mora ponoviti. Hajde da uvedemo dodatnu varijablu pod nazivom max. To će biti jedan od brojeva, drugi broj je sljedeći element niza. Da bi se izvršila prva operacija poređenja, potrebno je varijabli max dodijeliti neku početnu vrijednost. Ovdje mogu postojati dvije opcije:

    1) promenljivoj max dodeliti prvi element niza;

    2) dodeliti broj koji je očigledno manji od svih elemenata niza.

    Niz sadrži podatke o broju studenata u svakoj grupi prve godine. Odredite grupu sa maksimalnim brojem učenika, uz pretpostavku da broj grupe odgovara serijskom broju broja u nizu (pretpostavljamo da postoji samo jedna takva grupa).

    Drugim riječima, moramo pronaći maksimalni element i njegov broj.

    program max_num;

    tip mas=array[ 1.. 10] bajta;

    var a: mas;

    num, i: bajt;

    max: bajt;

    početi

    (ispuni blok)

    za i:=l do 7 do

    readln(a[i]);

    (traži maksimum i njegov broj)

    max:==0;

    (unesite najmanji broj za ovaj niz)

    za i:=l do n do

    ako je a[i]>max onda počni

    num:=i;

    max:=a[i]

    kraj;

    writeln("maksimalni broj učenika=",max);

    writeln("broj grupe=",broj);

    kraj.

    3) Pronađite minimalni element među parnim elementima niza.

    Objašnjenje: ne možemo dodijeliti min varijablu prvom elementu niza, jer može biti čudno. Stoga moramo odabrati neki vrlo veliki broj za ovaj tip podataka.

    Ako najavimo elementi niza su onda cijeli brojevi Volim ovo broj će biti +32767.

    program min_even;

    a: niz cijelih brojeva;

    i:integer;

    min:integer;

    početi

    za i:=l do 10 do beein

    writeln("unesite sljedeći element niza");

    readln(a[i]) ;

    kraj;

    min:=32767;

    za i:=l do 10 do

    ako (a[i]

    ako je min=32767 onda writeln ("nema parnih elemenata u nizu") else writein ("minimalni element među parnim elementima niza=",min)

    kraj.

    Napomena: potrebno je provjeriti da li se promijenila vrijednost min varijable, jer možda nema čak ni elemenata.

    Drugi slični radovi koji bi vas mogli zanimati.vshm>

    8729. DEFINICIJA I METODE SPECIFIKACIJE KONAČNE MAŠINE. PROBLEM SINTEZE. ELEMENTARNE MAŠINE 189,1 KB
    Definicija i metode specificiranja konačnog automata. DEFINICIJA I METODE SPECIFIKACIJE KONAČNE MAŠINE. Definicija konačnog automata. Metode za specificiranje konačnog stroja.
    3552. Individualni domaći zadatak iz hemije. Domaći zadatak iz hemije 475.47 KB
    Smjernice uključuju individualne domaće zadaće na sljedeće teme: klase neorganskih jedinjenja, hemijski ekvivalent, struktura atoma, hemijska veza, hemijska termodinamika, hemijska kinetika, koncentracija rastvora, jonske reakcije i hidroliza soli, redoks reakcije, elektrohemijski procesi, svojstva metala.
    12127. Strateški minerali (PGM, Ni, Co, Cr, Cu) paleoproterozojskih slojevitih mafičkih masiva sjeveroistoka Fenoskandijskog štita 17,77 KB
    Kratak opis razvoja. Prednosti razvoja u odnosu na analogne. Važan aspekt razvoja je mogućnost minimiziranja negativnog tehnogenog uticaja na životnu sredinu naglim smanjenjem ekstenzivne upotrebe teške rudarske i bušaće opreme u fazama izviđanja i istraživanja. Područja komercijalne upotrebe razvoja.
    9554. MATEMATIKA. METODOLOŠKI VODIČ I ZADACI 268,34 KB
    Akademska disciplina „Matematika“ je namijenjena implementaciji državnih zahtjeva za minimalnim sadržajem i nivoom osposobljenosti diplomaca srednjeg stručnog obrazovanja.
    18129. Kreativni zadaci kao sredstvo za razvoj mašte 91,06 KB
    Ova istraživanja odražavaju raznolikost naučnih ideja i praktičnih pristupa organizovanju kreativne aktivnosti učenika u obrazovnom procesu, međutim, aspekt ciljanog pružanja kreativnih zadataka mlađim školarcima u procesu učenja još nije dovoljno razvijen; studirao. Na osnovu uočenih kontradiktornosti u analizi filozofske psihološke i pedagoške literature, kao i kao rezultat proučavanja iskustva osnovnih škola, formulisan je istraživački problem koji se sastoji od teorijskih...
    19517. Izrada tehničkih specifikacija za automatizaciju prodavnice Bukva 155.63 KB
    Kompetentna prodaja robe na osnovu zahtjeva klijenata, odnosno konsultacije sa stručnjacima. Stoga je neophodno da prodavnica dobije informacije o stanju na tržištu i da tržištu pruži informacije o dostupnim robama i uslugama. Interakcija sa medijima sastoji se od toga da prodavnica daje podatke o sebi, svojim proizvodima i uslugama, a zatim će se iz tih podataka generisati reklama za laptop prodavnicu, koju percipira tržište roba i usluga. Proširenje vrsta proizvoda Prednosti trgovine: Veliko iskustvo...
    3548. Domaća zadaća iz hemije i smjernice za njihovo rješavanje 229.61 KB
    Ovi domaći zadaci su namijenjeni za sistematski rad studenata svih specijalnosti na predmetu hemije u skladu sa nastavnim planom i programom. Izvršavanje zadataka pomaže učenicima da razviju vještine samostalnog rada.
    19091. ANALIZA TEHNIČKIH SPECIFIKACIJA I OSNOVNIH TEHNIČKIH ZAHTJEVA ZA IZRAĐENI PROJEKT 911.42 KB
    Server room (server room ili jednostavno server room) je namenska tehnološka prostorija sa posebno kreiranim i održavanim uslovima za smeštaj i rad serverske i telekomunikacione opreme. Dozvoljena temperatura u serverskoj prostoriji treba da bude
    1763. Implementacija zadatka kao klase, koristeći C++ Standard Template Library (STL) kontejner za pohranjivanje informacija 190,6 KB
    Sintaksa C++-a je naslijeđena iz jezika C. Jedan od principa dizajna bio je održavanje kompatibilnosti sa C-om. mnogi programi koje mogu podjednako uspješno prevesti oba C kompajlera...
    10124. Izrada tehničkih specifikacija za pružanje usluga oglašavanja, usluga čišćenja, obezbjeđenja i osoblja 31,88 KB
    Izrada tehničkih specifikacija za usluge oglašavanja: zakonska regulativa usluga oglašavanja. Izrada tehničkih specifikacija za usluge čišćenja: osnovni pojmovi i vrste usluga. Izrada tehničkih specifikacija za usluge obezbeđenja: zakonska regulativa. Izrada tehničkih specifikacija za kadrovske službe: osnovni pojmovi.

    Lekcija iz serije: “ Programski jezik Pascal»

    Nakon deklarisanja niza, možete raditi s njim. Na primjer, dodijelite vrijednosti elementima niza i općenito ih tretirajte kao obične varijable. Da biste pristupili određenom elementu, morate navesti identifikator niza (ime) i indeks elementa u uglastim zagradama.

    Na primjer, unos Mas, A omogućava vam pristup drugom elementu niza MAS i desetom elementu niza A. Kada radite sa dvodimenzionalnim nizom, specificiraju se dva indeksa, sa n-dimenzionalnim nizom - n indeksi.

    Na primjer, unos Matr čini dostupnim za obradu vrijednost elementa koji se nalazi u četvrtom redu četvrte kolone niza M.

    Indeksirani elementi niza nazivaju se indeksirane varijable. Ne možete ići izvan granica niza. To jest, ako Mas niz ima pet elemenata, onda će pristup šestom ili osmom elementu rezultirati greškom.

    Pogledajmo tipične operacije koje se javljaju pri radu s jednodimenzionalnim nizovima.

    Popunjavanje jednodimenzionalnog niza vrijednostima

    Popunjavanje i izlaz niza može se raditi samo element po element, odnosno prvo možete dodijeliti vrijednost prvom elementu, zatim drugom i tako dalje, isto sa prikazivanjem na ekranu - prikazujemo prvi, drugi, treći, i tako do zadnjeg.

    Pascal nema sredstva za unos/izlaz elemenata niza odjednom, tako da se vrijednosti unose element po element. Vrijednosti se mogu dodijeliti elementu niza pomoću operatora dodjeljivanja ili uneti s tipkovnice pomoću operatora Read ili Readln. Vrlo je zgodno iterirati kroz sve elemente niza u for petlji.

    Načini popunjavanja jednodimenzionalnih nizova:

    1. Unos vrijednosti sa tastature.
    2. Postavljanje vrijednosti u operatoru dodjele pomoću generatora slučajnih brojeva. Ova metoda je prikladnija kada ima mnogo elemenata u nizu (unos njihovih vrijednosti sa tastature traje dosta vremena).
    3. Postavljanje vrijednosti pomoću formule.
    4. Unos elemenata niza iz datoteke

    1. Unos vrijednosti elemenata niza sa tastature. Pošto je korišten operator Readln, svaka vrijednost će biti upisana u novom redu.

    2. Popunjavanje niza brojevi generisani nasumično iz intervala . Povezujemo senzor nasumičnih brojeva - slučajnu funkciju.

    3. Punjenje niz prema formuli. Svakom elementu niza je dodijeljena vrijednost izračunata pomoću formule. Ako je svaki element niza jednak trostrukoj vrijednosti njegovog rednog broja (indeksa), tada će procedura izgledati ovako:

    4. Čitanje brojeva iz datoteke. Morate unaprijed kreirati tekstualnu datoteku u koju upišite nekoliko redova, od kojih svaki sadrži 30 brojeva.

    Prikaz vrijednosti elemenata niza na ekranu

    Zaključak vrijednosti elemenata niz unos na ekran se vrši, kao i unos, element po element u petlji. Za izlaz ćemo koristiti Write ili Writeln operatore. Kao ulazne parametre, u proceduru ćemo proslijediti ne samo niz, već i broj elemenata koje treba izbaciti, počevši od prvog (ovo će nam trebati kada uklanjamo i dodajemo elemente u niz).

    Primjer 1. Popunite niz sa tastature i prikažite ga na ekranu.

    Rješenje.

    Program će koristiti dvije procedure: proceduru Init1 (popunjavanje niza sa tastature) i Print proceduru (prikazivanje niza na ekranu).

    Primjer 2. Ispunite niz iz tekstualne datoteke i prikažite ga na ekranu. U tekstualnoj datoteci postoji nekoliko redova, svaki red sadrži 30 brojeva.

    Naučili ste kako ispuniti jednodimenzionalni niz i prikazati ga na ekranu.

    U sljedećoj lekciji nastavit ćemo sa upoznavanjem algoritama za obradu jednodimenzionalnih nizova.