Как решать задачи на цикл

Как решать задачи на цикл thumbnail

Решенные задачи Pascal: операторы цикла

Pascal операторы цикла – Repeat

Repeat 1: Даны положительные числа A и B (A>B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15var a,b,temp,c:integer; flag: boolean; begin writeln(‘A=’); readln(a); writeln(‘B=’); readln(b); temp:=a; repeat temp:=temp-b; inc(c); until temp-b>=0; writeln(‘result: ‘,c); end.

Pascal операторы цикла – While

While 1: Определите значение переменной P после выполнения следующего фрагмента программы:

1 2 3 4 5P:=1; i:=3; while i <= 9 do begin P := P * (i div 3); i := i + 1; end;

Варианты:

1) 1

2) 3

3) 9

4) 24

Проверить:

While 2: Определите значение переменной S после выполнения следующего фрагмента программы:

1 2 3 4 5S:=0; i:=7; while i > 1 do begin S := S + i div 2; i := i – 1; end;

Варианты:

1) S = 0

2) S = 7

3) S = 12

4) S = 24

Проверить:

While 3: Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.

Решение данного задания смотрите в видео уроке по Паскалю:

While 4: Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE, если нет – вывести FALSE.

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12 13 14var number:integer; flag: boolean; begin writeln(‘введите целое число (number>0) number=’); readln(number); flag:=false; while (number div 10)>0 do begin if (number mod 10) = 2 then flag:=true; number:=number div 10; end; writeln(flag); end.

While 5:

Дано целое число N (>1). Найти наибольшее целое число K, при котором выполняется неравенство 3K<N

* Из задачника М. Э. Абрамян (While10)

Предлагаем посмотреть разбор задачи на видео:

While 6:

Дано число A (>1). Вывести наибольшее из целых чисел K, для которых сумма 1+1/2+…+1/K будет меньше A, и саму эту сумму

* Из задачника М. Э. Абрамян (While14)

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15var Temp:Real; A,K :Integer; begin Write(‘Введите A: ‘); Readln(A); K:=0; Temp:=0; while Temp<=A do begin inc(K,1); Temp:=Temp+1/K; end; Writeln(K-1,’ ‘,Temp-1/K); end.

While 7:

Дано целое число K и набор ненулевых целых чисел; признак его завершения – число 0. Вывести количество чисел в наборе, меньших K

* Из задачника М. Э. Абрамян (Series14)

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17var i,R,K:Longint; begin write(‘Введите K : ‘); readln(K); R:=1; i:=0; while(R<>0) do begin write(‘Введите число из набора: ‘); Readln(R); if R<K then i:=i+1; end; i:=i-1; Writeln(i); readln; end.

While 8:

Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P – вещественное, 0<P<50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).

* Из задачника М. Э. Абрамян (While16)

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17var P, S, D:Real; K :Integer; begin Write(‘Введите процент: ‘); Readln(P); K:=1; D:=10; S:=10; while S<=200 do begin inc(K,1); D:=D+D*P/100; S:=S+D; end; Writeln(K,’ ‘,S); end.

Pascal операторы цикла – For

For 1: Дано вещественное число – цена 1 кг конфет. Вывести стоимость 0.1, 0.2, …, 1 кг конфет.

* Из задачника М. Э. Абрамян

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12var c,m:real; i:integer; begin writeln(‘Цена?’); readln(c); m:=0.1; for i := 1 to 10 do begin writeln(‘ price of ‘,m, ‘ kg = ‘,c*m); m:=m+0.1; end; end.

For 2: Даны два целых числа A и B ( A<B ). Вывести в порядке убывания все целые числа, расположенные между A и B (не включая числа A и B), а также количество N этих чисел.

* Из задачника М. Э. Абрамян

Проверить:

1 2 3 4 5 6 7 8 9 10 11var a, b, i: integer; begin writeln(‘A:’); readln(a); writeln(‘B:’); readln(b); for i:= b-1 downto a+1 do write(i:3 ); writeln; writeln(‘kolvo: ‘,b-a-1); end.

For 3:

Дано целое число N>0. Найти сумму

* Из задачника М. Э. Абрамян (For11)

Проверить:

