Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 13 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 15.09.2004
Откуда: Рига, Латвия
работаю на проге Dev-C++ нужно чтобы две переменные поменялись местами, т.е. вводим две переменных 2 5, жмём энтер и он меняет их местами - 5 2.
НО мне надо сделать это без помощи третьей переменной! только а и б
под ms-dos
кто знает, как это сделать ??? вот я чё-то пытался: :roll:

#include <stdio.h>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{
int a;
scanf ("%i", &a);
int b;
scanf ("%i", &b);


a = b-0;
b = a+7*1+2-9;

printf ("%i", a);
printf ("%i", b);

/* пробавал и a=b-0 b=a-0 a=b*1 b=a*1 и менял местами эти строчки:
"a = b-0;
b = a+7*1+2-9;
printf ("%i", a);
printf ("%i", b);"
всё равно выводит два одинаковый числа, или а или б */

getch();
}



Партнер
 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
1. Пользуйтесь поиском :x Стандартные C, C++
2. Используйте xor

Код:
int _tmain(int argc, _TCHAR* argv[])
{
   int a, b;

   a = 4;
   b = 5;


   a = a ^ b;
   b = b ^ a;
   a = b ^ a;

   printf("%d\n", a);
   printf("%d\n", b);
   return 0;
}

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 04.02.2004
Откуда: Москва|СВАО
Daemon
Нельзя ли пояснить как и почему это работает?

_________________
Счастье - это когда тебя понимают.
Разыскиваю (куплю) оригинальный USB-kit для Chaintech 5AGM2 (подробности в Л.С.).


 

Member
Статус: Не в сети
Регистрация: 15.09.2004
Откуда: Рига, Латвия
я уже сам допёр

#include <stdio.h>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{
int a,b;
scanf ("%i", &a);
scanf ("%i", &b);


printf ("%i", b);
printf ("\n%i", a);


getch();
}

вот так я сделал - логически :)

щас попробую сделать тоже только с третьим..


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
BoooZ браво :D
Peter_P суммирование по модулю два, работает поскольку у этой операции есть такое свойство, что если сложить 2 переменные, то из этой суммый можно извлечь значение одной из переменной имея значение другой :-)
Добавлено спустя 1 минуту, 54 секунды
Можно проделать тоже самое с помощью пары других операций(+ и -, * и / ).

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 15.09.2004
Откуда: Рига, Латвия
Daemon а что значит ^ ???? :D


 

Advanced member
Статус: Не в сети
Регистрация: 13.11.2002
Откуда: msk.ru
Чет у меня подобное валялось из моей студенческой жизни... Ща поищу..
Добавлено спустя 1 минуту, 59 секунд
Код:
#include <stdio.h>

void main(void)
{
   int a,b;
   a=2;
   b=5;

   printf("a is %d\n", a);
   printf("b is %d\n", b);

   a=a+b;
   b=a-b;
   a=a-b;

   printf("a is %d\n", a);
   printf("b is %d\n", b);

   getchar();
}

Добавлено спустя 1 минуту, 22 секунды
BoooZ писал(а):
я уже сам допёр

Если бы я так на работе допирал, меня бы давно понизили из программиста в уборщики :)

_________________
Поддержка phpBB на русском языке - теперь официально!


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
BoooZ операция xor, можно и справочник полистать :oops:

_________________
Ку ку


 

Advanced member
Статус: Не в сети
Регистрация: 13.11.2002
Откуда: msk.ru
Daemon
Твой вариант конечно побыстрее моего будет... ;) Ассемблерную вставочку забацал бы ;)

_________________
Поддержка phpBB на русском языке - теперь официально!


 

Member
Статус: Не в сети
Регистрация: 04.02.2004
Откуда: Москва|СВАО
Daemon
Daemon писал(а):
суммирование по модулю два, работает поскольку у этой операции есть такое свойство, что если сложить 2 переменные, то из этой суммый можно извлечь значение одной из переменной имея значение другой

Никогда не сталкивался с этой операцией не для двоичных чисел. Правильно ли я понимаю что в процессе ее выполнения a и b записываются в двоичном коде и эта операция выполняется последовательно с каждой парой бит поразрядно идя от младших разрядов, а результат потом переводится в десятиричную систему счисления?

_________________
Счастье - это когда тебя понимают.
Разыскиваю (куплю) оригинальный USB-kit для Chaintech 5AGM2 (подробности в Л.С.).


Последний раз редактировалось Peter_P 18.11.2005 11:20, всего редактировалось 1 раз.

 

Advanced member
Статус: Не в сети
Регистрация: 13.11.2002
Откуда: msk.ru
Peter_P
Не забывай что компьютер вообще работает только с двоичными числами.

_________________
Поддержка phpBB на русском языке - теперь официально!


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Юрий можно :-)
Код:
int _tmain(int argc, _TCHAR* argv[])
{
   int a, b;

   a = 4;
   b = 5;

   _asm
   {
      xor eax, eax
            
      mov eax, a
      xor eax, b
      xor b, eax
      xor eax, b
      mov a, eax
   }

   printf("%d\n", a);
   printf("%d\n", b);
   return 0;
}

Ну и уж если взялись за асм, то можно и так :-)
Код:
   _asm
   {
      xor eax, eax
      mov eax, a
      xchg eax, b
      mov a, eax
   }

Peter_P собственно как и любая другая строка кода, строка с xor компилируеться в маш код. А там - операция с регистрами процессора.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 04.02.2004
Откуда: Москва|СВАО
Юрий
Юрий писал(а):
Не забывай что компьютер вообще работает только с двоичными числами.

Я не знал что эти операции определены не только над логическими переменными, поэтому и спросил.
Daemon, Юрий
Спасибо за разъяснение.

_________________
Счастье - это когда тебя понимают.
Разыскиваю (куплю) оригинальный USB-kit для Chaintech 5AGM2 (подробности в Л.С.).


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 13 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan