Как сделать умножение на паскале

Обновлено: 07.07.2024


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

Выражения, операнды, операции.

Операнд - величина, представляемая собой объект операции, реализуемой ЭВМ в ходе выполнения программы вычислений.

Переменные и константы всех типов используются в выражениях. Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций. Операции определяют действия, которые надо выполнить над операндами. Например, в выражении (X + Y - 10) X, Y и 10 - операнды; "+", "-" - знаки операций сложения и вычитания.

В простейшем случае выражение может состоять из одной переменной или константы. Круглые скобки ставятся так же, как и в обычных арифметических выражениях для управления ассоциативностью и порядком выполнения операций.

Операции в языке Паскаль подразделяются на арифметические, отношения, логические (булевские), операцию @ (указатель), строковые и т.д. в зависимости от того, какого типа операнды и операции в них используются.

Операции могут быть унарными и бинарными. В первом случае операция относится к одному операнду и всегда записывается перед ним, во втором операция выражает отношение между двумя операндами и записывается между ними.

6.1. Арифметические выражения и операции.

Выражения - это конструкции, определяющие действия, которые должны быть выполнены для вычисления величин. Поскольку результатом выполнения этих действий будет величина, само выражение можно считать конструкцией, представляющей величину.

Арифметическое выражение порождает целое или действительное значение. Наиболее простыми формами арифметических выражений являются: целая или действительная константа без знака; целая или действительная переменная; элемент массива целого или действительного типа; функция, принимающая целое или действительное значение.

Значение переменной или элемента массива должно быть определено до их появления в арифметическом выражении. Другие арифметические выражения составляются из вышеперечисленных простых форм путем применения круглых скобок и арифметических операций.

Арифметические операции выполняют арифметические действия в выражениях над значениями операндов целочисленных и вещественных типов. Арифметические операции языка Паскаль представлены в виде следующей таблицы:

Операция Действие Типы операндов Тип результата
Бинарные
+ сложение целый
вещественный
целый
вещественный
- вычитание целый
вещественный
целый
вещественный
* умножение целый
вещественный
целый
вещественный
/ деление целый
вещественный
вещественный
div целочисленное деление целый целый
mod остаток целый целый
and арифметическое И целый целый
shl сдвиг влево целый целый
shr сдвиг вправо целый целый
or арифметическое ИЛИ целый целый
xor исключающая дизъюнкция целый целый
Унарные
+ сложение целый
вещественный
целый
вещественный
- вычитание целый
вещественный
целый
вещественный
not сложение целый целый

Действие Пример
Сохранение знака +A
Изменение знака -A
Сложение A + B
Вычитание A - B
Умножение A * B
Деление A / B
Целочисленное деление A div B
Остаток от целочисленного деления A mod B

Целочисленное деление (div) отличается от обычной операции деления тем, что возвращает целую часть частного, дробная часть отбрасывается. Перед выполнением операции оба операнда округляются до целых значений. Результат целочисленного деления всегда равен нулю, если делимое меньше делителя.
11 div 5 = 2
10 div 3 = 3
2 div 3 = 0

Деление по модулю (mod) возвращает остаток, полученный при выполнении целочисленного деления, иначе говоря I mod J = I - (I div J) * J. Если J = 0, то возникает ошибка.
11 mod 5 = 1
10 mod 3 = 1
14 mod 5 = 4

Арифметическое "И" (and) производит логическое умножение операндов в соответствии со следующей таблицей истинности:
1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0

Операнды записываются в десятичной форме, но во время выполнения переводятся в двоичную форму. Результат представлен в десятичной форме.Пример:
Вычислить результат выражения A and B, если A = 12 и B = 22.
A и B занимают в памяти 2 байта и в двоичной форме имеют вид: 000000000001100 и 000000000010110. В результате выполнения операции 000000000001100 and 000000000010110 в соответствии с таблицей истинности получим результат 0000000000000100, или 4 в десятичной форме. Следовательно, 12 and 22 = 4.

Сдвиг влево (K shl N) восстанавливает в качестве результата значение, полученное путем сдвига на N позиций влево представленного в двоичной форме числа K.
Пример: Вычислить результат выполнения выражения 2 shl 7.
Число 2 занимает в памяти 2 байта и в двоичной форме имеет вид 000000000000010. Сдвигаем каждый бит на 7 позиций влево, получаем 000000010000000, что соответствует числу 256 в десятичной форме. Следовательно, 2 shl 7 = 256.

Сдвиг вправо (shr) выполняется аналогично, с той лишь разницей, что сдвиг производится вправо.
160 shr 2 = 40
90 shr 2 = 22
256 shr 7 = 2

Логическое сложение (or) выполняет сложение операндов в двоичной форме в соответствии с таблицей истинности:
1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0
Результат представлен в десятичной форме. Пример:
Вычислить результат выполнения выражения 12 or 22.
12 и 22 занимают в памяти по 2 байта и в двоичной форме имеют вид: 000000000001100 и 000000000010110 соответственно. Выполнив сложение в соответствии с таблицей истинности, получим двоичное значение суммы 0000000000011110, что соответствует числу 30 в десятичной форме. Следовательно, 12 or 22 = 30.

