mpA][tempB]+PlusP[Plus[tempA][tempA]][bp];
{(Sravn (ostB% 10, tempA) || (tempA == ostB% 10 amp; amp; bp!=0))
{= 2;
} bp=0;
} /=10; /=10;
} +=bp * i; rez;
На вхід функція отримує модулі двох чисел, і змінну p, що відповідає за те, складати числа треба, або віднімати.
Додавання: Додавання відбувається поразрядно, починаючи з молодшого розряду, за таблицею додавання. До результату додається додаток суми попереднього розряду (спочатку рівне 0). Само додаток обчислюється як сума доповнень чисел даного і попереднього розряду.
Віднімання: Виконується аналогічно додаванню, але до цифри першого числа додається додаток до 0 цифри другого числа. Перенесення при цьому, рівний «- 1» (тобто максимальної цифрі в даній арифметиці), буде тільки тоді, коли з меншою цифри віднімають велику (в інших випадках перенесення дорівнює 0).
3.2 Реалізація множення
int Umnog (int a, int b)
{REZ=0; ostB=b; (int j=1; ostB gt; 0; j *=10)
{tempB=ostB% 10; tempREZ=0; ostA=a; i=1; dopU=0; (i; ostA gt; 0; i *=10)
{tempA=ostA% 10; tempDop=Summ (Mult [tempA] [tempB], dopU, 1); +=tempDop% 10 * i;=Summ (tempDop/10, MultP [tempA ] [tempB], 1); /=10;
} +=dopU * i;=Summ (REZ, tempREZ * j, 1);
ostB /=10;
} REZ;
}
На вхід функції йде два числа. Множення відбувається поразрядно, це реалізовано через множення і ділення на 10. Кожна цифра першого числа множиться на друге по таблиці, до результату додається перенесення від попереднього розряду. Перенесення поточного розряду дорівнює перенесенню твори його цифр плюс перенос суми його твори і перенесення з минулого розряду.
3.3 Реалізація поділу
Delen (int a, int b, int * mod)
{(Sravn (b, a))
{
* mod=a; 0;
} tempA=a; REZ=0; (! Sravn (b, tempA))
{= Summ (tempA, b, 0);=Summ (REZ, 1, 1);
}
* mod=tempA;
return REZ;
}
калькулятор арифметика додавання некоректний
На вході два числа (перше - ділене, друге - дільник), і посилання, по якому потрібно передати залишок від ділення.
Прописані всі приватні випадки ділення. Якщо перше число менше другого - то відразу виводиться результат ділення 0, залишок - перше число цілком. Якщо користувач вводить розподіл 0 на 0, виводиться повідомлення: Невизначеність. Будь-яке число в проміжку [- 222222222; 222222222], тобто інтервал з усіма варіантами. В інтервалі число 2, тому що воно максимальне в даній арифметиці. Якщо користувач вводить нуль тільки в якості подільника, то виводиться таке системне повідомлення: На нуль ділити не можна! (викл. 0/0) .
Саме розподіл реалізовано через віднімання. Поки ділене більше дільника, ми віднімаємо з перших друге і записуємо до поділеного. До тимчасового результату додаємо одиницю. Після виходу з циклу, коли ділене менше дільника, ділене записується в залишок. Грубо кажучи, ми вважаємо, скільки разів зможемо відняти з першого числа другого.
3.4 Реалізація порівняння
bool Sravn (int a, int b)
{(a == 0) return false; (b == 0) return true; rez=false; ostA=a, ostB=b, temp; n1, n2; (int i=0 ; ostA gt; 0 || ostB gt; 0; i ++)
{= 0;=0;=ostA% 10; (temp!=0)
{= Find (temp); ++;
} (temp!=0);=ostB% 10; (temp!=0)
{= Find (temp); ++;
} (temp!=0); (n1!=n2) (n2 gt; n1)=false;=true; /=10; /=10;
} rez;
}
На вхід функція приймає два числа, які необхідно порівняти. Числа порівнюються по кожному розряду, починаючи з меншого. Для цього дві цифри одного розряду розкладаються на суму одиниць, і порівнюється їх кількість. Якщо більше у першого числа - перший тимчасово оголошується більшим, якщо у другого - друге. Якщо дорівнює, то більшим тимчасово оголошується те число, яке було великим при порівнянні цифр минулого розряду.
На виході булева змінна, true - перше число більше, false - друге.
Функція порівняння використовується в поділі та складення.
В...