Egorova1
.pdfДля очистки экрана используется обращение к стандартной процедуре ClrScr в виде: ClrScr;
Эта процедура очищает экран и помещает курсор в верхний левый угол экрана. Для того, чтобы в программе можно было использовать процедуру ClrScr, к программе необходимо подключить стандартный модуль Crt. Для этого в программе до использования процедуры Clrscr должно быть предложение
Uses Crt; (* Использовать модуль Crt *)
Для задержки экрана по концу работы программы используются стандартная функция
Keypressed или Readkey (см. п.3.1 и п.3.2).
Пример 1.
(* Ввод и вывод одномерного массива *) program p0;
var a:array[1..10] of integer; (* a - массив *)
i, |
(* i - индекс массива a *) |
n:integer; |
(* n - количество элементов в массиве a *) |
begin
(* Ввод массива *)
write('Введите количество элементов массива: '); readln(n);
writeln('Введите ',n,' элементов:'); for i:=1 to n do read(a[i]);
(* Вывод массива *)
writeln('Вы ввели массив из ',n,' элементов:'); for i:=1 to n do write(a[i],' ');
end.
(* При описании массива задается максимальный размер массива (количество элементов), данном случае 10. Но при работе с программой можно указать реальный фактический размер массива n, не превышающий максимальный размер 10 *)
Пример 2.
(* Сумма и произведение элементов одномерного массива *)
program summa_proizvedenie; |
|
|
|
uses crt; |
|
|
|
var i, |
(* i - индекс элемента в массиве a |
*) |
|
n:integer; |
(* n - количество элементов в массиве a |
*) |
|
pr, |
(* pr - произведение элементов массива a *) |
||
sum:integer; (* sum - сумма элементов массива a |
*) |
||
a:array[1..100] of integer; |
(* a - массив *) |
|
|
begin |
|
|
|
clrscr; |
|
|
|
(* Ввод массива *) |
|
|
write('Введите количество элементов в массиве (не более 100): '); readln(n);
writeln('Введите ',n,' целых элементов:'); |
|
|
for i:=1 to n do read(a[i]); |
|
|
(* Определение суммы и произведения элементов массива *) |
|
|
sum:=0; |
(* Установка начального значения суммы sum=0 |
*) |
pr:=1; |
(* Установка начального значения произведения pr=1 *) |
for i:=1 to n do begin
sum:=sum+a[i];
pr:=pr*a[i];
end;
(* Вывод суммы и произведения *) writeln('Сумма S=',sum,' Произведение P=',pr);
81
readkey;
end.
Пример 3.
(* Определение количества положительных элементов в массиве *)
program polozh_elem; |
|
|
|
uses crt; |
|
|
|
var i, |
(* i - индекс элемента в массиве a |
*) |
|
n:integer; (* n - количество элементов в массиве a |
*) |
||
k:integer; (* k - количество положит. элементов в массиве a *) |
|||
a:array[1..100] of integer; |
(* a - массив *) |
|
|
begin |
|
|
|
clrscr; |
|
|
|
(* Ввод массива *) |
|
|
write('Введите количество элементов в массиве (не более 100): '); readln(n);
writeln('Введите ',n,' целых элементов:'); for i:=1 to n do read(a[i]);
(* Определение количества положительных элементов массива *)
k:=0; (* Установка начального значения кол-ва положит. эл-тов k=0 *) for i:=1 to n do
if a[i]>0 then k:=k+1;
(* Вывод количества положительных элементов *) writeln('Количество положительных элементов равно ',k);
readkey; |
|
|
|
end. |
|
|
|
Пример 4. |
|
|
|
(* Определение значений min и max элементов массива *) |
|
||
program min_max; |
|
|
|
var a:array[1..10] of integer; |
(* а - исходный массив |
*) |
|
i, |
(* индекс элемента в массиве a |
*) |
|
n:integer; |
(* количество элементов в массиве a |
*) |
|
max, |
(* значение максимального элемента в массиве a *) |
min:integer; (* значение минимального элемента в массиве a *) begin
(* Ввод массива *)
write('Введите количество элементов массива (не более 10): '); readln(n);
writeln('Введите ',n,' элементов:'); for i:=1 to n do read(a[i]);
(* Определение значений min и max элементов массива *)
max:=a[1]; (* Нач. значение макс. элемента равно первому элементу *) min:=a[1]; (* Нач. значение мин. элемента равно первому элементу *) for i:=2 to n do
begin
if a[i]>max then max:=a[i]; if a[i]<min then min:=a[i];
end;
(* Вывод значений макс. и мин. элементов *) writeln('Значение максимального элемента равно ',max); writeln('Значение минимального элемента равно ',min); end.
Пример 5.
(* Определение максимального (минимального) значения среди элементов массива, удовлетворяющих определенному условию *)
82
(* Дан одномерный массив. Определить максимальное значение среди тех
элементов этого массива, которые кратны 3 *) |
|
|||
|
program Mini_Maxi; |
|
||
|
var a:array[1..10] of integer;(* исходный массив *) |
|
||
|
i, |
(* индекс массива *) |
|
|
|
n:integer; |
(* кол-во элементов в массиве *) |
|
|
|
max:integer;(* значение максимального элемента *) |
|||
|
f:boolean; |
(* флаг *) |
|
|
|
begin |
|
|
|
|
writeln; |
|
|
|
|
write('Введите кол-во элементов массива:'); |
|
||
|
readln(n); |
|
|
|
|
writeln('Введите ',n,' элементов:'); |
|
||
|
for i:=1 to n do read(a[i]); |
|
||
|
f:=true; |
|
|
|
|
for i:=1 to n do |
|
||
|
begin |
|
|
|
|
if a[i] mod 3=0 then |
|
||
|
if f then begin max:=a[i]; f:=false end |
|
||
|
else if a[i]>max then max:=a[i]; |
|
||
|
end; |
|
|
|
|
writeln('Значение максимального элемента, кратного 3, равно ',max); |
|||
|
end. |
|
|
|
|
Пример 6. |
|
||
(* |
Определение значения максимального элемента массива и |
|||
|
номеров максимальных элементов в массиве |
*) |
||
(* |
Пример. |
|
|
|
|
Дано: массив А=(5,1,-1,5,4,5). |
|
||
|
Получить: максимальное значение равно 5; |
|
||
|
номера максимальных элементов: 1,4,6. *) |
|
||
|
program lmax; |
|
||
|
var a:array[1..100] of real; (* a - исходный массив |
*) |
||
|
k:array[1..100] of integer; (* k - получаемый массив номеров максим. элементов *) |
|||
|
dmax:real; |
(* значение максимального элемента массива a *) |
||
|
i:integer; |
(* индекс массива a *) |
|
|
|
l:integer; |
(* индекс массива k *) |
|
|
|
n:integer; |
(* кол-во элементов массива a *) |
|
|
|
j:integer; |
(* кол-во элементов массива k *) |
|
|
|
begin |
|
|
|
(* Ввод массива *)
write('Введите кол-во элементов массива:'); readln(n);
writeln('Введите ',n,' элементов:'); for i:=1 to n do read(a[i]);
writeln;
writeln('Ваш массив из ',n,' элементов:'); for i:=1 to n do write(a[i],'');
writeln;
(* Определение максимального значения и номеров *)
dmax:=a[1]; |
(* Установка нач. dmax и нач. массива k *) |
k[1]:=1; |
|
j:=1; |
|
l:=2; |
|
for i:=2 to n do |
(* Сравнение эл-тов массива a с dmax *) |
83
begin
if a[i]>dmax then
begin (* Эл-т больше dmax - меняем dmax и массив k *) dmax:=a[i];
for l:=1 to j do k[l]:=0; j:=1;
l:=2;
k[1]:=i; end
else if a[i]=dmax then
begin (* Эл-т равен dmax - записываем номер в массив k *) k[l]:=i;
j:=j+1;
l:=l+1;
end;
end;
(* Вывод результатов *)
writeln('Значение максимального элемента равно ',dmax); write('Индексы максимальных элементов: ');
for l:=1 to j do write(k[l],' '); end.
(* Замечание. Возможны другие пути решения задачи. Например:
1)просмотреть весь массив и найти максимальное значение (см. пример 4);
2)просмотреть весь массив и распечатать номера элементов, которые имеют это максимальное значение.
При таком решении массив просматривается дважды, что не всегда желательно. *) Пример 7.
(* Перестановка со сдвигом назад (в конец массива) 2-х первых элементов *)
(* Дано: A=(a1,a2,...,an) |
|
|
Получить: A=(a3,a4,...,an,a1,a2) |
|
|
Например: A=(1,2,3,4,5) --> A=(3,4,5,1,2) |
*) |
|
program PerestanovkaNazad_1; |
|
|
uses crt; |
|
|
const n=10; |
(* Размер массива *) |
|
var a:array[1..10] of integer; (* Массив |
*) |
|
i, |
(* Индекс массива *) |
|
b,c:integer; (* Вспомогательные переменные для перестановки *) |
||
begin |
|
|
clrscr; |
|
|
(* Ввод массива *)
writeln('Введите массив из 10 целых элементов: '); for i:=1 to n do read(a[i]);
(* Перестановка со сдвигом *)
b:=a[1];c:=a[2]; (* Запоминаем два первых эл-та *)
for i:=1 to n-2 do a[i]:=a[i+2]; (* Сдвигаем остальные (n-2)-элемента на 2 поз. вперед.
|
Сдвиг начинаем от начала массива |
*) |
a[n-1]:=b;a[n]:=c; |
(* Восстанавливаем два первых эл-та в конце массива *) |
(* Вывод преобразованного массива *) writeln('');
for i:=1 to n do write(a[i],' '); readkey;
end.
Пример 8.
(* Перестановка со сдвигом вперед (в начало массива) 2-х последних элементов *)
84
(* Дано: A=(a1,a2,...,an)
Получить: A=(an,a n-1,a1,a2,..,a n-2) Например: A=(1,2,3,4,5) --> A=(5,4,1,2,3) *)
program PerestanovkaVpered_1; |
|
|
uses crt; |
|
|
const n=10; |
(* Размер массива *) |
|
var a:array[1..10] of integer; (* Массив |
*) |
|
i, |
(* Индекс массива *) |
|
b,c:integer; (* Вспомогательные переменные для перестановки *) begin
clrscr;
(* Ввод массива *)
writeln('Введите массив из 10 целых элементов: '); for i:=1 to n do read(a[i]);
(* Перестановка со сдвигом *)
b:=a[n];c:=a[n-1]; (* Запоминаем два последних эл-та *)
for i:=n-2 downto 1 do a[i+2]:=a[i]; (* Сдвигаем остальные (n-2)-элемента на две поз.
|
назад. Сдвиг начинаем от конца массива |
*) |
a[1]:=b;a[2]:=c; |
(* Восстанавливаем два последних эл-та в начале массива*) |
(* Вывод преобразованного массива *) writeln('');
for i:=1 to n do write(a[i],' '); readkey;
end.
Пример 9.
(* Перестановка со сдвигом назад (в конец массива) k-первых элементов *) (* Например: A=(1,2,3,4,5,6,7), k=3 --> A=(4,5,6,7,1,2,3) *)
(* Алгоритм: будем последовательно k-раз в цикле переставлять по одному элементу назад
(в конец массива) |
*) |
|
program PerestanovkaNazad_2; |
|
|
uses crt; |
|
|
const n=10; |
(* Размер массива |
*) |
var a:array[1..10] of integer; (* Массив |
*) |
|
i, |
(* Индекс массива |
*) |
j, |
(* Счетчик по количеству перестановок *) |
|
b, |
(* Вспомогат. перем. для перестановки *) |
|
k:integer; (* Количество перестановок |
*) |
|
begin |
|
|
clrscr;
(* Ввод массива и количества перестановок *) writeln('Введите массив из 10 целых элементов: '); for i:=1 to n do read(a[i]);
writeln('Введите количество переставляемых элементов: '); readln(k);
(* Перестановки со сдвигом *) for j:=1 to k do
begin b:=a[1];
for i:=1 to n-1 do a[i]:=a[i+1]; a[n]:=b;
end;
(* Вывод преобразованного массива *) for i:=1 to n do write(a[i],' ');
85
readkey;
end.
Пример 10.
(* Перестановка со сдвигом вперед (в начало массива) k-последних элементов *)
(* Например: A=(1,2,3,4,5,6,7), k=3 --> A=(5,6,7,1,2,3,4) |
*) |
|
(* Алгоритм: будем последовательно k-раз в цикле переставлять |
|
|
по одному элементу вперед (в начало массива) |
*) |
|
program PerestanovkaVpered_2; |
|
|
uses crt; |
|
|
const n=10; |
(* Размер массива *) |
|
var a:array[1..10] of integer; (* Массив |
*) |
|
i, |
(* Индекс массива |
*) |
j, |
(* Счетчик по количеству перестановок *) |
|
b, |
(* Вспомогат. перем. для перестановки *) |
|
k:integer; (* Количество перестановок |
*) |
|
begin |
|
|
clrscr; |
|
|
(* Ввод массива и количества перестановок *) |
writeln('Введите массив из 10 целых элементов: '); for i:=1 to n do read(a[i]);
writeln('Введите количество переставляемых элементов: '); readln(k);
(* Перестановки со сдвигом *) for j:=1 to k do
begin b:=a[n];
for i:=n-1 downto 1 do a[i+1]:=a[i]; a[1]:=b;
end;
(* Вывод преобразованного массива *) for i:=1 to n do write(a[i],' ');
readkey;
end.
Пример 11.
(* Зеркальное отображение массива относительно центральной позиции *)
(* Например: 1) |
A=(1,2,3,4,5,6,7) |
--> |
A=(7,6,5,4,3,2,1) |
*) |
|
(* |
2) |
A=(1,2,3,4,5,6) |
--> A=(6,5,4,3,2,1) |
*) |
|
program Otobrazhenie; |
|
|
|
||
uses crt; |
|
|
|
|
|
const n=10; |
(* Размер массива *) |
|
|||
var a:array[1..10] of integer; (* Массив |
*) |
|
|||
i, |
(* Индекс массива |
|
*) |
|
b:integer; (* Вспомогат. перем. для перестановки *) begin
clrscr;
(* Ввод массива *)
writeln('Введите массив из 10 целых элементов: '); for i:=1 to n do read(a[i]);
(* Перестановки элементов *) for i:=1 to n div 2 do
begin b:=a[i];
a[i]:=a[n-i+1]; a[n-i+1]:=b;
86
end; |
|
(* Вывод преобразованного массива *) |
|
for i:=1 to n do write(a[i],' '); |
|
readkey; |
|
end. |
|
Пример 12. |
|
(* Пример работы с одномерным массивом литер |
*) |
(* Дано натуральное число n и последовательность символов |
a[1],a[2],...a[n] (массив |
литер). Построить новую последовательность символов, заменив в исходной каждую точку многоточием, то есть тремя точками. Исходную и полученную
последовательности распечатать. |
*) |
||
program posl (i,o); |
|
|
|
var a:array [1..80] of char; |
(* исходная последовательность *) |
||
b:array [1..240] of char; |
(* новая последовательность |
*) |
|
i:integer; |
(* индекс массива a *) |
|
|
j:integer; |
(* индекс массива b *) |
|
|
n:integer; |
(* количество элементов исходного массива a *) |
||
begin |
|
|
|
(* Ввод исходного массива a |
*) |
|
|
write(' Введите n: '); |
|
|
|
readln(n); |
|
|
|
writeln(' Введите ',n,' знаков '); for i:=1 to n do read (a[i]);
(* Построение нового массива в *) j:=1;
for i:=1 to n do begin
b[j]:=a[i]; j:=j+1; if a[i]='.' then
begin b[j]:='.'; b[j+1]:='.'; j:=j+2;
end
end;
(* Вывод исходного и полученого массивов *) writeln ('Исходная последовательность'); for i:=1 to n do
write (a[i]); writeln;
writeln (' Результирующая последовательность'); for i:=1 to j-1 do
write (b[i]);
end.
Пример 13.
(* Пример работы с одномерным массивом *)
(* Дан текст в виде строки символов (предполагается, что все буквы прописные, то есть "большие"). Определить, сколько раз в этой строке встречаются различные буквы английского алфавита.
Например, в строке "ARRAY" из 5 символов встречаются: буква A - 2 раза,
буква R - 2 раза,
буква Y - 1 раз, ост. буквы - 0 раз.
87
Дано: N: integer |
- длина исходной строки, |
|
|
T: array [1..N] of CHAR - исходный текст. |
|
|
|
Результат: C:array ['A'..'Z'] of integer - счетчик количества букв, то есть |
|
||
C['A']= <кол-во букв 'A'>, C['B']= <кол-во букв 'B'>,... |
*) |
||
PROGRAM PR8 (I,O); |
|
|
|
USES CRT; |
|
|
|
CONST N=10; |
(* Длина строки |
*) |
|
VAR T: array [1..N] of char; (* Исходный текст |
*) |
|
|
C: array ['A'..'Z'] of integer; (* Счетчик кол-ва букв *) |
|
||
I: integer; |
(* Индекс элементов массива Т *) |
|
|
CH: char; |
(* Индекс элементов массива C *) |
|
|
BEGIN |
|
|
|
clrscr; |
|
|
|
FOR CH:='A' to 'Z' DO C[CH]:=0; (* очистка счетчика *) FOR I:=1 TO N DO
BEGIN
WRITELN (' ВВЕДИТЕ: СИМВОЛ и < ВК>'); READLN (T[I]);
IF (T[I]>='A') and (T[I]<='Z') then C[T[i]]:=C[T[I]]+1;
END;
clrscr;
WRITELN ('ИСХОДНАЯ СТРОКА A:'); FOR I:=1 TO N DO WRITE (T[I]); WRITELN;
WRITELN ('КОЛИЧЕСТВО БУКВ:'); FOR CH:='A' to 'M' DO
WRITELN (CH:5, C[CH]);
WRITELN('ДЛЯ ПРОДОЛЖЕНИЯ РАБОТЫ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ'); readln;
FOR CH:='N' to 'Z' DO WRITELN (CH:5, C[CH]);
END.
Пример 14.
(* Сортировка (упорядочивание) одномерного массива методом пузырька *) (* Задан массив, содержащий не более 100 элементов. Упорядочить массив по
возрастанию элементов. Математическая постановка задачи.
Дано: массив А из n- элементов, то есть A=(a[1],a[2],...a[n]). Представить его в таком виде, чтобы a[1]<=a[2]<=a[3]<=...<= a[n].
Математический метод решения задачи.
Для упорядочения массива по возрастанию элементов будем использовать метод "пузырька".
Суть метода.
Вначале рассмотрим метод на примере: n = 5, A=(32861).
1 просмотр - просматриваем последовательность 32861, сравнивая слева направо два соседних элемента и переставляя их, если надо:
1 сравнение: |
32861 |
---> |
23861 |
2 сравнение: |
23861 |
|
|
3 сравнение: |
23861 |
---> |
23681 |
4 сравнение: |
23681 |
---> |
23618 |
Наибольший элемент 8 "всплыл" в конце последовательности. 2 просмотр - просматриваем последовательность 2361, сравнивая слева
направо два соседних элемента и переставляя их, если надо:
88
1 |
сравнение: |
2361 |
|
|
|
2 |
сравнение: 2361 |
|
|
|
|
3 |
сравнение: |
2361 |
---> |
2316 |
|
|
Наибольший элемент 6 "всплыл" в конце последовательности. |
||||
3 просмотр - просматриваем последовательность 231, сравнивая слева |
|||||
направо два соседних элемента и переставляя их, если надо: |
|||||
1 |
сравнение: |
231 |
|
|
|
2 |
сравнение: |
231 |
---> |
213 |
|
|
Наибольший элемент 3 "всплыл" в конце последовательности. |
||||
4 просмотр - просматриваем последовательность 21, сравнивая слева |
|||||
направо два соседних элемента и переставляя их, если надо: |
|||||
1 |
сравнение: |
21 |
---> |
12 |
|
|
Наибольший элемент 2 "всплыл" в конце последовательности. |
||||
Итак, для последовательности из |
n |
элементов число просмотров равно (n-1). В |
|||
каждом к-ом просмотре производится |
(n-к) сравнений первых элементов. В результате |
каждого просмотра в конце текущей просматриваемой последовательности "всплывает" наибольший элемент.
Ниже дано подробное словесное описание полученного алгоритма.
1 просмотр. Последовательность из n элементов просматривается слева направо. Каждые 2 соседних элемента a[i] и a[i+1] сравниваются (то есть 1-ый и 2-ой, 2-ой и 3-ий и т.д.) и, если a[i] > a[i+1], то эти элементы переставляются. В результате наибольший элемент "всплывает" в конце рассматриваемой последовательности из n элементов.
2 просмотр. Последовательность из (n-1) первых элементов просматривается слева направо. Каждые 2 соседних элемента a[i] и a[i+1] сравниваются (то есть 1-ый и
2-ой, |
2-ой и 3-ий и т.д.) и, если a[i] > a[i+1], то эти элементы переставляются. В |
||||
результате наибольший элемент "всплывает" |
в |
конце |
рассматриваемой |
||
последовательности из (n-1) элементов. |
|
|
|
||
.... |
|
|
|
|
|
(n-1)ый просмотр. Последовательность из n-(n-2)=2, |
то |
есть |
из 2-х элементов |
||
просматривается слева направо.... |
|
|
*) |
||
PROGRAM UP (I,O); |
|
|
|
||
VAR |
a:array[1..100] of real; (* Массив |
*) |
|
||
n:integer; |
(* Количество элементов в массиве *) |
|
|||
i, |
(* i - количество сравнений в каждом просмотре *) |
|
|||
k:integer; (* к - номер просмотра |
|
*) |
|
||
c:real; |
(* Вспомогат. переменная для перестановки 2-х элементов *) |
||||
begin |
|
|
|
|
|
(* Ввод массива *)
write ( 'Введите количество элементов n = '); readln (n);
writeln ('Введите ',n,' элементов' );
writeln ('После набора очередного элемента нажмите <вк>' ); for i:=1 to n do readln(a[i]);
(* Сортировка массива *) for k:=1 to n-1 do
for i:=1 to n-k do
if a[i] > a[i+1] then begin
c:= a[i]; a[i]:= a[i+1]; a[i+1]:=c; end;
(* Вывод массива после сортировки *) writeln (' номер и элемент' );
89
for i:=1 to n do writeln(' ',i,' ',a[i]) end.
Пример 15.
(* Работа с целыми числами: выделить отдельные цифры целого положительного числа n.
Ниже дан фрагмент программы. |
|
|
|
*) |
|||
... |
|
|
|
|
|
|
|
var n, |
(* n - исходное число |
|
*) |
|
|||
i:integer; (* i - индекс в массиве с |
|
*) |
|
||||
c:array[1..5] of integer; (* массив из цифр числа n *) |
|
||||||
... |
|
|
|
|
|
|
|
begin |
|
|
|
|
|
|
|
readln(n); |
(* Ввод исходного числа n |
*) |
|
||||
i:=1; |
|
|
|
|
|
|
|
repeat |
|
|
|
|
|
|
|
c[i]:=n mod 10; (* Выделение последней младшей цифры *) |
|
||||||
n:=n div 10; (* "Отбрасывание" выделенной цифры; например, |
|
||||||
i:=i+1; |
было n=125, стало n=12 |
*) |
|
||||
|
|
|
|
|
|
||
until n=0; |
|
|
|
|
|
|
|
... |
|
|
|
|
|
|
|
(* При выходе из цикла имеем: |
|
|
|
|
|||
c[1] |
- младшая цифра исходного числа, |
|
|
||||
... |
|
|
|
|
|
|
|
c[i-1] - старшая цифра исходного числа, |
|
|
|||||
(i-1) |
- количество цифр в числе |
|
*) |
|
|||
Пример 16. |
|
|
|
|
|
|
|
(* Работа с полиномом *) |
|
|
|
|
|
||
(* Для задания полинома (многочлена) |
|
|
|
||||
Pn(x) = c[0]+c[1]* x1 +c[2]* x2 +...+c[n]* xn |
|
|
|||||
достаточно указать его степень n |
и массив коэффициентов (c[0],c[1],...c[n]). |
||||||
|
Задание |
|
|
|
+...+a[n]* xn . |
|
|
Дан полином Pn(x) = a[0]+a[1]* x1 |
+a[2]* x2 |
2 |
|||||
Получить другой полином, сделав в исходном замену переменной x |
на t . |
||||||
|
Обозначения |
+a[2]* x2 +...+a[n]* xn , а именно: |
|
||||
Дано: Pn(x) = a[0]+a[1]* x1 |
|
||||||
n - степень полинома, целое положительное число; |
|
||||||
a[0],a[1],...a[n] - коэффициенты полинома, произвольные числа, причем |
|||||||
|
|
старший коэффициент |
a[n] не равен 0. |
|
|||
Получить: Sm(t) = b[0]+b[1]* t1 +b[2]* t2 |
+...+b[m]* t m , а именно: |
|
|||||
m - степень полинома; |
|
|
|
|
|||
b[0],b[1],...b[m] - коэффициенты полинома. |
|
||||||
|
Математическая постановка |
|
|
|
|||
Sm(t)=Pn(t ) = a[0]+a[1]* t2 |
+a[2]* t 4 +...+a[n]* t 2n . |
|
|||||
Итак: 1) степень: |
m=2*n; |
|
|
|
|
|
|
2) коэффициенты: |
|
|
|
|
|
||
|
b[0]=a[0] |
b[1]=0 |
|
|
|
||
|
b[2]=a[1] |
b[3]=0 |
|
|
|
||
|
b[4]=a[2] |
b[5]=0 |
|
|
|
||
|
. . . . . . . . . |
|
|
|
|
|
b[m-1]=0
b[m]=a[n]
Это значит, что коэффициенты нового полинома при нечетных индексах (i=1,3,5...)
равны 0, а при четных индексах (i=0,2,4...) b[i]=a[i div 2].
90