Выведите на экран значение максимального элемента и их количество. С++ и Ассемблер - Assembler
Формулировка задачи:
Цель работы
Научится оперировать с циклами для данных в формате short*int. Исходные
данные и результат должны быть проверены на диапазон допустимых
значений.
Порядок работы
1. Найти свой вариант в одном из блоков заданий А, В или С.
2. Написать модули вычисления задания на языке Ассемблера.
3. Написать на С++ программу корректного ввода исходных данных (с
контролем допустимого диапазона), вычисления задания и вывода
полученного результата.
4. Встроить вызов ассемблерного модуля в программу на С++.
5. Произвести тестовые проверки.
я смогла написать на с++, но никак не могу разобраться в ассемблере, помогите пожалуйста.
вот код на с++
#include <locale>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <conio.h>
using namespace std;
//extern "C" void el(void);
//extern "C"
short int *mas;
//extern "C"
short int n, m, max;
//4. Выведите на экран значение максимального элемента и их количество.
void Print(short int *mas, int n)
{
for (int i = 0; i < n; i++)
{
cout << setw(6) << mas[i];
cout <<" ";
}
cout << endl;
}
void InitRand(short int *mas, int n)
{
for (int i = 0; i < n; i++)
{
mas[i] = rand() % 7 + (-5);
}
}
int main()
{
int maxi,m1;
setlocale(LC_ALL, "rus");
cout << "Введите n количество элементов" << endl;
cin >> n;
if ( n == 0) cout << "Массив не должен быть равен 0";
else
{
mas = new short int [n];
//for (short int count = 0; count < n; count++)
//mas[count] = new short int[m];
cout << "Массив: " << endl;
InitRand(mas, n);
Print(mas, n);
maxi = mas[0];
for (int i = 0; i < n; i++)
{
if (maxi < mas[i]) //поиск максимальных элементов
maxi = mas[i];
m1 = 0;
}
for (int i = 0; i < n; i++)
{
if (maxi == mas[i]) //подсчет максимального элемента
m1 = m1+1;
}
cout << "C++" << endl;
cout << "Максимальный элемент : " << maxi << " Кол-во максимальных элементов : " << m1 << endl;
cout << "ASM" << endl;
//el();
//cout << "Максимальный элемент : " << max << " Кол-во максимальных элементов : "<< m << endl;
cout << endl;
}
_getch();
return 0;
}Решение задачи: «Выведите на экран значение максимального элемента и их количество. С++ и Ассемблер»
textual
Листинг программы
#include <locale>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;
extern "C" short el(short *a, int size, int *max_count);
//4. Выведите на экран значение максимального элемента и их количество.
void Print(short int *mas, int n)
{
for (int i = 0; i < n; i++)
{
cout << setw(6) << mas[i];
cout <<" ";
}
cout << endl;
}
void InitRand(short int *mas, int n)
{
for (int i = 0; i < n; i++)
{
mas[i] = rand() % 7 + (-5);
}
}
int main()
{
short int maxi, max2, *mas;
int min = SHRT_MIN, max = SHRT_MAX, m1, m2, n;
cout << "Введите n количество элементов" << endl;
cin >> n;
srand(time(NULL));
if ((n<min) || (n>max)) cout << "Выход за диапазон";
if ( n == 0) cout << "Массив не должен быть равен 0";
else
{
mas = new short int [n];
//for (short int count = 0; count < n; count++)
//mas[count] = new short int[m];
cout << "Массив: " << endl;
InitRand(mas, n);
Print(mas, n);
maxi = mas[0];
for (int i = 0; i < n; i++)
{
if (maxi < mas[i]) //поиск максимальных элементов
maxi = mas[i];
m1 = 0;
}
for (int i = 0; i < n; i++)
{
if (maxi == mas[i]) //подсчет максимального элемента
m1 = m1+1;
}
cout << "C++" << endl;
cout << "Максимальный элемент : " << maxi << " Кол-во максимальных элементов : " << m1 << endl;
cout << "ASM" << endl;
max2 = el(mas, n, &m2);
cout << "Максимальный элемент : " << max2 << " Кол-во максимальных элементов : "<< m2 << endl;
cout << endl;
}
cin.ignore();
cin.get();
return 0;
}
Объяснение кода листинга программы
- Ввод количества элементов массива от пользователя.
- Инициализация генератора случайных чисел.
- Проверка корректности введенного количества элементов массива.
- Выделение памяти под массив.
- Инициализация массива случайными значениями.
- Вывод массива на экран.
- Поиск максимального элемента в массиве.
- Подсчет количества максимальных элементов в массиве.
- Вывод максимального элемента и количества его повторений на экран.
- Вызов функции на языке Ассемблера для поиска максимального элемента и количества его повторений.
- Вывод результатов работы функции на языке Ассемблера на экран.