Файл: Информатика Щапов Щапова.pdf

Добавлен: 19.10.2018

Просмотров: 12740

Скачиваний: 132

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

71 

В этом случае операторы тела цикла выполняются по край-

ней мере один раз. 

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

использования операторных скобок.  

Пример  использования  операторов  цикла  при  программи-

ровании циклических алгоритмов (табл. 4). 

Пусть  требуется  вычислить  сумму  первых  n  натуральных 

чисел  

1

n

i

S

i

Переменная  цикла  i  будет  выполнять  две  функции:  номер 

очередного слагаемого и одновременно его значение. 

Т а б л и ц а   4  

Пример использования операторов цикла для решения задачи 

Цикл с параметром 

Цикл с предусловием 

Цикл с постусловием 

program Z1; 
var S, i, n: integer;
begin 
 writeln('задайте 
кол-во 
слагаемых'); 
 readln(n); 
 S:=0; 
 for i:=1 to n do 
   S:=S+i; 

 writeln('сумма= ',
S); 
end. 

program Z2; 
var S, i, n: integer;
begin 
 readln(n); 
 S:=0; 
 i:=1; 
 while i <= n do 
 begin  
   S:=S+i; 
   i:=i+1 

 end; 
 writeln('сумма= ',
S); 
end. 

program Z3; 
var S, i, n: integer;
begin 
 readln(n); 
 S:=0; 
 i:=1; 
 repeat 
   S:=S+i; 
   i:=i+1 
 until i > n 

 writeln('сумма= ',
S); 
end. 

Массивы 

Массивы  представляют  собой  упорядоченную  совокупность 

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


background image

72 

для однозначного доступа к элементу массива. Если для определе-
ния места элемента в массиве используется один индекс, то массив 
называют  одномерным  (вектором),  два – двумерным  (матрицей). 
В языке Pascal индекс  заключается  в  квадратные  скобки.  Индекс 
может  быть  константой – a[5], b[1,1];  переменной –  a[i], 
b[i,j]; выражением – a[i+3], b[i+1,j+1]. 

 

Одномерные массивы 
Массивы  описываются  в  разделе  описания  переменных  

в следующей форме: 

var имя_массива: array[тип_индекса] of тип_элементов; 

В  качестве  типа  индекса  чаще  всего  используется  тип-

диапазон – [n..k]. 

Количество  элементов  в  диапазоне  определяется  следую-

щим образом: k–n+1. 

 

Пример

var a: array[1..10] of integer; 

Здесь  a – имя массива, элементы которого имеют базовый 

тип  integer,  первый  элемент  имеет  индекс 1, индекс  послед-
него элемента 10, всего 10 элементов. 

В  языке Pascal есть  возможность  создавать  свои  типы  дан-

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

 

Пример
const n=10; 
type vector=array[1..n] of real;  
                     {тип vector объединяет 
                     в себе все одномерные 
                     массивы, состоящие из 
                     действительных 
                     элементов} 
var a, b: vector; 


background image

73 

Ввод  и  вывод  массивов  в  языке Pascal осуществляется  по-

элементно, для чего необходимо организовать цикл. 

 
Примеры ввода элементов одномерного  массива  (с  клавиа-

туры и с помощью датчика случайных чисел). 
for i:=1 to n do 
  read(a[i]); 

randomize; 
for i:=1 to n do 
begin 
  a[i]:=1+random(100); 
  write(a[i]:5,'  '); 
end; 

 
Пример вывода элементов одномерного массива: 
for i:=1 to n do 
    write(a[i], '  '); 
 
Перебор элементов одномерного массива 
Элементы массива можно обрабатывать, двигаясь от начала 

массива к его концу или в обратном направлении: 

 

for i:=1 to n do     
  {обработка a[i]} 

for i:=n downto 1 do 
  {обработка a[i]} 

 

Можно  обрабатывать  элементы  массива  сразу  по  два  эле-

мента, двигаясь одновременно с обеих сторон: 
i:=1; {задание нижней границы индекса} 
j:=n; {задание верхней границы индекса} 
while i<=j do 
begin 
  {обработка a[i] и a[j]}; 
  i:=i+1;    {движение  слева  направо,  индекс 

увеличивается} 

  j:=j-1;    {движение  справа  налево,  индекс 

уменьшается} 

end; 

 


background image

74 

Если  необходимо  перебирать  только  элементы  массива  с 

четным  номером,  то  это  может  быть  реализовано  следующим 
образом: 

Вариант 1

i:=2;  

{индекс  начинает  изменяться  с 
четного числа 2} 

while i<=n do 

 

begin 
  {обработка a[i]}; 
  i:=i+2; 

{величина 

шага, 

равная 

двум, 

обеспечивает  сохранение  четности 
индекса} 

end; 

 
Вариант 2

for i:=1 to n do  
  if i mod 2 = 0 then {обработка a[i]};  
{внутрь  цикла  перебора  индекса  вложен  опера-
тор, проверяющий его четность} 

 
Вариант 3

for i:=1 to n div 2 do 
{обработка a[2*i]}; {используется  формула  чет-

ного  числа.  Поскольку  эле-
ментов с четным индексом – 
половина  от  всего  количе-
ства,  то  параметр  цикла i 
изменяется до n div 2} 

 
Двумерные массивы (матрицы) 
Для работы с элементами двумерного массива нужно орга-

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


background image

75 

разные и изменяются не одновременно: при одном значении па-
раметра внешнего цикла параметр внутреннего цикла принимает 
поочередно все значения. 

Двумерный  массив  A(m,n)  с  количеством  строк,  равным 

m,  и  количеством  столбцов,  равным  n,  содержащий  элементы 
целого  типа  (integer),  описывается  в  разделе  описания  пере-
менных в следующей форме: 

var a: array[1..m,1..n] of integer; 

К  элементу  двумерного  массива  обращаются  следующим 

образом: a[i,j], где i – номер строки; j – номер столбца. Об-
рабатывать  элементы  двумерного  массива  можно  как  по  стро-
кам, так и по столбцам: 

 

Обработка по строкам 

Обработка по столбцам 

for i:=1 to m do {перебор 

строк} 

 for j:=1 to n do {перебор 

столбцов}

  {обработка a[i,j]} 

for j:=1 to n do {перебор 

столбцов}

 for i:=1 to m do {перебор 

строк} 

  {обработка a[i,j]} 

 
Примеры ввода элементов двумерного массива (с клавиату-

ры и с помощью датчика случайных чисел): 
for i:=1 to m do 
 for j:=1 to n do 
   read(a[i,j]); 

randomize; 
for i:=1 to m do 
begin  
 for j:=1 to n do 
 begin 
  a[i,j]:=1+random(100);
  write(a[i,j]:5,'  '); 
 end; 
 writeln; 
end;