Задачи для самостоятельного решения Циклы с условием
№4.1. Написать программу для вычисления значений Y= Z2 при изменении Z от N1 до N2 с шагом K, где K, N1, N2 — натуральные числа.
№4.2. Написать программу для вычисления суммы нечетных чисел натурального ряда в интервале от N1 до N2, , где N1, N2 — натуральные числа.
№4.3. Написать программу для вычисления значений Q =
Y при
изменении Y от N1 до N2 с шагом K, где K, N1, N2 — натуральные числа.
№4.4. Написать программу для вычисления суммы обратных величин чисел от N1 до N2 с шагом K, где K, N1, N2 — натуральные числа.
№4.5. Написать программу для вычисления выражения S=π*R*R при изменении R в интервале от 1 до N с шагом K где K, N — натуральные числа.
№4.6. Составить программу для вычисления членов последовательности:
Sn =112 + 213 +... + n (n1+1) , где n — натуральное число. Члены последовательности вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа ε
(0<ε<0,0001).
№ 4.7. Составить программу для вычисления суммы ряда:
371
113 + 213 + 313 +... + n13 , где n — натуральное число.
Сумму ряда вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа ε (0<ε<0,0001).
№ 4.8. Составить программу для вычисления суммы ряда: 1− 12 + 13 − 14 + 15 − 16 +...
Сумму ряда вычислять до тех пор, пока текущий член последовательности не станет меньше заданного числа ε (0< ε <0,0001). № 4.9. Составить программу для вычисления члена an последовательности a1, a2, …, образованной по закону
для которого выполняется условие an–an-1 <ε, причем n — номер члена последовательности (n≥2),
ε— заранее заданное положительное число.
№4.10. Написать программу для вычисления члена bn последовательности b1, b2, …, образованной по закону
bn = (1− 12)(1− 13)...(1− n1+1),
для которого выполняется условие bn–bn-1 <ε,
где n — номер элемента последовательности (n≥2); ε — заданное положительное число.
Циклы с параметром
№4.11. Написать программу для вычисления суммы S=S+1/i, где i=1, 2,..., N.
№4.12. Написать программу для вычисления произведения первых N натуральных чисел.
№4.13. Написать программу для вычисления dx=h*h/(2*S), при
значениях: 100≤ S ≤ 1000 м.
№ 4.14. Написать программу для вычисления суммы S из значений Y=X*X*X, где X задан в интервале от N1 до N2, где N1 и N2
— натуральные числа.
№ 4.15. Написать программу для вычисления выражения Y=N!.
§ 5. Использование массивов в программах,
компонента Memo для ввода данных в массив
В данном параграфе рассматриваются следующие вопро-
сы: массивы, компонент Memo для ввода и вывода массивов.
Теория
Массивы
Массивом называется упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Элементами массива могут быть данные различных типов, включая структурированные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указываются имя этого массива и номер (номера) элемента, заключенный в квадратные скобки, например, arrl[3, 35] или аrr3[7].
Количество индексных позиций определяет мерность массива (одномерный, двумерный и т. д.), при этом мерность массива не ограничивается. В математике аналогом одномерного массива является вектор, а двумерного массива — матрица. Индексы элементов массива должны принадлежать порядковому типу. Разные индексы одного и того же массива могут быть различных типов. Наиболее часто типом индекса является целочисленный тип.
Различают массивы статические и динамические. Статиче-
ский массив представляет собой массив, границы индексов и соответственно размеры которого задаются при объявлении — известны до компиляции программы.
Формат описания типа статического массива: Array [Тип индексов] of <Тип элементов>; Пример. Объявление статических массивов. Type tm = Array[l .. 10, 1 .. 100] of real;
Var arrl, arr2: tm;
arr3: Array[20 .. 100] of char; arr4: Array['a' .. 'z'] of integer;
Переменные arrl и arr2 являются двумерными массивами по 1000 элементов — 10 строк и 100 столбцов. Каждый элемент этих массивов представляет собой число типа real. Для объявления массивов arrl и аrr2 введен специальный тип tm. Переменные аrr3 и аrr4 являются одномерными массивами, соответственно на 81 символ и 26 целых чисел.
Доступ к каждому элементу массива осуществляется по индексу. Например, arr1[2,3] — элемент массива arr1, находящийся во второй строке и третьем столбце; arr3[34] — элемент массива arr3 с индексом 34, но пятнадцатый по порядку; arr4[i] — i-ый элемент массива arr4.
Компонент Memo для ввода и вывода массивов
При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать кла-
вишу «ENTER».
Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с 0).
Следующий цикл демонстрирует ввод символьного массива из компонента Memo:
For i:=1 to Size do a[i]:=Memo1.Lines[i];
Вывод массива в компонент Memo можно осуществить таким образом:
For i:=0 to N-1 Memo2.Lines.Add(FloatToStr(massiv[i+1]);
Практика
Задача
Составить программу для сортировки массива действительных чисел: по возрастанию или по убыванию по желанию пользователя. Результаты сортировки вывести в окно сообщения.
Компоненты
Имя |
Свойства |
Значение |
Назначение |
|
компонента |
компонента |
|
|
|
Form1 |
Caption |
Сортировка массива мето- |
Заголовок формы |
|
|
дом прямого выбора |
|
|
Label1 |
Caption |
Программа предназначена |
Справочная |
ин- |
|
|
для сортировки массива |
формация |
для |
|
|
|
|
действительных |
чисел |
по |
пользователя |
|
|
|
|
возрастанию либо по убы- |
программы |
|
|
|
|
|
|
ванию |
|
|
|
|
|
|
|
Label2 |
|
Caption |
|
Количество |
элементов |
в |
Подсказка |
поль- |
|
|
|
|
массиве |
|
|
|
зователю |
|
|
Edit1 |
|
Text |
|
….. |
|
|
|
Поле |
для |
ввода |
|
|
|
|
|
|
|
|
количества |
|
эле- |
|
|
|
|
|
|
|
|
ментов в массиве |
Memo1 |
|
Lines |
|
….. |
|
|
|
Компонент |
|
для |
|
|
|
|
|
|
|
|
ввода |
элементов |
|
|
|
|
|
|
|
|
массива в |
|
стол- |
|
|
|
|
|
|
|
|
бик (в одной стро- |
|
|
|
|
|
|
|
|
ке — один эле- |
|
|
|
|
|
|
|
|
мент) |
|
|
|
Button1 |
|
Caption |
|
Сортировка |
по |
возраста- |
Кнопка |
для |
вы- |
|
|
|
|
нию |
|
|
|
полнения |
сорти- |
|
|
|
|
|
|
|
|
ровки |
по возрас- |
|
|
|
|
|
|
|
|
танию |
|
|
|
Button2 |
|
Caption |
|
Сортировка по убыванию |
|
Кнопка |
для |
вы- |
|
|
|
|
|
|
|
|
полнения |
сорти- |
|
|
|
|
|
|
|
|
ровки |
по |
убыва- |
|
|
|
|
|
|
|
|
нию |
|
|
|
Button3 |
|
Caption |
|
Завершение работы |
|
Кнопка |
для |
за- |
|
|
|
|
|
|
|
|
вершения работы |
|
|
|
|
|
|
|
|
программы |
|
|
Переменные и массивы |
|
|
|
|
|
|
|
Обозначение |
|
Содержание |
|
|
|
Тип |
|
|
в программе |
|
|
|
|
|
|
|
|
|
|
NКоличество элементов в массиве Целый
действительных чисел
Massiv |
Массив действительных чисел |
Вещественный, расши- |
|
|
ренный |
I |
Текущий индекс элемента массива |
Целый |
Jиндекс элемента массива, с котороЦелый
го начинается поиск минимального либо максимального элемента
min |
номер минимального |
элемента |
в |
Целый |
|
массиве или части массива |
|
|
max |
номер максимального |
элемента |
в |
Целый |
|
массиве или части массива |
|
|
buf |
буфер для обмена местами эле- |
|
Вещественный, расши- |
|
ментов массива |
|
|
ренный |
st |
строковое сообщение, |
содержащее |
Строковый |
|
результат |
|
|
|
Проект формы
Текст модуля
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
…………
var
Form1: TForm1;
Massiv: array [1..100] of Extended;// массив действительных чисел N : Integer;
implementation {$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject); begin
Form1.Close
end;
procedure TForm1.Button1Click(Sender: TObject);
Var I:Integer;// индекс элемента массива
min: Integer; // номер минимального элемента в массиве //или части массива
j : Integer; // индекс элемента массива, //с которого начинается // поиск минимального элемента
buf: Extended; // буфер для обмена местами // элементов массива
St: String; // строковое сообщение, содержащее результат
begin
//ввод количества элементов в массиве
N:=StrToInt(Edit1.Text);
//ввод массива действительных чисел
For I:=1 To N do Massiv[I]:=StrToFloat(Memo1.Lines[I-1]);
// поиск минимального элемента массива методом прямого выбора {алгоритм метода прямого выбора можно описать следующими слова-
ми. Сначала в качестве минимального элемента берется первый элемент и с ним последовательно сравниваются все следующие элементы массива, если попадается элемент меньше принятого за минимальный, то они меняются местами. В результате на первом месте оказывается самый маленький элемент массива. Затем берется второй или следующий элемент массива и просматривается с перестановкой оставшаяся часть массива. Эта последовательность шагов повторяется, пока номер минимального элемента не достигнет N–1}
For I:=1 to N-1 do begin
min:=I;
For j:=I+1 to N do
if Massiv[j] < Massiv[min] then min:=j;
buf:=Massiv[I];
Massiv[I]:=Massiv[min];
Massiv[min]:=buf;
end;
// вывод результатов сортировки st:='Отсортированный по возрастанию массив'+#13; For I:=1 to N do
st:=st+IntToStr(i)+ ' '+FloatToStrF(Massiv[I],Fffixed,10,2)+#13; ShowMessage(st);
end;
procedure TForm1.Button2Click(Sender: TObject);
Var I:Integer;// индекс элемента массива
max: Integer; // максимальный элемент в массиве j : Integer; // индекс элемента массива, с которого // начинается поиск максимального элемента
buf: Extended; // буфер для обмена местами элементов // массива
St:String;// строковое сообщение, содержащее результат begin
//ввод количества элементов в массиве
N:=StrToInt(Edit1.Text);
//ввод массива действительных чисел
For I:=1 To N do
Massiv[I]:=StrToFloat(Memo1.Lines[I-1]);
//поиск максимального элемента массива методом прямого выбора
//алгоритм аналогичен поиску минимального элемента
//отличие состоит в знаке сравнения
For I:=1 to N-1 do begin
max:=I;
For j:=I+1 to N do
if Massiv[j] > Massiv[max] then max:=j; buf:=Massiv[I];
Massiv[I]:=Massiv[max];
Massiv[max]:=buf;
end;
// вывод результатов сортировки st:='Отсортированный по убыванию массив'+#13; For I:=1 to N do
st:=st+IntToStr(i)+ ' '+FloatToStrF(Massiv[I],Fffixed,10,2)+#13; ShowMessage(st);
end;
end.
Задачи для самостоятельного решения
Группа А
№5.1. Дан массив действительных чисел. Найти сумму элементов массива.
№5.2. Дан массив действительных чисел. Найти произведение элементов массива.
№5.3. Дан массив действительных чисел. Найти сумму квадратов элементов массива.
№5.4. Дан массив действительных чисел. Найти модуль суммы и квадрат произведения элементов массива.
№5.5. Дан массив действительных чисел. Найти наибольший элемент массива.
№5.6. Дан массив действительных чисел. Найти наименьший элемент массива.
№5.7. Дан массив действительных чисел. Найти наибольший элемент массива.
№5.8. Дан массив действительных чисел. Найти наименьший из элементов массива с четными номерами.
№5.9. Написать программу для определения среднего роста студентов группы.
№5.10. Написать программу для вычисления среднего гармонического
Mn = n / (1/a1+ 1/a2+...+ 1/an), где ai≠0.
Группа Б
№ 5.11. Написать программу для обработки результатов N- кратного измерения величины L. Программа должна вычислять Среднее
1 N
L = N i∑=1Li ,
где Li — результат i–го измерения.
Среднюю квадратическую погрешность отдельного измерения
Среднюю квадратическую погрешность арифметической середины
M = m /
N .
Предельную абсолютную погрешность измерений L = 3M . Количество измерений произвольно в пределах от 2 до 15.
Впрограмме предусмотреть следующую форму запросов при вводе исходных данных:
КОЛИЧЕСТВО ИЗМЕРЕНИЙ= L1=
L2=
ит. д. для всех измерений.
Впрограмме предусмотреть также проверку условия N<2. Если это условие выполняется, выдавать сообщение «ОДНО ИЗМЕРЕНИЕ НЕДОПУСТИМО» и осуществить переход к оператору ввода N.
Форма выдачи результатов: УСРЕДНЕННЫЙ РЕЗУЛЬТАТ=значение
СКП ОТДЕЛЬНОГО ИЗМЕРЕНИЯ= значение СКП СРЕДНЕГО= значение
ПРЕДЕЛЬНАЯ АБСОЛЮТНАЯ ПОГРЕШНОСТЬ= значение № 5.12. Написать программу для определения суммарной площади земельных участков
S= S1 + S2 +... + SN
ивычисления средней квадратической погрешности опреде-
ления этой суммы
M =
M 12 + M 22 +... + M N2 .
Здесь Si — площадь i-го участка; Mi — средняя квадратическая погрешность определения этой площади. Общее количество участков произвольно, но не более 255.
Предусмотреть в программе следующую форму запросов при вводе:
КОЛИЧЕСТВО УЧАСТКОВ= УЧАСТОК 1:
ПЛОЩАДЬ= СКП= УЧАСТОК 2: ПЛОЩАДЬ= СКП=
и т.д. для всех участков. Форма вывода результатов:
СУММАРНАЯ ПЛОЩАДЬ=значение S СКП=значение M
№ 5.13. Написать программу для вычисления среднего арифметического
P = X1 + X2 +... + X N , N
среднего геометрического
G = N | X1 X 2 ... X N |,
среднего гармонического
H = |
N |
1/ X1 +1/ X 2 +... +1/ X N |
и среднего квадратичного