PDA

View Full Version : محاسبه min&max در یک آرایه به روش تقسیم وحل؟؟؟



leilast
دوشنبه 17 دی 1386, 10:16 صبح
#include<conio.h>




#include<iostream.h>

#include<stdio.h>
float max=0,min=0;
int mid=0; float max1=0,max2=0,min1=0,min2=0;
//*************main************
void maxmin(int i,int j,float p,float m,float A[]);
void main()
{ int i,n; float A[50]={0};
clrscr();
cout<<"please enter the size of array\n";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"please enter the number:\n";
cin>>A[i];
}
maxmin(0,n-1,max,min,A);
cout<<"\nmax of number:"<<max;
cout<<"\nmin of number:"<<min;
getch();
}
//*************maxmin************
void maxmin(int i,int j,float p,float m,float A[])
{

if(i==j)
{
max=min=A[i];
return;
}
if(i==j-1)
{
if(A[i]<A[j])
{
max=A[j]; min=A[i];
}
else
{
max=A[i]; min=A[j];
}
return;
}
mid=(i+j)/2;
maxmin(i,mid,max1,min1,A);
maxmin(mid+1,j,max2,min2,A);
if(max1>max2)
p=max1;
else
p=max2;
if(min1<min2)
m=min1;
else
m=min2;

}


سلام خسته نباشین....لطف می کنین برنامه رو چک کنین؟؟
برنامه Erorr نمیده ولی جوابو درست برنمیگردونه
فکر می کنم min و max بابد به صورت اشاره گر فرستاده بشن!!! ولی اشاره گر بلد نستم:ناراحت:

delaram_2
دوشنبه 17 دی 1386, 12:46 عصر
هیچ ربطی به اشاره گر نداره.تابع ماکزیمم رو باید قبل از تابع main بذاری تا min و mox رو به تابع اصلی بتونه بفرسته لیلا جون!

max_15s
دوشنبه 17 دی 1386, 12:50 عصر
می تونی به جای استفاده از اشاره گر متغییر هات رو به این صورت تعریف کنی مثلا:

float& tفکر کنم بهش می کن متغییر مرجع ، وقتی اینجوری بنویسی حاصل تغییرات در تابع به برنامه بر می گردند ، مثل کلمه var توی پاسکال بود قبل از متغییر می نوشتیم

نکته دیگه اینکه متغییر های max1, max2, min1, min2 رو به صورت گلوبال تعریف کردی ، اما این چیزی نیست که نتیجه دلخواهت رو بده چون توی این جور برنامه ها (تقسیم و حل) مقدار هر بخش محاسبه و در محاسبه بخش بزرگتر به کار می رود ، اما با تعریف این متغییر ها به صورت گلوبال در هر بخش نتایج قسمت قبلی رو با نوشتن توی این متغییر ها از بین می بری.

نکته دیگه در قسمت شرط های خاتمه برای بازگشت باید مثل قسمت دوم به p و m مقدار بدی نه به max و min در نهایت تابع mxamin به این صورت در میاد و بقیه قسمتا درستن.


void MaxMin(int i,int j,float& p,float& m,float A[])
{
float Max1=0,Max2=0,Min1=0,Min2=0;
if(i==j)
{
p=m=A[i];
return;
}
if(i==j-1)
{
if(A[i]<A[j])
{
p=A[j]; m=A[i];
}
else
{
p=A[i]; m=A[j];
}
return;
}
mid=(i+j)/2;
MaxMin(i,mid,Max1,Min1,A);
MaxMin(mid+1,j,Max2,Min2,A);
if(Max1>Max2)
p=Max1;
else
p=Max2;
if(Min1<Min2)
m=Min1;
else
m=Min2;

}



هیچ ربطی به اشاره گر نداره.تابع ماکزیمم رو باید قبل از تابع main بذاری تا min و mox رو به تابع اصلی بتونه بفرسته
البته تعریف تابع قبل از main اومده و مشکلی نیست .

leilast
دوشنبه 17 دی 1386, 18:42 عصر
ممنون از لطفتون ولی من هنوز جواب نگرفتم
فکر میکنم موقع فراخونی تابع یه چیزی کمه
ولی چون اشاره گر بلد نیستم نمیدونم چی کار باید بکنم

max_15s
دوشنبه 17 دی 1386, 19:28 عصر
فایل ضمیمه اصلاح شده کدتون هستش ، سعی کردم توی توربو سی باشه ، و من جواب می گیرم .
اون تابعی که قبلا گذاشته بودم چون توی vc بود و نمی تونستم از نام های max و min‌ استفاده کنم لذا تمامش رو به Max , Min تغییر نام داده بودم ، ممکنه این تفاوت توی برنامه تون مشکل ایجاد شده باشه

ممکنه بیشتر توضیح بدید ؟ در مورد مشکلتون.

mina_2007
پنج شنبه 20 دی 1386, 21:59 عصر
سلام من تازه عضو این سایت شدم یه مشکلی دارم برنامه ای رو که می نویسم و ارسال می کنم جای عملگر ها و عملوندها به طور کلی همه چیز مثلا پرانتز و کاما جابجا میشه اگه لطف کنید راهنمایی کنید ممنون می شم

max_15s
جمعه 21 دی 1386, 08:36 صبح
در ویرایشگر از گزینه CODE استفاده کنید.
یعنی جایی که می خواهید کد رو قرار بدید اول کدتون رو کپی کیند و بعد در ویرایشگر روی اون علامت # کلیک کنید . بین دو تگ اضافه شده ، paste کنید.

farzad_delshad
پنج شنبه 30 خرداد 1387, 01:09 صبح
سلام
میشه لطف کنید سورس کد Max&Min با C رو هم پست کنید من با C کد رو نوشتم ولی error میده