Очень нужно решить контрольную в универ по турбо паскалю. Я его учила 2 года назад, но почти ничего не помню. Помоги пожалуйста. Буду очень презнательна. Вот задачка: Задана матрица А[M/M] действительных чисел. Поменять местами максимальный и минимальный элементы главной диагонали. Вывести преобразованную матрицу.
мисс_граффити
29.11.2006 23:30
1. найти минимум и максимум, запомнить их индексы. точнее, запомнить одно число, т.к. элементы на главной диагонали имеют индексы вида [1,1] [2,2] и т.д. 2. поменять местами. на каком этапе проблемы?
nadia
29.11.2006 23:49
Минимум и максимум вроде нашла, а вот как поменять их местами возникла проблемка! Подскажи пожалуйста что делать?? [quote name='мисс_граффити' date='29.11.2006 20:30' post='81201'] Буду очень благодарна!
Пыталась найти минимальный и максимальный, вроде написала, но ничего не получается. Не могу собрать все в кучу. Матрица не вводиться. Пишет введите 'n' а дальше данные вводятся в столбик. И все. Что мне делать???
Пыталась найти минимальный и максимальный, вроде написала, но ничего не получается. Не могу собрать все в кучу. Матрица не вводиться. Пишет введите 'n' а дальше данные вводятся в столбик. И все. Что мне делать???
for i:=1 to M do for j:=1 to M do readln(a[i,j]);
nadia
30.11.2006 2:29
Написала вот такую программу:
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.
А вот как сделать так чтоб она правильно работала не могу понять??? Подскажите пожалуйста в чем ошибка и как правильно вывести НОВУЮ ПРЕОБРАЗОВАННУЮ МАТРИЦУ! И как сделать чтоб матрица имела вид матрицы а не одного длинного столбца. Помогите очень прошу!!!! Заранее большое спасибо!
Теги !!!
nadia
30.11.2006 2:48
[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.
Теги !!!
nadia
30.11.2006 2:57
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
мисс_граффити
30.11.2006 3:56
nadia, во-первых, правила форума к тебе тоже относятся. Зачем создавать новую тему? И при размещении программ пользуйся тэгами - невозможно же читать! как менять местами элементы - я, по-моему, вполне четко написала. что непонятно?
допустим, максимальный элемент на позиции 1,1 минимальный на 3,3 a[3,3]:=a[4,4]; a[1,1]:=a[-2,-2] a[3,3]:=a[-2,-2] YnickYM, что ты этим хотел сказать? или max - это не индекс максимального, а он сам? тогда еще интереснее...
Lapp
30.11.2006 8:16
Я причесал твою прогу, чтоб читалась нормально. Убрал несколько 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.
PS В названии темы, пожалуйста, не пиши просьбы помочь - здесь 99.9% просьбы о помощи. Пиши краткое описание задачи. Успехов!
мисс_граффити
30.11.2006 14:36
lapp, а ничего, что в соседней теме мы решаем ЭТУ же задачу, выложенную nadia?
2 мисс_граффити: извини, не заметил. Спасибо за наводку. Объединяю темы. 2 nadia: предупреждение!!
А вылететь за границы матрицы не боишься? если max - min < 0, например?
nadia
30.11.2006 15:53
Огромное Вам человеческое спасибо!!! Благодаря Вам я сделала свою контрольную в универ. Классно когда есть умные люди, которые разбираются в программировании. И что я нашла ваш сайт!!! Я от всей души вам благодарна. Еще раз БОЛЬШОЕ СПАСИБО!!!!!!!!!
YnickYM
1.12.2006 0:43
Извиняюсь, чушь написал.
Вот мой вариант программы
Цитата
Uses crt;
Var a:array[1..10,1..10] of integer; i,j,min,max,n: integer; BEGIN ClrScr; Write ('n='); ReadLn (n); for i:=1 to n do for j:=1 to n do begin Read(a[i,j]); if j=n then writeln; end; max:=1; for i:=1 to n dofor j:=1 to n do if a[i,i]>a[max,max] then max:=i; min:=1; for i:=1 to n dofor j:=1 to n do if a[i,i]<a[min,min] then min:=i; i:=a[min,min]; a[min,min]:=a[max,max]; a[max,max]:=i; for i:=1 to n do //вывод преобразованной матрицы for j:=1 to n do begin write(a[i,j],' '); if j=n then writeln; end; readln; End.
мисс_граффити
1.12.2006 1:29
замечательная программка. скажи мне честно, ты ее ПОТЕСТИРОВАТЬ не пробовал? как думаешь, имеет ли смысл строчка:
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];
и зачем ты это делаешь? потом же все равно затираешь значение, хранящееся в i продолжить или хватит?
YnickYM
1.12.2006 2:04
Цитата(мисс_граффити @ 30.11.2006 21:29)
замечательная программка. скажи мне честно, ты ее ПОТЕСТИРОВАТЬ не пробовал?
Честно говоря, нет.
Цитата
как думаешь, имеет ли смысл строчка:
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;
Сразу при вводе выводить нельзя? Или тоже принципиально отделяешь ввод от вывода -чтобы не запутаться?
Исправлено.
Цитата
продолжить?
Если вас не затруднит
мисс_граффити
1.12.2006 2:45
так... вывод массива ты вообще убрал - ну правильно, пусть пользователь тренирует память. подумаешь, 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;
, когда достаточно 1? и зачем начинать с 1, если можно с 2?
в общем, Правила:
Цитата
7. Проверяйте программы перед тем, как разместить их на форуме!!!
З.Ы. На будущее - делай человеческие отступы. Невозможно ж читать код!
YnickYM
1.12.2006 3:02
Цитата
так... вывод массива ты вообще убрал - ну правильно, пусть пользователь тренирует память. подумаешь, 100 чисел запомнить.
for i:=1 to n do for j:=1 to n do begin Read(a[i,j]); if j=n then writeln; end;
какой вывод?
del
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.