İki boyutlu diziyi tam olarak ifadeye göre doldurun. Pascal'ın iki dünya dizileri – matrisler. Bağımsız erdemlilik için bir yuva

Golovna / Kişiler

Aynı türden çok sayıda veri olduğunda, farklı adlara sahip değişken veriler, bellek adreslerine göre sıralanmadıkları için programlamayı karmaşık hale getirir. Bu gibi durumlarda dizi adı verilen nesneleri kullanırız.

- Bu, tek bir adla belirtilen aynı türdeki nesnelerin sırasını barındırmak için sürekli bir bellek deposudur.

Masif aşağıdaki temel kavramlarla karakterize edilir:

Masif element (masif elementin anlamı)– dizi arasında dağıtılan, bellek bölmesinde saklanan değer ve bu bellek bölmesinin adresi.
Masifin cilt elemanı üç değerle karakterize edilir:

  • elemanın adresi - bu elemanın döndürüldüğü koçanı hafızasının adresi;
  • öğe dizini (dizideki öğenin sıra numarası);
  • unsurun anlamı.

Massivu adresleri – massivu koçanı öğesinin adresleri.

Dizi adı – dizi öğelerinin alt bölümleri için kullanılan bir tanımlayıcı.

Dizinin boyutu dizideki öğelerin sayısıdır

Bir öğenin boyutu, bir dizi öğesini kaplayan bayt sayısıdır.

Bilgisayarın belleğindeki dizinin grafiksel olarak yeniden düzenlenmesi sürekli adres sayfasına bakılarak yapılabilir.

0 ile q-1 arasında değişen indekslere sahip küçük bir q öğesi dizisini temsil eder. Bir dış yüzey öğesi bilgisayar belleğinin k baytını kaplar ve öğeler bellekte sırayla değiştirilir.

Dizinin i'inci elemanının adresleri değerlere sahiptir

Dizi adresleri dizinin cob (sıfır) öğesinin adresidir. Dizideki elemanların çarpımı için ilk değeri 0 olan elemanın seri numarası (indeks) hesaplanır. Yani eğer bir dizi q eleman içeriyorsa, dizi elemanlarının indeksleri 0 ile q-1 arasında değişir.

Dovzhina dizisi - dizinin tüm öğelerini kaydetmek için belleğe ayrılan bayt sayısı.

Dovzhina Massivu = Elementin Boyutu * Elementlerin Miktarı

Bir dizi öğesinin boyutunu belirlemek için işlevi kullanabilirsiniz.

int sizeof(tip);

Örneğin,

sizeof(karakter) = 1;
sizeof(int) = 4;
sizeof(float) = 4;
sizeof(double) = 8;

Dizilerin çarpıcı hale getirilmesi ve başlatılması

Dildeki diziyi basitleştirmek için aşağıdaki sözdizimi kullanılır:

ad türü [boyut] = (başlatma);

Başlatma, figürlü kemerlere atanan ve virgüllerle ayrılmış dizi elemanlarının koçan değerlerinin bir kümesidir.

int a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); // 10 tam sayı içeren a dizisi

Figürlü kollarda belirtilen başlangıç ​​değerlerinin sayısı, dizideki en az eleman sayısı kare kollarda gösterildiğinden, dizide kaybolan tüm elemanlar (baş harfi çıkarılmamış olanlar için) çalışılan değerler sıfıra ayarlanır. Bu gücün, dizinin tüm elemanlarına sıfır değerleri atamak için manuel olarak kullanılması gerekir.

int b = (0); // 10 elemanlı b dizisi, 0 olarak başlatıldı


Bir dizi telaffuz sağırlanırsa, elemanlarının sabit koçan değerleri şekil kollarıyla gösterilir. Bu durumda kare kollardaki bazı unsurlar ihmal edilebilir.

int a = (1, 2, 3, 4, 5, 6, 7, 8, 9);

Diziyi öğelere genişletirken, gerekli öğenin dizini kare kollarda gösterilir.

Popo C'de

1
2
3
4
5
6
7
8

#katmak
int ana()
{
int a = (5, 4, 3, 2, 1); // a dizisi 5 eleman içeriyor
printf("%d%d%d%d\n", a, a, a, a, a);
getchar();
0 değerini döndür;
}

Programın sonucu:

Ancak çoğu zaman programlama işlemi sırasında dizi elemanlarının değerlerinin belirtilmesi gerekmektedir. Kimin vikoristi başlatılmadan sersemlemiş bir kitleye sahip. Bu durumda, kare kollardaki bir dizi elemanın iç kısmı bağlanır.

int a;

Bir dizinin elemanlarının koçanı değerlerini belirlemek için genellikle parametrik bir döngü kullanılır:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#katmak
int ana()
{
int a;
int ben;
// Diziye elemanların girilmesi
için (i = 0; ben<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
// Dizinin elemanlarını göster
için (i = 0; ben<5; i++)
printf("%d", a[i]); // Formatta boşluk var
getchar(); getchar();
0 değerini döndür;
}

Vikonannya programının sonucu

Zengin dünya masifleri

Dünya çapında çok çeşitli alanlara erişiminiz olabilir. Zengin boyutlu bir dizinin tek boyutlu bir diziyle karşılaştırıldığında önemi, tek boyutlu bir dizide öğenin konumunun bir indeksle ve zengin boyutlu bir dizide bir çıkartmayla gösterilmesidir. Zengin masifin ucu matristir.

Zengin dünya kitlesinin sersemliğinin zagal biçimi

ad türü[boyut1][boyut2]...[boyutm];

Zengin dünya dizisinin öğeleri, büyüyen adresin işlemsel belleğinin birbirini izleyen bölümlerinde döndürülür. Bilgisayarın belleğinde zengin bir dizinin elemanları döndürülür, örneğin 2 satır ve 3 sütundan oluşan bir dizi,

int a;


gelecek sıralamada hafızada rötuşlanacak

İndüklenen iki boyutlu dizideki öğelerin sayısı şu şekilde görünür:

Satır sayısı * Satır sayısı = 2 * 3 = 6.

Diziyi tahsis etmek için gereken belleğin bayt sayısı şu şekilde hesaplanır:

Öğe sayısı * Öğe boyutu = 6 * 4 = 24 bayt.

Dünyanın en zengin masiflerinin başlatılması

Çok boyutlu bir dizinin elemanlarının değerleri, tek boyutlu ifadede olduğu gibi, yay () şeklinde yerleştirilen sütun durumunda sabit değerlerle belirtilebilir. Ancak bu durumda satır ve sütunlardaki bazı öğeler kare kollarda kesin olarak belirtilebilir.

Popo C'de

1
2
3
4
5
6
7
8
9

#katmak
int ana()
{
int a = (1, 2, 3, 4, 5, 6);
printf("%d%d%d\n", a, a, a);
getchar();
0 değerini döndür;
}



Ancak programlama işlemi sırasında zengin bir dizinin elemanlarının değerlerinin girilmesi daha sık gerekli olur. Bu yöntemle parametrik döngünün eklemelerini manuel olarak analiz edebilirsiniz.

Popo C'de

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#katmak
int ana()
{
int a; // 2 satırlı ve 3 satırlı dizi
int i, j;
// Diziye elemanların girilmesi
için (i = 0; ben<2; i++) //satırlarda döngü
{
için (j = 0; j<3; j++) // yüz öğe arasında geçiş yap
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
// Dizinin elemanlarını göster
için (i = 0; ben<2; i++) //satırlarda döngü
{
için (j = 0; j<3; j++) // yüz öğe arasında geçiş yap
{
printf("%d", a[i][j]);
}
printf("\n"); // Yeni bir satıra aktarıldı
}
getchar(); getchar();
0 değerini döndür;
}



Bir diziyi bir fonksiyona geçirmek

Dizi işleme, ek özel işlevler kullanılarak manuel olarak organize edilebilir. Diziyi işlev bağımsız değişkenleri olarak işlemek için iletmeniz gerekir.

  • masivu adresleri,
  • masifin büyüklüğü.

Satırları işleme işlevlerini ayarlamak gereklidir, bu nedenle bunları adrese aktarmak yeterlidir.

Değişiklikleri bir fonksiyona argüman olarak aktarırken veriler kopya olarak iletilir. Bu, fonksiyonun ortasında parametrenin değerinin değişeceği ancak hiçbir şekilde çağrılan fonksiyonun ortasındaki değerde değişmeyeceği anlamına gelir.

Geçiş adresleri (veya bir diziye yönelik adresler) bir işleve aktarılırsa, atanan adresin görünürlüğü dahilindeki verilerle işlevi içeren tüm işlemler orijinal veriler üzerinde gerçekleştirilir, ardından çıktı dizisi (veya değerler) ​​Değişimin diğer) bağıran fonksiyon tarafından değiştirilebilir.

Alın C'de 10 elemanlı bir dizi veriliyor. Dizinin maksimum ve çıktı elemanlarını değiştirin. Maksimum öğeyi aramak ve takas etmek için işlevi kullanın.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#define _CRT_SECURE_NO_WARNINGS
#katmak
// Değişim fonksiyonu
geçersiz değişiklik(int * x, int n)
{
// x - dizi işaretçisi (diziye adresler)
// n - dizinin boyutu
int ben;
int maksimum, dizin;
maksimum = x;
indeks = 0;
// Maksimum elemanı ara
için (i = 1; ben {
if (x[i]>max)
{
maksimum = x[i];
indeks = ben;
}
}
// Değişme
x = x;
x = maksimum;
}
// Başlık fonksiyonu
int ana()
{
int a;
int ben;
için (i = 0; ben<10; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
değişiklik(a, 10); // değişim fonksiyonuna tıklayın
// Dizinin elemanlarını göster
için (i = 0; ben<10; i++)
printf("%d", a[i]);
getchar();
getchar();
geri dönmek
p = p * x[i];
}
p'yi döndür;
}
// Başlık fonksiyonu
int ana()
{
int a; // 5 elemanlı a dizisini boşalt
int ben;
int pr;
// Diziye elemanların girilmesi
için (i = 0; ben<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]); // &a[i] - dizinin i'inci elemanının adresleri
}
pr = fonk(a, 5); // Yaratıcılığın hesaplanması
printf("\n pr = %d", pr); // Bazı yeni öğeler yaratıyorum
getchar(); getchar();
0 değerini döndür;
}



Bölünmüş: Bilgisayar Bilimi

Ders: İki dünyalı masif. İki dünya masifinin belirli bir kurala göre rezervasyonu.

Hedefler: iki dünya dizisinin elemanlarıyla nasıl çalışılacağını öğrenmek, iki dünya dizilerini belirli bir kurala göre depolamayı öğrenmek, satır numarası ile sütun numarası arasındaki konumu çıkarmayı öğrenmek; bilim adamlarının mantıksal düşüncesinin gelişimi.

GİZLİ ÇALIŞMA

1. Bilgiyi güncellemek

Elemanlarının konumları iki indeksle tanımlanan dizilere iki boyutlu denir. Böyle bir dizinin yapısı düz bir matrisle temsil edilebilir. Matrisin deri elemanı, sıra numarasına ve travers numarasına, sıra numarası – i, travers numarası – j'ye benzersiz bir şekilde atanır.
n*m boyutunda bir matrise bakalım:

11 12 13 14
21 22 23 24
31 32 33 34

3 satır ve 4 sütunlu matris, satır sayısı n=3, sütun sayısı m=4. Bir deri elemanın iki sayıdan oluşan kendi numarası vardır: elemanın bulunduğu sıranın numarası ve sıranın numarası. Örneğin a23 diğer satırda ve üçüncü sütunda yer alan bir elementtir.
Turbo Pascal'ın iki dünya dizisi farklı şekillerde tanımlanabilir. İki boyutlu bir diziyi tanımlamak için onun ne tür bir öğe olduğunu ve nasıl numaralandırıldığını (ne tür bir dizin olduğunu) bilmeniz gerekir. İki boyutlu bir diziyi tanımlamanın çeşitli yolları vardır.

Sabit maksN = ...; (Satır sayısı için maksimum değerler)
maksimumM=…; (Müşteri sayısı için maksimum değerler)

1 yol

Mas Tipi = dizisi<тип элементов>; (tek boyutlu dizi)
Tür TMas = Mas dizisi; (elemanları tek boyutlu diziler olan tek boyutlu dizi)

Yöntem 2

Tür TMas = dizi dizisi<тип элементов>;
(elemanları tek boyutlu diziler olan tek boyutlu dizi)

3 yollu

Tip<имя типа>= dizisi<тип элементов>; (İki Dünya Masifi)

İki boyutlu diziyi tanımlamanın üçüncü yöntemine avantaj sağlanmaktadır.

Örneğin:

Sabit N=3; M=4;
Tür TMas = tamsayı dizisi; (İki boyutlu tam sayı dizisi)

İki boyutlu bir dizinin oluşturulması çeşitli yollarla yapılabilir: klavyeden rastgele sayı üreteci aracılığıyla girerek, belirli bir kuralla veya ek bir dosya kullanarak.

1) Klavyeden ek giriş ve matris elemanlarının satır gösterimi için bir algoritma kullanılarak iki boyutlu bir dizinin oluşturulması.

Sabit N = 10; M = 10;
Tür Tmas = tamsayı dizisi;
Var A: Tmas; i,j:tamsayı;
Başlamak
(Matris elemanlarının tanıtımı)
i:=1'den N'ye kadar
j:=1'den M'ye kadar
Oku);
(Matris elemanları gösteriliyor)
i:=1'den N'ye kadar başlar
j:=1'den M'ye kadar
Yaz(A:4); (İlk sıra kavgaları)
Writeln (Yeni bir satıra git)
son;
Son.

2) Rastgele sayı üreteci aracılığıyla iki boyutlu bir dizi oluşturmaya yönelik programın bir parçası.

Başlamak
Rastgele hale getirin; (Rastgele sayı üretecinin başlatılması)
(Matris elemanlarının tanıtımı)
i:=1'den N'ye kadar
j:=1'den M'ye kadar
A:=rastgele(45)-22;

2. Yeni materyalin tanıtılması. Masifin kurala göre rezervasyonu

Gerçek yasanın ardındaki iki dünya dizisini doldurmaya yönelik programların bir dizi parçasına bir göz atalım. Bunun için bir temel kural oluşturmak gerekir.

1. Masif A'yı bu sırayla n*m boyutunda doldurun, örneğin

1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
17 18 19 20 21 22 23 24
32 31 30 29 28 27 26 25
33 34 35 36 37 38 39 40
48 47 46 45 44 43 42 41

Massiv “yılan” ilkesini izleyecek. Değiştirme kuralı: eğer satır numarası eşleştirilmemiş bir sayı ise, o zaman A=(i-1)*m+j, aksi halde A=i*m-j+1.

M1A programı;

n, m, i, j: tamsayı;
başlamak
readln(n,m);
i:=1'den n'ye kadar başlar
j:=1'den m'ye yapmak için
başlamak
eğer mod 2 = 1 ise o zaman
A=(i-1)*m+j
başka
A=i*m-j+1;
yaz(A:3);
son;
writeln;
son;
readln;
son.

Verilen kuralı takip etmek için programa başka bir şekilde bakalım:

M1B programı;
var A:tamsayı dizisi;
n, m, i, j: tamsayı;
c:tamsayı;
başlamak
readln(n,m);
c:=1;
i:=1'den n'ye yapmak için
başlamak
j:=1'den m'ye yapmak için
başlamak
A:=c;
if (i mod 2 = 0) ve (j<>m) o zaman
aralık(c)
başka
dahil(c);
yaz(A:3);
son;
c:=c+m-1;
writeln;
son;
readln;
son.

2. A dizisini aşağıdaki prensibi kullanarak saklayın:

1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
0 12 0 13 0 14 0

M2 programı;
var A:tamsayı dizisi;
n, m, i, j: tamsayı;
c:tamsayı;
başlamak
readln(n,m);
c:=0;
i:=1'den n'ye yapmak için
başlamak
j:=1'den m'ye yapmak için
başlamak
eğer (i-1+j) mod 2 = 0 ise
C:=0
başka
başlamak
dahil(c);
A:=c;
son;
yaz(A:5);
son;
writeln;
son;
readln;
son.

3. A dizisini aşağıdaki prensibi kullanarak saklayın:

1 12 13 24 25 36
2 11 14 23 26 35
3 10 15 22 27 34
4 9 16 21 28 33
5 8 17 20 29 32
6 7 18 19 30 31

var A:tamsayı dizisi;
n, m, i, j: tamsayı;
c:tamsayı;
başlamak
readln(n,m);
c:=1;
j:=1'den m'ye yapmak için
başlamak
i:=1'den n'ye yapmak için
başlamak
A:=c;
if (j mod 2 = 0) ve (i<>o zaman
aralık(c)
başka
dahil(c);
son;
c:=c+n-1;
son;
i:=1'den n'ye yapmak için
başlamak
j:=1'den m'ye yapmak için
yaz(A:5);
writeln;
son;
readln;
son.

4. A dizisini aşağıdaki prensibi kullanarak saklayın:

1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

var i,j,m,c,d: tamsayı;

başlamak
c:=1;
readln(m);
j:=1'den m'ye yapmak için
başlamak
ben:=c;
d:=1;
tekrarlamak
A:=d;
inc(i);
eğer ben> isem o zaman
ben:=1;
dahil(d);
i=c'ye kadar;
aralık(c);
eğer c<= 0 then
c:=m-c;
son;
i için:=1 ila m yapmak
başlamak
j:=1'den m'ye yapmak için
yaz(A:2);
writeln;
son;
son.

5. A dizisini aşağıdaki prensibi kullanarak saklayın:

1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1

var m,i,j: tamsayı;
A:tamsayı dizisi;
başlamak
readln(m);
i için:=1 ila m yapmak
başlamak
j:=1'den m'ye yapmak için
başlamak
eğer (i=j) veya (m-i+1=j) ise o zaman
C:=1
başka
bir:=0;
yaz(A:2);
son;
writeln;
son;
son.

3. Bağımsız başarı için tasarım

6 5 4 3 2 1
7 8 9 10 11 12
18 17 16 15 14 13
19 20 21 22 23 24
30 29 28 27 26 25
31 32 33 34 35 36

36 25 24 13 12 1
35 26 23 14 11 2
34 27 22 15 10 3
33 28 21 16 9 4
32 29 20 17 8 5
31 30 19 18 7 6

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

4) Diziyi aşağıdaki prensibi kullanarak saklayın:

31 32 33 34 35 36
25 26 27 28 29 30
19 20 21 22 23 24
13 14 15 16 17 18
7 8 9 10 11 12
1 2 3 4 5 6

5) Diziyi aşağıdaki prensibi kullanarak saklayın:

31 25 19 13 7 1
32 26 20 14 8 2
33 27 21 15 9 3
34 28 22 16 10 4
35 29 23 17 11 5
36 30 24 18 12 6

Ev dekorasyonları:

1) Diziyi aşağıdaki prensibi kullanarak saklayın:

6 7 18 19 30 31
5 8 17 20 29 32
4 9 16 21 28 33
3 10 15 22 27 34
2 11 14 23 26 35
1 12 13 24 25 36

2) Diziyi aşağıdaki prensibi kullanarak saklayın:

31 32 33 34 35 36
30 29 28 27 26 25
19 20 21 22 23 24
18 17 16 15 14 13
7 8 9 10 11 12
6 5 4 3 2 1

3) Diziyi aşağıdaki prensibi kullanarak saklayın:

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

Dizi, tek bir isim altında birleştirilmiş, aynı türden veri grubu şeklinde sunulan veri yapısıdır. Çok sayıda benzer veriyi işlemek için devasa vikoristler kullanılır. Biraz sonra aynı göstergeleri fark edecek olanlardan oluşan bir dizim var. Bu masifin çevresine dizi elemanı denir. Dizinin elemanları herhangi bir türe verilebilir. Kitleler ya bir tanesine annelik yapabilir ya da birden fazla ölebilir. Birkaç boyutlu dizileri tek boyutlu dizilere, iki boyutlu dizilere, üç boyutlu dizilere ve n boyutlu diziye kadar bölmek gerekir. Çoğu zaman, programlanmış vicoristlerin bir ve iki dünya dizileri vardır, bu yüzden her iki diziye de bakacağız.

Tek boyutlu diziler C++

Tek boyutlu dizi, tek boyutlu bir dizideki öğelerin sayısını karakterize eden tek parametreli bir dizidir. Aslında tek boyutlu bir dizi, birden fazla satıra ve n'inci sayıda sütuna sahip olabilen bir dizidir. Tek boyutlu bir dizideki stovpt'ler dizinin elemanlarıdır. Küçük resim 1 tek boyutlu bir dizinin yapısını göstermektedir A. Bu masifin büyüklüğü 16 birimdir.

Malyunok 1 - C++'da Masivi

Lütfen tek boyutlu bir dizinin maksimum indeksinin A 15'ten fazladır, ancak dizinin ortalarının numaralandırması her zaman 0'dan başladığı için dizinin boyutu 16 ortadır. Ortanın dizini tamamen bilinmeyen bir sayıdır ve dış görünüme genişletmek için kullanılabilir. dizinin ortasında ve onun üstünde göz nuvati be-yaki dii (ortada).

//tek boyutlu bir diziyi boşaltmak için sözdizimi C++: /*veri türü*/ /*tek boyutlu bir dizinin adı*/; // bebek 1 tarafından tasvir edilen çarpıcı tek boyutlu dizinin sonu: int a;

de, tamsayılar;

A - tek boyutlu bir dizinin adı;
16 - tek boyutlu bir dizinin boyutu, 16 orta.

Dizi adının hemen ardından tek boyutlu dizinin boyutunun ayarlandığı ve değişiklikleri çözmek için dizinin bölündüğü kare kollar bulunur.

//tek boyutlu dizileri basitleştirmenin başka bir yolu int mas, a;

Satır başına 10 ve 16 boyutunda iki tek boyutlu mas dizisi açıklandı. Üstelik bu yöntemde tüm diziler yeni bir veri türü gerektirir: int - int.

// diziler boşken başlatılabilir: int a = (5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); //Tek boyutlu bir dizinin başlatılması

Tek boyutlu dizinin başlatılması, işaretten sonraki kıvrımlı kollarda gösterilir. bir masifin cilt elemanı ön komada güçlendirilir.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); //Diziyi boyutunu belirtmeden başlatır.

Derleyicinin kendisi tek boyutlu dizinin boyutunu belirledikten sonra. Dizinin boyutunun yalnızca başlatılması için belirtilmesine gerek yoktur, ancak acil durumlarda dizinin boyutunu belirtmesi gerekir. Tek boyutlu bir diziyi işlemek için basit bir program geliştirelim.

// array.cpp: konsol programının giriş noktasını tanımlar. #include "stdafx.h" #include << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// kod Kod::Bloklar

// Dev-C++ kodu

// array.cpp: konsol programının giriş noktasını tanımlar. #katmak ad alanı std'sini kullanma; int main(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

sen satırlar 10 - 11 Boyutu 16 sayıya eşit olan dizi1 boyutlarına sahip bir tamsayı tek boyutlu dizi boştur ve başlatılmıştır, böylece böyle bir dizi 16 sayıyı saklayabilir. Masifin işlenmesinin bir kerede mi yoksa döngüler halinde mi yapıldığı. Masifin işlenmesi için seçim döngüsü nedir? Bu görev için en uygun olanıdır. Tıp doktoru sayacı, tek boyutlu dizi dizisinin1 öğelerine genişleyecek şekilde kazanılacaktır. For döngüsünün devamı negatif bir işarete sahipse, tek boyutlu dizi dizisinde1 on altıncı indeksin hiçbir parçası yoktur. Ortaların numaralandırılması sıfırdan başladığı için dizi 16 elemanlıdır.cout operatörünün döngüsünde tek boyutlu bir dizinin başka elemanları da vardır (2 küçük eleman vardır).

Massiva indeksleri işleniyor massiva dizi1 5 dizi1 -12 dizi1 -12 dizi1 9 dizi1 10 dizi1 0 dizi1 -9 dizi1 -12 dizi1 -1 dizi1 23 dizi1 65 dizi1 64 dizi1 dizi1 hangi tuşa basın. . .

Malyunok 2 - C++'da Masivi

Tek boyutlu bir C++ dizisini işlemek için başka bir program yazalım. Program klavyeden girilen on sayıyı sırayla okumalıdır. Girilen tüm sayılar toplanır ve sonuç ekranda görüntülenir.

// array_sum.cpp: konsol programının giriş noktasını tanımlar. #include "stdafx.h" #include << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// kod Kod::Bloklar

// Dev-C++ kodu

// array_sum.cpp: konsol programının giriş noktasını tanımlar. #katmak ad alanı std'sini kullanma; int main(int argc, char* argv) ( int dizi1; // cout dizisinin tamamını boşalt<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >>dizi1; // klavyeden girilen sayıları okur<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Dizinin işlenmesini tamamlamadan önce oy vermek gerekir ve zihinsel göreve göre belirlendiği için tek boyutlu dizinin boyutu 10'dan fazladır. Toplam değişkeni, tek boyutlu bir dizinin öğelerinin toplamını toplar. İlk for döngüsü, tek boyutlu bir diziyi klavyeden girilen sayılarla doldurur, satırlar 12 - 13. Sayaç değişkeni, 0'dan 9'a kadar indeksten başlayarak aynı boyutlu dizi dizisinin1 öğelerine sıralı erişim için kullanılır. Başka bir for döngüsü ekranda bir dizi öğe görüntüler, satırlar 15 - 16. Üçüncü döngü, tek boyutlu bir dizinin elemanlarını sırayla okur ve bunları toplar; toplam, toplam değişkeninde toplanır. satırlar 17 - 18. Robotik programın sonucu bebeğe hayret etmek 3.

Elementi massiva'yı girin: 0 1 2 3 4 5 6 7 8 9 dizi1 = (0 1 2 3 4 5 6 7 8 9 ) toplam = 45 Devam etmek için herhangi bir tuşa basın. . .

Malyunok 3 - C++'da Masivi

Öncelikle 10 sayının tamamı sırayla girildi, ardından tek boyutlu bir dizi görüntülendi ve sayıların toplamı diziye eklendi.

İki dünya dizileri C++

Sonsuza kadar kuşatılabileceğimiz tek dünya masiflerini ne kadar uzaktan gördük? Tablodaki verileri işlemeniz gerekebilir. Tablonun iki özelliği vardır: satır sayısı ve sütun sayısı. Ayrıca iki boyutlu bir dizide, dizideki eleman sayısının yanı sıra iki boyutlu dizide satır sayısı, sütun sayısı gibi özellikler de bulunmaktadır. Yani görsel olarak iki dünyalı bir dizi var - satırlar ve sütunlardan oluşan birincil tablo. Aslında iki boyutlu bir dizi, tek boyutlu dizilerin tek boyutlu bir dizisidir. Boyutları a, boyutları m x n olan iki boyutlu bir dizinin yapısı aşağıda gösterilmiştir (bölüm 4).

Malyunok 4 - C++'da Masivi

de, m - iki dünya dizisinin satır sayısı;
n - iki dünya masifindeki insan sayısı;
m * n – dizideki öğe sayısı.

// iki boyutlu bir diziyi boşaltmak için sözdizimi /*veri türü*/ /*dizinin adı*/;

Sağırlaştırılmış iki boyutlu bir dizide, tıpkı sağırlaştırılmış tek boyutlu bir dizide olduğu gibi, şunu girmek gerekir:

  • veri tipi;
  • Ben çok iriyim.

Bu nedenle, ilk kare kollar iki boyutlu bir dizideki satır sayısını belirtirken, diğer kare kollar iki boyutlu bir dizideki satır sayısını gösterir. İki boyutlu dizi görsel olarak başka bir çift kare kolla alt bölümlere ayrılmıştır. Sersemlemiş iki dünya masifinin kıçına bir göz atalım. Belki 15 kadar elemanı olan iki boyutlu bir diziyi değerlendirmemiz gerekiyor. Bu iki boyutlu dizi üç satır beş sütunlu ya da beş satır üç sütunlu olabilir.

// Şaşırmış dvomirny dizisinin sonu: int a;

  • a - tüm dizinin adı
  • ilk kare kolların sayısı, her biri 5 olan iki boyutlu bir dizinin satır sayısını belirtir;
  • Diğer kare kolların sayısı iki boyutlu dizinin eleman sayısını gösterir, bunlardan biri için 3 tane vardır.

// iki boyutlu bir dizinin başlatılması: int a = ((4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1) );

Bu dizide 5 satır ve 3 sütun bulunmaktadır. Atama işaretinden sonra ortasına iki boyutlu dizilimdeki sıra sayısı kadar şekilli kol çifti bulunan şekilli kemerler yerleştirilir ve bu kollar öbeklere bölünür. Derideki bir çift şekilli kemerde, iki boyutlu dizinin elemanları koma yoluyla kaydedilir. Tüm şekilli kollar birleştirilebilecek çok sayıda öğeye sahiptir. Dizinin beş sırası olduğundan, aynı zamanda beş dahili kol çifti de vardır. İç kemerlerde üç unsur, bazı kemerlerde ise üç unsur bulunur. Grafiksel olarak dizimiz çift tabloya (bölüm 5) benzeyecektir.

Malyunok 5 - C++'da Masivi

İki katmanlı masifin cilt merkezinde A değer gösterilir, sağ alt kutuda şirketin adresi gösterilir. İki boyutlu dizinin ortasının adresi dizinin adı, satır numarası ve sütun numarasıdır.

“Labirent” adında iki boyutlu bir masifin işlenmesi için çok karmaşık bir program geliştirdik. Labirent, iki boyutlu bir diziye dayalı uyaranlar içerir. Labirentin boyutu yetkililerin takdirine göre seçilecektir.

// array2.cpp: konsol programının giriş noktasını tanımlar. #include "stdafx.h" #include < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) başka türlü<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// kod Kod::Bloklar

// Dev-C++ kodu

// array2.cpp: konsol programının giriş noktasını tanımlar. #katmak ad alanı std'sini kullanma; int main(int argc, char* argv) ( // 1-mental olarak “labirentin duvarları” // 2-“doğru yol, labirentten çıkış” // 0-“hibny yolu” int mas = ((1, 2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // iki boyutlu bir dizinin başlatılması ( 1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1 ,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1,), (1,2,2,2,2,2,2, 1,2,1,1 ,1,1,2,1,0,0,1,0,1,), (1,1,1,1,1,1,2,1,2,1,0 ,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2, 0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1 ,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0, 0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0 ,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1, 1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2 ,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,) , (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1 ,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2, 1,2,1,0 ,1,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0 ,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0, 0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0 ,1,2,1, ), (1,2,1,2,1,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1, ), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2, 1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1 ,0,0,1, 1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1, 2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1 ,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1, 1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1 ,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2 ,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2, 1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1 ,1,1,1, 1,1,1,1,1,1,1,1,1,))); // for (int i = 0; i) dizisinin kaplama öğesine eklenecek olan iç ve dış olmak üzere iki döngü< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) başka türlü<< " "; // вывести два пробела cout << endl; } return 0; }

Doğru ve yanlış yollar bir veya aynı sayıyla, örneğin sıfırla veya kesinlik için değerlerin doğru yolu 2 sayısıyla belirtilebilir. Dizinin başlatılması, yalnızca işlemi basitleştirmek için manuel olarak yapıldı. programı. Program iki boyutlu bir diziyi işlediğinden, iki boyutlu dizinin elemanları arasında geçiş yapmak için iki döngü gerekir. İlk for döngüsü, iki boyutlu bir dizinin satırları arasında geçiş yapmaktan oluşur. İki boyutlu dizideki satırların parçaları 33'tür, ardından değişim doktoru i 0'dan 33'e artırılır, 46. ​​sıra. İlk döngünün ortasında, iki boyutlu bir dizinin bir satırının elemanları arasında geçiş yapan bir for döngüsü vardır. Başka bir for döngüsünün ortasında, veri tipinin (statik_cast) tekli dönüşüm işlemi vardır.<>() , bu da 176 numaralı semboldür. Veri türlerini dönüştürme işlemi, labirentin genişliğini artırmak için kopyalanır. Robotik programın sonucu (böl. Şekil 6).

Malyunok 6 - C++'da Masivi

Masiv (Ayrıca Dizin dizisi, düğümler masa, sıra) - bellekten tek tek alınan, erişimi erişime tabi olan aynı türde bir değişiklik (veri) kümesinin adlandırılması (sıralanması) indeks. En basit şekilde masif Sürekli çalışır ve aynı türdeki veri birimlerini kaydeder.

Dizin w masiwu - tse numarası tüm belirli bir dizi öğesini gösteren

Aranacak dizideki indekslerin sayısı değişebilir. Tek indeksli dizilere denir tek boyutlu, iki - iki boyutlu vesaire.

Tek boyutlu Dizi kesinlikle eşleşmiyor vektör Matematikte, iki boyutlu - matrisler . Çoğu zaman masif durgunlaşır bir ya da başka iki indekslere bazen üç, hatta daha fazla indekse nadiren de olsa rastlanmaktadır.

Dizi şu şekilde anlatılıyor:

En yaygın indeks türü bir aralıktır, örneğin:

Açıklamak daha iyi dizi B, Ne ile gelişir? 5 unsurlar ve sembolik dizi R, Ne ile gelişir? 34 elementler. Masiwu için sen 5 * 6 = 30 byte hafıza görülecektir (çünkü değiştirilebilir tip altında) Gerçek görünür 6 bayt bellek), R dizisi için - 1*34=34 bayt bellek (değişken tür altında) Karakter - 1 bayt). Temel tip Dizinin öğeleri herhangi bir şekilde yapılandırılabilir, örneğin, dosya dışında yapılandırılabilir! Masif Wikoristanny'de seslendirilebilir Vlasny tip:

Döngü Oldukça kısa ve bir şekilde düzenlenmiş (örneğin zihinsel geçişe yardımcı olmak için) talimatlar dizisi olarak adlandırılabilir.

Vücudun tek bir döngüsüne denir yineleme. Viraz bu da bir dahaki sefere berbat olacağın anlamına geliyor yineleme, veya döngü bitiş - tse umova çıkış chi döngünün sonu(Ayrıca mümkündür ve entelektüel devamıdır). Yinelemenin satır numarasını kaydeden belleğe denir şifacı yinelemesi döngü basit doktor döngü. Döngü intikam almak zorunlu değil doktor.

Döngüler öfkeleniyor:

- Döngü bir doktorla değiştirilebilir eylemin değerini belirtilen değerden değiştirdiği koçanı kadar değer Kintsevogo eylemin anlamı timsah ve vücut değişim döngüsünün cilt değeri bir kez tamamlanır. Operatör tarafından uygulanır için

popo. Kaydetmek masif:

Ve böylece hatırlayabilirsin iki boyutlu sıralamak:

- Döngü fikir değişikliği ile, zihnin gerçek çalışması koçanı önünde gösterilirken sözlerini bitiriyor. Operatör tarafından uygulanır sırasında.

- Döngü postumova ile Döngünün tamamlanmasından sonra zihnin yeniden kontrol edildiği ve ardından bedenin en az bir kez yeniden oluşturulduğu bir sistem. Mov Pascal'da bu döngü operatör tarafından uygulanır. e kadar tekrar edin

İlk operasyon yinelemeyi atla, eğer iş parçacığı yinelemesindeyse döngü Tamamlanan döngünün sonuna kadar tüm komutları atlamak gerekir. Bu durumda, döngünün kendisi kesintiden değil, devamından dolayı suçlanacak, ilk sıranın sorumlusu çıktıdır. Operatör tarafından uygulanır devam etmek.

Ayrıca döngülerde komuta genellikle galip gelir döngüden dize öncesi çıkışÖrneğin vücut bittiğinde döngü bir kesinti gösteriyorsa, daha fazla çalışma sonrasında döngü duyuya zarar vermez. Operatör tarafından uygulanır ÇIKIŞ ya da başka kırmak.

Haydi koçana, daha doğrusu koçana dönelim popo. Bu küçük yazılım parçasıyla ne yapacağımızı bulmamız gerekiyor:

Söylenenlerden yola çıkarak, vikorystvovany iki dünya masifi A- bu matris boyutu N X N. Döngü zafere ulaşıyor bir doktorla birinden N daha önce belirtilmiş olabilir.

Döngü ortası: değişiklik H iki boyutlu bir dizinin değerlerini bir indeksle saklar (c:=A), Şu anda . Daha sonra dizideki bu elemanın yerine aynı dizinin elemanının değerleri ve indeks ile girilir. (bir:= bir), ya da ne zaman k:=1 (bir:= bir). Tobto. ilk satırın elemanları dahil edilmiştir, çünkü Dizindeki ilk sayı matristeki satır numarasını gösterir - [ Ben j) ve istasyon numarası için diğerine - . Son olarak indeksli elemanın bulunduğu yerde , dizi öğesinin birincil değeri olarak girilmelidir A indeksli sanki yemeğin sonuna gelmişiz gibi H (A:=c).

Ve anlam döngümüzün her tekrarında Ben kadar artar bir. Timsahlar için basit. Şimdi başla :

h:=A A:=A A:=c

h:=A A:=A A:=c

h:=A A:=A A:=c

Evet N daha önce defalarca . Tobto. Matrisin köşegenlerinin değerleri düz sağa ve aşağıya doğrudur. BEN Bu köşegenin elemanları elemanların değerlerine göre değişir Birinci matris drenajları(veya k-Bu sıra). Yani doğru cevap şu: seçenek 3: Bu algoritma yer değiştirir diyagonal elemanlarktablonun inci sütunu.

Pascal, iki boyutlu bir diziyi, elemanlarının türü de bir dizi (dizi dizisi) olan tek boyutlu bir dizi olarak ele alır. Pascal'ın iki boyutlu dizilerindeki öğelerin konumları iki indeksle tanımlanır. Dikdörtgen bir tablo veya matris şeklinde sunulabilirler.

Pascal'ın 3*3 boyutlarındaki iki boyutlu dizisine bakalım, o zaman içinde üç satır ve her satırda üç öğe olacak:

Deri elemanın, tek katmanlı dizilerde olduğu gibi kendi numarası vardır, ancak bu sayı aynı zamanda iki sayıdan oluşur: elemanın bulunduğu satırın numarası ve bu sayının birleşimi. Bu şekilde elemanın numarası satır ve sütunun üst çubuğu ile gösterilir. Örneğin 21, diğer satırda ve ilk sütunda yer alan bir öğedir.

Pascal'ın iki dünya dizisinin açıklaması.

Pascal'ın iki boyutlu düzenini patlatmanın birkaç yolu var.

Elemanları herhangi bir tipte olabilen tek boyutlu dizileri zaten tanımlayabiliriz ve bu nedenle elemanların kendisi de dizi olabilir. Farklı türlerin aşağıdaki açıklamalarına bir göz atalım:

Pascal'ın iki dünya dizisinin açıklamasına bir örnek

Tip
Vektör = dizisi<тип_элементов>;
Matris = vektör dizisi;
Var m: matris;

Her biri 5 satırdan oluşan 10 satırdan oluşan Pascal'ın iki boyutlu dizisine m adını verdik. Bu durumda m [i] i-inci satıra eklenebilir ve m [i, j] i-inci satırın ortasındaki j-inci kaplama elemanına uygulanabilir.

İki boyutlu Pascal dizileri için türlerin değerleri tek satırda belirtilebilir:

Tip
Matris = dizi dizisi< тип элементов >;
veya daha da basit:
tip
matris = dizisi<тип элементов>;

İki boyutlu bir dizinin elemanlarına yuvarlama şuna benzer: M [i, j]. Bu, i'inci satıra ve j'inci sütuna eklenen öğeyi kaldırmak istediğimiz anlamına gelir. Burada sıraları tezgahlarla karıştıramayız çünkü canavarı bir kez daha akıl almaz bir unsura indirgeyebiliriz. Örneğin M elemanına giderek girişin doğru formunu oluşturabilir veya isteği robot programından çağırabilirsiniz.

Pascal'ın iki boyutlu dizileriyle temel işlemler

Tek boyutlu dizilerdeki ana eylemler hakkında söylenen her şey matrisler için de geçerlidir. Bir bütün olarak aynı türdeki matrisler üzerinde yapılabilecek tek işlem fiyattır. Dolayısıyla, programlar aynı türden iki matrisi tanımladığında, örneğin:

