Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2022, 18:36   #1
nikitasa
 
Регистрация: 14.10.2022
Сообщений: 7
По умолчанию Для заданной целой матрицы размером 10 на 15 напечатайте индексы всех ее седловых точек

Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы размером 10 на 15 напечатайте индексы всех ее седловых точек. На pascal ABC

Последний раз редактировалось nikitasa; 14.11.2022 в 20:06.
nikitasa вне форума Ответить с цитированием
Старый 14.11.2022, 18:47   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Цена вопроса?
Valick вне форума Ответить с цитированием
Старый 14.11.2022, 20:01   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
GetCeilPoints:
  virtual at ebp-.loc_length
    label .locals
      .COLmin	dd 10 dup ? ; Индексы минимальных элементов в колонках (индекс в массиве равен индексу колонке, значение элемента - индекс строки)
      .COLmax	dd 10 dup ? ; Индексы максимальных элементов в колонках
      .ROWmin	dd 15 dup ? ; Индексы минимальных элементов в строках (индекс в массиве равен индексу строки, значение элемента - индекс колонки)
      .ROWmax	dd 15 dup ? ; Индексы максимальных элементов в строках
    .loc_length = ( 0 - 4 ) and ( $ - .locals + 3 )
    rd 5
    label .arguments
      .inMatrix	dd ? ; 10 x 15 int Входной параметр - указатель на матрицу 10 * 15 (10 столбцов и 15 строк)
      .outPoints	dd ? ; 25 x  2 int - указатель на массив седловых точек (25 * 2 элемента или 15 структур POINT { int x, y; })
    .arg_length = ( 0 - 4 ) and ( $ - .arguments + 3 )
  end virtual
	push	edi
	push	esi
	push	ebx
	push	ebp
	mov	ebp, esp
	mov	ebx, [.inMatrix]
	sub	esp, .loc_length

; Инициализация (обнуление) локальных переменных
	xor	eax, eax
	lea	edi, [.COLmin]
	mov	ecx, 10 + 10 + 15 + 15
    rep	stos	dword [edi]

; Циклы просмотра матрицы и поиска минимумов и максимумов
	xor	edi, edi

  .loop:
	xor	esi, esi

  .cycl:
	imul	ecx, edi, 10
	mov	edx, ecx
	lea	eax, [esi + ecx]
	add	edx, [.COLmin + esi * 4]
	mov	eax, [ebx + eax * 4]
	mov	edx, [ebx + edx * 4]
	cmp	eax, edx
	jge	@f
	mov	[.COLmin + esi * 4], edi

  @@:
	mov	edx, ecx
	add	edx, [.COLmax + esi * 4]
	cmp	eax, edx
	jle	@f
	mov	[.COLmax + esi * 4], edi

  @@:
	imul	edx, [.ROWmin + edi * 4], 10
	add	edx, esi
	mov	edx, [ebx + edx * 4]
	cmp	eax, edx
	jge	@f
	mov	[.ROWmin + edi * 4], esi

  @@:
	imul	edx, [.ROWmax + edi * 4], 10
	add	edx, esi
	mov	edx, [ebx + edx * 4]
	cmp	eax, edx
	jle	@f
	mov	[.ROWmax + edi * 4], esi

  @@:
	inc	esi
	cmp	esi, 10
	jc	.cycl
	inc	edi
	cmp	edi, 15
	jc	.loop

; Цикл поиска седловых точек
	mov	edi, [.outPoints]
	xor	esi, esi

  .find:
	mov	ebx, [.COLmin + esi * 4]
	mov	eax, [.ROWmax + ebx * 4]
	cmp	eax, esi
	jnz	@f
	xchg	eax, ebx
	stos	dword [edi]
	xchg	eax, ebx
	stos	dword [edi]

  @@:
	mov	ebx, [.COLmax + esi * 4]
	mov	eax, [.ROWmin + ebx * 4]
	cmp	eax, esi
	jnz	@f
	xchg	eax, ebx
	stos	dword [edi]
	xchg	eax, ebx
	stos	dword [edi]

  @@:
	inc	esi
	cmp	esi, 10
	jc	.find
	leave
	pop	ebx
	pop	esi
	pop	edi
	retn	.arg_length
