Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Paskal_uchebn_posob_chast2_26_6_7

.pdf
Скачиваний:
46
Добавлен:
09.04.2015
Размер:
670.28 Кб
Скачать

11

Семинар. Работа с типом данных «Записи».

ЗАДАЧА :

Написать программу, которая вводит информацию о 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]