Brug af Free Pascal til at behandle arrays. Indsættelse og fjernelse af elementer i arrays

femteplads - sjetteplads.

X[3]: =X[4];

X[4]: =X[5];

X[5]: =X[6];

Således skal alle elementer fra tredje til femte flyttes til venstre med én - i stedet for det i-te element skal du skrive (i+1)-th. Blokdiagrammet for algoritmen er vist i fig. 5,25.


Ris. 5,25.


Ris. 5,26.


Ris. 5,27.

Lad os nu se på mere fælles opgave: Du skal fjerne det mth element fra et array X bestående af n elementer. For at gøre dette er det nok at skrive elementet (m+1) i stedet for elementet med nummer m, elementet (m+2) - i stedet for elementet (m+1) osv. , det n'te element - på plads (n–1)'te. Processen med at fjerne et element fra et array er vist i fig. 5,26.

Algoritmen til at fjerne et element med nummer m fra en matrix X med dimension n er vist i fig. 5,27.

Efter fjernelse af element 4 Og faktisk flytte en del af arrayet et element til venstre fra arrayet vil antallet af elementer i arrayet ændre sig (mindsket med én), og indekset for nogle elementer vil ændre sig. Hvis et element slettes, indtager det næste dets plads, og der er ingen grund til at flytte til det (ved at øge indekset med én). Det næste element flyttede sig selv til venstre efter at være blevet fjernet.

Hvis du behandler et array, hvor nogle af elementerne er slettet, behøver du efter sletning af et element ikke at gå videre til det næste (dette reducerer antallet af elementer). Som et eksempel kan du overveje følgende problem.

OPGAVE 5.1. Fjern negative elementer fra et array.

Algoritmen til at løse problemet er ret enkel: vi gennemgår alle elementerne i arrayet, hvis elementet er negativt, så sletter vi det ved at flytte alle efterfølgende med en til venstre. Det eneste, der er værd at huske, er, at efter at have slettet et element, behøver du ikke at gå videre til det næste for efterfølgende behandling, det flytter selv til stedet for det nuværende. Blokdiagrammet til løsning af opgave 5.1 er vist i fig. 5,28.

Nedenfor er programmets tekst med kommentarer.

program support_array; var i, n, j: byte; X: array [1.. 100] af reel; begin writeln('indtast matrixstørrelse'); readln(n); (Array-input.) for i:=1 til n skal du begynde at skrive ('X[ ', i, ' ]= '); readln(X[i]); ende; writeln('array X'); for i:=1 til n skal du skrive (x [i ] : 5: 2, ' '); skriveln; i: = 1; mens jeg<=n) do {Если очередной элемент массива X[i] отрицателен, то} if x [ i ]<0 then begin {удаляем элемент массива с номером i.} for j:= i to n_1 do x [ j ] : = x [ j + 1 ]; {Уменьшаем размер массива.} {Не надо переходить к следующему элементу массива.} n:=n -1; end else {Если элемент не удалялся, то переходим к следующему элементу массива.} i:= i +1; writeln (’Изменённый массив ’); for i:=1 to n do {Вывод преобразованного массива.} write (X[ i ] : 5: 2, ’ ’); writeln; end.


Ris. 5,28.

Resultaterne af programmet er vist i fig. 5,29.


Ris. 5,29.

5.9 Indsættelse af et element i et array

Lad os overveje en simpel opgave: Indsæt tallet b i arrayet X(10) , mellem det tredje og fjerde element.

For at løse dette problem skal du flytte alle elementer i arrayet, startende fra det fjerde, til højre med ét element. Derefter skal du skrive b (X:=b;) i det fjerde element i arrayet. Men for ikke at miste naboværdien, skal du først flytte det tiende element til højre, derefter det niende, ottende osv. indtil det fjerde. Blokdiagrammet for indsættelsesalgoritmen er vist i fig. 5.30.


Ris. 5.30.

