Что такое rez в паскале
Урок 1. Первая программа на языке Паскаль
Урок из серии: «Язык программирования Паскаль»
Для начала написания непосредственно кода программы надо знать ее структуру: как правильно записываются команды, в каком порядке.
На первом занятии вы узнаете:
Для создания программ можно использовать среду программирования Pascal ABC.
Структура программы
Программа на языке Паскаль начинается с заголовка, имеющего следующий вид:
За ним идет раздел описаний, в котором должны быть описаны все идентификаторы (константы, переменные, типы, процедуры, функции, метки), которые будут использованы в программе.
После раздела описаний идет раздел операторов, который начинается со служебного слова begin (начало) и заканчивается служебным словом end (конец).
В этом разделе задаются действия над объектами программы, описанными в предыдущем разделе. Операторы в этом разделе отделяются друг от друга точкой с запятой. После последнего слова end ставится точка.
Общий вид программы:
В разделе описаний не обязательно должны быть все разделы.
В наших первых программах будет только один раздел — раздел Var (variable — переменная), в котором мы будем объявлять те переменные, которые будем использовать в разделе операторов.
Как написать простейшую программу
Рассмотрим простейшую задачу с линейным алгоритмом.
Для записи программы с линейным алгоритмом нам нужно описать входные и выходные данные, нужны процедуры для вводы и вывода данных и оператор присваивания.
Задача. Ввести с клавиатуры два числа. Вывести на экран их произведение.
Пояснения к программе
Имя этой программы example_1.
Из разделов описаний имеется лишь один — раздел переменных. Он начинается со служебного слова var, после которого идет последовательность объявления переменных, разделенных точкой с запятой.
В каждом объявлении перечисляются через запятую имена переменных одного типа, после чего ставится двоеточие и указывается тип переменных.
В нашем примере описаны три переменные: все они (a, b и rez) имеют целый тип (integer).
После описательной части идет раздел операторов, начинающийся со служебного слова begin.
Первый встречающийся оператор — это writeln(‘текст’); — записать (вывести) на экран текст, заключенный между апострофами, ln добавляется в конце этого оператора для того, чтобы курсор автоматически переходил на следующую строку при выводе на экран текстов или результатов выполнения программы.
Следующий оператор — это readln(a,b); — читать данные с клавиатуры.
В данном случае во время выполнения программы необходимо ввести два целых числа через пробел, тогда переменной a присваивается значение, равное первому введенному числу, а переменной b присваивается значение, равное второму введенному числу.
Например, вы ввели числа 12 и 45, тогда a = 12, а b = 45. В конце этого оператора также можно ставить ln.
Следующий оператор — это снова оператор writeln(‘текст’,rez) — он выведет на экран текст, заключенный между апострофами, а за ним значение переменной rez.
Затем следующий оператор writeln выведет на экран сообщение: »Нажмите », а оператор readln будет ожидать этого нажатия в окне выполнения.
Завершает раздел операторов end с точкой.
Выполнение программы
После запуска программы на экране появляется сообщение:
Введите два целых числа через пробел
Коротко о главном
Программа на языке Pascal состоит из заголовка, раздела описаний и раздела операторов.
Если программа содержит несколько операторов, то они разделяются знаком точки с запятой.
Начало и конец раздела операторов обозначаются ключевыми словами begin и end. После слова end в конце текста программы всегда ставиться точка. Она означает, что программа закончена.
Команда вывода на экран — write(‘текст’) и writeln(‘текст’) отличаются положением курсора после выполнения команды. Команда write(‘текст’) оставляет курсор на той же строке, что и текст, а writeln переводит курсор на новую строку.
Компиляция выполняется клавишей F9. Для выполнения программы надо нажать Ctrl+9.
Pascal: Занятие № 12 Часть1. Работа с файлами в паскале (текстовые файлы)
Работа с файлами в паскале
Виды файлов в зависимости от их описания и режимом работы
Описание файловых переменных:
Для связи файла в коде программы и действительного файла на внешнем носителе используется процедура ASSIGN :
где myfile — имя переменной (объявленной ранее в области var ), ассоциированной с файлом
c:\text.txt — путь к реальному файлу
Первый аргумент процедуры assign в паскаль — переменная, второй – путь к файлу на диске.
Для считывания из файла достаточно связать поток ввода с файлом:
Считывание строки | Считывание массива из N целых | ||||||||||||||||||||||||||||||||||||||||
Тип | Диапазон | Требуемая память (байт) |
byte | 0..255 | 1 |
shortint | -128..127 | 1 |
integer | -32768.. 32767 | 2 |
word | 0..65535 | 2 |
longint | -2147483648..2147483647 | 4 |
Нужно иметь в виду, что при написании программ в паскале integer (в переводе с англ. целое) является наиболее часто используемым, так как диапазон значений наиболее востребуем. Если необходим более широкий диапазон, используется longint (long integer, в переводе с англ. длинное целое). Тип byte в Паскале используется, когда нет необходимости работать с отрицательными значениями, то же самое касается и типа word (только диапазон значений здесь значительно больше).
Примеры того, как описываются (объявляются) переменные в Паскале:
Pascal | PascalABC.NET | ||||||||||||||||||||
Pascal | PascalABC.NET | ||||||||||||||||||
ДЕЙСТВИЕ | РЕЗУЛЬТАТ | СМЫСЛ |
---|---|---|
2 + 3 | 5 | плюс |
4 — 1 | 3 | минус |
2 * 3 | 6 | умножить |
17 div 5 | 3 | целочисленное деление |
17 mod 5 | 2 | остаток от целочисленного деления |
Порядок выполнения операций
var a: integer; b: real; begin a := 1; writeln(‘a := 1; a = ‘,a); a += 2; // Увеличение на 2 writeln(‘a += 2; a = ‘,a); a *= 3; // Умножение на 3 writeln(‘a *= 3; a = ‘,a); writeln; b := 6; writeln(‘b := 6; b = ‘,b); r /= 2; writeln(‘b /= 2; b = ‘,b); end.
Стандартные арифметические процедуры и функции Pascal
Здесь стоит более подробно остановиться на некоторых арифметических операциях.
Пример операции inc:
Более сложное использование процедуры inc:
Inc(x,n) где x — порядкового типа, n — целого типа; процедура inc увеличивает x на n.
Пример использования функции odd:
begin WriteLn(Odd(5));
Пример использования процедуры sqr в Pascal:
var x:integer; begin x:=3; writeln(sqr(x)); <ответ 9>end.
Однако в компиляторе pascal abc возведение в степень осуществляется значительно проще:
Пример использования процедуры sqrt в Pascal:
var x:integer; begin x:=9; writeln(sqrt(x)); <ответ 3>end.
Длинная арифметика
автор: Качанова Елена Ивановна
Известно, что арифметические действия, выполняемые компьютером в ограниченном числе разрядов, не всегда позволяют получить точный результат. Более того, мы ограничены размером (величиной) чисел, с которыми можем работать.
Диапазон представления целых чисел (Integer, Word, LongInt) ограничен. Поэтому при решении задач всегда приходится действовать с оглядкой, — как бы не допустить возникновения ошибки выхода за диапазон или переполнения. Например, вычисляя факториал (n! = 1 * 2 * 3 * … * n), в диапазоне представления величин типа Integer удастся правильно получить только 7! = 5040, а в диапазоне представления типа LongInt — 12! = 479001600. Для больших значений, конечно, можно использовать действительные типы данных, но это уже не гарантирует точного результата.
А если нам необходимо выполнить арифметические действия над очень большими числами, например,
30! = 265252859812191058636308480000 000?
Поэтому полезно для получения точных значений при действиях с многозначными числами разработать другие способы представления таких чисел, алгоритмы выполнения арифметических и других операций, процедуры ввода и вывода результатов и т.д.
В таких случаях мы сами должны позаботиться о представлении чисел в машине и о точном выполнении арифметических операций над ними.
Числа, для представления которых в стандартных компьютерных типах данных не хватает количества двоичных разрядов, называются «длинными». Реализация арифметических операций над такими «длинными» числами получила название «длинной арифметики».
Организация работы с «длинными» числами во многом зависит от того, как мы представим в компьютере эти числа. «Длинное» число можно записать, например, с помощью массива десятичных цифр, количество элементов в таком массиве равно количеству значащих цифр в «длинном» числе. Но если мы будем реализовывать арифметические операции над этим числом, то размер массива должен быть достаточным, чтобы разместить в нем и результат, например, умножения.
Покажем реализацию решения такого рода задач на примере умножения одного многозначного числа на другое. Именно эта арифметическая операция наиболее часто используется при решении других задач.
Наиболее естественным способом представления многозначного числа является запись каждого его разряда в виде отдельного элемента линейного массива. Пусть (для удобства дальнейших действий) разряды «длинного» числа при записи в массив нумеруются с единицы, начиная с разряда единиц, т.е. цифра из разряда единиц — элемент массива с номером один, цифра из разряда десятков — элемент массива с номером два и т.д. Определим для работы с «длинными» неотрицательными числами тип данных:
Dl_Ch = Array[1..Nmax] Of Digit;
Для решения поставленной задачи необходимо уметь выполнять следующие действия:
1) ввод «длинного» числа;
2) собственно умножение двух «длинных» чисел;
3) вывод «длинного» числа;
4) определение количества цифр в записи числа.
Каждую из подзадач реализуем в виде отдельной подпрограммы. Начнем с ввода. Ввести большое число целесообразно в виде строки, а в дальнейшем преобразовать в массив цифр (можно читать число из файла). В процедуре учтен указанный выше способ размещения «длинного» числа в массиве, т.е. с точки зрения пользователя число записывается как бы в обратном порядке.
Procedure Translate(S : String; Var A : Dl_Ch; Var F : Boolean);
Zero(A); I := Length(S); F := True;
While (I >= 1) And F Do
Прокомментируем эту процедуру на примере: S:=’5678′
После выполнения процедуры Translate цифры в массиве А расположатся следующим образом:
Procedure Zero(Var A : Dl_Ch);
For I := 1 To NMax Do A[I] := 0;
Таким образом, длинное число записано в массив, где впереди (в качестве элементов с большими номерами) стоят незначащие нули. При выполнении действий и выводе ответа они не учитываются.
Сейчас разработаем функцию определения количества значащих цифр в записи числа, поскольку она потребуется при реализации подпрограммы умножения.
Function Dlina(C : Dl_Ch) : Integer;
При ее разработке было использовано следующее соображение: если число не равно нулю, то количество цифр в его записи равно номеру первой цифры, отличной от нуля, если просмотр числа осуществляется от старшего разряда к младшему. Если же длинное число равно нулю, то получается, что количество цифр в его записи равно одной, что и требовалось.
Ну и, наконец, главная процедура. При составлении алгоритма используется идея умножения «столбиком», хотя в нашем варианте сложение выполняется не по окончанию умножения, а по ходу его, т.е. перемножив очередные цифры, сразу же добавляем результирующую цифру в нужный разряд и формируем перенос в следующий разряд.
A, B — множители, C — произведение>
Procedure umn(A, B : Dl_Ch; Var C : Dl_Ch);
Var I, J : Integer; P : Digit; Rez : 0..99;
For I := 1 To Dlina(A) Do
For J := 1 To Dlina(B) Do
запишем его в пока ещё свободный разряд>
Сейчас приведем листинг программы целиком.
Type Digit = 0..9; Dl_Ch = Array[1..Nmax] Of Digit;
Procedure Zero(Var A : Dl_Ch);
For I := 1 To NMax Do A[I] := 0;
Function Dlina(C : Dl_Ch) : Integer;
Procedure Print(A : Dl_Ch);
For I := Dlina(A) DownTo 1 Do Write(A[I] : 1);
Procedure Translate(S : String; Var A : Dl_Ch;
Zero(A); I := Length(S); F := True;
While (I >= 1) And F Do
Procedure Umn(A, B : Dl_Ch; Var C : Dl_Ch);
Var I, J : Integer; P : Digit; Rez : 0..99;
For I := 1 To Dlina(A) Do
For J := 1 To Dlina(B) Do
Write(‘Введите первый множитель: ‘);
ReadLn(S); Translate(S, M, Logic)
Write(‘Введите второй множитель: ‘);
ReadLn(S); Translate(S, N, Logic)
В приведенном листинге Print — процедура вывода длинного числа.
Для того чтобы прочитать исходное число из файла и результат писать в файл, достаточно изменить следующие процедуры и аккуратно прочитать числа:
Procedure Print(A : Dl_Ch);
For I := Dlina(A) DownTo 1 Do Write(f2,A[I] : 1);
Procedure Translate(Var A : Dl_Ch;
Var I,j,z : Word;s:char;
While not eoln(f1) And F Do
for j:=1 to (i-1) div 2 do
Процедура сложения двух «длинных» чисел может выглядить следующим образом:
Procedure Summa(A, B : Dl_Ch; Var C : Dl_Ch);
Var I, J,m : Integer; P : Digit; Rez : 0..99;
if Dlina (A)>Dlina(B) Then m:=Dlina(A)
В рассмотренных примерах для каждой цифры числа выделялось определенное место в таблице. Можно в каждой ячейке таблицы хранить по несколько цифр, например, по 3. Тогда основные процедуры обработки можно посмотреть в статье Окулова.
Pascal. Основы
Как и любой другой язык программирования, Паскаль имеет свой алфавит. Под алфавитом языка программирования понимают набор символов, с помощью которых могут быть образованы величины, выражения и операторы.
Алфавит языка Паскаль включает:
Для описания величин в языке Паскаль используются константы и переменные.
Константы – величины, не изменяющие своего значения в процессе выполнения программы.
Переменные – величины, в ходе выполнения программы могут быть неоднократно переопределены.
Типы констант и переменных
Паскаль позволяет использовать следующие типы констант и переменных:
Каждому из перечисленных типов соответствует свой набор операций по обработке данных. Так, для целочисленного и вещественного типов используются операции арифметических действий (сложение, вычитание, умножение, деление). Для логического типа выполняются операции and – логическое и, or – логическое или, xor – логическое исключающее или, not – логическое не.
Кроме того, Паскаль предусматривает возможность вычисления для каждого типа данных значений стандартных функций.
В данной таблице приведены стандартные арифметические функции.
Функция | Назначение |