Можно ли написать игру на паскале
Можно ли написать игру на паскале
От Паскаля к Си.
Статья носит ознакомительный характер.
На полноту изложения я не претендую.
Переход с одного алгоритмического языка на другой не столь труден, как может казаться вначале. Ведь главное в программировании, это алгоритмический тип мышления. То есть умение многократно разбивать крупную задачу на ряд мелких подзадач, до тех пор, пока мелкие задачи не превратятся в элементарные шаги. Элементарные шаги необходимо записать в виде операторов языка, а затем все это обратно синтезировать в исходную задачу. То есть необходимо помнить, что язык программирования это средство, с помощью которого программист записывает свой алгоритм. Сначала этот алгоритм надо составить, а только после этого писать программу. Любой алгоритмический язык состоит из операторов. Разные языки имеют разные составы операторов. Но идеи не так сильно различаются. Итак, начнем рассмотрение с того, что общего между языками Си и Паскаль.
Сходство языков Си и Паскаль.
И Си и Паскаль родились от одной мамы Algol-60. Поэтому у них много общего. И в первую очередь блочная структура языка. Это очень важно. Например, Бейсик не является языком, последовательно проводящим идею блочной структуры, поэтому перейти с Бейсика на Си сложнее.
Паскаль
Begin
< Оператор 1>;
[ …
< Оператор N>;]
End;
<
< Оператор 1>;
[ …
< Оператор N>;]
>;
Записываются блоки по-разному, служебные слова begin end в Паскале и фигурные скобки < >в Си, но идея блочной структуры одна и та же. Блоки допускают вложение в обоих языках, то есть внутри блока могут быть вложены другие блоки.
Все переменные должны быть описаны. Так что тут особенно переучиваться нечему.
Почти каждый оператор в Паскале имеет свой аналог в Си. Правда Си позволяет записывать операторы в более компактной форме, чем Паскаль. Потому, одному оператору в Си может соответствовать несколько операторов на Паскале. Но это относится уже к различиям.
Различие языков Си и Паскаль.
Различия я буду приводить в основном в виде таблиц.
Начинаем программу. В Паскале программа имеет имя, здесь оно myPasc, в Си оно всегда main (это относится к главной программе) .
Паскаль
begin
…
end.
viod main (void)
<
…
>
При описании переменных в Си не требуется служебного слова var , и сначала идет тип переменной, а затем имя переменной.
Паскаль
var i : integer;
int i;
Похоже? Конечно похоже, с поправкой на местный колорит. Но привыкнуть к этому нужно, и не слишком сложно.
Если мы производим какие — то операции с одной и той же переменной, то можно сократить запись, указав эту переменную один раз и использовав следующие операции. В Паскале такой операции нет, а те же действия производит обычный оператор присвоения.
Символы и строки
До сих пор наши программы работали только с числами. Но многим программам надо работать с текстовыми данными. Для этого есть два основных объекта — символы и строки.
Символьный тип данных (паскаль)
Для хранения отдельных символов (букв, цифр, всяких знаков препинания и т.п.) в паскале есть тип данных char :
— объявляет переменную, в которой можно хранить символ.
В такую переменную можно записать любой символ конструкциями следующего вида:
Здесь в правой части присваивания так называемые символьные константы, т.е. нужные символы, заключенные в апострофы. Здесь первая команда записывает в переменную ch символ «a», вторая — символ «доллар».
Кроме того, символы можно вводить и выводить привычными конструкциями:
Символьный тип данных (питон)
В питоне, чтобы сохранить символ в переменной, надо просто написать
При этом можно использовать как символы кавычек («), так и символы апострофов (‘), это не имеет значения. Главное, чтобы они были согласованы.
Вводить символы можно обычной командой input() :
(именно прямо так)
выводить — обычным print :
(На самом деле, в питоне нет отдельного «типа» для символов, символ в питоне — это просто строка длины 1, про строки см. ниже. Но часто удобно думать про символы отдельно от строк.)
Коды символов (общее и для паскаля, и для питона)
На самом деле, конечно, в памяти компьютера хранятся не символы (т.е. если мы написали ch:=’$’; (паскаль) или ch=»$» (питон), то нигде в памяти не будет нарисован доллар). Компьютер умеет работать только с числами, и вместо символов он хранит тоже числа.
Есть общепринятая договоренность, которая каждому числу от 0 до 255 ставит в соответствие некоторый символ. Точнее, таких договоренностей есть несколько, они называется кодировки, но для латинских букв, цифр и частоупотребимых символов типа того же доллара, запятой или плюса, во всех кодировках соответствующие числа одинаковы. Для русских букв это не так: в разных кодировках им соответствуют разные числа, но это отдельная тема.
Эта общепринятая сейчас кодировка для латинских букв, цифр и частоупотребимых символов называется ASCII, иногда говорят таблица ASCII. Полностью эту таблицу (точнее, символы от 0 до 127 — эта часть собственно и называется ASCII; символы с номерами от 128 до 255 строго говоря не считаются ASCII, там как раз в разных вариантах русские буквы и т.п.) можно посмотреть, например, здесь. Здесь колонка Decimal — это номер символа, колонка Hex — номер символа, но в 16-ричной системе счисления (для тех, кто знает, что это такое, остальные игнорируйте колонку Hex), колонка Char — собственно сам символ. Пояснения: символы с номерами (кодами) до 31 включительно — это так называемые управляющие символы, они нам пока не очень интересны (равно как и символ 127); символ 32 — это пробел (в таблице написано SPACE). Остальные символы вроде понятны.
Например, символ доллар имеет номер (говорят код) 36, а символ N — 78.
Обратите внимание, что все цифры идут подряд, все заглавные буквы идут подряд, и все маленькие буквы идут подряд. Это нам будет очень полезно. (Для русских букв это выполняется не всегда.)
Что в паскале, что в питоне узнать код символа можно операцией ord , а узнать символ по коду можно операцией chr . Например:
Паскаль | Питон |
В большинстве случаев точное знание кодов символов вам не надо — вы всегда можете что надо вычислить через ord. Например, если мы знаем, что в переменной ch у нас цифра (т.е. символ, соответствующий цифре) — как в переменную i записать значение этой цифры (т.е. 0, 1, 2, . или 9)? Т.е. как перевести цифру-символ в число?
Нам поможет то, что все цифры идут подряд. Поэтому достаточно из кода цифры вычесть код нуля:
Обратите внимание: нам не надо знать, что код нуля — 48. Мы прямо пишем ord(‘0’), а не 48, компьютер сам вычислит код нуля за нас!
Сравнения символов (и паскаль, и питон)
Символы можно сравнивать операторами =, >, <, >=, <=. На самом деле сравниваются их коды:
Паскаль | Питон |
Благодаря тому, что однотипные символы идут подряд, очень легко можно проверять тип символа. Например, чтобы проверить, является ли символ цифрой, можно написать:
Массивы и циклы (паскаль)
Массивы можно индексировать символами:
Кроме того, можно делать циклы по символам:
В обоих случаях порядок символов подразумевается по их кодам. Например, я могу сделать массив a:array[‘A’..’z’] of integer; — здесь будет по элементу для каждого символа с кодами от A до z.
Массивы и циклы (питон)
В питоне нельзя так просто, как в паскале, индексировать массивы символами и делать циклы по символам. Если вам надо сделать массив, в элементах которого хранить что-то, связанное с цифрами, то надо переходить к кодам:
Но вообще это продвинутая тема, сейчас пока вам не особо нужная.
Строки
Строка — это последовательность символов. Поэтому представляется естественным использовать для хранения строк массив символов:
В паскале есть специальный тип данных для строк — string :
В питоне, чтобы записать строку в переменную, надо просто записать строку в переменную:
Что в питоне, что в паскале, строка — это массив, каждым элементом которого является символ, но это не просто массив, а массив с дополнительными функциями.
Во-первых, вам не надо думать про длину строки. Паскаль и питон автоматически сами выделят под строку сколько надо памяти.
Внимание! В разных книжках по паскалю вы можете прочитать, что строки не бывают длиннее 255 символов. Это верно только в ряде вариантов паскаля. В используемом нами варианте — Free Pascal в режиме <$mode delphi>— строка может быть сколь угодно длинной — пока у программы не кончится доступная память.
Длину строки в паскале можно узнать командой length(s) , в питоне — как и у массива, командой len(s) :
Во-вторых, строки, конечно, можно считывать и выводить. На паскале это делается стандартными командами:
(Почему readln, а не read, — см. ниже.)
На питоне — вывод обычным print , а ввод — обычным input() , никакой лишней конвертации не надо, пишете s = input() :
В-третьих, строки можно складывать. Сложить две строки — значит приписать к одной строке другую:
Паскаль | Питон |
Прибавлять можно и символы:
Наконец, строковые константы — это уже привычные вам последовательности символов в апострофах (паскаль) и в кавычках (питон):
Паскаль | Питон |
На самом деле, в питоне можно использовать как апострофы (символы ‘ ), так и кавычки (символы » )
Может возникнуть вопрос, как в строковой константе ввести собственно символ апостроф или кавычку. Просто так написать ‘It’s a string’ не получится, т.к. что паскаль, что питон подумают, что строка закончилась на втором апострофе; аналогично в питоне не сработает «Text»Text». Поэтому в паскале внутри строковых констант апострофы надо удваивать, в а питоне — приписывать символ перед апострофом или кавычкой. Например, чтобы записать в переменную строку «It’s a string», надо написать
Аналогично для записи символа «апостроф»/»кавычка» в переменную типа char:
Еще частный случай строки — пустая строка, т.е. строка длины ноль:
Ну и наконец, строка — это все-таки массив символов. Можно использовать все известные вам операции над массивами (писать s[i] , чтобы получить доступ к i-му символу строки, и т.д. В паскале фактически других операций нет, в питоне много). Например, так можно проверить, есть ли в строке пробелы:
Почему readln? (Паскаль)
До сих пор я требовал, чтобы вы всегда использовали команду read, а не readln. Но до сих пор мы работали с числами; и пробелы и переводы строк были нам просто разделителями чисел, и поэтому команда read прекрасно работала.
Но теперь нам надо особо отличать перевод строки. Когда мы считываем строку (string) с клавиатуры, нам надо считать ее до перевода строки. Поэтому нам важно различать и уметь применять команды read и readln.
Различие у них единственное: read только считывает то, что попросили, и тут же останавливается. Readln же, считав то, что попросили, дальше пропускает все введенные данные до конца строки, и пропускает этот конец строки.
Пусть на вход мы подаем следующие данные:
Первый read считает число 2 и тут же остановится. Второй read увидит, что текущий символ пробел, пропустит его, увидит 3, считает его и остановится. Третий read увидит, что строка кончилась (на самом деле конец строки — это один или два специальных символа), перейдет на следующую строку, увидит там 4, и считает число 4.
Если же в программе были бы команды readln, то получилось бы следующее. Первый readln считывает число 2 и пропускает все остальное, что было в этой строке, в том числе и перевод строки. Второй readln сразу же видит число 4, считывает его, и пропускает все до конца строки включительно. Третий readln видит, что ничего не осталось, и потому ждет, когда вы что-нибудь введете еще.
Для чтения чисел первое поведение (с read) абсолютно логично. Поэтому если вы чистаете числа, то используйте read.
Но пусть вы читаете строки:
Пусть вы вводите следующее:
Первый read считает ‘abc’, увидит перевод строки, и на этом остановится. Второй read увидит, что сразу идет перевод строки — он не будет его пропускать, а просто решит, что вы решили ничего не вводить, и s2 получится пустой строкой (длины 0).
Если бы были readln’ы, то первый readln считал бы ‘abc’ и пропустил бы перевод строки. Поэтому второй readln увидел бы символ d, считал бы ‘def’ и т.д.
В общем, будьте с этим внимательны и используйте те команды, которые вам нужны. Еще пример: если вводится число, а на следующей строке — строка, например:
то читать надо так (поймите, почему!)
inttostr и т.п. (Паскаль)
int и т.п. (Питон)
pos и т.п.
Паскаль: Есть еще ряд команд, работающих со строками, про которые вы можете прочитать в книжках — pos, copy, delete (паскаль) и т.п. Лучше их не используйте. В большинстве случаев можно обойтись без них, плюс вы точно не знаете, как долго они работают.
Питон: Вы знаете ряд хитрых команд работы с массивами, и иногда будет возникать желание их использовать при работе со строками. Лучше их не используйте, пока вы точно не будете понимать не только что, но и насколько быстро они работают. В большинстве случаев можно обойтись без них (и так даже будет проще!), плюс вы точно не знаете, как долго они работают. Аналогично про другие продвинутые функции типа find .
(И паскаль, и питон) Например, пусть вам надо из строки удалить все пробелы. Можно писать примерно так (считаем, что у вас уже есть исходная строка s ):
Но это работает долго (поверьте мне 🙂 ) и требует от вас помнить все эти команды (а на питоне — еще и осознавать код). Проще так:
Результат лежит в s1 . Поймите, как это работает.
На самом деле, на паскале (но не на питоне) есть еще один способ, без второй строки и без длительных сдвигов. Можете подумать над ним.
Теоретический материал: списки (Паскаль)
Список. Создание списка путем добавления элементов в конец списка. Просмотр списка
Определение. Списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом.
Из определения следует, что каждый элемент списка содержит поле данных (Data) (оно может иметь сложную структуру) и поле ссылки на следующий элемент (Next). Поле ссылки последнего элемента должно содержать пустой указатель (Nil).
Схематически это выглядит так:
Попробуем вместе сформировать небольшой список путем добавления элементов в конец списка.
Задача. Сформировать список, содержащий целые числа 3, 5, 1, 9.
Для этого сначала определим запись типа S с двумя полями. В одном поле будут содержаться некоторые данные (в нашем случае числа 3, 5 , 1 и 9), а в другом поле будет находиться адрес следующего за ним элемента.
Примечание. Нужно понимать, что данные в элементе списка, вообще говоря, могут включать произвольное количество полей различных типов, это зависит от поставленной задачи.
Type Ukazatel = ^S; S = Record Data : integer; Next : Ukazatel ; End; |
Таким образом, мы описали типы, с помощью которых можно создать наш связанный однонаправленный список.
Заметим, что все элементы списка взаимосвязаны, т. е. о том, где находится следующий элемент, "знает" только предыдущий. Поэтому самое главное в программе — это не потерять начало списка. Для этого на начало списка установим указатель с именем Head и будем следить за тем, чтобы на протяжении выполнения программы значение этого указателя не менялось.
А теперь опишем переменные для решения нашей задачи:
Var Head, <указатель на начало списка> x <вспомогательный указатель для создания очередного элемента списка> : Ukazatel; |
Создадим первый элемент:
Таким образом, к выделенной области памяти можно обратиться через два указателя.
Продолжим формирование списка, для этого добавим элемент в конец списка. Вспомогательная переменная указательного типа х будет хранить адрес последнего элемента списка. Сейчас последний элемент списка совпадает с его началом, поэтому справедливы равенства:
Head^.Next = x^.Next; Head^.Data = x^.Data; Head = x; |
Выделим область памяти для следующего элемента списка.
New(x^.Next); |
Присвоим переменной х значение адреса выделенной области памяти, то есть, переставим указатель на вновь выделенную область памяти:
x := x^.Next; |
Определим значение этого элемента списка, то есть, заполним поля:
x^.Data := 5; x^.Next := Nil; |
Итак, теперь у нас список содержит два элемента. Для того, чтобы создать третий и четвертый элементы, нужно проделать те же самые операции.
Задание. Ответьте на вопросы:
- Какие операции требуется выполнить для вставки в список его элемента?
Теперь попробуем подытожить наши рассуждения. Оформим создание списка в виде процедуры, в которой его элементы вводятся с клавиатуры.
Procedure Init(Var u : Ukazatel);
Var
x : Ukazatel;
Digit : integer; <Значение информационной части элемента списка>
Begin
Writeln(‘Введите список ‘);
u := Nil; <Список пуст>
Writeln (‘Введите элементы списка. Конец ввода 0’);
Read (Digit);
if Digit <> 0
then <Формируем и вставляем первый элемент списка>
Begin
New(x);
x^.Next := Nil;
x^.Data := Digit;
u := x;
Read (Digit);
while Digit<>0 do
Begin
New(x^.Next); <Формируем и вставляем элемент в конец списка>
x := x^.Next;
x^.Next := Nil;
x^.Data := Digit;
Read(Digit);
End;
End;
Writeln;
End;
Рассмотрите формирование списка несколько другим способом.
Procedure Init(Var u : Ukazatel); Var x, y : Ukazatel; Digit : integer; Begin Writeln(‘Введите список ‘); u := Nil; Writeln (‘Введите элементы списка. Конец ввода 0’); Read (Digit); while Digit<>0 do Begin New(y); y^.Next := Nil; y^.Data := Digit; if u=Nil then u := y else x^.Next := y; x := y; Read(Digit); End; Writeln; End; |
Задание. Разберитесь, как работает данная процедура.
Просмотр списка
Просмотр элементов списка осуществляется последовательно, начиная с его начала. Указатель р поочередно устанавливается на первый, второй, и т.д. элементы списка до тех пор, пока весь список не будет пройден. При этом с каждым элементом списка выполняется операция вывода поля данных на экран. Начальное значение р – адрес первого элемента списка p^. Если р указывает на конец списка, то его значение равно Nil, то есть
while p<>Nil do Begin Write(p^.Data, ‘ ‘); p := p^.Next; End |
Задание. Составьте программу, содержащую процедуру создания списка путем вставки элементов в его конец и процедуру просмотра списка и вывода на экран его элементов. Процедуры должны содержать параметр, в который передается начало списка.
Создание списка путем вставки элементов в начало
Задание. Путем добавления элемента в начало списка получить список, изображенный на рисунке:
Эту задачу Вы решите сами немного позже, а сейчас рассмотрим, как добавить в этот список некоторый элемент, например, 2:
Выполним следующие действия:
Итак, нужный элемент вставлен. Теперь Вы можете сформировать весь данный список полностью.
Задание. Написать программу, создающую произвольный список путем добавления его элементов в начало. Включите эту процедуру в программу, решающую задачу создания списка путем добавления элементов в конец списка. Добавьте меню. Протестируйте программу на наличие ошибок, включите в нее комментарий.
Упорядочивание списка. Вставка элемента в середину списка
Сформируем список целых чисел, упорядоченный по неубыванию, т.е. каждый следующий элемент списка должен быть больше или равен предыдущему.
Для решения этой задачи рассмотрим основные части алгоритма, который мы будем воплощать в программе.
После ввода очередного числа с клавиатуры определяем его место в списке. Заметим, что при этом элемент может быть вставлен либо в начало списка, либо в конец его, либо в середину. Первый и второй случаи мы уже рассмотрели выше. Остановимся на третьем случае.
Для того чтобы вставить в список элемент со значением Digit между двумя элементами, нужно найти эти элементы и запомнить их адреса (первый адрес – в переменной px, второй – в dх), после чего установить новые связи с элементом, в котором хранится значение Digit.
Графически это можно представить так:
Операторы, выполняющие данную задачу, будут следующими:
New(x); x^.Data := Digit; px^.Next := x; x^.Next := dx; |
Приведем процедуру InsInto, которая ищет место в списке и вставляет элемент, переданный ей как параметр. В результате сразу получается упорядоченный список. Адрес первого элемента списка передается параметром Head.
Procedure InsInto(Digit : integer; Var Head : Ukazatel ); Var dx, px, x : Ukazatel ; Begin New(x); x^.Data := Digit; x^.Next := Nil; if Head = Nil then <Если список пуст, то вставляем первый элемент> Head := x else <Если список не пуст, то просматриваем его до тех пор, пока не отыщется подходящее место для Digit или не закончится список> Begin dx := Head; px := Head; while (dx<>Nil) and (dx^.Data<=Digit) do Begin px := dx; dx :=dx^.Next; End; if dx=Nil then <Пройден весь список> px^.Next := x <Элемент добавляется в конец списка> else <Пройден не весь список> Begin x^.Next := dx; if dx=Head then Head := x <Вставляем в начало списка> else px^.Next := x; <Вставляем внутрь списка> End; End; End; |
Задание. Создайте программу, формирующую упорядоченный список, вставив в нее рассмотренную выше процедуру и процедуру просмотра и вывода на экран элементов списка. Отладьте программу, добавьте комментарий.
Удаление элемента из списка
В результате решения задач предыдущих занятий, Вы научились создавать различными способами список, анализировать его информационную часть, формировать на базе данного списка другой список и т. д.
Поэтому для решения поставленной перед нами задачи удаления некоторого элемента из списка, нам нужно найти по какому-либо признаку этот элемент, что, надеюсь, не составит для Вас труда.
Уточним поставленную перед нами задачу: удалить из списка элемент с заданной информационной частью.
Обозначим Head – исходный список, Digit – значение информационной части удаляемого элемента.
При исследовании списка на наличие в нем заданного элемента может встретиться три различных случая. Рассмотрим их.
Удаление элемента из начала списка
Изобразим удаление графически:
Напишем фрагмент программы:
Удаление элемента из середины списка
Для этого нужно знать адреса удаляемого элемента и элемента, находящегося в списке перед ним.
Изобразим удаление графически:
while (x<>Nil) and (x^.Data<>Digit) do
Begin
dx := x;
x := x^.Next
End;
dx^.Next := x^.Next;
Dispose(x);
Удаление элемента из конца списка
Удаление элемента из конца списка производится, когда указатель dx показывает на предпоследний элемент списка, а х – на последний.
Изобразим удаление графически:
<Найдем предпоследний элемент> x := Head; dx :=Head; while x^.Next<>Nil do Begin dx := x; x := x^.Next; End; <Удаляем элемент x^ из списка и освобождаем занимаемую им память> dx^.Next := Nil; Dispose(x); |
Теперь опишем процедуру удаления элементов из списка в общем случае:
Procedure Del(Digit : integer; Var u : Ukazatel ); Var x, dx : UKAZATEL ; Begin x := u; while x<>Nil do if x^.Data=Digit then Begin if x=u then Begin u := u^.Next; Dispose(x); x := u; End else Begin dx^.Next := x^.Next; Dispose(x); x := dx^.Next; End; End else Begin dx := x; x := x^.Next; End; End; |
Задание. Напишите полный текст программы, решающей рассматриваемую задачу. Протестируйте программу, дополните комментарием.
Пример задачи, решаемой с помощью списка
Задание. Ознакомьтесь с предложенной программой и объясните алгоритм решения задачи. Если необходимо, наберите программу на компьютере и просмотрите, как она работает.
Задача 1. Проверить встречается ли (и сколько раз) непустой список М1 в непустом списке М2.
Паскаль (Pascal) — основы программирования для начинающих
Пожалуй, нет ни одного современного человека, кто бы не знал язык Паскаль (основы программирования). И это не удивительно! Еще в учебнике по информатике для школьников расписаны самые основные понятия этой уникальной программы.
Сейчас, в век информационных технологий, каждый может провести для себя обучение по самоучителю онлайн (пройдя курсы «Изучение языков программирования с нуля»; «Паскаль для чайников» и другие).
История изучаемого языка не так проста: Паскаль претерпел множество изменений, прежде чем школьники увидели его в том виде, в каком его преподают на уроках. Это был самый первый простой язык (ord pascal) для программирования, помогающий решить множество практических задач прошлого столетия (1970 год). Он был разработан группой ученых.
С расширением платформ были созданы новые версии этой программы, а Паскаль стал классическим языком программирования.
Ниже разберемся: что такое Паскаль, каковы его основные инструменты. Рассмотрим операции и функции программы, ее специфические особенности. На примерах поймем, как она работает. Научимся писать и работать на языке Паскаль.
Что такое язык программирования Паскаль
Это базовая высокоуровневая программа. Она занимает первое место в учебных планах многих школ и вузов Российской Федерации.
Особенности системы PascalABC.NET
Всё познается в сравнении, поэтому преимущества этой программы рассмотрим в соотношении с другим языком BASIC.
Итак, что характерно для языка Паскаль и что не подходит для Бейсика:
- Во-первых, наличие компилятора, позволяющего скачивать Паскаль на любые платформы.
- Во-вторых, все версии этой программы совместимы между собой.
- В-третьих, структурированные типы данных помогают программисту точно составить необходимый алгоритм решения практической задачи, при этом защищая его.
- В-четвертых, наглядность и логичность интерфейса программы: все команды просты и понятны.
- В-пятых, переход на другой, более высокий по уровню язык программирования, достаточно прост.
Примеры программ на PascalABC.NET
Сумма вводимых целых чисел
Произведение целых чисел
Сколько нечетных среди n введенных
Защита от неверного ввода
Вывод 10 первых степеней двойки
Найти сумму цифр целого положительного числа m
Разложение числа на простые множители
Паскаль для начинающих – основные понятия
Разберем базовые понятия, помогающие правильно написать программу на данном языке.
Рабочая область
Как выглядит рабочее пространство?
Теперь рассмотрим основу: алфавит и структуру.
Алфавит Паскаль
Что нужно знать? Алфавит — это набор символов, необходимый при составлении программы.
Что к ним относится:
- Латинские прописные, строчные буквы (А, В, С….а,b,с).
- Арифметические символы (0, 1, 2…).
- Специальные знаки (препинания, скобки, кавычки, арифметические знаки и т. д.).
- Неделимые символы (:=, ˃=…).
- Служебные слова:
- and – и;
- array – массив;
- begin – начало;
- do – выполнить;
- else – иначе;
- for – для;
- if – если;
- of – из;
- or – или;
- procedure – процедура;
- program – программа;
- repeat – повторять;
- then – то;
- to – до;
- until – до (= пока);
- var – переменная;
- while – пока.
Структура программы
Итак, что же входит в «иерархию» данной программы?
По своей структуре этот язык делится на 3 раздела:
- название;
- данные;
- действия.
Действия начинаются с «begin» и заканчиваются «end» с точкой.
Структуру можно представить так:
Кстати, операторы между собой разделяются точкой с запятой.
Операторы write, writeln, read, readln
Выясним, как происходит вывод и ввод информации.
Вывод
Как таковых операторов вывода в этом языке нет, но есть специальные слова, которые помогают запустить необходимые функции. Это write, writeln.
В чем их главное отличие? При вводе или выводе последующей информации после них: в первом случае последующая информация будет выводиться на ту же строку, где и написан оператор. А вот во втором – на следующую.
Для ввода существуют тоже свои слова: read, readln (= readkey).
Они отличаются друг от друга точно так же, как и предыдущие операторы (при выводе).
Целый тип данных
Выделяют 3 основных вида:
- Integer.
- Byte.
- Longint.
С ними также проводят простые действия:
- сложение – «+»;
- вычитание – «-»;
- умножение – «*»;
- деление – «div».
Кроме того, разрешено проводить отношения и сравнения (больше или равно — ˃ =).
Вещественные типы данных
К таким переменным относятся дробные числа (например, число пи). Здесь они называются real.
Что нужно помнить? Чтобы ввести формулу дробного числа, надо вместо запятой использовать точку. Для записи степеней (х * 10 у ) 10 заменяется Е и число имеет запись:
С ними можно выполнять как самые простые арифметические действия, так и более сложные:
- квадратный корень – sqrt;
- абсолютная величина – abs;
- квадратичная функция – sqr;
- синус – sin;
- косинус – cos;
- арктангенс – arctan;
- натуральный логарифм – ln;
- экспонента – exp.
Обработка данных
Помимо перечисленных выше функций (в предыдущих 2 пунктах), есть и другие:
- целая часть числа – int;
- дробная часть числа – frac;
- получение целой части числа – trunc;
- округление до целого – round;
- преобразование порядкового типа – ord;
- преобразование кода в символьный тип – chr;
- определение предыдущего значения величины – pred;
- определение последующего значения величины – succ.
Математические операции
Математические функции и операции были рассмотрены при разборе целых и вещественных данных.
Остановимся на типах констант и переменных. Какие они бывают?
Простые включают в себя подтипы:
- целые – integer;
- логические – boolean;
- символьные – char;
- перечисляемые;
- интервальные;
- вещественные.
Строковые записываются командой string. Ссылочные представлены соответствующей формой.
Структурированные делят на:
- массивы – array;
- записи – record;
- множества – set;
- файл – file.
Для каждого типа характерны свои наборы операций.
Условия
Если есть альтернативные команды и функции, то с помощью операторов if, then, else можно записать необходимые команды для решения практической задачи.
Схема представлена на рисунке ниже.
Логические операции
Операции основаны на истине факта или его лжи.
Выделяют 3 вида таких функций:
- Odd – если нечетное число, то истина (наоборот – ложь).
- Eoln – истина на конце строки (в другом месте – ложь).
- Eof – истина в конце файла (в другом месте – ложь).
Функции управления программой
Какие еще существуют процедуры:
- Inc – увеличение числа;
- Clrscr – очистка предыдущих результатов работы программы;
- Uses crt – запуск clscr;
- Length – возвращение длины строки;
- Val – преобразование строки в число;
- Pos – отыскать в строке первое преобразование;
- Assign – связывание переменной с файлом;
- Upcase — перевод строчных букв в заглавные.
Заключение
Таким образом, чтобы стать хорошим программистом, для начала нужно изучить основу. Паскаль для этого станет наилучшим выбором.