6226

Решение задач на языке программирования Pascal

Курсовая

Информатика, кибернетика и программирование

Введение Паскаль (англ. Pascal) - это язык программирования общего назначения. Один из наиболее известных языков программирования, широко применялся в промышленном программировании, обучении программированию в высшей школе, является базой для р...

Русский

2012-12-30

323 KB

127 чел.

Введение

Паскаль (англ. Pascal) — это язык программирования общего назначения. Один из наиболее известных языков программирования, широко применялся в промышленном программировании, обучении программированию в высшей школе, является базой для ряда других языков.

Язык назван в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа. Паскаль был создан Никлаусом Виртом в 1968-69 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Он был опубликован в 1970 году Виртом как небольшой и эффективный язык, чтобы способствовать хорошему стилю программирования, использовать структурное программирование и структурированные данные. Последующая работа Вирта была направлена на создание на основе Паскаля языка системного программирования, с сохранением возможности вести на его базе систематический, целостный курс обучения профессиональному программированию. Результат этой работы — язык Модула-2.

Важным шагом в развитии языка является появление свободных реализаций языка Паскаль Free Pascal и GNU Pascal, которые не только вобрали в себя черты множества других диалектов языка, но и обеспечили чрезвычайно широкую переносимость написанных на нём программ (например GNU Pascal поддерживает более 20 различных платформ, под более чем 10 различными операционными системами, Free Pascal обеспечивает специальные режимы совместимости с различными распространёнными диалектами языка, такими как Turbo Pascal (полная совместимость), Delphi и другими. В настоящее время, начиная с Delphi 2003, создана реализация языка для платформы Net, хотя разработчики продолжают использовать Delphi более ранних версий. О коммерческих разработках на Free Pascal, GNU Pascal и TMT Pascal на данный момент известно мало. Кроме того, в Южном федеральном университете разрабатывается язык и система программирования PascalABC.NET, ориентированная на обучение современному программированию. Язык системы — это Object Pascal для платформы Microsoft .NET, который содержит все основные элементы современных языков программирования: модули, классы, перегрузку операций, интерфейсы, исключения, обобщённые классы, сборку мусора, а также некоторые средства параллельного программирования.

         Особенности языка                                               Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком. Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования» (эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров. Необходимо заметить, что многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 1970-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. В начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники академик А. П. Ершов разработал алголо-паскалеподобный «учебный алгоритмический язык». Наиболее известной реализацией Паскаля, обеспечившая широкое распространение и развитие языка, является Turbo Pascal фирмы Borland, выросшая затем в объектный Паскаль для DOS (начиная с версии 5.5) и Windows и далее в Delphi, в которой были внедрены значительные расширения языка. Диалекты Паскаля, применяемые в Turbo Pascal для DOS и Delphi для Windows, стали популярны из-за отсутствия других успешных коммерческих реализаций.

После начала использования Паскаля в 1970 году и появления реализаций, расходящихся не только в дополнениях, но и в синтаксисе, был поднят вопрос о стандартизации языка. Стандарт языка был разработан Никлаусом Виртом в 1974 году совместно с Кетлин Йенсен (Kathleen Jensen). В дальнейшем, были приняты международный стандарт от ISO и американский от ANSI. На данный момент, выделяют три принципиально разных стандарта: Unextended Pascal (исходный), Extended Pascal (расширенный), Object-Oriented Extensions to Pascal (объектно-ориентированное расширение Паскаля).

Название

Вариант

Кем, где разработан

Год создания

Pascal Standard

Исходный

Н. Вирт, Кетлин Йенсен

1974

Pascal Standard

Исходный

ISO 7185:1983

ANSI/IEEE 770X3.97:1983

1982

Unextended Pascal

Исходный

ISO 7185:1990

1989

Extended Pascal

Расширенный

ANSI/IEEE 770X3.160:1989

1989

ISO/IEC 10206

1991

Object-Oriented

Extensions to Pasca

Объектно-ориентированное

расширение

ANSI/X3-TR-13:1994

1993

Одним из главных дополнительных свойств объектно-ориентированного расширения Extended Pascal стала модульность и средства, облегчающие раздельную компиляцию. Стандартизация языка была запаздывающей по отношению к реальному появлению в языке тех или иных возможностей. Коммерческие реализации расширяли стандартный Паскаль; так было сделано в UCSD Pascal, модификации Object Pascal фирмой Apple, Turbo Pascal от Borland (незначительно модифицированная версия Apple) и его ответвлений. Ни одна из распространённых коммерческих реализаций Паскаля не соответствует в точности ни одному из официальных стандартов языка.

Синтаксис и языковые конструкции

Паскаль, в его первоначальном виде, представляет собою чисто процедурный язык и включает в себя множество алголоподобных структур и конструкций с зарезервированными словами наподобие if, then, else, while, for, и т. д. Тем не менее, Паскаль также содержит большое количество возможностей для структурирования информации и абстракций, которые отсутствуют в изначальном Алголе-60, такие как определение типов, записи, указатели, перечисления, и множества. Эти конструкции были частично унаследованы или инспирированы от языков Симула-67, Алгол-68, созданного Никлаусом Виртом AlgolW и предложены Хоаром.

В современных диалектах (Free Pascal) доступны такие операции как перегрузка операторов и функций.

1. Структура программы на языке PASCAL

Программа состоит из необязательного заголовка и блока.

Блок может содержать в себе другие блоки. Блок состоит из двух частей: описательной и исполнительной. Первая часть может отсутствовать, без второй блок не имеет смысла. Блок, который не входит ни в какой другой блок, называется глобальным. Если глобальный блок содержит другие блоки, то они называются локальными. Глобальный блок — это основная программа, он должен присутствовать в любом случае. Локальные блоки — это процедуры и функции, их присутствие необязательно. Объекты программы (типы, переменные, константы и т. д.) тоже называются глобальными и локальными. Областью действия объектов является блок, в котором они описаны, и все вложенные в него блоки. Блочная структура обеспечивает структуризацию программ на уровне исходных текстов. В идеальном случае программа на языке Pascal состоит из процедур и функций, которые вызываются для выполнения из раздела операторов основной программы.

Исходя из этого можно записать структуру программы следующим образом:

Program ... ; { Заголовок программы }

Uses ... ; { Подключение модулей }

Label ... ; { Раздел объявления меток }

Const ... ; { Раздел объявления констант }

Type ... ; { Раздел объявления новых типов }

Var ... ; { Раздел объявления переменных }

Procedure ... ; { Описание своих процедур }

Function ... ; { Описание своих функций }

Begin { начало основной программы }

...;

{ Операторы }

...;

End.

Обязательной частью является лишь тело программы, которое начинается словом begin, а заканчивается словом end с точкой. Операторы в Паскале разделяются точкой запятой. Заголовок программы является хотя и необязательным, но желательным элементом и состоит из зарезервированного слова program и идентификатора - имени программы, за котором следует точка с запятой. Порядок объявлений и описаний не регламентируется.

ПРИМЕР : Простейшая программа.

program prim_1; { демонстрация структуры программы}

{эта программа не требует никаких объявлений и описаний}

begin

write('Привет! Вот мы и начали.') (* эта строка текста появится на экране *)

end. 

1.1Раздел меток (label)

Раздел меток состоит из оператора label, за которым следуют перечисляемые через запятую метки, в конце всего раздела ставится точка с запятой: label l1, l2, l3;

Причём, все метки - идентификаторы, конкретных мест в разделе операций.

Расстановка меток.

Пример программы:

program project1;

label start;

var x,y:real;

      c:char;

begin

start: write('x=',x); realdln(x);

y:=sin(x);

writeln('sin(',x:10:4,')=',y:10:4);

write('Continue? '); readln(c);

if (c='y') or (c='Y') then goto start;

end.

Метки нужны для оператора перехода. Рекомендуется избегать применения оператора перехода, а значит и не декларировать раздел меток.

1.2 Раздел констант (const)

Иногда, бывает так, что у нас в программе встречаются величины, которые не меняются в процессе выполнения программы (т.е. фактически они противоположность переменных). Такие величины называются константами.  Константы указываются в специальном разделе, который называется  Const.

В качестве констант в языке программирования Pascal могут использоваться:

1.) Целые числа. Они записываются со знаком или без знака и могут иметь значение от – 2 147 483 648 до + 2 147 483 647. Если константа имеет значение, выходящее за эти пределы, то в качестве значения константы необходимо использовать вещественные числа.

2.) Вещественные числа записываются со знаком или без знака с использованием десятичной точки или экспоненциальной части, которая начинается с символа «e», за которым следует десятичный порядок. Например, запись 3.14e5 означает 3,14*105. А запись – 3.14e-4 означает – 3,14*10-4.

3.) Шестнадцатеричные числа, которые состоят из шестнадцатеричных цифр со знаком доллара «$» впереди. Диапазон шестнадцатеричных чисел — от $00000000 до $FFFFFFFF.

Пример

program number25;

uses crt;

Const G = 9.8;

Var V, H: Real;

begin

clrscr;

writeln (‘Введите высоту башни:’);

readln (H);

V:=Sqrt(2*G*H);

writeln (‘Скорость падения равна ‘,V:6:3);

readln

end.

1.3 Раздел типов (type)

Раздел типов начинается с оператора type, за которым следуют разделённые точкой с запятой определения типов. Определение каждого типа начинается с его имени, далее ставится знак равенства. Оставшаяся часть определения типа зависит от самого типа и не может быть описана единообразно. Простейший вариант определения типа - определение синонимичного типа, то есть типа-синонима другого типа. В определении синонимичного типа после знака равенства пишется существующий синоним этого типа:  type TBase=real;

В остальных случаях определяется действительно новый тип, тогда после знака равенства пишется описание определяемого типа. Сначала рассмотрю определение ограниченного числового типа. Описание такого типа состоит из минимального и максимального допустимых значений и двух точек (не двоеточия) между ними, причём, первым указывается именно минимальное допустимое значение:        type TIndex=1..10;

              Пример программы с типом записи:

program project1;

type TDate=record

  Day:integer;

  Moth:integer;

   Year:integer;

end;

var Date:TDate;

begin

write('Day='); readln(Date.Day);

write('Month='); readln(Date.Month);

write('Year='); readln(Date.Year);

writeln('Day=',Date.Day);

writeln('Month=',Date.Month);

writeln('Year=',Date.Year);

end.

1.4 Раздел переменных (var)

Пусть в программе встречаются переменные v11, v12,…; все они должны быть описаны следующим образом:

var v11, v12,…: type1;

     v21, v22,…: type2; …

здесь v11, v12,… - имена переменных; type1 – тип переменных v11, v12,…; type2 – тип переменных v21, v22,….

Пример. var k, i, j: integer; a, b: real;

Каждая переменная должна быть описана до ее использования в программе и отнесена к одному и только одному типу. Названия разделов (const, type, var…) указываются только один раз.

Пример. 

var a:real;

b:real;

Таким образом, в разделе var вводится имя каждой переменной и указывается, к какому типу эта переменная принадлежит. Тип переменной можно задать двумя способами: указать имя типа (например, real, color и т.д.), либо описать сам тип, например: array[1..16] ofchar

1.5 Раздел процедур и функций

В Паскале подпрограммы делятся на процедуры и функции:

Синтаксически процедуры и функции состоят из заголовка (содержащего ключевое слово procedure или function, имени, за которым может следовать описание передаваемых параметров в скобках, тип возвращаемого значения через символ двоеточия для функций и точки с запятой для процедур), после заголовка следует тело, после которого ставится символ ;.

program mine(output);

var i : integer;

procedure print(var j: integer);

      function next(k: integer): integer;

       begin

            next := k + 1

        end;

begin

        writeln('Всего: ', j);

        j := next(j)

end;

begin

      i := 1;

       while i <= 10 do

              print(i)

end.

1.6 Раздел действий (операторов)

В программе на языке Pascal раздел операторов является основным, так как именно в нем с предварительно описанными переменными, константами, значениями функций выполняются действия, позволяющие получить результат, ради которого создавалась программа.

Раздел операторов начинается зарезервированным словом begin (начало), далее следуют операторы языка, отделенные друг от друга точкой с запятой. Завершает раздел зарезервированное слово end. (конец) с точкой.

Например:

Begin       {Начало программы}

       Write('Введите значение целого числа A >');

{Вывод запроса на экран}

Readln(A);                           {Ввод значения A с клавиатуры}        Write('Введите значение целого числа B >');

       Readln(B);

       Proizved := A * B;          {Вычисление переменной Proizved}

        Write('Произведение чисел ',A,' и ',B,' = ',Proizved);

                                  {Вывод ответа}

end.                                       {Конец программы}

          1.7 Примеры решения задач

Разработать программы для вычисления:

(*Вычислить площадь круга*)

Programzad1;{*название программы*}

usescrt; {*поключение к библиотеке*}

constpi=3.14;{*константа не изменяемое число*}

vars,r:real;{*переменные s,r- вещественного значения*}

begin

CLRSCR;{*очищение экрана*}

WRITE ('BBEDITER=');{* Вывод на экран сообщения*}

READLN(R);{*Чтение данных, переход к началу следующей строки*}

S:=PI*R*R;{*S присваивается значение пи умножить на R в квадрате*}

WRITELN('PLOSHADPABHA ',S:5:3);{*Вывод данных на экран и                          

значения переменной S*}

READLN;{*Переход к началу строки*}

END.

(*Вычислить длину окружности *)

programzad 1_1;{*название программы*}

usescrt; {*поключение к библиотеке*}

constpi=3.14;{*неизменное значение*}

varC,r:real;{*переменные c,r- вещественного значения*}

begin

CLRSCR; {*Очищение экрана*}

WRITE('BBEDITER=');{* Вывод на экран сообщения*}

READLN(R);{*Чтение данных и переход к началу следующей строки*}

C:=2*PI*R;{*C присваивается значение 2 умноженное на пи и на R*}

WRITELN('DLINAPABHA ',C:5:3);{*Вывод данных на экран и                          

значения переменной C*}

READLN;{*Переход к началу строки*}

END.

(* Вычислить периметр прямоугольника*)

programzad3;

usescrt; {*поключение к библиотеке*}

varP,A,B:reaL;{*переменные c,r- вещественного значения*}

begin

CLRSCR;{*Очищение экрана*}

WRITE('BBEDITEA=');{* Вывод на экран сообщения*}

READLN(A);{*Чтение данных и переход к началу следующей строки*}

WRITE('BBEDITEB=');{* Вывод на экран сообщения*}

READLN(B);{*Чтение данных и переход к началу следующей строки*}

P:=2*(A+B);{*P присваивается значение 2*(A+B)*}

WRITELN('PERIMETRPABEH ',P:5:3);{*Вывод данных на экран изначения переменной P*}

READLN;{*Переход к началу строки*}

END.{*Завершение программы*}

(*Вычислить: сумму, разность и произведение вывести на экран результат*)

programzad3;{*название программы*}

usescrt; {*поключение к библиотеке*}

varA,B,C:real;{*Вводпеременных c,r- вещественного значения*}

begin

CLRSCR;{*Очищение экрана*}

WRITE('BBEDITEA=');{* Вывод на экран сообщения*}

READLN(A);{*Чтение данных и переход к началу следующей строки*}

WRITE('BBEDITEB=');{* Вывод на экран сообщения*}

READLN(B);{*Чтение данных и переход к началу следующей строки*}

C:=A+B;{*С присваивается значение A+B *}

WRITELN('A+B=',C:5:3);{*Вывод данных на экран и                          

Значения переменной C*}

C:=A-B; {*С присваивается значение A-B *}

WRITELN('A-B=',C:5:3);{*Вывод данных на экран и                          

значения переменной C*}

C:=A*B; {*С присваивается значение A*B *}

WRITELN('A*B=',C:5:3);{*Вывод данных на экран и                          

значения переменной C*}

READLN(C);{*Чтение данных и переход к началу следующей строки*}

END.

2. Операторы

2.1 Составной и пустой операторы

Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin . . . end. Составные операторы - важный инструмент Турбо Паскаля, дающий возможность писать программы по современной технологии структурного программирования (без операторов перехода GOTO).

Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в составной оператор. Среди них могут быть и другие составные операторы - Турбо Паскаль допускает произвольную глубину их вложенности:

begin

.......

begin

.......

begin

......

......

end;

......  

end;

......

end;
             

 Фактически, весь раздел операторов, обрамленный словами begin . . . end, представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставить перед ним символ «;» необязательно, и далее во всех примерах мы не будем этого делать. Наличие точки с запятой перед end в предыдущих примерах означало, что между последним оператором и операторной скобкой end располагается пустой оператор. Пустой оператор не содержит никаких действий, просто в программу добавляется лишняя точка с запятой. В основном пустой оператор используется для передачи управления в конец составного оператора.

2.2 Операторы ветвлений

 Условный оператор

IF <условие> THEN <оператор1> [ELSE <оператор2>] 
 

Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.


Пример: 
Var 
A, B, C, D: Integer; 
begin 
A:=1; 
B:=2; 
C:=3; 
D:=4; 
If A > B Then 
 If C < D Then 
  If C < 0 Then 
  C:=0 
{обратите внимание, что перед Else} 
{пустой оператор ";"не ставится} 
  Else 
  A:=B; 
end. 
амоглобытьитак

If A > B Then 
 If C < D Then 
  If C < 0 Then 
  C:=0 
  Else 
 Else 
Else A:=B 
 

Рассмотрим программу, которая вводит произвольное целое число от 0 до 15 и выводит его в шестнадцатеричной системе:


Program Hex; 
Var 
  Ch: Char; 
  N: Integer; 
Begin 
  Write ('N = '); 
  Readln(N); 
  If (N >= 0) And (N <= 15) Then 
    Begin 
    If N < 10 Then 
      Ch:= Chr(Ord('0')+N) 
    Else 
      Ch:=Chr(Ord('A')+N-10); 
    End 
   Else 
     Writeln('
Ошибка'); 
End.

2.3 Операторы повторений

Цикл с предопределенным числом повторений.

For<переменная цикла>:=<начальное значение>To(DownTo) <конечное значение>Do<блок операторов>

Переменная должна быть целого или перечислимого типа. При исполнении цикла переменная цикла изменяется от начального до конечного значения с шагом 1. Если стоит to, то переменная увеличивается, если downto – уменьшается.

Условия выполнения цикла проверяются перед выполнением блока операторов. Если условие не выполнено, цикл For не выполняется. Следующая программа подсчитывает сумму чисел от 1 до введенного:

Program Summa; 
Var 
  I, N, S: Integer; 
Begin 
  Write('N = '); 
  Readln(N); 
  S:=0; 
  For I:=1 To N Do 
    S:=S + I; 
  Writeln ('C
умма = ', S) 
End.

Условный цикл с проверкой условия перед исполнением блока операторов.

While<условие>Do<блок операторов>Блок операторов будет исполняться, пока условие имеет значение true. Необходимо, чтобы значение условия имело возможность изменения при исполнении блока операторов, иначе исполнение цикла не закончится никогда (в DOS это приведет к зависанию компыютера). Если условие зарание ложно, блок операторов не исполнится ни разу.

Найдем машинное "эпсилон" для переменной типа Real: 
ProgramEpsilondetect; 
Var 
  Epsilon: Real; 
Begin 
  Epsilon:=1; 
  WhileEpsilon + 1 > 1 Do 
    Epsilon: = Epsilon/2; 
  Writeln ('Эпсилон = ', Epsilon); 
End.

Условный цикл с проверкой после выполнения блока операторов.

Repeat<тело цикла>Until<условие>

Блок операторов независимо от значения условия будет выполнен хотябы один раз. Цикл заканчивается, если после очередного исполнения блока операторов условие имеет значение true.

Пример: программа запрашивает ввод одного символа и выводит его ASCII - код, пока не будет введен пустой символ:

Program Code; 
Const 
  Cr = 13; 
Var 
  Ch:Char; 
Begin 
  Repeat 
    Readln (Ch); 
    Writeln (Ch,' = ', Ord (Ch)); 
  Until Ord (Ch) = Cr 
End.

Оператор выбора одного из вариантов.

Case<ключ выбора>Of<список выбора>Else<оператор>End;

<ключ выбора> - выражение любого перечислимого типа, 
<список выбора> - одна или более конструкций вида <значение ключа>:<блок операторов>.

Составим программу, имитирующую калькулятор. Программа вводит две строки: первая содержит два числа, разделенные пробелом или запятой, вторая - символ арифметического действия. 

Признаком конца работы служит ввод любого символа, отличного от +, -, /, *.

Программа: 
ProgramCalc; 
Var 
 Operation: Char; {ЗнакОперации} 
 X, Y, Z: Real; 
 Stop: Boolean; 
Begin 
 Stop:= False; 
 repeat 
   Writeln; {ПустаяСтрока - Разделитель} 
   Write ('X, Y = '); 
   Readln (X,Y); 
   Write ('Операция: '); 
   Readln (Operation); 
   CaseOperationOf 
       '+': Z: = X+Y; 
       '-': Z: = X-Y; 
       '*': Z: = X*Y; 
       '/': Z: = X/Y; 
   Else 
      Stop:= True; 
   End; 
   IfNotStopThen 
     Writeln('Z = ',Z); 

UntilStop; 
End.

Любому из блоков операторов списка может предшествовать не одно, а несколько значений выбора, разделенных запятыми.

Оператор безусловного перехода на строку с меткой.

Goto<метка>

Метка, должна быть описана в разделе описаний. Метка, описанная в процедуре (функции) локализуется в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.

2.4 Примеры решения задач

programprog1_1;

vark:real;{*раздел объявления переменных, k-вещественного типа*}

n:integer;

begin

write ('bbedite n'); {*выводнаэкран*}

read (n);{*процедура ввода*}

k:=1;

while k<=n do

begin

writeln (k:5:0);

k:=k*2;

end;

end.

program P1_2;

usescrt;{*поключениекбиблиотеке*}

varn:integer; {*раздел объявления переменных*}

x,y,a,e,z:real;{*переменные вещественного типа*}

begin

write  ('bbedite x=');{*процедураввода*}

readln (x);{*Чтение данных и переход к началу следующей строки*}

write ('vvediteE=');{*процедура ввода*}

readln(e);{*процедура вывода*}

n:=0;

a:=1;

y:=a;

repeat{*операторповтор repeat … until …*}

n:=n+1;

a:=a*x/n;

y:=y+a;

until abs(a)<e;

z:=exp(x);

writeln ('y=', y:5:2, 'z=', z:5:2);{*процедураввода*}

end.

3. Массивы

Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).

Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.

Вообще, массив – однородный, упорядоченный структурированный тип данных с прямым доступом к элементам.    Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа (целочисленный, логический, символьный, перечислимый, диапазон).

Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным. Вообще количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.

Пример: числовая последовательность четных натуральных чисел 2, 4, 6, ..., N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6, ..., А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6, ..., N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.

Например, A[7] — седьмой элемент массива А; D[6] — шестой элемент массива D.

Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний.

Пример описания одномерного массива

1)Tape

  Vector=array[1…10]of real

Var

   V:vector;

2)var

V:array[1…10] of real

Пример описания двумерного массива

type

       matrix= array [1..5, 1..10] of integer;

 var

      a, : matrix;

       i, j: integer; { индексы массива }

 begin

         for i :=1 to 5 do {цикл для перебора всех строк}

               for j :=1 to 10 do {перебор всех элементов строки по столбцам}

                         readln ( a [ i , j ]); {ввод с клавиатуры элемента, стоящего в i -й строке и j -м столбце}

4. Процедуры и функции

4.1 Описание процедур

Процедура- это средство сокращение текста программы. Она является широко используемым средством абстрагирования. Ее можно рассматривать ,как “черный ящик”, обеспечивающий выполнение некоторой абстрактной функции. Процедуры могут иметь параметры, а могут и не иметь. Смысл процедуры легче понять, если в одном месте собрана информация обо все  ее окружении. Нет необходимости просматривать текст всей программы, что бы определить типы переменных, с которыми работает процедура. Процедуру с параметрами легче тестировать и   отлаживать, поскольку в ней нет связи с остальной программой через глобальные переменные.  Связанные формальных и фактических параметров, а так же и само обращение к процедуре требуют дополнительных затрат времени и памяти. Описание процедур состоит из 2 частей: заголовка процедуры и тела процедуры. Телом процедуры является блок. Следовательно, тело процедуры имеет точно такую же  структуру, как и программа: в нем могут присутствовать все разделы и на него распространяются общие правила локализации. В секции формальных параметров перечисляются идентификаторы формальных параметров, причем для каждого идентификатора определяется его тип. Фактические параметры отделяют друг от друга запятыми, а весь список заключается в круглые скобки.  Между формальными и фактическими параметрами устанавливаются взаимно однозначное соответствие путем пересчета их с лева на право: первому с лево формальному параметру ставится в соответствие первый слева  фактический параметр, второму слева формальному параметру-второй с лева фактический и т.д. Число формальных параметров должно в точности равняться числу фактических параметров.  Следовательно, если в описании процедуры отсутствует список формальных параметров, то и в операторе процедуры должен отсутствовать список фактических параметров.В описании процедуры используется формальные параметры ,а в операторе процедуры – фактические .Все формальные параметры заменяются соответствующими фактическими. После этого создается динамический экземпляр блока процедуры, который и выполняется. В языке Паскаль различают вида формальных параметров: параметры – значения, параметры-переменные, параметры – процедуры и параметры – функции.   Если в секции формальных параметров предшествует слово var, то все параметры из этого списка являются параметрами- переменными.

