Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП лабораторные работы.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
779 Кб
Скачать
☆

4 Тесты

Истина или ложь?

Каждое из представленных ниже утверждений либо верно, либо нет.

  1. Число элементов множества не должно превышать 256.

  2. Над множествами над множествами не допускаются операции сравнения.

  3. Во множестве не фиксируется порядок элементов.

  4. Все элементы множества должны иметь один тип данных.

  5. В качестве базовых типов для множеств могут служить byte, char, boolean, integer, real.

  6. Результатом проверки принадлежности элемента множеству могут быть только константы типа boolean.

  7. Если в случае объединения и пересечения множеств операнды поменять местами, то результат не изменится.

  8. Операции объединение, пересечение и вычитание, примененные к двум множествам в результате формируют третье множество.

  9. В Turbo Pascal множество, не имеющее элементов, обозначается [0].

  10. Над множествами в Turbo Pascal допустимы операции объединения, пересечения, сложения, вычитания, проверки принадлежности элемента множеству, операции сравнения.

Работа №5

Тема: Решение задач с использованием строк

Цель: подробно изучит строковый тип данных, и научиться применять на практике стандартные процедуры модуля Strings

1 Перечень знаний и умений, необходимых для выполнения лабораторной работы

Перед тем, как приступить к выполнению лабораторной работы, студенту необходимо ознакомиться со следующим материалом:

  • понятие строки и способы ее объявления в Turbo Pascal;

  • назначение и синтаксис стандартных процедур str(), val(), delete(), insert() и стандартных функций concat(), length(), pos(), copy(), ord(), chr(), upcase();

  • назначение и синтаксис стандартных функций модуля Strings;

  • способ обращения к символу с конкретным номером в строке;

  • с таблицей ASCII;

  • различие между переменными строкового и символьного типа.

2 Пример решения задачи

1) Дана строка, слова в которой разделены пробелами. Определить, есть ли в строке слово заданной длины.

В качестве входных данных можно будет вводить строки следующего вида: "Мама мыла раму" или "На улице давно осень" или "12 34567 89 000".

За каждым словом, кроме последнего, стоит пробел. Очевидно, чтобы выполнять работу над каждым очередным словом, можно выбирать все символы до последующего пробела. Чтобы и последнее слово обрабатывалось также, добавим в конец всей строки пробел.

Каждое слово определяется позициями его начального символа и конечного символа: соответственно i и j. Для первого слова i:=1.

Чтобы обработать всю строку, необходимо пройти ее от символа с индексом 1 до конца строки (length(a)).

Чтобы найти очередное слово, необходимо двигаться по строке до тех пор, пока не будет найден пробел. Зная, что на позиции j расположен пробел, можно утверждать, что слово начинается с символа i и заканчивается на символе j-1. Обрабатывайте полученное слово. Новое слово начнется за пробелом, то есть на позиции i:=j+1.

i:=1;

for j:=1 to length(a) do

if a[j]=’ ‘ then

begin

обработка слова на позициях от i до j-1

i:=j+1;

end

i

н

а

у

л

и

ц

е

н

о

ч

ь

j

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

Чтобы не выполнять лишних действий, остановим обработку строки как только найдем заданное слово. Для этого введем переменную-признак pr.

var a:string; { исходная строка}

n:integer; {заданная длина}

pr:boolean; { pr=false - слово не найдено}

i,j:integer;

begin

writeln(‘введите строку’); readln(a);

a:=concat(a,’ ’); { добавление последнего пробела в строку а}

writeln(‘введите n-требуемую длину слова’); readln(n);

i:=1; pr:=false;

for j:=1 to length(a) do

if a[j]=’ ’ then

begin if j-i=n then pr:=true; i:=j+1 end;

if pr=true then

writeln(‘слово такой длины в строке есть’)

else

writeln(‘слова заданной длины в строке нет’);

end.

2) Дана строка, слова в которой разделены пробелами. Удалить из нее все слова четной длины.

Подход к решению похож на предыдущую задачу. Необходимо перебрать все слова, с первого до последнего. При этом добавим последний пробел, для единого подхода к выделению всех слов. Как только слово выделено, проверяем его длину на четность. Чтобы удалить слово, фактически необходимо передвинуть на его место остаток строки, следующей за ним. Для этого используем процедуру delete():

i

Н

а

в

е

р

х

у

б

ы

л

о

т

е

м

н

о

j

delete(a,i,j-i);

в

е

р

х

у

б

ы

л

о

т

е

м

н

о

При удалении i останется прежним и j совпадет с ним.

Поскольку переменная j будет меняться произвольно, и не всегда наращиваться на 1 от шага к шагу, удобнее использовать цикл while вместо цикла for.

var a:string; {исходная строка}

i,j:integer;

begin

writeln(‘введите строку a=‘); readln(a);

a:=a+’ ‘; {добавление последнего пробела в строку а}

i:=1; j:=1;

while j<=length(a) do

begin

if a[j]=’ ’ then

begin

if (j-i) mod 2 = 0 then

begin delete(a,i,(j-i+1)); j:=I end

else begin j:=j+1; i:=j; end

end;

j:=j+1

end;

writeln(‘a=’,a);

end.