I det generelle tilfælde er blokdiagrammet for indsættelse af tallet b i arrayet X(N) mellem elementer nummereret m og m+1 vist i fig. 5,31.


Ris. 5,31.

Nedenfor er et programfragment, der implementerer denne algoritme 5 Når du erklærer et array, skal du angive tilstrækkelig størrelse til at indsætte ét element. .

var i, n,m: byte; X: array [1.. 100] af reel; b: ægte; start writeln ('N= '); readln(n); for i:=1 til n skal du begynde at skrive ('X[ ', i, ' ]= '); readln(X[i]); ende; writeln('Array X'); for i:=1 til n skal du skrive (x [i ] : 5: 2, ' '); skriveln; writeln('m='); readln(m); writeln('b='); readln(b); for i:=n ned til m+1 gør x [i +1]:=x [i]; x:=b; n:=n+1; writeln('Modificeret array'); for i:=1 til n skal du skrive (X[ i ] : 5: 2, ' '); skriveln; ende.

5.10 Brug af rutiner til at arbejde med arrays

Lad os se på, hvordan du kan overføre arrays til en subrutine. Som du ved (se kapitel 4), skal du angive deres navne og typer for at erklære variabler i listen over formelle parametre for en underrutine. Typen af ​​enhver parameter på listen kan dog kun være en standardtype eller tidligere erklæret type. Derfor, for at overføre et array til en subrutine, skal du først beskrive dens type 6 Array-datatype, array-deklaration se afsnit 2.4.9. Arbejde med arrays er beskrevet detaljeret i dette kapitel. og erklær derefter proceduren:

array_type = array[indeksliste] af type;

procedure

procedurenavn (matrixnavn: matrixtype);

For eksempel:

type vektor=array [ 1.. 10 ] af byte; matrix=array [ 1.. 3, 1.. 3 ] af reel; procedure proc (A: matrix; b: vektor; var x: vektor);

Det er klart, at videregivelse af en streng af formen til en underrutine

variabel_navn: snor[streng_længde];

hvilket faktisk er en række af 7 Datatype "streng", strengerklæring se afsnit 2.4.9, skal udføres på samme måde:

række_type = snor[streng_længde];

procedure

procedurenavn(strengnavn: strengtype);

For eksempel:

type string_5=streng [5]; stroka_10=streng [1 0]; funktion sjov (S t r: stroka_5): stroka_10;

Arrays kan overføres til en subrutine ved hjælp af konceptet med et åbent array. Det åbne array er array 8 "Array"-datatypen, array-deklaration, array-adgang, se afsnit 2.4.9., hvis beskrivelse angiver typen af ​​elementer, som den består af, men definerer ikke grænserne for ændring af indeksene:

public_array_name: række af række... type;

For eksempel:

var array_1: array af reelle; array_2: array af array af char; array_3: array af array af array af byte;

Hukommelsestildeling og angivelse af indeksgrænser

ende; (for i)

Indsættelse og fjernelse af et element i et array

Lad os overveje algoritmen til at indsætte et element i et array. For nemheds skyld vil vi kun overveje endimensionelle arrays. Arrayet består af et vist antal elementer nmax (kapacitet

array). Det aktuelle antal array-elementer er i variablen n.

Før vi indsætter det næste element, kontrollerer vi, at det aktuelle antal array-elementer er mindre end dets kapacitet.

Dernæst kontrollerer vi, om elementet er indsat i slutningen af ​​arrayet eller ej. Hvis et element er indsat i slutningen af ​​arrayet, skal du øge n med én og tilføje elementet. Ellers forskyder vi array-elementerne, hvis indeks er større end eller lig med indekset for det indsatte element, figur 3.

Ovenstående algoritme er implementeret i programmet vist i liste 6.

Liste 6 – Indsættelse af et element i et array

($MODE DELPHI) ($ENDIF)

($APPTYPE CONSOLE) program InsElt;

i :heltal;

//Input array

//Element til at indsætte writeln("Vvedite element" ); readln(element);

//Elementindeks

//Indsæt element

