Составить блок схему алгоритма и программу для вычисления функции

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

v Области применения оператора цикла:

Ø оператор for применяется, если требуется выполнить тело цикла заданное число раз;

Ø оператор repeat используют, когда цикл требуется обязательно выполнить хотя бы один раз, например, при анализе корректности ввода данных;

Ø оператор while удобнее во всех остальных случаях.

v Выражение, определяющее условие продолжения циклов while и repeat, вычисляется в соответствии с приоритетами операций и должно иметь тип Boolean.

v Для принудительного перехода к следующей итерации цикла используется процедура continue, для преждевременного выхода из цикла – процедура break.

v Чтобы избежать ошибок при программировании циклов, рекомендуется:

ü заключать в блок тело циклов while и for, если в них требуется выполнить более одного оператора;

Алгоритм программирования. Как составить блок схему?

ü проверять, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения, а также возможно ли выполнение других операторов;

ü проверять, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;

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

Приложение № 1.

ПЕЧАТЬ ТАБЛИЦЫ ЗНАЧЕНИЙ ФУНКЦИИ

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

Исходными данными являются начальное значение аргумента xn, конечное значение аргумента xk и шаг изменения аргумента dx. Все величины – вещественные и могут принимать любые значения на числовой оси. Результатом работы программы должна быть таблица, состоящая из двух столбцов – значений аргумента и соответствующих им значений функции. Таблица должна выглядеть следующим образом:

X Y
-4.00 0.76
-3.00 -0.14
-2.00 -0.91
-1.00 -0.84
0.00 0.00
1.00 0.84
2.00 0.91
3.00 0.14
4.00 -0.76

Опишем алгоритм в словесной форме:

1. Ввести исходные данные: xn, xk, dx.

2. Вывести заголовок таблицы.

3. Принять xn в качестве первого значения аргумента.

4. Вычислить значение функции.

5. Вывести строку таблицы (текущее значение аргумента и соответствующее ему значение функции).

6. Перейти к следующему значению аргумента.

7. Если оно не превышает конечное значение, повторить шаги 4 – 6, иначе закончить.

Алгоритм в виде блок схемы

Шаги 4 – 6 повторяются многократно, поэтому для их выполнения надо организовать цикл. На каждом проходе цикла требуется хранить одно значение аргумента и одно значение функции, поэтому для них достаточно завести по одной переменной вещественного типа (x и y). Переменная x будет содержать текущее значение аргумента, а y – соответствующее ему значение функции:

Program TABL;

Var xn, xk, dx, x, y: real;

Begin

Writeln(‘Введите xn, xk, dx’);

Writeln(‘|’, x: 9: 2, ‘ |’, y: 9: 2, ‘ |’);

End.

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

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

ü присвоено ли ему начальное значение;

ü изменяется ли он на каждой итерации цикла;

ü верно ли записано условие продолжения цикла.

Приложение № 2.

ВЫЧИСЛЕНИЕ СУММЫ РЯДА

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

Этот ряд сходится на всей числовой оси. Для достижения заданной точности требуется суммировать члены ряда до тех пор, пока абсолютная величина очередного члена не станет меньше или равна . Запишем в общем виде формулу для вычисления n-го члена ряда:

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

Легко заметить, что (n+1)-й член ряда вычисляется после n-го, поэтому программа получится более простой и эффективной, если находить член ряда не с «нуля», а умножением предыдущего члена на некоторую величину. Найдем эту величину. Для этого запишем формулу для (n+1)-го члена ряда, подставив в предыдущее выражение (n+1) вместо n:

Теперь найдем выражение, на которое надо будет умножить Cn, чтобы получить Cn+1:

Запишем алгоритм вычисления суммы в словесной форме:

1. Ввести исходные данные (аргумент и точность).

2. Задать начальные значения номеру члена ряда, первому члену ряда и сумме ряда.

3. Организовать цикл:

1) вычислить очередной член ряда;

2) добавить его к сумме ряда;

3) перейти к следующему члену ряда;

4) проверить, достигнута ли точность вычислений.

4. Вывести значение функции.

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

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

Program SINUS;

Const MaxIter = 500;

Var x, eps, y, c: double;

n: integer;

done: boolean;

Begin

Writeln(‘Введите аргумент и точность: ’);

While abs( c ) > eps do

c: =-c * sqr(x) / 2 / n / (2*n+1);

Done: = false; break

if done then Writeln(‘Аргумент: ‘, x: 10: 6,

‘Значение функции: ’, y: 10: 6,

‘Вычислено с точностью ‘, eps: 8: 6, ‘за’, n, ‘итераций’);

End.

Первый член ряда равен x, поэтому, чтобы при первом проходе цикла значение второго члена вычислялось правильно, начальное значение n должно быть равно 1. Максимально допустимое количество итераций удобно задать с помощью именованной константы. Для аварийного выхода из цикла применяется процедура break, которая обеспечивает переход к первому после цикла оператору. Поскольку выход в случае как аварийного, так и нормального завершения цикла происходит в одну и ту же точку программы, вводится булева переменная done, которая предотвращает печать значений функции после выхода из цикла, когда точность вычислений не достигнута. Создание подобных переменных-«флагов», принимающих значение «истина» в случае успешного окончания вычислений и «ложь» в противном случае, является распространенным приемом программирования.

Читайте также:
Слетели настройки всех программ

Приложение № 3.

КОЛИЧЕСТВО КВАДРАТОВ В ПРЯМОУГОЛЬНИКЕ

Дан прямоугольник. Написать программу, определяющую, на сколько квадратов можно его разрезать, если каждый раз отрезать квадрат максимально возможной площади. Все длины сторон должны быть натуральными числами.

Исходными данными являются два натуральных числа – длины сторон прямоугольника. Алгоритм решения задачи состоит в выборе большей стороны и определении, сколько раз в ней целиком поместится меньшая сторона. Для остатка большей стороны повторяется та же процедура. Цикл завершается, когда остаток становится равным нулю.

Program KVADRAT;

Var a, b, k, n, buf: integer;

Begin

Writeln(‘Введите стороны прямоугольника’);

buf: = a; a: = b; b: = buf

Writeln(k, ‘ квадратов ‘, b, ‘ x ‘, b);

Writeln(‘Всего квадратов: ‘, n);

End.

Приложение № 4.

Источник: lektsia.com

практика. Советберген Ерулан АЖ29-1 практика. Программирование линейных алгоритмов Арифметические выражения

Единственный в мире Музей Смайликов

Самая яркая достопримечательность Крыма

Скачать 124.49 Kb.

Л.Н. Гумилёв атындағы Еуразия ұлттық университеті | [Адрес организации]

15 Нұсқа

Советберген Ерулан

1

Программирование линейных алгоритмов

Арифметические выражения

  1. Средний уровень

import math

y = int(input(«y:»))
j = int(input(«j:»))

F = 2 * math.sin(0.354 * y + 1) / math.log(y + 2 * j)
print(«F:», F)

  1. Высокий уровень

m = int(input(«m:»))
y = int(input(«y:»))
N = (pow(m, 2) + 2.8 * m + 0.355) / (math.cos(2 * y) + 3.6)
print(«N:», N)

Программирование разветвляющихся алгоритмов

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

import math

  1. Высокий уровень

