Масиви в Pascal - Информатика, програмиране
федерална образователна агенция
GOU VPO Тулска държавна педагогическа
университет. Л.Н. Толстой
„Масиви в Паскал“
Студентка 3-та година
група Б, отдел на Московския физико-технически институт
1. Видове масиви
1.1. Едномерни масиви
1.2. Примерни задачи
1.3. 2D масиви
1.4. Примерни задачи
2. Сортиране на масиви
2.1 Метод на прости обмени (Сортиране с мехурчета)
2.2. Сортиране чрез прост избор
2.3 Сортиране чрез просто вмъкване (метод на вмъкване и преместване)
3. Параметри на масив и параметри на низ
В Pascal има различни типове данни. Помислете за производни типове. Всяка стойност от който и да е от тези типове в общия случай вече е нетривиална структура, т.е. обикновено тази стойност има повече от един компонент. Освен това, всеки компонент на структурата може да бъде както отделни данни, така и на свой ред нетривиална структура, т.е. стойност от който и да е от производните типове. По този начин стойностите на производните типове обикновено имат йерархична структура, на най-ниското ниво на която се появяват само отделни данни. Тези компоненти от по-ниско ниво могат да бъдат присвоени стойности и да се показват в изрази, точно като стойностите на променливи от скаларен тип. Данните, които са стойности на скаларни типове, заемат сравнително малко място в паметта на компютъра. Единичен символ, например, обикновено се представя от един байт (8 бита). За числа от различни типове, в зависимост от изпълнението, се разпределят няколко байта. Данните, които съставляват стойността на производния тип, обикновено заемат значително количество компютърна памет. В тази връзка, когато пишете програми за компютри със сравнително малко количество памет,има проблем с икономичното му използване. Pascal предоставя възможността да посочи на преводача необходимостта от икономично представяне на стойностите на производните типове. За да направите това, присвояването на производен тип трябва да започне със служебната дума packed, което означава опакован. Но след въвеждането на изискването данните да бъдат пакетирани, трябва ясно да се разбере, че, от една страна, това изискване не винаги може да бъде изпълнено от преводач (ако, например, по-икономично представяне от обичайното неопаковано представяне за данни от този тип просто не съществува в компютър). От друга страна, ако е осъществимо, това води до увеличаване на времето за изпълнение на програмата. Нека обясним с пример защо това се случва. Както бе споменато по-рано, един знак заема един байт. Една клетка от паметта на машината, с която работят компютърните команди, обикновено се състои от няколко байта. Следователно, ако един символ бъде поставен в клетка, по-голямата част от него няма да бъде използвана. Всъщност можете да поставите няколко знака в една клетка (опаковано представяне). Но след това всеки път, когато трябва да извършите действие върху един символ, ще трябва да изберете този знак от клетката (разопаковайте знака от клетката). По същия начин, когато записвате отделен знак в паметта на машината, ще е необходимо да определите мястото в клетката, където трябва да бъде поставен, и да въведете знака точно там, без да променяте съдържанието на останалите битове (опаковане на знака в клетката). Такива допълнителни действия могат да заемат значителна част от общото време за изпълнение на програмата. Следователно програмистът винаги трябва да вземе решение за използването на пакетирано представяне на данни, в зависимост от конкретните условия и цели, които преследва. Така че стойностите на производните типове могат да бъдат представени в компютърната памет вопаковани и разопаковани. Представянето в кутия изисква, най-общо казано, по-малко памет, но забавя изпълнението на програмата. Ще разгледаме най-често срещания производен тип, а именно редовния тип. Стойност от нормален тип обикновено се нарича масив. И така, масивът е подреден набор от фиксиран брой от някои стойности (компонент на масив). Всички компоненти трябва да бъдат от един и същи тип, който се нарича тип компонент или базов (за масив) тип.
Типът данни Array позволява на един идентификатор да посочи множество стойности, които се различават по пореден номер. Номерът на елемента на масива се посочва след идентификатора в квадратни скоби. При описание на масив се посочва диапазонът от номера на елементите на масива и типът, към който принадлежи всеки от неговите елементи. Масивите могат да бъдат едно-, дву- и многомерни.
Ориз. Изображение на едно-, дву- и тримерни масиви.
Пример за описание и попълване на елементи на масив.
M: масив [1..5] от цяло число;
M1: масив [2..3,11..15] от char;
1. Видове масиви 1.1 Едномерни масиви
Всеки специфичен масив, използван в програмата, трябва да получи собствено име. Ще наричаме това име пълната променлива, тъй като нейната стойност е целият масив. Всеки компонент на масива може да бъде изрично идентифициран чрез указване на името на масива, последвано от селектор на компонент, индекс в квадратни скоби, който определя правилото за изчисляване на броя на желания компонент. Тази разлика от обичайната нотация на индекса в математиката, когато е посочена вдясно в долната позиция, се дължи на необходимостта от използване на линейна нотация на програмата, така че многостепенната нотация трябва да бъде изключена. Когато се отнася до компоненти на масива, индексът се записва на същото ниво като иметои оградени в квадратни скоби. Така за препращане към отделни компоненти се използва запис от формата (име на масив) [ ], който ще наричаме частична променлива (тъй като стойността му не е целият масив, а негов отделен компонент, чийто номер е даден от индекса) - по отношение на масивите се нарича променлива с индекс. В нашия пример масивът ще бъде наречен v и препратките към отделните му компоненти се правят с помощта на частични променливи v[ 1], v[2], . v[100]. В общия случай като индекс може да се използва израз, чиято стойност определя номера на компонента на масива. В същото време е важно променливите да могат да бъдат включени в индексния израз, така че когато техните стойности се променят, стойността на индекса, която определя номера на компонента на масива, също се променя. Така една и съща променлива с индекс по време на изпълнение на програмата може да обозначава различни компоненти на масива. Типът стойност на индексен израз се нарича тип индекс. Наборът от стойности на типа индекс трябва да бъде изброен набор, като по този начин определя броя на компонентите и тяхното подреждане. Когато указвате нормален тип, в допълнение към типа на индекса, трябва да укажете типа на компонента. Задаване на регулярен тип като едномерен масив, т.е. вектор, изглежда така:
масив [(индекс тип)] off , където е името или спецификацията на типа.
1.2 Примери за задачи
Задача 1. Даден е линеен масив от цели числа. Пребройте колко различни числа има в него.
ИДЕЯ ЗА РЕШЕНИЕ: стартираме спомагателен масив, елементи
които са логически стойности (False - ако елементът
вече срещани преди, Вярно - в противен случай)>
Var I, N, K, Kol : Цяло число;
A : масив [1..50] от цяло число;
Lo : Array[1..50] от Boolean;
Write('Въведете броя на елементитемасив: '); ПрочететеLn(N);