PDA

View Full Version : کمک در بر طرف کردن خطای برنامه min و max



mehdidmc
پنج شنبه 12 آذر 1394, 21:22 عصر
با سلام به همه دوستان برنامه نویس
من برنامه پیدا کردن min و max رو به روش تقسیم وحل نوشتم ولی مقدار درستی رو نمایش نمی ده
دوستان اگه ممکنه کمکم کنید چون این پروژه ام هست
اینم کدش :

#include <iostream.h>

static void maxmin(int,int,int *,int *);
int num[20];


int main(int argc, char *argv[])
{
int n,i,low,high;
int max,min;
cout<<"Enter Nuber Of The Array Elements :"<<endl;
cin >> n;
for(i=0;i<n;i++)
{
cout<<"Enter The Number :" ;
cin>>num[i];
}
maxmin(0,n-1,&min,&max);
cout << "The Maximume Element Is :" << max << endl;
cout<<"The Minimume Element is :"<<min<<endl;
return 0;
}
static void maxmin(int low,int high,int *min,int *max)
{
int min1,max1;
if(low==high)
*max=*min=num[low];

else if(high==(low+1))
{
if(num[low]<num[high])
{
*max=num[high];
*min=num[low];
}
else if(num[low]>num[high])
{
*max=num[low];
*min=num[high];
}
else
*max=*min=num[low];
}
else
{
int mid=(low+high)/2;
maxmin(low,mid,min,max);
maxmin(mid+1,high,&min1,&max1);
}
if(*max<max1)
*max=max1;

if(*min>min1)
*min=min1;
}

rahnema1
جمعه 13 آذر 1394, 00:14 صبح
سلام
فکر کنم برنامه را یه کم پیچیده کردید
سعی کنید حتی المقدور از اشاره گر استفاده نکنید
چه نیازی بوده که از کلمه static استفاده کردید؟
ببینید من شکل تابعی که باید بنویسید را اینجا میذاریم که مطابق اون برنامه را بنویسید
ابتدا یک struct تعریف کنید که قراره min و max داخل اون قرار بگیرند
تنها اشاره گری که استفاده می شه آرایه هست

struct Extermum
{
int min;
int max;
};
Extermum get_extermum(int* array, int length);

mehdidmc
جمعه 13 آذر 1394, 07:54 صبح
از راهنماییتون ممنون من برنامه رو توش تغییراتی دادم ولی تو خط 13 خطا می گیره
من زیاد تو برنامه نویسی خوب نیستم:بامزه:
یکم بهم ساده بگیرید
اینم کدش :


#include <iostream.h>

int main(int argc, char *argv[])
{
int n,i,num[20];
cout<<"Enter Number Of The Array Elements :"<<endl;
cin >> n;
for(i=0;i<n;i++)
{
cout<<"Enter The Number :" ;
cin>>num[i];
}
minmax(0,n-1,&min,&max); ///تو اين خط خطا داره
cout << "The Maximume Element Is :" << max << endl;
cout << "The Minimume Element is :" << min << endl;
return 0;
}
void minmax(int *num [i] ,int min ,int max)
{
int minr = 0, maxr = 0;
if (num [i]== num [0])
{
min = max = num [0];
return;
}
else if (num [i]== num [0+1])
{
if (num[1] > num [i])
{
max = num [0];
min = num [i];
}
else
{
max = num [i];
min = num [0];
}
}
else
{
int mid = (num [0] + num [i]) / 2;
minmax(num,num[0], mid, min, max);
minmax(num, mid + 1, num [i], minr, maxr);
if (minr < min)
min = minr;
else
min = min;
if (maxr > max)
max = maxr;
else
max = max;
}
}

rahnema1
جمعه 13 آذر 1394, 11:41 صبح
حالا شما دارید این مساله را به روش تقسیم و غلبه حل می کنید
فکر کنم لازمه سبک یادگیری خودتون هم بر اساس روش تقسیم و غلبه باشه!
یعنی ابتدا برای خودتون مسائل ساده تر از این تعریف و حل کنید و در اونها مسلط بشید وقتی توی اونها مسلط شدید می تونید این مساله را هم حل کنید
خب اون برنامه اول که تو پست اول گذاشته بودید فکر کنم درست تر بود! علت اینکه گفتم اشاره گر استفاده نکنید این بود که بیشتر باعث سردر گمی می شه
حالا من از شما می خوام که قبل از حل مساله اصلی، این چند مساله را حل کنید:
1. با استفاده از تابعی به شکل زیر مینیمم و ماکزیمم آرایه را به روش معمولی حل کنید

#include <iostream.h>
typedef struct
{
int min;
int max;
} Extermum;

Extermum get_extermum(int* array, int length)
{
Extermum extermum;
/.....
/.....
extermum.min = ....
extermum.max = ....
}

int main()
{
int array[] = {1, 4, 6, 2, 4, 7, 8, 2, 5, 9, 12, 3, 0};
Extermum extermum = get_extermum(.........., .........);
cout << "Min = " << extermum.min << endl;
cout << "Max = " << extermum.max << endl;
}

2. با استفاده از همون شکل تابع، شما نیمه اول آرایه را به get_extermum بفرستید تا مینیمم و ماکزیمم را به روش معمولی حساب کنه
3. با استفاده از همون شکل تابع، شما نیمه دوم آرایه را به get_extermum بفرستید تا مینیمم و ماکزیمم را به روش معمولی حساب کنه
4. با استفاده از همون شکل تابع، شما آرایه را به تابع بفرستید اما داخل تابع، آرایه را فقط به دو قسمت تقسیم کنید و مینیمم و ماکزیمم هر قسمت را به روش معمولی به دست بیارید و نهایتا مینیمم و ماکزیمم کل را به عنوان خروجی تابع قرار دهید
5. با استفاده از همون شکل تابع، شما آرایه را به تابع بفرستید و به روش تقسیم وغلبه مینیمم و ماکزیمم را به دست بیاورید.
6. اگر حوصله کردید با استفاده از تابعی که اشاره گر می گیره، مراحل بالا را انجام بدید.:لبخند:
نکته: اگه دلتون خواست می تونید جواب مسائل را هم اینجا قرار بدید تا بقیه ببینند
موفق باشید

mehdidmc
جمعه 13 آذر 1394, 15:42 عصر
بالاخره تونستم برنامه رو بنویسیم کدشو می زارم اینجا دوستان استفاده کنند:

#include<conio.h>
#include<iostream.h>
int main()
{
int i,high,a[100],max=0,min=1000,mid,n,max1,max2,min1,min2;
cout<<"Enter The Size Of The Array:"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
cout<<"Enter The Elements Of The Array:";
cin>>a[i];
}
high=n-1;
int low=0;
if(low==high)
max=min=a[low];
else if(low==high-1)
{
if(a[low]<a[high])
{
max=a[high];
min=a[low];
}
else
{
max=a[low];
min=a[high];
}
}
else
{
mid=(low+high)/2;
for(i=0;i<mid;i++)
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
}
max1=max;
min1=min;
max=0;
min=1000;
for(i=mid;i<n;i++)
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
max2=max;
min2=min;
if(max1<max2)
max=max2;
else
max=max1;
if(min1<min2)
min=min1;
else
min=min2;
cout << "maximum is:" << max << endl;
cout << "minimun is:" << min << endl;
getch();
return 0;
}

rahnema1
جمعه 13 آذر 1394, 15:51 عصر
ببخشید ولی متاسفانه اشتباهه
چون به روش تقسیم و غلبه هست یا به روش بازگشتی یا مشابه اون باید بنویسید
همون پست اول از این دو تا پست بهتر بود که