Очень нужно решить контрольную в универ по турбо паскалю. Я его учила 2 года назад, но почти ничего не помню. Помоги пожалуйста. Буду очень презнательна.
Вот задачка:
Задана матрица А[M/M] действительных чисел. Поменять местами максимальный и минимальный элементы главной диагонали. Вывести преобразованную матрицу.
1. найти минимум и максимум, запомнить их индексы. точнее, запомнить одно число, т.к. элементы на главной диагонали имеют индексы вида [1,1] [2,2] и т.д.
2. поменять местами.
на каком этапе проблемы?
Минимум и максимум вроде нашла, а вот как поменять их местами возникла проблемка! Подскажи пожалуйста что делать?? [quote name='мисс_граффити' date='29.11.2006 20:30' post='81201']
Буду очень благодарна!
DopPerem:=a[mini,mini];
a[mini,mini]:=a[maxi,maxi];
a[maxi,maxi]:=DopPerem;
Пыталась найти минимальный и максимальный, вроде написала, но ничего не получается. Не могу собрать все в кучу. Матрица не вводиться. Пишет введите 'n' а дальше данные вводятся в столбик. И все.
Что мне делать???
или можно без ввода доп. переменной:
a[max;max]:=a[max+min;max+min]
a[min;min]:=a[max-min;max-min]
a[max;max]:=a[max-min;max-min]
Написала вот такую программу:
Program xxx;
Uses crt;
Var a:array[1..10,1..10] of integer;
i,j,min,imin,jmin,max,n,m: integer;
BEGIN
ClrScr;
Write ('m=');
ReadLn (m);
Write ('n=');
ReadLn (n);
for i:= 1 to m do
for j:= 1 to n do
Read (a[i,j]);
begin
max:= a[1,1];
for i:= 1 to m do
for j:= 1 to n do
if (i=j) and (a[i,j]>max) then
max:= a[i,j];
end;
begin
min:=a[1,1]; imin:=1; jmin:=1;
for i:= 1 to m do
for j:= 1 to n do
if (i=j) and (a[i,j]<min) then
begin
min:=a[i,j];
imin:= i;
jmin:= j;
end;
end;
WriteLn ('max', max);
WriteLn ('min', min);
End.
[quote name='мисс_граффити' date='29.11.2006 20:30' post='81201']
Теперь коечто изменила и получилось, что минимальный и максимальный элементы находятся правильно, а вот как поменять их местами - с этим большущая проблемка. Помогите пожалуйста, скажите где проблемка.
Program xxx;
Uses crt;
Var a:array[1..10,1..10] of integer;
i,j,min,imin,jmin,max,n: integer;
BEGIN
ClrScr;
Write ('n=');
ReadLn (n);
for i:= 1 to n do
for j:= 1 to n do
Read (a[i,j]);
begin
max:= a[1,1];
for i:= 1 to n do
for j:= 1 to n do
if (i=j) and (a[i,j]>max) then
max:= a[i,j];
end;
begin
min:=a[1,1]; imin:=1; jmin:=1;
for i:= 1 to n do
for j:= 1 to n do
if (i=j) and (a[i,j]<min) then
begin
min:=a[i,j];
imin:= i;
jmin:= j;
end;
end;
WriteLn ('max', max);
WriteLn ('min', min);
End.
Program xxx;
Uses crt;
Var a:array[1..10,1..10] of integer;
i,j,min,imin,jmin,max,n: integer;
BEGIN
ClrScr;
Write ('n=');
ReadLn (n);
for i:= 1 to n do
for j:= 1 to n do
Read (a[i,j]);
begin
max:= a[1,1];
for i:= 1 to n do
for j:= 1 to n do
if (i=j) and (a[i,j]>max) then
max:= a[i,j];
end;
begin
min:=a[1,1]; imin:=1; jmin:=1;
for i:= 1 to n do
for j:= 1 to n do
if (i=j) and (a[i,j]<min) then
begin
min:=a[i,j];
imin:= i;
jmin:= j;
end;
end;
WriteLn ('max', max);
WriteLn ('min', min);
End.
М | nadia, при вставлении программных текстов, пожалуйста, используй теги! Видишь над окном ввода окошко выбора со словом CODE? Выдели свою программу блоком, ткни туда и выбери, что надо. Lapp |
nadia, во-первых, правила форума к тебе тоже относятся.
Зачем создавать новую тему?
И при размещении программ пользуйся тэгами - невозможно же читать!
как менять местами элементы - я, по-моему, вполне четко написала. что непонятно?
a[max;max]:=a[max+min;max+min]
a[min;min]:=a[max-min;max-min]
a[max;max]:=a[max-min;max-min]
Я причесал твою прогу, чтоб читалась нормально.
Убрал несколько begin/end'ов.
При нахождении минимума ты запоминала индексы, а при нахождении максимума - нет . Я добавил.
В конце два очевидных оператора решают твою проблему..
Все добавления снабжены комментариями.
Uses
crt;
Var
a:array[1..10,1..10] of integer;
i,j,min,imin,jmin,max,imax,jmax,n: integer; {imax and jmax added}
BEGIN
ClrScr;
Write ('n=');
ReadLn (n);
for i:=1 to n do for j:=1 to n do Read(a[i,j]);
max:=a[1,1]; imax:=1; jmax:=1; {2 statements added}
for i:=1 to n do for j:=1 to n do if (i=j)and(a[i,j]>max) then begin
max:=a[i,j];
imax:=i; {Added}
jmax:=j; {Added}
end;
min:=a[1,1]; imin:=1; jmin:=1;
for i:=1 to n do for j:=1 to n do if (i=j)and(a[i,j]<min) then begin
min:=a[i,j];
imin:=i;
jmin:=j;
end;
WriteLn ('max', max);
WriteLn ('min', min);
{Below the min and max interchange goes}
a[imin,jmin]:=max;
a[imax,jmax]:=min
End.
lapp, а ничего, что в соседней теме мы решаем ЭТУ же задачу, выложенную nadia?
2 мисс_граффити: извини, не заметил. Спасибо за наводку. Объединяю темы.
2 nadia: предупреждение!!
Огромное Вам человеческое спасибо!!! Благодаря Вам я сделала свою контрольную в универ. Классно когда есть умные люди, которые разбираются в программировании. И что я нашла ваш сайт!!! Я от всей души вам благодарна. Еще раз БОЛЬШОЕ СПАСИБО!!!!!!!!!
Извиняюсь, чушь написал.
Вот мой вариант программы
замечательная программка.
скажи мне честно, ты ее ПОТЕСТИРОВАТЬ не пробовал?
как думаешь, имеет ли смысл строчка:
if a[i,i]<a[max,max] then min:=i;
a[max,max]:=a[min;min];
a[max,max]:=a[min,min];
for i:=1 to n do for j:=1 to n do Read(a[i,j]);
for i:=1 to n do //вывод заданной матрицы
for j:=1 to n do
begin
write(a[i,j],' ');
if j=n then writeln;
end;
i:=a[min,min];
if a[i,i]<a[max,max] then min:=i;
a[max,max]:=a[min;min];
a[max,max]:=a[min,min];
for i:=1 to n do for j:=1 to n do Read(a[i,j]);
for i:=1 to n do //вывод заданной матрицы
for j:=1 to n do
begin
write(a[i,j],' ');
if j=n then writeln;
end;
так... вывод массива ты вообще убрал - ну правильно, пусть пользователь тренирует память. подумаешь, 100 чисел запомнить.
зачем 4 цикла:
max:=1;
for i:=1 to n do for j:=1 to n do if a[i,i]>a[max,max] then max:=i;
min:=1;
for i:=1 to n do for j:=1 to n do if a[i,i]<a[min,min] then min:=i;