Настройки среды, с которыми будет выполняться ваша программа.

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "Настройки среды, с которыми будет выполняться ваша программа."

Транскрипт

1 Лекция 1. Основы языка Пример простейшей программы на Delphi: {$apptype console} {$r+,o-} uses SysUtils; reset(input, input.txt ); rewrite (output, output.txt ); writeln( Hello, World! ); Рассмотрим эту программу по частям: Настройки компилятора. {$apptype console} {$r+,o-} Настройки среды, с которыми будет выполняться ваша программа. {$apptype console} - позволяет выводить и читать из консоли в среде, либо обновляет в среде подключенные файлы сразу после их изменения. r+/r- - включение/выключения режима строгой проверки ошибок Runtime error(переполнение типа, деление на 0, выход за границу массива и т.д.). Полезно включать при отладке программы. o+/o- - включение/выключение оптимизатора кода. По умолчанию включен. Полезно выключать при отладке. Подключение библиотек uses SysUtils; Позволяет использовать методы(функции, процедуры) из стандартных библиотек. Блок начинается со слова uses, затем через запятую перечисляются имена подключаемых библиотек(модулей). Основной код программы reset(input, input.txt ); rewrite (output, output.txt ); writeln( Hello, World! ); Страница 1 из 8

2 reset(input, input.txt ), rewrite (output, output.txt ) - перенаправляет ввод и вывод: ввод осуществляется из файла input.txt, вывод происходит в output.txt writeln( Hello, World! ) - выводит строку Hello, World! и делает перевод строки в выводе. write перевода строки не делает. Чуть более сложный пример: {$APPTYPE CONSOLE} {$r+,o-} uses SysUtils; type int = longint; arr = array[1100] of int; a : array[1100] of int; v, s, i, l, n, m : int; f : boolean; reset(input, input.txt ); rewrite (output, output.txt ); read(n, m); n := n * 1; l := 0; for i := 1 to n do a[i] := i; f := false; for i := 1 to m do read(v, s); if (not f) then write(i, ); f := true; l := i; if not f then write( 0 ); write (l); Разберем, что в нем появилось нового: Содание своих типов. type int = longint; Страница 2 из 8

3 arr = array[1100] of int; Позволяет давать короткие/удобные/просто другие имена для типов данных. Рекомендется по возможности обходиться без них либо не злоупотреблять и давать понятные имена. Блок описания переменных a : array[1100] of int; v, s, i, l, n, m : int; f : boolean; Начинается с ключевого слова. В следующих строках описываются переменные в формате имя переменной : тип данных; Если есть несколько переменных одного типа, их можно объявить так: имя переменной 1, имя переменной 2, имя переменной 3 : тип данных; В Delphi существуют следующие типы данных: Целочисленные типы: byte беззнаковый, размер - 1 байт short знаковый, размер - 1 байт word беззнаковый, размер - 2 байта smallint знаковый, размер - 2 байта longword беззнаковый, размер - 4 байта longint, integer знаковый, размер - 4 байта int знаковый, размер - 8 байт Вещественные типы данных: single - хранит до 7 значащих знаков double - хранит до 15 значащих знаков extended - хранит до 19 значащих знаков Логические типы данных представлены типом boolean, принимающим одно из двух значений: true или false. Символьные типы данных представлены типом char. Char - символ из таблицы ASCII с кодом то 0 до 255. Занимет 1 байт. Строки представлены типом string. Массивы. Тип array. Содержит в себе элементы одного типа. Одномерный массив: a : array[1100] of char; Двумерный массив: a : array[1100, 1100] of char; При объявлении массива в квадратных скобках указываются верхняя и нижняя граница индексов, по которым можно обращаться к этому массиву. НЕ РЕКОМЕНДУЕТСЯ использовать первый индекс отличный от 0 и 1. Оператор приведения к типу. При вычислении различных выражений бывает удобно изменять тип переменной в этом выражении. Это можно сделать, используя оператора приведения к типу type n ame(a). Пример: s : int64; i : longint; Страница 3 из 8

4 s := 0; for i := to do s := s + int64(i); Методы считывания: read(n) - считывает переменную из ввода. readln(n) - считывает переменную из ввода и переходит на следующую строку. Чтобы считать несколько переменных, нужно перечислить их через запятую. Арифметические операции: Сложение a + b. Вычитание a b. Умножение a b. Вычисление остатка от деления a на b a mod b. Определено только для целочисленных типов. Деление a на b нацело a div b. Определено только для целочисленных типов. Деление a/b. Результат - вещественное число. Унарный минус a. Логические и битовые операции: Все логические операции определены только для типа boolean. Оператор равно =. Оператор неравно <>. Оператор больше >. Оператор меньше <. Оператор больше либо равно >=. Оператор менбша лиюо равно <=. Логическое и a and b. Логическое или a or b. Логическое неравно a xor b. Логическое не not. Битовые операции and, or, xor, not выполняются, как логические, если рассматривать числа как массив логических переменных, 1 в разряде соответствует true, 0 f alse. Сдвиг влево shl и вправо shr. Сдвигает побитовую запись числа влево или вправо на указанное число знаков. Запись a shl b равносильна a 2 b, аналогично a shl b равносильна a div 2 b. Приоритеты операций: При вычислении любого выражения сначала выполняются выажения в скобках, затем действия операций с самым большим приоритетом справа налево. Затем так же вычисляются операции с меньшим приоритетом. Приоритеты операций(перечисления начинаются с наибольшего приоритета): приведение к типу унарный минус Страница 4 из 8

5 умножение, деление(включая взятие остатка и деление нацело) сложение, вычитание сдвиги влево и вправо операции сравнения побитовые и логические and, xor, or, not Условный оператор if. Имеет вид if условие then else условие должно иметь значение boolean и можеть быть любым выражением такого типа. Цикл for. Имеет вид: for i := l to r do i - переменная-счетчик цикла, которая в ходе выполнения цикла проходит по всем значениям от l до r. При этом, чтобы цикл выполнился хтя бы один раз, необходимо, чтобы l r Если нужно использовать цикл, в котором счетчик уменьшается от l до r, ключевое слово to нужно заменить на downto. Цикл while. Имеет вид; while условие do Выполняется, пока условие имеет значение true. break и continue. Ключевые слова break и continue имеют следующие функции: break прекращает выполнение цикла, в котором находится. Если этот цикл вложен в другие, то их выполнение продолжается. continue прекращает выполнение текущей итерации цикла и переходит на следующую итерацию. Пример: Страница 5 из 8

6 s := 0; for i := 1 to 100 do if (i mod 7 = 0) then break; s := s + i; Посчитает сумму всех чисел от 1 до 6. s := 0; for i := 1 to 100 do if (i mod 7 = 0) then continue; s := s + i; Посчитает сумму всех чисел от 1 до 100, которые не делятся на 7. Еще один пример программы на Delphi: {$APPTYPE CONSOLE} {$r+,o-} uses SysUtils; type int = longint; a : array[1100] of int; v, s, i, l, n, m : int; f : boolean; function get ( v : int ) : int; if a[v] = v then result := v; exit; a[v] := get(a[v]); result := a[v]; procedure unite (v, s : int); a[get(s)] := get(v); Страница 6 из 8

7 reset(input, input.txt ); rewrite (output, output.txt ); read(n, m); l := 0; for i := 1 to n do a[i] := i; f := false; for i := 1 to m do read(v, s); if (not f) and (get(v) = get(s)) then write(i, ); f := true; if get(v) <> get(s) then l := i; unite(v, s); if not f then write( 0 ); write (l); Процедуры и функции. Процедуры и функции подпрограммы, которые можно вызывать в почти любом(см. далее) месте вашей программы. Функция описывается так: function func(a : longint, b : char, c : longint) : longint; \\ объявление локальных переменных Каждая функция обязательно должна возвращать значение указанного типа. Возвращаемое значение хранится в переменной result, которая автоматически создается в каждой функции в Delphi. Процедура функция, которая ничего не возвращает. Процедуры описываются так: procedure proc(a : longint, b : char, c : longint); \\ объявление локальных переменных Страница 7 из 8

8 Переменные в заголовке называются параметрами функции(процедуры). Если перед именем параметра стоит ключево слово, то все изменения этого параметра внутри функции сохранятся после завершения этой функции. Вызов функции имеет вид: func(a, b, c); \\ a, b, c - параметры функции. У функции func нет никаких других параметров \\ и типы переменных a, b, c совпадают с типами параметров func. Пример: procedure increase( a : longint); a := a + 1; a := 1; increase(a); writeln(a * a); Выведет 4. procedure increase(a : longint); a := a + 1; a := 1; increase(a); writeln(a * a); Выведет 1. Теперь о порядке вызова. Каждя процедура(функция) может вызывать внутри себя только те функции, которые были описаны в коде программы выше нее. Саму себя процедура вызывать может Избавится от этой проблемы можно, используя ключевое слово forward: procedure proc(n: longint); forward; function func(a : longint) : longint; proc(a); procedure proc(n : longint); Страница 8 из 8