Как-то так. FASM v. 1.73.30 FLAT 32-bit

Последний раз редактировалось macomics; 14.11.2022 в 20:16.
macomics вне форума Ответить с цитированием
Старый 14.11.2022, 23:15   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

macomics это только мне кажется, что этот Плескаль-А-Бе-Це сильно на асм смахивает?
Я тоже в молодости ассемблером увлекался, ещё со времён ЕС-1022 .

Valick Тут macomics всех потенциальных клиентов обнулит, решая "на шару". Ну доброе у него сердце к лодырям.

Последний раз редактировалось digitalis; 14.11.2022 в 23:20.
digitalis вне форума Ответить с цитированием
Старый 15.11.2022, 02:13   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

digitalis, приписка с языком появилась позже сообщения macomics, так что всё законно.
nikitasa, что не получается сделать? Алгоритм решения можете подсмотреть в коде выше. Хотя из условия я не понял, могут ли быть в одной строке (столбце) сразу несколько минимальных или максимальных элементов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.11.2022, 08:15   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
macomics это только мне кажется, что этот Плескаль-А-Бе-Це сильно на асм смахивает?
Замечу, что я на asm написал это до того, как автор внес изменение в пост. Там изначально не был указан язык!

Цитата:
Сообщение от BDA Посмотреть сообщение
Хотя из условия я не понял, могут ли быть в одной строке (столбце) сразу несколько минимальных или максимальных элементов.
BDA, в каждой строке есть минимум и максимум. Тоже и в столбцах. Надо найти элементы в которых минимум одной строки совпадает с максимумом в столбце. И наоборот. Всего не более 10 элементов (но я взял с запасом 25).

Последний раз редактировалось macomics; 15.11.2022 в 08:19.
macomics вне форума Ответить с цитированием
Старый 15.11.2022, 08:43   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

macomics, например, матрица:
Код:
1 1 2 2
1 1 2 2
0 0 3 3
Нужно ли будет напечатать в качестве ответа:
Код:
1 1 2 2
1 1 2 2
т.к. каждая единица минимальная в своей строке и максимальная в столбце, а каждая двойка максимальная в строке и минимальная в столбце?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.11.2022, 08:53   #8
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

BDA, ты не понял задачу. Ключевое слово одновременно.

Цитата:
Сообщение от nikitasa Посмотреть сообщение
Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце
Так что матрица не всегда обязана иметь седловые точки.
Valick вне форума Ответить с цитированием
Старый 15.11.2022, 09:09   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

BDA, должно получиться 8 точек: (0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (3, 0), (2, 1), (3, 1)
macomics вне форума Ответить с цитированием
Старый 15.11.2022, 09:59   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Valick, я поэтому и уточняю, что из изначального сообщения ТСа не всё понял. То что матрица может не иметь седловых точек, было понятно. А вот строгость неравенств была непонятна (т.е. элемент, например, единственный наименьший или один из наименьших в строке).
macomics, тогда получается, что максимальное число седловых точек равно количеству элементов матрицы (например, если все элементы равны):
Код:
0 0 0
0 0 0
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданной целой матрицы размером n x m напечатать индексы всех её седловых точек. Maddison Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.02.2018 09:29
Дана матрица. Определить номера строк и столбцов всех седловых точек матрицы / Pascal ABC eppi Помощь студентам 1 08.05.2014 11:19
матризы определить индексы всех ее седловых точек Sylar9 Общие вопросы C/C++ 2 06.01.2012 16:09
Для заданной матрицы размером 8*8: Zезарь Помощь студентам 1 17.05.2011 13:09