Презентация помогает учителю при обучении решении задач по теме "Программирование", содержит материал для актуализации знаний - разбор одной задачи, материал для объяснения нового материала по теме "Двумерные массивы. Решение типовых задач". В презентации рассмотрены задачи на нахождение наибольшего и наименьшего элемента столбца или строки, нахождение суммы элементов побочной и главной диагонали, обмен элементов столбца или строки.
Вы уже знаете о суперспособностях современного учителя?
Тратить минимум сил на подготовку и проведение уроков.
Быстро и объективно проверять знания учащихся.
Сделать изучение нового материала максимально понятным.
Избавить себя от подбора заданий и их проверки после уроков.
Write(‘Прямой счет’); for i:=-5 to 5 dobegin Write(i); end;
Write(‘Обратный счет’); for i:=5 downto -5 dobegin Write(i); end;
Write('Счет окончен');
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Пусть N=2, a=5 и 3. Тогда по этой программе Паскаль напечатает ...
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Вместо s:=0 написать s:=10.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Вместо s:=s+a написать s:=s+a+1 .
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Строки end {for} и WriteLn поменять местами.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Строки s:=0 и for поменять местами.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Строки for и ReadLn поменять местами.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Строки s:=s+a и end {for} поменять местами.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Что он напечатает, если:
Вместо for i:=1 to N написать for i:=2 to N.
VAR i,N:Integer;
a,s:Real;
BEGIN
ReadLn(N);
s:=0;
for i:=1 to N dobegin
ReadLn(a);
s:=s+a
end {for};
WriteLn(‘Сумма равна ' ,s:20:10)
END.
Самостоятельная работа
1 вариант
2 вариант
Вычислить кубы чисел первой сотни натуральных чисел.
Вычислить абсолютное значение отрицательных чисел от -100.
Используйте три вида циклов
МАССИВЫ
ПМ.02 РАЗРАБОТКА, ВНЕДРЕНИЕ
И АДАПТАЦИЯ ОТРАСЛЕВОГО
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
МАССИВ - наиболее широко используемый структурированный тип данных, предназначенный для хранения нескольких однотипных элементов.
Массив обозначается одним именем. Так всю совокупность действительных чисел
1.6, 14.9, -5.0, 8.5, 0.46
можно считать массивом и обозначить одним именем, например А. Образующие массив переменные называются элементами массива . Каждый элемент массива обозначается именем массива с индексом, заключенным в квадратные скобки.
A[1], A[2], A[3], ..., A[n].
Индекс определяет положение элемента массива данных относительно его начала.
Для рассмотренного выше примера элементами массива А являются:
Для того чтобы задать массив, необходимо в разделе описания переменных ( 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)-мерных массивов.
0,sgn(x),'!',abs(k*5)]:= 0;" width="640"
Обращение к компонентам массива
Примеры использования компонент массива:
a2['z']:= a2['z']+1;
a3[-10]:= 2.5;
a3[i+j]:= a9[i,j];
a10[x0,sgn(x),'!',abs(k*5)]:= 0;
Задание массива константой
Для того чтобы не вводить массивы вручную во время отладки программы (особенно если они имеют большую размерность ), можно пользоваться не только файлами . Существует и более простой способ, когда входные данные задаются прямо в тексте программы при помощи типизированных констант .
Если массив - линейный (вектор) , то начальные значения для компонент этого вектора задаются через запятую , а сам векторзаключается в круглые скобки .
Задание массива константой
Многомерный массив также можно рассматривать как линейный, предполагая, что его компонентами служат другие массивы.
Таким образом, для системы вложенных векторов действует то же правило задания типизированной константы : каждый вектор ограничивается снаружи круглыми скобками.
Исключение составляют только массивы, компонентами которых являются величины типа char . Такие массивы можно задавать проще: строкой символов .
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 .
Ввод и вывод одномерного массива
Описание типа массива задается следующим образом:
typeимя типа= array[список индексов] ofтип
имя типа - правильный идентификатор;
список индексов - список одного или нескольких индексных типов, разделенных запятыми;
тип - любой тип данных.
Вводить и выводить массивы можно только поэлементно.
Ввод и вывод одномерного массива
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.
Ввод и вывод одномерного массива
Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например:
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 считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа.
1 Способ (заполнение с клавиатуры. Динамический ввод данных)
Var
M:array[1..10] of integer;
I: byte;
Begin
For I:=1 To 10 Do Begin
Write('Введите ',I,' значение ');
ReadLn(M[I]);
End;
End .
Ввод с клавиатуры
2 Способ (с использованием генератора случайных чисел)
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 .
Заполнение случайными числами
Вывод массива на экран
3 Способ (статический ввод данных)
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 .
Задание массива как постоянной
Вывод массива на экран
Алгоритмы поиска и присвоения значений элементам массива
Примеры решения задач
Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива
Составить программу обработки массива размерностью 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 элементов
Заполнение массива с клавиатуры
0 THEN WriteLn('Положит элемент = ',A[I],' его индекс = ',I); END. Проверка положительного элемента Вывод положительного элемента и его номера" width="640"
Вывести индексы и значения положительных элементов массива
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.
Проверка положительного элемента
Вывод положительного элемента и его номера
Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива
Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y.
Значения аргументов задать в массиве 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 элементов
Заполнение одного массива с клавиатуры
Составить программу вычисления и печати значений функции 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.
Вычисление элементов второго массива
Вывод элементов двух массивов
Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y.
Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.
Дан массив 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 элементов
Заполнение массива случайными числами
0 THEN Write(M[I]:3); I:=I+5; End; END. Указание начального значения – номера выводимого элемента Вывод каждого пятого и положительного, в строку" width="640"
Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.
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
IF M[I] 0 THEN Write(M[I]:3);
I:=I+5;
End;
END.
Указание начального значения – номера выводимого элемента
Вывод каждого пятого и положительного, в строку
Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.
Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива
Примеры решения задач
Определить сумму элементов массива Р(n), значения которых больше заданного числа Т
Определить элементы массива Р(n)
Объявление массива целых чисел из 30 элементов
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;
Заполнение массива случайными числами
T THEN S:=S+P[I]; { сумма элементов массива T } WriteLn(' Сумма элементов массива заданного значения = ',S); END. Вычисление суммы" width="640"
Определить сумму элементов массива Р(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.
Вычисление суммы
T THEN S:=S+P[I]; WriteLn(' Сумма элементов массива заданного значения = ',S); Ввод заданного числа Т Обнуление суммы Проверка условия и суммирование элементов массива Вывод полученной суммы" width="640"
Определить сумму элементов массива Р(n), значения которых больше заданного числа Т
Write(' Введите значение переменной '); ReadLn(T);
S:=0;
FOR I:=1 TO N DO
IF P[I]T THEN S:=S+P[I];
WriteLn(' Сумма элементов массива заданного значения = ',S);
Ввод заданного числа Т
Обнуление суммы
Проверка условия и суммирование элементов массива
Вывод полученной суммы
Определить сумму элементов массива Р(n), значения которых больше заданного числа Т
Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму элементов массива, произведение положительных и количество нулевых элементов. Результаты вычислений вывести на экран.
Определить элементы массива Р(n)
Объявление массива целых чисел из 30 элементов
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;
Заполнение массива случайными числами
Примеры для самостоятельного решения:
Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.
Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых 10.
Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.
Составить программу вычисления и печати значений функции Y=(sinx+1) cos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.
Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.