1 / 1 / 0
Регистрация: 03.03.2017
Сообщений: 30
1
C/C++

На промежутке от -128 до 127 подсчитать пар чисел, удовлетворяющих условию (Х+У*X) <> 5000

03.05.2017, 15:02. Показов 981. Ответов 1
Метки нет (Все метки)

Здравствуйте. Я плохо дружу с ассемблером. Код на задачу нашел здесь на форуме, но не совсем смог разобраться и понять
закоммментирую где мне не понятно, буду раз если поможете.

задание:
На промежутке от -128 до 127 подсчитать количество таких пар чисел X и Y, что (Х+У*X) <> 5000
плюс вывести 200 пару чисел если она есть

ассемблерская вставка на с++:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "rus");
 
 
    int x = -128, y = -128, n = 0, ix = 0, jy = 0;   // почему x и y присвается -128
    _asm
    {
 
        mov y, -128
        mov x, -128
            mov n, 0
 
            start:
 
        mov eax, x;       //вносим x в eax (счётчик)
        cmp eax, 128;     //сравниваем eax с 128            - зачем нужно сравнивать со 128
        je finish;        //если равно, то переход на finish
 
        imul y
        add eax, x;       //X+Y*X=eax
                  //Сейчас проверяем условие X+Y*X!=5000
 
        cmp eax, 5000;      //сравниваем с 5000
        je loop1;           //если равно 5000 то переход на loop1
        inc n;              //иначе кол-во +1
 
 
        mov eax, x;        //x в eax
        mov ebx, y;        //y в ebx
        cmp n, 200;        //сравниваем количество с 200
        jne loop1;         //если не равно, переходим на loop1
        mov ix, eax;        //200е значение x присваиваем к ix
        mov jy, ebx;        //200е значение y присваиваем к jy
        jmp loop1
 
            loop1 :
        inc y;             //увеличиваем y
        cmp y, 128;        //сравниваем со 128          - зачем сравнивать с 128
        jne start;  //не равно, то переходим на start
        jmp loop2   //иначе loop2
 
            loop2 :
        inc x;            //увеличиваем x
        mov y, -128;        //обнуляем y(y=-128)     - зачем обнулять
        jmp start;         //переход на старт
 
 
    finish:     //завершение цикла
 
    }
 
    cout << "asm колличество пар=" << n << endl;
    cout << "200я пара x=" << ix << " y=" << jy << endl;
 
 
    system("pause");
    return 0;
}
я не силен, в программировании, не кидайтесь тапками пожалуйста.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2017, 15:02
Ответы с готовыми решениями:

На промежутке подсчитать количество пар чисел X и Y, удовлетворяющих условию (| Х | - | У |) mod 4 = 0
Здравствуйте, нужна помощь с ассемблером. Задача: На промежутке от -128 до 127. Подсчитать...

Даны векторы Z(6) и Y(6). Подсчитать сумму элементов вектора Z и количество пар, удовлетворяющих условию
Даны векторы Z(6) и Y(6). Подсчитать сумму элементов вектора Z и количество пар, удовлетворяющих...

Вывести количество пар целых чисел, удовлетворяющих условию
Входные данные В единственной строке входных данных находятся два целых числа n и m...

Подсчитать количество таких пар чисел X и Y, что 50 x+y*x<>5000
подскажите что не так. с ассемблером не особо дружу. встречал тут похожее задание, подстроил под...

1
Ушел с форума
Автор FAQ
14259 / 7128 / 855
Регистрация: 11.11.2010
Сообщений: 12,776
03.05.2017, 15:29 2
На промежутке от -128 до 127 подсчитать количество таких пар чисел https://www.cyberforum.ru/cgi-bin/latex.cgi?X и https://www.cyberforum.ru/cgi-bin/latex.cgi?Y, что https://www.cyberforum.ru/cgi-bin/latex.cgi?(X+Y\cdot X) \ne 5000. Чтобы долго не считать -- найдем такие пары, для которых https://www.cyberforum.ru/cgi-bin/latex.cgi?X\cdot(Y+1)=5000
https://www.cyberforum.ru/cgi-bin/latex.cgi?5000=2^{3}\cdot 5^{4}=2\cdot 2500=4\cdot 1250=8\cdot 625=40\cdot 125=200\cdot 25=1000\cdot 5 Числа, которые находятся в промежутке от -128 до 127 это 40 и 125 или -40 и -125
  1. если https://www.cyberforum.ru/cgi-bin/latex.cgi?X=40 тогда https://www.cyberforum.ru/cgi-bin/latex.cgi?Y=124
  2. если https://www.cyberforum.ru/cgi-bin/latex.cgi?X=125 тогда https://www.cyberforum.ru/cgi-bin/latex.cgi?Y=39
  3. если https://www.cyberforum.ru/cgi-bin/latex.cgi?X=-40 тогда https://www.cyberforum.ru/cgi-bin/latex.cgi?Y=-126
  4. если https://www.cyberforum.ru/cgi-bin/latex.cgi?X=-125 тогда https://www.cyberforum.ru/cgi-bin/latex.cgi?Y=-41
за исключением этих четырех пар все остальные числа в промежутке от -128 до 127 удовлетворяют условию https://www.cyberforum.ru/cgi-bin/latex.cgi?(X+Y\cdot X) \ne 5000
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2017, 15:29

Как в signed char помещается диапазон -128,127 ведь если 127 это 01111111, то -127 должно быть 11111111
Добрый вечер! ломаю голову над тем, как в signed char помещается диапазон -128,127 ведь если 127...

Подсчитать количество чисел удовлетворяющих условию
Здравствуйте, нужно решить задачку без использования массива. С массивом я знаю как, а вот без него...

Подсчитать на заданном промежутке количество чисел X, для которых (X+X-1) - простое число
Добрый вечер! Подскажите, пожалуйста, как реализовать данную задачу на Assembler'е(не на чистом) со...

Посчитать количество пар (i, j) удовлетворяющих заданному условию
Задача: Елдан любит решать задачи на массивы. Недавно он столкнулся с такой задачей : Дан массив a...

Найти число пар последовательности, удовлетворяющих условию
даны две числовые последовательности одинаковой длины а1, а2,...аn и b1, b2,... bn. Найти число пар...

Найти число пар последовательности, удовлетворяющих условию
Даны две числовые последовательности одинаковой длины a1,a2,a3...n и b1,b2,b3...n. Найти число пар...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.