Pascal: Примеры задач с решением

Задача 1.

Вычислить: y = sin1 + sin1.1 + sin1.2 + … + sin2.


Первый вариант решения данной задачи.

Анализируя данную формулу, видим, что аргумент функции sin очередного слагаемого отличается от предыдущего на 0.1. Поэтому для решения данной задачи можно составить следующий алгоритм:

Переменные:

с – очередное слагаемое;

i – аргумент функции;

y – сумма.

  1. Обнуляем начальное значение переменной y (строка 5), в которой будем накапливать сумму.
  2. Начальное значение аргумента функции i равно 1 (строка 6).
  3. Проверяем, значение i меньше или равно 2, т.к. по заданию аргумент функции изменяется от 1 до 2 (строка 7)?
  4. Если «да», то определяем очередное значение функции (строка 9). Сохраняем его в переменной с. Если «нет», то расчет суммы закончен – переходим на шаг 78.
  5. Добавляем это слагаемое в сумму (строка 10).
  6. Увеличиваем значение аргумента i на 0.1 (строка 11).
  7. Переходим на шаг 3.
  8. Выводим результат на экран (строка 13).

Второй вариант решения данной задачи.

Анализируя данную формулу, видим, что каждое слагаемое данной суммы можно рассчитать по формуле sin(1 + 0.1 * i), где i изменяется от 0 до 10. Поэтому для решения данной задачи можно составить следующий алгоритм.

Переменные:

i – параметр цикла;
y – сумма.

  1. Обнуляем начальное значение переменной y (строка 6), в которой будем накапливать сумму.
  2. Организуем цикл для определения суммы (параметр дан-ного цикла должен измениться от 0 до 10) .
  3. В данном цикле определяем очередное слагаемое по фор-муле и добавляем это слагаемое в сумму (строка 7).
  4. Выводим результат на экран (строка 8).

Задача 2.

Вычислить: y = 1*3*5* … *(2n–1), n>0;

Задача 3.

Дано натуральное число N. Разложить его на простые множители.

Переменные:

n – исследуемое число;

i, j – переменные циклов;

f – вспомогательный флаг.

Алгоритм решения задачи:

  1. Вводим значение переменной n. Т.к. пользователь может случайно ввести отрицательное число, то необходимо дать ему возможность для повторного ввода значения переменной n. По-этому организуем цикл (строки 3–6 текста программы). Лучше использовать цикл с пост проверкой условия (Repeat…Until). Тело цикла составляют два оператора: вывода на экран приглашения для ввода значения переменной n (строка 4) и оператор чтения с клавиатуры – для непосредственного ввода значения переменной n (строка 5). Данный цикл будет выполняться до тех пор, пока пользователь не введет любое положительное число (срока 6).
  2. Выводим на экран значение переменной n и начинаем формировать ответ. Ответ будет представлен в следующем виде (например, в качестве значения переменной n ввели 8):         8 = 1*2*2*2. Т.к. единица является простым множителем для любого числа, то выводим ее на экран (строка 7). В результате выполнения данной строки на экране появится: 8=1.
  3. Вспомогательной переменной f присваиваем значение false. Данная переменная нам будет необходима для определения, а были ли вообще найдены простые множители у заданного числа n. Запоминаем исходное значение переменной n в переменной j (строка 8).
  4. В цикле по переменной i начинаем порождение натуральных чисел, не превосходящих середины заданного числа n, для определения делителей данного числа n (строка 9). Данный цикл начали с 2, т.к. единицу мы уже учли (шаг 2 данного алгоритма). Т.к. в цикле For можно использовать только целые переменные, то воспользовались оператором целочисленного деления на 2 (n div 2). В данном цикле выполняем следующее.  Определяем, является ли очередное i делителем числа n (в качестве n в данном цикле используем j). Для этого определяем остаток от деления j на i. Если остаток равен 0 (строка 10), т.е. число i является делителем j, то определяем, сколько таких делителей, уменьшая число n (строки 11–18). Переменной f присваиваем значение true (строка 12) – это означает, что у заданного числа n есть делители. Организуем цикл, пока остаток от деления j на i равен 0 (строка 13). В данном цикле выводим делитель на экран (строка 15) и уменьшаем заданное число, деля его целочисленно на делитель (строка 16). Повторяем цикл.   После завершения этого цикла возвращаемся на цикл For (строка 9), изменяем i и повторяем те же действия для нового делителя.
  5. Если у числа нет делителей (оно является простым), то данное число можно разложить только на 1 и само себя. Вспомогательная переменная f и определяет, были ли делители у числа n. Если значение переменной f осталось false, то делителей не было, поэтому выводим само это число (строка 19).

Задача 4.

Даны натуральное число n и последовательность a1, a2,…,an вещественных чисел. Найдите знакочередующую сумму S = a1 –a2 + a3 –…+ (–1)n+1 an.

Переменные:

n – количество чисел;

a – очередное число;

p – булевский признак знака слагаемого;

i – переменная цикла;

S – знакочередующая сумма чисел.

Алгоритм решения задачи:

  1. вводим длину последовательности n и устанавливаем начальное значение S;
  2. булевская переменная p первоначально истинна, она будет указывать на знак слагаемого в сумме;
  3. последовательно считываем числа, и если p = true, то прибавляем очередное число к сумме S, иначе – отнимаем;
  4. на каждом шаге цикла значение p меняем на противоположное;
  5. выводим результат.

Задача 5.

