محاسبه موقعیت مینیمم و ماکزیمم در آرایه در C++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

محاسبه موقعیت مینیمم و ماکزیمم در آرایه در C++

+2 امتیاز
اگر یک آرایه استاتیک float داشته باشیم float a[100] برای یافتن مینیمم و ماکزیمم در بازه 50 تا 75 تابعی وجود داره ؟فقط موقعیت را نیاز دارم
سوال شده شهریور 28, 1393  بوسیله ی parisa (امتیاز 46)   6 8 12

3 پاسخ

+3 امتیاز
 
بهترین پاسخ

به صورت زیر عمل کنید:

#include <iostream>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int arr[100]  ;
	for (size_t i = 0; i < 100; i++)
		arr[i] = i;
	auto pos = minmax_element(arr + 50, arr + 76);
	cout << "min pos:"<< std::distance(arr, pos.first) << endl;
	cout << "max pos:" << std::distance(arr, pos.second) << endl;

	return 0;
}

 

پاسخ داده شده شهریور 29, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد مهر 2, 1393 بوسیله ی BlueBlade
کد شما رو هر باز که اجرا می کنم خروجی واسه min عدد 50 و واسه max عدد 75 هست. چرا تغییر نمیکنه؟
بخاطر اینه که بصورت راندوم آرایه پر نشده . به این شکل پر شده 1-2-3-4....100
for (size_t i = 0; i < 100; i++)
        arr[i] = i;

پس طبیعتا min همیشه در index شماره 50 و max در index شماره 75 هستش .
+2 امتیاز

سلام. واسه این کار می تونی از کد زیر استفاده کنی. توی کد زیر ابتدا آرایه به اندازه 100 در نظر گرفته شده که با اعداد تصادفی در بازه 0 تا 100 آرایه پر میشه. از طریق دو تابع find_min_location و find_max_location مکان های min و  max رو در بازه 50 تا 75 جستجو می کنه. علت اینکه از 49 شروع شده به چون شماره گذاری آرایه ها از صفره پس خانه شماره 50 میشه 49.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int find_min_location(int x[]);
int find_max_location(int y[]);

int main()
{
	int a[100];
	srand(time(NULL));
	for (int i = 0; i < 100; i++)
	{
		a[i] = rand()%100;
	}
	int cnt = 0;
	for (int i = 0; i < 100; i++)
	{
		if (cnt % 4 == 0)
		{
			cout << endl;
		}
		cout << "a[" << i << "]= " << a[i] << "\t" ;
		cnt++;
	}
	cout << endl << endl;
	cout << "Minimum location is " << find_min_location(a) << endl;
	cout << "Maximum location is " << find_max_location(a) << endl;
	cin.get();
}


int find_min_location(int x[])
{
	int min_location = 49;
	int min = x[49];
	for (int i = 50; i < 75; i++)
	{
		if (x[i] < min)
		{
			min_location = i;
			min = x[i];
		}
	}
	return min_location;
}
int find_max_location(int y[])
{
	int max_location = 49;
	int max = y[49];
	for (int i = 50; i < 75; i++)
	{
		if (y[i] > max)
		{
			max_location = i;
			max = y[i];
		}
	}
	return max_location;
}

 

پاسخ داده شده شهریور 28, 1393 بوسیله ی Pashmak (امتیاز 644)   8 15 31
ویرایش شده شهریور 28, 1393 بوسیله ی Pashmak
+3 امتیاز

std::min_element یک iterator به محل min بر میگردونه . 

محل ایندکس رو میشه با استفاده از std::distance و محاسبه فاصله iterator از شروع آرایه  محاسبه کرد

به این شکل :

#include <iostream>
#include <algorithm>
#include <numeric>

int main()
{
	float arr[100] ;

	//meghdar dehi ba adad tasadofi
	std::iota(std::begin(arr), std::end(arr),(float)0.5);
	std::random_shuffle(std::begin(arr), std::end(arr));
	//

	//code zir  iterator be mahale min dar baze 50-75 bargasht mide
	auto it=std::min_element(std::begin(arr)+50, std::begin(arr)+75);

	int min_location = std::distance(std::begin(arr),it);//index min

	std::cout << min_location;
}

 

پاسخ داده شده شهریور 29, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...