hvis indeks< n+1 then begin

inc(n); //forøg længden af ​​arrayet

hvis (Lav(a)<= index) and (index <= n) then for i:=n downto index do

a[i]:=a; //array skift

a:=element; ende

//Vis array-elementer på skærmen for i:=1 til n do

writeln("a[" , i,"]=" , a[i]:6:2);

Fjernelse af et element foregår på samme måde. Først kontrollerer den, at elementets indeks er inden for intervallet af acceptable værdier, og forskyder derefter elementerne for at dække det element, der skal fjernes, figur 4

Fortegnelse 7

($MODE DELPHI) ($ENDIF)

($APPTYPE CONSOLE) program DelElt;

const nmax = 5; //array kapacitet

i :heltal;

writeln("Vvedite chislo elementov massiva"); readln(n);

//Input array

for i:=1 til n skal du begynde at skrive("a[" , i,"]=" ); readln(a[i]);

//Elementindeks

writeln("Vvedite index elementa"); readln(indeks);

//Fjernelse af elementer

hvis indeks

hvis (Lav(a)<= index) and (index <= n) then for i:=index to n do

a[i]:=a; //array shiftdec(n); //reducer længden af ​​arrayend

else start writeln("Ugyldigt indeks" ); readln;

For at bruge præsentationseksempler skal du oprette en Google-konto og logge ind på den: https://accounts.google.com


Slide billedtekster:

Endimensionelle arrays, der indsætter og fjerner et element

Indsættelse og sletning af elementer Algoritme til sletning af et element: Bestem nummeret på det element, der skal slettes - k (indtast fra tastaturet eller find fra nogle betingelser) skift alle elementer startende fra kth med 1 element til venstre tildel værdien 0 til det sidste element i arrayet Når du sletter et element, ændres størrelsen af ​​arrayet ikke! Derfor er det nødvendigt at angive yderligere i programmet ikke op til n, men op til n -1.

Elementet, der skal slettes, er givet af array A: 3 5 6 8 12 15 17 18 20 25 k:=4 3 5 6 12 15 17 18 20 25 25 3 5 6 12 15 17 18 20 25 0

konst n = 30; var a: matrix af heltal; k, i: heltal; start (array input og k ) ... for i:= k til n-1 gør a[i] := a; a[n] := 0; writeln( Resultat: ); for i:= 1 til n-1 skal du skrive (a[i] :3); readln; ende.

Algoritme for indsættelse af et element: (efter kth) forbliver de første k elementer uændrede; alle elementer, startende fra kth, flyttes 1 position tilbage til stedet for (k +1) element og skriver et nyt element. En matrix af n elementer, hvori k elementer er indsat, skal defineres som en matrix af størrelse n + k. Indsættelse før et element adskiller sig kun ved, at alle elementer forskydes, startende fra det kth, og et nyt skrives i stedet for det kth.

givet array A: k:=4 3 5 6 8 8 12 15 17 18 20 25 3 5 6 8 100 12 15 17 18 20 25 1 2 3 4 5 6 7 8 9 10 3 1 2 1 5 2 1 5 position for at tilføje et nyt element

Eksempel: Indsæt 100 efter elementet, hvis nummer er indtastet fra tastaturet: const n= 30; var a: matrix af heltal; k, i: heltal; start (array input og k) ... for i:= n ned til k+1 gør a := a[i]; a:= 100; writeln( Resultat: ); for i:= 1 til n+1 skal du skrive (a[i] :3); readln; ende.


Om emnet: metodiske udviklinger, præsentationer og notater

"Endimensionelle arrays: løse problemer, der involverer tilføjelse og fjernelse af et element"

Lektionsresuméet er designet til elever i 10. klasse, der studerer programmeringssproget Pascal. Resuméet forklarer i detaljer med eksempler, hvordan du kan tilføje og fjerne elementer i en endimensionel ma...

Resumé af en lektion i datalogi om emnet: Tekstinputteknologi. Tekstredigering: indsættelse, sletning og udskiftning af tegn; indsætte og slette tomme linjer. Formål med lektionen: at undervise i teknologi...

