Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник заданий по T-Pascal.doc
Скачиваний:
64
Добавлен:
18.03.2015
Размер:
3.03 Mб
Скачать

5.4 Упражнения

Упражнение 1. Иллюстрацией описания множеств и операций над ними может слу­жить программа Dem _ Mno, в которой описаны множества чисел D, D1, D2, D3. Затем они заполнены следующим образом: множество D1 — четными числами 2,4,6,8; множество D2 — числами 0,1,2,3,5; множество D3 — нечетными числами 1,3,5,7,9. После этого над мно­жествами выполнены операции объединения, разности и пересечения.

Program Dem _ Mno; {Демонстрация операций над множествами}

Type

Digits=set of 0... 9;

var

D1, D2, D3, D: Digits;

Begin

D1:= [2, 4, 6, 8]; {Заполнение множеств}

D2:= [0..3, 5];

D3= [1, 3, 5, 7, 9];

D: =D1+D2; {Объединение множеств D1 и D2}

D: =D+D3; {Объединение множеств D и D3}

D: =D -D2; {Разность множеств D и D2}

D: =D*D1; {Пересечение множеств D и D1}

End.

Как видно из текста программы, сначала описан тип Digits= set of 0..9, затем описаны переменные D1, D2, D3, D этого типа. В первой части программы осуществляется заполнение множеств, а затем над множествами выполняются операции объединения, пересечения, раз­ности.

Для проверки действия программы запустите интегрированную среду программирова­ния. Введите текст программы Dem_Mno и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Так как в Паскале отсутствуют средства ввода-вывода элементов множества, то действие программы проверьте, исполняя ее по шагам и наблюдая ; текущие значения переменных D1,D2,D3,D в окне просмотра.

Упражнение 2. Опишите множество М(1..50). Сделайте его пустым. Ввода целые числа с клавиатуры, заполните множество 10 элементами.

В разделе описания переменных опишем множество целых чисел от 1 до 50, переменную Х целого типа будем использовать для считывания числа-кандидата во множество, целую переменную I используем для подсчета количества введенных чисел.

В начале программы применим операцию инициализации множества М:= [ ], так как, но не имеет элементов и является пустым.

Заполнение множества элементами произведем с использованием оператора повтора for, параметр которого I будет указывать порядковый номер вводимого элемента. Операцию заполнения множества запишем оператором присваивания М:=М+[Х]. Контроль заполнения множества запишем с использованием операции проверки принадлежности in. Если условие Х in М выполняется, выведем сообщение о том, что число Х помещено во множество. Текст программы описания и заполнения множества будет таким:

Program Inpu_ Mno;

var

M: set of 1..50;

X, I: integer;

Begin

M: = [ ];

For I: =1 to 10 do

Begin

Write ('Введите', I, ' -й элемент множества: ');

Readln(X);

If (X in M) then {Если введенное число входит в множество М}

Begin

Writeln (X,' помещен в множество 1..50');

M: =M+[X];

End;

End;

Writeln;

End.

Для проверки действия программы запустите интегрированную среду программирования. Введите текст программы Inpu_ Mno и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Так как в Паскале отсутствуют средства ввода-вывода элементов множества, то действие программы проверьте, исполняя ее по шагам и наблюдая текущие значения переменных I, Х и М в окне просмотра. Попробуйте задать значения числа Х больше 50, повторно задавать одинаковые значения Х и проанализировать значения множества М.

Упражнение 3. Описать множества гласных и согласных букв русского языка, определить количество гласных и согласных букв в предложении, введенном с клавиатуры.

Зададим тип Letters — множество букв русского языка, затем опишем переменные этого типа: Glasn — множество гласных букв, Sogl — множество согласных букв. Вводимое < клавиатуры предложение опишем переменной Техt типа String. Для указания символа в строке Техt применим переменную I типа byte. Для подсчета количества гласных и согласных букв опишем переменные G и S. Блок описания программы запишется следующим образом:

Type

Letters= set of 'A'....'я';

Var

Glasn, Sogl: Letters;

Text: string;

I: byte;

G, S: byte;

В начале программы запишем заполнение множеств гласных и согласных букв:

