Консультация № 159325
01.02.2009, 13:41
0.00 руб.
0 1 1
Госопда эксперты !! Очень нужна ваша помощь
Дан двухмерный массив. Составить программу, которая меняет местами
• две любые строки;
• два любых столбца.
Дан двухмерный массив размерностью n*n. Составить программу, которая меняет местами все элементы,
• симметричные относительно главной диагонали
• симметричные относительно побочной диагонали.
Дан двумерный массив. Удалить из него строку с номером к.
Дан двумерный массив. Удалить из него столбец с номером s.
Удалить все строки, содержащие максимальный элемент массива
Вставить строку из единиц после строки с указанным номером.
Дан двумерный массив из четного числа строк и столбцов
а) строки верхней половины поменять местами со строками нижней половины
б) столбцы левой половины поменять местами со столбцами правой.
Дан двумерный массив из четного числа строк. Поменять местами его строки следующим образом: первую строку с последней, вторую – с предпоследней и так далее.
В двумерном массиве хранятся результаты (время в минутах), показанные каждым из 12 автогонщиков на каждом из 10 этапов соревнований «Формула-1». После 10 этапа участник с порядковым номером 4 выбыл из соревнований. Изменить массив так, чтобы в нем не было результатов бывшего гонщика.
Дан двумерный массив. Удалить из него все строки с n по m.

Обсуждение

Неизвестный
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. {Конец основной программы}

Продолжение следует
Форма ответа