![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
mashka-promakashka |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Мария Репутация: ![]() ![]() ![]() |
Вот как звучит задача:
Ввести числовую прямоугольную матрицу размером M×N (M и N заданы). Определить элементы, которые, являясь максимальными в столбцах, больше всех своих соседей слева в строке и меньше всех своих соседей справа в строке, указав значения найденных элементов и их индексы, или же сообщить, что таких элементов нет. Крайние столбцы не рассматривать. Начала делать, но что то не работает толком...помогите пожалуйста
|
Vinchkovsky |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: ![]() ![]() ![]() |
Ошибок очень много.
Найдите опечатки, во-первых. В процедуры передавайте значение параметров-переменных. Напишите единую процедуру, ведь оба условия должны выполняться одновремено, так будет проще. Проходьте столбцы, находите максимум, учтите, что таких элементов может быть несколько, и тут же для них проверяйте второе условие и выводите результат. Если непонятно, завтра напишу процедуру. |
Vinchkovsky |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: ![]() ![]() ![]() |
Если брать задание "в лоб", то выходит как-то так:
procedure Sort(n,m:integer; A:Matrix); {К-ство строк, столбцов и матрица - параметры процедуры} Тип Matrix вводится так: type Matrix=array [1..50,1..50] of integer; или так,если m,n обьявлены как константы: type Matrix=array [1..n,1..m] of integer; Тут все зависит от вас: хотите ли вы задавать m,n при выполнении программы или нет. Фраза "(M и N заданы)",по-моему, говорит о верности второго варианта ![]() В основной части создавайте матрицу (генерируя или вводя) и вызывайте процедуру ![]() |
mashka-promakashka |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Мария Репутация: ![]() ![]() ![]() |
Спасибо огромное Vinchkovsky
![]() |
mashka-promakashka |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Мария Репутация: ![]() ![]() ![]() |
Код Program Matrix1; const stroka=''; stolb=''; type Matrix=array[1..50,1..50] of integer; var A:Matrix; i,j,n,m:integer; procedure Sort(n,m:integer; A:Matrix); var i,k,j,Max:integer; SecondTerm,Exist:boolean; begin Exist:=false; for i:=2 to m-1 do begin Max:=A[i,1]; for k:=2 to n do if A[i,k]>Max then Max:=A[i,k]; for k:=1 to n do if A[i,k]=Max then begin SecondTerm:=true; for j:=1 to i-1 do if A[j,k]>=A[i,k] then SecondTerm:=false; for j:=i+1 to n do if A[j,k]<=A[i,k] then SecondTerm:=false; if SecondTerm then begin writeln('st=',i,' r=',k,' ',Max); Exist:=true; end; end; end; if not Exist then writeLn('No elements of this kind'); end; begin writeln(stroka,'Vvedite kol-vo strok matrici'); readln(m); writeln(stolb,'Vvedite kol-vo stolbcov matrici'); readln(n); writeln; writeln('Vvedite ',m*n,' elementa massiva:'); for i:=1 to m do for j:=1 to n do read(A[i,j]); writeln('Ishodnaya matrica'); for i:=1 to m do begin for j:=1 to n do write(A[i,j],' '); writeln; end; Sort(n,m,A); end. Сделала вроде все как вы сказали, но не работает ![]() |
Vinchkovsky |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: ![]() ![]() ![]() |
Ой, я отвечал, но ответ не появился
![]() Если кратко, то главные замечания: вы запутались с индексами (у меня столбцы на первом месте, а не на втором), добавил строку в конце, чтобы вы могли увидеть результат, а также убрал мусор с константами. У меня работает: Program Matrix1; на: 1 2 5 6 1 2 3 4 Извиняйте за отсуствие форматирования - а оно нужно! - не сохранилось. Удачи ![]() |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата Если кратко, то главные замечания: вы запутались с индексами (у меня столбцы на первом месте, а не на втором) Кто-кто запутался с индексами? Может, ты сам?Цитата writeln('Vvedite kol-vo strok matrici'); 1 2 5 6 Цитата for i := 1 to 2 do i = 1; j = 1 .. 4 => A[1, 1], A[2, 1], A[3, 1], A[4, 1] i = 2; j = 1 .. 4 => A[1, 2], A[2, 2], A[3, 2], A[4, 2] Сорри, но по определению, у матрицы в Паскале ПЕРВЫМ индексом указывается номер строки, а вторым - номер столбца (это не зависит от твоего желания, так устроен язык программирования, и с этим придется мириться, это - НЕ Фортран, это - Паскаль, а за нарушение этого правила без ОЧЕНЬ веских причин у нас программиста просто увольняют без предупреждений, поскольку прежде всего код должен быть понятен интуитивно), то есть ввел ты матрицу не так, как я написал выше, а вот так: 1 1 |
Vinchkovsky |
![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: ![]() ![]() ![]() |
Под "запутался" имел ввиду то, что автор темы не обратил внимание, где у меня строки, а где столбцы в процедуре.
По моей логике, если бы автор не "запутался" и внимательно прочитал обьяснение, то переделать процедуру было бы легко, согласны? А вот где я запутался - не понял. Программа работает корректно, да и логика есть - я обьяснил, а еще я отчетливо понимаю каждый ее шаг ![]() Цитата Сорри, но по определению, у матрицы в Паскале ПЕРВЫМ указывается номер строки, а вторым - номер столбца (это не зависит от твоего желания, так устроен язык программирования, и с этим придется мириться, это - НЕ Фортран, это - Паскаль), то есть ввел ты матрицу не так, как я написал выше, а вот так: По определению - это как? В языке программирование Паскаль есть определение "матрицы"? Разве программист, моделируя матрицу с помощью массивов, не может сам выбирать, что и как будет работать? Если я создам программу, работающую "не по определению" (если такое существует), но имеющую верный алгоритм, я сделаю ошибку? А не все-равно ли, как размещать индексы, если все работает верно? Или вам не нравится ввод матрицы "построчно"? ![]() ![]() Сообщение отредактировано: Vinchkovsky - 8.03.2009 1:55 |
Vinchkovsky |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: ![]() ![]() ![]() |
Об удобности задавать индексы так, как написали вы, трудно не согласиться, если вспомнить математику, но, по-моему, было достаточно дать замечание (за FAQ):
Цитата Принято сначала указывать индекс строки, а затем индекс столбца А гже я запутался ![]() ![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата В языке программирование Паскаль есть определение "матрицы"? Матрица - это двумерный массив. Так? Какой из двух индексов начинает изменяться первым при продвижении по матрице построчно? Первый или второй?Цитата Или вам не нравится ввод матрицы "построчно"? По-моему, такой ввод естественнее Я уже объяснил выше, что хотя я ввожу матрицу построчно, в память данные почему-то заносятся по столбцам. Я этого не просил, кстати.Цитата А не все-равно ли, как размещать индексы, если все работает верно? Ну, это смотря какую цель ты преследуешь... Если написать на одни раз, а потом вообще забыть про программирование, как страшный сон - то пиши хоть с Label-ами и Goto, какая разница? Ну, помучаешься в 3 раза больше при отладке, отладишь однажды, больше к этому возвращаться не будешь...А вот если тебе хочется научиться программировать - то тут уж будь добр не мешать индексы. Во-первых, в матрице обработка строки производится быстрее, чем обработка столбца (вот именно потому, что матрица хранится построчно это и происходит), а следовательно, на больших матрицах у тебя будет провал в быстродействии (а привыкнув работать "шиворот-навыворот" с маленькими матрицами ты БУДЕШЬ так же работать и с большими), которого можно избежать просто работая с индексами НОРМАЛЬНО. Во-вторых, человек, знакомый с любым языком-наследником Алгола, глядя на запись A[1, 2] понимает, что это должна быть первая строка, второй столбец, а тут оказывается у тебя первый столбец, вторая строка - то есть, ему надо лазить по твоей программе, и пытаться понять, что к чему и где, чтобы разобраться в алгоритме работы. Смысл в этом есть? Что дает тебе такой "переворот"? Что, программа заработает быстрее? Нет, она будет работать медленнее. Тогда зачем? Но это все ни к чему не приведет... Ты все равно будешь спорить, делать по-своему, будешь обжигаться, тебя будут наказывать, но ты будешь продолжать, потому что думаешь, что самый умный и находчивый, "вон как выделился из толпы, все работают построчно, а я - по столбцам". Ну что ж, кто-то выделяется, бреясь налысо, кто-то - носит "гребень" на голове, ты нашел свой способ выделиться... Только вот не надо учить ему остальных. Ты хочешь - ты выделяйся. Всех других оставь в покое. Пускай они работают так, как принято, а не наоборот. |
Vinchkovsky |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: ![]() ![]() ![]() |
Спасибо за обьяснение
![]() Цитата Но это все ни к чему не приведет... Ты все равно будешь спорить, делать по-своему, будешь обжигаться, тебя будут наказывать, но ты будешь продолжать, потому что думаешь, что самый умный и находчивый, "вон как выделился из толпы, все работают построчно, а я - по столбцам". Ну что ж, кто-то выделяется, бреясь налысо, кто-то - носит "гребень" на голове, ты нашел свой способ выделиться... Только вот не надо учить ему остальных. Ты хочешь - ты выделяйся. Всех других оставь в покое. Пускай они работают так, как принято, а не наоборот. Где-то вы мне это уже писали ![]() Советую вам проще относится к чужим ошибкам и быть оптимистом, не делая таких домыслов ![]() |
mashka-promakashka |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Мария Репутация: ![]() ![]() ![]() |
Вот исправленный код программы, может кому пригодится еще))))
Program Matrix1; |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 21:41 |