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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
pascal:basics [04/07/2015 10:32] ocapascal:basics [04/07/2015 11:26] oca
Строка 4: Строка 4:
 == Структура программы == == Структура программы ==
  
-Общая структура программы на языке Паскаль задана жёстко и выглядит так:+Общая структура программы на языке Паскаль задана жёстко и выглядит так: 
  
 <code pascal|Общая структура программы> <code pascal|Общая структура программы>
-__Program__ <правильное имя>;+Program <правильное имя>;
     // Предложение, содержащее **заголовок программы**.      // Предложение, содержащее **заголовок программы**. 
-    // Данное предложение может отсутствовать, поскольку в системе Free Pascal +    // Данное предложение может отсутствовать, поскольку в 
-    // и большинстве (во всех?) современных версий Паскаля никакой роли не играет. +    // используемой нами системе Free Pascal 
-    // Оно оставлено для совместимости с другими версиями языка+    // и большинстве (во всех?) современных версий Паскаля  
 +    // никакой роли не играет. 
 +    // Оно оставлено для совместимости с другими версиями  
 +    // языка, которые его требуют.
     // Например:     // Например:
-__Program__ //ChoiseSort3v//+Program ChoiseSort3v; 
     // Предложения заканчивается точкой с запятой          // Предложения заканчивается точкой с запятой     
  
-__Uses__ <список подключаемых библиотек>;    +Uses <список подключаемых библиотек>;    
-    // **Раздел импорта**, который всегда состоит из одного предложения! +    // **Раздел импорта**,  
-    // Данное предложение может отсутствовать, если вы не используете  +    // который всегда состоит из одного предложения! 
-    // никаких дополнительных библиотек.+    // Данное предложение может отсутствовать, если вы не  
 +    // используете никаких дополнительных библиотек.
     // Например:     // Например:
-__Uses__ //CRT, OGLgraph//;   +Uses CRT, OGLgraph;   
-    // Список разделяется запятыми, предложения заканчивается точкой с запятой  +    // Список разделяется запятыми,  
 +    // предложения заканчивается точкой с запятой  
                                                                                  
 <Раздел описаний>                        <Раздел описаний>                       
Строка 29: Строка 34:
     // но все они должны быть здесь - перед кодом.      // но все они должны быть здесь - перед кодом. 
     //     //
-    // Этот раздел содержит описание всего, что не задано изначально и не   +    // Этот раздел содержит описание всего, что  
-    // импортируется из  дополнительных библиотек. +    //   не задано изначально  
 +    //   не импортируется из библиотек, 
 +    //   не является локальным объектом внутри процедуры. 
 +    // А именно - именованные константы, пользовательские типы, 
 +    // переменные и наконец - имена меток. 
     //     //
-    // В принципе, тоже может отсутствовать. +    // В принципе, этот раздел тоже может отсутствовать. 
                                                                                                                                                          
-__Begin__                                   // Обязательные операторные скобки Begin-end+Begin    // Обязательные операторные скобки Begin-end
   <Раздел кода>                            <Раздел кода>                         
-    // Операторы, составляющие "главную процедуру" - чисто теоретически, их тоже может не быть!+    // Операторы, составляющие "главную процедуру"   
 +    // Чисто теоретически, их тоже может не быть!
     // Тогда программа честно ничего не делает.     // Тогда программа честно ничего не делает.
-__End.__                                    // Программа кончается точкой +    // Но "скобки" должны быть. 
 +End.     // Программа кончается точкой 
 </code> </code>
  
 +Текст в **угловых скобках** (символы < и >) требует замены "по смыслу". Не путайте с операциями < и >!
  
-Обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем.+Ещё раз обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации её структуры. Все части идут именно в этом порядке и не повторяются. Но некоторые могут отсутствовать совсем. 
  
 == Раздел описаний == == Раздел описаний ==
  
-Раздел описаний может состоять из нескольких подразделов, разбитых по категориям описываемых объектов - типов, переменных, меток и констант. Отдельными подразделами считаются каждая функция или процедура. +Раздел описаний может состоять из нескольких подразделов, разбитых по категориям описываемых объектов - типов, переменных, меток и констант. Отдельными подразделами считаются каждая функция или процедура
 + 
 +Подразделы могут следовать в любом порядке, но запомните правило - **если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано заранее**. Например, если вы используете константу для описания массива (как в примере), то она должна быть описана выше по коду. Учтите, что библиотечные объекты, т.е. объекты системные или описанные в библиотеках, подключённых с помощью //uses//, описывать не надо и на них можно ссылаться из любого места. Но, как мы узнаем позже, их имена можно "перекрыть"
 + 
 +В примере приводится "канонический" порядок следования подразделов - именованные константы, типы, переменные. За ними часто следуют описания одной или нескольких процедур и функций, которых в примере нет. Затем порядок может повториться. Это делается, чтобы разбить все объекты, используемые в программе "по смыслу" - типы, определённые пользователем, процедуры, работающие с этими типами и вспомогательные объекты - константы и служебные переменные.  
 + 
 +Метки описываются там, где это удобно.
  
 <code pascal|Пример раздела описаний> <code pascal|Пример раздела описаний>
-const                    // Начался раздел констант + 
-  10               // Описание константы +const                    // Начался 1-й раздел констант 
-    +  Pi 4.0             // Описание (именованной) константы 
-var                      // Начался раздел переменных, значит - закончился раздел констант+                         // Внимание - мы перекрыли системное определение Пи! 
 + 
 +var                      // Начался 1-й раздел глобальных переменных,  
 +                         // значит - закончился раздел констант 
   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. Имеем право.
 +  
 +const                    // Начался 2-й раздел констант
 +  n = 10;                // Описание (именованной) константы
 +  
 +type                     // Начался раздел типов
 +  A10 = array[1..n] of integer;
 +                         // Это тип, определённый пользователем.  
 +                         // Обратите внимание - мы использовали 
 +                         // ранее описанную константу
 +                         
 +var                      // Начался раздел переменных, закончился раздел типов
 +  A,B  : A10;            // 4-е описание переменных пользовательского типа A10 
      
   ...                    // Что-то ещё, возможно - ничего   ...                    // Что-то ещё, возможно - ничего
      
   // Где-то здесь кончается раздел переменных   // Где-то здесь кончается раздел переменных
 +
 +label                    // Раздел меток нужен редко
 +  1, endOfAll;           // список объявленных меток
 +                         // Теперь это "законные" метки
      
   ...                    // Что-то ещё, возможно - ничего   ...                    // Что-то ещё, возможно - ничего
Строка 72: Строка 109:
 </code> </code>
  
-Если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано ранее. Например, если вы используете константу для описания массива, то она должна быть описана заранее. Учтите, что библиотечные объекты, т.е. системные или описанные в библиотеках, подключённых с помощью //uses//, описывать не надо и на них можно ссылаться из любого места. +
  
 <code pascal|Cвязь между объектами> <code pascal|Cвязь между объектами>