Paskal_uchebn_posob_chast2_26_6_7
.pdf11
Семинар. Работа с типом данных «Записи».
ЗАДАЧА :
Написать программу, которая вводит информацию о 5 студентах, а именно: ФИО, год рождения, год поступления и оценки сессии. Результатом работы является вывод списка отличников.
program zapwith; type студент=record
фио: array[1..10] of char; годрож:1965..1975; годпост:1985..1995;
оценки: (алг, ист, эвм):1..5; end;
var группа:array[1..5] of студент; s1:студент;
i,j:integer; begin
with s1 do begin
for i:=1 to 5 do begin
for j:=1 to 10 do read(фио[j]); readln(годрож,годпост);
with оценки do readln (алг, ист, эвм); группа[i]:=s1;
end;
end;
writeln('список отличников');
for i:=1 to 5 do with группа[i],оценки do if (алг=5) and (ист=5) and (эвм=5) then writeln(фио,годрож,годпост);
end.
ЗАДАЧА :
Написать программу, которая для заданного количества ЭВМ n=3 определяет отношение производительности к стоимости. Производительность задается в миллионах операций в секунду, отдельно для скалярных и векторных операций. Стоимость в тысячах долларов.
Программа должна выбрать ЭВМ с минимальным отношением для векторных операций и скалярных операций. Распечатать соответствующие характеристики.
PDF created with pdfFactory Pro trial version www.pdffactory.com
12
program ЭВМвыбор; const n=3;
m=12;
type маш=record
фирма: array[1..m] of char; годвып:1980..1992; произв=record
скал,вект:integer; end;
стоим:integer; сткпр:array[1..2] of real; end;
var masbm:array[1..n] of маш; i,j,j1,j2:integer;
r1,r2:real; begin
for i:=1 to n do with masbm[i],произ do begin
writeln('введите название фирмы из m букв'); for i:=1 to m do read(фирма[i]); writeln('введите название ЭВМ из n букв'); for j:=1 to n do read(назв[i]);
writeln('введите характеристики ЭВМ'); readln(годвып, скал, вект, стоимость); сткпр[1]:=стоимость/скал; сткпр[2]:=стоимость/вект;
end; r1:=masbm[1].сткпр[1];j1:=1; r2:=masbm[1].сткпр[2];j2:=1;
for i:=2 to n do with masbm[i] do begin if сткпр[1]<r1 then begin r1:=сткпр[1]; j1:=i;
end;
if сткпр[2]<r2 then begin r2:=сткпр[2]; j2:=i;
end; (*закончили выбор*) with masbm[j1],произв do
writeln(фирма, назв, годвып, скал, вект, стоим); with masbm[j2],произв do
writeln(фирма, назв, годвып, скал, вект, стоим) end.
PDF created with pdfFactory Pro trial version www.pdffactory.com
13
ЗАДАЧА :
В библиотеке храниться не более 20000 книг, каждая из которых имеет: автора, название, издательство и год издания. Проверить есть ли в библиотеке книга Иенсен Вирт "Паскаль". Если данной книги нет, то включит ее в состав библиотеки. Считать, что алфавитный каталог составлен по фамилиям авторов.
program поиск книги; label 1,2;
const колкниг=20000; type книга=record
автор: array[1..18] of char; название: array[1..35] of char; издательство: array[1..20] of char; годизд:1900.1992;
end; библиотека=array[1..20000] of книга;
var исккнига,буферкнига:книга; (*исккнига - искомая книга*) каталог:библиотека;
i,n;1..колкниг; k:integer;
begin
for i:=1 to колкниг do begin
for k:=1 to 18 do read(буферкнига.автор[k]); for k:=1 to 35 do read(буферкнига.назв[k]); for k:=1 to 10 do read(буферкнига.издат[k]);
read(буферкнига.годизд[k]); каталог[i]:=буферкнига;
end; (*чтение сведений о книгах
with исккнига do begin |
и запись их в каталоге*) |
автор:='Иенсен,Вирт'; |
|
назван:='Паскаль'; издат:='Финансы и статистика';
годиздан:=1982; |
|
end; |
|
for i:=1 to колкниг do |
(*сведения об искомой книге*) |
if каталог[i].автор>=исккнига.автор then begin if каталог[i].автор=исккнига.автор then begin writeln(i,'номер книги в каталоге'); goto 1; end else begin n:=i; goto 2;
end; end; (*поиск книги в каталоге,печать ее номера,если
PDF created with pdfFactory Pro trial version www.pdffactory.com
14
книга найдена или поиск места,куда надо включить книгу*)
2:for i:=колкниг downto n+1 do каталог[i]:=каталог[i-1]; (*сдвиг содержимого каталога*)
каталог[n]:=исккнига; (*включение в каталог книги*) for i:=1 to колкниг do begin буферкнига:=каталог[i]; with буферкнига do begin
writeln('автор); writeln('название'); writeln('издательство'); writeln('год издания'); end;
end; (*печать нового каталога*) 1: end;
end.
PDF created with pdfFactory Pro trial version www.pdffactory.com
15
ЛЕКЦИЯ 15. МНОЖЕСТВЕННЫЙ ТИП ДАННЫХ.
Множественный тип s строится на основе некоторого базового типа bs, в качестве которого используется любой ограниченный или скалярный тип, кроме неограниченного целого и вещественного типа. bs-определяет конечное множество значений множественного типа s
type s=set of bs
Любые подмножества базового множества могут являться значениями переменных множественного типа s . Они образуются
перечислением через запятую элементов базового множества или выражении базового типа и заключаются в [ ] скобки.
Множество не содержащее элементов называется. пустым.
Переменные множественных типов данных.
type города=(Москва, Киев, Ялта); md=set of города;
var p1,pp1:md; p2:set of 'a'..'f'; p3,p4:set of 0..9;
Если элементы множества являются последовательными значениями базового множества, то можно указывать только первый и последний.
Элементы множества могут задаваться и выражениями соответствующего базового скалярного типа.
k:=7; p3:=[1,k+1]; p4:=[k-1,8]
Операции над множествами.
+ объединение * пересечение - разность
1.Объединением 2-х множеств называется множество тех элементов, которые принадлежат этим множествам.
['b','f']+['b'..'d']=_['b','c','d','f']
PDF created with pdfFactory Pro trial version www.pdffactory.com
16
2.Пересечением 2-х множеств называется множество тех элементов, которые принадлежат одновременно двум множествам.
[Киев,Ялта]*[Москва, Киев]=[Киев] 3. Разностью 2-х множеств называется множество, содержащее те
элементы множества, которые не являются элементами второго множества.
[1,5,9]-[2,4,8,9]=[1,5]
Для сравнения множеств:
=,<>,<=,>=
4.Выражение a=b истинно, когда сравниваемые множества содержат одни и те же элементы.
5.Выражение a< >b истинно, когда одно из сравниваемых множеств содержит хотя бы один элемент не входящий в другое множество.
6.Выражение a<=b истинно, когда все элементы множества «а» одновременно являются элементами множества b.
7.Выражение a>=b истинно, когда все элементы множества b одновременно являются элементами множества а.
8.Результат логического типа вырабатывает специальная операция принадлежности элемента некоторому множеству; обозначается in. Слева пишется выражение соответствующего базового скалярного типа, а справа выражение множественного типа.
Пример: 5 in [3..7] ответ: true 9.Приоритет операций:
1)* 2)+,-
3)in,=,<>,<=,>=.
Последовательность выполнения операций одного приоритета определяется порядком их появления в выражении. Для изменения
порядка используются круглые скобки
PDF created with pdfFactory Pro trial version www.pdffactory.com
17
Семинар. Работа с множественным типом данных.
ЗАДАЧА
:Написать программу, которая формирует множество lb , в которое входят только латинские буквы, множество pr со знаками препинания из входной строки.
program lat; |
|
|
|
|
|
||
var c,I, |
|
j : char; |
|
|
|
||
lb:set |
of |
'A'..'z'; |
|
|
|
||
pr:set of |
'!'..'.'; |
|
|
|
|||
begin |
|
|
|
|
|
||
lb:=[ ];pr:=[ ]; |
|
|
|
||||
repeat read(c); |
|
|
|
||||
|
if c in [ |
'A'..'z'] |
then lb:=lb+[c] |
||||
else |
|
|
|
|
|
||
|
if c in [':', |
';', |
'.', ‘,’, |
'!'] then pr:=pr+[c]; |
|||
until eoln; |
|
|
|
|
|
write('латинские буквы'); for i:='A' to 'z' do
if i in lb then write(i); write('знаки препинания'); for j:='!' to '.' do
if j in pr then write (j); end.
ЗАДАЧА
Определить из какого числа разных цифр состоит целое положительное число.
В этом примере для выделения каждой цифры, составляющей число N целесообразно воспользоваться алгоритмом последовательного определения остатка от деления N на 10
Пример: 172:10=17(2-остаток) 17:10=1 (7-остаток)
цифры остатков 1,7,2 -это различные цифры составляющие число
172.
program Число цифр; var цифра:0..9;
n,чрц:integer; (чрц - число различных цифр)
PDF created with pdfFactory Pro trial version www.pdffactory.com
18
нц:set of 0..9; (нц - набор цифр) begin
read(n);
нц:=[ ]; чрц:=0; repeat
цифра:=n mod 10;
if not (цифра in нц) then begin
чрц:=чрц+1; нц:=нц+[цифра];
end;
n:=n div 10;
until n=0{ n>= 0 and n<=9}; writeln('чрц=',чрц)
end.
ЗАДАЧА
Написать программу, которая формирует множество LB, в которое входят только латинские буквы, встретившиеся во входной строке, и множество знаков препинания PR из входной строки.
Program lat; uses crt;
Var c,i,j:char; lb:set of 'a'..'z'; pr:set of '!'..'?'; Begin
clrscr;
writeln('Введите строку символов'); write('=>');
lb:=[]; pr:=[]; repeat
read(c);
if c in ['a'..'z'] then lb:=lb+[c] else
if c in [':',';','.',',','!','?'] then pr:=pr+[c] until eoln;
writeln('Латинские буквы'); for i:='a' to 'z' do
if i in lb then write(i:2); writeln;
PDF created with pdfFactory Pro trial version www.pdffactory.com
19
writeln('Знаки препинания'); for j:='!' to '?' do
if j in pr then write(j:2); End.
ЗАДАЧА
Вычислить следующие выражения:
а) ['A','B','C']=['C','B','A'] |
--> true |
|||
б) [3,4,6]<=[2..8] |
--> true |
|||
в) [ ]>=[1,2] |
--> false |
|||
г) trunc(8.3) in [1..9] |
--> true |
|||
д) succ('C') in ['B'..'D'] |
--> true |
|||
е) [2] < >[2,2,2] |
--> false |
|||
ж) 16 in [16] |
--> true |
|||
з) |
[1..14]*[5,12..60]+[4..7]- |
[2..16]*[6] |
-->[4,5,7,12,13,14] |
ЗАДАЧА
Упростить данные выражения множественного типа:
а) [11,17]*[2]+[7,17..40]*[2..17]-[2..8] -->[17 ]-[2..8]
б) (А-В)*А+(А-В)*В |
-->А-В |
в) (А+В)*(А-В)*(В-А) |
-->[] |
г) А+В - (А-В) - (В-А) |
-->А*В |
д) А-(А-В) |
-->А*В |
ЗАДАЧА
Известен набор товаров: хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В 3 магазина доставлены отдельные виды этих продуктов. Построить множества A, B, C, которые содержат: A - продукты, имеющиеся во всех магазинах одновременно; B - продукты, имеющиеся, по крайней мере, в одном магазине; C - продукты, которых нет ни в одном магазине.
program amaf; const n=3;
type продукты=(хлеб, масло, молоко, сыр); ассорт=set of продукты;
магазин=array[1..n] of ассорт;
PDF created with pdfFactory Pro trial version www.pdffactory.com
20
var m1:магазин; x:продукты;
A, B, C, xm1:ассорт; i,j,iw:integer;
begin
for i:=1 to n do begin xm1:=[];
writeln('введите номера продуктов i-ого магазина'); repeat read(iw);
case iw of
|
1: x:=хлеб; |
|
|
2: x:=масло; |
|
|
3: x:=молоко; |
|
|
4: x:=сыр; |
|
|
end; |
|
|
xm1:=xm1+[x]; |
|
|
until eoln; |
|
m1[i]:=xm1; |
|
|
end; |
|
|
A:=m1[1]; |
|
|
B:=[]; |
|
|
C:=[хлеб..сыр]; |
|
|
for i:=1 to n do begin |
|
|
B:=B+m1[i]; |
{ vo vsex (*по крайней мере в одном*)} |
|
A:=A*m1[i]; { perechen produktov ваще (*во всех*)} |
||
C:=C-B; |
{ |
(*нет ни в одном*)} |
|
end; |
|
for i:=1 to |
n do begin |
|
case i of |
|
|
2:writeln('ассортимент продуктов по крайней мере в одном магазине');
1:writeln('продукты имеются одновременно во всех магазинах');
3:writeln('продукты, которых нет ни в одном магазине');
end;
for x:= хлеб to сыр do if x in A then
case x of
хлеб: writeln('хлеб'); масло: writeln('масло'); молоко: writeln('молоко'); сыр: writeln('сыр'); end;
if i:=1 then A:=B else A:=C; end; end.
PDF created with pdfFactory Pro trial version www.pdffactory.com