1 2 3 4 5 6 7 8 9var N, Rez,i :Integer; begin Write(‘Введите N: ‘); Readln(N); rez:=0; For i:=0 to N do Rez:=Rez+sqr(N+i); Writeln(Rez); end.

Сейчас предлагаем решить сложную олимпиадную задачу на Паскале:

Пять делителей: Найти сумму всех чисел от 1 до заданного n, имеющих ровно пять делителей. Единица и само число входят в число его делителей

Проверить:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18var c,n,s,k,i:integer; begin c:=0; s:=0; readln(n); for i:=2 to n do begin k:=i; while k>0 do begin if i mod k = 0 then c:=c+1; k:=k-1; end; if c= 5 then s:=s+i; c:=0; end; writeln(s); end.

Источник

Данная статья:

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего “Самоучителя по Java”

Ниже даётся детальное объяснение простых задач в помощь тем, кто ранее не программировал и только делает свои первые шаги в программировании. Изучив их, Вам будет легче перейти к более сложным задачам – уровень сложности 2.

Задача №1

Необходимо вывести на экран числа от 1 до 5. На экране должно быть:

1 2 3 4 5

Решение:

class Test {

public ic void main(String[] args) {

for (int i=1; i <= 5; i++) {

System.out. (i + ” “);

}

}

}

Комментарии к задаче:

Как видно из условия, числа увеличиваются от 1 до 5 с шагом 1. Есть определенная закономерность, не так ли? А значит, необходимо использовать цикл. Осталось только понять какой именно цикл нужно использовать? Мы точно знаем, что числа будут увеличиваться от 1 до 5. А раз мы точно знаем сколько раз будет повторяться цикл, можем использовать цикл for.

Читайте также:  Цикл рассказов темные аллеи сочинение

Пишем строчку с конструкцией цикла for:

