мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
pascal:basics [07/10/2010 09:49] – oca | pascal:basics [04/07/2015 12:13] (текущий) – oca | ||
---|---|---|---|
Строка 4: | Строка 4: | ||
== Структура программы == | == Структура программы == | ||
- | Структура программы на языке Паскаль достаточно логична, но свободна, | + | Общая структура программы на языке Паскаль |
<code pascal|Общая структура программы> | <code pascal|Общая структура программы> | ||
- | Program < | + | Program < |
- | // Данное предложение может отсутствовать, | + | |
- | // поскольку в системе Free Pascal роли не играет. | + | // Данное предложение может отсутствовать, |
- | // Оно оставлено для совместимости с другими версиями языка | + | // используемой нами |
+ | // и большинстве (во всех?) современных версий Паскаля | ||
+ | // никакой | ||
+ | // Оно оставлено для совместимости с другими версиями | ||
+ | // языка, которые его требуют. | ||
+ | // Например: | ||
+ | Program ChoiseSort3v; | ||
+ | // Предложения заканчивается точкой с запятой | ||
- | Uses < | + | Uses < |
- | // Данное предложение может отсутствовать, | + | |
- | // никаких дополнительных библиотек | + | // который всегда состоит из одного предложения! |
+ | // Данное предложение может отсутствовать, | ||
+ | // используете никаких дополнительных библиотек. | ||
+ | // Например: | ||
+ | Uses CRT, OGLgraph; | ||
+ | // Список разделяется запятыми, | ||
+ | // предложения заканчивается точкой с запятой | ||
| | ||
- | < | + | < |
- | // порядок следования которых | + | |
- | // но все они должны быть здесь - перед кодом. | + | // подразделов, |
- | // Этот раздел содержит описание всего, что не задано изначально | + | // но все они должны быть здесь - перед кодом. |
- | // импортируется из | + | // |
- | // В принципе, | + | |
+ | // не задано изначально, | ||
+ | // не импортируется из библиотек, | ||
+ | // не является локальным объектом внутри процедуры. | ||
+ | // А именно - именованные константы, | ||
+ | // переменные и наконец - имена меток. | ||
+ | // | ||
+ | | ||
| | ||
- | Begin | + | Begin // Обязательные операторные скобки Begin-end |
- | < | + | < |
- | End. // Программа кончается точкой | + | |
+ | // Чисто теоретически, | ||
+ | // Тогда программа честно ничего не делает. | ||
+ | // Но " | ||
+ | End. | ||
</ | </ | ||
+ | Текст в **угловых скобках** (символы < и >) требует замены "по смыслу" | ||
- | Обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем. | + | Ещё раз обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем. |
== Раздел описаний == | == Раздел описаний == | ||
- | Раздел описаний может состоять из нескольких подразделов, | + | Раздел описаний может состоять из нескольких подразделов, |
+ | |||
+ | <code pascal|Простой пример раздела описаний> | ||
- | <code pascal|Пример раздела описаний> | ||
const // Начался раздел констант | const // Начался раздел констант | ||
- | n = 10; // Описание константы | + | n = 10; // Описание |
- | | + | |
- | var // Начался раздел переменных, | + | var // Начался раздел |
+ | // | ||
i, j : integer; | i, j : integer; | ||
r, q : real; // 2-е описание переменных | r, q : real; // 2-е описание переменных | ||
- | k, m : integer; | + | k, m : integer; |
- | + | // | |
- | ... // Что-то ещё, возможно - ничего | + | |
- | + | Begin | |
- | // Где-то здесь кончается раздел переменных | + | |
- | + | ||
- | ... // Что-то ещё, возможно - ничего | + | |
- | | + | |
- | Begin | + | |
| | ||
// Обязательный раздел кода | // Обязательный раздел кода | ||
+ | ... | ||
+ | End. // Конец всему (в этой программе)! | ||
- | ... | ||
- | | ||
- | End. // Конец всему (в этой программе)! | ||
</ | </ | ||
- | Если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано | + | Объекты программы могут быть связаны описанием. |
<code pascal|Cвязь между объектами> | <code pascal|Cвязь между объектами> | ||
Строка 70: | Строка 91: | ||
</ | </ | ||
- | Из этого правила есть единственное исключение, | + | Запомните правило - **если что-то, |
+ | |||
+ | Учтите, | ||
Ниже приведён неправильный код, где ничего не описывается заблаговременно. | Ниже приведён неправильный код, где ничего не описывается заблаговременно. | ||
Строка 100: | Строка 123: | ||
A,B : array[1 .. n] of integer; | A,B : array[1 .. n] of integer; | ||
</ | </ | ||
+ | |||
+ | === Полный пример === | ||
+ | |||
+ | Подразделы могут следовать в любом порядке и повторяться. | ||
+ | |||
+ | В примере приводится " | ||
+ | |||
+ | Метки описываются там, где это удобно. | ||
+ | |||
+ | <code pascal|Пример раздела описаний> | ||
+ | |||
+ | ... // Здесь могли бы быть заголовок и раздел импорта | ||
+ | const // Начался 1-й раздел констант | ||
+ | Pi = 4.0; // Описание (именованной) константы | ||
+ | // Внимание - мы перекрыли системное определение Пи! | ||
+ | |||
+ | var // Начался 1-й раздел глобальных переменных, | ||
+ | // значит - закончился раздел констант | ||
+ | i, j : integer; | ||
+ | r, q : real; // 2-е описание переменных | ||
+ | k, m : integer; | ||
+ | | ||
+ | const // Начался 2-й раздел констант | ||
+ | n = 10; // Описание (именованной) константы | ||
+ | | ||
+ | type // Начался раздел типов | ||
+ | A10 = array[1..n] of integer; | ||
+ | // Это тип, определённый пользователем. | ||
+ | // Обратите внимание - мы использовали | ||
+ | // ранее описанную константу | ||
+ | |||
+ | var // Начался раздел переменных, | ||
+ | A,B : A10; // 4-е описание переменных пользовательского типа A10 | ||
+ | | ||
+ | ... // Что-то ещё, возможно - ничего | ||
+ | | ||
+ | // Где-то здесь кончается раздел переменных | ||
+ | |||
+ | label // Раздел меток нужен редко | ||
+ | 1, endOfAll; | ||
+ | // Теперь это " | ||
+ | | ||
+ | ... // Что-то ещё, возможно - ничего | ||
+ | | ||
+ | Begin | ||
+ | | ||
+ | // Обязательный раздел кода | ||
+ | |||
+ | ... | ||
+ | | ||
+ | End. // Конец всему (в этой программе)! | ||
+ | </ | ||
+ | |||
+ | |||
Строка 108: | Строка 185: | ||
<code pascal|Пример 1> | <code pascal|Пример 1> | ||
Begin | Begin | ||
- | | + | // Если убрать этот комментарий, |
- | // минимальная правильная программа на Паскале | + | |
+ | // Впрочем, | ||
End. | End. | ||
</ | </ | ||
- | Данная программа работает (стирает с экрана следы работы предыдущих программ), | + | Данная программа |
<code pascal|Пример 2> | <code pascal|Пример 2> | ||
Строка 134: | Строка 212: | ||
Const // Раздел констант | Const // Раздел констант | ||
n = 5; // В данном случае n - не переменная, | n = 5; // В данном случае n - не переменная, | ||
- | m : integer = 6; // Один из ужасов Паскаля. Это - статическая переменная! Без понимания, | + | m : integer = 6; // Один из ужасов Паскаля. Это - статическая переменная! |
+ | // Без понимания, | ||
+ | // но это - настоящая переменная | ||
| | ||
Var // Раздел переменных | Var // Раздел переменных | ||
i: | i: | ||
| | ||
- | Label // Раздел меток. У меток описывать нечего, | + | Label // Раздел меток. |
- | | + | BeeginProgram, |
+ | EndProgram; | ||
+ | | ||
+ | Type | ||
+ | S100 = string[100]; | ||
Procedure Proc(x: | Procedure Proc(x: | ||
+ | // Данная процедура принимает параметр x | ||
+ | // после чего всегда печатает: | ||
+ | // " | ||
+ | Const | ||
+ | S2 = '. Не мешайте работать!'; | ||
+ | Var | ||
+ | S1 : S100; | ||
+ | | ||
Begin: | Begin: | ||
- | | + | |
+ | S1 := ' | ||
+ | writeln(S1, x, S2 ); | ||
End; | End; | ||
- | Begin | + | Begin |
- | BeginProgram: | + | BeginProgram: |
- | goto EndProgram; | + | ; // Отсюда собираемся работать |
- | Proc(n); | + | goto EndProgram; |
- | EndProgram: | + | Proc(n); |
- | ; | + | goto BeginProgram; |
- | End. | + | EndProgram: |
+ | ; // Перекур после честной работы | ||
+ | End. // Теперь - совсем всё | ||
</ | </ | ||
Строка 215: | Строка 310: | ||
end. | end. | ||
</ | </ | ||
+ | |||
+ | Одним оператором (командой) ввода/ | ||
+ | |||
+ | begin | ||
+ | writeln(" | ||
+ | | ||
+ | writeln( 100.0: | ||
+ | writeln( 200.0: | ||
+ | writeln( 300.0: | ||
+ | | ||
+ | writeln( sin(3.14*1/ | ||
+ | | ||
+ | | ||
+ | end. | ||
== Распространённые ошибки == | == Распространённые ошибки == | ||
Строка 251: | Строка 360: | ||
end. | end. | ||
</ | </ | ||
- | |||
- | Одним оператором (командой) ввода/ | ||
- | |||
- | |||
- |