Слайд 1Обучение решению задач
программирование на pascal
Одномерные и двумерные массивы
Преподаватель математики
и информатики
ГБОУ СПО РО «Константиновский педагогический колледж»
Алексей Юлия Вадимовна
Слайд 3Задание: Вычислять с использованием 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.
Слайд 4Задание: Вычислять с использованием 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.
Слайд 5Напечатать с помощью оператора 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.
Слайд 6Задача: В компьютер вводится 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. Тогда по этой программе Паскаль напечатает ...
Слайд 7Задача: В компьютер вводится 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.
Слайд 8Задача: В компьютер вводится 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.
Слайд 9Задача: В компьютер вводится 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 поменять местами.
Слайд 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:=0 и for поменять местами.
Слайд 11Задача: В компьютер вводится 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 поменять местами.
Слайд 12Задача: В компьютер вводится 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} поменять местами.
Слайд 13Задача: В компьютер вводится 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.
Слайд 14Самостоятельная работа
1 вариант
Вычислить кубы чисел первой сотни натуральных чисел.
2 вариант
Вычислить
абсолютное значение отрицательных чисел от -100.
Используйте три вида циклов
Слайд 15МАССИВЫ
ПМ.02 РАЗРАБОТКА, ВНЕДРЕНИЕ
И АДАПТАЦИЯ ОТРАСЛЕВОГО
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Слайд 16МАССИВ - наиболее широко используемый структурированный тип данных, предназначенный для
хранения нескольких однотипных элементов.
Массив обозначается одним именем. Так всю совокупность
действительных чисел
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
Слайд 17№
элемента
Значение элемента
Обозначение
элемента массива
Слайд 18МАССИВЫ
Описание массива
Для того чтобы задать массив, необходимо в разделе описания
переменных (var) указать его размеры и тип его компонент.
Общий вид
описания (одномерного) массива:
array[<тип_индексов> ] of <тип_компонент>;
Чаще всего это трактуется так:
array[<левая_граница>..<правая_граница>] of <тип_компонент>;
Слайд 19МАССИВЫ
Общий вид описания (одномерного) массива:
array[ ] of ;
Например, одномерный
(линейный) массив, состоящий не более чем из 10 целых чисел,
можно описать следующим образом:
var a1: array [1..10] of integer;
Слайд 20НУМЕРАЦИЯ
Нумерация компонент массива не обязана начинаться с 1 или с
0 - вы можете описывать массив, пронумерованный любыми целыми числами.
Необходимо лишь, чтобы номер последней компоненты был больше, чем номер первой:
var a1: array [-5..4] of integer;
Слайд 21НУМЕРАЦИЯ
Собственно говоря, нумеровать компоненты массива можно не только целыми числами.
Любой порядковый тип данных (перечислимый, интервальный, символьный, логический, а также
произвольный тип, созданный на их основе) имеет право выступать в роли нумератора.
Таким образом, допустимы следующие описания массивов:
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 вещественных компонент
Слайд 22Нумерация
Общий размер массива не должен превосходить 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; - двумерный массив (массив векторов)
Слайд 23Нумерация
Для краткости и удобства многомерные массивы можно описывать и более
простым способом:
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 компонент.
Слайд 24Описание переменных размерностей
Если ваша программа должна обрабатывать матрицы переменных размерностей
(скажем, N по горизонтали и М по вертикали), то вы
столкнетесь с проблемой изначального задания массива, ведь в разделе var не допускается использование переменных.
Следовательно, самый логичный, казалось бы, вариант
var m,n: integer; a: array[1..m,1..n] of real;
придется отбросить.
Слайд 25Описание переменных размерностей
Предположим, однако, что вам известны максимальные границы, в
которые могут попасть индексы обрабатываемого массива.
Скажем, N и М
заведомо не могут превосходить 100. Тогда можно выделить место под наибольший возможный массив, а реально работать только с малой его частью:
const nnn=100;
var a: array[1..nnn,1..nnn] of real;
m,n: integer;
Слайд 26Обращение к компонентам массива
Массивы относятся к структурам прямого доступа. Это
означает, что возможно напрямую (не перебирая предварительно все предшествующие компоненты)
обратиться к любой интересующей нас компоненте массива.
Доступ к компонентам линейного массива осуществляется так:
<имя_массива>[<индекс_компоненты>]
а многомерного - так:
<имя_массива>[<индекс>,_,<индекс>]
Слайд 27Обращение к компонентам массива
ПРАВИЛА употребления индексов при обращении к компонентам
массива таковы:
Индекс компоненты может быть константой, переменной или выражением, куда
входят операции и вызовы функций.
Тип каждого индекса должен быть совместим с типом, объявленным в описании массива именно для соответствующего "измерения"; менять индексы местами нельзя.
Количество индексов не должно превышать количество "измерений" массива. Попытка обратиться к линейному массиву как к многомерному обязательно вызовет ошибку. А вот обратная ситуация вполне возможна: например, если вы описали N-мерный массив, то его можно воспринимать как линейный массив, состоящий из (N-1)-мерных массивов.
Слайд 28Обращение к компонентам массива
Примеры использования компонент массива:
a2['z']:= a2['z']+1;
a3[-10]:= 2.5;
a3[i+j]:= a9[i,j];
a10[x>0,sgn(x),'!',abs(k*5)]:=
Слайд 29Задание массива константой
Для того чтобы не вводить массивы вручную во
время отладки программы (особенно если они имеют большую размерность), можно
пользоваться не только файлами. Существует и более простой способ, когда входные данные задаются прямо в тексте программы при помощи типизированных констант.
Если массив - линейный (вектор), то начальные значения для компонент этого вектора задаются через запятую, а сам вектор заключается в круглые скобки.
Слайд 30Задание массива константой
Многомерный массив также можно рассматривать как линейный, предполагая,
что его компонентами служат другие массивы.
Таким образом, для системы
вложенных векторов действует то же правило задания типизированной константы: каждый вектор ограничивается снаружи круглыми скобками.
Исключение составляют только массивы, компонентами которых являются величины типа char. Такие массивы можно задавать проще: строкой символов.
Слайд 31Задание массива константой
Примеры задания массивов типизированными константами:
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.
Слайд 32Ввод и вывод одномерного массива
Описание типа массива задается следующим образом:
type
имя типа = array[ список индексов ] of тип
имя
типа - правильный идентификатор;
список индексов - список одного или нескольких индексных типов, разделенных запятыми;
тип - любой тип данных.
Вводить и выводить массивы можно только поэлементно.
Слайд 33Ввод и вывод одномерного массива
const
n = 5;
type
mas
= array[1..n] of integer;
var
a: mas; i: byte;
begin
writeln('введите элементы массива');
for i:=1 to n do readln(a[i]);
writeln('вывод элементов массива:');
for i:=1 to n do write(a[i]:5);
end.
Слайд 34Ввод и вывод одномерного массива
Определить переменную как массив можно и
непосредственно при ее описании, без предварительного описания типа массива, например:
var
a,b,c: array[1..10] of integer;
Если массивы a и b описаны как:
var a = array[1..5] of integer; b = array[1..5] of integer;
то переменные a и b считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа.
Слайд 35Var
M:array[1..10] of integer;
I: byte;
Begin
For I:=1 To
10 Do Begin
Write('Введите ',I,' значение ');
ReadLn(M[I]);
End;
End.
1 Способ (заполнение с клавиатуры. Динамический ввод данных)
Ввод с клавиатуры
Слайд 362 Способ (с использованием генератора случайных чисел)
Var
M: array[1..25] of
integer;
I: byte;
Begin
For I:=1 To 25 Do Begin
M[I]:=Random(50);
Write(M[I]:4);
End;
End.
Заполнение случайными числами
Вывод массива на экран
Слайд 373 Способ (статический ввод данных)
Const
M: array[1..12] of integer
= (31,28,31,30,31,30,31,31,30,31,30,31);
Var
I: Integer;
Begin
For I:=1
To 9 Do
Write(M[I]:3);
End.
Вывод массива на экран
Задание массива как постоянной
Слайд 38Примеры решения задач
Алгоритмы поиска и присвоения значений элементам массива
Слайд 39Составить программу обработки массива размерностью n, заполненного целыми числами, введенными
с клавиатуры. Вывести индексы и значения положительных элементов массива
Слайд 40Составить программу обработки массива размерностью n, заполненного целыми числами, введенными
с клавиатуры.
USES Crt;
CONST N=10;
VAR
A:ARRAY[0..N] OF
INTEGER;
I:BYTE;
BEGIN
ClrScr;
FOR I:=1 TO N DO Begin
Write('Введите ',I,' элемент массива '); ReadLn(A[I]);
End;
Объявление массива целых чисел из 10 элементов
Заполнение массива с клавиатуры
Слайд 41Вывести индексы и значения положительных элементов массива
USES Crt;
CONST N=10;
VAR
A:ARRAY[0..N] OF INTEGER;
I:BYTE;
BEGIN
ClrScr;
FOR I:=1
TO N DO Begin
Write('Введите ',I,' элемент массива '); ReadLn(A[I]);
End;
FOR I:=1 TO N DO
IF A[I]>0 THEN WriteLn('Положит элемент = ',A[I],' его индекс = ',I);
END.
Проверка положительного элемента
Вывод положительного элемента и его номера
Слайд 42Составить программу обработки массива размерностью n, заполненного целыми числами, введенными
с клавиатуры. Вывести индексы и значения положительных элементов массива
Слайд 43Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов
задать в массиве X, состоящего из 6 элементов. Значения функции
записать в массив Y.
Слайд 44Значения аргументов задать в массиве X, состоящего из 6 элементов.
USES
Crt;
VAR
X,Y:ARRAY[0..6] OF REAL;
I: BYTE;
BEGIN
ClrScr;
FOR I:=1 TO 6 DO Begin
Write('Введите ',I,' значение аргумента '); ReadLn(X[I]);
End;
Объявление двух массивов вещественных чисел из 6 элементов
Заполнение одного массива с клавиатуры
Слайд 45Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения функции
записать в массив Y.
USES Crt;
VAR
X,Y:ARRAY[0..6] OF REAL;
I: BYTE;
BEGIN
ClrScr;
FOR I:=1 TO 6 DO Begin
Write('Введите ',I,' значение аргумента '); ReadLn(X[I]);
End;
FOR I:=1 TO 6 DO Begin
Y[I]:=SIN(X[I]-1)/(2*X[I]);
WriteLn(' X= ',X[I]:4:1,' Y=',Y[I]:5:2);
End;
END.
Вычисление элементов второго массива
Вывод элементов двух массивов
Слайд 46Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов
задать в массиве X, состоящего из 6 элементов. Значения функции
записать в массив Y.
Слайд 47Дан массив M, состоящий из 30 элементов. Элементы массива -
произвольные целые числа. Выдать на экран значение каждого пятого и
положительного элемента. Указанные элементы выдать в строку.
Слайд 48Дан массив M, состоящий из 30 элементов. Элементы массива -
произвольные целые числа.
USES Crt;
VAR
M:ARRAY[0..30] OF INTEGER;
I:
BYTE;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO 30 DO Begin
M[I]:=Random(20)-4; Write(M[I]:3);
End; WriteLn;
Объявление массива целых чисел из 30 элементов
Заполнение массива случайными числами
Слайд 49Выдать на экран значение каждого пятого и положительного элемента. Указанные
элементы выдать в строку.
USES Crt;
VAR
M:ARRAY[0..30] OF INTEGER;
I: BYTE;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO 30 DO Begin
M[I]:=Random(20)-4; Write(M[I]:3);
End; WriteLn;
I:=5;
WriteLn(' Значения каждого пятого и положительного элемента массива');
While I<=30 DO Begin
IF M[I] > 0 THEN Write(M[I]:3);
I:=I+5;
End;
END.
Указание начального значения – номера выводимого элемента
Вывод каждого пятого и положительного, в строку
Слайд 50Дан массив M, состоящий из 30 элементов. Элементы массива -
произвольные целые числа. Выдать на экран значение каждого пятого и
положительного элемента. Указанные элементы выдать в строку.
Слайд 51Примеры решения задач
Алгоритмы нахождения суммы, произведения и количества элементов массива.
Работа с индексами элементов массива
Слайд 52Определить сумму элементов массива Р(n), значения которых больше заданного числа
Слайд 53Определить элементы массива Р(n)
USES Crt;
CONST N=30;
VAR
P:ARRAY[0..N] OF
INTEGER; I,T:BYTE; S:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn('
Значения элементов массива');
FOR I:=1 TO N DO Begin
P[I]:=Random(30); Write(P[I]:3);
End; WriteLn;
Объявление массива целых чисел из 30 элементов
Заполнение массива случайными числами
Слайд 54Определить сумму элементов массива Р(n), значения которых больше заданного числа
Т
USES Crt;
Const N=30;
VAR
P:ARRAY[0..N] OF
INTEGER;
I,T:BYTE; S:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO N DO Begin
P[I]:=Random(30); Write(P[I]:3);
End; WriteLn;
Write(' Введите значение переменной '); ReadLn(T);
S:=0;
FOR I:=1 TO N DO
IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T }
WriteLn(' Сумма элементов массива > заданного значения = ',S);
END.
Вычисление суммы
Слайд 55Определить сумму элементов массива Р(n), значения которых больше заданного числа
Т
Write(' Введите значение переменной '); ReadLn(T);
S:=0;
FOR I:=1 TO N DO
IF P[I]>T THEN S:=S+P[I];
WriteLn(' Сумма элементов массива > заданного значения = ',S);
Ввод заданного числа Т
Обнуление суммы
Проверка условия и суммирование элементов массива
Вывод полученной суммы
Слайд 56Определить сумму элементов массива Р(n), значения которых больше заданного числа
Слайд 57Дан массив целых чисел, состоящий из 25 элементов.
Подсчитать сумму
элементов массива, произведение положительных и количество нулевых элементов.
Результаты вычислений вывести на экран.
Слайд 58Определить элементы массива Р(n)
USES Crt;
CONST N=30;
VAR
P:ARRAY[0..N] OF
INTEGER; I,T:BYTE; S:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn('
Значения элементов массива');
FOR I:=1 TO N DO Begin
P[I]:=Random(30); Write(P[I]:3);
End; WriteLn;
Объявление массива целых чисел из 30 элементов
Заполнение массива случайными числами
Слайд 59Примеры для самостоятельного решения:
Дан одномерный массив размерностью 10, заполненный целыми
числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить
на N. Измененный массив вывести на экран одной строкой.
Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.
Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.
Составить программу вычисления и печати значений функции Y=(sinx+1)cos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.
Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.