Конец холивара
Pascal vs C
М. А. Кривцов
© М. А. Кривцов, 2015
Создано в интеллектуальной издательской системе Ridero.ru
Ответ на неизбежный вопрос
Зачем сей древний, как сами 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.
Часть первая
Язык программирования Pascal
1. Структура программы на языке Pascal
В программе на Pascal выделяют следующие основные разделы: заголовок программы, описания, операторы. Разделы отделяются друг от друга точкой с запятой. В конце программы ставится точка. Каждый раздел начинается со своего ключевого слова. Ключевым словом заголовка является слово PROGRAM. За ним указывается имя программы и информация об использовании устройства ввода-вывода.
Например: PROGRAM PRIMER1 (INPUT, OUTPUT);
Служебные слова INPUT и OUTPUT сообщают компьютеру, что в программе предусмотрен вывод результатов (OUTPUT), а также ввод значений исходных данных в процессе работы программы (INPUT). Для ряда компиляторов заголовок – раздел не обязательный.
Раздел описаний содержит информацию для компьютера о перечне и свойствах величин, используемых в программе, и состоит из описания меток, описания констант, описания типов данных, описания переменных и описания функций и процедур. В каждой конкретной программе могут иметься лишь некоторые из перечисленных описаний, однако приведённый ранее порядок их следования должен выдерживаться.
Основным разделом программы является раздел операторов, который состоит из последовательности операторов, заключённых в операторные скобки BEGIN и END (такая конструкция называется составным оператором). Операторы отделяются друг от друга точкой с запятой.
Комментарии к программе пишутся после // – строка после этого знака игнорируется при работе программы. Блок между фигурными скобками {…} – тоже игнорируется.
Комментарии полезны даже автору программы, когда он обращается к её исходному коду через продолжительное время.
В конце программы на Pascal традиционно ставятся две процедуры READLN, чтобы окно программы не закрывалось сразу же после её выполнения. В этом случае оно закроется после нажатия клавиши Enter.
Не забудьте поставить точку в конце программы.
Стандартные типы данных и описание переменных
Значение присваиваемое переменной должно соответствовать её типу указанному в разделе описаний. В Pascal есть четыре стандартных типа величин (помимо тех, что могут быть дополнительно определены в каждой программе – в разделе описания типов данных): INTEGER (целый), REAL (действительный или вещественный), CHAR (литерный), BOOLEAN (логический).
INTEGER – только целые числа.
REAL – любые числа.
CHAR – множество значений символов, используемых компьютером, упорядоченное по возрастанию кодов символов.
BOOLEAN – состоит только из двух значений: TRUE – истина и FALSE – ложь. Над ними определены булевские операции: конъюнкция (AND), дизъюнкция (OR), отрицание (NOT).
AND – и
OR – или
NOT – не
Описание переменной имеет вид: VAR <имя> : <тип>;
Допускается совмещённая форма описания нескольких переменных одного и того же типа, например:
VAR A, B, SUM : REAL;
Именем (идентификатором) может быть любая последовательность букв и цифр, начинающаяся с буквы.
Константы
Константы определяются до переменных, например:
CONST PI=3.14159;
VAR R, L : REAL;
Процедуры ввода и вывода
Для ввода исходных данных применяются процедуры READ и READLN. После выполнения процедуры READ значение следующего данного читается из этой же строки, а при выполнении процедуры READLN – с новой строки.
READ – читать
Например: READ (X);
READLN – читать с новой строки
В процедурах вывода WRITE и WRITELN переменные, значения которых выводятся, перечисляются в круглых скобках через запятую. Последовательность символов, заключённая в апострофы, выводится в неизменном виде.