Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: marsislav в Sep 19, 2010, 11:07



Титла: Задачки - Java...
Публикувано от: marsislav в Sep 19, 2010, 11:07
Напишете програма, която чете от конзолата две цели числа (Integer) и отпечатва колко числа има между тях, такивао, че остатъка от делението им на 5 да е нула.

И още една -

Напишете програма, която чете от конзолата две цели числа (Integer) и отпечатва по-голямато от тях - без използването на сравнение.


Титла: Re: Задачки - Java...
Публикувано от: b2l в Sep 19, 2010, 11:18
без използването на сравнение.

Това ще ми е интересно да го видя.
Иначе задачките са интерсни - успех в писането им :D. Като си готов им пусни решението и тук.


Титла: Re: Задачки - Java...
Публикувано от: task_struct в Sep 19, 2010, 11:44
@backtolife, ето ти решението на С, защото нали знаеш какво мисля за гореспоменатият "език"
Код
GeSHi (C):
  1. int x;  // we want to find the minimum of x and y
  2. int y;  
  3. int r;  // the result goes here
  4.  
  5. r = x ^ ((x ^ y) & -(x < y)); // max(x, y)
  6.  
  7.  

@marsislav, времето за написване на тоя пост ти е отнело повече време, от това да седнеш да прочетеш как се прави тази програма  ???


Титла: Re: Задачки - Java...
Публикувано от: c111100101 в Sep 19, 2010, 12:25
То това са задачи за първокласници в програмирането. Ако с тях не може да се справи автора на темата, къде е тръгнал въобще?


Титла: Re: Задачки - Java...
Публикувано от: b2l в Sep 19, 2010, 13:34
@backtolife, ето ти решението на С, защото нали знаеш какво мисля за гореспоменатият "език"
Код
GeSHi (C):
  1. int x;  // we want to find the minimum of x and y
  2. int y;  
  3. int r;  // the result goes here
  4.  
  5. r = x ^ ((x ^ y) & -(x < y)); // max(x, y)
  6.  
  7.  
Код
GeSHi (C):
  1. r = x ^ ((x ^ y) & -(x < y));

Това не е ли пак сравнение? Или нещо бъркам понятията???


Титла: Re: Задачки - Java...
Публикувано от: task_struct в Sep 19, 2010, 13:43
Това не е ли пак сравнение? Или нещо бъркам понятията???

Според мен под сравнение имат в предвид if () :)


Титла: Re: Задачки - Java...
Публикувано от: bop_bop_mara в Sep 19, 2010, 13:46
Това не е ли пак сравнение? Или нещо бъркам понятията???

Според мен под сравнение имат в предвид if () :)
E то като ще е само без if: (x>y)?x:y  :D Ама да де, то така зададено условието, трябва да гадаем какво искат да видят тези, които искат да видят решението  ::)


Титла: Re: Задачки - Java...
Публикувано от: c111100101 в Sep 19, 2010, 13:56
Това не е ли пак сравнение? Или нещо бъркам понятията???

Според мен под сравнение имат в предвид if () :)
E то if е по скоро условие а реалното сравнение си е в скобките след него :)


Титла: Re: Задачки - Java...
Публикувано от: task_struct в Sep 19, 2010, 14:33
if-а се преобразува в инструкция за условен jump към следваща инструкция в зависимост дали изчислението в скобите е 0 или различно от нула. Поради тази причина следният код е напълно коректен и ще се изпълни кода в тялото на if-a, а не на else-а:
Код
GeSHi (C):
  1. int x =5;
  2.  
  3. if ( x = 4 )
  4. {
  5. }
  6. else
  7. {
  8. }
  9.  


А x < y си е аритметична операция, която връща 0 или 1. :)


Титла: Re: Задачки - Java...
Публикувано от: b2l в Sep 19, 2010, 14:40
@task_struct
//off
Голяма усмивка си извадил :) :) :).


Титла: Re: Задачки - Java...
Публикувано от: gat3way в Sep 19, 2010, 14:57
Код:
#include <unistd.h>
#include <stdio.h>
#include <stdint.h>

int maxv(int a, int b)
{
    int32_t c,d;

    c=((a-b)>>31)+1;
    d=((b-a)>>31)+1;
    return a*c+b*d;
}

Всичко е само побитово отместване и проста аритметика (събиране, изваждане и умножение). Сигурно има и по-елегантен начин, но това ми хрумна за момента.

Хм, обаче се чупи ако двете числа са еднакви :)


Титла: Хмм...
Публикувано от: marsislav в Sep 19, 2010, 20:19
Аз самия не мога да разбера много добре самото условие на задачата и за това зададох въпроса тук.
Задачата е от книгата на Светлин Наков и колектив - "Въведение  в програмирането с Java", глава 4, задача 5. Цитирам условието :
 
"5.  Напишете програма, която чете от конзолата две цели числа и отпечатва по-голямото от тях. Реализирайте програмата без използването на сравнение. Забележка: задачата изисква малко да помислите!"

И след това в "Решения и упътвания" в края на главата -
"5.  Нека числата са a и b. Използвайте следните преобразувания: a=a-b; b=b+a; a=b-a."
Може да звучи тъпо, но нещо не успявам да стопля как да я реализирам. Иначе с IF/ELSE и оператори за сравнение е лесно.


Титла: Re: Задачки - Java...
Публикувано от: bop_bop_mara в Sep 19, 2010, 23:28
По мои сметки тия преобразувания разменят стойностите на двете числа... При това, ако a е положително, а b - отрицателно, може да стане голям фън, ако се превърти int-a  ;D
Иначе, какво значи, че не можеш да стоплиш как да ги реализираш?