Glasn:=['А' ,'а' ,'Е','е', 'И' ,'и','0' ,'o','У ,'у','Э' ,'э','Ю' , 'ю' , .,'я'];

Sogl: = ['Б'..'Д','б'..'д','Ж ', 'ж', 'З', 'з', 'К'..'Н','к'..'н','П', .. 'T', 'п'..'т', 'Ф'..'Щ', 'ф'..'щ', 'Ъ','ъ', 'Ь','ь'];

После этого запишем вывод приглашения на ввод предложения и считывание этого предложения в переменную Техт.

Write ('Введите предложение ');

Readln (Техt);

Перед началом подсчета количества гласных и согласных букв в предложении обнулим значения переменных G и S.

Проверку принадлежности символов, составляющих предложение множествам гласных или согласных букв русского языка запишем с использованием оператора повтора for, пара­метр I которого, изменяясь от 1 до значения длины предложения, будет указывать порядко­вый номер символа в предложении. Принадлежность очередного символа предложения множеству гласных или согласных букв запишем операцией 1п. Если условие Техt[I] in Glasn выполняется, то счетчик гласных букв G увеличивается на 1. Если выполняется условие Техt[I] in Sogl, тогда увеличивается на 1 счетчик согласных букв S. Если не выполняется ни первое, ни второе условие, значит, очередной символ в предложении не является гласной или согласной буквой русского языка. Данный фрагмент программы запишется так:

For I: =1 to Lengt (Text) do

Begin

If text [I] in Glasn then G: = G+1;

If text [I] in Sogl then S: = S+1;

End;

В заключение программы запишем вывод сообщения о результатах подсчета гласных и согласных букв русского языка в предложении.

В целом текст программы запишется таким образом:

Program Glasn_Sogl; {Подсчет гласных и согласных букв в предложении}

Tуре

Letters = set of 'A'. .'я'

var

Glasn, Sogl: Letters;

Техt : String;

I : byte;

G, S : Ьуtе;

Ьеgin

Glasn:=['А' ,'а' ,'Е','е', 'И' ,'и','0' ,'o','У ,'у','Э' ,'э','Ю' , 'ю' , .,'я'];

Sogl: = ['Б'..'Д', 'б'..'д','Ж ', 'ж', 'З', 'з', 'К'..'Н','к'..'н','П', .. 'T', 'п'..'т', 'Ф'..'Щ', 'ф'..'щ', 'Ъ','ъ', 'Ь','ь'];

Write (' Введите предложение ');

Readln(Text);

G: =0;

S: =0;

For I: =1 to Length (Text) do

Begin

If text [I] in Glasn then G: = G+1;

If text [I] in Sogl then S: = S+1;

End;

Writeln (В предложении " ', Text, ' " ', G, ' гласных и ', S, ' согласных букв');

End.

Запустите интегрированную среду программирования. Введите текст программы Glasn_Sogl и запишите файл на диск под соответствующим именем, а затем откомпилир. его. Проверьте действие программы, задавая различные предложения.

Упражнение 4. Составить программу с контролем ввода данных, обеспечив ввод фамилии, имени и отчества только на русском языке.

В разделе описания переменных опишем множество Litera, включающее в себя всевозмо-

жные символы, переменную Name для хранения Ф.И.О., Ch для посимвольного ввода Ф.И.О. Переменная логического типа Rus будет указывать, принадлежит ли очередной вводимый символ множеству букв русского языка. Для использования стандартной функции чтения кода нажатой клавиши ReadKey подключим модуль Crt. Блок описания запишется так:

Uses crt;

Var

Litera: set of char;

Name: string;

Ch: char;

Rus: Boolean;

В начале программы запишем заполнение множества букв русского алфавита:

Litera: = [' ', 'А' .. 'п' , 'р' .. 'я'];

Затем запишем вывод запроса о вводе Ф.И.О.:

Write ('Введите фамилию, имя, отчество ');

Считывание всех символов, входящих в запись Ф.И.О., запишем с применением от тора повтора гереаt. Завершение цикла проверим по нажатии клавиши Епtег (код 13).

Считывание каждого символа вводимого текста Ф.И.О. запишем оператором повтора гереаt, условием завершения которого зададим значение Тгuе переменной Rus. В теле оператора повтора сначала считаем в переменную ch код нажатой клавиши, затем проверим, входит ли введенный символ во множество букв русского алфавита. Если условие ch in Litera выполняется, то переменной Rus присваивается значение Тгuе, данный символ приклеивается к строке Name и печатается в строке ввода, после чего управление передается на оператор until. Так_как условие завершения цикла ввода символа на русском языке выполняется, осуществляется переход к считыванию кода нажатой клавиши.

Если очередной нажатой клавишей является Еnтег, то ReadКеу возвращает код №#13. Если в операторе if ch<>#13 условие не выполняется, то управление передастся за его пределы, т. е оператор until ch=#13, и ввод строки name завершается, так как нажата клавиша enter.

Данный блок программы запишется так:

Repeat {Считать всю строку name}

Repeat {Считать один символ, входящий в множество Litera}

Ch: = ReadKey; {Считать в ch код нажатой клавиши}

If ch<>#13 then begin

Rus: =ch in Litera;

If Rus {Если символ входит в множество Litera }

Then

Begin

Name: =name+ch; {Приклеить введенный символ к name}

Write (ch); {Напечатать введенный символ в строке ввода}

end

е1sе {Код нажатой клавиши не входит в множество Litera}

Begin

Writeln (' Переключитесь в русский регистр');

Write ('и введите Ваше имя ');

End;

End;

Until rus; {Завершить ввод очередного символа на русском языке}

Until ch=#13 ;"{ Завершить ввод строки name, т.к. нажата клавиша Enter}

В заключительной части программы выполняется перевод курсора на следующую строку и вывод текста "Здравствуйте,", после чего печатается значение переменной Name.

Полный текст программы будет записан следующим образом:

Program FOI; {Ввод Ф.И.О. только на русском языке}

Uses crt;

vаr

Litera: set of char;

Name: string;

Ch: char;

Rus: Boolean;

Begin

Litera: = [' ', 'А' ... 'п', 'р' ... 'я'];

Write ('Введите фамилию, имя, отчество ');

Repeat {Считать всю строку name}

гереаt: {Считать один символ, входящий в множество Litera}

ch:= readkey; {Считать .в ch код нажатой клавиши}

If ch<>#13 then begin -

rus:=ch in Litera;

If Rus {Если символ входит в множество Litera};

Then

Begin

Name:=Name+Ch; {Приклеить введенный символ к Name};

Write (Ch); {Напечатать введенный символ в строке ввода}

End;

Else {Код нажатой клавиши не входит в множество Litera}

Begin

Writeln ('Переключитесь в русский регистр')

Write ('и введите ваше имя');

End;

End;

Until Rus; {Завершить ввод очередного символа на русском языке}

Until Ch=#13; {Завершить ввод строки Name т.к нажата клавиша Enter}

Writeln;

Writeln ('Здравствуйте, ' ,Name);

End.

Запустите интегрированную среду программирования. Введите текст программы FOI_RUS и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Проверьте действие программы, пытаясь ввести латинские и русские символы. Пронаблюдайте в пошаговом исполнении значения переменных Ch, Name, Rus и выражений Ch=#13, Ch in Litera.