Массив – однородная совокупность элементов



Дата занятия: 08.10.2020                                               

Группа 1-БУЭ-20

Тема занятия:

ТЕМА. Подпрограммы. Работа с массивами

Цель: - научится формализовать поставленную задачу, строить алгоритм, составлять программу на языке программирования Pascal.  

 

План:

Подпрограммы

Массивы. Описание массивов

ХОД РАБОТЫ

1. Повторение пройденного материала. Ответьте на вопросы:

Назовите основные этапы решения задачи на ЭВМ.

Охарактеризуйте цикл с предусловием.

Охарактеризуйте цикл с постусловием.

Охарактеризуйте цикл с параметром.

2. Ознакомьтесь с конспектом лекции и ответьте на контрольные вопросы.

Конспект лекции

1. Подпрограммы

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

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

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

Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания.

Например, abs, sqrt, ln, sin…- функции (возвращают результат), readln, write… – процедуры (не возвращают результат). Их наличие существенно облегчает разработку прикладных программ.

Во многих языках программирования подпрограммы существуют только в виде функций. Однако в Паскале подпрограмма — и функция и процедура. Разница между ними станет очевидна в данном уроке.

Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале

var …;{область объявления глобальных переменных} procedure название (параметры); {начало процедуры}var …;{объявление локальных переменных}begin … {тело процедуры}end;{конец процедуры} begin… {основная программа}end.

Пример: Процедура без параметров, которая печатает 60 звездочек, каждую с новой строки

1234567891011 procedure pr;var i:integer;begin for i:=1 to 60 do begin { тело подпрограммы } write('*'); writeln;end;end; {конец подпрограммы}begin pr; {вызов процедуры}end.

В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.

РАЗБОР ПРИМЕРА:

Пример. Написать процедуру, которая печатает 60 раз указанный символ (введенный с клавиатуры), каждый с новой строки.

Параметры процедуры (в некоторых языках они называются аргументами) указываются в скобках после ее имени (в объявлении).

В данном примере в качестве введенного символа будем использовать параметр процедуры.

Формальный параметр процедуры указывается в скобках при ее описании. Обязательно необходимо указать тип формального параметра через двоеточие.

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

1234567891011121314 var s:char;procedure pr(a:char); {a - формальный параметр }var i:integer;begin for i:=1 to 60 do begin write(a); writeln;end;end;beginwriteln('simvol');readln(s); pr(s); {s - фактический параметр}end.

В данном примере при вызове процедуры компилятор заменит формальный параметр aфактическим параметром s, т.е. тем символом, который будет введен с клавиатуры. Оба параметра имеют тип данных char.

 

Часто в Паскале вместо процедур используют функции (подпрограммы, которые что-то возвращают).

Функция аналогична процедуре, но имеются два отличия.

  • Функция передает в программу результат своей работы – единственное значение, носителем которого является имя своей функции.
  • Имя функции может входить в выражение как операнд. Функция возвращает результат в точку своего вызова.

Например, sqr(x) – возведет в квадрат значение х и возвратит в точку вызова вычисленное значение квадрата числа х: y:=sqr(x);

Функция, определенная пользователем, состоит из заголовка и тела функции. Тело функции по структуре аналогично программе. Описание меток, констант, типов и т.д. действительны только в пределах данной процедуры.

Формат:

Function <имя> (формальные параметры): <тип результата (возвращаемого значения)>;

Const ...;

Type ...;

Var ...;

Begin

<операторы>;

end;

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

Просмотрите пример. Найти 1!+2!+…+n!

Используем функцию нахождения факториала, т.к подаем на вход и получаем результат.

function fact (a:integer): integer;

var i: integer;

begin

fact:=1;

for i:=1 to a do

fact:=fact*I;

end;

В строке fact:=fact*I;

компилятор найдет ошибку, т.к fact должна вызываться с параметрами. Поэтому обычно вводят дополнительную переменную, в которую помещают результат. А потом в переменную fact присваивают этот результат:

program factorial;

uses wincrt;

var sum,n,j: integer;

function fact (a: integer): integer;

var i,d: integer;

begin

d:=1;

for i:=1 to a do

d:=d*i;

fact:=d;

end;

begin

sum:=0;

readln(n);

for j:=1 to n do

sum:=sum+fact(j);

writeln(sum);

end.

Массивы. Описание массивов

До сих пор мы работали с простыми типами данных – логический (boolean), целый ( integer, word, byte, longint ), вещественный ( real ), символьный ( char ). Любой алгоритм можно запрограммировать с помощью этих четырех базовых типов. Но для обработки информации о многообразном реальном мире требуются данные, имеющие более сложное строение. Такие сложные конструкции, основанные на простейших скалярных типах, называются структурами. Структура – некоторый составной тип данных, составленный из базовых скалярных. Если структура не изменяет своего строения на протяжении всего выполнения программы, в которой она описана, то такую структуру называют статической.

Массив – однородная совокупность элементов

Самой распространенной структурой, реализованной практически во всех языках программирования, является массив.

Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer, real или char, либо других однотипных элементов. Из этого, правда, не следует делать вывод, что компоненты массива могут иметь только скалярный тип.

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

Индекс массива

Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип ( integer, word или byte ), но может быть и логический и символьный.

Описание массива в Паскале. В языке Паскаль тип массива задается с использованием специального слова array(англ. – массив), и его объявление в программе выглядит следующим образом:

Type < имя _ типа >= array [ I ] of T;

где I – тип индекса массива, T – тип его элементов.

Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных:

Var a,b: array [ I ] of T;

Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа: I 1.. I n. Например, индексы могут изменяться в диапазоне 1..20 или ' a '..' n '.

При этом длину массива Паскаля характеризует выражение:

ord ( I n )- ord ( I 1 )+1.

Вот, например, объявление двух типов: vector в виде массива Паскаля из 10 целых чисел и stroka в виде массива из 256 символов:

Type
Vector=array [1..10] of integer;
Stroka=array [0..255] of char;

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

Опишем переменные типа vector и stroka:

Var a: vector;
c: stroka;

далее в программе мы можем обращаться к отдельным элементам массива a или c. Например, a [5]:=23; c [1]:=' w '; a [7]:= a [5]*2; writeln ( c [1], c [3]).


Дата добавления: 2020-11-15; просмотров: 103; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!