мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияПоследняя версияСледующая версия справа и слева | ||
pascal:basics [20/09/2010 11:35] – oca | pascal:basics [04/07/2015 11:42] – oca | ||
---|---|---|---|
Строка 2: | Строка 2: | ||
FIXME | FIXME | ||
- | Структура программы | + | == Структура программы |
+ | |||
+ | Общая структура программы на языке Паскаль задана жёстко и выглядит так: | ||
<code pascal|Общая структура программы> | <code pascal|Общая структура программы> | ||
- | Program < | + | Program < |
- | // - оставлено для совместимости | + | // Предложение, |
- | Uses < | + | |
- | // никаких дополнительных библиотек | + | // используемой нами системе Free Pascal |
- | < | + | // и большинстве (во всех?) современных версий Паскаля |
- | // из | + | // никакой |
- | // В принципе, | + | // Оно |
- | Begin | + | // языка, которые его требуют. |
- | < | + | // Например: |
- | End. // Программа кончается точкой | + | Program ChoiseSort3v; |
+ | // Предложения заканчивается точкой с запятой | ||
+ | |||
+ | Uses < | ||
+ | // **Раздел импорта**, | ||
+ | // который всегда состоит из одного предложения! | ||
+ | | ||
+ | // используете никаких дополнительных библиотек. | ||
+ | // Например: | ||
+ | Uses CRT, OGLgraph; | ||
+ | // Список разделяется запятыми, | ||
+ | // предложения заканчивается точкой с запятой | ||
+ | | ||
+ | < | ||
+ | | ||
+ | // подразделов, | ||
+ | // но все они должны быть здесь - перед кодом. | ||
+ | // | ||
+ | // Этот раздел содержит описание всего, что | ||
+ | // не задано изначально, | ||
+ | // не импортируется | ||
+ | // не является локальным объектом внутри процедуры. | ||
+ | // А именно - именованные константы, | ||
+ | // переменные и наконец - имена меток. | ||
+ | // | ||
+ | | ||
+ | | ||
+ | Begin // Обязательные операторные скобки Begin-end | ||
+ | < | ||
+ | | ||
+ | // Чисто теоретически, | ||
+ | // Тогда программа честно ничего не делает. | ||
+ | // Но " | ||
+ | End. | ||
</ | </ | ||
+ | |||
+ | Текст в **угловых скобках** (символы < и >) требует замены "по смыслу" | ||
+ | |||
+ | Ещё раз обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем. | ||
+ | |||
+ | == Раздел описаний == | ||
+ | |||
+ | Раздел описаний может состоять из нескольких подразделов, | ||
+ | |||
+ | <code pascal|Простой пример раздела описаний> | ||
+ | |||
+ | const // Начался раздел констант | ||
+ | n = 10; // Описание (именованной) константы | ||
+ | | ||
+ | var // Начался раздел глобальных переменных, | ||
+ | // значит - закончился раздел констант | ||
+ | i, j : integer; | ||
+ | r, q : real; // 2-е описание переменных | ||
+ | k, m : integer; | ||
+ | |||
+ | Begin | ||
+ | | ||
+ | // Обязательный раздел кода | ||
+ | ... | ||
+ | End. // Конец всему (в этой программе)! | ||
+ | </ | ||
+ | |||
+ | Объекты программы могут быть связаны описанием. | ||
+ | |||
+ | <code pascal|Cвязь между объектами> | ||
+ | const | ||
+ | n = 10; // Константа n определяет длину массива | ||
+ | type | ||
+ | Arr10 = array[1 .. n] of integer; | ||
+ | var | ||
+ | A,B : Arr10; | ||
+ | </ | ||
+ | |||
+ | Запомните правило - **если что-то, | ||
+ | |||
+ | Учтите, | ||
+ | |||
+ | Ниже приведён неправильный код, где ничего не описывается заблаговременно. | ||
+ | |||
+ | <code pascal|Так нельзя! > | ||
+ | |||
+ | var | ||
+ | A,B : Arr10; | ||
+ | | ||
+ | type | ||
+ | Arr10 = array[1 .. n] of integer; | ||
+ | | ||
+ | const | ||
+ | n = 10; | ||
+ | |||
+ | </ | ||
+ | |||
+ | В раздел описаний может входить несколько " | ||
+ | |||
+ | <code pascal|" | ||
+ | |||
+ | var | ||
+ | i, j : integer; | ||
+ | |||
+ | const | ||
+ | n = 10; // Спохватились и описали константу n | ||
+ | |||
+ | var | ||
+ | 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. // Конец всему (в этой программе)! | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
== Примеры программ нелепых, | == Примеры программ нелепых, | ||
Строка 78: | Строка 238: | ||
- | == Раздел описаний == | ||
- | |||
- | <code pascal|Раздел описаний> | ||
- | </ | ||
===== Ввод/ | ===== Ввод/ | ||
Строка 134: | Строка 290: | ||
end. | end. | ||
</ | </ | ||
+ | |||
+ | Одним оператором (командой) ввода/ | ||
+ | |||
+ | begin | ||
+ | writeln(" | ||
+ | | ||
+ | writeln( 100.0: | ||
+ | writeln( 200.0: | ||
+ | writeln( 300.0: | ||
+ | | ||
+ | writeln( sin(3.14*1/ | ||
+ | | ||
+ | | ||
+ | end. | ||
== Распространённые ошибки == | == Распространённые ошибки == | ||
Строка 149: | Строка 319: | ||
begin | begin | ||
- | read (0.3); | + | read (0.3); |
read (x); // тоже самое, но константа указана по имени | read (x); // тоже самое, но константа указана по имени | ||
- | readln (0.15 * y); // тоже самое, | + | readln (0.15 * y); // тоже самое, |
readln (A); // составной тип данных можно заполнять только по-элементно | readln (A); // составной тип данных можно заполнять только по-элементно | ||
- | readln (F); // " | + | readln (F); // " |
+ | // | ||
end. | end. | ||
</ | </ | ||
<code pascal|Бессмысленный вывод> | <code pascal|Бессмысленный вывод> | ||
- | </ | + | var |
- | + | A : array[1..9] of integer; | |
- | Одним оператором (командой) ввода/ | + | F : text; |
- | + | ||
+ | begin | ||
+ | writeln (x, 0.15 * y, 0.3); // Вывод - будет, но все выводимые значения сольются в нечто нечитаемое | ||
+ | writeln (A); // составной тип данных можно выводить только по-элементно | ||
+ | writeln (F); // " | ||
+ | // что выводить. Выводить таким образом у файл F - нельзя! | ||
+ | end. | ||
+ | </ |