Найти сумму первых n членов ряда y = 1 + x/2 + x2/3 + +x3/4+…, при |x|<1.

Переменные:

n – количество членов ряда;

x – переменная ряда;

z – вспомогательная переменная;

i – переменная цикла;

y – сумма ряда.

Алгоритм решения задачи:

  1. вводим количество членов ряда n и переменную X;
  2. в цикле порождаем очередной член ряда и прибавляем его к сумме y;
  3. выводим результат.

Задача 6.

Вводится последовательность из N целых чисел. Найти сумму всех отрицательных чисел.

Переменные:

n – количество чисел;

x – очередное число;

i – переменная цикла;

sum – сумма отрицательных чисел.

Алгоритм решения задачи:

  1. вводим длину последовательности n и устанавливаем на-чальное значение sum;
  2. последовательно считываем числа и, если число отрица-тельное, то прибавляем его к сумме sum;
  3. в зависимости от значения sum выводим результат.

Задача 7.

Вводится последовательность из N целых чисел. Найти наибольшее число.

Переменные:

n – количество чисел;

x – очередное число;

i – переменная цикла;

max – наибольшее число.

Алгоритм решения задачи:

  1. вводим длину последовательности n и устанавливаем на-чальное значение max по первому числу;
  2. последовательно считываем числа и, если очередное чис-ло x больше max, то переприсваиваем значение max := x;
  3. выводим результат.

Задача 8.

Вводится последовательность целых чисел, 0 – конец по-следовательности. Найти два наименьших числа.

Переменные:

x – очередное число;

min1 – первое наименьшее число;

min2 – второе наименьшее число (min2>=min1).

Алгоритм решения задачи:

  1. устанавливаем начальные значения min1 и min2 по двум первым числам;
  2. последовательно считываем числа и, если очередное чис-ло x меньше или равно min1 (min1<min2), то переприсваиваем значение min1 и min2;
  3. если x попадает в интервал от min1 до min2, то перепри-сваиваем только min2;
  4. выводим результат.

Задача 9.

Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить, является ли последователь-ность возрастающей.

Переменные:

old – предыдущее число;

new – рассматриваемое число;

f – флаг.

Решение данной задачи строится от противного. Математи-чески для того, чтобы последовательность была возрастающей, для каждого очередного элемента new и предыдущего old должно выполняться условие new > old. Любое нарушение данного усло-вия приводит к тому, что последовательность не может быть возрастающей.

Алгоритм решения задачи:

  1. вводим два первых числа как old и new, задаем начальное значение флага f;
  2. в цикле ищем нарушение свойства членов возрастающей последовательности;
  3. пере присваиваем значение old:=new и вводим новое – new;
  4. в зависимости от флага выводим результат.

Задача 10.

Даны натуральное n и последовательность веществен-ных чисел a1, a2,…, an. Сколько отрицательных чисел в начале по-следовательности (до первого неотрицательного)?

Переменные:

k – счетчик;

i – переменная цикла;

n – количество членов последовательности;

a – очередной член последовательности;

p – признак отрицательного числа в начале последователь-ности.

Алгоритм решения задачи:

  1. вводим длину последовательности, задаем начальное значение счетчика k;
  2. устанавливаем признак отрицательного цисла p=true;
  3. в цикле вводим очередной член последовательности;
  4. если это отрицательное число и до этого неотрицательных чисел не было, то увеличиваем значение счетчика на единицу;
  5. в противном случае, если член последовательности неот-рицателен, то полагаем p=false;
  6. в зависимости от k выводим результат.

Задача 11.

Дан прямоугольный бильярдный стол со сторонами А и В, где А, В – натуральные числа (бильярд Льюиса Кэролла). Из угловой лузы вылетает шар под углом 45 градусов к боковым стенкам, ударяется о борт, отскакивает, ударяется еще раз и т.д., пока не вылетит через одну из угловых луз. Рассчитать ко-личество отрезков в ломаной траектории шара. Считать угол падения равным углу отражения.

Данная задача решается с помощью стандартных функций выделения целой части от деления y на x (y div x) и выделения остатка y mod x. При прохождении шаром прямоугольного стола и отражении его от боковых сторон происходит увеличение числа отрезков траектории на два, а обратный путь вычисляется как y:=a–x+y mod x, где y – обратный путь для шара, a – длинная сторона стола, x – короткая сторона стола.

Переменные:

в функции bill:

x, y – два натуральных числа (формальные параметры);

k – вспомогательная переменная (локальная переменная);

a – длинная сторона стола (глобальная переменная);

в основной программе:

a, b – два натуральных числа (глобальные переменные).

Алгоритм решения задачи:

  1. создаем описание функции bill;
  2. вводим два натуральных числа a и b (не кратные друг другу);
  3. вызываем функцию bill для определения количества от-резков;
  4. завершаем работу программы.

Задача 12.

Пусть процедура maxmin(x,y) присваивает параметру x большее из вещественных чисел x и y, а параметру y – меньшее. Описать данную процедуру и использовать ее для перераспреде-ления значений вещественных переменных a, b и c так, чтобы стало a > = b > = c.

Задача 13.

Если среди чисел sin(x n) (где степень n = 1, 2, … ,30) есть хотя бы одно отрицательное число, то логической переменной t присво-ить значение true, а иначе – значение false.

Задача 14.

Определить k – количество трехзначных натуральных чисел, сумма цифр которых равна n ( 1 < n < 27 ). Операции деления ( /, div и mod) не использовать.