Консультация № 108318
06.11.2007, 21:22
0.00 руб.
0 1 1
Здравствуйте, помогите пожайлуста с решением задачки на языке Pascal:
тема "Двумерные массивы"
Задание 1:
Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно главной диагонали.

Задание 2:
Различные числа. Задан числовой массив A[1:m]. Сосчитать и напечатать, сколько различных чисел в этом массиве. Например в массиве 5.7.5 различных чисел два
(5 и 7).

Обсуждение

Неизвестный
07.11.2007, 03:10
общий
это ответ
Здравствуйте, Xpoiuy!
Вот решение ваших задач, для первой - два варианта, первое - внутри самой матрицы, второе - транспонирование в другую матрицу.

Program T108318_1; {Инверсия матрицы в ней самой}
const
n=10; {Максимальная размерность матрицы}
type
TMatrix=array [1..n,1..n] of Word; {Тип матицы}
var
nMax:byte; {Текущая размерность}
A:TMatrix; {Матрица}
Procedure FillMatr(var A:TMatrix;nmax:byte); {Заполнение матрицы}
var
i,j:byte; {Индексы строки и столбца}
begin
Randomize; {Инициализация генератора случайных чисел}
for i:=1 to nMax do {Начало заполнение}
for j:=1 to nMax do
A[i,j]:=Random(65535); {65535 - максимальное значение типа Word}
end; {Следовательно, диапазон значений [0;65534]}
Procedure InvMatr(var A:TMatrix;nmax:byte); {Инверсия матрицы}
var
i,j:byte; {Счетчики}
T:Word; {Временная переменная}
begin
for i:=2 to nMax do {Начало цикла, для инверсии не нужно трогать диагональ,}
for j:=1 to i-1 do {и достаточно части матрицы под главной диагональю}
begin
T:=A[i,j]; {Обмен значениями}
A[i,j]:=A[j,i];
A[j,i]:=T;
end;
end;
Procedure OutMatr(var A:TMatrix;nMax:byte); {Вывод матрицы на экран}
var
i,j:byte; {Счетчики}
begin
for i:=1 to nMax do {Начало цикла}
begin
for j:=1 to nMax do
write(A[i,j],#9); {Вывод элемента, #9 - символ табуляции}
writeln; {Строка закончилась - переход на следующую}
end;
end;
begin
write(‘nMax=‘); {Ввод реальной максимальной размерности}
readln(nMax);
FillMatr(A,nMax); {Заполнение матрицы}
writeln(‘A:‘);
OutMatr(A,nMax); {Вывод исходной матрицы}
InvMatr(A,nMax); {Инверсия матрицы}
writeln(‘A‘‘:‘);
OutMatr(A,nMax); {Вывод результата}
readln; {Ожидание нажатия ENTER}
end.

-------------------------------------------------------

Program T108318_1_; {Инверсия матрицы в другую матрицу}
const
n=10; {Максимальная размерность матрицы}
type
TMatrix=array [1..n,1..n] of Word; {Тип матицы}
var
nMax:byte; {Текущая размерность}
A,B:TMatrix; {Матрица}
Procedure FillMatr(var A:TMatrix;nmax:byte); {Заполнение матрицы}
var
i,j:byte; {Индексы строки и столбца}
begin
Randomize; {Инициализация генератора случайных чисел}
for i:=1 to nMax do {Начало заполнение}
for j:=1 to nMax do
A[i,j]:=Random(65535); {65535 - максимальное значение типа Word}
end; {Следовательно, диапазон значений [0;65534]}
Procedure InvMatr(var A:TMatrix;nmax:byte); {Инверсия матрицы}
var
i,j:byte; {Счетчики}
T:Word; {Временная переменная}
begin
for i:=2 to nMax do {Начало цикла, для инверсии не нужно трогать диагональ,}
for j:=1 to i-1 do {и достаточно части матрицы под главной диагональю}
begin
T:=A[i,j]; {Обмен значениями}
A[i,j]:=A[j,i];
A[j,i]:=T;
end;
end;
Procedure OutMatr(var A:TMatrix;nMax:byte); {Вывод матрицы на экран}
var
i,j:byte; {Счетчики}
begin
for i:=1 to nMax do {Начало цикла}
begin
for j:=1 to nMax do
write(A[i,j],#9); {Вывод элемента, #9 - символ табуляции}
writeln; {Строка закончилась - переход на следующую}
end;
end;
begin
write(‘nMax=‘); {Ввод реальной максимальной размерности}
readln(nMax);
FillMatr(A,nMax); {Заполнение матрицы}
writeln(‘A:‘);
OutMatr(A,nMax); {Вывод исходной матрицы}
B:=A;
InvMatr(B,nMax); {Инверсия матрицы}
writeln(‘B=A‘‘:‘);
OutMatr(B,nMax); {Вывод результата}
readln; {Ожидание нажатия ENTER}
end.

------------------------------------------------------

Program T108318_2; {Подсчет уникальных значений}
const
m=20; {Максимальное количество элементов в массиве}
type
TArray=array [1..m] of byte; {Описание массива}
TMask=array [1..m] of boolean; {Маска для определения совпадений}
var
A:TArray; {Массив}
i,mMax,CountUniq:byte; {Сччетчик для ввода, реальная размерность, результат}
Function CalcUniq(var A:TArray;mMax:byte):byte;{Подсчет уникальных}
var
Mask:TMask; {Маска}
i,j:byte; {Счетчики}
Count:byte; {Возвращаемый результат}
begin
for i:=1 to mMax do {Инициализация маски - все уникальные}
Mask[i]:=True;
Count:=0; {Инициализация счетчика}
for i:=1 to mMax do {Начало перебора}
if Mask[i] then {Число еще не встречалось???}
begin
Mask[i]:=False; {Снимаем флаг "уникальности"}
inc(Count); {Увеличиваем счетчик}
for j:=i+1 to mMax do {Смотрим подобные}
if A[i]=A[j] then {У подобных тоже сбрасываем флаги}
Mask[j]:=False;
end;
CalcUniq:=Count; {Возврат значения}
end;
begin
write(‘mMax=‘); {Запрос и ввод реального размера вектора}
readln(mMax);
for i:=1 to mMax do {Ввод значения вектора}
begin
write(‘A[‘,i,‘]=‘);
readln(A[i]);
end;
CountUniq:=CalcUniq(A,mMax); {Подсчет уникальных значений}
writeln(‘Uniq=‘,CountUniq); {Вывод результата}
readln; {Ожидание реакции пользователя}
end.
Павел Форсман.
Форма ответа