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

3 Задачи

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

4 Тесты

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

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

  1. Тело цикла с предусловием в Turbo Pascal выполняется до тех пор, пока условие истинно.

  2. По завершении работы оператора цикла с параметром значение считается неопределенным.

  3. В теле цикла с параметром разрешается явно изменять значение параметра цикла.

  4. Тело цикла с постусловием в Turbo Pascal выполняется до тех пор, пока условие истинно.

  5. В операторе цикла repeat условие проверяется до выполнения тела цикла.

  6. В Turbo Pascal не допускается использование вложенных циклов.

  7. Параметр цикла for, а также начальное и конечное значения могут принадлежать любому порядковому типу.

  8. Тело цикла с постусловием следует обязательно заключать в операторные скобки.

  9. Параметр цикла for может изменяться только на единицу.

  10. Если условие истинно, то тело цикла с предусловием не будет выполнено ни разу.

Работа №3

Тема: Задачи целочисленной арифметики

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

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

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

  • способы объявления стандартных типов данных;

  • назначение и синтаксис операторов условного и безусловного перехода;

  • назначение и синтаксис операторов цикла с предусловием;

  • назначение и синтаксис операторов цикла с постусловием;

  • назначение и синтаксис операций div, mod;

  • назначение и синтаксис логических операторов.

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

Существует широкий круг задач, которые оперируют натуральными числами. Подавляющее большинство получаемых значений в таких задачах также являются натуральными числами. Представить такие значения можно с помощью переменных типа integer. Для успешного решения подобных задач необходимо хорошо знать операции, выполняемые над данным типом, а также функции, работающие с такими значениями.

Чаще всего используются арифметические операции + , - , * , div , mod .

Операция div для целых операндов выполняет целочисленное деление, т.е. 5div2=2, 4div3=1, 8div4=2.

Операция mod дает целочисленный остаток от деления: 5mod2=1, 4mod3=1, 8mod3=2,8mod4=0.

Часто в задачах подобного вида необходимо осуществить возведение в степень. Обратите внимание, что в Паскале отсутствует операция возведения в степень. При целочисленном значении показателя степени она может быть заменена умножением, в случае же вещественного показателя для вычисления степени числа используется следующее соотношение: x^y= exp(y*ln(x))

exp(y*ln(x)) - возведение x в степень y

exp(x*ln(10)) - возведение 10 в степень x

Наиболее типичными приемами в ходе решения задач являются:

  • определение порядка натурального числа;

  • выделение некоторой цифры числа;

  • формирование из цифр исходного числа нового числа.

1 пример. Определить порядок и сумму цифр заданного натурального числа.

Порядок числа - это количество цифр в числе, а значит, значение целое. Сумма цифр, очевидно, тоже будет принадлежать к целому типу.

Для решения задачи придется перебрать все цифры числа. Удобнее начать перебор с последней цифры, так как она выделяется как остаток от деления числа на 10.

Рассмотрим число 1234.

1234 mod 10= 4 - первая цифра есть.

Чтобы получить вторую цифру, очевидно цифру 4 надо как-то откинуть. Используем целочисленное деление числа на 10, понижая разрядность числа:

1234 div 10=123

Выделяем следующую цифру:

123 mod 10=3, откидываем 3: 123 div 10=12

Аналогично поступаем далее:

12 mod 10=2 12 div 10=1

1 mod 10=1 1 div 10=0

В результате мы свели число к 0, то есть все цифры числа перебрали.

Таким образом, предложенные действия выполняются до тех пор, пока число не будет сведено к нулю, попутно наращивая каждый раз значение порядка на 1, а сумму - на значение вновь найденной цифры.

Действия реализуются через конструкцию цикла while. Предварительно зададим исходные значения порядка и суммы, равными 0.

var n:integer; {исходное числo}

p,s:integer; {результат - порядок числа и сумма цифр}

p:=0; s:=0;

write(‘введите n=’);

readln(n);

while n>0 do

begin

s:=s+n mod 10;

n:=n div 10;

p:=p+1

end;

writeln(‘порядок числа p =’,p);

writeln(‘сумма цифр s=’,s);

end.

2 пример. Дано натуральное число n. Получить новое число пeреставлением цифр исходного числа в обратном порядке.

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

Например,

задано число n=1234, представим его так:

1234 = 1*103 + 2*102 + 3*101 + 4*100

обратное к нему число - это сумма следующего вида:

4321 = 4*103 + 3*103 + 2*101 + 1*100

Представим итоговое число так:

4321= ((((4)*10+3)*10+2)*10+1)

Тогда,

  • выделяя цифру, сразу помещаем ее в разряд единиц результирующего числа;

  • повышаем разрядность этого числа, умножая его на 10;

  • затем повторяем те же действия, пока все цифры не будут выбраны.

Исходное число

Цифра числа

обратное число

1234

1234 mod 10=4

s=4

123

123 mod 10=3

s=s*10+3=

4*10+3=43

12

12 mod 10=2

s=s*10+2=

43*10+2=432

1

1 mod 10=1

s=s*10+1=

432*10+1=4321

Программа будет следующей:

var n:integer; { исходное число}

s:integer; {обратное число}

begin

s:=0;

writeln(‘введите n’);

readln(n);

while n>0 do

begin

s:=s*10+n mod 10;

n:=n div 10

end;

writeln(‘обратное число =’,s);

end.

3 пример. Дано натуральное число n. Верно ли, что это простое число.

В качестве ответа ожидается словесное сообщение. Чтобы программа выдала правильный ответ, необходимо определить переменную, которая одним своим значением указывала бы на истинность утверждения, а другим - на ложь. Для этих целей введем некоторую переменную-признак типа Boolean. Ее значение будет равно: False – ложь, True - истина.

Решим задачу, исходя из определения простого числа. Простым называется натуральное число от 2 и более, которое делится на 1 и на само себя, не делясь при этом ни на какое другое число без остатка.

Следовательно, если мы будем делить число n на все числа из диапазона от 1 до n, то без остатка оно разделится ровно два раза. Однако при этом необходимо ввести дополнительную переменную, которая бы подсчитывала количество таких раз.

Сократим диапазон с 1 по n до диапазона с 2 по n-1. В этом диапазоне мы не должны встретить числа, которое бы делило n без остатка. Если же это произошло, то число не простое и переменная-признак примет значение false.

var n: integer; {исходное число}

pr:boolean; {переменная признак: false - число не простое, true - простое}

i:integer;

begin

writeln(‘введите n ‘);

readln(n);

for i:=2 to n do

if n mod i=0 then pr:=false;

if pr=true then

writeln(n,’ число – простое’)

else

writeln(n,’ число - не простое’);

end.

Следует сделать оговорку для примеров 1 и 2. В них введенное исходное число n в ходе решения задачи фактически теряется, в обоих случаях обращаясь в 0. Если исходное значение числа необходимо использовать в дальнейшем, позаботьтесь об этом до его «порчи», продублировав это значение в некоторой дополнительной переменной.