- •Тема: Массивы. Двумерные массивы Краткий обзор языка
- •Одномерные массивы
- •Действия над массивами
- •Двумерные массивы Паскаля – матрицы
- •Описание двумерного массива Паскаля.
- •Пример описания двумерного массива Паскаля
- •Основные действия с двумерными массивами Паскаля
- •Ввод двумерного массива Паскаля
- •I, j: integer; { индексы массива }
- •Вывод двумерного массива Паскаля на экран
- •Представление двумерного массива Паскаля в памяти
- •Примеры решения задач с двумерными массивами Паскаля
- •Методы доступа к элементам массивов
- •Динамическое размещение массивов
- •Индексный массив
- •Специфические типы массивов Динамические массивы
- •Гетерогенные массивы
- •Массивы массивов
- •Примеры задач "Переворот" массива
- •Сдвиг массива на k элементов влево или вправо
- •Поиск минимума/максимума и их индексов
- •Поиск минимума/максимума и их индексов в двумерном массиве (матрице)
- •Работа с элементами выше/ниже/на главной/побочной диагоналях
- •Транспонирование матрицы относительно главной и побочной диагоналей
- •Поворот двумерного массива на 90° по часовой стрелке
- •Поворот на 90 градусов по часовой стрелке и против без использования дополнительного массива
- •Удаление элемента в одномерном массиве
- •Вставка элемента в одномерный массив
- •Удаление всех строк и столбцов, содержащих хоть 1 ноль.
- •Цифровая сортировка (DigidalSort)
- •Двоичный (бинарный) поиск
- •Работа с матрицей одним циклом
- •Заполнение массива случайными неповторяющимися значениями
- •Удалить все элементы, которые встречаются больше 1 раза
- •Удаление элементов в одномерном несортированном массиве по условию
- •Заполнение массива по спирали
- •Построение синусоиды на двумерном массиве(матрице) из точек(.)
- •Вставка нового столбца в матрицу со сдвигом исходных элементов
- •Переворот матрицы на 90° по часовой стрелке
- •Заполнение массива неповторяющимися значениями
Удаление элементов в одномерном несортированном массиве по условию
{ Сама задача. Алгоритмы. Введение в разработку и анализ. Ананий Левитин
Упражнения 1.4.1. Поясните, как можно реализовать каждую из перечисленных ниже
операций над массивом так, чтобы время ее выполнения не зависело от
размера массива n. а) Удаление i-го элемента массива 1 <= i <= n). }
{ Усложненная модификация: удалить все элементы, которые делятся нацело на x }
{ PascalABC.NET. lamed, 14.07.2011 }
const
MaxN = 30;
var
a: array[1..MaxN] of integer;
i, n: integer;
x: integer;
k: integer;
begin
// Формирование одномерного массива
randomize;
n:=1+random(MaxN);
for i:= 1 to n do
a[i]:= random(MaxN+1);
x:= 2+random(n-1);
writeln('До обработки n=', n, '.');
write('<');
for i:= 1 to n do
begin
if i<>1 then write(',');
write(a[i]);
end;
writeln('>');
i:=1;
k:= 0;
while (i<=n) do
begin
while (i<=n) and (a[i] mod x=0) do
begin // Если элемент требуется удалить
a[i]:= a[n]; // Заменяем его последним использованным элементом массива
// заменяющий элемент на следующем шаге тоже придется проверить
dec(n); // уменьшаем счетчик числа используемых элементов
inc(k); // увеличиваем счетчик удаленных элементов
end;
inc(i);
end;
writeln;
writeln('n=', n, '. Удалено ', k, ' элементов, которые делятся на ', x, '.');
write('<');
for i:= 1 to n do
begin
if i<>1 then write(',');
write(a[i]);
end;
writeln('>');
end.
Заполнение массива по спирали
uses crt;
var a: array [1..100,1..100] of integer;
i,m,k,n: integer;
begin
writeln ('Vvesti chislo');
readln (n);
k:=0;
m:=0;
repeat
for i:= m+1 to n-m do
begin
inc (k);
a[i,m+1]:= k;
end;
for i:= m+2 to n-m do
begin
inc (k);
a[n-m,i]:= k;
end;
for i:= n-m-1 downto m+1 do
begin
inc (k);
a[i,n-m]:= k;
end;
for i:= n-m-1 downto m+2 do
begin
inc (k);
a[m+1,i]:=k;
end;
inc (m);
until m+1=n div 2 + 2;
for i:= 1 to n do
begin
for k:= 1 to n do
write (a[i,k]:3,' ');
writeln;
end;
end.
Построение синусоиды на двумерном массиве(матрице) из точек(.)
program project1;
uses crt;
const w=79;{Ширина массива} h=22; {Высота массива}
var i,j,k: integer;
arr: array [1..h,1..w] of char;
begin
ClrScr; {Очищаем экран}
{Заполняем массив точками '.'}
for j:=1 to h do
for i:=1 to w do
begin
arr[j,i]:='.';
end;
{Запоняем некоторые элементы массива,
которые выявляются по формуле, звездочками '*'}
for j:=1 to w do
begin
k:=round((sin(3.0*j*PI/w)+1)/2*h);
arr[k,j]:='*';
end;
{Выводем массив}
for j:=1 to h do
begin
writeln;
for i:=1 to w do
write(arr[j,i]);
end;
readln;
end.
Вставка нового столбца в матрицу со сдвигом исходных элементов
вставление нового столбца в матрицу со сдвигом исходных элементов, например: вставить столбец между 5 и 6 столбцом исходной матрицы.
uses crt;
var
a: array[1..10,1..12] of integer;
b: array[1..10] of integer;
i,k,n,j,q: integer;
begin
write('Введите размерность матрицы, не больше 10 и не меньше 6 : ');
repeat
read(n);
until (n>=6) and (n<11);
writeln('Введите элементы одномерного массива:');
for k:=1 to n do begin
read(b[k]);
end;
write('В какой столбец будут вставляться элементы: ');
repeat
read(q);
until (q>=1) and (q<=n);
writeln('Для вывода результата нажмите ENTER...');
readln;
clrscr;
write('Исходная матрица:');
writeln;
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(10);
write(a[i,j]:4);
end;
writeln;
end;
for j:=n+1 downto q do begin
for i:=1 to n do begin
a[i,j+1]:=a[i,j];
end;
end;
for i:=1 to n do begin
a[i,q]:=b[i];
end;
writeln;
writeln('Полученная матрица:');
for i:=1 to n do begin
for j:=1 to n+1 do begin
write(a[i,j]:4);
end;
writeln;
end;
end.
аналогично предыдущей программе, только вставление строки:
uses crt;
var
a: array[1..12,1..10] of integer;
b: array[1..10] of integer;
i,k,n,j,q: integer;
begin
write('Введите размерность матрицы, не больше 10 и не меньше 6 : ');
repeat
read(n);
until (n>=6) and (n<11);
writeln('Введите элементы одномерного массива:');
for k:=1 to n do begin
read(b[k]);
end;
write('В какую строку будут вставляться элементы: ');
repeat
read(q);
until (q>=1) and (q<=n);
writeln('Для вывода результата нажмите ENTER...');
readln;
clrscr;
write('Исходная матрица:');
writeln;
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=random(10);
write(a[i,j]:4);
end;
writeln;
end;
for i:=n+1 downto q do begin
for j:=1 to n do begin
a[i+1,j]:=a[i,j];
end;
end;
for i:=1 to n do begin
a[q,i]:=b[i];
end;
writeln;
writeln('Полученная матрица:');
for i:=1 to n+1 do begin
for j:=1 to n do begin
write(a[i,j]:4);
end;
writeln;
end;
end.
