мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Последняя версияСледующая версия справа и слева
pascal:basics [04/07/2015 10:45] ocapascal:basics [04/07/2015 11:42] oca
Строка 7: Строка 7:
  
 <code pascal|Общая структура программы> <code pascal|Общая структура программы>
-__Program__ <правильное имя>;+Program <правильное имя>;
     // Предложение, содержащее **заголовок программы**.      // Предложение, содержащее **заголовок программы**. 
     // Данное предложение может отсутствовать, поскольку в     // Данное предложение может отсутствовать, поскольку в
Строка 16: Строка 16:
     // языка, которые его требуют.     // языка, которые его требуют.
     // Например:     // Например:
-__Program__ //ChoiseSort3v//+Program ChoiseSort3v; 
     // Предложения заканчивается точкой с запятой          // Предложения заканчивается точкой с запятой     
  
-__Uses__ <список подключаемых библиотек>;   +Uses <список подключаемых библиотек>;   
     // **Раздел импорта**,      // **Раздел импорта**, 
     // который всегда состоит из одного предложения!     // который всегда состоит из одного предложения!
Строка 25: Строка 25:
     // используете никаких дополнительных библиотек.     // используете никаких дополнительных библиотек.
     // Например:     // Например:
-__Uses__ //CRT, OGLgraph//;  +Uses CRT, OGLgraph;  
     // Список разделяется запятыми,      // Список разделяется запятыми, 
     // предложения заканчивается точкой с запятой       // предложения заканчивается точкой с запятой  
Строка 38: Строка 38:
     //   не импортируется из библиотек,     //   не импортируется из библиотек,
     //   не является локальным объектом внутри процедуры.     //   не является локальным объектом внутри процедуры.
-    // А именно - **именованные константы****пользовательские типы**+    // А именно - именованные константы, пользовательские типы, 
-    // **переменные** и наконец - имена **меток**+    // переменные и наконец - имена меток. 
     //     //
     // В принципе, этот раздел тоже может отсутствовать.      // В принципе, этот раздел тоже может отсутствовать. 
                                                                                                                                                          
-__Begin__  // Обязательные **операторные скобки** Begin-end+Begin    // Обязательные операторные скобки Begin-end
   <Раздел кода>                            <Раздел кода>                         
     // Операторы, составляющие "главную процедуру"       // Операторы, составляющие "главную процедуру"  
Строка 49: Строка 49:
     // Тогда программа честно ничего не делает.     // Тогда программа честно ничего не делает.
     // Но "скобки" должны быть.     // Но "скобки" должны быть.
-__End.__   // Программа кончается точкой +End    // Программа кончается точкой 
 </code> </code>
  
