Уроки Pascal ABC

Паскаль (англ. Pascal) - это язык программирования, имеющий текстовую среду. Является основой многих языков программирования. Паскаль бывает полезен для начинающих. Преподаётся в школах и ВУЗах. Пример программы, написанной на паскале:
Program umnogenie;
	var a, b: integer;
	begin      
		writeln ('Введите переменные');  
		readln (a, b);
		a:= a * b; 
		writeln ('Результат ', a);
	end.

Эта простая программка умножает число a на число b.
Для работы с языком потребуется программа. Я буду вести уроки на наиболее удобной программе - Pascal ABC.NET.
Скачать её можно здесь: http://pascalabc.net/.
Уроки Pascal ABC - Урок №1
Первые знания, операторы, структура.
Сегодня мы начинаем уроки по изучению Pascal. В этом уроке мы обсудим структуру программы, написанной на pascal, основные операторы, типы переменных.
Вся программа состоит из:
  1. Описание переменных.
  2. Основной программы:
    • Ввод данных, диалог с пользователем
    • Основной блок - выполнение поставленных задач
    • Вывод данных, диалог с пользователем


В виде алгоритма это получается так:
  • Вводим еременные а и б которые являются численными (действительными целыми числами);
  • Начало программы;
  • Ввод данных;
  • Работа программы;
  • Вывод данных;
  • Конец программы.

А как это делается в программе?
Program vvod_vivod; 
	var a :integer;
	begin
		readln (a);
		writeln ('Вы ввели число ', a);
	end.

А теперь я объясню, что это всё значит. Первая строка Program vvod_vivod; означает название программы. Мы просто пишем "Program", затем пишем название нашей новой программы, какое сами захотим (я написал vvod_vivod). Ограничением является то, что название должно содержать только английские буквы, цифры или знак "_". После каждой строчки пишется точка с запятой. Во второй строке мы перечисляем переменные, в нашей програмке она всего одна - "а". "var" - это служебное слово которое задаёт переменные. Мы просто пишем слово "var", затем переменные которые будут учавствать в нашей программе через запятую, после переменных всегда ставится двоеточие, оно не ставится лишь в некоторых случаях, в каких я расскажу потом. Далее идёт вид переменных (integer - целые числа (1, 6, 48, 4859) и real - дробные числа (1,376 или например 8,45) в конце как и в первой строчке пишется точка с запятой. "begin" означает начало (запуск) программы. "readln" означает ввод данных. Во время работы программы нам необходимо будет ввести значение переменной в нашем случае необходимо ввести значение переменной "а". Поскольку у нас переменные вида "integer" мы можем ввести любое целое число. Если программе необходимо ввесто или вывести информацию то используются закруглённые скобки (то что написано в скобках мы увидим на экране во время работы программы). "writeln" - это наоборот вывод данных. В скобках после этой команды мы пишем то, что хотим чтобы показал компьютер. Если хотим, чтобы он показал не просто числа, а какой-нибудь текст, то в скобках мы ставим одинарные кавычки. То что написано в одинарных кавычках будет выведено на экран в чистом виде. Последняя строчка - "end." указывает, на завершение программы в конце всегда ставится точка.
Уроки Pascal ABC - Урок №2
Сейчас я расскажу про основные операторы, с помощью которых можно написать вашу первую программу.

Оператор присваивания
Без этого оператора мы не сможем обойтись дальше. Его функция - это присваивания значения переменной.
Допустим x - это переменная, пусть она будет равна 2, в программе это будет выглядеть так:
{ввод данных}
x:=2;
{вывод данных}

Я думаю, что Вы уже заметили, что на деле она выглядит, как двоеточие со знаком равно (:=).

Операторы сложения, вычитания и умножения (Сложение)
С помощью данного оператора мы можем сложить два числа, в программе он пишется, как "+" (без кавычек). Допустим у нас есть переменные x, y и z. Мы можем присвоить переменной x значение 4, а переменной у значение 3.
{ввод данных}
x:= 4;
y:= 3;
z:= x + y;
{вывод данных}

При данном сложении мы получим 7, само собой можно самому придумать другие значения переменным x и y. В таком случае переменная z изменит своё значение на другое.

Операторы сложения, вычитания и умножения (Вычитание)
В этом операторе тоже ничего сложного нет, он выполняет вычитание двух чисел. В программе обозначается, как "-" (без кавычек):
{ввод данных}
x:= 8;
y:= 3;
z:= x - y;
{вывод данных}

Выше мы x присвоили 8, а у присвоили значение 3. В итоге z у нас становится 5.

Операторы сложения, вычитания и умножения (Умножение)
Этот оператор умножает два числа друг на друга, обозначается, как "*" (также без кавычек):
{ввод данных}
x:= 8;
y:= 2;
z:= 8 * 2;
{вывод данных}

Здесь переменная z в следствии умножения приобретёт значение 16.

Операторы деления
Операторов деления - три, и все они работают по разному и соответственно выполняют разные действия.
Простое деление
Простое деление выполняется с помощью оператора вида "/" (без кавычек), он делит одно число на другое. Данный оператор работает только с типом чисел real, о котором я писал в прошлом уроке.
{ввод данных}
x:= 22;
y:= 5;
x:= x / y;
{вывод данных}

В примере мы x присвоили 4,4. В следствии деления 22 (x) на 5 (y).

Целочисленное деление
Данное действие делит число только на цело, при таком способе деления невозможно получить десятичную или периодическую дробь. В программе пишется, как "div" (без кавычек). Данный оператор работает только с типом integer.
{ввод данных}
x:= 22;
y:= 5;
x:= xdivy;
{вывод данных}

В данном примере z будет равно 4, а не 4,4, как при обычном делении.

Получение остатка
Данный способ позволяет получить не само число, которое должно получится, а его остаток. Допустим при делении 22 на 5 мы получим 2, при этом способе деления. В программе обозначается, как "mod" без кавычек:
{ввод данных}
x:= 48 mod 5;
{вывод данных}


Простейший калькулятор
Давайте попробуем написать простейший калькулятор, который выполняет с нашими двумя числами все действия, которые мы сегодня выучили, сразу.
program calc;                         // вводим название программы
	var a, b, sum, raz, pro, c: integer; del: real;  // вводим переменные
	begin                         // начинаем программу
		readln (a, b);                 // вводим в программу два числа
		sum:=a+b;                 // складываем числа
		raz:= a-b;                 // вычитаем
		pro:=a*b;                 // умножаем
		del:=a/b;                 // выполняем простое деление
		c:=a div b;                 // делаем целочисленное деление
		a:= a mod b;                 // находим остаток, при этом меняем значение a
		writeln ('сумма - ', sum);         // выводим на экран сумму
		writeln ('разность - ', raz);         // выводим на экран разность
		writeln ('произведение - ', pro);     // выводим на экран произведение
		writeln ('простое деление - ', del);     // выводим на экран обычное деление
		writeln ('целочисленное деление - ', c); // выводим на экран результат целочисленного деления
		writeln ('остаток - ', a);         // выводим на экран остаток
	end.                         // заканчиваем программу 
Уроки Pascal ABC - Урок №3
Предлагаю рассмотреть операторы квадрата, корня и модуля.
1. Оператор квадрата
Этот оператор возводит в квадрат заданное число или переменную. Выглядит, как "sqr" (без кавычек). В программе пишется как sqr(a), где a - любая переменная или число.
var a, c:integer;
begin
	writeln ('Введите число');
	readln (a);
	c:= sqr(a);
	writeln ('Квадрат равен ', c);
end.

2. Оператор корня
Этот оператор находит корень из переменной или числа. Выглядит, как "sqrt" , (без кавычек). В программе пишется как sqrt(a), где a - любая переменная или число.
var a, c:real;
begin
	writeln ('Введите число');
	readln (a);
	c:= sqrt(a);
	writeln ('Корень равен ', c);
end.

3. Оператор модуля
Данный оператор переводит число из обычного в число по модулю, то есть меняет знак этого числа на всегда положительный. Обозначается, как "abs" без кавычек, в программе пишется, как abs(a), где a - любое число или переменная.
var a, c:real;
begin
	writeln ('Введите число');
	readln (a);
	c:= abs(a);
	writeln ('Модуль равен ', c);
end.
Уроки Pascal ABC - Урок №4
Сегодня мы будем рассматривать оператор условия. Он работает по принципу: Если (условие), то (команда 1), иначе (команда 2).
Слово если выполняет команда IF, слово тогда - then, а иначе - else. На деле этот цикл выглядит так:
Program sravnenie; // Название программы
	var a, b ,c, d: integer; // Вводим переменные
	begin // Начало программы
		readln(a); // Ввести значение a
		readln(c); // Ввести значение c
		if a < с then // Если а меньше с, то
			b:=с // b будет равно с
			writeln(b); // Вывести значенние b на экран
		else a:=d; // В противном случае а равно d
			writeln(d); // Вывести значенние d на экран
	end. // Конец программы
Немного потренируемся
Раньше мы создавали калькулятор без возможности выбора действий, на основе изученных в последнем уроке операторов условий (if, then и else), мы можем составить калькулятор с выбором действий (свой первый калькулятор я составлял сам и ушло на него у меня 2 часа).
Исходник калькулятора для паскаля, который умеет:
- складывать;
- вычитать;
- умножать;
- находить корень;
- находить квадрат;
- делить в обычном и привычном для нас виде;
- делить в целых числах
- делить с остатком.
Использованы операторы sqrt, sqr, mod и div, +, -, /, *.
Program calc2;
var a, b, sum, raz, pro, c, n: integer; // Задаём переменные, их типы
del: real;

begin
  writeln (' Введите требуемое действие:' ); // Диалог с пользователем
  writeln (' 1 - сложение, 2 - вычитание, 3 - умножение, 4 - простое деление, 5 - деление с остатком, 6 - квадрат, 7 - кв. корень');  
  readln (n); // считывание действия
  writeln ('Введите числа для операции, если корень или квадрат, то второе число - любое');
  readln (a, b); // считываем два числа
    if n = 1 then begin // Если n = 1 (сложение), то начало д.
    sum:=a+b; // складываем числа
    writeln ('сумма - ', sum); // выводим сумму
    end; //конец д.
          if n = 2 then begin // Если n = 2 ( вычитание), то начало д.
          raz:= a-b; //вычитаем
          writeln ('разность - ', raz); // выводим разность
          end; // конец д.
                if n = 3 then begin // Если n = 3 (умножение), то начало д.
                pro:=a*b; // умножаем
                writeln ('произведение - ', pro); // выводим произведение
                end; // конец действия.
                {Дальше комментарии к оператору if отсутствуют, т.к. они почти теже}
                      if n = 4 then begin
                      del:=a/b; // выполняем простое деление
                      writeln ('простое деление - ', del); // выводим обычное деление
                      end;
                            if n = 5 then begin
                            c:=a div b; //делаем целочисленное деление
                            a:= a mod b; // находим остаток, при этом меняем значение a
                            writeln ('целочисленное деление - ', c); // выводим результат целочисленного деления
                            writeln ('остаток - ', a); // выводим остаток
                            end;
                               if n = 6 then begin 
                               pro:= sqr (a); // находим квадрат первого числа
                               writeln ('Квадрат a равен ', pro); // выводим квадрат перового числа 
                               end;
                                 if n = 7 then begin
                                  del:= sqrt (a); // Находим квадратный корень первого числа
                                  writeln ('Кв. корень равен ',del); // Выводим кв. корень
                                  end; //
end. //конец программы 
Уроки Pascal ABC - Урок №5
Сейчас мы рассмотрим цикл в программировании и узнаем о трех типах циклов в языке программирования Pascal.
Циклы делятся на две группы - это циклы с условием и цикл с параметром (FOR). Циклы с условием делятся на циклы с предусловием (WHILE) и постусловием (REPEAT). То есть цикл с параметром задает параметр (условие выполнения цикла) сразу, цикл с предусловием проверяет работу цикла в начале, с постусловием - в конце.
Цикл позволяет зациклить программу, а точнее её часть до выполнения нужного действия или получения требуемого результата.

Мы будем разбирать цикл while с предусловием.
1. Цикл с параметром в Паскале - FOR
Цикл FOR задает определённое условие по которому программа будет работать определённое количество раз, допустим нам нужно 5 (или n) раз зациклить программу, это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта - счетчик который обычно обозначается буквой i или j.
Внешний вид цикла с параметром в паскале:
for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, ..., n 

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to - это до .. в порядке возрастания, также есть downto - до .. в порядке убывания.

2. Цикл с предусловием в Паскале - WHILE
Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если какое-либо логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в самом начале, то тело цикла может не выполнится ни одного разу.
Структура цикла с предусловием:
WHILE  <условие> DO
        begin
                <тело цикла>
        end; 

Порядок выполнения цикла:
- логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;
- любые выполняемые операторы языка.
Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.
Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах - начало или конец всей программы или её части. Главную роль в данной блок - схеме играет её центральная часть.
Пример:
Задача: вычислить сумму ряда 1 + 1.5 + 2 + 2.5 + 3 + 3.5 + .. + 30
program example-while;
var
   sum:real;
   n:real;
BEGIN
   sum:=0;
   n:=1;
   while n < =30 do
        begin
           sum:=sum+n;
           n:=n+0.5;
        end;
   writeln('Сумма равна: ', sum);
END.

3. Цикл с постусловием - Repeat - until.
Этот оператор аналогичен оператору цикла с предусловием, но отличается тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.
Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.
Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, тогда цикл завершается. В противном случае - тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.
Формат записи, структура цикла:
REPEAT
<тело цикла>
UNTIL  <условие>;

Пример:
Program test2;
Var b:Real;
Begin
b:=100;
Repeat b:=b/2;
Until b<10;
Writeln(b:0:2);
End.
Уроки Pascal ABC - Урок №6
Сейчас мы узнаем о понятии "Подпрограмма" в Паскале, узнаем о её двух видах, познакомимся со способом задания параметров.

Подпрограмма - специальным образом оформленный блок программы, для дальнейшего его многократного использования в её теле.

Подпрограммы бывают двух видов:
1. Функции.
2. Процедуры.

Функция - это подпрограмма, которая возвращает какое-либо значение.
Процедура - это подпрограмма, которая сразу изменяет значения и выполняет операции с числами, операторами и т. д.

У функций и процедур существуют параметры (переменные, которые передают какое - либо значение). Они тоже бывают двух видов:
1. Формальные - те, которые находятся в описании подпрограммы.
2. Фактические - те, которые передаются из основной программы в функцию или процедуру.

Также у подпрограммы существую переменные. с которыми она в дальнейшем работает. Они делятся опять же на два типа:
1. Глобальные переменные, то есть действующие во всей программе.
2. Локальные - те, которые действуют только в процедуре или функции.
Уроки Pascal ABC - Урок №7
В прошлом уроке мы разобрали общее понятие подпрограммы в Паскале, а сейчас лучше познакомимся с подпрограммами типа Функции. Узнаем о том, как она вызывается в основной части, как описывается, как выглядит и т. п. Подробнее дальше.

Функции - подпрограммы, которые возвращают значение, то есть не изменяют переменные в основной программе, а выполняет действие, которое в дальнейшем можно использовать многократно.

Предлагаю рассмотреть структуру функции на примере:
Function Prim(a, b, c:integer):integer; // Задание переменных в функцию из программы
var M:integer;                          // Описание локальной/ных переменных 
begin
    A:= B + C;         // Складывание чисел
    M:= A / B;         // Присваивание локальной переменной значение А / В
    A:= A * C * B * M; // Перемножение
    Prim:= A;          // Возвращение значения
end;                   // Конец функции

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

Как вызвать функцию в программе?
Для того, чтобы вызвать функцию, мы должны либо присвоить её значение какой-либо переменной, либо совершить с ней какую-то операцию, либо вывести с помощью write/writeln. Вызывается она следующим образом: (переменные, которые требуется передать в функцию);
Пример вызова для нашей вышеописанной функции:
k:= Prim(a, b, c);       // Присваивание значения функции переменной, где k-любая переменная, описанная в программе
k:= Prim(a, b, c) + 365; // Совершение операции с функцией, к значению функции прибавляем 365
write (Prim(a, b, c));   // Вывод значения функции