Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
ComeIn
0 / 0 / 0
Регистрация: 22.09.2013
Сообщений: 1
1

Составить программу для нахождения разности двух натуральных чисел без использования знака "-"

25.09.2013, 16:06. Просмотров 3104. Ответов 33
Метки нет (Все метки)

Добрый день, очень нужна помощь с двумя задачами для экзамена что то никак с ними разобраться не могу.

1) Составить программу для нахождения разности двух натуральных чисел без использования знака "-".

P.S. что только не пробовал но логику данной задачи так и не понял и соответственно программу написать не смог.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 16:06
Ответы с готовыми решениями:

Составить программу для нахождения наибольшего общего и наименьшего общего кратного двух натуральных чисел
составить программу для нахождения наибольшего общего и наименьшего общего кратного двух...

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

Составить программу, которая определяет для двух вводимых натуральных чисел M и N их наибольший делитель
Задание 1 Вычислить для треугольника ABC все стороны, все углы (в градусной мере), периметр и...

Написать программу нахождения всех натуральных чисел, которые можно представить в виде произведения двух простых чисел
Дано натуральное число Р. Написать программу нахождения всех натуральных чисел, не превосходящих Р,...

Составить программу для нахождения НОК трёх натуральных чисел
Нужно решить задачу в Паскале с помощью подпрограммы функции и процедуры. Сам пытался сделать, но...

33
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
25.09.2013, 19:48 2
Цитата Сообщение от ComeIn Посмотреть сообщение
без использования знака "-".
Не знаю,но возможно нельзя использовать в программе оператор "-".
0
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,312
Завершенные тесты: 1
25.09.2013, 19:49 3
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program ComeIn;
var i,k,max,min,a,b:integer;
BEGIN
k:=0;
Write('Enter first number  = ');readln(a);
Write('Enter second number  = ');readln(b);
if (a=b) then 
              begin
                Writeln('Number ',a,' = ',b);exit;
              end;
if (a>b) then begin max:=a;min:=b;end
         else begin max:=b;min:=a;end;
for i:=0 to max do
begin
 if (i>min) then inc(k);
end; 
Writeln('Answer = ',k);           
END.

Елементано =) Цикл Великая вещь

Добавлено через 37 секунд
так можна или нет?
0
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
25.09.2013, 19:58 4
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var a,b,i,k:integer;
begin
k:=0;
Readln(a);
Readln(b);
if a=b then Writeln(a,'-',b,'=0') else
if a>b then 
begin
for i:=b+1 to a do k:=k+1;
Writeln(a,'-',b,'=',k) 
end else
begin
for i:=a+1 to b do k:=k+1;
Writeln(a,'-',b,'=',-k);
end;
Readln;
end.
Действительно циклом можно.

Добавлено через 1 минуту
Правда я сделал чтобы именно не разность большего и меньшего,а в таком порядке в каком они и стоят.Т.е если ввод:
Код
5-7
то вывод
Код
5-7=-2
0
25.09.2013, 19:58
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,312
Завершенные тесты: 1
25.09.2013, 19:58 5
abs(x) и все
0
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
25.09.2013, 19:59 6
Ну так модуль это и есть модуль))
А разница может быть и отрицательной.
0
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,312
Завершенные тесты: 1
25.09.2013, 20:00 7
я же правельно понял что не нужно отнять два числа а найти разности двух натуральных чисел без использования знака "-".
0
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
25.09.2013, 20:01 8
newyork7776, а я думал что по условию в программе нельзя использовать операцию минуса.
0
newyork7776
350 / 343 / 279
Регистрация: 21.05.2013
Сообщений: 1,312
Завершенные тесты: 1
25.09.2013, 20:01 9
Pascal
1
2
5 и 7=2
7 и 5=2
0
Kodzaev
3013 / 1901 / 1647
Регистрация: 30.04.2011
Сообщений: 3,054
25.09.2013, 20:03 10
Где-то видел такой способ, но, не помню, где именно
Pascal
1
2
3
4
5
6
7
var
  a, b: integer;
 
begin
  Readln(a, b);
  Writeln(a + (b xor not 0) + 1);
end.
2
Новичок
25.09.2013, 20:05
  #11

Не по теме:

Да уж,чем дальше тем больше я вижу таких сложных кодов с побитовыми операциями...

0
PaskalisT
8 / 8 / 0
Регистрация: 02.09.2013
Сообщений: 121
26.09.2013, 10:00 12
А если просто вот тak:

Pascal
1
2
3
4
5
6
7
8
var
  a, b: integer;
begin
  readln(a);
  readln(b);
  writeln('OTBET', abs(a*(-1)+b));
  readln;
end.
0
Kodzaev
3013 / 1901 / 1647
Регистрация: 30.04.2011
Сообщений: 3,054
26.09.2013, 16:01 13
PaskalisT,
Цитата Сообщение от ComeIn Посмотреть сообщение
без использования знака "-"
0
PaskalisT
8 / 8 / 0
Регистрация: 02.09.2013
Сообщений: 121
27.09.2013, 07:35 14
так я ж его и не использую, уножил на отрицательное число просто))))))))))
0
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
09.05.2014, 23:27 15
Понимаю,что тема давняя,но все же. Просматривал закладки и зашел. Так вот пришло в голову такое извращение,
Pascal
1
2
3
4
5
6
7
8
9
var a,b,c,r:Integer;
begin
 Write('a=');Readln(a);
 Write('b=');Readln(b);
 c:=Low(Integer);
 repeat c:=c+1 until c+1=0;
 r:=abs(a+b*c);
 Writeln(r);
end.
На Free Pascal работает. Главное, что просто - без всяких побитовых операций.
0
Ромаха
238 / 130 / 27
Регистрация: 16.12.2012
Сообщений: 600
Записей в блоге: 1
Завершенные тесты: 1
10.05.2014, 08:08 16
Мдя..
Код
var
    a, b : Integer;

begin
    ReadLn(a, b);
    if b > 0 then
        b := not(b) + 1
    else
        b := not(b-1);

    WriteLn(a+b)
end.
Или
Код
ReadLn(a, b);
Dec(a, b);
WriteLn(a, b)
1
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
10.05.2014, 11:18 17
Цитата Сообщение от Ромаха Посмотреть сообщение
Мдя..
Ну не понимаю я этих побитовых операций!
Цитата Сообщение от Ромаха Посмотреть сообщение
Dec(a, b);
Так неинтересно...
0
Ромаха
238 / 130 / 27
Регистрация: 16.12.2012
Сообщений: 600
Записей в блоге: 1
Завершенные тесты: 1
10.05.2014, 11:25 18
Цитата Сообщение от Новичок Посмотреть сообщение
Так неинтересно...
Соглашусь
Ну не понимаю я этих побитовых операций!
Минус использовать нельзя. Поэтому юзаем +
Получаем a-b=a+(-b)
Осталось обратить знак b. Но из-за дополнительного кода красивше разбить случай на 2 варианта b > 0 или b <= 0 (да-да-да.. я знаю, что числа натуральные, но так скучно)
Вспоминаем о том, как хранятся числа в дополнительном коде. Осталось для натурального числа инвертировать его биты и прибавить 1. А для целого, ненатурального числа вычесть 1 и снова инвертировать биты..

И не нужно придумывать ничего с xor и иже с ним..

И да.. для действительных чисел, думаю, решение будет без всяких развилок и инверсий
1
Новичок
Модератор
1533 / 1000 / 470
Регистрация: 17.07.2012
Сообщений: 5,087
Завершенные тесты: 3
10.05.2014, 11:25 19
Цитата Сообщение от Ромаха Посмотреть сообщение
b := not(b-1);
А что ж вы минус-то использовали?
0
Ромаха
238 / 130 / 27
Регистрация: 16.12.2012
Сообщений: 600
Записей в блоге: 1
Завершенные тесты: 1
10.05.2014, 11:29 20
Цитата Сообщение от Новичок Посмотреть сообщение
А что ж вы минус-то использовали?
Косячок..

Код
var
    a, b : Integer;

begin
    ReadLn(a, b);
    if b > 0 then
        b := not(b) + 1
    else
        b := not(b+(not(1)+1));

    WriteLn(a+b)
end.
0
10.05.2014, 11:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 11:29

Составить программу нахождения корня квадратного разности max и min чисел
Program Var a,b,s:real; Begin Readln (max,min,s); Of a&gt;b then writeln (a=max); Else writeln...

Составить программу для сложения, разности, умножения и деления "длинных" чисел
Нужно составить программу для сложения, разности, умножения и деления &quot;длинных&quot; чисел в Паскале!...

Составить программу для нахождения "кубических" автоморфных чисел в интервале [m,n]
составить программу для нахождения &quot;кубических&quot; автоморфных чисел в интервале


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

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

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