Скачиваний:
5
Добавлен:
27.11.2024
Размер:
4.39 Кб
Скачать
/*
Даны два одномерных массива одинаковой размерности.
Массивы заполнить случайными числами.
Сформировать третий массив следующим образом:
если сумма двух соответствующих элементов
больше заданного пользователем числа записать
в массив 1, если меньше 0. Подсчитать количество
1 и 0 в итоговом массиве.
*/
#include "pch.h"
#include <iostream>
#include <time.h>
#include <conio.h>
#include <stdio.h>

void main() {
	setlocale(LC_ALL, "Rus");
	srand(time(NULL));
	int a[10] = { 0 };
	int b[10] = { 0 };
	int d[10] = { 0 };
	int z[10] = { 0 };
	int c;
	int summ = 0;
	int summ2 = 0;
	for (int i = 0; i < 10; i++)
	{a[i] = 0 + rand() % 100;
	b[i] = 0 + rand() % 100;}
	printf("\nМассив #1: ");
	for (int i = 0; i < 10; i++)
	{printf("%i\, ", a[i]);}
	printf("\nМассив #2: ");
	for (int i = 0; i < 10; i++)
	{printf("%i\, ", b[i]);}
	_asm
	{
		lea EAX, a      //читаем адрес для переменной массива а
		lea EBX, b      //читаем адрес для переменной массива b
		mov ESI, 0      //шаг увеличения адреса на 4
		mov ECX, 10     //кол-во итераций
		for1:               //первый цикл
		mov EDX, [EAX + ESI]  //увеличение адреса на 4 для переменной a массива
			mov EDI, [EBX + ESI]  //увеличение адреса на 4 для переменной b массива
			add EDI, EDX        //сложение элементов массива
			cmp EDI, 50     //сравнение суммы с числом
			jc lb1              //если сумма меньше, прыгает.
			add summ, 1
			mov EDX, 1      //ЗАПИСЬ В РЕЗУЛЬТАТ 1
			push EDX        //записывает результат в стэк
			jmp end         //прыгаем на end

			lb1 :            //метка
		add summ2, 1
			mov EDX, 0      //запись в результат 0
			push EDX        //записывает результат в стэк
			end :                //прыгнули
		add ESI, 4      // +4 к шаг увеличения адреса
			loop for1       //возвращение к шапке цикла
			lea EAX, d      //читаем адрес переменной массива d
			mov ESI, 0      //esi =0
			mov ECX, 10     //ecx =10
			for2 :           //шапка второго цикла. цикл записи данных в массив
			pop EDI         //чтение из стека
			mov[EAX + ESI], EDI
			add ESI, 4      //перемещение на следующий элемент массива
			loop for2       //возвращение в шапку 2 цикла
			//////////////////////////
			lea EAX, d      //читаем адрес для переменной массива а
			mov ESI, 0      //шаг увеличения адреса на 4
			mov ECX, 10     //кол-во итераций
			for3:               //первый цикл
		mov EDX, [EAX + ESI]  //увеличение адреса на 4 для переменной a массива
			push EDX        //записывает результат в стэк
			add ESI, 4      // +4 к шаг увеличения адреса
			loop for3       //возвращение к шапке цикла
			/////////////////////////
			lea EAX, z      //читаем адрес переменной массива d
			mov ESI, 0      //esi =0
			mov ECX, 10     //ecx =10
			for4:           //шапка второго цикла. цикл записи данных в массив
		pop EDI         //чтение из стека
			mov[EAX + ESI], EDI
			add ESI, 4      //перемещение на следующий элемент массива
			loop for4       //возвращение в шапку 2 цикла
			//////////////////////
	}
	printf("\nМассив #3: ");
	for (int i = 0; i < 10; i++) {
		printf("%i\, ", z[i]);
	}
	printf("\nВсего единиц:%i", summ);
	printf("\nВсего нулей:%i\n", summ2);
	system("pause");
}
Соседние файлы в папке КР
  • #
    27.11.2024396 б5pch.cpp
  • #
    27.11.20241.25 Кб5pch.h
  • #
    27.11.20244.39 Кб5КР.cpp
  • #
    27.11.20248.4 Кб5КР.vcxproj
  • #
    27.11.20241.27 Кб5КР.vcxproj.filters
  • #
    27.11.2024165 б5КР.vcxproj.user