Исключающее "ИЛИ" (xor) производит сложение операндов в соответствии с таблицей истинности:
1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0
Результат преобразовывается в десятичную форму.
Пример: Вычислить результат выполнения выражения 12 xor 22. 12 и 22 занимают в памяти 2 байта и в двоичной форме имеют вид: 000000000001100 и 000000000010110 соответственно. Выполнив сложение по таблице истинности, получим двоичное значение суммы: 0000000000011010 или 26 в десятичной форме. Следовательно, 12 xor 22 = 26.

Применение операции not к данным целочисленных типов вызывает побитную инверсию (отрицание) соответствующего данному числу двоичного кода.
not 0 = -1
not 78 = -79
Пример: Вычислить результат выполнения выражения not 78.
Число 78 занимает в памяти 2 байта и в двоичной форме имеет вид: 0000000001001110. При выполнении операции все 0 заменяются на 1, а 1 - на 0 соответственно. После выполнения операции not 78 получим: 1111111110110001, что соответствует числу -79 в десятичной форме.

В любом выражении, если один или более операндов имеют вещественный тип, то результат будет тоже вещественного типа. В операциях div и mod оба операнда должны быть целого типа.

В Турбо Паскале нет операции возведения в степень. При необходимости ее использования применяют стандартные функции:
X^A (x в степени а) = Exp(A * Ln(X));

Однако таким образом нельзя возвести в целую степень отрицательное число (это можно сделать с использованием операторов цикла).

6.2. Выражения и операции отношения.

Выражения отношения определяет истинность или ложность результата. Операции отношения выполняют сравнение двух операндов и определяют, истинно ли значение выражения или ложно. В языке Паскаль операции отношения и булевские операции важны, так как они интенсивно используются для управления циклами и в условных операторах.

Сравниваемые величины могут принадлежать к любому скалярному или перечисляемому типу данных. Результат всегда имеет булевский тип и принимает одно из двух значений: True (истина) или False (ложь).

Операции отношения
Операция Название Выражение Результат
= равно A = B True, если A равно B
<> не равно A <> B True, если A не равно B
меньше A True, если A меньше B
> больше A > B True, если A больше B
меньше или равно A True, если A меньше или равно B
>= больше или равно A >= B True, если A больше или равно B
in принадлежность True, если A находится в списке M

6.3. Логические выражения и операции.

Логические выражения строятся из логических констант и переменных, логических операций и операций отношения. В операциях отношения могут участвовать арифметические и логические выражения, а также символьные данные.

Результатом выполнения логического (булевского) выражения является логическое значение True или False. Операндами служат данные только булевского типа.

Простейшими видами логических выражений являются следующие: логическая константа; логическая переменная; элемент массива логического типа; логическая функция; выражение отношения. Другие логические выражения строятся из вышеперечисленных путем применения логических операций и круглых скобок.

Список логических операций
Операция Действие Выражение A B Результат
not Логическое отрицание not A True
False
False
True
and Логическое "И" A and B True
True
False
False
True
False
True
False
True
False
False
False
or Логическое "ИЛИ" A or B True
True
False
False
True
False
True
False
True
True
True
False
xor Исключающее "ИЛИ A xor B True
True
False
False
True
False
True
False
False
True
True
False

Логические операции not, and, or, xor могут выполняться не только над логическими операндами (A, B), но и над целыми числами. В этом случае выполняются соответствующие побитовые операции с учетом двоичного представления операндов.

При выполнении операций отношения оба операнда (A, B) должны быть одного и того же типа. Допускается лишь одно исключение: A - целого типа, B - вещественного (и наоборот).

Операции div и mod определены только для целочисленных операндов. Приведем пример их использования:

var y , c , n : integer ;

Здесь переменная c получит значение 20 , а n -- значение 9 .

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

Стандартные функции служат для выполнения элементарных математических расчетов, часто требуемых при написании программ. Разработчики Паскаля стремились сделать его программное ядро максимально компактным, поэтому в него не вошел ряд функций, обычно имеющихся в других языках, таких, как вычисление максимума и минимума, возведение числа в произвольную степень и др. Физически коды стандартных функций хранятся в стандартной библиотеке Паскаля -- файле с именем turbo . tpl . Все функции оформляются одинаково: после имени функции следует ее аргумент, заключенный в круглые скобки. Если аргументов несколько, они разделяются запятыми. Информация об основных стандартных функциях представлена в табл. 3.2.

Табл. 3.2. Стандартные функции языка Паскаль

Запись на Паскале

аргумента и результата

Модуль аргумента x

Integer (I) или Real (R)

Квадрат аргумента x

аргумент - I или R , результат - r

Остальные тригонометрические функции выражаются через эти

аргумент - I или R , результат - R

Экспонента и натуральный логарифм

аргумент - I или R , результат - R

Квадратный корень от аргумента x

аргумент - I или R , результат - R

Функция без аргументов, вернет число p

Функция отбрасывает дробную часть аргумента, аргумент не округляется

аргумент R, результат I

дробную часть своего

Округление вещественного числа до ближайшего целого

аргумент R, результат I

