Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Zla9_Kolu4ka
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 409
1

Как работает функция "test" в приведенном коде

14.01.2014, 16:14. Просмотров 983. Ответов 27
Метки нет (Все метки)

Объясните как работает функция test

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
#include <conio.h>
#include <iostream.h>
#include <limits.h>
 
int     test(long int a)
     {return ((a>>15)+1)&~1;}
 
int     primC(int a, const int b, const int c, const int d)
{ double z = (2.0*a+1.0*b*c)/(d-a);  //!!!!!!!!!! ВНИМАНИЕ !!!!!!!!!!!!!!!!!
  if (z > SHRT_MIN && z < SHRT_MAX) return z;
   else
    { cout << "\n!!!!!!!!!!! Limits of int value !!!!!!!!!!!\n  x = "
           << z << endl;
      return SHRT_MIN; //-32768
     }
 }
 
int X,a;
 
void main(void)
{   char ch;
    const b=-333;
    const c= 1000;
    const d=-10;
    long int a1;
    do {X = 0;
        cout << "\n    x=(2*a+b*c)/(d-a);  int x,a,b=-333,c=1000,d=-10;" << endl;
        do{ cout<<"\n    Enter a [-32768..32767], a!= " << d << " ====> ";
            cin>> a1;
           }while (test(a1) || d - a1 == 0 || test (d-a1));
        a = a1;
        X = primC(a, b, c, d);
        if (X!=SHRT_MIN)
         { cout << " Result (C++) x = " << X << endl;
          }
        cout << "\n\nExit? - (y/n)\n";
        ch = getch();
       } while (!(ch=='y' || ch =='Y'));
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2014, 16:14
Ответы с готовыми решениями:

Патерн "прототип" не работает, выдаёт ошибку "недопустимый вызов нестатической ф-ции", где я в коде ошибка?
Вот мой код... #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;vector&gt;...

Почему не работает функция std::regex_replace(temp,"amp;","");
Пробую вызывать функцию std::regex_replace(temp,&quot;amp;&quot;,&quot;&quot;); Пишет ошибку: ...

Запишите в файл test.out все строки из файла test.in, в которых встречается слово "Hello"
В файле test.in записан текст на английском языке. Запишите в файл test.out все...

Error C2664: atoi: невозможно преобразовать параметр 1 из "_TCHAR *" в "const char *" Как исправить эту ошибку в коде?
#include &quot;stdafx.h&quot; #define _XOPEN_SOURCE 500 #include &lt;conio.h&gt;...

Как работает генерация случайных чисел в приведенном коде
Дорогие Форумчане! Подскажите пожалуйста, как работает нижеследующий код для...

27
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
14.01.2014, 16:15 2
Элементарно:
здесь её нет
0
Zla9_Kolu4ka
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 409
14.01.2014, 16:42  [ТС] 3
Элементарно:
здесь её нет
поясни
а это что
C++
1
}while (test(a1) || d - a1 == 0 || test (d-a1));
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
14.01.2014, 17:02 4
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
а это что
А это называется "я тоже сообщения править умею".
Раз вы вместо того, чтоб свою ошибку признать и молча исправить, решили меня еще и в неправомерной клевете обвинить, то и решайте свое задание сами.
1
Тамика
Котовчанин
928 / 469 / 199
Регистрация: 16.02.2010
Сообщений: 3,304
Записей в блоге: 29
14.01.2014, 17:03 5
Производит битовые операции с числом, которое получает. И возвращает результат. <censored>

 Комментарий модератора 
Использование нецензурных выражений запрещено в любом виде
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
14.01.2014, 17:04 6
P.S. я специально даже перед публикацией второго поста нажал Ctrl + F и ввел test. Результат - 1 соответствие.
0
Zla9_Kolu4ka
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 409
14.01.2014, 17:26  [ТС] 7
P.S. я специально даже перед публикацией второго поста нажал Ctrl + F и ввел test. Результат - 1 соответствие.
выражайтесь яснее, я ничего не пойму
роизводит битовые операции с числом, которое получает. И возвращает результат. Хуле.
Это и так понятно, подробнее
Раз вы вместо того, чтоб свою ошибку признать и молча исправить, решили меня еще и в неправомерной клевете обвинить, то и решайте свое задание сами.
вас никто тут не заставляет решать
Я никого не обвиняю,я просто не понимаю вас
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
14.01.2014, 18:10 8
Если не ошибаюсь, то она проверяет, лежит ли число в пределах значений, указаных в 28-й строке.
0
Zla9_Kolu4ka
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 409
14.01.2014, 18:21  [ТС] 9
Если не ошибаюсь, то она проверяет, лежит ли число в пределах значений, указаных в 28-й строке.
Ну это по логике задачи
А как именно она проверяет, я понять не могу
0
wolf1396
6 / 6 / 6
Регистрация: 07.05.2013
Сообщений: 222
14.01.2014, 21:16 10
Цитата Сообщение от MrGluck Посмотреть сообщение
Элементарно:
здесь её нет
C++
1
2
int     test(long int a)
     {return ((a>>15)+1)&~1;}
