Моя
библиотека
Программирование Pascal
Яндекс.Метрика
Оглавление:
 
Никлаус Вирт создатель языка программирования Pascal.
Powered by TripAdvisor
СТРУКТУРА ПРОГРАММЫ
В программе, написанной на  Паскале, могут быть следующие разделы:
Program ... ; { Заголовок программы }
Uses ... ; { Подключение модулей }
Label ... ; { Раздел объявления меток }
Const ... ; { Раздел объявления констант }
Type ... ; { Раздел объявления новых типов }
Var ... ; { Раздел объявления переменных }
Procedure ... ; { Описание своих процедур }
Function ... ; { Описание своих функций }
Begin { начало основной программы }
 ...;
 { Операторы }
 ...;
End.
Обязательной частью является лишь тело программы, которое начинается словом begin, а заканчивается словом end с точкой. Операторы в Паскале разделяются точкой запятой. Заголовок программы является хотя и необязательным, но желательным элементом и состоит из зарезервированного слова program и идентификатора - имени программы, за котором следует точка с запятой. Порядок объявлений и описаний не регламентируется.
ПРИМЕР : Простейшая программа.
program prim_1; { демонстрация структуры программы}
{эта программа не требует никаких объявлений и описаний}
begin
 write('Привет! Вот мы и начали.') (* эта строка текста появится на экране *)
end.
ТИПЫ ДАННЫХ
Понятие типа данных является ключевым в языке Паскаль. Тип данных характеризует внутреннее представление, множество допустимых значений для этих данных, а также совокупность операций над ними.
Целые типы
Слово Integer (читается " 'интеджер", переводится ЦЕЛЫЙ)  указывает, что а и b имеют право быть целыми числами, а не дробными. Смысл подобного ограничения в том, что Паскаль по-разному работает с целыми и дробными числами, а поскольку он язык строгий, то требует, чтобы программист точно указал, к какому из этих двух типов относятся числа.
 
·    Integer (-32767 ... 32768, 2 байта),                   основные типы
Для того, чтобы переменная имела право принимать значения больших целых чисел, она должна быть описана не как Integer, а как LongInt (сокращение от Long Integer - Длинное Целое, читается “лонг'инт”). Под переменную типа LongInt компьютер отводит в памяти 4 байта и она может принимать значения в диапазоне от  2147483648 до 2147483647.
·    Longint (-2147483648 ... 2147483647, 4 байта),
· Вещественные типы
. Программист имеет право любую переменную описать не как целую (Integer), а как вещественную (Real). В этом случае переменная имеет право принимать любые целые и дробные значения.По-английски Real читается   " 'риэл", переводится "вещественный". Под переменную типа Real Паскаль отводит в памяти ячейку размером в 6 байтов.
·  Real (занимает 6 байт, диапазон от 2.9E-39 до 1.7E+38 по модулю, точность 11-12 значащих цифр)   основной тип
 
  
Логический тип
Переменные логического типа Boolean занимают в памяти один байт и могут принимать одно из двух значений False - ложное или True - истинное.
 
Символьный тип
Символьный тип Char также называют литерным. Он позволяет работать с символами, которые записываются двумя способами: в одинарных кавычках или по их коду, например 'a', 'B', '*' или, что то же самое, #97, #130, #42. В отличие от текста программы на паскале, символы, соответствующие строчным и заглавным буквам различаются.
Строковый тип
: String говорит о том, что переменная a обязана иметь строковое (текстовое) значение, то есть ее значением будет не число, а произвольная цепочка символов, например,       Привет всем!     или    рпН2Н(*fD6:u   . Слово   String   читается "стринг", переводится "строка".
Служебные слова
 
•    BEGIN будем ставить в начале программы, чтобы компьютеру было видно, откуда она начинается. (Это правило мы очень скоро уточним). BEGIN переводится НАЧАЛО, читается "би'гин".
•    END с точкой ставится в конце программы, чтобы компьютеру было видно, где она кончается. END переводится КОНЕЦ, читается "энд".
Точкой с запятой необходимо отделять операторы друг от друга. Служебные слова BEGIN и END от операторов точкой с запятой отделять не нужно.
Процедура вывода Write
Процедура вывода WriteLn.
Первый оператор, с которым мы познакомимся, занимается исключительно тем, что приказывает компьютеру изобразить на экране монитора ту или иную информацию, состоящую из букв (символов) и чисел. Пусть мы хотим, чтобы компьютер изобразил на экране число 1999. Эту задачу выполняет процедура Write. К ней обратимся так -  Write(1999).  То, что нужно изобразить, положено заключать в круглые скобки. По-английски слово Write  означает "пиши". Для тех, кто плохо разбирается в английской транскрипции, я возьму грех на душу и приведу примерное произношение русскими буквами - «райт»
КАК  ПИШЕМ ОБРАЩЕНИЕ К ПРОЦЕДУРЕ    ЧТО  ВИДИМ В РЕЗУЛЬТАТЕ  НА  ЭКРАНЕ
Write( -500)                   -500
Write(3 + 2)                    5
Пояснения: Можно печатать не только числа, но и результаты вычисления арифметических выражений
Write(3 * 2)                    6
    Знак  *  обозначает умножение
Write(2 * 2 - 1)                    3
Write( 'Хорошо!' )                Хорошо!
    Текст, в отличие от чисел и выражений, нужно брать в одинарные кавычки
Write( 'Я изучаю Паскаль' )            Я изучаю Паскаль
Write( 3+2 ,  4+4)                    58
Это не пятьдесят восемь, а два числа: пять и восемь. “К сожалению”, они расположены вплотную друг к другу. Чуть ниже вам станет ясно, как преодолеть этот “недостаток” оператора Write.
Write( 'Это'   ,    4+4   ,  'кошек' )            Это8кошек
Как видите, один оператор Write может выводить сразу несколько элементов. Элементы нужно отделять друг от друга запятыми. В этом примере - три элемента:   
1)текст  'Это'   
2)выражение  4+4   
3)текст 'кошек' .
Все элементы выводятся в одну строку вплотную друг к другу. Если вся информация, выводимая оператором
Write, не умещается в одну строку, то не уместившаяся часть автоматически выводится с начала следующей строки. 
Самое трудное для новичка - не путать запятые и кавычки, находить элементы и отличать текстовые элементы от чисел и выражений.
Совет: сначала  найдите внутри скобок запятые. Теперь, чтобы отличить текстовые элементы от прочих, обратим внимание, что они заключены в кавычки.
 
   Как видите, результат не зависит от количества  пробелов (пропусков, пустых мест) снаружи от текстовых элементов, взятых в кавычки. Но пробелы, встретившиеся внутри кавычек, отображаются на экране:
Write( 'Это   ',4+4,'   кошек' )            Это   8   кошек
Write( '16+16='  ,  16+16)                16+16=32
Здесь два элемента : текст '16+16='  и выражение 16+16 .  Несмотря на то, что текст очень похож на выражение, компьютер узнает его по кавычкам и не вычисляет, а просто воспроизводит, как записано -    16+16=   .  Любой элемент, заключенный в кавычки, Паскаль считает текстом.    
Write( 3+2 ,   '  '   , 4+4)                5  8
Здесь три элемента. Второй элемент - текст, состоящий из двух пробелов - '  ' . В тексте можно использовать любые символы, имеющиеся на клавиатуре. 
 
Оператор WriteLn читается "райт 'лайн" , переводится - ПИШИ СТРОКУ. Правила его записи и выполнения те же, что и у Write, с одним исключением - после выполнения оператора Write следующий оператор Write или WriteLn печатает свою информацию в той же строке, а после выполнения оператора WriteLn - с начала следующей. Примеры:
ПРОГРАММА
 ЧТО  ВИДИМ НА  ЭКРАНЕ
 BEGIN  Write    ( 'Ама' ); Write    ( 'зонка' ) END.
 Амазонка
 BEGIN  Write    ( 'Ама' ); WriteLn( 'зонка' ) END.
 Амазонка
 BEGIN  WriteLn( 'Ама' ); Write    ( 'зонка' ) END.
 Ама
зонка
 BEGIN  WriteLn( 'Ама' ); WriteLn( 'зонка' ) END.
 Ама
зонка
 
 Разница между процедурами
Write и WriteLn в том, что после выполнения Write курсор остается в той же строке, а после выполнения WriteLn курсор прыгает в начало следующей строки, а значит и все следующие символы волей-неволей будут выводиться в следующей строке.
Оператор WriteLn можно использовать просто для перевода курсора в начало следующей строки. Для этого достаточно написать одно слово WriteLn без скобок. 
     Программа с использованием оператора WRITELN
BEGIN
BEGIN
WriteLn('Начали!');
WriteLn(8+1);   
WriteLn(5-2) /
/в последнем операторе точка с запятой не ставится
END.
Hа экране мы увидим           Начали!
                                                           9
                                                           3
  Программа с использованием оператора WRITE
BEGIN
    Write('Начали!');    {Это приказ напечатать слово «Начали!»}
    Write( 8+1) ;
    Write( 5-2)       
{А здесь компьютер из 5 вычтет 2 и  напечатает результат}
END.                           {Не забыть бы точку}
 
На экране мы увидим           Начали!93
 
Оператор присваивания.    Объявление переменных (VAR)
Что же мы можем делать с переменными величинами, программируя на Паскале? Прежде всего, мы можем задавать компьютеру значение той или иной переменной величины. Это мы можем сделать при помощи нового оператора, который называется оператором присваивания. Так, если мы хотим сказать, что а имеет значение 6, то должны записать  а := 6 . Как видите, вместо значка  =  употребляется значок   :=   .  Он называется знаком присваивания ,  а сама запись   а:=6  называется оператором присваивания. Говорят, что величине а присваивается значение 6. С момента выполнения оператора а:=6 компьютер будет помнить, что а равно шести.
Справа от значка := в операторе присваивания можно писать не только числа, но и переменные величины, и выражения. Выражение пока будем понимать так, как его понимает школьная математика. Например, после выполнения следующего фрагмента программы:         . . . .  a:=2*3+4;   b:=a;   y:=a+b+1. . . .    компьютер будет знать, что a равно 10, b равно 10, y равно 21. Еще несколько примеров:
ФРАГМЕНТ  ПРОГРАММЫ
ЧТО ЗАПОМНИТ КОМПЬЮТЕР
v := -2+10;  h := 10*v;  s := v+h
v=8    h=80    s=88
t := 0;   n := 2*t+40;    z := -n
t=0    n=40    z= -40
Необходимо помнить, что компьютер выполняет оператор присваивания "в уме", то есть результат его выполнения не отображается на экране. Если мы хотим видеть результат выполнения оператора присваивания, используем WriteLn.
 Объявление переменных величин .
 описание начинается со служебного слова
var (читается ВАР, это сокращение от английского variable - переменная). После него записываются имена всех переменных, встречающихся в программе с указанием через двоеточие типа значений, которые каждая переменная имеет право принимать. В нашем случае я записал имена переменных а и b, так как только они встречаются между BEGIN и END. Слово Integer (читается " 'интеджер", переводится ЦЕЛЫЙ)  указывает, что а и b имеют право быть целыми числами, а не дробными.
 
     Именем переменной в Паскале может служить любая последовательность цифр, латинских букв и знака подчеркивания, не начинающаяся с цифры.
 
       Пример объявления переменных
    Пример прогораммы с использованием оператора   присваивания и объявлении переменных
VAR a,b,y : Integer;
VAR a,b :Integer;
    y :Real;
VAR  a,b : Integer; эта программа
 напечатает число 120
BEGIN   
a:=100;    
b:=20;   
WriteLn (a + b)
END.
 