В табл. 3.2 x обозначает любую подходящую по типу переменную, либо результат вычисления выражения соответствующего типа, либо соответствующий по типу результат, вычисленный другой стандартной функцией.

Приведем примеры арифметических выражений.

1. Возвести величину x в пятую степень. Выражение может быть записано как x * x * x * x * x или sqr ( x )* sqr ( x )* x или sqr ( sqr ( x ))* x , последнее показывает, что результаты одних функций могут быть аргументами других -- это называют вложением функций. Разумеется, тип результата, возвращаемый вложенной функцией, должен быть подходящим для аргумента внешней функции.

2. Возвести величину a в произвольную степень x . Так как в Паскале нет функции возведения в произвольную степень, воспользуемся формулой a x = e x * ln a :

Обратите внимание, что все круглые скобки в выражении должны быть парными. Другой пример применения этого способа: = exp (1/3 * ln ( x )) .

3. Вычислить sin 2 x . Запись на Паскале: sqr ( sin ( x )) . Сравните с выражением sin x 2 , которое записывается как sin ( sqr ( x )) .

4. Вычислить k = tg ( t ). Т. к. функции тангенса в Паскале нет, распишем тангенс в виде k := sin ( t )/ cos ( t ); .

5. При необходимости изменить обычное старшинство операций в записи выражения используются дополнительные круглые скобки. Например, правильная запись выражения выглядит как y :=( a + b )/2; . Запись y := a + b /2; неверна, т. к. это означает .

6. В записи выражений нельзя пропускать знак *, как часто делается в математике: b 2 -4 ac записывается как sqr ( b )-4* a * c . Нельзя писать sin * x или sin x , после имени функции может следовать только ее аргумент в круглых скобках.

Тип выражения определяется старшим из типов входящих в него операндов (т. е., стандартных функций, переменных, констант). Старшинство типов можно определить по табл. 2.1, напомню, что в первой строке таблицы находится самый младший тип.

Например, для переменных

var i , j : integer ; f : real ;

выражение i +4* j имеет целый тип, и его результат можно записать в целую переменную. Выражение f + i *0.5 дает вещественный, результат, который должен быть записан в вещественную переменную.

Операция деления / в Паскале всегда дает вещественное число. Для деления целых чисел с целым результатом (остаток отбрасывается) используйте div , для взятия остатка от деления двух целых -- mod .

Пользовательские процедуры и функции. При написании программ со сложными математическими вычислениями становится очевидным, что математических функций встроенных в Turbo Pascal, явно недостаточно. Нет, например такой функции, как y = x n . В процессе вычислений можно конечно задействовать такую формулу возведения в степень: y := exp(n*(ln(x)); но при частом использовании такой формулы в программе легко запутаться, особенно если нужно использовать разные аргументы.
Turbo Pascal предусматривает создание пользовательских процедур и функций. Рассмотрим создание функции возведения числа х в произвольную степень n (n >=0). Функция на паскале должна быть объявлена до начала программы, то есть до оператора begin.
Функция описывается следующим образом:
function имя функции (аргумент : тип аргумента) : возвращаемый тип данных;
var
раздел локальных переменных (если нужен);
begin
тело функции;
end;
В нашем случае с вычислением степеней, функция будет выглядеть так:
function stepen(x,n: real): real;
begin
stepen:= exp(n*ln(x));
end;
Теперь, напишем программу с использованием нашей функции.
uses crt;
function stepen(x,n: real): real;
begin
stepen:= exp(n*ln(x));
end;
var
rez,osn, pok: real;
begin
clrscr;
write('Wwedi osnowanie');
readln(osn);
write('Wwedi pokazatel');
readln(pok);
rez:= stepen(osn,pok);
writeln('rezultat= ',rez:0:2);
readln;
end.
Результат работы программы:

Используя уже написанные пользовательские функции можно создавать другие функции. Например, в нашем случае, мы можем написать функцию извлечения корня с произвольным показателем k (k <> 0) из любого числа q.
Известно, что q 1/k = q Исходя из этих соображений напишем функцию извлечения корня:
function koren(q,k: real): real;
var
kr: real;
begin
kr:= 1 / k;
koren:= stepen(q,kr);
end;
Так как, функция koren, использует функцию stepen, то в тексте программы, функция koren должна быть описана после описания функции stepen. Дополним и изменим нашу программу, с учётом вычисления не степени, а корня:

Процедуры в паскале, то-же, что и функции, но процедуры не возвращают никаких значений. Описываются процедуры так же, как и функции, в начале программы:

Всё работает без ошибок но вот подсчитывает не правильно(
Я себе уде всю голову сломал но не смог найти ошибку.
Зарание спасибо за помощ

Если Вы не разобрались в коде и не понимаете, что означает термин "длинные" числа, то будьте добры, не давайте бесполезных советов!

SeRhy
1) нужны ли промежуточные результаты (я вижу, Вы пытаетесь по строчкам записать результаты умножения в двухмерный массив).

2) ОЧЕНЬ рекомендую Вам заполнить массивы нулями и записывать исходные числа начиная с конца массивов mas1 и mas2.

Читайте также: