одномерные и двумерные массивы

  • pptx
  • 26.12.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Обучение решению задач программирование на pascal.pptx

Обучение решению задач программирование на pascal Одномерные и двумерные массивы

повторение

Задание: Вычислять с использованием while квадратные корни из чисел 900, 893, 886, 879 и т.д. до тех пор, пока это можно делать.

VAR f : Integer; BEGIN Write(‘Вычисление квадратных корней '); f:=900; while f>=0 do begin Write(sqrt(f),' '); f:=f-7; end; Write(' Вычисления окончены') END.

Задание: Вычислять с использованием repeat квадратные корни из чисел 900, 893, 886, 879 и т.д. до тех пор, пока это можно делать.

VAR f : Integer; BEGIN Write(‘Вычисление квадратных корней '); f:=900; repeat
Write(sqrt(f):3:3,' ');
f:=f-7;
until f<0; Write(' Вычисления окончены') END.

Напечатать с помощью оператора for:

Прямой счет: -5 -4 -3 -2 -1 0 1 2 3 4 5
Обратный счет: 5 4 3 2 1 0 -1 -2 -3 -4 -5 Конец счета

VAR i : Integer; BEGIN
Write(‘Прямой счет’); for i:=-5 to 5 do begin Write(i); end;
Write(‘Обратный счет’); for i:=5 downto -5 do begin Write(i); end;
Write('Счет окончен');
END.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Пусть N=2, a=5 и 3. Тогда по этой программе Паскаль напечатает ...

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Вместо s:=0 написать s:=10.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Вместо s:=s+a написать s:=s+a+1.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Строки end {for} и WriteLn поменять местами.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Строки s:=0 и for поменять местами.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Строки for и ReadLn поменять местами.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Строки s:=s+a и end {for} поменять местами.

Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.

VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N do begin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.

Что он напечатает, если:
Вместо for i:=1 to N написать for i:=2 to N.

Самостоятельная работа

1 вариант
Вычислить кубы чисел первой сотни натуральных чисел.

2 вариант
Вычислить абсолютное значение отрицательных чисел от -100.

Используйте три вида циклов

МАССИВЫ

ПМ.02 РАЗРАБОТКА, ВНЕДРЕНИЕ
И АДАПТАЦИЯ ОТРАСЛЕВОГО
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

МАССИВ - наиболее широко используемый структурированный тип данных, предназначенный для хранения нескольких однотипных элементов.

Массив обозначается одним именем. Так всю совокупность действительных чисел
1.6, 14.9, -5.0, 8.5, 0.46




можно считать массивом и обозначить одним именем, например А. Образующие массив переменные называются элементами массива. Каждый элемент массива обозначается именем массива с индексом, заключенным в квадратные скобки.
A[1], A[2], A[3], ..., A[n].
Индекс определяет положение элемента массива данных относительно его начала.
Для рассмотренного выше примера элементами массива А являются:
A[1]=1.6, A[2]=14.9, A[3]=-5.0, A[4]=8.5, A[5]=0.46

1.6

14.9

-5.0

8.5

0.46

1

2

3

4

5

6

7

8

9

10

5

-7

6

2

3

-4

3

-8

1

-2

а[1]

а[2]

а[3]

а[4]

а[5]

а[10]


элемента

Значение элемента

Обозначение
элемента массива

МАССИВЫ

Описание массива
Для того чтобы задать массив, необходимо в разделе описания переменных (var) указать его размеры и тип его компонент.
Общий вид описания (одномерного) массива:
array[<тип_индексов> ] of <тип_компонент>;
Чаще всего это трактуется так:
array[<левая_граница>..<правая_граница>] of <тип_компонент>;

МАССИВЫ

Общий вид описания (одномерного) массива:
array[<тип_индексов> ] of <тип_компонент>;
Например, одномерный (линейный) массив, состоящий не более чем из 10 целых чисел, можно описать следующим образом:
var a1: array [1..10] of integer;

НУМЕРАЦИЯ

Нумерация компонент массива не обязана начинаться с 1 или с 0 - вы можете описывать массив, пронумерованный любыми целыми числами.
Необходимо лишь, чтобы номер последней компоненты был больше, чем номер первой:
var a1: array [-5..4] of integer;

НУМЕРАЦИЯ

Собственно говоря, нумеровать компоненты массива можно не только целыми числами. Любой порядковый тип данных (перечислимый, интервальный, символьный, логический, а также произвольный тип, созданный на их основе) имеет право выступать в роли нумератора.
Таким образом, допустимы следующие описания массивов:
type char = 'a','c'..'z'; (- отсутствует символ "b")
var a1: array[char] of integer; - 256 компонент
a2: array [char] of integer; - 256 целых компонент
a3: array [shortint] of real; - 256 вещественных компонент

Нумерация

Общий размер массива не должен превосходить 65 520 байт.
Следовательно, попытка задать массив a4:array[integer] of byte ; не увенчается успехом, поскольку тип integer покрывает 65 535 различных элементов. А про тип longint в данном случае лучше и вовсе не вспоминать.
Тип компонент массива может быть любым:
var a4: array[10..20] of real; - массив из компонент простого типа
a5: array[0..100] of record1; - массив из записей
a6: array[-10..10] of ^string; - массив из указателей на строки
a7: array[-1..1] of file; - массив из имен файловых переменных
a8: array[1..100] of array[1..100] of char; - двумерный массив (массив векторов)

Нумерация

Для краткости и удобства многомерные массивы можно описывать и более простым способом:
var a9: array[1..10,1..20] of real; - двумерный массив 10 х 20
a10: array[boolean, -1..1,char, -10..10] of word; - четырехмерный массив 2 х 3 х 256 х 21
Общее ограничение на размер массива - не более 65 520 байт - сохраняется и для многомерных массивов.
Количество компонент многомерного массива вычисляется как произведение всех его "измерений".
Таким образом, в массиве а9 содержится 200 компонент, а в массиве а10 - 32 256 компонент.

Описание переменных размерностей

Если ваша программа должна обрабатывать матрицы переменных размерностей (скажем, N по горизонтали и М по вертикали), то вы столкнетесь с проблемой изначального задания массива, ведь в разделе var не допускается использование переменных.
Следовательно, самый логичный, казалось бы, вариант
var m,n: integer; a: array[1..m,1..n] of real;
придется отбросить.

Описание переменных размерностей

Предположим, однако, что вам известны максимальные границы, в которые могут попасть индексы обрабатываемого массива.
Скажем, N и М заведомо не могут превосходить 100. Тогда можно выделить место под наибольший возможный массив, а реально работать только с малой его частью:
const nnn=100;
var a: array[1..nnn,1..nnn] of real;
m,n: integer;

Обращение к компонентам массива

Массивы относятся к структурам прямого доступа. Это означает, что возможно напрямую (не перебирая предварительно все предшествующие компоненты) обратиться к любой интересующей нас компоненте массива.
Доступ к компонентам линейного массива осуществляется так:
<имя_массива>[<индекс_компоненты>]
а многомерного - так:
<имя_массива>[<индекс>,_,<индекс>]

Обращение к компонентам массива

ПРАВИЛА употребления индексов при обращении к компонентам массива таковы:
Индекс компоненты может быть константой, переменной или выражением, куда входят операции и вызовы функций.
Тип каждого индекса должен быть совместим с типом, объявленным в описании массива именно для соответствующего "измерения"; менять индексы местами нельзя.
Количество индексов не должно превышать количество "измерений" массива. Попытка обратиться к линейному массиву как к многомерному обязательно вызовет ошибку. А вот обратная ситуация вполне возможна: например, если вы описали N-мерный массив, то его можно воспринимать как линейный массив, состоящий из (N-1)-мерных массивов.

Обращение к компонентам массива

Примеры использования компонент массива:

a2['z']:= a2['z']+1;
a3[-10]:= 2.5;
a3[i+j]:= a9[i,j];
a10[x>0,sgn(x),'!',abs(k*5)]:= 0;

Задание массива константой

Для того чтобы не вводить массивы вручную во время отладки программы (особенно если они имеют большую размерность), можно пользоваться не только файлами. Существует и более простой способ, когда входные данные задаются прямо в тексте программы при помощи типизированных констант.
Если массив - линейный (вектор), то начальные значения для компонент этого вектора задаются через запятую, а сам вектор заключается в круглые скобки.

Задание массива константой

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

Задание массива константой

Примеры задания массивов типизированными константами:

type mass = array[1..3,1..2] of byte;
const a: array[-1..1] of byte = (0,0,0); {линейный}
b: mass = ((1,2),(3,4),(5,6)); {двумерный}
s: array[0..9] of char = '0123456789';

Замечание: Невозможно задать неименованную или нетипизированную константу, относящуюся к типу данных array.