Читаем Конец холивара онлайн бесплатно


Конец холивара

Данное пособие является введением в основы программирования на двух языках. Сначала рассматриваются простые примеры на Pascal с описанием алгоритмов на русском языке и использованием графических блок-схем, затем эти же примеры приводятся в программах на C.

М. А. Кривцов

Компьютеры и Интернет / Программирование, программы, базы данных
<p>Конец холивара</p><p>Pascal vs C</p><p>М. А. Кривцов</p>

© М. А. Кривцов, 2015

Создано в интеллектуальной издательской системе Ridero.ru

<p>Ответ на неизбежный вопрос</p>

Зачем сей древний, как сами IT, холивар вынесен в заголовок? Затем, что он порождён не проблемами упомянутых языков, или даже различных версий их компиляторов1, кои их верные паладины пытаются сравнивать в ходе сей священной войны. Нет, он является плодом фундаментального свойства человеческой психики – человеку удобно то, к чему он привык. Отсюда – каждый сверчок хвалит свой шесток, а каждый кулик – своё болото.

Целью этой небольшой книжки будет ваше знакомство с обоими славными представителями большой семьи языков программирования. Чтобы вы легко могли переходить с одного на другой, по мере необходимости.

Pascal – это яркий представитель европейской школы программирования, известной своими академической логичностью и педантизмом. А C – это продукт американского делового подхода – как говорит Михаил Задорнов: “Всё, чтобы быстрей до бабок добраться!”

Pascal не превзойдён по удобству обучения на нём программированию – именно так он и задумывался его автором Николаусом Виртом. Ныне широко используются такие, базирующиеся на нём, среды визуального программирования, как Delphi (для Windows) и бесплатный Lazarus (для Windows и Linux).

А американец Деннис Ритчи сделал C, как подручный инструмент для создания операционной системы UNIX. Но его компактный синтаксис так полюбился профессионалам, что они наплодили множество других Си-подобных языков: C++, C#, Java и прочие. Хотя бы поэтому полезно знать C. Например, когда у меня возникла необходимость использовать JavaScript, то проблем с освоением его не было – ведь его синтаксис мне был уже знаком по C.

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

А теперь я расскажу вам – почему эта книжка получилась именно такой?

Имея довольно продолжительный опыт преподавания информатики в колледжах, я накопил ряд приёмов эффективной подачи нового материала моим студентам и пришёл к выводу, что использование определений мало полезно и гораздо лучше использовать, для этого, конкретные примеры, объясняя их разными способами. Поэтому, я беру простую и понятную задачу и привожу алгоритм её решения на русском языке – аналогичный по структуре с программой на Паскале. Затем, этот же фрагмент идёт, собственно, на Паскале и, для пущей наглядности, графически иллюстрируется блок-схемой. Для всех ключевых слов Паскаля я даю русский перевод – для тех студентов, которые не учили английского языка.

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

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

Эта книга не является исчерпывающим справочником по Pascal и C. Я постарался создать максимально компактное и наглядное введение в программирование на этих языках. Поэтому, я сразу же отказался от рассмотрения таких сложных типов данных, как записи, файлы, указатели и так далее. По той же причине я привожу программы с текстовым интерфейсом – чтобы не загромождать книгу описаниями компонентов Delphi и виджетов Qt, а также их свойств. От примеров с графикой, столь популярных у учащихся, тоже пришлось отказаться, поскольку графика по разному реализована в разных компиляторах, а я не хочу привязывать свою книгу только к одному из них.

На чём вам лучше начинать писать свои первые программы? Сразу же забудьте о легендарном Turbo Pascal – он должен кануть в Лету вместе с MS-DOS! В некоторых учебных заведениях его продолжают мучить – из ностальгических соображений – лекции под него давно написаны и книжки в библиотеки куплены. Скачайте лучше бесплатный русский PascalABC.NET – это программа под Windows с графическим интерфейсом. В нём можно писать программы и как в Turbo Pascal и используя конструктор форм, как в Delphi. Для С и Pascal хорош превосходный программистский блокнот Geany – он существует и для Windows и для Linux и к нему можно подключить компиляторы для кучи языков, синтаксис которых он может подцвечивать. Кстати, Linux сама по себе является, в некотором роде, компилятором C и может устанавливать софт из исходных файлов на C.

<p>Часть первая</p><p>Язык программирования Pascal</p><p>1. Структура программы на языке Pascal</p>

В программе на Pascal выделяют следующие основные разделы: заголовок программы, описания, операторы. Разделы отделяются друг от друга точкой с запятой. В конце программы ставится точка. Каждый раздел начинается со своего ключевого слова. Ключевым словом заголовка является слово PROGRAM. За ним указывается имя программы и информация об использовании устройства ввода-вывода.

Например: PROGRAM PRIMER1 (INPUT, OUTPUT);

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

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

Основным разделом программы является раздел операторов, который состоит из последовательности операторов, заключённых в операторные скобки BEGIN и END (такая конструкция называется составным оператором). Операторы отделяются друг от друга точкой с запятой.

Комментарии к программе пишутся после // – строка после этого знака игнорируется при работе программы. Блок между фигурными скобками {…} – тоже игнорируется.

Комментарии полезны даже автору программы, когда он обращается к её исходному коду через продолжительное время.

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

Не забудьте поставить точку в конце программы.

<p>Стандартные типы данных и описание переменных</p>

Значение присваиваемое переменной должно соответствовать её типу указанному в разделе описаний. В Pascal есть четыре стандартных типа величин (помимо тех, что могут быть дополнительно определены в каждой программе – в разделе описания типов данных): INTEGER (целый), REAL (действительный или вещественный), CHAR (литерный), BOOLEAN (логический).

INTEGER – только целые числа.

REAL – любые числа.

CHAR – множество значений символов, используемых компьютером, упорядоченное по возрастанию кодов символов.

BOOLEAN – состоит только из двух значений: TRUE – истина и FALSE – ложь. Над ними определены булевские операции: конъюнкция (AND), дизъюнкция (OR), отрицание (NOT).

AND – и

OR – или

NOT – не

Описание переменной имеет вид: VAR <имя> : <тип>;

Допускается совмещённая форма описания нескольких переменных одного и того же типа, например:

VAR A, B, SUM : REAL;

Именем (идентификатором) может быть любая последовательность букв и цифр, начинающаяся с буквы.

<p>Константы</p>

Константы определяются до переменных, например:

CONST PI=3.14159;

VAR R, L : REAL;

<p>Процедуры ввода и вывода</p>

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

READ – читать

Например: READ (X);

READLN – читать с новой строки

В процедурах вывода WRITE и WRITELN переменные, значения которых выводятся, перечисляются в круглых скобках через запятую. Последовательность символов, заключённая в апострофы, выводится в неизменном виде.

WRITE – писать

WRITELN – писать с переходом на новую строку

Например: WRITELN (‘X=’, X);

Вывод значений вещественной переменной с фиксированной точкой:

WRITE (X:8:3);

Где 8 – число позиций, а 3 – число позиций после точки.

<p>Арифметические операции</p>

+ – сложение

— – вычитание

* – умножение

/ – деление

DIV – деление нацело

MOD – остаток от деления нацело

<p>Стандартные математические функции</p>

ABS (X) – абсолютная величина X.

ARCTAN (X) – вычисление угла в радианах, тангенс которого равен X.

COS (X) – вычисление косинуса угла в радианах.

EXP (X) – Вычисление ex.

LN (X) – вычисление натурального логарифма от X.

PI – вычисление числа Пи.

RANDOM – вычисление случайного числа в диапазоне от 0 (включительно) до 1.

RANDOM (N) – вычисление случайного целого числа в диапазоне от 0 (включительно) до N.

ROUND (X) – округление X до ближайшего целого.

SIN (X) – вычисление синуса угла, заданного в радианах.

SQR (X) – вычисление квадрата числа X.

SQRT (X) – вычисление корня квадратного из X.

TRUNC (X) – отбрасывает дробную часть числа X.

<p>Оператор присваивания</p>

Оператор присваивания – :=. Для удобства понимания записи алгоритмов его можно читать, например, так:

X := … – пусть X будет ….

<p>2. Программные конструкции</p><p>2.1. Ветвление (выбор)</p><p>2.1.1. Альтернатива (условный оператор)</p>

Пример 1.1: Вычисление значений функции Y=1/X.

Если X ≠ 0

то писать (1/X)

иначе писать (‘0 не входит в область определения функции Y=1/X’);

IF X <> 0

THEN WRITE (1/X)

ELSE WRITE (‘0 не входит в область определения функции Y=1/X’);

IF – если.

THEN – то.

ELSE – иначе.

Блок-схема алгоритма вычисления значений этой функции:

Условный оператор

<p>2.1.2. Неполный условный оператор</p>

Пример 1.2: Если X <3, то вывести на печать значение X.

IF X <3 THEN WRITE (X);

Неполный условный оператор

> – больше

< – меньше

> = – не меньше

<= – не больше

= – равно

<> – не равно

AND – и.

OR – или.

NOT – не.

Пример сложного (составного) условия:

IF (Z> X) OR (X> Y) THEN…

<p>2.1.3. Оператор варианта (переключатель)</p>

Переключатель

Пример 1.3.1

Выбрать N из

1: писать (‘N равно единице’);

2: писать (‘N равно двум’);

3, 4: писать (‘N равно трём или четырём’)

Конец;

CASE N OF

1: WRITE (‘N равно единице’);

2: WRITE (‘N равно двум’);

3, 4: WRITE (‘N равно трём или четырём’)

END;

CASE – случай, вариант

OF – из

END – конец

Пример 1.3.2

CASE A> B OF

TRUE: M:=A;

FALSE: M:=B

END;

Такой вариант использования этого оператора соответствует условному оператору.

TRUE – истина

FALSE – ложь

FALSE

<p>2.2. Повторение (операторы цикла)</p>

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

<p>2.2.1. Цикл типа “пока” (цикл с предусловием)</p>

Пример 1.4: Нахождение наибольшего общего делителя двух целых положительных чисел с помощью известного алгоритма Евклида.

Пока X ≠ Y делать

если X> Y

то X:=X-Y

иначе Y:=Y-X;

Писать (‘НОД=’, X);

WHILE X <> Y DO

IF X> Y

THEN X:=X-Y

ELSE Y:=Y-X;

WRITE (‘НОД=’, X);

WHILE – пока

DO – делать

Цикл с предусловием

<p>2.2.2. Цикл типа “до” (цикл с постусловием)</p>

Этот цикл выполняется не менее одного раза

Пример 1.5: Решение предыдущей задачи.

Цикл с постусловием

Повторять

если X> Y

то X:=X-Y

иначе Y:=Y-X

до X=Y;

Писать (‘НОД=’, X);

REPEAT

IF X> Y

THEN X:=X-Y

ELSE Y:=Y-X

UNTIL X=Y;

WRITE (‘НОД=’, X);

REPEAT – повторять

UNTIL – до

<p>2.2.3. Цикл с параметром (со счётчиком)</p>

Пример 1.6: Вычислить факториал числа (n!=1×2×3×…×n).

F:=1;

Для K:=1 до N делать

F:=F*K;

Писать (‘n!=’, F);

F :=1;

FOR K:=1 TO N DO

F:=F*K;

WRITELN (‘n!=’, F);

FOR – для

TO – до

DO – делать

Цикл с параметром

Если в этом операторе вместо TO использовать DOWNTO, то при каждой итерации значение параметра K будет уменьшаться на единицу.

<p>3. Процедуры и функции (подпрограммы)</p>

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

Функции и процедуры описываются после описания переменных.

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

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

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

Похожие книги