Rambler's Top100
расчет шкафа купе

Сегодня перед вами откроется страшная тайна.... всё это время мы вас беспощадно обманывали !!!!!!!!! :)
На самом деле всё не так плохо, просто решили, что не стоит сначала загружать народ не понятными терминами. Сегодня всё встанет на свои законные места. Помните функцию ClrScr - так вот тайна её рождения состоит в том, что это ПРОЦЕДУРА. Процедуры и функции очень похожи друг на друга. Основное отличие состоит в том, что функция может нам что-то возвратить, а процедура нет. ClrScr - ничего нам не возвращает => процедура, Round - возвращает => функция. В некоторых языках (самый яркий пример - С/С++) вообще нет понятия процедуры - там только функции. При этом в качестве процедур используются функции которые ничего не возвращают. В Паскале же процедуры и функции разделили между собой. Итак давайте научимся писать свои собственные процедуры и функции. Описание процедуры начинается со следующего заголовка:

procedure ИМЯ ( СПИСОК_ПАРАМЕТРОВ );
Список параметров может отсутствовать (например всё та же ClrScr - нет параметров). В остальном процедура очень похожа на программу. Кстате процедуры и функции вместе называют - под-программы! Сегодня мы поговорим о процедурах. Плюсы в использовании процедур очевидны - не надо много раз повторять один и тот же код - достаточно просто указать имя процедуры. Давайте напишем такой пример:

procedure DisplayString;
var
   i : integer;
begin
     ClrScr;
     for i := 0 to 10 do
       writeLn ('Write something ....' )
end;

Как видите у процедуры есть своя секция переменных, секция меток, констант и секция выполняемых инструкций (секция кода). Код процедуры начинается соответственно со слова begin и кончается словом end. Обратите внимание, что после end мы поставили точку с запятой! Как вы помните точка - это признак конца программы, а программа не заканчивается процедурой! Можно сказать, что до этого наша программа и была одной процедурой. Только без имени. Например в том же С - у этой фунции есть имя main. Процедуры являются под-программами, поэтому они могут в свою очередь содержать под-под-программы, которые тоже могут содержать под-под-под-программы :) и так далее. Например структура нашей программы выглядела так (слева для наглядности нарисована схема, а справа написан текст программы):

Program ...;

begin
........
end.

Если мы добавим две под программы, то она изменится в такую:

Под-программа А

Program ...;

procedure A;
begin
.......
end;

Под-программа B


procedure B;
begin
........
end;

begin
........
end.

Если мы к под-программе А добавим две под-программы, то структура изменится в следующую строну:

ПРОГРАММА


Program ...;

begin
........
end.

Под-программа А


procedure A;

begin
.......
end;

под-программа А1


	procedure A1;
	begin
	........
	end;

под-программа А2


	procedure A2;
	begin
	..........
	end;

Под-программа B


procedure B;
begin
........
end;
Program Day_of_week;

uses CRT;

procedure GetDay (var d, m, y : integer);
var
   correct : byte;
begin
     correct := 1;
     repeat
          writeLn ('Введите дату.');
          write ('День - ');
          readLn  (d);
          write ('Месяц - ');
          readLn (m);
          write ('Год - ');
          readLn (y);

         { Проверим правильность года.  Если год не "правильный", то попросим ввести дату ещё раз }
	  if y <= 4903 then
            if y >= 1582 then
               correct := 0;
     until correct = 0
end;

procedure CountDay (d, m, y : integer);
var
   week : array [0 .. 6] of string[11];
   c, w : integer;
begin
     week [0] := 'воскресенье';
     week [1] := 'понедельник';
     week [2] := 'вторник';
     week [3] := 'среда';
     week [4] := 'четверг';
     week [5] := 'пятница';
     week [6] := 'суббота';

     {  Месяц январь или февраль = > нужно преобразовать }
     if m < 3 then
     begin
          m := m + 10;
          y := y - 1
     end
     else
          m := m - 2;

     c := y div 100;
     y := y mod 100;
     w := abs (trunc (2.6 * m -0.2) + d + y div 4 + y + c div 4 - 2 * c) mod 7;
     writeLn ('соответствует день недели -  ', week [w])
end;

var
   d, y, m : integer;

begin
     ClrScr;
     GetDay (d, m, y);
     CountDay (d, m, y)
end.

Программа работает по принципу "спросил-ответил". Пользователь вводит дату, программа выдаёт день недели. Думаю вам понятно как построить на основе этих данных "вечный" календарь. Комментировать особенно нечего, кроме того, что я пренебрёг собственными рекомендациями и назвал параметры в процедурах и глобальные переменные одинаково :) Обратите внимание на следующее - в процедуре получения даты (GetDay) мы передаём адресса переменных => при выходе из процедуры их значения изменятся. А в процедуре вычисления дня недели (CountDay) мы передаём просто значения переменных => после выхода из процедуры они не изменятся. Неплохо бы исселдовать программу в отладчике. До этого мы для пошагового исполнения использовали клавишу F8. Однако что бы заходить в функции и процедуры нам подребуется нажимать клавишу F7. Используя F8 (пошагово без захода в функции и процедуры) мы увидим исполнение 3-х строчек. А что б увидеть исполнение всех процедур и функций программы нам нужно использовать пошаговый режим с заходом в функции F7. Ещё можно обратить внимание на объявление массива строк. String это такой же тип как и integer поэтому мы вполне можем объявить массив типа String. Так же можно добавить проверку на корректность введённого дня и месяца.




программирование на Паскале, Pascal, BP, TP, BorlandPascal, TurboPascal turbo pascal 7.0, borland pascal 7.0, языки программирования, pascal учебник
Рад приветствовать! =) Начнем мы с истории данного сайта. Изначально он разрабатывался как типично авторский проект, не неся в себе особых целей. Я лишь хотел освоить азы html верстки и опробывать свои силы в разработке web-сайтов. Тематика "программирование на Паскале" была выбрана не случайно, до этого я долго изучал этот ЯП и всё это вылилось в написание собственного самоучителя по Паскалю. Сейчас это всё вспоминается с некоторой долей иронии и улыбкой на лице. В нынешнее время я полностью занимаюсь web-разработками и отошел от прикладного программирования, но данный проект решил всё же не забрасывать и вдохнуть в него новую жизнь, освежив дизайн и контент.

С уважением, Евгений Злобин
турбо-паскаль скачать, файлы паскаль, бесплтано скачать pascal