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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2014, 02:45   #1
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию Поменять местами строки в матрице

Здравствуйте. Задача такая:
Необходимо поменять местами в матрице те строки, в которых находится минимальный и максимальный элемент соотвественно. Как найти данные элементы я понял. Но как поменять местами строки - нет. Код должен быть ассемблеровской вставкой в С++.
Спасибо.
Alexey Smirnov вне форума Ответить с цитированием
Старый 05.06.2014, 09:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вам принцип обмена строк матрицы не понятен?

дык всё очень просто:
Код:
если НомерСтроки_С_Минимумом = НомерСтроки_С_Минимумом 
  - тогда сообщение "Минимум и максимум в одной строке, менять нечего"
иначе
   цикл по количеству столбцов матрицы от 1-го до M
      временная_переменная = A[НомерСтроки_С_Минимумом, ТекущийНомерСтолбца]
      A[НомерСтроки_С_Минимумом, ТекущийНомерСтолбца] =  A[НомерСтроки_С_Максимумом, ТекущийНомерСтолбца]
      A[НомерСтроки_С_Максимумом, ТекущийНомерСтолбца] = временная_переменная 
   конец цикла
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.06.2014, 19:42   #3
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Мне конкретно реализация в ассемблеровской вставке не понятна.
Alexey Smirnov вне форума Ответить с цитированием
Старый 05.06.2014, 20:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Покажи код того, что уже у тебя есть - попробуем подправить
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.06.2014, 20:14   #5
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Код:
//#include <stdafx>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <locale>
#include <conio.h>
using namespace std;

int main(){
	int n, m, nMin, nMax;		// размерность матрицы
	setlocale (LC_ALL, "Russian");
	int **A = NULL;	// матрица
			
			cout<<"Введите размерность матрицы N=";			
			cin>>n; 
			cout<<"Введите размерность матрицы M=";
			cin>>m;
			A=new int *[n];	//выделение памяти под новую матрицу
			for(int i=0;i<n;i++)
				A[i]=new int[n];
			for(int j=0;j<m;j++)
				A[j]=new int[m];

			for(int i=0;i<n;i++)	//Чтение матрицы с клавиатуры
				for(int j=0;j<m;j++)
					cin>>A[i][j];
			
			for(int i=0;i<n;i++)    //печать матрицы на экран 
					{
						for(int j=0;j<m;j++)
							cout<<setw(5)<<A[i][j];
						cout<<endl;
					}

			__asm
			{
				mov edi,dword ptr A	 //первая строка матрицы
				mov ecx,dword ptr n	 //число строк
				mov edx,edi	 //адрес строки с минимумом

				mov esi,dword ptr [edi] //адрес первого элемента строки
				mov ebx,dword ptr [esi] //самый первый элемент

				M0:
				//найдем строку с минимумом

				push ecx
				mov esi,dword ptr [edi] //очередная строка

				mov ecx,dword ptr m	//число столбцов

				M1:

				cmp ebx,dword ptr [esi]
				jl M2                   //если меньше
				mov ebx,dword ptr [esi] //очередной элемент меньше
				mov edx,edi	 //адрес строки с минимумом

				M2:

				add esi,4	//следующий элемент строки 
				loop M1
				add edi,4	 //следующая строка
				pop ecx      //извлекаем из стека число строк
				loop M0
				sub edx,dword ptr A	
				shr edx,2     //сдвиг на 2 элемента вправо
				add edx, 1   //Так как отсчет начинается с нуля, то прибавляем единицу к конечному результату
				mov nMin,edx //Номер строки, где хранится минимальный элемент

							}
			
					__asm
					{
					mov edi,dword ptr A	 //первая строка матрицы
				mov ecx,dword ptr n	 //число строк
				mov edx,edi	 //адрес строки с максимумом

				mov esi,dword ptr [edi] //адрес первого элемента строки
				mov ebx,dword ptr [esi] //самый первый элемент

				M3:
				//найдем строку с максимумом

				push ecx
				mov esi,dword ptr [edi] //очередная строка

				mov ecx,dword ptr m	//число столбцов

				M4:

				cmp ebx,dword ptr [esi]
				jg M5                   //если больше
				mov ebx,dword ptr [esi] //очередной элемент больше
				mov edx,edi	 //адрес строки с максимумом

				M5:

				add esi,4	//следующий элемент строки 
				loop M4
				add edi,4	 //следующая строка
				pop ecx      //извлекаем из стека число строк
				loop M3  
				sub edx,dword ptr A	
				shr edx,2    //сдвиг на 2 элемента вправо 
				add edx, 1   //Так как отсчет начинается с нуля, то прибавляем единицу к конечному результату
				mov nMax,edx //Номер строки, где хранится максимальный элемент

				}       
					__asm
					{
						
						






				  

					}

			cout <<"nMin= "<<nMin<<endl;
			cout <<"nMax= "<<nMax<<endl;

					for(int i=0;i<n;i++)
					{
						for(int j=0;j<m;j++)
							cout<<setw(5)<<A[i][j]; //печать на экран преобразованной матрицы
						cout<<endl;
					}
				
			system ("pause");			
			return 0;
	}
Место пустое для вставки обмена строк местами.
Alexey Smirnov вне форума Ответить с цитированием
Старый 05.06.2014, 20:15   #6
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Алгоритм, который описан Serge_Bliznykov легко выполнить на Паскале, но как сделать это здесь...
Alexey Smirnov вне форума Ответить с цитированием
Старый 05.06.2014, 21:47   #7
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Показал - не подсказали
Alexey Smirnov вне форума Ответить с цитированием
Старый 05.06.2014, 22:08   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Показал - не подсказали
Ух ты какой нетерпеливый...
Не знаю как у остальных, а дома у меня Gcc, а не VS. Так что и проанализировать твой код смогу максимум завтра.
А что за спешка, военкомат уже в двери стучится?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.06.2014, 22:11   #9
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

У меня военник =P
Не люблю когда что-то висит не сделанное, перфекционист
Alexey Smirnov вне форума Ответить с цитированием
Старый 05.06.2014, 22:31   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поспешишь - людей насмешишь.
Завтра, если не забуду, попробую слегка пример накидать на вставках в студии. Нет у меня ее дома. Если конечно кто-то еще не ответит с примером.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В матрице поменять местами строки с max элементом и min элементом: объясните код, где какие действия выполняются (Паскаль). КонстантинКонстант Помощь студентам 0 08.01.2014 13:38
Поменять местами i-строку с j-столбцом в матрице AZelensky Помощь студентам 0 16.12.2013 20:37
В целочисленной квадратной матрице наибольший элемент каждой строки поменять местами с элементом главной диагонали DesignGenius C# (си шарп) 0 18.10.2011 20:22
В матрице А поменять местами две строки с заданными номерами dimegusew Помощь студентам 0 11.05.2011 20:02
Задача на СИ в заданной матрице поменять местами первую строку и первый столбец %( defol-777 Помощь студентам 2 14.01.2009 09:59