Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Характер использования переменных в математике и в программах.
В математике переменные имеют статический характер, т.е. за каждой переменной формулой закрепляется только одно значение. Так происходит потому, что переменные в математике памяти не имеют. Поэтому в математике под каждое значение выделяется отдельное имя. А в программах переменные имеют память, содержимое этой памяти может изменяться, и одна и та же (каждая) переменная в ходе (течении) выполнения программы может принимать разные значения (в разные моменты выполнения программы). Поэтому в программах вместо 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) для обозначения номеров элементов вектора:
вектор с именем Х (на Паскале 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; Нарушение авторского права страницы