IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Матрицы, min и max.
nadia
сообщение 29.11.2006 17:44
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Очень нужно решить контрольную в универ по турбо паскалю. Я его учила 2 года назад, но почти ничего не помню. Помоги пожалуйста. Буду очень презнательна.
Вот задачка:
Задана матрица А[M/M] действительных чисел. Поменять местами максимальный и минимальный элементы главной диагонали. Вывести преобразованную матрицу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 29.11.2006 19:30
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


1. найти минимум и максимум, запомнить их индексы. точнее, запомнить одно число, т.к. элементы на главной диагонали имеют индексы вида [1,1] [2,2] и т.д.
2. поменять местами.
на каком этапе проблемы?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nadia
сообщение 29.11.2006 19:49
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Минимум и максимум вроде нашла, а вот как поменять их местами возникла проблемка! Подскажи пожалуйста что делать?? [quote name='мисс_граффити' date='29.11.2006 20:30' post='81201']
give_rose.gif Буду очень благодарна!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 29.11.2006 19:55
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


DopPerem:=a[mini,mini];
a[mini,mini]:=a[maxi,maxi];
a[maxi,maxi]:=DopPerem;


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nadia
сообщение 29.11.2006 21:48
Сообщение #5





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Пыталась найти минимальный и максимальный, вроде написала, но ничего не получается. Не могу собрать все в кучу. Матрица не вводиться. Пишет введите 'n' а дальше данные вводятся в столбик. И все.
Что мне делать??? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YnickYM
сообщение 29.11.2006 21:58
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


или можно без ввода доп. переменной:

a[max;max]:=a[max+min;max+min]
a[min;min]:=a[max-min;max-min]
a[max;max]:=a[max-min;max-min]

Цитата(nadia @ 29.11.2006 21:48) *

Пыталась найти минимальный и максимальный, вроде написала, но ничего не получается. Не могу собрать все в кучу. Матрица не вводиться. Пишет введите 'n' а дальше данные вводятся в столбик. И все.
Что мне делать??? unsure.gif


for i:=1 to M do
for j:=1 to M do
readln(a[i,j]);

Сообщение отредактировано: YnickYM - 29.11.2006 22:05


--------------------
Ignoscito saepe alteri, nunquam tibi.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nadia
сообщение 29.11.2006 22:29
Сообщение #7





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Написала вот такую программу:

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.


А вот как сделать так чтоб она правильно работала не могу понять??? Подскажите пожалуйста в чем ошибка и как правильно вывести НОВУЮ ПРЕОБРАЗОВАННУЮ МАТРИЦУ! И как сделать чтоб матрица имела вид матрицы а не одного длинного столбца. Помогите очень прошу!!!! Заранее большое спасибо!
give_rose.gif

Теги !!!

Сообщение отредактировано: volvo - 30.11.2006 11:45
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nadia
сообщение 29.11.2006 22:48
Сообщение #8





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


[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.
no1.gif

Теги !!!

Сообщение отредактировано: volvo - 30.11.2006 11:45
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nadia
сообщение 29.11.2006 22:57
Сообщение #9





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


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

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 29.11.2006 23:56
Сообщение #10


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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]

blink.gif
допустим, максимальный элемент на позиции 1,1
минимальный на 3,3
a[3,3]:=a[4,4];
a[1,1]:=a[-2,-2]
a[3,3]:=a[-2,-2]
YnickYM, что ты этим хотел сказать?
или max - это не индекс максимального, а он сам? тогда еще интереснее...

Сообщение отредактировано: мисс_граффити - 30.11.2006 0:00


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 30.11.2006 4:16
Сообщение #11


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Я причесал твою прогу, чтоб читалась нормально.
Убрал несколько begin/end'ов.
При нахождении минимума ты запоминала индексы, а при нахождении максимума - нет sad.gif. Я добавил.
В конце два очевидных оператора решают твою проблему.. smile.gif
Все добавления снабжены комментариями.
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% просьбы о помощи. Пиши краткое описание задачи. Успехов!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.11.2006 10:36
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


lapp, а ничего, что в соседней теме мы решаем ЭТУ же задачу, выложенную nadia?

2 мисс_граффити: извини, не заметил. Спасибо за наводку. Объединяю темы.
2 nadia: предупреждение!! angry.gif

Сообщение отредактировано: lapp - 30.11.2006 11:30


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.11.2006 11:43
Сообщение #13


Гость






Цитата(YnickYM @ 29.11.2006 20:58) *

или можно без ввода доп. переменной:

a[max;max]:=a[max+min;max+min]
a[min;min]:=a[max-min;max-min]
a[max;max]:=a[max-min;max-min]

А вылететь за границы матрицы не боишься? если max - min < 0, например?
 К началу страницы 
+ Ответить 
nadia
сообщение 30.11.2006 11:53
Сообщение #14





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Огромное Вам человеческое спасибо!!! give_rose.gif Благодаря Вам я сделала свою контрольную в универ. Классно когда есть умные люди, которые разбираются в программировании. И что я нашла ваш сайт!!! Я от всей души вам благодарна. Еще раз БОЛЬШОЕ СПАСИБО!!!!!!!!! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YnickYM
сообщение 30.11.2006 20:43
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Извиняюсь, чушь написал.

Вот мой вариант программы

Цитата

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 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;
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.


Сообщение отредактировано: YnickYM - 30.11.2006 22:06


--------------------
Ignoscito saepe alteri, nunquam tibi.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.11.2006 21:29
Сообщение #16


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


замечательная программка.
скажи мне честно, ты ее ПОТЕСТИРОВАТЬ не пробовал?
как думаешь, имеет ли смысл строчка:
 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
продолжить или хватит?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YnickYM
сообщение 30.11.2006 22:04
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(мисс_граффити @ 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];

пишем сценарий для мультфильма про Телепузиков? Это они все по два раза повторяют...

Пардон, опечатка. Имелось ввиду:
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 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;

Сразу при вводе выводить нельзя? Или тоже принципиально отделяешь ввод от вывода -чтобы не запутаться?
Исправлено.
Цитата

продолжить?

Если вас не затруднит


--------------------
Ignoscito saepe alteri, nunquam tibi.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.11.2006 22:45
Сообщение #18


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


так... вывод массива ты вообще убрал - ну правильно, пусть пользователь тренирует память. подумаешь, 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. Проверяйте программы перед тем, как разместить их на форуме!!!


З.Ы. На будущее - делай человеческие отступы. Невозможно ж читать код!

Сообщение отредактировано: мисс_граффити - 30.11.2006 22:46


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YnickYM
сообщение 30.11.2006 23:02
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата
так... вывод массива ты вообще убрал - ну правильно, пусть пользователь тренирует память. подумаешь, 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

Сообщение отредактировано: YnickYM - 30.11.2006 23:37


--------------------
Ignoscito saepe alteri, nunquam tibi.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 11:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"