Нестандартные операции
Иногда оказывается, что не все операции реализованы в выбранном языке программирования. В этих случаях их надо реализовывать самим (через другие операции):
ctg(x) ---à 1/tg(x)
ax --- как? ----------a = elna --à ax = (elna)x = elna*x = exp(ln(a)*x). Эта формула может без ошибок применяться не во всех ситуациях:
1) a>0, x>0 – приведенная формула соответствует (применима) только (к) этой ситуации
2) a>0, x<0 необдуманное применение формулы в этих ситуациях приведет к ошибке
3) a<0, x>0 (при x<0 ax ≡ 1/ax, при a<0 логарифм от a не определен)
4) a<0, x<0
Если x > 0 и x - целое, то для вычисления ax можно поступить так:
var
s: longint; //результат ax
a: integer;
x: word;
i: word; //счетчик циклов
begin
s := 1; //инициализация результата ax
for i := 1 to x do
s := s*a;
......... a*a*a*a...*a
x раз
10.5 Индексы в математике и в программах.
В математике индексы обычно используются в одном из трех случаев:
1) для обозначения номеров элементов вектора:
Х1 Х2 Х3 |
вектор с именем Х (на Паскале Var
x: array[1..10] of integer;
begin
Х1 - 1-й элемент вектора X x[1] := 5;
2) для обозначения номеров элементов последовательности промежуточных значений некоторой переменной. Например, пусть S1,S2,S3 промежуточные стадии переменной S (в которой в конце концов мы должны получить сумму элементов вектора Х)
n
S= Xi
i=1
S1=X1
S2=S1+X2
S3=S2+X3
………….
3) когда индексы используются для комментария.Так в формуле для вычисления скорости
V := V0 + at
индекс 0 при переменной V0 означает общепринятое обозначение начального значения скорости. В этом смысле ноль является комментарием (символом начального значения).
Из трех выше рассмотренных случаев использования индексов необходимо два исключать (убирать индексы) при переводе программы с языка математики на язык алгоритма.
1) S = Xi
В данном случае если вспомнить правило выполнения оператора присваивания, то можно переписать выражение без лишних индексов, например, S2:=S1+X2 --> значение S1 нам дальше не потребуется --> S:=S+X2
Таким образом, надо будет заменить
S1=X1---------> S = X1
S2=S1+X2----> S = S + X2
S3=S2+X3----> S = S + X3
………….
Замечание: Индексы Х нужно использовать только если x – именно вектор. Если же Х1, Х2, ... – это разные значения одной и той же переменной (последовательности), то индексы у Х можно так же убрать, но на каждом шаге надо выполнять не одно, а два действия:
а) получение нового значения Х ------------- Х := Х + h; или Readln(x);
б) S := S + X
2) В случае использования индексов в качестве комментариев, их так же можно исключить благодаря дискретному характеру вычислений (в пределах одного и того же шага выполнения программы никогда V0 и V встретиться не могут, т.е. Vконечное и Vначальное – это разные значения одной и той же переменной V) можно заменить:
V=V0+AT V=V+AT
Вывод: при переводе программы алгоритмов с языка математики из трех случаев используемых индексов оставить только один, когда индекс используется в качестве элемента вектора.
Строки
Строка (строковая константа) - это последовательность символов, заключенных в кавычки. Объявляются переменные строкового типа с использованием ключевого слова string одним из двух способов:
1 способ:
Var
s: string:
2 способ:
s: string [ 10 ];
максимальная длина строки
Если явно не указывать длину строки (как в первом случае) , то подразумевается, что максимальная длина строки = 255 символов .
В памяти строки хранятся в виде непрерывной цепочки (последовательности) символов (точнее, кодов символов). В начальном символе цепочки (этот символ имеет в ее пределах индекс = 0) содержится значение текущей длины строки. Под текущей длиной строки понимается текущее (максимальное указано при объявлении) количество символов в строке. Реально строка занимает не столько места, сколько в ней символов, а на 1 байт больше. В младшем байте находится размер строки (текущая длина).
ПРИМЕР.
Var
S:string[10];
S := ‘Строка’; - 6 символов
0 1 2 3 4 5 6 7 8 9 10
#6 ‘с’ ’т’ ’р’ ’о’ ’к’ ’а’
Текущая длина строки |
(тип Char)
Замечание: #6 – это символ с кодом 6 (символьная константа). Хранится это значение в виде целого беззнакового числа 6. Запись #6 используется потому, что каждый элемент строки должен иметь тип char.
>
Пустая строка на Паскале:
1) ее изображение в программе (в виде строковой константы): S := ’’ ;
2) ее хранение в памяти:
S:string[10];
0 1 2 3 4 5 6 7 8 9 10
#0
Текущая длина строки |
Существует возможность прямого доступа к каждому символу строки с использованием номера (индекса). Самый младший элемент строки (в нем хранится текущая длина строки) имеет индекс 0.
ПРИМЕР. Надо изменить значение 3- го символа строки:
S[3]:= ‘V’;
тип элемента строки равен char
Таким образом, присваивание S:=’строка’ равносильно следующей последовательности присваиваний:
s[1]:=’c’;
s[2]:=’т’;
s[3]:=’р’;
s[4]:=’о’;
s[5]:=’к’;
s[6]:=’а’;
s[0]:=#6; //не надо забывать делать
Действия, выполняемые над строками:
Дата добавления: 2016-05-28; просмотров: 1787;