- •Д.С.Ситкин
- •Информатика.
- •Программированиевdelphi
- •Лабораторныйпрактикум
- •Содержание
- •Введение
- •Основныепонятияпрограммирования
- •Этапыпрограммирования
- •Средаdelphi.Созданиепростейшегопроекта
- •Формаиеёсвойства
- •Компонентыформыиихсвойства
- •КомпонентLabeledEdit
- •Событиеипроцедураобработкисобытия
- •Пример1.1
- •Компиляцияизапускпроектанаисполнение
- •Структураисохранениепроекта
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Линейныйалгоритм
- •Типыданных
- •Константыипеременные
- •Арифметическиеоперации
- •Правилазаписитиповыхдействий
- •Структурапроцедурыобработкисобытия
- •Пример2.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Подпрограммы
- •Классификацияиструктураподпрограмм
- •Механизмработыподпрограммыиобменапараметрами
- •Пример3.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Структурамодуля
- •Созданиеиподключениемодуля
- •Пример4.1
- •Условныйоператор.Неполнаяформа
- •Условныйоператор.Полнаяформа
- •IfусловиеthenоператорS1elseоператорS2
- •Пример5.1
- •Пример5.2
- •Операторвыбора
- •Пример5.3
- •Содержаниеотчёта
- •Контрольныевопросы
- •Контрольсинтаксисавводимыхданных
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Алгоритмыповторений
- •Операторцикласпредварительнымусловием
- •Пример7.1
- •Операторцикласпараметром(сосчётчиком)
- •Пример7.2
- •Пример7.3
- •Операторцикласпоследующимусловием
- •Пример7.4
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Массивы
- •Объявлениемассива
- •Обработкамассивов
- •Пример8.1
- •Динамическиемассивы
- •Подпрограммасоткрытымпараметром-массивом
- •Пример8.2
- •Целесообразностьвыделенияпамятиподмассивы
- •Контрольсинтаксисаэлементовмассива
- •Задание
- •Обработкамногомерныхмассивов
- •Пример9.1
- •КомпонентStringGrid
- •Пример9.2
- •Сортировкамассивов
- •Пример9.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Внешниефайлы
- •Физическиеилогическиефайлы
- •Классификациялогическихфайлов
- •Процедурыифункцииобработкифайлов
- •Пример 10.1
- •КомпонентыOpenDialog иSaveDialog
- •Пример 10.2
- •Пример 10.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Олабораторнойработе
- •Информатика. Программированиев delphi
Операторцикласпоследующимусловием
Этот оператор обычно используется когда число повторений за-ранеенеизвестно,аопределяетсяв ходециклическогопроцесса
repeatоператорSuntilусловие
здесьrepeat,untilслужебныеслова;операторSтелоцикла;
условиепеременная
или выражение логиче-скоготипа.
Блок-схема алгоритма, реализуемогооператором
цикла с постусловием,представленана
рис. 7.7. ОператорSвыполняется до
тех пор,покаусловиевпервые
не примет значениеTrue.ОператорSвыполняетсякакминимумодинраз.
Рис.7.7
Пример7.4
Разработаемалгоритмипроектдлявычислениясуммы
k
S xk0k!
1xx
2
2x3
6
...
x ...
k
k!
гдеk!=1·2·3·...·(k1)·k.Напомним,чтоданнаясуммаравнаex.Суммасодержитбесконечноечислослагаемых.Нокаждоеследую-щееменьшепредшествующего,стремитсякнулюивсёменьшийвкладвноситвсумму.Поэтому,начинаяснекото-
x
a= 1;k=0; S=0 |
|
|
|
S=S+a |
|
|
|
k=k+1 |
|
рого
слагаемого, отбросим остальные. Будем
по-лагать, что точность вычисления
суммы достаточ-на, если отношение
очередного слагаемого к сум-ме всех
предыдущих слагаемых по модулю мень-ше
числа0, остальные
слагаемые можно не учи-тывать. Однако
заранее нельзя определить
сколь-кослагаемыхвойдётвсумму,сформулированотолько
условие завершения циклического
процес-са.Поэтомуследуетиспользоватьоператорциклас
постусловием для реализации алгоритма.
Выве-демрекуррентноесоотношение
ak
ak1
x xk1
k
k!:(k1)!xk(k1)! xxk1(k1)!k k
ak
ak1k.
Рис.7.8
В цикле (рис.7. 8) определяется значение текущегослагаемого по рекуррентной формуле, если оно неудовлетворяет условию точности, то осуществля-ется переход к новой итерации, где в её начале этослагаемоедобавляетсяксумме.Впротивномслу-
чаепроисходитвыходизциклаивыводнакопленнойсуммыбезсла-гаемого,вычисленногонапоследнейитерации,т.к.оноужеудовле-творилоусловию|ak/Sk-1|.Довходавциклследуетзадатьначаль-ные значенияa= 1 (значение первого слагаемого),k= 0 (номер перво-го слагаемого),S= 0 (чтобы получитьS=a=1 на первой итерации).procedureTForm1.Button1Click(Sender: TObject);
varx, e, a, S:real;k:byte;beginx:=StrToFloat(Edit1.Text);
e:=StrToFloat(Edit2.Text); //точность должна быть положительнойa:=1; k:=0; S:=0; //присвоение начальных значений до тела циклаrepeat//началотелацикла
S:=S+a;//добавлениеслагаемогокнакапливаемойсумме
k:=k+1;//переход кследующемуномеруслагаемого
a:=a*x/k; //вычисление текущего слагаемого по рекуррентной формулеuntilabs(a/S)<=e; //проверка условия выхода из тела циклаLabel3.Caption:='S='+FloatTostrF(S,ffFixed,10,5); //вывод суммыLabel4.Caption:='слагаемых в сумме '+IntToStr(k); //вывод числа слаг.Label5.Caption:='альтерн. знач. '+FloatToStr(exp(x)); //необязательноend;
Нарис.7.9представленыпримерыработыприложениясрасчё-томсуммыпритрёхзначенияхточностииконтрольнымзначением.
Рис.7.9
