- •Алгоритмы, структуры данных и программирование
- •Қасымқанұлы Бөрібай, к.Ф.-м. Н., доцент кафедры высшей математики Костанайского государственного педагогического института
- •Работа №1
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •1 Способ:
- •2 Способ:
- •3 Задачи
- •Работа №2
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •4 Тесты
- •3 Задачи
- •4 Тесты
- •Работа №3
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Примеры решения задач
- •3 Задачи
- •4 Тесты
- •Работа №4
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №5
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №6
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №7
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы.
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №8
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Тесты
- •Работа №9
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №10
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №11
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №12
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №13
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №14
- •1. Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2. Пример решения задачи
- •3. Задачи
- •4. Тесты
- •Работа №15
- •1 Перечень знаний и умений, необходимых для выполнения лабораторной работы
- •2 Пример решения задачи
- •3 Задачи
- •4 Контрольные вопросы
- •Ответы к тестовым заданиям
4 Тесты
Истина или ложь?
Каждое из представленных ниже утверждений либо верно, либо нет.
Число элементов множества не должно превышать 256.
Над множествами над множествами не допускаются операции сравнения.
Во множестве не фиксируется порядок элементов.
Все элементы множества должны иметь один тип данных.
В качестве базовых типов для множеств могут служить byte, char, boolean, integer, real.
Результатом проверки принадлежности элемента множеству могут быть только константы типа boolean.
Если в случае объединения и пересечения множеств операнды поменять местами, то результат не изменится.
Операции объединение, пересечение и вычитание, примененные к двум множествам в результате формируют третье множество.
В Turbo Pascal множество, не имеющее элементов, обозначается [0].
Над множествами в 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.
