- •Содержание
- •Введение
- •1 Основные компоненты Delphi
- •1.1 Знакомство с интегрированной средой программирования Delphi
- •1.1.1 Главное окно
- •1.1.2 Окно формы
- •1.1.4 Окно кода
- •1.1.5 Создание простого приложения
- •1.2 Программирование алгоритмов линейных структур путем создания простейших приложений в среде Delphi
- •1.2.1 Раздел описания процедур
- •1.2.2 Раздел меток
- •1.2.3 Раздел констант
- •1.2.4 Раздел типов
- •1.2.5 Раздел переменных
- •1.2.6 Раздел операторов
- •1.2.7 Реализация алгоритмов линейной структуры
- •1.2.8 Математические вычисления в языке Object Pascal
- •1.3 Условный оператор
- •1.4 Цикл с предусловием
- •1.5 Цикл с параметром
- •1.6 Цикл с постусловием
- •1.7 Обработка одномерных массивов
- •1.8 Обработка двумерных массивов
- •1.9 Табулирование функции двух переменных
- •1.10 Процедуры и функции
- •2 Общие сведения о программе MathCad
- •2.1 Знакомство с интегрированной средой MathCad
- •2.1.1 Окно программы MathCad
- •2.1.2 Алфавит системы MathCad
- •2.2 Построение графика функции
- •2.3 Решение рациональных уравнений
- •2.4 Решение системы линейных алгебраических уравнений
- •2.5 Решение нелинейных уравнений
- •2.6 Решение систем нелинейных уравнений
- •2.7 Решение дифференциальных уравнений
- •Список использованных источников
1.7 Обработка одномерных массивов
Цель: Научиться составлять программы с использованием массивов.
Данная тема будет рассмотрена на примерах.
Полином степени n часто представляется в виде
P(x)=anxn+an-1xn-1+…+a0.
Структуры однотипных данных (целых чисел, вещественных чисел и т.п.), аналогичные конечным индексированным последовательностям, называются массивами. Описание может быть выполнено несколькими способами, которые иллюстрируются на следующем примере.
Объявить массив вещественных чисел
x1,x2,…,xn-1,xn (n<=50).
Способ 1. Вся требуемая при описании информация задается одновременно:
Var x: array[-50..50] of real;
Способ 2. Здесь определение вводит новое понятие, а затем рассматривается объект по имени х, обладающий свойствами, которые указаны в определении.
Пусть последовательность вещественных чисел х1,х2,…,хn. (n<=1) представлена в программе массивом х, а его описание и описания прочих переменных имеют вид:
В рассматриваемом примере определим новый тип данных, которому дадим имя vector
Type vector=array[-50..50]of real;
Описание массива х теперь производится обычным образом как описание переменной типа vector
Var x:vector;
В соответствии с правилами истолкований конструкций языка запись -50..50 представляет собой определение нового так называемого диапазонного типа данных. Его значениями являются все целые6 числа от -50 до 50. Переменна этого типа описывается следующим образом
Var i: -50..50;
Диапазонному типу данных можно дать свое имя, определив его в разделе type, и далее использовать это имя в описаниях. Например:
Type index= -50..50;
Var x: array [index] of real:
I: index;
В тех случаях, когда возможны изменения граничных значений индекса, при описании массива рекомендуется использовать имена констант вместо их значений. Следуя этой рекомендации, в разделе описания констант, предшествующим разделу описания типов, введем константу nmax. Тогда описание массива может быть сделано, например следующим образом:
Const nmax=50;
Type vector=array [-nmax..nmax] of real;
Var x: vector;
Для адаптации последнего описания, например, к неравенству , достаточно исправления значения константы nmax.
Для переменных-массивов, допустима только одна операция – присваивание. Ее выполнение создает копию массива. Оба имени, участвующие в операции, должны именовать объекты одного и того же типа. Например, пусть имеются три варианта объявления двух массивов:
-
var x,y: vector;
-
var x,y: array[index] of real;
-
var x: vector;
y: array [index] of real;
Во всех вариантах структуры массивов идентичны – это совокупности одинаково пронумерованных вещественных чисел. Но только в вариантах a) и b) типы x и y считаются одинаковыми(тождественными). Поэтому оператор присваивания y:=x при трансляции будет признан ошибочным, когда использовано описание с).
Прочие операторы с массивами (ввод, вывод, сложение и т.п.) должны быть определены для отдельного элемента массива и повторены с помощью операторов цикла для всех требуемых значений индекса. Рассмотрим примеры работы с массивами.
Пусть последовательность вещественных чисел х1,х2,…,хn. (n<=50) представлена в программе массивом х, а его описание и описания прочих переменных имеют вид:
Type ind=1..50;
Vec=array[ind] of real;
Var
X: vec;
I,n: ind;
Max, s: real;
Задание1: Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an, являющихся чётными числами и вывести их.
Технология выполнения задания
Постановка задачи: Создать приложение для нахождения четных членов последовательности и определения их количества.
Математическая модель представляется так: исходные данные – n, a1, a2, … ,an, результат – k, ak- четный член последовательности.
Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции).
Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 17.
Для четных чисел данной последовательности установить компонент ListBox. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose.
Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 1 эта часть выглядит следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
const n=15;
var q,b:array[1..n] of integer;
i,k:byte;
s:string
begin
k:=0;
for i:=1 to n do
begin
s:=inputbox('введите последовательность','n'+IntToStr(i),'0');
q[i]:=StrToint(s);
b[i]:=round(q[i]/2);
if (q[i] mod 2=0) and (b[i] mod 2<>0) then
begin
k:=k+1;
ListBox1.Items.Add(IntToStr(q[i]));
end;
end;
Label2.Caption:='Количество четных членов последовательности '+IntToStr(k);
end;
Рисунок 17 - Образец размещения компонент на форме
Задание2: Дана последовательность вещественных чисел х1,х2,…,хn (n<=30). Найти их среднее значение.
Технология выполнения задания
Постановка задачи: Создать приложение для нахождения среднего значения вещественных чисел х1,х2,…,хn (n<=30).
Математическая модель представляется так: исходные данные – n, х1,х2,…,хn , результат – s, xi- член последовательности.
Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции).
Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента.
Для чисел данной последовательности установить компонент ListBox. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose.
Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 2 эта часть выглядит следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
const nmax=30;
var
x: array[1..nmax] of real;
i,n:integer;
s:real;
begin
n:=strtofloat(edit1.text);
for i:=1 to n do
x[i]:=StrToint(inputbox('введите последовательность','x'+IntToStr(i),'0'));
s:=0;
for i:=1 to n do
s:=s+x[i];
s:=s/n;
Label2.Caption:='среднее = '+IntToStr(s);
end;
Задание3: Вычислить значение полинома P(x)=anxn+an-1xn-1+…+a0 (n20) при заданном значении x.
Для решения задачи воспользуемся схемой Горнера вычисления значения полинома, основанной на представлении его в следующей форме:
P(x)=(…((a0x+a1)x+a2)x+…+an-1)x+an.
Значение полинома получается n-кратным выполнением оператора присваивания
p:=p*x+ai, i=1,2,…,n
при начальном значении p=a0.
Технология выполнения задания
Постановка задачи: Создать приложение для нахождения значения полинома
P(x)=anxn+an-1xn-1+…+a0 (n20).
Математическая модель представляется так: исходные данные – n, a0,a1, a2, … ,an, результат – p.
Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции).
Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента. Для четных чисел данной последовательности установить компонент ListBox. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose.
Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 3 эта часть выглядит следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
const nmax=20;
type
ind=0..nmax;
coef=array[ind] of real;
var a: coef;
i,n:ind;
x,p:real; s:string;
begin
n:strtofloat(edit1.text);
for i:=0 to n do
begin
s:=inputbox('введите коэффициенты','a'+IntToStr(i),'0');
a[i]:=StrToint(s);
x:=strtofloat(edit2.text);
p:=a[0];
end;
for i:=1 to n do
p:=p*x+a[i];
Label2.Caption:='Значение полинома '+IntToStr(p);
end;
Таблица 9 - Индивидуальные варианты лабораторной работы №7
№ В |
Варианты индивидуальных заданий |
1 |
Найти наименьший элемент последовательности и его номер. |
2 |
Вычислить сумму элементов последовательности |
3 |
По заданному полиному найти коэффициенты полинома Q(x)=P(x). |
4 |
По заданному полиному ) найти коэффициенты полинома |
5 |
По заданной последовательности построить последовательность , исключив из заданной последовательности нулевые элементы. Определить количество оставшихся элементов. |
Продолжение таблицы 9
6 |
Дана последовательность целых чисел . Получить новую последовательность, выбросив из исходной элементы со значением max(). |
7 |
По заданной последовательности (n<=20) построить две последовательности и , элементы которых определяются условиями:
|
8 |
Дана последовательность (n<=20). Сдвинуть циклически последовательность на один элемент влево (например, из последовательности 5 8 3 4 10 получить 8 3 4 10 5). |
9 |
Найти сумму элементов последовательности (n<=30), начиная от первого отрицательного элемента и до конца последовательности. |
10 |
Дана последовательность вещественных чисел (n<=20). Вычислить |
11 |
В последовательности (n<=25) заменить все отрицательные элементы их квадратами, а положительные – кубами. |
12 |
В последовательности (n<=30) сосчитать число отрицательных и число положительных элементов. |
13 |
Дана последовательность целых чисел (n<=15). Вычислить , где m – либо номер первого отрицательного элемента, либо n, если отрицательных элементов нет. |
14 |
Дана последовательность из n (n<=20) различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами, включая эти числа. |
15 |
Даны две последовательности по n целых чисел в каждой (n<=10). Найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую последовательность. |
16 |
Даны целые числа а1,…,а50. Получить последовательность b1,…,b50, которая отличается от исходной тем, что все члены удвоены. |
17 |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an , являющихся нечётными числами. |
Продолжение таблицы 9
18 |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an, кратных 3 и не кратных 5. |
19 |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an, являющихся квадратами чётных чисел. |
20 |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an, удовлетворяющих условию . |
21 |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an, удовлетворяющих условию . |
22 |
Даны натуральные числа n, q1, q2,…, qn. найти те члены qi последовательности q1, q2,…, qn которые являются удвоенными нечётными числами. |
23 |
Даны натуральные числа n, q1, q2,…, qn. найти те члены qi последовательности q1, q2,…, qn, которые при делении на 7 дают остаток 1,2 или 5. |
24 |
Даны натуральные числа n, a1, a2, … ,an. В последовательности a1, a2,…,an получить сумму положительных и число отрицательных членов. |
25 |
Дано натуральное число n. Получить сумму тех чисел, которые являются удвоенными нечётными. При отсутствии таких чисел искомая сумма равна нулю. |
26 |
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые кратны 5. |
27 |
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые нечётны и отрицательны. |
28 |
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые удовлетворяют условию . |
Продолжение таблицы 9
29 |
Даны натуральное число n, действительные числа a1, a2, … ,an. в последовательности a1, a2, … ,an все отрицательные члены увеличить на 0.5, а все неотрицательные заменить на 0.1. |
30 |
Даны натуральное число n, действительные числа x1,…xn. В последовательности x1,…xn все члены, меньшие двух, заменить нулями. |