Ф Е Д Е РАЛ Ь Н О Е АГ Е Н Т С Т В О П О О БРАЗО В АН И Ю В О РО Н Е Ж С КИ Й Г О С У Д АРС Т В Е Н Н Ы Й У Н И В Е РС И Т Е Т
Языкпрограммирования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('В в еди те коли чес тв о элем ен тов одн ом ерн ого м а с с и в а (<=100):'); readln(n); if (n<1) or (n>100) then goto 1; write('В в еди те н и жн ююгра н и цу ди а па зон а :'); readln(g1); write('В в еди те в ерхн ююгра н и цу ди а па зон а :');readln(g2); {Ген ера ци я одн ом ерн ого м а с с и в а } randomize; for i:=1 to n do a[i]:=round(random(abs(g2-g1)))+g1; writeln; {В ы в одэлем ен тов м а с с и в а по 10 элем ен тов в с троке} writeln('Сген ери ров а н н ы й в ектор:'); for i:=1 to n do begin write(a[i]:7,' '); if i mod 10 = 0 then writeln end;
6
readkey end.{Vector} П роцед ура randomize органи зует случайны й от бор чи сел и з п сев д ослучайной п ослед ов ат ель ност и , в озв ращ аемой в в и д е значени й функ ци и random. П ров ерь т еработ у п рограммы на П К ! С помощ ь ю процедур ввода-выводанель зяввести-вывести весь массив целиком. В водить и выводить массивможно поэ лементно, при условии, что операции ввода-выводаопределены длятипаэ лементовмассива. Н ад массивами не определены операции отношения, поэ томусравнивать можно толь ко э лементы массивов. Т урбо П аскаль позволяет однимоператоромприсваиванияпередать значениявсех э лементоводного массивадругомумассивутого же типа. Н апример, Type Mas = array [1..100] of Integer; Var A, B: Mas; Begin ..... A := B; End. Разберемнесколь ко задач, длярешениякоторых исполь зую тсяодномерные массивы.
2. В екто ры . В во д -вы во д , с о ртиро вка , п о ис к, п рео бра зо ва ние, с д виг Решаяпервую задачу, мы напишемпрограмму, заполняю щ ую массив, индексами которого являю тсяданные перечислимого типа. За д а ча 1. С помощ ь ю следую щ его ф рагментапрограммы присвой те каждомуэ лементумассиваК Д значение, равное количествудней всоответствую щ еммесяце високосного года. type месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек); var КД: array [месяц] of 29..31; ♣ Значенияэ лементаммассиваКД можно присваивать вцикле, тело которого содержитоператор выбора. П араметромциклабудетслужить переменная i: месяц. П еременнаяk исполь зуетсяпри выводе э лементовмассиванаэ кран дляобозначенияномерамесяца. ♣ Program Number_days; Uses Crt; Type month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Var kd:array [month] of 29..31; i:month; k:integer; Begin Textbackground(7); Textcolor(blue); Clrscr; {Заполнение массива kd}
7
For i:=Jan to Dec do case i of Jan,Mar,May,Jul,Aug,Oct,Dec: kd[i]:=31; Feb:kd[i]:=29 else kd[i]:=30 end; {Р а с печа тка м а с с и в а kd} k:=0; Writeln('Н ом ер м ес яца и коли чес тв о дн ей в н ем :'); For i:=Jan to Dec do begin k:=k+1; Writeln(k,' - ',kd[i]) end; readkey End.{Number_days} С тандартными задачами обработки инф ормации вмассивах являетсясортировка(уп оряд очи в ани е) э лементови поискнужных э лементов. В задачах 2-4 мы разберемтри стандартных алгоритмасортировки э лементовмассива: сортировкувыбором, сортировкуобменоми сортировкувставками. За д а ча 2. С помощ ь ю сортировки выборомупорядочите массивА изN( ≤ 100 ) случай ных чисел по неубыванию . ♣ С о ртиро вка вы бо ро м заклю чаетсявперенесении максималь ных э лементовнаi-е место вмассиве, где i = N,N-1,… ,2. Д лякаждого i максималь ный э лементотыскиваетсяс первого по i-й э лемент. Н апервомшаге отыскиваетсямаксималь ный э лементи переноситсявконец массива. П отомотыскиваетсямаксималь ный среди всех э лементов, кроме последнего (п ослед ни й элемент ужена св оем мест е), и переноситсянапредпоследнее место вмассиве и т.д. П ри написании блок-сх емы и программы кза д а че 2 мы исполь зуемсозданную ранее блок-сх емуи программу, заполняю щ ую массивслучай ными числами и выводящ ую э лементы массиванаэ кран (см. ст р. 4-5). П еременные i, j исполь зую тсякакпараметры циклов. n – количество э лементоввмассиве. g1,g2 – границы диапазоназначений э лементовмассива. max – максималь ный э лементнаi-мшаге. m – номер максималь ного э лементанаi-м шаге. а – массивиз100 целых чисел.
8
Program Sort_select; Uses crt; Label 1; Type mas1=array[1..100] of integer; Var i,j,n,g1,g2:integer; max,m:integer; a:mas1;Begin {Ген ера ци я одн ом ерн ого м а с с и в а и в ы в одм а с с и в а } . . . {Сорти ров ка в ы бором } for i:=n downto 2 do begin max:=a[1]; m:=1; for j:=1 to i do if a[j]>max then begin max:=a[j]; m:=j end; a[m]:=a[i]; a[i]:=max end; {В ы в одупорядочен н ого м а с с и в а } writeln; writeln('В ектор пос ле с орти ров ки в ы бором :'); for i:=1 to n do begin write(a[i]:7,' '); if i mod 10 = 0 then writeln end; readkey End.{Sort_select} За д а ча 3. С помощ ь ю сортировки обменом(п узы рь к овой сорт и ров к и ) упорядочите массивА изN( ≤ 100 ) случай ных чисел по неубыванию . ♣ Алгоритмс о ртиро вки о бм ено м или п узы рь ко во й с о ртиро вки заклю чаетсявпоследователь номсравнении пар соседних э лементов ai и ai+1 , при i = 1,..., N − 1 . Е сли ai > ai +1 , тоэ лементы переставляю тся. П ри э томнаиболь ший э лемент(к ак п узы рек ) всплываетвконце массива. Затемэ тотметод применяетсяко всемэ лементам, кроме последнего, и т.д. Н азначение переменных такое же, каквзадаче 2. В спомогатель наяпеременнаяr исполь зуетсядлях ранениязначенияпри перестановке двух э лементов массива. Program Sort_exchange;
9
Uses crt; Label 1; Type mas1=array[1..100] of integer; Var i,j,n,g1,g2,m,r:integer; a:mas1; Begin {Ген ера ци я одн ом ерн ого м а с с и в а и в ы в одм а с с и в а } . . . {Сортировка обменом} for i:=1 to n-1 do for j:=1 to n-i do if a[j]>a[j+1] then begin r:=a[j]; a[j]:=a[j+1]; a[j+1]:=r end; {В ы в одупорядочен н ого м а с с и в а } writeln; writeln('В ектор пос ле с орти ров ки обм ен ом :'); for i:=1 to n do begin write(a[i]:7,' '); if i mod 10 = 0 then writeln end; readkey End.{Sort_exchange} За д а ча 4. С помощ ь ю сортировки вставками упорядочите массив Х из N( ≤ 100 ) случай ных чисел по неубыванию . ♣ Алгоритм с о ртиро вки вс та вка м и заклю чаетсявследую щ ем. М ассивделитсяна отсортированную и неотсортированную части. И знеотсортированной части последователь но выбираю тсяэ лементы и вставляю тсявотсортированую часть так, чтобы не нарушалась упорядоченность э лементоввней . Н апервомшаге отсортированнаячасть состоитизодного первого э лемента. П еременные i, j, m исполь зую тсякакпараметры циклов. n – количество э лементоввмассиве. g1,g2 – границы диапазоназначений э лементовмассива. b – вспомогатель наяпеременнаядлях раненияочередного э лемента, выбранного изнеотсортированной части. ♣ Program Sort_insert; Uses crt; Label 1;
10
Type mas1=array[1..100] of integer; Var i,j,n,g1,g2:integer; b,m:integer; a:mas1; Begin {Ген ера ци я одн ом ерн ого м а с с и в а и в ы в одм а с с и в а } . . . {Сорти ров ка в с та в ка м и } for i:=2 to n do begin b:=a[i]; for j:=1 to i do if b
11
♣ Ал го ритм д во ично го п о ис ка : у сравниваетсясо среднимэ лементом массива(и ли элемент ом ок оло серед и ны ); если числасовпали, то поискзавершается, если у мень ше среднего э лемента, то у надо искать влевой половине массива, иначе - вправой . Д алее э тотже алгоритмприменяетсяквыбранной половине массиваи т.д. П еременнаяi исполь зуетсякакпараметр циклов. n – количество э лементов вмассиве. а – массивиз100 целых чисел. l, r – границы отрезка, накотором ищ етсяэ лемент. ♣ Program Bin_search; Uses crt; Type mas1=array[1..100] of integer; Var i,n,k,l,r,y:integer; x:mas1; Begin Textbackground(7); Textcolor(blue); Clrscr; repeat write('В в еди те коли чес тв о элем ен тов одн ом ерн ого м а с с и в а (<=100):'); readln(n); until (n>0) and (n<101); writeln('В в еди те элем ен ты м а с с и в а , упордочен н ого по в озра с та н и ю'); write('В в еди те 1-й элем ен т: ');readln(x[1]); for i:=2 to n do begin write('В в еди те ',i,'-й элем ен т: '); repeat readln(x[i]); until (x[i]>=x[i-1]); end; write('В в еди те и с ком ы й элем ен т y: '); readln(y); {-------------------------------------------------------} l:=1; r:=n; while l<=r do begin i:=(l+r) div 2; if x[i]=y then break else if x[i]
12
writeln('Ис ком ы й элем ен т н а й ден подн ом ером ',k) end else writeln('Ис ком ы й элем ен т н е н а й ден :('); readkey; End.{Bin_search} Рассмотримзадачу, длярешениякоторой потребуетсяупорядочить часть массиваисх одных данных . За д а ча 6. П усть даны вещ ественные числа a1 , a2 ,..., a2 n . Э ти точки опре-
деляю тn интерваловчисловой оси (a1 , a2 ) , (a3 , a4 ) , … , (a2 n−1 , a2 n ) . Являетсяли интерваломобъединение э тих интервалов? Е сли да, то указать концы объединенного интервала. ♣ П ри решении задачи будемсчитать , что ∀i a2 i +1 < a2 i +2 , i = 0,1,..., n − 1 (у любого и нт ерв ала лев ы й к онец мень ш еп рав ого). П ереставимвмассиве A, состоящ емиз a1 , a2 ,..., a2 n , интервалы так, чтобы все левые концы интервалов были расположены по возрастанию . У порядочивать левые концы будемметодомвыборас отысканиемминималь ных э лементови перестановки их вначало неупорядоченной части массива. И нтервал (d , e ) будемсчитать объединенныминтервалом. Н апервомшаге положим, что (d , e ) = (a~1 , a~2 ) - первый отрезокчастично упорядоченного мас-
сиваА. П опробуемобъединить (d , e ) со вторыминтервалом. Д ляэ того прове-
рим, что начало второго интервалане вых одитзаконец первого, т.е. a3 < e (в п рот и в ном случаеобъед и нени еи нт ерв алов неяв ляет сяи нт ерв алом). В качестве концаобъединенного интервалавыберемнаиболь ший изконцовпервого и второго интервалов, т.е. e = max(e , a3 ) . Затемпробуемобъединить (d , e ) со треть иминтерваломи т.д. Д ляреализации описанной идеи нампотребуетсяцикл, вкоторомдля2го, 3-го, ..., n-го интерваловмы проверим, что их левые концы не вых одятза правый конец объединенного интервала(в п рот и в ном случаеобъед и нени еи нт ерв алов неяв ляет сяи нт ерв алом), т.е. ∀i = 3,5,...,2 n − 1 a i < e . П равымконцомобъединенного интервалабудемсчитать наиболь ший изправых концов интервалов, т.е. наиболь шее изчисел e и ai+1 . П еременные i, j исполь зую тсякакпараметры циклов. n – количество интервалов. а – массивиз2n вещ ественных чисел, концовинтервалов. m – номер очередного минималь ного э лемента. min – значение очередного минималь ного э лемента. f – переменнаялогического типа, исполь зуемаядлях раненияответа навопрос: “Являетсяли интерваломобъединение данных интервалов?” . ♣ Program Interval; Uses crt; Const n=5; Var a:array[1..2*n] of real; f:boolean;
13
i,j,m:integer; d,e,min:real; Begin Textbackground(7); Textcolor(blue); Clrscr; writeln('В в еди те н а ча ла и кон цы ',n,' и н терв а лов '); for i:=0 to n-1 do begin write('В в еди те н а ча ло ',i+1,'-го и н терв а ла : '); readln(a[2*i+1]); repeat write('В в еди те кон ец ',i+1,'-го и н терв а ла : '); readln(a[2*i+2]); until a[2*i+2]>a[2*i+1]; end; (*Упорядочи в а н и е по в озра с та н и юлев ы х кон цов и н терв а лов *) i:=1; while i<=2*n-3 do begin min:=a[i]; m:=i; j:=i+2; (* Оты с ка н и е м и н и м а ль н ого лев ого кон ца с реди a[i],...,a[2n-1] *) while j<=2*n-1 do begin if a[j]<min then begin min:=a[j]; m:=j end; j:=j+2 end; (* Перес та н ов ка м и н и м а ль н ого и i-го лев ого кон ца и н терв а лов *) a[m]:=a[i]; a[i]:=min; (*Перес та н ов ка с оотв етс тв ующи х пра в ы х кон цов и н терв а лов *) min:=a[m+1]; a[m+1]:=a[i+1]; a[i+1]:=min; i:=i+2 end; (* Пров ерка в ложен н ос ти и н терв а лов *) i:=3; d:=a[1]; e:=a[2];f:=true; while i<=2*n-1 do begin if a[i]>=e then f:=false else if e
14
if f then writeln('Объеди н ен и е и н терв а лов яв ляетс я и н терв а лом (',d:4:1,',',e:4:1,')') else writeln('Объеди н ен и е и н терв а лов н е яв ляетс я и н терв а лом '); readkey; End.{Interval} В следую щ ей задаче предлагаетсяпреобразовать массив, циклически сдвинувего э лементы. За д а ча 7. П реобразуй те массивХ из70 случай ных вещ ественных чисел по указанномудаль ше правилу, восполь зовавшись массивомY каквспомогатель ным. Э лементы массиваХ циклически сдвинь те наk позиций влево. ♣ В ведемконстантуn, х ранящ ую количествоэ лементовмассива. В веденное число k можетоказать сяболь ше n, поэ томувкачестве k (чи сла сд в и гаемы х п ози ци й) возь мемостатокотцелочисленного деленияn наk. С ф ормируемнужнымобразомвспомогатель ный массивy, азатемпередадимего значениямассивуx. Д ляэ того первые n-k значений массиваx присвоимэ лементаммассиваy с номерами k+1,...,n. П ервымk э лементаммассиваy присвоимзначенияэ лементовмассиваx с номерами n-k+1,...,n. ♣ Program Go; Uses crt; Const n=70; Type mas1=array[1..n] of real; Var i,g1,g2,k:integer; x,y:mas1; Begin Textbackground(7); Textcolor(blue); Clrscr; {В в одгра н и ц в а рь и ров а н и я зн а чен и й } write('В в еди те н и жн ююгра н и цу ди а па зон а :'); readln(g1); write('В в еди те в ерхн ююгра н и цу ди а па зон а :'); readln(g2); {Ген ера ци я одн ом ерн ого м а с с и в а } randomize; for i:=1 to n do x[i]:=(random*(abs(g2-g1)))+g1; writeln; {В ы в одэлем ен тов м а с с и в а по 10 элем ен тов в с троке} writeln('Сген ери ров а н н ы й в ектор:'); for i:=1 to n do begin write(x[i]:7:2,' '); if i mod 10 = 0 then writeln end; {В в одk} write('В в еди те в ели чи н у с дв и га k:');readln(k); k:=k mod n;
15
{Сдв и г м а с с и в а н а k пози ци й } for i:=1 to n-k do y[i+k]:=x[i]; for i:=n-k+1 to n do y[i-(n-k)]:=x[i]; x:=y; {В ы в одпреобра зов а н н ого м а с с и в а } writeln(‘Преобра зов а н н ы й в ектор:'); for i:=1 to n do begin write(x[i]:7:2,' '); if i mod 10 = 0 then writeln end; readkey; End.{Go} В следую щ ей части лабораторной работы мы познакомимсяс некоторыми задачами обработки двумерных массивов.
3. М а трицы . За п о л нение, вво д -вы во д , п о ис к, п рео бра зо ва ние В первой задаче заполнимматрицузаданнымспособом. За д а ча 1. П олучите целочисленную матрицуA размером8x14, длякоторой aij=i+2j. ♣ О рганизуемдвавложенных цикла. П араметр внешнего циклаi задает номерастрок. П араметр внутреннего циклаj - номерастолбцов. В тело вложенного циклапоставимоператор присваиваниязначенияэ лементуaij и оператор выводазначенияэ того э лементанаэ кран. ♣ Program Matr; Uses crt; Var i,j:integer; a:array[1..8,1..14] of integer; Begin Textbackground(7); Textcolor(blue); Clrscr; for i:=1 to 8 do begin for j:=1 to 14 do begin a[i,j]:=i+2*j; write(a[i,j]:4) end; writeln {перев одс троки } end; readkey End.{Matr} Рассмотримзадачу, связанную с поискомэ лементов, обладаю щ их указаннымсвой ством. За д а ча 2. П усть данавещ ественнаяматрицаразмером6x9. Н ай дите среднее ариф метическое наиболь шего и наимень шего значений ее э лементов, рас-
16
положенных ниже главной диагонали. ♣ П ри решении задачнапоискнужных э лементов, расположенных ниже (в ы ш е) главной (п обочной) диагонали, часто бываетдостаточно организовать двавложенных цикла. П ри э томграницы измененияиндексоввложенного циклазависятоттекущ его значенияпараметравнешнего цикла. В ведемконстанты m=6 и n=9, х ранящ ие количество строки столбцовматрицы. О рганизуемпоискнаиболь шего (max) и наимень шего (min) значений э лементовматрицы A, расположенных ниже главной диагонали. В начале присвоимmax и min значение первого э лементаa21 изнужной зоны. П араметр внешнего циклаi будетменять от3 до m (наи мень ш еезначени еи з чи сла ст рок и ст олбцов ), a параметр внутреннего циклаj будетменять от1 до i-1. В тело циклавклю чимдваусловных оператора, присваиваю щ их max (min) значение очередного э лементаматрицы, если последний боль ше (мень ше) текущ его значенияmax (min). П о завершению работы цикловнай демсреднее ариф метическое max и min. ♣ Program Sr_arifm; Uses crt; Const m=6; n=9; Var i,j:integer; min,max:real; a:array[1..m,1..n] of real; Begin Textbackground(7); Textcolor(blue); Clrscr; writeln('В в еди те элем ен ты в ещес тв ен н ой м а три цы ра зм ера ',m,'x',n); for i:=1 to m do for j:=1 to n do read(a[i,j]); {------------------------------------------------------} min:=a[2,1]; max:=min; for i:=3 to m do for j:=1 to i-1 do begin if a[i,j]<min then min:=a[i,j]; if a[i,j]>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 сущ ествует(и несов п ад ает с сами м элемент ом, т о ест ь n<>0 и ли k<>0), то переменной 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)<=m) and ((j+k)<=m); if g and ((k<>0) or (n<>0)) then if a[i+n,j+k]>=a[i,j]
18
then f:=false; end; if f then b[i,j]:=1 else b[i,j]:=0; write(b[i,j]:4) end; writeln end; readkey End.{Sosedi} В следую щ ей задаче по двумданнымматрицамстроитсяопределенным способомноваяматрица. За д а ча 4. И споль зуяследую щ ий ф рагментпрограммы, най дите C = A ⋅ B : const n=20; var A, B, C: array [1..n,1..n] of real; ♣ Каждый э лементматрицы С [i,j] получаетсякаксуммапроизведений э лементовi-й строки матрицы A наэ лементы j-го столбцаматрицы. О рганизуем три вложенных цикла. П ервый (внешний ) цикл по i перебираетстроки матриц А и С . В торой цикл по j перебираетстолбцы матриц С и В . Т ретий цикл по k накапливаетвэ лементе с [i,j] суммупроизведений a [i,k] и b [k,j]. ♣ Program Proizved_matr; Uses crt; Const n=3; Var a,b,c:array[1..n,1..n] of real; i,j,k:integer; Begin Textbackground(7); Textcolor(blue); Clrscr; writeln('В в еди те элем ен ты м а три цы А порядка ',n,'x',n); for i:=1 to n do for j:=1 to n do read(a[i,j]); writeln('В в еди те элем ен ты м а три цы B порядка ',n,'x',n); for i:=1 to n do for j:=1 to n do read(b[i,j]); {------------------------------------------------------} writeln('Матрица С=А*В'); for i:=1 to n do begin for j:=1 to n do begin c[i,j]:=0; for k:=1 to n do c[i,j]:=c[i,j]+a[i,k]*b[k,j]; write(c[i,j]:5:1,' ') end; writeln end; readkey
19
End.{Proizved_matr} Решимзадачуобработки символь ной инф ормации с исполь зованиемматриц. Количество строкматрицы и длинакаждой строки определяю тсявводом. Задачасостоитвпоиске строкматриц, обладаю щ их заданнымсвой ством. За д а ча 5. П усть данапоследователь ность , содержащ аяот2 до 50 слов, в каждомизкоторых от1 до 8 строчных латинских букв; междусоседними словами – не менее одного пробела, запоследнимсловом– точка. Н апечатай те те словапоследователь ности, которые отличны отпоследнего словаи удовлетворяю тследую щ емусвой ству: а) буквы словаупорядочены по алф авиту; б) вслове нет повторяю щ их сябукв. ♣ П оследователь ность оф ормимкакдвумерный массивр размерности 50х8, состоящ ий изсимволов. О чередной символ будемчитать впеременную с. В массиве d будемх ранить длины введенных слов. П еременнаяk предназначенадлях раненияколичествавведенных слов. П еременные i, j, m исполь зую тся каксчетчики циклов. Л огическаяпеременнаяf имеетзначение истинапри выполнении свой ства изусловия. Л огическаяпеременнаяg принимаетзначение истина, когдаслово отлично отпоследнего слова. С лово выводитсянаэ кран вслучае истинности обеих переменных f и g. Е сли буквы вслове упорядочены по алф авиту, то коды буквобразую тнеубываю щ ую последователь ность . П оэ томупеременнаяf принимает значение false, если обнаруживаетсях отябы однабуква, код которой мень ше кодапредыдущ ей буквы. Ч тобы проверить , что вслове нет повторяю щ их сябукв, организуемтри вложенных цикла. П ервый (в неш ни й) цикл по i перебираетслова(с п ерв ого п о п ред п ослед нее), второй цикл по j перебираетбуквы вслове (со в т орой д о п ослед ней), третий цикл по m перебирает буквы, предшествую щ ие букве j вi-м слове. Е сли j-ябуквасовпадаетс предшествую щ ей ей буквой , то переменнаяf принимаетзначение false. ♣ Program Words_; Uses crt; Type words=array[1..8] of char; Var i,j,m,k:integer; c:char; f,g:boolean; p:array[1..50] of words; d:array[1..50] of 1..8; Begin Textbackground(7); Textcolor(blue); Clrscr; writeln('В в еди те текс т, за ка н чи в а ющи й с я точкой '); writeln('(с лов а отделяй те друг от друга пробела м и )'); i:=1; j:=1; repeat repeat read(c) {Чи та ем перв ы й с и м в ол, отли чн ы й от пробела }
20
until c<>' '; while (c<>' ') and (c<>'.') do begin if j<=8 then p[i,j]:=c; {Чи та ем i-е с лов о} read(c); j:=j+1 end; if c=' ' {В в еден пробел} then begin if j<=8 {За пи с ь дли н ы с лов а в м а с с и в d} then d[i]:=j-1 else d[i]:=8; i:=i+1; j:=1 {Подготов ка к чтен и юн ов ого с лов а } end until (c='.') or (i>50); k:=i; d[k]:=j-1; {Отбор и в ы в одс лов , букв ы которы х упорядочен ы по а лфа в и ту} writeln; writeln('Слов а , которы е отли чн ы от пос ледн его с лов а и '); writeln('букв ы в которы х упорядочен ы по а лфа в и ту:'); for i:=1 to k-1 do begin f:=true; for j:=2 to d[i] do if ord(p[i,j])p[k,j] then g:=true; if f and g then for j:=1 to d[i] do write(p[i,j]); write(' ') end; {Отбор и в ы в одс лов , в которы х н ет пов торяющи хс я букв } writeln; writeln; writeln('Слов а , которы е отли чн ы от пос ледн его с лов а и '); writeln('в которы х н ет пов торяющи хс я букв :'); for i:=1 to k-1 do begin f:=true; for j:=2 to d[i] do for m:=j-1 downto 1 do if p[i,j]=p[i,m] then f:=false; g:=false; for j:=1 to 8 do if p[i,j]<>p[k,j]
21
then g:=true; if f and g then for j:=1 to d[i] do write(p[i,j]); write(' ') end; readkey; End.{Words_} П ров ерят ь в хожд ени е счи т анного значени яв нужны й д и ап азон уд обно с п омощ ь ю логи ческ ой оп ераци и in. Нап ри мер, п ров ери т ь , яв ляет сяли значени е си мволь нойп еременной с русск ой бук в ой можно, нап и сав c in [‘А ’..’Я ’]. И зразных символовможно составлять рисунки. Е сли врисунке наблю даетсяопределеннаязакономерность (нап ри мер, фи гура си ммет ри чна), то компь ю тер можетсоздать весь рисунокпо его части. Н аучимсяраспечатывать с им м етричны е ф игуры . За д а ча 6. Д анакартинкаизсимволовввиде матрицы размеромmxn. Распечатать данную картинкуи ее симметричные отраженияпо горизонтали, по вертикали, относитель но правого нижнего угла. ♣ С имметрияпо горизонтали получаетсяпри распечатке каждой строки заданной матрицы справаналево. С имметрию по вертикали можно получить , распечатавстроки матрицы вобратномпорядке. С имметрияотноситель но правого нижнего углаполучаетсяпри распечатке вобратномпорядке и строк, и столбцовматрицы. ♣ Program Figure; Uses crt; Const m=4; n=4; Type stroka=array[1..n] of char; shablon=array[1..m] of stroka; Var i,j:integer; a:shablon; Begin Textbackground(7); Textcolor(blue); Clrscr; {В в одка рти н ки } for i:=1 to m do begin for j:=1 to n do read(a[i,j]); readln end; writeln; {В ы в одка рти н ки и ее отра жен и я по в ерти ка ли } for i:=1 to m do begin for j:=1 to n do write(a[i,j]); write(' '); for j:=n downto 1 do write(a[i,j]); writeln
22
end; {В ы в одотра жен и я ка рти н ки по гори зон та ли ,по в ерти ка ли и по гори зон та ли } for i:=m downto 1 do begin for j:=1 to n do write(a[i,j]); write(' '); for j:=n downto 1 do write(a[i,j]); writeln end; readkey End.{Figure} П ример введен- Резуль тат работы П ри в в од еси мв оль ной мат ной картинки: программы: ри цы , си мв олы наби рают сяи o o счи т ы в ают сяв масси в п од ряд . o* *o o o* *o В к онце ст рок и нажи мает ся o* *o o* к лав и ш а Enter, в осп ри ни маемая o* *o o* o* *o п роцед урой readln ! o* o* *o o o
М ожно написать программы, тиражирую щ ие заданную картинкуи ее преобразованиянужное число раз. П ознакомимсяс программой , печатаю щ ей орнаменты по введенномутраф аретуизсимволов. П одобные орнаменты могут быть интересны, например, лю бителямрукоделияи разработчикамкомпь ю терных игр длясозданияф онаигрового поля. За д а ча 7. П овторить ф игуру(оп ред еляемую в в од ом) и ее симметричные отражениязаданное число по горизонтали и вертикали. ♣ П еременные i, j, k, l исполь зую тсякакпараметры циклов. p, q – число повторений образцаорнаментапо горизонтали и вертикали. pmax, qmax – самое боль шое значение переменных p, q. m, n – высотаи ширинатраф арета. М атрицаa – траф аретизсимволов. ♣ Program Ornament; Uses crt; Const m=4; n=4; pmax=9; qmax=3; Type stroka=array[1..n] of char; shablon=array[1..m] of stroka; Var i,j,k,l,p,q:integer; a:shablon; Begin Textbackground(7); Textcolor(blue); Clrscr; {Ввод картинки} writeln('В в еди те с и м в оль н уюм а три цу ра зм ером ',m,'x',n); for i:=1 to m do begin for j:=1 to n do read(a[i,j]); readln end; writeln;
23
write('В в еди те чи с ло обра зцов по гори зон та ли :'); readln(p); if (p<1) or (p>pmax) then p:=pmax; write('В в еди те чи с ло обра зцов по в ерти ка ли :');readln(q); if (q<1) or (q>qmax) then q:=qmax; П ример работы программы при исх одном траф арете: хххх о о о и заданномчисле повторений : три разапо горизонтали и дваразапо вертикали.
xxxxxxxxxxxxxxxxxxxxxxxx oo oo oo o o o o o o o o o o o o o o o o o o o o o o o o oo oo oo xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx oo oo oo o o o o o o o o o o o o o o o o o o o o o o o o oo oo oo xxxxxxxxxxxxxxxxxxxxxxxx
Clrscr; for l:=1 to q do begin {В ы в одка рти н ок и и х отра жен и й по в ерти ка ли } for i:=1 to m do begin for k:=1 to p do begin for j:=1 to n do write(a[i,j]); for j:=n downto 1 do write(a[i,j]) end; writeln end; {В ы в одотра жен и й ка рти н ок по гори зон та ли } for i:=m downto 1 do begin for k:=1 to p do begin for j:=1 to n do write(a[i,j]); for j:=n downto 1 do write(a[i,j]) end; writeln end; end; readkey End.{Ornament} В лабораторной работе мы разобрали часть типовых заданий извсего многообразиязадач обработки инф ормации, структурированной ввиде масси-
24
вов. П од гот ов ь т есь к от в ет ам на в се(!) к онт роль ны ев оп росы и в ы п олни т е в се(!) к онт роль ны езад ани я. Дорогу оси ли т и д ущ и й!
Ко нтро л ь ны е во п ро с ы и за д а ния 1. С труктуриро ва нны е тип ы д а нны х. М а с с ивы 1. Какие типы данных называю тсяструктурированными? П риведите 4 примера. 2. Ч то такое структура? 3. Какие типы данных допустимы длякомпонентструктуры? 4. Какограничены глубинаи длинаструктуры? 5. Д ай те определение массива. 6. Г де и какописываю тсямассивы? П риведите пример. 7. Каквобщ емвиде задаетсятип массива? 8. Какого типамогутбыть э лементы массива? 9. Д лячего вописании массивауказываетсясписокиндексных типов? 10. Ч то такое индекс? 11. М ожетли индекс быть выражениемвещ ественного типа? 12. М ожетли индекс быть выражениемлю бого порядкового типа? 13. Какосущ ествляетсядоступ кэ лементуn-мерного массива? 14. П очемумассивназываетсярегулярнымтипом? 15. О чемговоритколичество индексоввмассиве? 16. Какой массивназываетсяодномерным? 17. В какой последователь ности располагаю тсявпамяти э лементы одномерного массива? 18. Какой массивназываетсядвумерным? 19. Какрасполагаю тсявпамяти э лементы двумерного массива? 20. Какой массивназываетсяn-мерным? 21. Какрасполагаю тсявпамяти э лементы n-мерного массива? 22. Ч то такое массивы массивов? П риведите пример. 23. М ожетли леваяграницаиндексовбыть отрицатель ной ? 24. Когдаиндекс э лементавмассиве совпадаетс порядковымномеромэ того э лемента? 25. Какзадать массивмассивоввболее компактной ф орме? 26. Ч то такое размерность массива? 27. С ущ ествую тли ограничениянаглубинуи размерность массива? 28. Г де и какопределяетсяразмерность массива? 29. М ожетли размерность массивабыть произволь ной ? П очему? 30. Каквописании массиваисполь зовать предваритель но определенные константы? П риведите пример. 31. Какможно сымитировать работус массивомпеременной длины? 32. Н апишите программу, заполняю щ ую массивслучай ными числами и выво-
25
дящ ую э лементы массиванаэ кран по10 э лементоввстроке. Н арисуй те блок-сх емукпрограмме. 33. Д лячего исполь зуетсяпроцедураrandomize? 34. М ожно ли с помощ ь ю стандартных процедур ввода-выводаввести-вывести весь массивцеликом? П очему? 35. В сегдали работас массивомсводитсякработе с его компонентами?
2. В екто ры . В во д -вы во д , с о ртиро вка , п о ис к, п рео бра зо ва ние, с д виг 36. Н апишите блок-сх емуи программудляприсвоениякаждомуэ лементумассива КД:array [месяц] of 29..31, где месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек), значение, равное количествудней всоответству ю щ ем месяце високосного года. 37. Какие алгоритмы сортировки э лементовмассиваВ ы знаете? С равните их междусобой . 38. В чемзаклю чаетсясортировкавыбором? Н апишите блок-сх емуи программусортировки выборомэ лементовмассивапо невозрастанию . 39. В чемзаклю чаетсясортировкаобменом? Н апишите блок-сх емуи программусортировки обменомэ лементовмассивапо невозрастанию . 40. В чемзаклю чаетсясортировкавставками? Н апишите блок-сх емуи программусортировки вставками э лементовмассивапо невозрастанию . 41. О пишите алгоритмдвоичного поиска. Н апишите блок-сх емуи программу бинарного поисказаданного э лементавмассиве изслучай ных чисел. 42. П усть даны вещ ественные числа a1 , a 2 ,..., a2 n . Э ти точки определяю тn ин-
терваловчисловой оси (a1 , a2 ) , (a3 , a4 ) , … , (a2 n−1 , a2 n ) . Являетсяли интервалом объединение э тих интервалов? Е сли да, то указать концы объединенного интервала. Н апишите алгоритм, блок-сх емуи программу. 43. П реобразуй те массивХ из70 случай ных вещ ественных чисел по указанному даль ше правилу, восполь зовавшись массивомY каквспомогатель ным. Э лементы массиваХ циклически сдвинь те наk позиций влево. Н апишите блоксх емуи программу. 44. С помощ ь ю следую щ его ф рагментапрограммы зашиф руй те текстt, заменив внемкаждую литерузначениемэ лементамассиваk, индексомкоторого являетсяэ талитера: Type Текст = array[1..72] of char; Шифр = array[char] of char; Var t: Текст; k: Шифр; 45. П усть дано100 целых случай ных чисел. Распечатай те их вобратномпорядке по6 чисел встроке.
46. П о заданнымвещ ественнымчислам a 0 , a1 ,..., a 20 , t вычислите значение 20 19 многочлена a20 x + a19 x +...+a1 x + a0 и его производных вточке t . 47. П усть дан непустой текстизпрописных русских букв, закоторыми следует
26
точка. О пределите, упорядочены ли э ти буквы по алф авиту. 48. П усть дан непустой текст, закоторымследуетвосклицатель ный знак. Замените все прописные русские буквы, встречаю щ иесявтексте, строчными. 49. П усть даны целые числа a1 , a 2 ,..., a100 . П олучите новую последователь ность из100 целых чисел, заменяя ai нулями, если значение a i не равно максималь номуизчисел a1 , a2 ,..., a100 и заменяя ai единицей - впротив-
номслучае (i = 1,2 ,....,100) . 50. П усть задан текст размеромне более одной строки. Н апечатай те, сколь ко развтексте встречаетсякаждаябуквалатинского алф авита. 51. Н апечатай те заданный текстиз100 литер, удаливизнего повторные вх ождениякаждой литеры. 52. Замените каждый э лементмассивасреднимариф метическимвсех предшествую щ их емуэ лементов. 53. П усть даны две последователь ности из30 чисел вкаждой . Н ай дите наимень шее среди тех чисел первой последователь ности, которые не вх одят во вторую последователь ность , считая, что х отябы одно такое число есть . 54. И ндивидуаль ное(!) задание, которое передаетсяпреподавателю перед началомсобеседованияпо э той теме: Н омер индивидуаль ного заданияопределяетпреподаватель ! О пишите постановкузадачи, создай те математическую модель ее решения, р азр абот ай т е бл ок-схем уи р абот ающ ую п р огр ам м у, п р оведи т е т ест и р овани е и от л адкуп р огр ам м ы , обдум ай т е п ол ученны е р езул ьт ат ы .
И нд ивид уа л ь ны е за д а ния 1. П усть дан текстиз80 литер. О пределите, симметричен ли он, то есть читаетсяли он одинаково слеванаправо и справаналево. 2. П усть дан массивизN э лементов. К аждый отрицатель ный э лементзамените полусуммой тех двух э лементов, которые стоятрядомс нимсправаи слева. 3. П усть дан текстизстрочных латинских букв, закоторымследуетточка. Н апечатай те валф авитномпорядке все буквы, которые вх одятвэ тот текстпо одномуразу. 4. П усть даны координаты центровn окружностей и их радиусы. О пределите число пересекаю щ их сяокружностей . 5. П рямаянаплоскости можетбыть заданауравнением ax + by = c , где a , b одновременно не равны нулю . П усть даны коэ ф ф ициенты несколь ких прямых a1 , b1 , c1 , a2 , b2 , c2 ,..., an , bn , cn . О пределите, имею тсяли среди э тих прямых совпадаю щ ие или параллель ные. 6. П усть даны натураль ное число n, целые числа a , x1 , x2 ,..., xn . Е сли впоследователь ности x1 , x2 ,..., xn есть х отябы один член, равный a , то получите суммувсех членов, следую щ их запервымтакимчленом, иначе най дите минималь ный среди нечетных чисел последователь ности x1 , x2 ,..., xn .
27
7. П усть даны целые числа a1 , a2 ,..., an , среди которых могутбыть повторяю щ иеся. С оставь те новый массивизчисел, взятых по одномуизкаждой группы равных членовданной последователь ности. 8. П усть даны натураль ные числа k , n , вещ ественные числа a1 , a2 ,..., a kn . П олучите последователь ность min (a1 , a2 ,..., a k ) , min (a k +1 , a k + 2 ,..., a 2 k ) , … ,
(
)
min a k ( n−1)+1 , a k ( n−1)+2 ,..., a kn . 9. В ычислите площ адь произволь ного выпуклого многоуголь ника, заданного координатами своих вершин наплоскости, разбивмногоуголь никнатреуголь ники. 10. П усть даны координаты центровn кругови их радиусы. В ыясните, есть ли наплоскости точка, принадлежащ аявсемкругам. 11. П усть даны вещ ественные числа a1 , a2 ,..., a2 n . Э ти точки определяю тn ин-
терваловчисловой оси (a1 , a2 ) , (a3 , a4 ) , … , (a2 n−1 , a2 n ) . И мею тсяли точки числовой оси, принадлежащ ие, по край ней мере, тремкаким-нибудь изданных интервалов? Е сли да, то указать какую -нибудь изэ тих точек.
12. П усть имею тсядесять гирь весом a1 , a2 ,..., a10 . О бозначимчерез ck число способов, которыми можно составить вес k , то есть ck - э то число решений уравнения a1 x1 + a2 x2 +...+ a10 x10 = k , где xi можетпринимать значение 0 или 1 (i = 1,2,....,10) . П олучите с1 , с2 ,..., с10 . 13. П рямаянаплоскости можетбыть заданауравнением ax + by = c , где a , b одновременно не равны нулю . П усть даны коэ ф ф ициенты несколь ких прямых a1 , b1 , c1 , a 2 , b2 , c2 ,..., a n , bn , cn . О пределите, имею тсяли среди э тих прямых три, пересекаю щ иесяводной точке. 14. И споль зуяследую щ ий ф рагмент программы, выберите измассиваA подмассивB с заданной суммой э лементовS или сообщ ите, что такого подмассиване сущ ествует: Const m=50; Var A,B:array[1..m] of integer; S:integer; 15. Ч исло, состоящ ее изn (n>1) циф р, называетсячисломАрмстронга, если суммаего циф р, возведенных вn-ю степень , равнасамомуэ томучислу. Н апример, 153=13+53+33. Н ай дите все n-значные числаАрмстронга(n - вход ноед анное, n<10). 16. Ч исла, одинаково читаемые слеванаправо и справаналево, называю тсяпалиндромами. Н апример, 3553 или 78687. Н ай дите палиндромы заданного натураль ного числаn во всех системах счисленияс основаниями 2, 3,..., 10. Н апример, палиндромами числа10010 являю тся102013, 2027, 1219. 3. М а трицы 55. П олучите целочисленную матрицуA размером8x14, длякоторой aij=i+2j. Н апишите блок-сх емуи программу.
28
56. П усть данавещ ественнаяматрицаразмером6x9. Н ай дите среднее ариф метическое наиболь шего и наимень шегозначений ее э лементов, расположенных ниже главной диагонали. Н апишите блок-сх емуи программу. 57. Будемназывать соседями э лементас индексами i,j некоторой матрицы такие э лементы, соответствую щ ие индексы которых отличаю тсяот i,j не более чемнаединицу. Д ляданной целочисленной матрицы A(aij) размеромmxm най дите матрицуB, состоящ ую изнулей и единиц, э лементкоторой bij равен единице, когдавсе соседи aij мень ше самого э лементаaij. Н апишите алгоритм, блок-сх емуи программу. 58. П усть данапоследователь ность , содержащ аяот2 до 50 слов, вкаждомиз которых от1 до 8 строчных латинских букв; междусоседними словами – не менее одного пробела, запоследнимсловом– точка. Н апечатай те те слова последователь ности, которые отличны отпоследнего словаи удовлетворяю т следую щ емусвой ству: а) буквы словаупорядочены по алф авиту; б) вслове нетповторяю щ их сябукв. Н апишите алгоритм, блок-сх емуи программу. 59. В чемсмысл логической операции in? П риведите пример. 60. Д анакартинкаизсимволовввиде матрицы размеромmxn. Распечатать данную картинкуи ее симметричные отраженияпо горизонтали, по вертикали, относитель но правого нижнего угла. 61. П овторить ф игуру(оп ред еляемую в в од ом) и ее симметричные отражения заданное число по горизонтали и вертикали. 62. П оверните ф игуруна900, 1800, 2700 относитель но правого нижнего угла. 63. Н апишите программу, котораябы получалаизкартинки (в ход ного д анного) ее негатив, т.е. вместо символавставлялабы пробел, авместо пробелапечаталабы какой -нибудь другой символ (нап ри мер, ‘Н’). 64. С оставь те программу, котораяувеличивалабы заданный рисуноквn раз. 65. П усть дано натураль ное число n и вещ ественнаяматрицаразмеромnx9. Н ай дите среднее ариф метическое э лементовдлякаждого изстолбцов, имею щ их нечетные номера. 66. П усть даны натураль ное число m, целые числаa1, ... , am и целочисленная квадратнаяматрицапорядкаm. С трокус номеромi назовемотмеченной , если ai>0, и неотмеченной - впротивномслучае. П одсчитай те число отрицатель ных э лементовматрицы, расположенных вотмеченных строках . 67. П усть данавещ ественнаяквадратнаяматрицапорядка12. Замените нулями все ее э лементы, расположенные наглавной диагонали и выше ее. 68. П усть данавещ ественнаяматрицаразмеромnxm. О пределите числаa1, ... , am, равные соответственно: а) произведениямэ лементовстрок, б) разностямнаиболь ших и наимень ших значений э лементовстрок. 69. В данной квадратной целочисленной матрице порядка17 укажите индексы всех э лементовс наиболь шимзначением, не принадлежащ их главной и по-
29
бочной диагоналям. 70. П усть данавещ ественнаяквадратнаяматрицапорядка9. П олучите целочисленную квадратную матрицутого же порядка, вкоторой э лементравен единице, если соответствую щ ий емуэ лементисх одной матрицы боль ше э лемента, расположенного вего строке наглавной диагонали, и равен нулю - в противномслучае. 71. И споль зуяследую щ ий ф рагмент программы, вычислите перечисленные ниже соотношения: const n=20; var A, B, C: array [1..n,1..n] of real; x, y: array[1..n] of real; а) C = A+B; б) y = Ax; в) B = BT; г) C = A*B. 72. П усть даны натураль ное число n и (п ост рочно) э лементы квадратной вещ ественной матрицы A 5-го порядка. В ычислите n-ю степень э той матрицы A1 = A, A2 = A ⋅ A, A3 = A2 ⋅ A,... .
(
)
73. И споль зуяследую щ ий ф рагмент программы, определите количество k различаю щ их сяэ лементовмассиваC (т о ест ь п ов т оряющ и есяэлемент ы счи т айт еод и н раз). 74. И нди ви дуал ьное(!) задани е, которое передаетсяпреподавателю перед началомсобеседованияпо э той теме: Номер и нд и в и д уаль ного зад ани яоп ред еляет п реп од ав ат ель ! О п и ши т е п ост ановкузадачи , создай т е м ат ем ат и ческую м одел ь ее р ешени я , р азр абот ай т е бл ок-схем уи р абот ающ ую п р огр ам м у, п р оведи т е т ест и р овани е и от л адкуп р огр ам м ы , обдум ай т е п ол ученны е р езул ьт аты .
И нд ивид уа л ь ны е за д а ния 1. П у сть данацелочисленнаяквадратнаяматрицаA(aij) размерности n. П олучи-
те b1, ..., bn, где э лементbi равен max a ij ⋅ min a ji . 1≤ j ≤ n
1≤ j ≤ n
2. П у сть даны натураль ное число и символь наяквадратнаяматрицаразмераn
n. П олучите последователь ность b1, ..., bn изнулей и единиц, вкоторой bi=1 тогдаи толь ко тогда, когдаi-й строке число символовзвездочки (*) не мень ше числапробелов. 3. П у сть данасимволь наяматрицаразмером13x18. Н ай дите номер последнего по порядкустолбца, вкоторомсодержитсянаиболь шее количество различных символов. 4. П у сть дана(п ост рочно) вещ ественнаяматрицаразмером7x4. П ереставляя ее строки и столбцы, добей тесь того, чтобы наиболь ший э лемент(од и н и з ни х) оказалсявверх немлевомуглу. 5. И споль зу яследую щ ий ф рагмент программы, най дите наиболь шее расстояние d междуточками, рассматриваяэ лементы массиваМ каккоординаты точекплоскости: type точка=array [(x,y)] of real;
30
var M:array[1..40] of точка; d:real; 6. П у сть данавещ ественнаяматрицаразмером20х30. У порядочь те ее строки
по неубыванию наиболь ших э лементовстрок. 7. И споль зу яследую щ ий ф рагмент программы, преобразуй те массивS, осущ ествивповоротэ лементоввокруг его центрана900 противчасовой стрелки: const n=256; type screen=array[1..n,1..n] of 0..1; var S: screen; 8. О пределите, являетсяли некотораяцелаяквадратнаяматрица10-го порядка
симметричной (от носи т ель но глав ной д и агонали ). 9. Э лементматрицы назовемседловой точкой , если он являетсянаимень шимв своей строке и одновременно наиболь шимвсвоемстолбце или, наоборот, являетсянаиболь шимвсвоей строке и наимень шимвсвоемстолбце. Д ля заданной целой матрицы размером10х15 напечатай те индексы всех ее седловых точек. 10. П у сть данавещ ественнаяматрицаразмером7х7, все э лементы которой различны. Н ай дите скалярное произведение строки с наиболь шимэ лементом матрицы и столбцас наимень шимэ лементом. 11. Н ай дите решение заданной квадратной системы изn линей ных у равнений , решаясистемуметодомГ аусса. 12. П у сть данапоследователь ность , содержащ аяот1 до 30 слов, вкаждомиз которых от1 до 5 строчных латинских букв; междусоседними словами – запятая, запоследнимсловом– точка. В ыведите э туже последователь ность слов, но удаливизнее повторные вх ожденияслов. 13. П у сть данапоследователь ность , содержащ аяот1 до 30 слов, вкаждомиз которых от1 до 5 строчных латинских букв; междусоседними словами – запятая, запоследнимсловом– точка. В ыведите все словавалф авитномпорядке. 14. П у сть данапоследователь ность , содержащ аяот2 до 30 слов, вкаждомиз которых от2 до 10 строчных латинских букв; междусоседними словами – не менее одного пробела, запоследнимсловом– точка. Н апечатай те все слова, отличные отпервого слова, удаливизкаждого словавсе последую щ ие вх ожденияпервой буквы. 15. Алф авитные печатные у строй ствапечатаю твсе символы одного размера (формат а). Боль шие символы, изкоторых состоиттекст(нап ри мер, заголов к и ), бываю тсоставлены изотдель ных малень ких символов, подобно тому, какизмногих лампочекобразую тсясимволы световой рекламы. Д ано натураль ное число n. Распечатай те э то число символами боль шого ф ормата. * ** * * * * * * ****
*** *
* * * * * *****
31
32
С оставители: В асиль евВ алерий В икторович, Х ливненкоЛ ю бовь В ладимировна
Редактор
Т их омироваО .А.