ПОРЯДОК  ИСПОЛНЕНИЯ ОПЕРАТОРОВ
 ЧТО НАХОДИТСЯ В ЯЧЕЙКЕ ПАМЯТИ  k
 ЧТО ВИДИМ НА ЭКРАНЕ
 k:=10   
 10
 
 WriteLn (k)
 10
 10
 k:=25   
 25
 
 WriteLn (k)
 25
 25
 k:=4
 4
 
 WriteLn (k)
 4
 4
Как видите, в процессе работы программы содержимое ячейки k меняется.  Так, при выполнении оператора k:=25 там вместо значения 10 появляется 25. А куда же девается десятка? Она стирается, то есть компьютер забывает ее безвозвратно.
Примеры задач
 
Известны размеры спичечной коробки: высота - 12.41 см., ширина - 8 см., толщина - 5 см.  Вычислить площадь основания коробки и ее объем .
 
shirina        -    ширина
tol        -    толщина
visota        -    высота
pl        -    площадь
V        -    объем
  
 VAR    shirina,tol,pl   :Integer;
        visota,V   :Real;
BEGIN
        shirina:=8;  
        tol:=5; 
        visota:=12.41;
        pl := shirina * tol;
        V  := pl * visota;
        WriteLn (pl,'    ', V  :10:3)
END.
 
Автомобиль 3 часа ехал со скоростью 80 км/час и 2 часа со скоростью 90 км/час. Вычислить среднюю скорость автомобиля (она равна суммарному пути, деленному на суммарное время).
 
VAR   t1, t2 {t1-время на первом отрезке, t2-на втором}
   v1, v2,{v1-скорость на первом отрезке, v2-на втором}
    s1, s2 :Integer;{s1-первый отрезок пути, s2-второй}
   sredn_skorost:Real;
BEGIN
    t1:=3;      
    t2:=2;
    v1:=80;  
    v2:=90;
    s1:=v1*t1; {путь равен скорость умножить на время}
    s2:=v2*t2;
    sredn_skorost := (s1+s2)/(t1+t2);
    WriteLn (sredn_skorost :10:3);
    ReadLn
END.
Операторы ввода данных ReadLn  и  Read
ReadLn  читается "рид'лайн", переводится "читай строку". Он приказывает компьютеру остановиться и ждать, когда человек введет с клавиатуры определенную информацию, после чего продолжить работу. В частности, ReadLn (a,b) будет ждать ввода двух целых чисел.
Read(a);       в одну строку
ReadLn(В,С);    в столбик
 
Задача:
Сложить два числа  -    20 и 16.
Сравним две программы решения этой задачи:
VAR a,b : Integer;
BEGIN       
  a:=20;   b:=16;   
  WriteLn (a+b)   
END.
VAR a,b : Integer;
BEGIN   
  ReadLn (a,b);
  WriteLn (a+b)
END.
 
Таким образом, если первая программа после запуска будет работать без остановки до самого конца и без хлопот выдаст результат, то вторая программа на операторе ReadLn остановится и будет ждать. Во время этого ожидания человек должен на клавиатуре набрать число 20 (так как первым в списке оператора ReadLn стоит a), затем нажать клавишу пробела, затем набрать 16 и нажать клавишу Enter. Паскаль воспринимает нажатие пробела, как сигнал человека о том, что закончен набор на клавиатуре одного числа и сейчас начнется набор другого. После набора на клавиатуре последнего числа необходимо нажать клавишу Enter  в знак того, что ввод чисел для данного оператора ReadLn закончен  и компьютер может продолжать работу. В соответствии с этим компьютер сразу же после нажатия Enter прекращает ожидание и прежде всего направляет число 20 в память, в ячейку a, число же 16 - в ячейку b. На этом он считает выполнение оператора ReadLn законченным и переходит к следующему оператору - WriteLn. В результате будет напечатано число 36.
Одна из причин в том, что программа с ReadLn гораздо универсальнее, "свободнее": если первая программа решает задачу сложения только двух конкретных чисел, то вторая программа складывает два любых числа. Вторая причина в том, что программа с ReadLn позволяет программисту во время написания программы не задумываться над конкретными значениями исходных данных, оставляя эту головную боль на момент выполнения программы. Но самая главная причина в том, что ReadLn позволяет человеку общаться с компьютером, вести с ним диалог во время выполнения программы.
 
Задания: 
 
Вычислите периметр и площадь прямоугольника.
 
Пример программы
введите  длину прямоугольника.
12
введите  ширину прямоугольника.
20
Периметр прямоугольника = 64
Площадь прямоугольника = 240
 
var a,b :integer;
begin
writeln('введите  длину прямоугольника.');
readln(a);
writeln('введите  ширину прямоугольника.');
readln(b);
writeln('Периметр прямоугольника = ', 2*(a+b));
writeln('Площадь прямоугольника = ', a*b);
end.
Даны катеты прямоугольного треугольника a и b.
 Найти его гипотенузу c и периметр P .
 
Пример программы
Введите катеты треугольника a,b-?
20
40
Гипотенуза c = 44.72
Периметр треугольника P = 104.72
 
var a,b,c: real;
begin
 
writeln('Введите катеты треугольника a,b-? ');
readln(a,b);
c:=sqrt(sqr(a)+sqr(b));
 
writeln('Гипотенуза c = ',c :4:2);
 writeln('Периметр треугольника P = ',a+b+c:5:2);
end.
Написать программу вычисления стоимости покупки, состоящей из нескольких тетрадей и карандашей.
 Цену и количество вводит пользователь.
 
Написать программу вычисления площади поверхности параллелепипеда.
 Длину ,ширину и высоту  вводит пользователь.
Пример программы:
Введите исходные данные:
Цена тетради (руб.) =2.75
Количество тетрадей =5
Цена карандаша (руб.) =0.85
Количество карандашей =2
Стоимость покупки: 15.45 руб.
Пример программы:
Вычисление площади поверхности параллелепипеда.
Введите исходные данные:
Длина (см) -> 9
Ширина (см) —> 7.5
Высота (см) -> 5
Площадь поверхности: 300.00 кв.см.
var
kar,tetr: real; { цена карандаша и тетради }
nk,nt: integer; { количество тетрадей и карандашей }
summ: real; { стоимость покупки }
begin
writeln('Вычисление стоимости покупки.');
writeln('Введите исходные данные:');
write('Цена тетради (руб.) —>');
readln(tetr);
write('Количество тетрадей —>') ;
readln(nt);
write('Цена карандаша (руб.) — >');
readln(kar);
write('Количество карандашей —>');
readln(nk);
summ:=tetr*nt + kar*nk;
writeln('Стоимость покупки:',summ:6:2,' руб.');
readln;
end.
var
l,w,h : real; { длина, ширина и высота параллелепипеда}
s: real; { площадь поверхности параллелепипеда}
 begin
writeln('Вычисление площади поверхности параллелепипеда');
writeln('Введите исходные даные:');
write('Длина (см) —> ');
readln(l) ;
write('Ширина (см) ->');
readln(w);
write('Высота (см) — >') ;
readln(h);
s:=(l*w + l*h + w*h)*2;
 writeln('Площадь поверхности параллелепипеда:',s:6:2,' кв.см. ');
 readln;
 end
.
Самостоятельная работа
Вариант 1
1.Написать программу перевода  килограммы в граммы  и   тонны.   Количество килограмм  вводит пользователь.
2. Написать программу вычисления площади треугольника, если известны длины двух его сторон и величина угла между этими сторонами.Данные, вводятся пользователем.
s:=a*b*sin(f)/2;
Вариант2
1. Написать программу перевода минут в секунды и часы. Минуты вводит пользователь
2. Написать программу вычисления объема цилиндра.Данные, вводятся пользователем.
.v := 2*Pi*r2*h;r - радиус основания,  h-высота цилиндра