Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Характер использования переменных в математике и в программах.



В математике переменные имеют статический характер, т.е. за каждой переменной формулой закрепляется только одно значение. Так происходит потому, что переменные в математике памяти не имеют. Поэтому в математике под каждое значение выделяется отдельное имя. А в программах переменные имеют память, содержимое этой памяти может изменяться, и одна и та же (каждая) переменная в ходе (течении) выполнения программы может принимать разные значения (в разные моменты выполнения программы).

Поэтому в программах вместо

c: = a + b;

можно писать

a: = a + b;

если значение переменной a дальше хранить не нужно.

 

Бесконечности

При записи (вычислении) выражений надо учитывать точность (разрядность) результата и возможность получения бесконечностей.

Поэтому

- перед выполнением деления надо проверить знаменатель на ноль

- вычисление n! при n=100 скорее всего вызовет переполнение разрядной сетки для целочисленной переменной n.

 

 

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

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

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-07-12; Просмотров: 605; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.04 с.)
Главная | Случайная страница | Обратная связь