Lektionsoversigtsdiagram "Endimensionelle arrays. Input og output af et endimensionelt array"

Emne "Informatik" Klasse 9 Lektionsemne "Endimensionelle arrays. Input og output af et endimensionelt array"Lektionstype: kombineret Udstyr: computer...

Arbejde med elementer i et endimensionelt array

Formålet med lektionen: at danne og udvikle emne- og nøglekompetencer; udvide forståelsen af ​​anvendelsesområdet for endimensionelle arrays; forbedre kulturen for at skrive programmer; indgyde strukturerende færdigheder...

Lektionens emne:"Indsættelse og sletning af array-elementer."

Vare: Datalogi og IKT.

Klasse: 10 (profil).

Nøgleord: datalogi, praktisk arbejde, programmering, arrays, indsættelse, sletning af elementer.

Lektionstype: praktisk arbejde.

Udstyr: Uddel; personlige computere.

Litteratur:

    Popov V.B. Turbo Pascal for skolebørn: Lærebog. godtgørelse - 3. tillæg. udg. – M.: Finans og statistik, 2004, - 528 s.: ill.

    Semashko G.L., Saltykov A.I. "Programmering i Pascal", M: "Nauka", 1993.

    FaronovV. V. «Turbo Pascal 7.0. Indledende kursus", M: "Viden", 1997.

Målet med arbejdet:

    forstå principperne for indsættelse og sletning af elementer i endimensionelle og todimensionelle arrays,

    konsolidere erhvervet viden ved at løse problemer.

Leveringstid: 2 lektioner.

Under timerne.

JEG. Fjernelse af elementer fra et array.

En-dimensionel array

Todimensionelt array

Formulering af problemet:

Givet et array A(N). Fjern elementet i position k.

Givet et array B(N,M). Slet kolonnenummer k. (samme som for at slette en linje)

Beskrivelse af fjernelsesmetode:

Skift hele "halen" af arrayet, startende med elementnummer k +1, en position til venstre, dvs. udførelse af operationen: ai =ai+1, hvor i = k, k +1, …, N -1

Det resulterende array vil indeholde N -1 elementer.

Skift alle kolonner startende fra k +1 til m en position til venstre ved at bruge følgende handlinger:

For j fra 1 til m -1 do

ai, j =ai, j+1

Givet: 3 5 7 8 9 N=5, k=2

Operationer: a 2 :=a 3 ; a3:=a4; a 4 :=a 5

I alt: 3 7 8 9

Givet: N =3, M =4, k =2 Operationer: Resultat:

1 5 2 7 a 1,2:=a 1,3; a 1,3:=a 1,4;

8 4 3 5 a 2,2:=a 2,3; a 2,3:=a 2,4;

0 9 1 4 a 3,2:=a 3,3; a 3,3:=a 3,4;

Program

Randomiser ;

Writeln('Indtast antallet af elementer');

Læsln(n);

Writeln('Indtast varenummeret, der skal slettes');

Læsln(k);

(array dannelse tilfældigt)

For i:=1 til n begynder

a[i]:=tilfældig(101)-50;

ende ;

skriveln ;

(slet et specificeret element)

For i:=k til n-1 do

(udsender det endelige array)

For i:=1 til n-1 gør

clrscr; randomisere;

writeln("Indtast antallet af rækker af kolonner");

writeln("Indtast kolonnenummeret, der skal slettes");

for i:=1 til n begynder (vi danner en matrix)

for j:=1 til m begynder

b:=51*tilfældig-25;

skriv (b:8:2)

for j:=k til m-1 do (fjern den k-te kolonne)

for i:=1 til n gør

b:=b;

(vi viser det resulterende array)

for i:=1 til n begynder

for j:=1 til m-1 begynder

skriv (b:8:2)

    I et endimensionelt array A (N) skal du finde min-elementet og fjerne det.

    I et todimensionalt array B (N,M) skal du slette rækkenummer k. Kontroller samtidig, om værdien k overstiger antallet af rækker i arrayet B .

II. Indsættelse af (herunder) elementer i en matrix.

En-dimensionel array

Todimensionelt array

Formulering af problemet:

Givet et array A(N). Medtag på plads k i dette array et element svarende til m .

Givet et array B(N,M). Tilføj kolonnenummer k. Elementerne i den nye kolonne er lig med elementerne i arrayet C(N). (Samme for tilføjelse af en række)

Beskrivelse af fjernelsesmetode:

Før man inkluderer et givet element i et array, er det nødvendigt at udvide dette array, dvs. flytte "halen" af arrayet til den ene højre position, dvs. udfører operationen: a i +1 =a i, hvor i = N, N -1, ..., k. Vi begynder at flytte array-elementer fra enden, ellers vil hele arrayets hale blive fyldt med det kth element.

Matrixstørrelsen vil stige til N +1 elementer.

Skift alle kolonner fra m til k én position til højre ved at bruge følgende handlinger:

for j fra m til k gør

Loop gennem alle linjer fra 1 til n ved at gøre

ai, j+1 =ai, j

Så i i = 1. n linjer a i , k :=c i

Det nye array vil have M -1 kolonner.

Vigtig: når du tilføjer en kolonne (række) til et todimensionelt array, tages elementerne i denne kolonne (række) fra et yderligere endimensionelt array af størrelse = antal rækker i et todimensionelt array (= antal kolonner) eller er indtastet fra tastaturet.

Givet: 3 8 7 6 5 N=5, k=2, m=4

Operationer: a6:=a5=5; a5:=a4=6; a4:=a3=7; a3:=a2=8

I alt: 3 4 8 7 6 5

Givet: N =3, M =4, k =3 Operationer: Resultat:

C(N)=(6,8,2)a 1,5:=a1,4; a 1,4:=a 1,3;

1 5 2 7 a 2,5:=a 2,4; a 2,4:=a 2,3;

8 4 3 5 a 3,5:=a 3,4; a 3,4:=a 3,3;

Program

Var a:array af heltal;

n,k,i:byte; m:heltal;

Writeln("Indtast antallet af elementer");

Writeln("Indtast nummeret på det element, der skal inkluderes");

Læsln(k);

Writeln("Indtast værdien af ​​det element, der skal inkluderes");

(vi danner en matrix)

For i:=1 til n begynder

a[i]:=tilfældig(101)-50;

ende ; skriveln ;

(spred array-elementerne)

For i:=n ned til k do

a:=a;

(vi tilføjer et nyt element til den kth position)

a:=m;

(vi viser det resulterende array)

For i:=1 til n+1 do

var b:array af reelle; i,j,m,n,k:byte;

c: række af reelle;

clrscr; randomisere;

writeln("Indtast antallet af rækker og kolonner");

readln(n,m);

writeln("Indtast kolonnenummeret for at tilføje");

for i:=1 til n begynder (vi danner den indledende matrix)

for j:=1 til m begynder

b:=51*tilfældig-25;

skriv (b:8:2)

ende;writeln;slut;writeln;

for i:=1 til n begynder (form array af yderligere kolonne)

c[i]:=51*tilfældig-25; skriv(c[i]:8:2)

ende; skriveln; skriveln;

for j:=m ned til k do (flyt kolonnerne fra hinanden)

for i:=1 til n gør

b:=b;

for i:=1 til n do (tilføj en kolonne)

for i:=1 til n begynder (vis det resulterende array)

for j:=1 til m+1 begynder

skriv (b:8:2)

ende; læst.

Opgaver til selvstændig løsning:

    I en endimensional matrix A (N), find max-elementet og indsæt efter det et element, der er lig med 2*max.

    I et todimensionelt array B (N,M) skal du indsætte den k-te række af elementer i arrayet C (M). Kontroller samtidig, om værdien k overstiger antallet af rækker i arrayet B .