-В этом примере кода подчёркнуты **служебные слова**, а имена (**идентификаторы**) выделены наклоном. Текст в угловых скобках "<и ">требует замены "по смыслу"В последствии мы так делать не будем!+Текст в **угловых скобках** (символы < и >требует замены "по смыслу"Не путайте с **операциями** < и >!
  
 Ещё раз обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем.  Ещё раз обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем. 
Строка 58: Строка 58:
 == Раздел описаний == == Раздел описаний ==
  
-Раздел описаний может состоять из нескольких подразделов, разбитых по категориям описываемых объектов - типов, переменных, меток и констант. Отдельными подразделами считаются каждая функция или процедура. +Раздел описаний может состоять из нескольких подразделов, разбитых по категориям описываемых объектов - типов, переменных, меток и констант. Отдельными подразделами считаются каждая функция или процедура. 
 + 
 +<code pascal|Простой пример раздела описаний>
  
-<code pascal|Пример раздела описаний> 
 const                    // Начался раздел констант const                    // Начался раздел констант
-  n = 10;                // Описание константы +  n = 10;                // Описание (именованной) константы 
-    +   
-var                      // Начался раздел переменных, значит - закончился раздел констант+var                      // Начался раздел глобальных переменных,  
 +                         // значит - закончился раздел констант 
   i, j : integer;        // 1-е описание переменных   i, j : integer;        // 1-е описание переменных
   r, q : real;           // 2-е описание переменных   r, q : real;           // 2-е описание переменных
   k, m : integer;        // 3-е описание переменных - снова integer. Имеем право.   k, m : integer;        // 3-е описание переменных - снова integer. Имеем право.
-   + 
-  ...                    // Что-то ещё, возможно - ничего +Begin
-   +
-  // Где-то здесь кончается раздел переменных +
-   +
-  ...                    // Что-то ещё, возможно - ничего +
-   +
-  Begin+
      
   // Обязательный раздел кода   // Обязательный раздел кода
- 
   ...   ...
-   +End.                  // Конец всему (в этой программе)!
-  End.                  // Конец всему (в этой программе)!+
 </code> </code>
  
-Если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано ранее. Например, если вы используете константу для описания массива, то она должна быть описана заранее. Учтите, что библиотечные объекты, т.е. системные или описанные в библиотеках, подключённых с помощью //uses//, описывать не надо и на них можно ссылаться из любого места+Объекты программы могут быть связаны описанием.
  
 <code pascal|Cвязь между объектами> <code pascal|Cвязь между объектами>
Строка 95: Строка 89:
 </code> </code>
  
-Из этого правила есть единственное исключение, связанное с использованием указателей.+Запомните правило - **если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано заранее**. Например, если вы используете константу для описания массива (как в примере), то она должна быть описана выше по коду. Из этого правила есть единственное исключение, связанное с использованием указателей. 
 + 
 +Учтите, что библиотечные объекты, т.е. объекты системные или описанные в библиотеках, подключённых с помощью //uses//, описывать не надо и на них можно ссылаться из любого места. Но, как мы узнаем позже, их имена можно "перекрыть"
  
 Ниже приведён неправильный код, где ничего не описывается заблаговременно. Ниже приведён неправильный код, где ничего не описывается заблаговременно.
Строка 125: Строка 121:
   A,B : array[1 .. n] of integer;       // "Дописали" ещё часть переменных   A,B : array[1 .. n] of integer;       // "Дописали" ещё часть переменных
 </code> </code>
 +
 +=== Полный пример ===
 +
 +Подразделы могут следовать в любом порядке и повторяться. 
 +
 +В примере приводится "канонический" порядок следования подразделов - именованные константы, типы, переменные. За ними часто следуют описания одной или нескольких процедур и функций, которых в примере нет. Затем порядок может повториться. Это делается, чтобы разбить все объекты, используемые в программе "по смыслу" - типы, определённые пользователем, процедуры, работающие с этими типами и вспомогательные объекты - константы и служебные переменные. 
 +
 +Метки описываются там, где это удобно.
 +
 +<code pascal|Пример раздела описаний>
 +
 +...                      // Здесь могли бы быть заголовок и раздел импорта 
 +const                    // Начался 1-й раздел констант
 +  Pi = 4.0;              // Описание (именованной) константы
 +                         // Внимание - мы перекрыли системное определение Пи!
 +
 +var                      // Начался 1-й раздел глобальных переменных, 
 +                         // значит - закончился раздел констант 
 +  i, j : integer;        // 1-е описание переменных
 +  r, q : real;           // 2-е описание переменных
 +  k, m : integer;        // 3-е описание переменных - снова integer. Имеем право.
 +  
 +const                    // Начался 2-й раздел констант
 +  n = 10;                // Описание (именованной) константы
 +  
 +type                     // Начался раздел типов
 +  A10 = array[1..n] of integer;
 +                         // Это тип, определённый пользователем.  
 +                         // Обратите внимание - мы использовали 
 +                         // ранее описанную константу
 +                         
 +var                      // Начался раздел переменных, закончился раздел типов
 +  A,B  : A10;            // 4-е описание переменных пользовательского типа A10 
 +  
 +  ...                    // Что-то ещё, возможно - ничего
 +  
 +  // Где-то здесь кончается раздел переменных
 +
 +label                    // Раздел меток нужен редко
 +  1, endOfAll;           // список объявленных меток
 +                         // Теперь это "законные" метки
 +  
 +  ...                    // Что-то ещё, возможно - ничего
 +  
 +  Begin
 +  
 +  // Обязательный раздел кода
 +
 +  ...
 +  
 +  End.                  // Конец всему (в этой программе)!
 +</code>
 +
 +