Почтовый автомат предлагает поздравительные открытки на три темы (1Новогодние, 2 — С Днем Рождения, 3 — С Днем Защитника Отечества) в трех вариантах (a, b, c) по цене 2 гривны. Ввести с клавиатуры номер темы , вариант, и купюру оплаты (5,10, 20 гривен). Выдать нужную открытку (сообщение, например: «Новогодние, вариант с», а также сдачу (купюрами 1,2,5,10) с виде сообщения, например, «2гр+1гр». Предусмотреть обработку неправильного номера или варианта.

d = 1: «Новогодние»,
2: «C Днем Рождения»,
3: «C Днем Защитника Отчества»
>
d2 = 1: «, вариант a.»,
2: «, вариант b.»,
3: «, вариант c.»
>
d3 = 1: «Сдача :2гр +1гр»,
2: «Сдача :5гр +2гр +1гр»,
3: «Сдача :10гр +5гр +2гр +1гр»
>
a = int(input(«»»Выберите тему:
1.Новогодние
2.C Днем Рождения
3.С Днем Защитника Отчества
«»»))
b = int(input(«»»Выберите вариант:
1. a
2. b
3. c
«»»))
c = int(input(«»»Выберите купюру оплаты:
1. 5гр
2. 10гр
3. 20гр
«»»))
print(d[a], d2[b], d3[c])

Программирование циклических алгоритмов

Оператор цикла с параметром

Задание: составить схему алгоритма и написать программу вычисления суммы (произведения) конечного ряда. При разработке программы предусмотреть пропуск слагаемых (множителей), равных нулю или бесконечности.

import math

k = int(input(«k:»))

while n != (k + 1):

s = (pow(-1, 2 * n) * (pow((pow(n, 2) — 9), 2))) / math.factorial(3 * n)

Операторы цикла с предусловием и постусловием

Задание: составить блок-схему алгоритма и программу согласно заданию.

Билет называют «счастливым», если в его номере сумма первых трех цифр равна сумме последних трех. Подсчитать число тех «счастливых» билетов, у которых сумма трех цифр равна 13. Номер билета может быть от 000000 до 999999 .

s = 0
for i in range(10):
for j in range(10):
for k in range(10):
for l in range(10):
for m in range(10):
for n in range(10):
if (i + j + k) == (l + m + n):
if i + j + k == 13:
s = s + 1
print(s)

9 . Высокий уровень

Задание: составить блок-схему алгоритма и программу согласно условию задачи.

Вычислить сумму чисел от 1 до N, возведенных в степень M. Возведение в степень оформить как многократное умножение .

Вычисление бесконечных сумм

Задание: составить блок-схему алгоритма и программу вычисления суммы n членов ряда согласно условию задачи.

n = int(input(«n:»))
x = int(input(«x:»))
S = 0
for i in range(1, n + 1):
s = pow(-1, i + 1) * pow(x, (2 * i) + 1) / (((2 * i) + 1) * ((2 * i) — 1))
S += s
print(S)

Табулирование функций

Задание: написать блок-схему и программу вычисления функции на заданном промежутке с шагом 0.2 и построить график этой функции

from math import e, cos, tan, sqrt
import matplotlib.pyplot as plt
import numpy as np
import math

fig, ax = plt.subplots()
x = np.linspace(-(math.pi / 2), math.pi * 2, 100)
print(x.any())
if x.any () > 4.5:
y = x — 2
elif 1 i:
d = math.fabs(s) — math.fabs(i)
else:
d = math.fabs(i) — math.fabs(s)
a.append(d)

indx = a.index(max(a))
print(«Индекс:», indx, «Значение:», mass[indx])

Дан массив вещественных чисел. Определить элемент массива (значение и индекс), который наиболее удален от заданного вещественного числа S.

14. Высокий уровень

Задание: составить схему алгоритма и программу решения задачи

import random

mass = [random.randint(0, 10) for i in range(5)]
mass_bin = []
for i in mass:
mass_bin.append(bin(i))
print(mass_bin)
new_mass = []
mass_bin.sort()
print(«Өсу реті бойынша :», mass_bin)
for i in mass_bin:
new_mass.append(int(i, base=2))
s = sum(new_mass) / len(new_mass)
print(«Орташа арифметикалық :», bin(int(s)))

Двухмерные массивы

Задание: написать блок-схему и программу согласно заданию.

Дан целочисленный массив В[1..5, 1..5]. Вычислить сумму элементов этого массива, расположенных выше левой диагонали.

import random

mass = []
for i in range(3):
mass.append([random.randint(1, 9) for j in range(3)])
print(*mass, sep=»n»)
s = 0
for i in range(len(mass)):
for j in range(len(mass) — 1 — i):
s += mass[i][j]
print(«Сумма:», s)

16. Высокий уровень.

Задание: написать блок-схему и программу согласно заданию.

Дано число n. Создайте массив int A[n][n], и заполните его по следующему правилу: числа на диагонали, идущей из правого верхнего в левый нижний угол равны 1; числа, стоящие выше этой диагонали, равны 0; числа, стоящие ниже этой диагонали, равны 2.

n = int(input(«n:»))
a = [[0] * n for i in range(n)]
for i in range(n):
a[i][n — i — 1] = 1
for i in range(n):
for j in range(n — i, n):
a[i][j] = 2
print(*a,sep=»n»)

Функции и библиотеки

Функции

Задание: написать блок-схему и программу согласно заданию.

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

import random

mass = [random.randint(0, 10) for i in range(3)]
print(*mass)

def mn(m):
mn = 999999
for i in m:
if mn > i:
mn = i
return mn

def mx(m):
mx = 0
for i in m:
if i > mx:
mx = i
return mx

print(«min:», mn(mass))
print(«max:», mx(mass))

18.Высокий уровень

Задание: написать блок-схему и программу согласно заданию. Следует заметить, что практически все задания этой подгруппы можно легко решить и без использования рекурсии. Данное обстоятельство связано с тем, что в заданиях рассматриваются действительно простейшие примеры рекурсии, легко сводимые к итерационным алгоритмам. Более того, в некоторых случаях использование рекурсии приводит к неэффективным алгоритмам (см, например, задания 4 и 5). Однако, именно на подобных примерах проще всего получить первоначальные навыки разработки рекурсивных алгоритмов.

Составить программу для нахождения числа, которое образуется из данного натурального числа при записи его цифр в обратном порядке. Например, для числа 1234 получаем результат 4321 .


n = input(«n:»)
print(n[::-1])

Библиотеки

Динамические структуры данных

Динамические массивы

Задание: написать блок-схему и программу согласно заданию. Все массивы в заданиях объявить как динамические.

Ввести в StringGrid массив из 13 вещественных чисел. Создать два новых массива – из положительных и отрицательных элементов исходного массива. Поменять местами максимальные элементы новых массивов.

mass = [round(random.uniform(-10, 10), 1) for i in range(13)]
new_mass1 = []
new_mass2 = []
for i in mass:
if i
mass = [«a», «1», «2», «3», «b», «c», ‘d’, «5»]
s = 0
new_s = []
for i in mass:
if i.isdigit():
s += 1
else:
new_s.append(s)
s = 0
print(max(new_s))

Читайте также:
Как выйти из программы ВК

27. Высокий уровень

Задание: написать программу согласно заданию.

В заданном массиве символов слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение .


mass = [«тевирП «, ‘! рим’]
for i in mass:
mass[mass.index(i)] = i[::-1]
print(*mass)

Строковый тип данных

Задание: написать программу согласно заданию.

В заданной строке удалить последний символ « » (пробел), который найдется в строке.

S = «Привет , мир !»
print(S)
S = S[:S.rfind(» «)] + S[S.rfind(» «)+1:]
print(S)

29. Высокий уровень

Задание: написать программу согласно заданию.

В заданной строке заменить каждый символ «!» числом, равным индексу этого символа в строке.

Структуры

Задание: написать программу согласно заданию с использованием структуры.

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

import datetime
from collections import namedtuple

Train = namedtuple(«Train», [«Num», «direction», «arrival_time», «departure_time», «distance», ])
n = int(input(«Ведите количество поездов»))
for i in range(n):
a = input(«Время прибытия n(ГГГГ.ММ.ДД)n»).split(«.»)
d = input(«Время отбытия :n(ГГГГ.ММ.ДД)n»).split(«.»)
b = []
for k in range(len(d)):
a[k] = int(a[k])
d[k] = int(d[k])
a = datetime.datetime(*tuple(a))
d = datetime.datetime(*tuple(d))

if (a — d).days > 1:
Train1 = Train(input(«№ поезда :»), input(«Направление:»), a, d,
int(input(«Расстояние :»)))
b.append(Train1)
for i in b:
print(f»»»

№ поезда — — — — — — — i.Num>
Направление — — — — — i.direction>
Время прибытия — — — — i.arrival_time>
Время отбытия — — — — i.departure_time>
Расстояние — — — — — i.distance>

31. Высокий уровень

Задание: написать программу согласно заданию с использованием структуры.

Описать структуру с именем GROUP, содержащую поля: Name – фамилия и инициалы, DAT – дата рождения (год, месяц, число), SES – успеваемость (массив из трех элементов). Написать программу, выполняющую:

— ввод с клавиатуры данных в массив GR5,состоящий из 10 структур типа GROUP;

— вывод на экран записей, упорядоченных по возрастанию поля SES;

-вывод списка студентов, возраст которых на 01.12.2010 года не превышает 20 лет; если таких студентов нет – выдать сообщение.

from random import randint
import datetime
from collections import namedtuple

n = int(input(«Ведите количество студентовЖ»))
a = []

Файлы

Текстовые файлы

Задание: создать текстовый файл в текстовом редакторе. Организовать просмотр содержимого файла и выполнения действий в соответствии с условием индивидуального задания. Обеспечить сохранение всех полученных результатов в новый файл.

Дан файл f, компоненты которого являются действительными числами. Найти последнюю компоненту файла.

import random

f = open(«for32», «w»)
n = 0
while n
import pickle
import datetime

File = open(«34file.bin», «wb»)
n = int(input(«Ведите количество сотрудников :»))
mass = []
for i in range(n):
tvstudio = «name»: input(«Фамилия:»),
«post»: input(«Должность:»),
«education»: input(«Образование:»),
«Data»: datetime.datetime(*tuple(list(map(int, input(«Дата приема на работу:»).split(«.»)))))
>
mass.append(tvstudio)
pickle.dump(mass, File)

File.close()
input_file = open(«34file.bin», «rb»)
mass = pickle.load(input_file)
for i in mass:
if i[«post»] == «инженер» and i[«education»] != «высший»:
print(f»»»
Фамилия —- i[«name»]>
Должность —- i[«post»]>
Образование —- i[«education»]>
Дата приема на работу: —-i[«Data»]>»»»
)

35.Средний уровень

Задание: представленные задания оформить в виде бинарного файла

Ввести в Memo или в StringGrid некоторое количество целых чисел в диапазоне 33 — 255 и записать их в бинарный файл. Переписать бинарный файл так, чтобы каждое значение, записанное в файле, было преобразовано в данные типа char, те в символьный тип данных. Распечатать содержимое файла до и после изменения данных в файле.

import pickle

from random import randint
File = open(«file.bin», «wb»)
mass = []
for i in range(10):
mass.append(randint(33,255))

print(*mass)
new_mass = []
for i in mass:
new_mass.append(chr(i))
pickle.dump(new_mass, File)
File.close()
File = open(«file.bin», «rb»)
m = pickle.load(File)
print(*m)
File.close()

Источник: topuch.com

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

Цель работы: приобретение навыков работы в интегрированной среде программирования TURBO PASCAL; получить навыки программирования алгоритмов циклической структуры, работы с одномерными массивами и реализации их на ЭВМ.

Ч А С Т Ь 1.

Цикл – это фрагмент программы, повторяемый многократно. В паскале три оператора цикла – while, repeat и for. В принципе, без них можно обойтись, поскольку любой цикл можно реализовать с помощью условного оператора if и оператора перехода goto, но операторы цикла гораздо удобнее и нагляднее. У каждого из них есть предпочтительная область применения.

Все циклы имеют схожую структуру (рис.1.). Операторы, ради многократного выполнения которых организуется цикл, называют телом цикла. Остальные операторы служат для управления процессом повторения вычислений: это начальные установки, проверка условия продолжения цикла и модификация параметров параметра цикла. Один проход цикла называется итерацией.

На этапе начальных установок (до входа в цикл) задаются значения переменных, которые в нем используются. Эти значения могут задаваться явно или неявно.

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации (для этого применяется процедура continue), так и цикла в целом (процедура break и оператор goto). Передавать управление извне цикла не рекомендуется, потому что при этом не выполнятся начальные установки. Иными словами, выйти из цикла можно в любой момент, а войти – только в начало.

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

ЗАДАНИЕ № 1.

Составить алгоритм и написать программу, которая вычислит и выведет на экран в виде таблицы значения функции, заданной графически (см. задание № 1 практикума №5), на интервале от xнач до xкон с шагом dx. Интервал и шаг задать таким образом, чтобы проверить все ветви программы. Таблицу снабдить заголовком. (Теоретический материал по данной теме изложен в лекциях № 6, 16).

ЗАДАНИЕ № 2.

Составить алгоритм и написать программу, которая вычисляет и выводит на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от xнач до xкон с шагом dx с точностью . Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. (Теоретический материал по данной теме изложен в лекциях № 6, 15).

Номер варианта З А Д А Н И Е
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

ЗАДАНИЕ № 3.

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

Номер варианта З А Д А Н И Е
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

После выполнения данного практикума студент должен знать:

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

v Области применения оператора цикла:

Ø оператор for применяется, если требуется выполнить тело цикла заданное число раз;

Ø оператор repeat используют, когда цикл требуется обязательно выполнить хотя бы один раз, например, при анализе корректности ввода данных;

Ø оператор while удобнее во всех остальных случаях.

v Выражение, определяющее условие продолжения циклов while и repeat, вычисляется в соответствии с приоритетами операций и должно иметь тип Boolean.

Читайте также:
Настройка частоты оперативной памяти программа

v Для принудительного перехода к следующей итерации цикла используется процедура continue, для преждевременного выхода из цикла – процедура break.

v Чтобы избежать ошибок при программировании циклов, рекомендуется:

ü заключать в блок тело циклов while и for, если в них требуется выполнить более одного оператора;

ü проверять, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения, а также возможно ли выполнение других операторов;

ü проверять, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;

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

Приложение № 1.

ПЕЧАТЬ ТАБЛИЦЫ ЗНАЧЕНИЙ ФУНКЦИИ

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

Исходными данными являются начальное значение аргумента xn, конечное значение аргумента xk и шаг изменения аргумента dx. Все величины – вещественные и могут принимать любые значения на числовой оси. Результатом работы программы должна быть таблица, состоящая из двух столбцов – значений аргумента и соответствующих им значений функции. Таблица должна выглядеть следующим образом:

X Y
-4.00 0.76
-3.00 -0.14
-2.00 -0.91
-1.00 -0.84
0.00 0.00
1.00 0.84
2.00 0.91
3.00 0.14
4.00 -0.76

Опишем алгоритм в словесной форме:

1. Ввести исходные данные: xn, xk, dx.

2. Вывести заголовок таблицы.

3. Принять xn в качестве первого значения аргумента.

4. Вычислить значение функции.

5. Вывести строку таблицы (текущее значение аргумента и соответствующее ему значение функции).

6. Перейти к следующему значению аргумента.

7. Если оно не превышает конечное значение, повторить шаги 4 – 6, иначе закончить.

Шаги 4 – 6 повторяются многократно, поэтому для их выполнения надо организовать цикл. На каждом проходе цикла требуется хранить одно значение аргумента и одно значение функции, поэтому для них достаточно завести по одной переменной вещественного типа (x и y). Переменная x будет содержать текущее значение аргумента, а y – соответствующее ему значение функции:

ProgramTABL;

Var xn, xk, dx, x, y : real;

Begin

Writeln(‘Введите xn, xk, dx’);

End.

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

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

ü присвоено ли ему начальное значение;

ü изменяется ли он на каждой итерации цикла;

ü верно ли записано условие продолжения цикла.

Приложение № 2.

ВЫЧИСЛЕНИЕ СУММЫ РЯДА

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

Этот ряд сходится на всей числовой оси. Для достижения заданной точности требуется суммировать члены ряда до тех пор, пока абсолютная величина очередного члена не станет меньше или равна . Запишем в общем виде формулу для вычисления n-го члена ряда:

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

Легко заметить, что (n+1)-й член ряда вычисляется после n-го, поэтому программа получится более простой и эффективной, если находить член ряда не с «нуля», а умножением предыдущего члена на некоторую величину. Найдем эту величину. Для этого запишем формулу для (n+1)-го члена ряда, подставив в предыдущее выражение (n+1) вместо n:

Теперь найдем выражение, на которое надо будет умножить Cn, чтобы получить Cn+1:

Запишем алгоритм вычисления суммы в словесной форме:

1. Ввести исходные данные (аргумент и точность).

2. Задать начальные значения номеру члена ряда, первому члену ряда и сумме ряда.

3. Организовать цикл:

1) вычислить очередной член ряда;

2) добавить его к сумме ряда;

3) перейти к следующему члену ряда;

4) проверить, достигнута ли точность вычислений.

4. Вывести значение функции.

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

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

ProgramSINUS;

ConstMaxIter = 500;

Var x, eps, y, c : double;

n : integer;

done : boolean;

Begin

Writeln(‘Введите аргумент и точность:’);

While abs( c ) > eps do

c:=-c * sqr(x) / 2 / n / (2*n+1);

Done := false; break

if done then Writeln(‘Аргумент: ‘, x:10:6,

‘Значение функции:’, y:10:6,

‘Вычислено с точностью ‘, eps:8:6, ‘за’, n, ‘итераций’);

End.

Первый член ряда равен x, поэтому, чтобы при первом проходе цикла значение второго члена вычислялось правильно, начальное значение n должно быть равно 1. Максимально допустимое количество итераций удобно задать с помощью именованной константы. Для аварийного выхода из цикла применяется процедура break, которая обеспечивает переход к первому после цикла оператору. Поскольку выход в случае как аварийного, так и нормального завершения цикла происходит в одну и ту же точку программы, вводится булева переменная done, которая предотвращает печать значений функции после выхода из цикла, когда точность вычислений не достигнута. Создание подобных переменных-«флагов», принимающих значение «истина» в случае успешного окончания вычислений и «ложь» в противном случае, является распространенным приемом программирования.

Приложение № 3.

КОЛИЧЕСТВО КВАДРАТОВ В ПРЯМОУГОЛЬНИКЕ

Дан прямоугольник. Написать программу, определяющую, на сколько квадратов можно его разрезать, если каждый раз отрезать квадрат максимально возможной площади. Все длины сторон должны быть натуральными числами.

Исходными данными являются два натуральных числа – длины сторон прямоугольника. Алгоритм решения задачи состоит в выборе большей стороны и определении, сколько раз в ней целиком поместится меньшая сторона. Для остатка большей стороны повторяется та же процедура. Цикл завершается, когда остаток становится равным нулю.

ProgramKVADRAT;

Var a, b, k, n, buf : integer;

Begin

Writeln(‘Введите стороны прямоугольника’);

buf := a; a := b; b := buf

Writeln(k, ‘ квадратов ‘, b, ‘ x ‘, b);

Writeln(‘Всего квадратов: ‘, n);

End.

Приложение № 4.

Последнее изменение этой страницы: 2018-05-31; просмотров: 366.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда.

Источник: stydopedya.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru