محاسبه max , min بدون مقایسه - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

محاسبه max , min بدون مقایسه

+2 امتیاز
سلام من می خوام یک برنامه بنویسم که بدون دستوراتی مثل if , for , while , ... دو تا عدد از ورودی بگیره و بگه کدوم max و کدوم min هست.
سوال شده فروردین 6, 1393  بوسیله ی nick (امتیاز 11)   1 1 2

2 پاسخ

+2 امتیاز

سلام اصولا هدف از انجام این جور عملیات ها بدون استفاده از if else اینه که اصطلاحا cpu پرش یا branch نداشته به خاطر زمان گیر بودن.

یک روش branch-free که توی کتاب Hacker's Delight گفته شده :

 

                                             

 

پاسخ داده شده فروردین 6, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
+2 امتیاز

نمیخواد اینکارا رو بکنی توی ریاضی خوندیمش

ماکسیمم دو عدد برابر نصف  مجموع (قدرمطلق مجموع با قدرمطلق تفاضل دو عدد از هم) است

مینیمم دو عدد برابر نصف تفاضل (قدرمطلق تفاضل از قدر مطلق مجموع ) است

به شکل زیر دقت کنید

 

 

 

 

 

 

 

در ضمن توی همه زبان های برنامه نویسی قدر مطلق یک تابع دارد و نیاز به استفاده از if نیست البته هرچند که میتوان قدر مطلق هم بدون if نوشت

در پایین به چند تا از این تابع ها اشاره شده

'به زبان vb

abs(integer)

 

//در زبان سی

#include <stdio.h>
#include <stdlib.h> 

int main ()
{
  int n,m;
  n=abs(360);
  m=abs(-45);
  printf ("n=%d\n",n);
  printf ("m=%d\n",m);
  return 0;
}
/* کتابخانه دومی برای تابع قدر مطلق بید */



//در زبان سی پلاس پلاس

#include <iostream>   
#include <cmath>    

int main ()
{
  std::cout << "abs (17.568) = " << std::abs (17.568) << '\n';
  std::cout << "abs (-360)  = " << std::abs (-360) << '\n';
  return 0;
}

#برای زبان پایتون

print(abs(int(input("please enter the number"))))

 

البته زبان پایتون خودش تابع ماکس و مین دارد که در زیر مثال زدم

#!/usr/bin/python

print "max(80, 100, 1000) : ", max(80, 100, 1000)
print "max(-20, 100, 400) : ", max(-20, 100, 400)
print "max(-80, -20, -10) : ", max(-80, -20, -10)
print "max(0, 100, -400) : ", max(0, 100, -400)

اینم ماکس بدون if توی سی پلاس

 

#include <iostream> 
#include <algorithm> 

int main () {
  std::cout << "max(1,2)==" << std::max(1,2) << '\n';
  std::cout << "max(2,1)==" << std::max(2,1) << '\n';
  std::cout << "max('a','z')==" << std::max('a','z') << '\n';
  std::cout << "max(3.14,2.73)==" << std::max(3.14,2.73) << '\n';
  return 0;
}

برو حالش ببر

اینم جواب سوالت با سی پلاس

#include <iostream>
#include <algorithm> //برای ماکس و مین
using namespace std;

int main () {
	int a=0,b=0;
	cout << "Please Enter Two Number (space for seprate) :";
	cin >> a >> b;
	cout << "Maximum Number of " << a << " & " << b << " is : " << max(a,b) << endl;
	cout << "Minimum Number of " << a << " & " << b << " is : " << min(a,b) << endl;
  return 0;
}

اینم عکس

اگه خواستی بگو تا به زبونه مورد نظرت برنامش رو بنویسم

[email protected]

پاسخ داده شده فروردین 7, 1393 بوسیله ی Fire360Boy (امتیاز 2,524)   6 24 43
ویرایش شده فروردین 7, 1393 بوسیله ی Fire360Boy
حالا چطوری می خوای قدر مطلق رو بدون if بنویسی ؟!
خوب معلومه!!!!
به سختی!!!! :D
...