tip
matris = tamsayı dizisi;
var
a, b: matris;

daha sonra programın düzenlenmesi sırasında matrisler atayabilirsiniz A matris değerleri B(a: = b). Diğer tüm eylemler öğe öğe eklenir ve tüm geçerli işlemler, bu dizi öğelerinin türü için tanımlandığı şekilde öğelere eklenebilir. Bu, eğer bir dizi tam sayılardan oluşuyorsa, elemanları üzerinde tam sayılara yönelik işlemleri gerçekleştirebileceğiniz, dizi sembollerden oluşuyorsa, onlardan önce sembollerle çalışmaya yönelik işlemleri gerçekleştirebileceğiniz anlamına gelir.

Pascal'ın iki dünya dizisinin tanıtımı.

Tek boyutlu bir dizinin elemanlarını sırayla tanıtmak için, indeks değerlerini 1'den geri kalanına değiştirdiğimiz bir for döngüsü kullandık. İki boyutlu Pascal dizisindeki bir öğenin konumu iki endeksle gösterilir: satır numarası ve sütun numarası. Bu, satır numarasını sürekli olarak 1'den kalana değiştirmemiz gerektiği ve dış görünüm satırında satırların elemanlarını 1'den kalana doğru sıralamamız gerektiği anlamına gelir. Şimdi, biri diğerinin içine yerleştirilmiş iki for döngüsüne ihtiyacımız var.

Klavyeden Pascal'ın iki boyutlu dizisine girme örneğine bir göz atalım:

Pascal'ın iki boyutlu dizisini klavyeden girmek için bir program örneği

tip
matris = tamsayı dizisi;
var
a: matris;
i, j: tamsayı; (Endeks masifi)
başlamak
for i:=1 ila 5 do (tüm satırları yinelemek için döngü)
readln(a[i, j]); (klavyeden i'inci satır ve j'inci sütundaki öğeyi girin)

Pascal'ın iki dünyalı masifi basit bir şekilde saklanabilir. Rastgele (N) işlevini kullanın ve ayrıca belirli bir virüsün değerini matrisin dış görünüm öğesine atayın. Pascal'ın iki boyutlu dizisini doldurma yöntemi, eldeki göreve bağlı olarak seçilir, ancak her durumda, cilt satırındaki ve cilt katmanındaki cilt öğesinin değerleri suçlanacaktır.

Pascal'ın iki dünya dizisini ekrana taşıyor.

Pascal'ın iki boyutlu dizisinin elemanlarının türetilmesi de sıralı olarak ilerlemektedir; dış yüzey sırasının ve dış yüzey sütununun elemanlarının gerilmesi gerekmektedir. O zaman kim tek sıra halindeki gibi unsurların el ele olmasını ister ki? arka arkaya ve travers elemanları birbiri ardına düzenlendi. Yapılması gerekenler için eylemlerin sırası şu şekildedir (önceki örnekte açıklanan dizi için programın bir parçasına bakalım):

Pascal'ın iki dünya programına örnek

for i:=1 ila 5 do (tüm satırları yinelemek için döngü)
başlamak
j:=1'den 10'a kadar do (satırın tüm elemanlarını uyuyanlara göre sıralama)
yaz(a[i, j]: 4); (diğer öğeler, dış görünüm öğesini görüntülemek için 4 konumun girildiği bir ekran satırındaki matrisin i'inci satırında olmalıdır)
writeln; (Öncelikle matristeki satır numarasını değiştirin, imleci yeni ekran satırının başına getirmeniz gerekir)
son;

Saygı ( Bu önemli!): Çoğu zaman, öğrenci programlarında klavyeden veya ekrandaki görüntüden gelen girdiler şu sırayla gerçekleşmeye zorlandığında sorunlarla karşılaşılır: readln(a), writeln(a), de A- Bu masif tipi için önemlidir. Bu durumda, derleyicinin bu türden bir değişikliği yakalamanın veya zorlamanın imkansız olduğuna dair bilgisi karşısında şaşırırlar. Belki N kuklov'u arka arkaya dururken ve elinizde örneğin bir su ısıtıcısı görürseniz neden bir şeyler kazanamayacağınızı anlayacaksınız. “Su dök” komutunu uygulayıp tüm yığınları aynı anda doldurabilir misiniz? Eğer ıslatmasaydınız deri ceketin içine biraz bamya dökmeniz gerekecekti. Dizi elemanlarının doldurulması ve görüntülenmesi de sırayla ve eleman eleman yapılmalıdır, çünkü EOM belleğinde dizinin elemanları ardışık diziler halinde büyür.

Pascal'ın hafızadaki iki dünya dizisine bir saygı duruşu

Makinenin belleğindeki soyut dizinin öğeleri, açıklamayla birlikte fiziksel olarak sırayla genişletilir. Bu durumda, dış görünüm öğesi bellekte büyük miktarda bayt kaplar ve bu da onun boyutunu gösterir. Örneğin, bir dizi tamsayı tipindeki öğelerden oluşuyorsa, her öğe iki bayt yer kaplar. Ve dizinin tamamı S 2 bayt kaplıyor; burada S, dizideki öğelerin sayısıdır.

Masifi kaç yere götüreceksiniz, peki masiflerle birlikte. matris? Açıkçası: S i^S j, burada S i satır sayısıdır ve S j her satırdaki öğelerin sayısıdır. Örneğin masif tip için

Matris = tamsayı dizisi;

12 bayt hafıza gereklidir.

Bu masifin unsurlarını nasıl hatırlayabiliriz? M tipi matris dizisinin bellekteki düzenine bir göz atalım.

M tipi tamsayı kaplama elemanının altında iki hafıza bölmesi vardır. Hafızanın yeri “aşağıdan yukarıya”dır. Öğeler, iç içe geçmiş döngülerin şemasını gösteren indeks değişim sırasına göre yerleştirilir: ilk satır önce yerleştirilir, sonra diğeri, üçüncüsü... Satırın ortasında, öğeler sırayla gider: ilk , diğeri vb.

Bildiğimiz gibi herhangi bir değişikliğe erişim, ancak değişikliğin kaydedildiği hafızanın ortasına adresin girilmesiyle mümkündür. Programlar tarafından kullanıldığında değişiklik için belirli bir bellek görünür, böylece değiştirilebilir bellek ile bilgisayar adresi arasında karşılıklı yazışma sağlanır. Değişikliğe dizi adını verdiysek program dizinin koçanının, ardından ilk elemanının adresini biliyor demektir. Dizinin diğer tüm öğelerine erişim nasıl sağlanır? İki boyutlu dizi öğesinin saklandığı belleğe fiilen erişildiğinde sistem, aşağıdaki formülü kullanarak adreslerini hesaplar:

Addr + SizeElem * Sütunlar * (I -1) + SizeElem * (J -1),

de Addr – dizinin bellekte bulunduğu gerçek kök adresi; I, J - iki boyutlu bir dizideki öğe endeksleri; SizeElem – dizi öğesinin boyutu (örneğin, tamsayı türündeki öğeler için iki bayt); Sütunlar – bir satırdaki öğelerin sayısı.

Viraz SizeElem * Cols * (I -1) + SizeElem * (J -1) koçanı masifinin yer değiştirmesi olarak adlandırılır.

Dizi için ne kadar bellek kullanılabilir?

Dizinin altında ne kadar belleğin göründüğüne değil (önceki bölümde tartıştığımız gibi), belleğin bakımından sorumlu olan dizinin izin verilen maksimum boyutuna bakalım.

Robotik programlar için bellek her biri 64 KB’lık segmentlerde görülür ve bunlardan en az biri şu şekilde belirlenir: veri segmenti. Bu segmentin ekseni, program tarafından işlenen verilerle aynıdır. Elbette programlar bir segmentte birden fazla genişletilemez. Bu nedenle segmentte tek bir değişiklik olduğu için dizi olarak tanımlanır ve 65536 byte'tan fazlasının çıkarılması mümkün değildir. Ve yine de, veri bölümündeki diziye ek olarak, diğer değişikliklerin açıklamaları da olacak, dolayısıyla dizinin altında görülebilen gerçek bellek depolama alanı şu formül altında bulunacaktır: 65536-S, burada S, Dizinin altında görülebilen bellek depolama alanımız değiştirilebilir.

Neyi bilmeniz gerekiyor? Şaşırmamak için, derleme sırasında çevirmen, programda bir açıklama varsa (sözdizimine göre doğru): uzun süredir devam eden bir dizinin derlenmesiyle ilgili bir bildirim görüntüleyecektir:

myArray = tamsayı dizisi yazın;

Tam sayıların çift baytlık sayılarını kullanarak aslında birçok öğeli bir diziyi okuyabileceğinizi zaten biliyorsunuz, bu da 65536/2 –1=32767'ye eşit. Ve bunun nedeni başka hiçbir değişiklik olmayacağıdır. Suçlu annelerden oluşan iki dünya dizisinin indeksleri arasında daha da küçük sınırlar var.

Pascal'ın iki boyutlu dizilerinden ayırma problemlerini uygulayın.

Zavdannya: Matrisin sıfır olmayan elemanlarının sayısını bulun.

Karar:

  • En önemli görev için aşağıdaki değişikliklere ihtiyacımız var: örneğin tüm öğelerden oluşan bir matris; P – 0'ın altında yer alan elemanların eklenmesi; I, J – dizi indeksleri; N, M – matristeki satır ve sütun sayısı.
  • Giriş verileri N, M'dir - değerleri klavyeden girilir; matris – matrisin tanıtılması, matrisin özel bir siparişle doldurulmasına yönelik bir prosedür olarak resmileştirilebilir. ek random() işlevi için.
  • Çıkış verileri değiştirilebilir P (katı) değeri olacaktır.
  • Program ekranının doğruluğunu doğrulamak için, matrisi görüntüleme prosedürünü formüle edeceğimiz ekranda matrisi görüntülemeniz gerekir.
  • Görevin ilerlemesi:

Ana programın ilk uygulamasını tartışalım, prosedürlerin uygulanması biraz sonra tartışılacaktır:

  • N ve M değerlerini girin;
  • a'nın bir matris olduğu vvod(a) prosedürüne giden Pascal'ın iki boyutlu dizisini tanıtıyoruz;
  • Print(a) prosedürüne geçeceğimiz bir matris oluşturalım;
  • Nadamo koçanı değeri değişimi P =1;
  • 1'inciden N'ye kadar tüm I satırlarını sırayla yineleyeceğiz, dış yüzey satırı için 1'inciden M'ye kadar tüm J sütunlarını yineleyeceğiz, matrisin dış öğesi için bu zihinsel olarak doğrulanabilir: a ij nedir? 0, tvir P a ij öğesiyle çarpılacaktır (P = P * a ij);
  • Matrisin sıfır olmayan ek elemanlarının değerleri ekranda görüntülenir - P;

Şimdi prosedürlerden bahsedelim.

Saygı (bu önemli!) Bir prosedür parametresi atanan türe değiştirilebilir; bu, bir diziyi prosedüre parametre olarak geçirmek için türünün arkasındaki açıklamalara tabi olduğu anlamına gelir. Örneğin:

Tip
Matris = tamsayı dizisi;
prosedür primer(a: matris);
..............................

Şimdi prosedürlerimize dönelim.

Bir matris girme prosedürüne, prosedürün vvod parametresi - bir matris denir ve sonuç olarak ana programa aktarılır ve parametrenin iletilmesi gerekir. Yani prosedürümüzün başlığı şuna benzer:

Prosedür vvod (var m: matris);

Prosedürün ekleme döngülerini uygulamak için k ve h gibi yerel değiştiricilere ihtiyacımız var. Matrisin doldurulmasına ilişkin algoritma zaten tartışılmıştı, bu yüzden tekrarlamayacağız.

Bir matrisi ekranda görüntüleme prosedürüne yazdırma denir, prosedürün parametresi matristir ve bu durumda giriş parametresi de değerler boyunca iletilir. Bu prosedürün başlığı şu şekilde görünecektir:

Prosedür baskısı (m: matris);

Ve yine, yatırım döngülerinin prosedürün ortasında uygulanması için daha fazla doktora ihtiyacımız olacak, bırakın onlara bu şekilde çağrılsın - k ve h. Matrisin ekranda görüntülenmesine yönelik algoritma bu açıklamada daha hızlı bir şekilde açıklanmıştır.

Butt of Pascal'ın iki dünya programı

Üretilen program;
Tip
Matris = tamsayı dizisi;
Var
A: matris;
N, m, i, j: bayt;
P: tamsayı;
Prosedür vvod (var m: matris);
Var k, h: bayt;
Başlamak
i:=1'den n'ye yapmak için (küresel ve aynı zamanda "görünür" olan prosedür için n'yi değiştirin)
j:=1'den m'ye kadar do (prosedür için m değişikliği geneldir ve bu nedenle "görünür")
M:= rastgele(10);
Son;
Prosedür baskısı (m: matris);
Var k, h: bayt;
Başlamak
i:=1'den n'ye kadar şunu yapın:
başlamak
j:=1'den m'ye kadar şunu yapın:
Yaz(M:4);
Yazın;
son;
Son;
Başla (ana programın başlangıcı)
Writeln("Matris boyutunu giriniz:");
Readln(N, M);
Vvod(a);
Yazdır(a);
P:=1;
i:=1'den N'ye kadar
j:=1'den M'ye kadar
Eğer bir<>0 sonra p:=p*a;
Writeln(p);
Son.

© 2024 androidas.ru - Android hakkında her şey