program q170581016;
var
a, b: integer;
begin
Write('A = ');
ReadLn(a);
Write('B = ');
ReadLn(b);
while a >= b do
begin
a := a - b;
end;
WriteLn('a mod b = ', a);
ReadLn;
end.
Тот-же алгоритм на асме (в Delphi писал. eax и ebx на ax и bx менять придётся, если Turbo Pascal)
asm
push eax
push ebx
mov eax, a
mov ebx, b
@_next:
cmp eax, ebx
jbe @_stop
sub eax, ebx
jmp @_next
@_stop:
mov a, eax
pop ebx
pop eax
end;
Это конечно извращение стандартные функции дублировать xD
Полагаю, что предполагалось на асме DIV'ом остаток выделить, но это тоже самое что mod тогда выйдет, но идея заслуживает внимания.
Другие языки программирования и технологии
Паскаль. Цикл While. Определить остаток от деления большего числа а на меньшее число b, не используя стандартные функции
Ну, если без только div и mod, то и while не нужен ;)
var a,b:real;
begin
write('a b: '); readln(a,b); writeln(trunc(a-b*trunc(a/b))); readln
end.
Хотя от вас ждут чего-то более глупого, вроде
var a,b,c:integer;
begin
write('a b: '); c:=0; readln(a,b); c:=0; while c<=a-b do c:=c+b; writeln(a-c); readln
end.
var a,b:real;
begin
write('a b: '); readln(a,b); writeln(trunc(a-b*trunc(a/b))); readln
end.
Хотя от вас ждут чего-то более глупого, вроде
var a,b,c:integer;
begin
write('a b: '); c:=0; readln(a,b); c:=0; while c<=a-b do c:=c+b; writeln(a-c); readln
end.
в цикле вычитаеием
Можно перебором
Program modder // Если хочеш
var a,o,b:integer; // Глобальные переменные.. . они в данной части не нужны но пусть будут (все равно рано или позно обявить прейдется)
function whiler(a,b):integer; //Наша главная функция
var c,i:integer; //Динамичные переменные
begin
while I<b do //Начали цикл (По факту это For )
begin
if int(a/b)*b+i=a then begin whiler:=i; break end; // проверяем правельность если да выводим ответ и выходим
i:=i+1; // Делаем шаг
end
end;
Begin // Начали
if a>b then o:=whiler(a,b) //Вводим в процидуру нужные пораметвы
else o:=whiler(b,a); //
write(o);// Выводи ответ
end.
Если можно без цикла то на прямую :=a-int(a/b)*b;
Надеюсь разберешся
P. S. Функция int Работает не во всех компиляторах, можно написать аналогичную, если что пиши.
Program modder // Если хочеш
var a,o,b:integer; // Глобальные переменные.. . они в данной части не нужны но пусть будут (все равно рано или позно обявить прейдется)
function whiler(a,b):integer; //Наша главная функция
var c,i:integer; //Динамичные переменные
begin
while I<b do //Начали цикл (По факту это For )
begin
if int(a/b)*b+i=a then begin whiler:=i; break end; // проверяем правельность если да выводим ответ и выходим
i:=i+1; // Делаем шаг
end
end;
Begin // Начали
if a>b then o:=whiler(a,b) //Вводим в процидуру нужные пораметвы
else o:=whiler(b,a); //
write(o);// Выводи ответ
end.
Если можно без цикла то на прямую :=a-int(a/b)*b;
Надеюсь разберешся
P. S. Функция int Работает не во всех компиляторах, можно написать аналогичную, если что пиши.
Похожие вопросы
- как сосчитать остаток от деления больших чисел??
- Паскаль ДОЛГО считывает КОД с большими числами
- Остаток от деления в паскале
- Деление отрицательного числа. Ассемблер
- При делении отрицательного числа выводит не правильный ответ (assembler). Если беру числа 127 13 10, пишет переполнение
- Особенности арифметических операций в C++, деление отрицательных чисел, вопрос ниже
- даны 3 разл целых числа a,b,c используя оператор GOTO составить программу для ввода чисел в порядке убывания
- Почему при делении дробных чисел пишет результат 0 на С++? x1=(b+pow(d,0.5))/2/a;
- Программисты! Помогите пожалуйста! Нужно на паскале написать код к следующей задаче: Даны натуральные числа a, b, c
- Рекурсия поиск на Delphi в цикле WHILE - исправьте код ?