-
تقسیم و حل
من این کد نوشتم ولی نمیدونم مشکلش چیه؟
چون اجرا میشه ولی وسط کار erorr میده.
تو این کد min و max یه آرایه با روش تقسیم و حل پیدا میشه. فک میکنم مشکل الگریتم داره . اگه ممکنه یه کمکی بکنید.
اینم سورسش:
کد:
#include <iostream>
#include <conio.h>
using namespace std;
void maxmin(int*,int*,int);
void enternumbers(int);
int *a,max1,min1;
int main()
{
int *max,*min,n;
cout<<"\nEnter the number of items:";
cin>>n;
a=new int [n];
if(a==NULL) cout<<"error";
cout<<"\nEnter the numbers:";
enternumbers(n);
maxmin(max,min,n);
cout<<"max= "<<*max<<"\n"<<"min= "<<*min<<endl;
_getch();
return 1;
}
void enternumbers(int n)
{
int i;
for(i=0;i<n;i++)
cin>>a[i];
}
void maxmin(int *max, int *min,int n)
{
if( n == 1)
*min = *max = a[0];
else if( n == 2)
{
if(a[0] < a[1])
{
*min = a[0];
*max = a[1];
}
else
{
*min = a[1];
*max = a[0];
}
}
else
{
maxmin(max,min,n/2);
maxmin(&max1,&min1,n - n/2);
if( min1 < *min)
*min = min1;
if( max1 > *max)
*max = max1;
}
}
-
سلام
این اصلاح شده ی برنامه ی شما با کم تر ین تغییرات:
کد:
#include<iostream>
#include<conio.h>
using namespace std;
void maxmin(int*,int*,int*,int);
void enternumbers(int*,int);
int max1,min1;
int main()
{
int *max , *min, n;
max = new int; // added
min = new int; // added
cout << "\nEnter the number of items:";
cin >> n;
int* a = new int [n];
if (a == NULL)
cout<<"error";
cout<<"\nEnter the numbers:";
enternumbers(a,n);
maxmin(a,max,min,n);
cout<< "max= " << *max << "\n" << "min= " << *min << endl;
_getch();
return 1;
}
void enternumbers(int* a,int n)
{
int i;
for (i = 0; i < n; i++)
cin >> a[i];
}
void maxmin(int* a,int* max, int* min,int n)
{
if (n == 1)
*min = *max = a[0];
else
if (n == 2)
{
if (a[0] < a[1])
{
*min = a[0];
*max = a[1];
}
else
{
*min = a[1];
*max = a[0];
}
}
else
{
maxmin(a,max,min,n/2);
maxmin(a+n/2,&max1,&min1,n - n/2);
if (min1 < *min)
*min = min1;
if (max1 > *max)
*max = max1;
}
}
ولی من فکر می کنم این برنامه بهتره:
کد:
#include<iostream>
#include<conio.h>
using namespace std;
void enternumbers(int* a,int n)
{
int i;
for (i = 0; i < n; i++)
cin >> a[i];
}
void maxmin(int* a,int& max, int& min,int n)
{
if (n == 1)
min = max = a[0];
else
if (n == 2)
{
if (a[0] < a[1])
{
min = a[0];
max = a[1];
}
else
{
min = a[1];
max = a[0];
}
}
else
{
int max1,min1;
maxmin(a,max,min,n/2);
maxmin(a + n/2,max1,min1,n - n/2);
if (min1 < min)
min = min1;
if (max1 > max)
max = max1;
}
}
int main()
{
cout << "\nEnter the number of items:";
int n;
cin >> n;
int* a = new int [n];
if (a == 0)
cout << "Memory Not allocated. line: " << __LINE__;
cout << "\nEnter the numbers:";
enternumbers(a,n);
int max, min;
maxmin(a,max,min,n);
cout<< "max= " << max << "\n" << "min= " << min << endl;
_getch();
}
-
بابا دم شما گرم من که خیلی حال کردم.....................
حتما یه سر به وب لاگتون هم میزنم.
-
نمی دونم چرا برنامه حالت استانداردشو توی این فروم از دست میده!
-
میشه بگین مشکل کد به غیر از تابع maxmin کجا بود.
چون من وقتی تصحیحش کردم کار نکرد ولی وقتی برنامه ی شما رو کپی کردم به راحتی کار کرد؟
-
در برنامه ی شما اولا اشاره گر های max و min خطرناک هستند باید با new به آن ها مقدار مناسب می دادید.
ثانیا آرایه ی (اشاره گر) a باید آرگومان باشه نه متغیر عمومی.
نکته ی مهم بعدی a + n/2 ایت که نیمه ی دوم آرایه رو نشون می ده.
چیز دیگه ای یادم نمی یاد! :)
برنامه رو خط به خط اجرا کنید همه چیز مشخص میشه!
-
میشه بگین چه جوری میشه تو vcpp برنامه رو خط به خط اجرا کرد (تریس کردن).