АЛГОхитрости-1 Решение и Циклы

Содержание

Слайд 2

Использование промежуточной переменной (буфера) при обмене значениями двух переменных: A =

Использование промежуточной переменной (буфера) при обмене значениями двух переменных:
A =

3;
B = 6;
Надо поменять значения переменных местами, т.е. сделать:
A = 6;
B = 3;
Для этого действия вводится буфер – переменная К – и выполняются следующие операции:
K = A;
A = B;
B = K;
Сумматор – используется для накопления значений в какой либо изменяющейся в процессе обработки переменной, при этом вид обработки может быть самый разный (суммирование, умножение и пр.):
S = S + n;
D = D * h;

АЛГОхитрости
Типовые алгоритмические приёмы

И+ПРГ

Слайд 3

Вывод на печать текстов с одним изменяющимся словом: Пример: - число

Вывод на печать текстов с одним изменяющимся словом:
Пример: - число является

палиндромом,
- число НЕ является палиндромом.

АЛГОхитрости
Типовые алгоритмические приёмы

Понятно, что в принципе не очень сложно распростра-нить это приём на вывод в основном одинаковых текстов с несколькими изме-няющимися частями

И+ПРГ

Условный оператор

Слайд 4

Условный оператор Ввести исходные данные, найти решение, вывести результат на экран

Условный оператор
Ввести исходные данные, найти решение, вывести результат на экран

(x

>= -3) And (&&) (x <= 7)

1. Определить принадлежит ли x отрезку [-3,7]

(x > 99) And (&&) (x <= 999)

2. Определить является ли x трёхзначным числом

Использовать операции if и Mod (%)

3. Дано двузначное число. Определить кратно ли оно трём

5. Дано четырёхзначное целое число x. Написать программы на С и Pascal, определяющие, является ли високосным год с таким номером.
Год является високосным, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400, например. 1700, 1800 и 1900 – не високосные года, 2000 – високосный.

4. Дано двузначное число x. Определить состоит ли оно из одинаковых цифр

if (x >= 10) and (x <= 99) then
if x mod 10 = x div 10 then
writeln ('Да')
else writeln ('Нет');
else writeln(' ошибка ввода числа');
вариант 2-го if: if x mod 11 = 0 then

И+ПРГ

АЛГОхитрости
Типовые алгоритмические приёмы

Слайд 5

Чтение данных с клавиатуры Очистка буфера клавиатуры И+ПРГ АЛГОхитрости При вводе

Чтение данных с клавиатуры

Очистка буфера клавиатуры

И+ПРГ

АЛГОхитрости

При вводе нескольких числовых данных, например,

оператором Readln(a, b, c); необходимо после набора каждого значения переменной нажимать клавишу SpaceBar или Enter, а в конце ввода - Enter.
При вводе значений символьных переменных нажатие клавиши Enter приводит к присвоению символьной переменной значения кода клавиши Enter (#13), поэтому значения символьных переменных вводятся одна за другой без нажатия Enter или SpaceBar (#32).
Например, оператор: Readln(с1, с2, с3, c4); ожидает ввода значений символьных переменных с1, с2, с3, c4, т. е. набора на клавиатуре символов, например: "У", "Р", "А", "!" и нажатия Enter. Тогда оператор Writeln(с1, с2, с3, c4); выведет на экран надпись: УРА!

C

Pascal

Для функции scanf задаются спецификаторы ввода-вывода, которые определяют тип данных вводимых переменных.
При чтении чисел из буфера клавиатуры функция scanf() прекращает чтение числа тогда, когда встречается первый нечисловой символ.
При чтении одиночного символа символы разделителей читаются так же, как и любой другой символ, хотя при чтении данных других типов разделители интерпретируются как разделители полей.
Например, при вводе с входного потока
"x y" фрагмент кода
scanf("%c%c%c", &a, &b, &c);
помещает символ x в a, пробел - в b, а символ y - в c.

Введите конструкцию: A + B разными способами (одним и несколькими операторами ввода Pascal и С; как в образце; сначала знак – потом цифры и т.д.).
Исследуйте ситуацию, когда знак операции пропадает, а когда – нет!

Напишите ввод цифровых и символьных данных очищая буфер клавиатуры перед вводом знака операции.

Слайд 6

Цикл for Нарисовать алгоритм, написать программы на Pascal и С 1.

Цикл for
Нарисовать алгоритм, написать программы на Pascal и С

1. Дано

целое число N (> 3). Последовательность целых чисел Ak определяется следующим образом:
А1 = 1, А2 = 2, A3 = 3, … , Ak = Ak-1 + Аk-2 – 2*Аk-3,
k = 4, 5, …
Вывести элементы А1, А2, … , AN.

И+ПРГ

2. Дано целое число N (> 0). Найти и вывести сумму:
1N + 2N-1 + … + N1.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число (или использовать длинные целые: longint в Pascal, long в C).

АЛГОхитрости
Типовые алгоритмические приёмы

Program Exponent; (* Пример вычисления любой степени в Pascal *)
Var t2_16 : real; t16_2 : real;
 Begin
  t2_16:= Exp(16*Ln(Abs(2))); t16_2:= Exp(2*Ln(Abs(16)));
  Writeln ('2 в 16 степени ', t2_16:0:0); Writeln ('16 во 2 степени ', 16_2:0:0);
 End.

Слайд 7

Определение количества цифр целого числа Введём новые математические операции в псевдокоде:

Определение количества цифр целого числа
Введём новые математические операции в псевдокоде:

Целое(<выражение>) – в результат заносится только целая часть выражения в круглых скобках.

АЛГОхитрости
Типовые алгоритмические приёмы. Цикл while

И+ПРГ

Блок-схема

Program N_cifr_cisla;
(* Определение количества цифр в целом числе *)
Var n,k,i: integer;
begin
Write('Введите число - '); ReadLn (n);
i:=0; k:=n; (*Счётчик цифр, сохранение числа*)
while (k<>0) do
begin
k:=k div 10;
i:=i+1;
end;
 writeln('Количество цифр в числе ',n,' равно ',i);
end.
------------------------------------------------------------------

// Определить состоит ли число из одинаковых цифр
#include
main()
{
int n, i=0, k;
printf("\nВведите целое число (до 32 767) n=");
scanf("%D", &n);
k=n;
while(k!=0)
{
k = (int) k / 10;
i++;
}
printf("\nКоличество цифр в числе %i равно
%d",n,i);
return 0;
}

Код

PASCAL
CK

Слайд 8

Выделение цифр, входящих в целое число Для решения этой задачи надо:

Выделение цифр, входящих в целое число
Для решения этой задачи надо:
Получить

остаток от деления заданного числа на 10 – это будет правая (последняя) цифра числа (остаток от деления 123 на 10 = 3)
Убрать из числа последнюю цифру,
для этого надо разделить число на 10 и взять целую часть результата деления
(123 делить на 10 = 12,3 ? целая часть нового числа = 12)
Получить остаток от деления нового числа на 10 – это будет правая цифра нового числа (остаток от деления 12 на 10 = 2)
Убрать из числа последнюю цифру, для чего снова разделить новое число на 10 и взять целую часть результата деления (12 делить на 10 = 1,2 - целая часть нового числа = 1)
Получить остаток от деления нового числа на 10 – это будет правая цифра числа (остаток от деления 1 на 10 = 1 – Пояснение: результат деления = 0, а остаток = 1)
(последнее новое число в примере состоит из одной цифры, но без специальных операций это заранее неизвестно, лучше выполнять предыдущие операции)
Теперь надо уяснить как организовать последовательность описанных выше операций: НАДО организовать цикл, в котором:
повторять тело цикла до тех пор пока целая часть результата деления нового числа на 10 не станет равна 0,
получить остаток от деления текущего числа на 10,
получить целую часть от деления текущего числа на 10,
назначить целую часть результата деления текущим новым числом,
перейти к пункту а).

АЛГОхитрости
Типовые алгоритмические приёмы. Цикл while

И+ПРГ

Слайд 9

Выделение цифр, входящих в целое число – блок-схема Введём новые математические

Выделение цифр, входящих в целое число – блок-схема
Введём новые математические операции в

псевдокоде:
% или Остаток от деления – в результат записывается остаток от деления операнда_1 на операнд_2 . Пример: А=243, B=10; r = A % B = 243 % 10 = 3

АЛГОхитрости
Типовые алгоритмические приёмы. Цикл while

И+ПРГ

Слайд 10

Проверка введённых данных – блок-схема Это действие осуществляется с использование структуры

Проверка введённых данных – блок-схема
Это действие осуществляется с использование структуры
Цикл

с постусловием

АЛГОхитрости
Типовые алгоритмические приёмы

И+ПРГ

Циклы do-while, repeat-until