03.02.2009, 14:02
общий
это ответ
Здравствуйте, Oblige!
Большое, конечно, задание, но вот что я напрограммировал.
По логике работать программа должна, но я не проверял (не на чем).
И еще ...
Я построил свою программу моследовательно, т.е. массив заполняется программой произвольно и все последующие действия производятся над уже измененном массивом. Изначально созданный массив не сохраняется.
второе дополнение:
При вводе значений с клавиатуры предполагается, что вы правильно вводите числа.
Закончить не успел, но все решаемо и достаточно не сложно.
Приложение:
program Rjcnz_to_Oblige;
const
size=10; {Размер массива}
type
mytype=real; {Тип данных, хранимых в массиве}
var
mas:array[1..size,1..size]of mytype; {Двумерный массив, который я решил сделать квадратным для всех заданий}
procedure change(res1,res2:mytype); {Процедура для смены двух значений местами}
var
tmp:mytype;
begin
tmp:=res1;
res1:=res2;
res2:=tmp;
end;
procedure print(lenX,lenY:integer{Размеры массива}); {Выводит на экран массив}
var
i,j:integer;
begin
for i:=1 to lenY do
begin
for j:=1 to lenX do
write(mas[i,j]:4);
writeln;
end;
writeln('Нажмите Enter');
readln;
writeln;
end;
var {Задаем локальные переменные}
i,j:integer;
change1, change2,k,s:integer;
begin {Начало основной программы}
randomize;
{Заполняем массив произвольными значениями}
for i:=1 to size do
for j:=1 to size do
mas[i,j]:=random(1000);
{ЗАДАНИЕ
Дан двухмерный массив. Составить программу, которая меняет местами
• две любые строки;
• два любых столбца.}
writeln('Введите номера перемещаемых строк и столбцов через ENTER');
readln(change1);
readln(change2);
writeln; {Просто для наглядности}
{Предполагается, что при вводе пользователь не ошибается}
writeln('Исходный массив');
print(size,size); {Выводим на экран исходный массив (он задан до процедуры, поэтому передавать его имя в процедуру не надо)}
for i:=1 to size do
change(mas[change1,i],mas[change2,i]); {Последовательно меняем значения в строках местами}
writeln('Массив после смены заданных строк');
print(size,size); {Выводим на экран измененный массив (он под тем же именем, старый не сохранился)}
for i:=1 to size do
change(mas[i,change1],mas[i,change2]); {Последовательно меняем значения в столбцах местами}
writeln('Массив после смены заданных столбцов');
print(size,size); {Выводим на экран измененный массив}
{ЗАДАНИЕ
Дан двухмерный массив размерностью n*n. Составить программу, которая меняет местами все элементы,
• симметричные относительно главной диагонали
• симметричные относительно побочной диагонали.}
for i:=1 to size-1 do {Перебираем строки до предпоследней для смены элементов относительно главной диагонали}
for j:=i+1 to size do {Перебираем все элементы в строке ...}
change(mas[i,j],mas[j,i]); {...и меняем их местами с элементами под главной диагональю}
writeln('Массив после смены элементов относительно главной диагонали');
print(size,size); {Выводим на экран измененный массив}
for i:=1 to size-1 do {Перебираем строки до предпоследней для смены элементов относительно главной диагонали}
for j:=i+1 to size do {Перебираем все элементы в строке ...}
change(mas[size-i+1,size-j+1],mas[size-j+1,size-i+1]); {...и меняем их местами с элементами под побочной диагональю}
writeln('Массив после смены элементов относительно побочной диагонали');
print(size,size); {Выводим на экран измененный массив}
{PS. При решении задачи использовался измененный начальный массив}
{ЗАДАНИЕ
Дан двумерный массив. Удалить из него строку с номером к.
Дан двумерный массив. Удалить из него столбец с номером s.}
writeln('Введите номер строки');
readln(k);
{Последовательно перемещаем строки вверх от удаляемой строки}
if k<size then {Если вы выбрали не последнюю строку}
for i:=k to size-1 do
for j:=1 to size do
mas[i,j]:=mas[i+1,j];
len:=size-1; {Запоминаем, что число строк уменьшилось на один. Про последнюю строку мы просто "забываем" данным действием}
writeln('Массив после удаления строки');
print(size,len);
writeln('Введите номер строки');
readln(s);
{Последовательно перемещаем столбцы вверх от удаляемой строки}
if s<size then {Если вы выбрали не последнюю строку}
for i:=s to size-1 do
for j:=1 to len do
mas[j,i+1]:=mas[j,i+1];
{Теперь, действие len:=size-1; означает, что наш массив уменьшился на 1 во всех размерах}
writeln('Массив после удаления столбца');
print(len,len);
{ЗАДАНИЕ
Вставить строку из единиц после строки с указанным номером.}
writeln('Введите номер строки, после которой будут вставлена строка с единичными значениями');
readln(s);
{Перемещаем все строки наже заданной "вниз". Начинать необходимо снизу}
for i:=len downto s+1 do
for j:=1 to len do
mas[i+1,j]:=mas[i,j];
{Заполняем строку следующую за введенной единицами}
for i:=1 to len do
mas[s+1,i]:=1;
writeln('Массив после вставки строки');
print(len,size);
{ЗАДАНИЕ
Дан двумерный массив из четного числа строк и столбцов
а) строки верхней половины поменять местами со строками нижней половины
б) столбцы левой половины поменять местами со столбцами правой.
в) Поменять местами его строки следующим образом: первую строку с последней, вторую – с предпоследней и так далее.}
{поскольку изначально создавался двумерный массив с четным колличеством строк и столбцов, то мы снова им воспользуемся, но заполним его другими значениями}
{Заполняем массив произвольными значениями}
for i:=1 to size do
for j:=1 to size do
mas[i,j]:=random(1000);
writeln('Новый массив');
print(size,size);
{ЗАДАНИЕ
а) строки верхней половины поменять местами со строками нижней половины}
for i:=1 to (size div 2) do {рассматриваем строки верхней половины ...}
for j:=1 to size do
change(mas[i,j],mas[i+(size div 2) , j]); {... и меняем строки}
writeln('Массив после смены строк относительно середины');
print(size,size);
{ЗАДАНИЕ
б) столбцы левой половины поменять местами со столбцами правой.}
for i:=1 to size do {рассматриваем столбцы левой половины ...}
for j:=1 to (size div 2) do
change(mas[i,j],mas[i , j+(size div 2)]); {... и меняем столбцы}
writeln('Массив после смены столбцов относительно середины');
print(size,size);
{ЗАДАНИЕ
в) Поменять местами его строки следующим образом: первую строку с последней, вторую – с предпоследней и так далее.}
for i:=1 to (size div 2) do {рассматриваем строки верхней половины ...}
for j:=1 to size do
change(mas[i,j],mas[size-i+1 , j]); {... и меняем строки}
writeln('Массив после смены строк относительно середины');
print(size,size);
end. {Конец основной программы}
Продолжение следует