а это (^) тогда что?
1
MastAKK
145 / 136 / 18
Регистрация: 13.10.2012
Сообщений: 592
14.01.2014, 21:32 11

Не по теме:

Код ужасен (внешне).


Скажи, у тебя он вообще работает как надо? У меня ф-ция test() всегда 0 возвращает...

Не по теме:

Код ужасен [1]

0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
14.01.2014, 21:35 12
wolf1396, ТС изначально скинула файл на форум, где функция test называлась по другому. Когда я сделал замечание - она исправила код (можно в течении 5 минут после публикации) и зачем то (!!!) еще и написала мне что мол я просто так придираюсь. А я, как писал уже выше, даже через поиск Ctrl + F проверил наличие сией функции.
1
HighPredator
5689 / 2008 / 723
Регистрация: 10.12.2010
Сообщений: 5,774
Записей в блоге: 3
14.01.2014, 21:40 13
Вот глядя на все это у меня возникла мысль, что код рассчитан изначально не на long int, а на short int.
0
Zla9_Kolu4ka
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 409
15.01.2014, 00:07  [ТС] 14
просто я когда написала код, смотрю, имя функции не test, а temp и подправила и даже не предала этому значения вообще, потому что temp функция была где то секунд 30

Вы тут начали какие то странные сообщения писать, а я не могу врубиться в чем дело !!!
Поэтому вам и показалось, что я на вас наезжаю
Никаких обид !!

PS
: ссори за флуд, просто Я НЕ МОГУ МОЛЧАТЬ, просто чтоб небыло обид
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
15.01.2014, 01:38 15
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
Вы тут начали какие то странные сообщения писать, а я не могу врубиться в чем дело !!!
а это тогда что:
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
поясни
а это что
Код C++
1
}while (test(a1) || d - a1 == 0 || test (d-a1));

Не по теме:

Ладно, видимо мы друг друга недопоняли. Я в вашу фразу вложил другой смысл.


Функция сначала сдвигает байты на 15 разрядов (считайте, что 2 в 15), потом к полученному результату в 10-ном формате добавляет 1 и далее, если число четное - оставляет как есть, иначе отнимает 1, т.е. обнуляет младший разряд

Добавлено через 1 минуту
До http://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{15} - 1 всегда будет выдавать 0
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
15.01.2014, 01:47 16
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
{return ((a>>15)+1)&~1;}
C++
1
2
3
4
5
6
a=a/32768;
a++;
a=a&0xFFFFFFFE;// обнуляет младший разряд приводит к меньшему четному
//вместо этого можно было написать
//if(a%2!=0)
// a--;
так понятней?

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
До всегда будет выдавать 0
только для положительных
для всех отрицательных не будет 0

Добавлено через 1 минуту
есть подозрение что это проверка на отрицательность числа
только написано было давно когда инт был 16 битным
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
15.01.2014, 01:50 17
Цитата Сообщение от ValeryS Посмотреть сообщение
для всех отрицательных не будет 0
для отрицательных манипуляции далее (инкремент и &~1) в 0 изменят.
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
15.01.2014, 01:59 18
Цитата Сообщение от MrGluck Посмотреть сообщение
для отрицательных манипуляции далее (инкремент и &~1) в 0 изменят.
да насчет всех я погорячился
ну вот число
-2147483648(0х80000000) надеюсь о 32 разрядных говорим
сдвиг
получаем 0хFFFF0000
инкремент 0хFFFF0001
&0xFFFFFFFE
=
0хFFFF0000
получается что это диапазон чисел
от 0 до 215
и малых отрицательных( больших по модулю)
только зачем это ума не приложу
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
15.01.2014, 02:03 19
ValeryS, все верно, но если тип занимает не более 2 байт. Я присоединяюсь к
Цитата Сообщение от HighPredator Посмотреть сообщение
Вот глядя на все это у меня возникла мысль, что код рассчитан изначально не на long int, а на short int.
0
Zla9_Kolu4ka
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 409
15.01.2014, 02:03  [ТС] 20
-2147483648(0х80000000) надеюсь о 32 разрядных говорим
Этот код под 16 бит, а не 32
0
15.01.2014, 02:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2014, 02:03

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

Error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "SHL"
visual studio выдал такую ошибку error C2400: синтаксическая ошибка во...

Не работает функция подсчета количеств букв "а" в словах
Подскажите пожалуйста почему не работает функция подсчета количеств букв &quot;а&quot; в...


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

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

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