4.2 Описание функций.

Функции вычисляют единственное значение простого типа или типа-указатель. Обращение к функции осуществляется с помощью указателя функций, состоящего из идентификатора  вызываемой функции и списка фактических параметров, заключенного в круглые скобки. Заголовок функции начинается с зарезервированного слова FUNCTION.В заголовке функции явно указывается тип результата, вычисляемого с помощью этой функции. В теле функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит идентификатор это функции. Именно этот оператор присваивания и определяет значение, вычисленное с помощью этой функции. Если такой оператор присваивания отсутствует, то значение, вычисленное с помощью функции, не определенно. Это приводит к аварийному завершению программы. Таких процедур присвоения в теле может быть несколько. Значение, которое вычисляется функцией, задается последним выполненным до завершения выполнении функции оператором.

4.3 Примеры решения задач

(*Найти сумму элементов линейного массива*)

programzad;

const N=10 ;

type

massiv=array [1..N] of integer;

var

a:massiv;

sum,i:integer;

procedure input (var x:massiv);(* Вводэлентамассива*)

var

i:integer;

begin

for i:=1 to N do

begin

write ('a=');

readln (x[i]);

end;

end;

Procedure Output (var z:massiv);

var

i:integer;

begin

for i:=1 to N do

write;

end;

functionfsum (c:massiv):integer;

var

s,i:integer ;

begin

s:=0;

for i:=1 to N do

if c[i] mod 5=0

then

s:=s+c[i];

fsum:=s;

end;

begin

writeln ('input massuv');

input (a);

output (a);

sum:=fsum(a);

writeln ('sum=',sum);

5. Практическая часть

6. Заключение

В результате выполнения курсовой работы было изучено, программирование на языке Паскаль, а именно: основные понятия языка программирования (общая структура программы, раздел описания меток, раздел определение констант, раздел определения типов, раздел описания переменных), простые типы данных(перечисляемый тип, логический тип, целый тип, и т.д), операторы(оператор присваивания, составной оператор, оператор цикла, оператор выбора, и т.д ), стандартные файлы input и output, процедуры и функции(описание процедур, описание функций)и т.д.При выполнении практической части курсовой работы разработано и отложены программы.

7. Список литературы

1.О.Н. Перминов Программирование на языке Паскаль.Москва “радио и связь” 1988

2.Бутомо И.Д., Самочадин, А.В.,Усанов Д.В., Программирование на алгоритмическом языке Паскаль для микро –ЭВМ

3.Вирт Н. Язык программирования Паскаль//Алгоритмы и организация решение экономических задач.

4. Перминов О.Н. Язык программирования Паскаль.


 

А также другие работы, которые могут Вас заинтересовать

33889. Культурно-просветительная работа, общее и специальное образование. Во второй половине 40-х – начале 50-х гг 38 KB
  Задачи образования – восстановить всеобщее 7летнее образование с 1949 обучить тех кто не обучился в войну школы рабочей молодежи школы комсомольской молодежи. Проблема уровня образования. Пример Красноярского края в восстановлении образования. Чрезмерная идеологизация образования.
33890. Наука в послевоенный период 41.5 KB
  были открыты Институт точной механики и вычислительной техники Институт радиотехники и электроники Институт прикладной геофизики Институт физической химии Институт атомной энергии Институт ядерных проблем и др. Был создан Институт языкознания АН СССР во главе которого встал академик В. были открыты Институт точной механики и вычислительной техники Институт радиотехники и электроники Институт прикладной геофизики Институт физической химии Институт атомной энергии Институт ядерных проблем и др. Был создан Институт языкознания АН СССР...
33891. Развитие искусства во второй половине 40-х – начале 50-х гг 52 KB
  Тема войны – Непринцев Отдых после боя Неменский сестры наши Костецкий Возвращение Лактионов Письмо с фронта. Тема восстановления Яблонская Хлеб Весна. Выдающиеся произведения: тема войны – Некрасов В окопах Сталинграда Фадеев Молодая гвардия Казакевич звезда Полевой Повесть о настоящем человеке Твардовский Дом у дороги. Овечкин – Районные будни тема деревни.
33892. Внешняя политика СССР в послевоенный период: отношения с Западными странами. Холодная война 54 KB
  Внешняя политика СССР в послевоенный период: отношения с Западными странами. Внешнеполитическая доктрина СССР – против поддержки социалистических стран – принцип мирного сосуществования. тезис о враждебности капиталистического окружения СССР. Сначала у СССР была мирная внешнеполитическая доктрина затем ужесточилось так же и у США.
33893. СССР и страны Центральной и Восточной Европы в послевоенный период. Роль СССР в формировании мировой системы социализма 35 KB
  СССР и страны Центральной и Восточной Европы в послевоенный период. Роль СССР в формировании мировой системы социализма. В 19451946 существовали коалиционные правительства в Западной Европе потом постепенно произошел переход к коммунистическим режимам: Румыния – отречение Михая Болгария – конституция 1947 и усиление позиций коммунистов Польша – отставка коалиционного правительства Венгрия – победа коммунистов на выборах Чехословакия – сопротивление события 1948 надежда сохранить отношения и с СССР и с Западом. В сентябре...
33894. Поиск путей обновления общественно-политической жизни в СССР в 1953-1955 гг 37 KB
  Маленков председатель Совмина глава министерства Берия – МВД МГБ зам председателя совмина Каганович – первый заместитель председателя Совета Министров СССР с 1952 года член Президиума ЦК КПСС Молотов – МИД Булганин – министр обороны Ворошилов – председатель президиума верховного совета. После этого большую власть получил Маленков заявление о группе В нужно поднимать деревню. На ней учредили пост 1 секретаря на который избрали Хрущева доклад Хрущева о с х Январь 1955 – пленум ЦК КПСС слушалось дело Маленкова которого обвинили в...
33895. ХХ съезд КПСС и его историческое значение. Борьба с оппозицией в послевоенный период 27.5 KB
  Первоначально преодоление культа личности сводилось к перестройке пропаганды 1953 но Маленков заявил что дело не только в этом ведь этот вопрос связан с вопросом коллективного руководства.1956 – доклад Хрущева О культе личности и его последствиях. Идея попытки преодолеть культ личности принадлежит Маленкову а не Хрущеву. Все идеи доклада были повторены в постановлении ЦК: в стране сложился культ личности Сталина вопрос о причинах свелся к личным качествам Сталина опубликованы последние работы Ленина культ личности не...
33896. Индустриальное развитие страны в 50-х гг 53.5 KB
  Индустриальное развитие страны в 50х гг. широкое развитие получает НТП. Индустриальное развитие шло по пятилеткам – 19511955 пятая 19561960 шестая. Достижения в транспорте – воздушный реактивные самолеты в пассажирских перевозках водный суда на подводных крыльях морской атомный ледокол сухопутный переход на электровозы и электрички автомобильный примитивное развитие трубопроводный трубопровод Дружба.
33897. Сельское хозяйство СССР в 50-х гг 27.5 KB
  Еще на XIX съезде заявили что продовольственная проблема решена но это было ложью. Вопрос о насыщении с х техникой и снабжении кадрами для этой техники проблема кадров инженернотехнического профиля. В январе 1955 на пленуме Хрущев поставил задачу подъема животноводства проблема кормов. Проблема раскрестьянивания – одна из главных в нашей историографии.