for (int i=1; i <= 5; i++) {

  • int i = 1; – это начальное значение переменной
  • i<=5; – это условие, при котором будет выполняться цикл
  • i++ – это шаг, с которым будет выполняться цикл. В данном случае мы использовали инкремент, а значит переменная будет увеличиваться на 1. То есть с 1 до 2, с 2 до 3, с 3 до 4, с 4 до 5.

А чтобы после каждого шага кода выводить новое значение переменной, мы написали вот эту строчку:

System.out. (i + ” “);

Поскольку нам необходимо вывести числа строчкой: 1 2 3 4 5 мы используем System.out. ()

Если бы мы использовали System.out.ln(); числа бы были выведены на экран вот так:

1

2

3

4

5

Обязательно обращайте внимание на то, чтобы количество скобок открывающих { и закрывающих } совпадало. В нашем случае 3 открывающие и 3 закрывающие скобки.

Задача №2

Необходимо вывести на экран числа от 5 до 1. На экране должно быть:

5 4 3 2 1

Решение:

class Test {

public ic void main(String[] args) {

for (int i=5; i>=1; i–) {

System.out. (i + ” “);

}

}

}

Комментарии к задаче:

Как видно из условия, числа уменьшаются от 5 до 1 с шагом 1. Есть определенная закономерность, не так ли? А значит, необходимо использовать цикл. Вопрос какой? Мы точно знаем, что числа будут уменьшаться от 5 до 1. А раз точно знаем сколько раз будет повторяться цикл, можем использовать цикл for.

Пишем строчку с конструкцией цикла for:

for (int i=5; i>=1; i–) {

  • int i = 5; – это начальное значение переменной
  • i >=1; – это условие, при котором будет выполняться цикл
  • i- – декремент, то есть уменьшение переменной на 1. С 5 до 4, с 4 до 3, с 3 до 2, с 1 до 1

А с помощью этой строчки выводим на консоль значения переменной

System.out. (i + ” “);

Мы используем System.out. (); поскольку нам необходимо вывести числа строчкой: 5 4 3 2 1

Если бы мы использовали System.out.ln(); числа бы были выведены на экран вот так:

5

4

3

2

1

И снова напоминаем, обязательно обращайте внимание на то, чтобы количество скобок открывающих { и закрывающих } совпадало. В нашем случае снова 3 открывающие и 3 закрывающие скобки.

Задача №3

Необходимо вывести на экран таблицу умножения на 3:

3*1=3

3*2=6

3*3=9

3*4=12

3*5=15

3*6=18

3*7=21

3*8=24

3*9=27

3*10=30

Решение:

class Test {

public ic void main(String[] args) {

for (int i=1; i<=10; i++) {

System.out.ln (“3*” + i + “=” + 3*i);

}

}

}

Комментарии к задаче:

Как видно из условия, мы 3 умножаем сначала на 1, потом на 2, потом на 3 и так до 10. Не кажется ли Вам, что необходимо применить цикл? Правильно, нужен цикл. Осталось понять какой именно цикл. Раз мы точно знаем сколько будет повторений – от 1 до 10 – применяем цикл for.

Пишем строчку с конструкцией цикла for:

  • int i = 1; – это начальное значение переменной
  • i <= 10; – это условие, при котором будет выполняться цикл
  • i++ инкремент, то есть увеличение переменной на 1. С 1 до 2, с 2 до 3, с 3 до 4 и т.д.

Разберем вот эту строчку с помощью которой мы выводим значения на консоль

System.out.ln (“3*” + i + “=” + 3*i);

Посмотрим на первые 3 строчки задания:

3*1=3

3*2=6

3*3=9

Как видно, есть:

  • текстовая часть: “3*” и “=”
  • алгоритмическая часть: будет подставлять значения за счет цикла for – это все остальные значения.

Поэтому в System.out.ln() всю текстовую часть заключаем в кавычки. И получаем: System.out.ln (“3*”+ i + “=” + 3*i);

Задача №4

Напишите программу, где пользователь вводит любое целое положительное число. А программа суммирует все числа от 1 до введенного пользователем числа.

Например:

  • если пользователь введет число 3. Программа должна посчитать сумму чисел от 1 до 3, то есть 1+2+3 и выдать ответ 6.
  • если пользователь введет число 5. Программа должна посчитать сумму чисел от 1 до 5, то есть 1+2+3+4+5 и выдать ответ 15.

Думаю, суть задачи Вы уже поняли – переходим к ее решению.

Решение:

import java.util.Scanner;

class Test {

public ic void main(String[] args) {

System.out.(“Введите любое целое положительное число: “);

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int sum = 0;

for (int i=1; i<= n; i++){

sum = sum + i;

}

System.out.ln (sum);

}

}

Комментарии к задаче:

Сначала мы должны предложить пользователю ввести любое целое положительное число. Это мы делаем с помощью этой строчки:

System.out.(“Введите любое целое положительное число: “);

Чтобы считать с консоли введенное пользователем число, нам нужен сканер. Поэтому мы выполняем 3 шага.

Шаг №1 – подключаем сканер из библиотеки java.util с помощью этой строчки

import java.util.Scanner;

Шаг №2 – объявляем сканер

Scanner sc = new Scanner(System.in);

Шаг №3 – считываем с консоли введённое целое число. Для этого используем метод nextInt ()

В условиях задачи сказано, что числа будут суммироваться от 1 до введённого пользователем числа. Не кажется ли Вам, что это цикл? Да, конечно же это цикл. Причем мы заранее знаем сколько раз будут суммироваться числа: от 1 до n, где n – введённое пользователем число. А значит нам надо использовать цикл for.

Пишем строчку с конструкцией цикла for:

for (int i=1; i<= n; i++)

По условию задачи, нам надо суммировать числа от 1 до n. Для этого перед циклом мы объявляем переменную int sum и присваиваем ей значение 0:

Читайте также:  Что такое начало менструационного цикла

В переменную sum будут суммироваться числа с помощью цикла for

int sum = 0;

for (int i=1; i<= n; i++){

sum = sum + i;

}

Далее с помощью этой строчки выводим результат суммирования на консоль

System.out.ln (sum);

Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля.

По всем вопросам звоните:

+38 050 205 77 99

+38 098 205 77 99

Или читайте информацию по нашим курсам Java c нуля у нас на сайте.

Источник

Цели урока:

  1. Рассмотреть решение задачи с использованием различных видов циклов.
  2. Сформировать умение решать задачи с использованием циклов.
  3. Способствовать развитию таких мыслительных операций, как анализ, синтез, обобщение.
  4. Развитие познавательного интереса.

План урока:

  1. Постановка цели урока.
  2. Актуализация знаний и умений учащихся.
  3. решение задач.
  4. Домашняя работа.
  5. Подведение итогов урока.

Ход урока

I. Постановка цели урока.

Освоив, операторы присваивания и научившись пользоваться условным оператором IF, теоретически можно написать любую программу. Но в нашей повседневной жизни мы очень часто встречаемся с процессами, которые повторяются во времени несколько раз. Например: прорастание растения из семечки, смена времён года, смена времени суток, покраска забора, укладка кирпича и т.д. Гораздо удобнее в этих случаях использовать циклы. Циклы позволяют существенно упростить алгоритм и текст программы, сделать программу изящной, гибкой, более привлекательной. Сегодня на уроке мы будем решать такие задачи и убедимся в этом сами.

II. Актуализация знаний и умений учащихся.

Но прежде чем мы перейдём к решению задач, давайте вспомним с вами, какие циклы вы знаете?

В чём отличительная черта цикла While?

В чём отличительная черта цикла Repeat?

В чём отличительная черта цикла с параметром?

Ответы учащихся сопровождаются демонстрацией слайдов №№ 2-8 презентации к уроку см. Приложение.

III. Решение задач.

Задача:

Гражданин 1 марта открыл счёт в банке, вложив 1000 рублей. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить:

Сумму вклада через один, два, …, двенадцать месяцев.

Текст задачи выводится на экран слайд презентации № 9.

1. Анализ условия:

  • Что нам известно?
  • Что надо найти?
  • Сколько переменных используется в задаче?
  • Какие переменные мы будем вводить, а какие рассчитывать?
  • К какому типу относятся переменные вводимые с клавиатуры?
  • Если эти переменные относятся к вещественному типу, то какой результат мы получим?
  • Как мы обозначим переменные?

Проанализировав условие данной задачи, мы можем записать описательную часть программы на языке Pascal.

Слайд презентации № 10.

2. Построение математической модели решения:

Первоначальный вклад а0=1000

1 месяц: а1=а0+а0*0,02

2 месяц: а2=а1+а1*0,02

—————————-

10 месяц: а10=а9+а9*0,02

Общий случай: an=an-1+an-1*0,02

Слайд презентации № 11.

3. Составление алгоритма решения:

Слайд презентации № 12.

4. Запись программы:

Program vklad;

Var i: integer;

a: real;

Begin Writeln (‘введите значение первоначального вклада’);

Readln (а);

For i:=1 to 12 do

begin a:= a + a*0,02;

writeln (a); end;

end.

Слайд презентации № 13.

А теперь запишите данную программу с помощью цикла ДО или цикла ПОКА кому как удобнее.

Цикл до:

Program vklad;/

Var i: integer;

a: real;

Begin Writeln (‘введите значение первоначального вклада’);

Readln (а);

i:=1;

repeat

a:= a+a*0,02;

writeln (a);

i:=i+1;

until i>12;

end.

Цикл пока:

Program vklad;

Var i: integer;

a: real;

Begin Writeln (‘введите значение первоначального вклада’);

Readln (а);

i:=1;

while i<=12 do

begin a:= a+a*0,02;

writeln (a);

i:=i+1; end;

end.

Слайд презентации № 14.

IV. Домашняя работа.

Решите задачу, используя цикл на ваше усмотрение.

Одноклеточная амёба каждые 3 часа делится на 2 клетки. Определить, сколько будет клеток через 3, 6, 9, …, 24 часа.

Слайд презентации № 15.

Источник

Простейшие алгоритмы

№1. Сумма вводимых целых чисел

begin var n := ReadInteger(‘Введите число слагаемых:’); var s := 0.0; for var i:=1 to n do begin var x := ReadReal($’Введите слагаемое №{i}:’); s += x; end; ln($’Сумма равна {s}’); end.

В алгоритме используются интерполированные строки вида $’Сумма равна {s}’. Они начинаются с $. Выражение в фигурных скобках, расположенное в такой строке, заменяется на его значение.

№2. Произведение целых чисел

begin var n := ReadInteger(‘Введите число множителей: ‘); var p := 1.0; for var i:=1 to n do begin var x := ReadReal(‘Введите множитель: ‘); p *= x; end; ln($’Произведение равно {p}’); end.

№3. Двойной факториал n!!=n*(n-2)*(n-4)*…*2 (или 1)

begin var x := ReadInteger(‘Введите x: ‘); var p := 1; while x>=2 do begin p *= x; x -= 2; end; ln($’Двойной факториал равен {p}’); end.

№4. Сколько нечетных среди n введенных

begin var n := ReadInteger(‘Введите n: ‘); var c := 0; for var i:=1 to n do begin var x := ReadInteger(‘Введите целое число: ‘); if x mod 2 <> 0 then c += 1; end; ln($’Количество нечетных равно {c}’); end.

№5. Защита от неверного ввода

begin var x: real; repeat x := ReadReal(‘Введите x>0: ‘); if x<=0 then ln(‘Неверный ввод’); until x>0; end.

№6. Табулирование функции f(x) на отрезке в точках, разбивающих отрезок на N частей

Дан отрезок [a,b]

f(x: real) := sin(x)*x; begin var N := ReadInteger(‘Введите N: ‘); Assert(N>0); var (a,b) := ReadReal2(‘Введите a и b: ‘); var h := (b-a)/N; var x := a; loop N+1 do begin Writeln(x:5:2,f(x):10:4); x += h; end; end.

№6a. Решение, использующее while. Погрешность округления и вычислительная погрешность

f(x: real): real:= sin(x)*x; begin var N:=ReadInteger(‘Введите N: ‘); Assert(N>0); var (a,b):=ReadReal2(‘Введите a и b: ‘); var h := (b-a)/N; var x := a; while x <= b+h/2 do begin writeln(x:5:2,f(x):10:4); x += h; end; end.

Читайте также:  Выполнение оператора цикла c

Рекуррентные соотношения

№7. Вывод 10 первых степеней двойки

begin var x := 2; for var i := 1 to 10 do begin writeln(i:2,x:5); x *= 2; end; end.

№8. Вывод всех двухзначных чисел, кратных 5

begin var x := 10; while x < 100 do begin writeln(x:3); x += 5; end; end.

№9. Вывод n первых чисел Фибоначчи

begin var n := ReadInteger(‘Введите целое число n (n > 1): ‘); Assert(n>1); var (a,b) := (1,1); (a,b); loop n-2 do begin (a,b):=(b,a+b); (b); end; end.

В алгоритме используются кортежи. В момент переприсваивания в цикле создаются буферные переменные, что позволяет нам избежать их объявления вручную.

№10. Найти НОД(A,B), используя алгоритм Евклида:

НОД(A,B) = НОД(B,A mod B); НОД(A,0) = A

begin var (a,b):=ReadInteger2(‘Введите целые числа A и B: ‘); while b<>0 do (A,B):=(B,A mod B); ln($’НОД(A,B) = {A}’); end.

№11. Найти сумму цифр целого числа m

begin var m := ReadInteger(‘Введите целое число m: ‘); var (s,m1) := (0,abs(m)); while m1 > 0 do begin s += m1 mod 10; m1 := m1 div 10; end; ln($’Сумма цифр числа {m} равна {s}’); end.

Для работы с отрицательными числами в алгоритме используется стандартная функция abs(x) возвращающая модуль от x.

Максимумы и минимумы

№12. Найти max из введенных чисел

begin var n := ReadInteger(‘Введите целое число n (n>0): ‘); assert(n>0); var x := ReadReal(‘Введите 1 число: ‘); var max := x; for var i := 2 to n do begin x := ReadReal($’Введите {i} число: ‘); if max < x then max := x; end; ln($’Максимальное из введенных чисел: {max}’); end.

№12a. Найти min, удовлетворяющее условию p(x)

// Условие взятое как пример (Если число положительное, то условие p(x) возвращает true, иначе false) p(x: real): boolean:=x > 0; begin var n := ReadInteger(‘Введите целое число n (n>0): ‘); assert(n>0); var min := real.MaxValue; for var i := 1 to n do begin var x := ReadReal($’Введите {i} число: ‘); if (x < min) and p(x) then min := x; end; if min = real.MaxValue then ln(‘Нет чисел, удовлетворяющих условию’) else ln($’Минимальное из введенных чисел, удовлетворяющее условию: {min}’); end.

Суммирование рядов (конечных и бесконечных)

№13. Вычислить Σ(i=1..n) a^i/i!

begin var a:=ReadReal(‘Введите a: ‘); var n:=ReadInteger(‘Введите n (n>0): ‘); assert(n>0); var x := a; var s := x; for var i := 2 to n do begin x *= a / i; s += x; end; ln($’Сумма = {s}’); end.

№13a. Вычислить Σ(i=1..∞) (-1)^i * a^i/i!

begin var a:=ReadReal(‘Введите a (0 < a < 1): ‘); assert((a>0) and (a<1)); var eps := 0.0001; var i := 1; var s := 0.0; var y := -a; repeat s += y / i; i += 1; y *= -a; until abs(y/i) < eps; ln($’Сумма = {s}’); end.

Поиск значения

№14. Есть ли среди введенных число k?

var n,k: integer; begin write(‘Введите целые числа n (n>0) и k: ‘); readln(n,k); assert(n>0); var Exists := false; for var i := 1 to n do begin write(‘Введите ‘, i, ‘ целое число: ‘); var x := ReadInteger; if x = k then begin Exists := true; break; end; end; if Exists then writeln(‘Число ‘, k, ‘ было введено’) else writeln(‘Число ‘, k, ‘ не было введено’); end.

№14b. Есть ли среди введенных число k? (то же с использованием while)

var n,k: integer; begin write(‘Введите целые числа n (n>0) и k: ‘); readln(n,k); assert(n>0); var Exists := false; var i := 1; while (i <= n) and not Exists do begin write(‘Введите ‘, i, ‘ целое число: ‘); var x := ReadInteger; i += 1; if x = k then Exists := true; end; if Exists then writeln(‘Число ‘, k, ‘ было введено’) else writeln(‘Число ‘, k, ‘ не было введено’); end.

№15. Является ли число N>1 простым?

begin write(‘Введите целое число N (N>1): ‘); var N := ReadInteger; assert(N>1); var IsPrime := True; for var i := 2 to round(sqrt(N)) do if N mod i = 0 then begin IsPrime := False; break; end; if IsPrime then writeln(‘Число ‘, N, ‘ является простым’) else writeln(‘Число ‘, N, ‘ является составным’); end.

Другие алгоритмы

№16. Разложение числа на простые множители

begin var x := ReadInteger(‘Введите целое число x (x>1): ‘); assert(x>1); var i := 2; write(x, ‘ = 1’); repeat if x mod i = 0 then begin (‘*’, i); x := x div i; end else i += 1; until x = 1; end.

№17. Вычисление значения многочлена в точке x по схеме Горнера

var x,a: real; n: integer; begin write(‘Введите x: ‘); readln(x); write(‘Введите степень многочлена n (n>0): ‘); readln(n); assert(n>=0); write(‘Введите коэффициенты: ‘); readln(a); var s := a; for var i := 1 to n do begin write(‘Введите a_{‘, i+1,’}: ‘); readln(a); s := s*x + a; end; writeln(‘Значение многочлена p(x) = a_{1}*x^n + a_{2}*x^(n-1) + … + a_{n}*x + a_{n+1} в точке x = ‘, x, ‘ равно ‘, s); end.

№18. Дана непрерывная на отрезке функция f(x), имеющая на отрезке ровно один корень. Найти его методом половинного деления

Дан отрезок [a,b] (f(a)*f(b)<=0)

// В качестве примера взяты eps = 0.0001 и функция f(x) = sin(x) const eps = 0.0001; const f = sin; var a,b: real; begin write(‘Введите числа a и b (a<b): ‘); readln(a,b); assert(a<b); var fa := f(a); var fb := f(b); assert(fb*fa<0); while (b-a) > eps do begin var x := (b+a)/2; var fx := f(x); if fa*fx <= 0 then b := x; else begin a := x; fa := fx; end; end; writeln(‘Корень функции на [a,b] равен ‘,(b+a)/2); end.

© Буцев Виктор, Белоусько Тихон, Зуев Семен, Гончаров Владислав, Батраков Михаил, Гаджиев Казанфар, Пак Владислав

Источник