Ф Е Д Е РАЛ Ь Н О Е АГ Е Н Т С Т В О П О О БРАЗО В АН И Ю В О РО Н Е Ж С КИ Й Г О С У Д АРС Т В Е Н Н Ы Й У Н И В Е РС И...
25 downloads
190 Views
327KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Ф Е Д Е РАЛ Ь Н О Е АГ Е Н Т С Т В О П О О БРАЗО В АН И Ю В О РО Н Е Ж С КИ Й Г О С У Д АРС Т В Е Н Н Ы Й У Н И В Е РС И Т Е Т
ЯзыкпрограммированияPascal. Р егу л я р ны е т и п ы данны х П р акти кум С п ециа л ь но с ть 010101 (010100) М а тем а тика
ВО Р О Н Е Ж 2005
2
У тверждено научно-методическимсоветомМ атематического ф акуль тета– ( 28 ф евраля2005 года, протокол № 6 )
С оставители: В асиль евВ .В ., Х ливненко Л .В .
П рактикумподготовлен накаф едре математического моделированияматематического ф акуль тетаВ оронежского государственного университета. Рекомендуетсядлястудентоввечернего отделенияматематического ф акуль тетаВ оронежского государственного университета.
3
1. С труктуриро ва нны е тип ы д а нны х. М а с с ивы В предыдущ их лабораторных работах мы рассматривали простые типы данных (п оряд к ов ы еи в ещ ест в енны е). С труктурированные типы данных отличаю тсямножественность ю образую щ их их э лементов. В П аскале четыре структурированных типа- массивы, записи, множестваи ф ай лы. С труктура - тип данных , состоящ ий изкомпонентов. Компонент может принадлежать структурированномутипу. В Т урбо П аскале возможнапроизволь наяглубинавложениятипов. М аксималь наясуммарнаядлинаструктуры не должнапревышать 65520 б а йт. М а с с ив - э то структурированный тип данных , состоящ ий изф иксированного числаэ лементоводного типа. М ассивы можноописывать вразделе описаниятипови вразделе описанияпеременных . Н апример, массивА , состоящ ий из100 целых чисел, можно описать так: Var A : array [1..100] of Integer; Е сли впрограмме понадобятсянесколь ко массивовиз100 целых чисел, то вразделе описаниятиповцелесообразнее один разописать нужный тип. Type Mas = array [1..100] of Integer; Var A, B, C : Mas; В общ емвиде тип массивазадаетсятак: = array [] of ; - идентиф икатор. - тип э лементовмассива, который можетявлять сялю бымтипом Т урбо П аскаля. - списокизодного или несколь ких порядковых типов, разделенных запятыми. В сп и сок и нд ек сны х т и п ов нель зяв к лючат ь т и п LongInt, а т ак же его д и ап азоны . К аждый э лементсписказадаетдиапазон варь ированияиндекса. И нд екс - выражение порядкового типа, по значению которого осущ ествляетсядоступ кэ лементумассива. Н апример, 25-муэ лементуописанного ранее массиваА присвоимзначение 0: A[25]:= 0; Е сли списокиндексных типовсостоит из n типов, то доступ кэ лементу массиваосущ ествляетсяпоn индексам, разделеннымзапятыми. Н апример, опишемдвумерный массивS, состоящ ий изтрех строки пяти столбцов, э лементами которого являю тсявещ ественные числа: Var S : array [1..3,1..5] of Real; П рисвоимзначение 0 э лементу, стоящ емувтреть ей строке и четвертом столбце: S [3,4]:= 0; М ассивназывается регул ярны м тип о м , потомучто внемобъединены логически однородные э лементы, упорядоченные по индексам, определяю щ им
4
положение каждогоэ лементавмассиве. К оличество размерностей (и нд ек сов , к оорд и нат ), необх одимых дляобращ ениякэ лементумассива, являетсяклю чевой х арактеристикой массива. Од но м ерны й м а с с ив соответствуетпонятию линей ной таблицы (в ек т ора). Э лементы одномерного массиварасполагаю тсявпамяти последователь но друг задругом. Двум ерны й м а с с ив соответствуетпонятию прямоуголь ной таблицы (мат ри це, набору в ек т оров ). Э лементы двумерного массиварасполагаю тсяв памяти друг задругомтак, что при перех оде отмладших адресовкстаршим второй индекс изменяетсябыстрее, чемпервый . N-м ерны й м а с с ив соответствуетпонятию n-мерногопараллелепипеда. Э лементы n-мерного массиварасполагаю тсявпамяти друг задругомтак, что при перех оде отмладших адресовкстаршимнаиболее быстро изменяется край ний правый индекс. Т аккакэ лементы массивамогутбыть лю бого типа, втомчисле и структурированного, то могутсущ ествовать массивы массивов. Н апример, Type M1 = array [-1..1] of array [char] of boolean; Т ип М 1 являетсяодномерныммассивом, состоящ имизтрех э лементовс индексами -1, 0, 1 соответственно. Э лементами массиваМ 1 являю тсявекторы, состоящ ие из 256 э лементовлогического типа. Д иапазон варь ированияиндексовэ лементовлогического типасовпадаетс диапазономвозможных значений символь ного типа. Т ип М 1 представляетсобой набор векторовили двумерный массив. П оэ томувболее компактномвиде тип М 1 описываетсятак: Type M1 = array [-1..1,char] of boolean; Лев аяграни ца и нд ек сов может бы т ь от ри цат ель ной. Г лубинавложенности массивоввТ урбо П аскале произволь ная, но суммарнаядлинапамяти, отводимаяпод х ранение э лементовмассива, не должна превышать 65520 бай т. Ра зм ер м а с с ива - общ ее число э лементовмассива. Размер массивазадаетсяпри описании типамассива. Е сли одномерный массив= array [n1..n2] of , то его размер равен n2-n1+1. Размер многомерного массиваравен произведению размеровобразую щ их его одномерных массивов. К оли чест в о элемент ов масси в а д олжно бы т ь фи к си ров анны м, т о ест ь оп ред елят ь сяп ри т рансляци и п рограммы . В описании массиваможно исполь зовать предваритель но определенные константы. Н апример, Const N=100; Type Mas = array [1..N] of Integer; Работус массивом п ерем енно й д л ины можно имитировать следую щ им
5
образом. О писать максималь ную длинумассива(нап ри мер, N=100). В водомопределить нужную длинумассива(m), не превосх одящ ую максималь ную длину. Задей ствовать впрограмме m зарезервированных э лементовмассива. Н апишемпрограмму, заполняю щ ую массивслучай ными числами и выводящ ую э лементы массиванаэ кран. Размер массива, границы варь ирования случай ных значений вводятсяс клавиатуры.
Program Vector; Uses Crt; Label 1; Type mas1=array[1..100] of integer; Var i,j,n,g1,g2:integer; a:mas1; Begin Textbackground(7); Textcolor(blue);Clrscr; {В в оддли н ы м а с с и в а и гра н и ц в а рь и ров а н и я зн а чен и й } 1:write('В в еди те коли чес тв о элем ен тов одн ом ерн ого м а с с и в а (max then max:=a[i,j]; end; writeln('Средн ее а ри фм ети чес кое н а и боль ш его и н а и м ен ь ш его зн а чен и й элем ен тов ,'); writeln('ра с положен н ы х н и же гла в н ой ди а гон а ли ра в н о ', (max+min)/2:6:2); readkey End.{Sr_arifm} Рассмотримзадачунапреобразование матрицы по указанномуправилу. Резуль татпреобразованиябудетсох ранен вдругой матрице. За д а ча 3. Будемназывать соседями э лементас индексами i,j некоторой
17
матрицы такие э лементы, соответствую щ ие индексы которых отличаю тсяотi,j не более чемнаединицу. Д ляданной целочисленной матрицы A(aij) размером mxm най дите матрицуB, состоящ ую изнулей и единиц, э лементкоторой bij равен единице, когдавсе соседи aij мень ше самого э лементаaij. ♣ О рганизуемдвавложенных циклас параметрами i и j, с помощ ь ю которых “проанализируем” всех соседей aij. Л огическаяпеременнаяf будетиметь значение true, если все соседи aij мень ше самого э лементаaij. Е сли х отябы один сосед aij боль ше либо равен э лементуaij, то переменной f будетприсвоено значение false. В начале длякаждого aij переменной f присваиваетсязначение true. “Анализировать ” соседей aij будемс помощ ь ю двух вложенных циклов, парметры которых изменяю тсяот -1 до 1. П араметр внешнегоциклаn варь ируетномер строки, апараметр внутреннего циклаk - номер столбца. Л огическаяпеременнаяg отвечаетзаналичие соседа, то есть засущ ествование э лементаматрицы a i+n j+k. Е сли сосед a i+n j+k сущ ествует(и несов п ад ает с сами м элемент ом, т о ест ь n0 и ли k0), то переменной f будетприсвоено значение false, если a i+n j+k > = aij. П осле “анализа” всех соседей э леметаaij э лементуbij присваиваетсяединица, если значение переменной f равно true, впротивномслучае bij присваиваетсяноль . ♣ Program Sosedi; Uses Crt; Const m=3; Var i,j,k,n:integer; f,g:boolean; a,b:array[1..m,1..m] of integer; Begin Textbackground(7); Textcolor(blue); Clrscr; writeln ('В в еди те элем ен ты целочи с лен н ой м а три цы ра зм ера ',m,'x',m); for i:=1 to m do for j:=1 to m do read(a[i,j]); {-----------------------------------------------------} writeln('Н а й ден н а я м а три ца В:'); for i:=1 to m do begin for j:=1 to m do begin f:=true; for n:=-1 to 1 do for k:=-1 to 1 do begin g:=((i+n)>0) and ((j+k)>0) and ((i+n)