Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Способ 2. С барьерным элементом




const aN = 10; // Количество элементов в массиве a bN = 6; // Количество элементов в массиве b cN = aN + bN; // Количество элементов в массиве c var a: array [1..aN+1] of integer:= (1,5,12,15,47,89,98,112,171,180,0); // последний элемент - барьерный b: array [1..bN+1] of integer:= (13,44,58,71,73,111,0); c: array [1..cN] of integer; ai,bi,ci: integer; begin writeln('Элементы массива a: '); for var i:=1 to aN do write(a[i],' '); writeln; writeln('Элементы массива b: '); for var i:=1 to bN do write(b[i],' '); writeln; a[aN+1]:= integer. MaxValue; // барьерный элемент - самый большой b[bN+1]:= integer. MaxValue; ci:= 1; ai:= 1; bi:= 1; for ci:=1 to cN do if a[ai]<b[bi] then begin c[ci]:= a[ai]; ai += 1; end else begin c[ci]:= b[bi]; bi += 1; end; writeln('Результат слияния: '); for var i:=1 to cN do write(c[i],' '); end.

Сдвиг элементов влево

const N = 10; var a: array [1..N] of integer; begin for var i:=1 to N do a[i]:= Random(100); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; for var i:=1 to N-1 do a[i]:= a[i+1]; a[N]:= 0; writeln('После сдвига влево: '); for var i:=1 to N do write(a[i],' '); writeln; end.

Сдвиг элементов вправо

const N = 10; var a: array [1..N] of integer; begin for var i:=1 to N do a[i]:= Random(100); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; for var i:=N downto 2 do a[i]:= a[i-1]; a[1]:= 0; writeln('После сдвига влево: '); for var i:=1 to N do write(a[i],' '); writeln; end.

Удаление элемента

const N = 10; var a: array [1..N] of integer; K: integer; begin for var i:=1 to N do a[i]:= Random(100); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; K:= Random(1,N); for var i:=K to N-1 do a[i]:= a[i+1]; writeln('После удаления элемента с индексом ',K,':'); for var i:=1 to N-1 do write(a[i],' '); writeln; end.

Вставка элемента

const N = 10; Elem = 666; var a: array [1..N+1] of integer; K: integer; begin for var i:=1 to N do a[i]:= Random(100); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; K:= Random(1,N); for var i:=N downto K do a[i+1]:= a[i]; a[K]:= 666; writeln('После вставки элемента ',Elem,' в позицию ',K,':'); for var i:=1 to N+1 do write(a[i],' '); writeln; end.

Подсчет количества элементов, удовлетворяющих условию

const N = 20; var a: array [1..N] of integer; K,Count: integer; begin for var i:=1 to N do a[i]:= Random(10); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; K:= Random(10); Count:= 0; for var i:=1 to N do if a[i] = K then Count += 1; writeln('Количество элементов, равных ',K,': ',Count); end.

Есть ли элемент, удовлетворяющий условию

const N = 10; var a: array [1..N] of integer; K: integer; IsFound: boolean; begin for var i:=1 to N do a[i]:= Random(15); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; K:= Random(15); IsFound:= False; for var i:=1 to N do if a[i] = K then begin IsFound:= True; break end; if IsFound then writeln('Элемент ',K,' найден') else writeln('Элемент ',K,' не найден') end.

Сортировка пузырьком

const N = 10; var a: array [1..N] of integer; begin for var i:=1 to N do a[i]:= Random(100); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; for var i:=n downto 2 do for var j:=1 to i-1 do if a[j+1]<a[j] then Swap(a[j+1],a[j]); writeln('После сортировки пузырьком: '); for var i:=1 to N do write(a[i],' '); writeln; end.

Сортировка выбором

const N = 10; var a: array [1..N] of integer; K: integer; IsFound: boolean; begin for var i:=1 to N do a[i]:= Random(100); writeln('Элементы массива a: '); for var i:=1 to N do write(a[i],' '); writeln; for var i:=1 to N-1 do begin var min:= a[i]; var ind:= i; for var j:=i+1 to N do if a[j]<min then begin min:= a[j]; ind:= j; end; a[ind]:= a[i]; a[i]:= min; end; writeln('После сортировки выбором: '); for var i:=1 to N do write(a[i],' '); writeln; end.

Массивы. Возможные ошибки

Попытка вывести массив не поэлементно, а целиком

const Sz = 100; var a: array [1..Sz] of integer; i: integer; begin read(a); // неверно: массив необходимо вводить поэлементно end.

Использование записи a[i] вне цикла

const Sz = 10; var a: array [1..Sz] of integer; i: integer; begin var N:= Sz; for i:=1 to N do a[i]:= Random(100); a[i]:= 666; // Ошибка: переменной i нельзя пользоваться вне цикла for end.

Выход за границы диапазона изменения индекса

const Sz = 10; var a: array [1..Sz] of integer; begin var N:= Sz; for var i:=1 to N+1 do a[i]:= Random(100); // При i=N+1 происходит ошибка: индекс вне границ массива end.

Затирание элементов при сдвиге

const Sz = 100; var a: array [1..Sz] of integer; begin var N:= 10; for var i:=1 to N do a[i]:= Random(100); for var i:=1 to N do write(a[i],' '); writeln; for var i:=1 to N-1 do // ошибка: алгоритм сдвига вправо надо начинать с конца a[i+1]:= a[i]; for var i:=1 to N do write(a[i],' '); end.

 

Матрицы. Тексты программ

Общая часть

Во всех задачах будем считать, что матрица описана следующим образом:

Const

SzM = 10;

SzN = 10;

 

type Matrix = array [1..SzM,1..SzN] of integer;

Кроме того, во всех задачах будем использовать следующие процедуры для заполнения и вывода:

procedure FillMatrixByRandom(var a: Matrix; m,n: integer); // Заполнение случайными

Begin

for var i:=1 to M do

for var j:=1 to N do

a[i,j]:= Random(10);

end;

 

procedure PrintMatrix(const a: Matrix; m,n: integer); // Вывод матрицы

Begin

for var i:=1 to M do

Begin

for var j:=1 to N do

write(a[i,j]:4);

writeln;

end;

end;

Данные участки кода следует писать в начале каждой программы, приводимой в этом пункте.

Заполнение матрицы случайными числами и вывод

var a: Matrix;

 

Begin

var m:= 4;

var n:= 5;

FillMatrixByRandom(a,m,n);

 

writeln('Элементы матрицы: ');

PrintMatrix(a,m,n);

end.

Перемена местами двух строк

var a: Matrix;

 

Begin

var m:= 5;

var n:= 9;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

var k1:= 2; // поменять местами строки с номерами k1 и k2

var k2:= 4;

for var j:=1 to n do

Swap(a[k1,j],a[k2,j]);

 

writeln('Преобразованная матрица: ');

PrintMatrix(a,m,n);

end.

Поиск минимумов в строках

Var

a: Matrix;

mins: array [1..SzN] of integer;

 

Begin

var m:= 5;

var n:= 9;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

for var i:=1 to m do

Begin

var min:= a[i,1];

for var j:=2 to n do

if a[i,j]<min then

min:= a[i,j];

mins[i]:= min;

end;

 

writeln('Минимумы в строках: ');

for var i:=1 to m do

write(mins[i]:4);

end.

Поиск максимумов в столбцах

Var

a: Matrix;

maxs: array [1..SzN] of integer;

 

Begin

var m:= 5;

var n:= 9;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

for var j:=1 to n do

Begin

var max:= a[1,j];

for var i:=2 to m do

if a[i,j]>max then

max:= a[i,j];

maxs[j]:= max;

end;

 

writeln('Максимумы в столбцах: ');

for var j:=1 to n do

write(maxs[j]:4);

end.

Поиск сумм в строках

Var

a: Matrix;

sums: array [1..SzM] of integer;

 

Begin

var m:= 4;

var n:= 5;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

for var i:=1 to m do

Begin

var sum:= 0;

for var j:=1 to n do

sum += a[i,j];

sums[i]:= sum;

end;

 

writeln('Суммы в строках: ');

for var i:=1 to m do

write(sums[i]:4);

end.

Поиск произведений в столбцах

Var

a: Matrix;

products: array [1..SzN] of integer;

 

Begin

var m:= 3;

var n:= 4;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

for var j:=1 to n do

Begin

var p:= 1;

for var i:=1 to m do

p *= a[i,j];

products[j]:= p;

end;

 

writeln('Произведения в столбцах: ');

for var j:=1 to n do

writeln(products[j]:4);

end.

Наличие нуля в матрице

Var

a: Matrix;

HasZero: boolean;

 

label 1;

 

Begin

var m:= 3;

var n:= 4;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

HasZero:= False;

for var i:=1 to m do

for var j:=1 to n do

if a[i,j]=0 then

Begin

HasZero:= True;

goto 1;

end;

1:

if HasZero then

writeln('В матрице есть нули')

else writeln('В матрице нулей нет')

end.

Сумма чисел на главной диагонали

Var

a: Matrix;

sum: integer;

 

Begin

var m:= 5;

var n:= m;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

sum:= 0;

for var i:=1 to m do

sum += a[i,i];

writeln('Сумма элементов главной диагонали: ',sum);

end.

Сумма чисел на побочной диагонали

Var

a: Matrix;

sum: integer;

 

Begin

var m:= 5;

var n:= m;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

sum:= 0;

for var i:=1 to m do

sum += a[i,m-i+1];

writeln('Сумма элементов побочной диагонали: ',sum);

end.

Заполнение нулями ниже главной диагонали

Var

a: Matrix;

sum: integer;

 

Begin

var m:= 5;

var n:= m;

FillMatrixByRandom(a,m,n);

 

writeln('Исходная матрица: ');

PrintMatrix(a,m,n);

 

for var i:=2 to m do

for var j:=m-i+2 to m do

a[i,j]:= 0;

 

writeln('Преобразованная матрица: ');

PrintMatrix(a,m,n);

end.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...