Главная » Статьи » Мои статьи

Задачи с решением и пояснениями

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).
var y, c, i : real;
begin
writeln('Полученное значение расчета формулы ',
'y=sin1+sin1.1+sin1.2+ ... +sin2 = ');
y:=0;
i:=1;
while i <=2 do
Begin
c := sin(i);
y:=y+c;
i:=i+0.1;
end;
writeln(y);
end.

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

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

Переменные:

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

  1. Обнуляем начальное значение переменной y (строка 6), в которой будем накапливать сумму.
  2. Организуем цикл для определения суммы (параметр дан-ного цикла должен измениться от 0 до 10) .
  3. В данном цикле определяем очередное слагаемое по фор-муле и добавляем это слагаемое в сумму (строка 7).
  4. Выводим результат на экран (строка 8).
var y : real;
i : integer;
Begin
writeln('Полученное значение расчета формулы ',
'y=sin1+sin1.1+sin1.2+ ... +sin2 = ');
y:=0;
for i:=0 to 10 do y:=y+sin(1+0.1*i);
writeln(y);
end.

Задача 2.

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

var y : real;
 i, n : integer;
begin
writeln('Введите количество чисел');
readln(n);
y:=1;
for i:=1 to n do y:=y*(2*i–1);
writeln('Полученное значение y= ', y)
end.

Задача 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).
var i, n, j : integer; f: boolean;
begin
repeat
write('Введите натуральное число N= ');
readln(n);
until n>0;
write (N:6, '=1');
f:=false; j:=n;
for i:=2 to n div 2 do
if j mod i = 0 then
begin
f:=true;
{цикл определят, сколько таких множителей i в нашем числе n}
while j mod i=0 do
begin
write('*', i);
j:=j div i;
end;
end;
{f определяет, были ли найдены простые множители, которые больше единицы}
if not f then writeln('*', n);
writeln
end.

Задача 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. выводим результат.
var n, i : integer;
a, S : real;
p: boolean;
begin
repeat
write('Введите длину последовательности n=');
readln(n);
until n>0;
p:= true;
S:=0;
for i:=1 to n do
begin
write('Введите a=');
readln(a);
if p then S:=S+a else S:=S–a;
p:= not p
end;
writeln('Знакочередующая сумма чисел S= ', S);
end.

Задача 5.

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

Переменные:

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

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

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

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

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

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

  1. вводим количество членов ряда n и переменную X;
  2. в цикле порождаем очередной член ряда и прибавляем его к сумме y;
  3. выводим результат.
var x, y, z : real;
n, i : integer;
begin
repeat
writeln('Введите переменную ряда x, |x|<1, x=');
readln(x);
write('Введите число членов ряда n=');
readln(n);
until (abs(x)<1) and (n>0);
y:=1; z:=1;
for i:=2 to n do
begin
z:=z*x;
y:=y+z/i;
end;
writeln('Сумма первых n членов ряда y =', y);
end.

Задача 6.

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

Переменные:

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

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

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

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

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

  1. вводим длину последовательности n и устанавливаем на-чальное значение sum;
  2. последовательно считываем числа и, если число отрица-тельное, то прибавляем его к сумме sum;
  3. в зависимости от значения sum выводим результат.
var n, x, sum, i : integer;
begin
repeat
write('Введите длину последовательности n=');
readln(n);
until n>0;
sum:=0;
for i:=1 to n do
begin
write('Введите x='); readln(x);
if x<0 then sum:=sum+x;
end;
if sum=0 then writeln('Отрицательных чисел нет')
else writeln('Сумма отрицательных чисел sum= ', sum);
end.

 

Категория: Мои статьи | Добавил: kuchma-anna (27.01.2015)
Просмотров: 197 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar