Нестандартные операции


Иногда оказывается, что не все операции реализованы в выбранном языке программирования. В этих случаях их надо реализовывать самим (через другие операции):

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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.018 сек.