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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
pascal:basics [04/07/2015 11:30] ocapascal:basics [04/07/2015 12:13] (текущий) oca
Строка 69: Строка 69:
   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
Строка 76: Строка 77:
   ...   ...
 End.                  // Конец всему (в этой программе)! End.                  // Конец всему (в этой программе)!
 +
 </code> </code>
  
 +Объекты программы могут быть связаны описанием.
 +
 +<code pascal|Cвязь между объектами>
 +const 
 +  n = 10;                               // Константа n определяет длину массива
 +type
 +  Arr10 = array[1 .. n] of integer;     // Используя n, описываем целый тип массивов 
 +var
 +  A,B : Arr10;                          // Используем описание типа Arr10 для описания переменных A, B 
 +</code>
 +
 +Запомните правило - **если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано заранее**. Например, если вы используете константу для описания массива (как в примере), то она должна быть описана выше по коду. Из этого правила есть единственное исключение, связанное с использованием указателей.
 +
 +Учтите, что библиотечные объекты, т.е. объекты системные или описанные в библиотеках, подключённых с помощью //uses//, описывать не надо и на них можно ссылаться из любого места. Но, как мы узнаем позже, их имена можно "перекрыть"
 +
 +Ниже приведён неправильный код, где ничего не описывается заблаговременно.
 +
 +<code pascal|Так нельзя! >
 +
 +var
 +  A,B : Arr10;                         // А что это?                 
 +  
 +type
 +  Arr10 = array[1 .. n] of integer;    // И сколько же это будет? 
 +    
 +const 
 +  n = 10;
 +   
 +</code>
 +
 +В раздел описаний может входить несколько "однотипных" подразделов описаний.
 +
 +<code pascal|"Одинаковые" подразделы>
 +
 +var
 +  i, j : integer;                       // Описали часть переменных
 +
 +const 
 +  n = 10;                               // Спохватились и описали константу n
 +
 +var
 +  A,B : array[1 .. n] of integer;       // "Дописали" ещё часть переменных
 +</code>
  
 +=== Полный пример ===
  
-Подразделы могут следовать в любом порядке, но запомните правило - **если что-то, описываемое вами, ссылается на что-то другое, то это другое должно быть описано заранее**. Например, если вы используете константу для описания массива (как в примере), то она должна быть описана выше по коду. Учтите, что библиотечные объекты, т.е. объекты системные или описанные в библиотеках, подключённых с помощью //uses//, описывать не надо и на них можно ссылаться из любого местаНо, как мы узнаем позже, их имена можно "перекрыть"!+Подразделы могут следовать в любом порядке и повторяться. 
  
 В примере приводится "канонический" порядок следования подразделов - именованные константы, типы, переменные. За ними часто следуют описания одной или нескольких процедур и функций, которых в примере нет. Затем порядок может повториться. Это делается, чтобы разбить все объекты, используемые в программе "по смыслу" - типы, определённые пользователем, процедуры, работающие с этими типами и вспомогательные объекты - константы и служебные переменные.  В примере приводится "канонический" порядок следования подразделов - именованные константы, типы, переменные. За ними часто следуют описания одной или нескольких процедур и функций, которых в примере нет. Затем порядок может повториться. Это делается, чтобы разбить все объекты, используемые в программе "по смыслу" - типы, определённые пользователем, процедуры, работающие с этими типами и вспомогательные объекты - константы и служебные переменные. 
Строка 88: Строка 134:
 <code pascal|Пример раздела описаний> <code pascal|Пример раздела описаний>
  
 +...                      // Здесь могли бы быть заголовок и раздел импорта 
 const                    // Начался 1-й раздел констант const                    // Начался 1-й раздел констант
   Pi = 4.0;              // Описание (именованной) константы   Pi = 4.0;              // Описание (именованной) константы
Строка 130: Строка 177:
  
  
- 
-<code pascal|Cвязь между объектами> 
-const  
-  n = 10;                               // Константа n определяет длину массива 
-type 
-  Arr10 = array[1 .. n] of integer;     // Используя n, описываем целый тип массивов  
-var 
-  A,B : Arr10;                          // Используем описание типа Arr10 для описания переменных A, B  
-</code> 
- 
-Из этого правила есть единственное исключение, связанное с использованием указателей. 
- 
-Ниже приведён неправильный код, где ничего не описывается заблаговременно. 
- 
-<code pascal|Так нельзя! > 
- 
-var 
-  A,B : Arr10;                         // А что это?                  
-   
-type 
-  Arr10 = array[1 .. n] of integer;    // И сколько же это будет?  
-     
-const  
-  n = 10; 
-    
-</code> 
- 
-В раздел описаний может входить несколько "однотипных" подразделов описаний. 
- 
-<code pascal|"Одинаковые" подразделы> 
- 
-var 
-  i, j : integer;                       // Описали часть переменных 
- 
-const  
-  n = 10;                               // Спохватились и описали константу n 
- 
-var 
-  A,B : array[1 .. n] of integer;       // "Дописали" ещё часть переменных 
-</code> 
  
  
Строка 178: Строка 185:
 <code pascal|Пример 1> <code pascal|Пример 1>
 Begin Begin
-                    // Если убрать этот комментарий, то получится  +   // Если убрать этот комментарий, то получится  
-                    // минимальная правильная программа на Паскале+   // минимальная правильная программа на Паскале 
 +   // Впрочем, для Паскаля его и нет.
 End. End.
 </code> </code>
  
-Данная программа работает (стирает с экрана следы работы предыдущих программ), но не содержит ни одного описания.+Данная программа действительно работает (стирает с экрана следы работы предыдущих программ), но не содержит ни одного описания. Её реальный аналог есть, например, в операционной системе ДОС.
  
 <code pascal|Пример 2> <code pascal|Пример 2>
Строка 204: Строка 212:
 Const               // Раздел констант  Const               // Раздел констант 
   n = 5;            // В данном случае n - не переменная, а другое обозначение 5.   n = 5;            // В данном случае n - не переменная, а другое обозначение 5.
-  m : integer = 6;  // Один из ужасов Паскаля. Это - статическая переменная! Без понимания, что к чему, лучше не использовать.+  m : integer = 6;  // Один из ужасов Паскаля. Это - статическая переменная!  
 +                    // Без понимания, что к чему, лучше не использовать
 +                    // но это - настоящая переменная
      
 Var                 // Раздел переменных Var                 // Раздел переменных
   i:integer;        // Запасная переменная - нам не потребуется   i:integer;        // Запасная переменная - нам не потребуется
      
-Label               // Раздел меток. У меток описывать нечего, но они должны быть перечислены. +Label               // Раздел меток.  
-  BeeginProgram,  EndProgram +  BeeginProgram,    // У меток описывать нечего, но они должны  
 +  EndProgram;       // быть перечислены. 
 +   
 +Type 
 +  S100 =  string[100]
  
 Procedure Proc(x:integer); Procedure Proc(x:integer);
 +// Данная процедура принимает параметр x
 +// после чего всегда печатает:  
 +// "Опять - 25. Не мешайте работать!"
  
 +Const 
 +  S2 = '. Не мешайте работать!'; 
 +Var   
 +  S1 : S100; 
 +  
 Begin: Begin:
-  writeln('Не мешайте работать!')+  x  := n;           // Для данной процедуры значения параметров не важны  
 +  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.                 // Теперь - совсем всё 
 </code> </code>