PDA

View Full Version : مبتدی: مشکل در فرستادن یه آرایه از کلاس به یک تابع



Collector
یک شنبه 13 آذر 1390, 22:10 عصر
سلام

من این کلاس رو دارم
class Student
{
public :
int Avg;
};


Student *Array_Of_Stu = new Student[Max];

Sort(Array_Of_Stu Avg[]

حالا میخوام عنصر Avg از Array_Of_Stu رو به عنوان یه آرایه به یک تابع بفرستم. اما این ارور رو نشون میده


Sort(Array_Of_Stu Avg[][

BeginnerProgrammer
یک شنبه 13 آذر 1390, 22:56 عصر
لطفا کدو کامل بذارید

_hamid
یک شنبه 13 آذر 1390, 23:20 عصر
class Student
{
public :
int Avg;
};

/definitions
Sort(Student *stus)
{
...
}

//allocating
Student *stu = new Student[Max];

//pass
Sort(Student);

Collector
یک شنبه 13 آذر 1390, 23:33 عصر
class Student
{
public :
int Avg;
};

/definitions
Sort(Student *stus)
{
...
}

//allocating
Student *stu = new Student[Max];

//pass
Sort(Student);

ممنون که پاسخ دادید
اما من میخوام Avg رو به Sort بفرستم.

jeson_park
دوشنبه 14 آذر 1390, 09:52 صبح
سلام
فکر کنم این به دردتون بخوره

#include <stdio.h>

class Student
{
public :
int Avg;
};

void Sort(Student *stus,int a)
{
printf("%d",stus->Avg);

}



int main(void)

{
//allocating
Student *stu = new Student[10];

//pass
Sort(stu,stu->Avg);


getchar();



return 0;

}

Collector
دوشنبه 14 آذر 1390, 10:38 صبح
ممنون که کمک میکنید
این سورس برنامه من میخوام Avg از کلاس Student رو به تابع Sort بفرستم.

# include <iostream.h>
# include <conio.h>

# define Max 4

class Student{
public :
int Avg;
};

Student *Array_Of_Stu = new Student[Max];

void Insert();
void Sort(int a[]);

int main(void)
{
Insert()
Sort(new Array_Of_Stu Avg[])
return 0;
}

void Insert()
{
int count;

clrscr();

for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> Array_Of_Stu[i].Avg;
}
}

void Sort(int a[])
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a[i]>a[j])
{
x = a[i];
a[i] = a[j];
a[j] = x;
}
cout<<a[Max-1];
}

BeginnerProgrammer
دوشنبه 14 آذر 1390, 10:54 صبح
این کد اجرا میشه بعد از گرفتن 4 عدد ماکس رو چاپ میکنه


# include <iostream>
# include <conio.h>
using namespace std;
# define Max 4

class Student{
public :
int Avg;
};

Student *Array_Of_Stu = new Student[Max];

void Insert();
void Sort(Student *);

int main(void)
{
Insert();
Sort(Array_Of_Stu);
return 0;
}

void Insert()
{
int count;

//clrscr();

for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> Array_Of_Stu[i].Avg;
}
}

void Sort(Student* a)
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a[i].Avg>a[j].Avg)
{
x = a[i].Avg;
a[i].Avg = a[j].Avg;
a[j].Avg = x;
}
cout<<a[Max-1].Avg;
}

Collector
دوشنبه 14 آذر 1390, 11:20 صبح
این کد اجرا میشه بعد از گرفتن 4 عدد ماکس رو چاپ میکنهخیلی ممنونم جواب داد ولی من میخوام این تابع رو به عنوان تابع سورت در برنامه استفاده کنم.
بنابراین باید avg را از ورودی بگیرد.برای این مشکل باید چه کار کنم.
از اول هم مشکل همین بود و گرنه میشد کل کلاس رو به تابع فرستاد و از یک عنصر اون استفاده کرد.

BeginnerProgrammer
دوشنبه 14 آذر 1390, 13:18 عصر
اینکه شما بخواین آرگومان ورودی تابعتون آرایه int باشه، باید کل اعدادی که قراره sortبشن یکجا داشته باشین کد خودتونم که نمیشه چون شما دارین یک آرایه از نوع کلاستون ایجاد میکنید و این به این معنا نیست که عضوهای کلاس هم در یک آرایه باشه. بنظرم اگه آرایه intگلوبال تعریف کنید و همونجا تو تابع insert که اعداد رو میگیره تو این آرایه هم ذخیره کنه،بعد تو main برنامه این آرایه رو به تابع sort ارسال کنید :متفکر:

developing
شنبه 19 آذر 1390, 11:32 صبح
با سلام

من فكر مي كنم در منطلق برنامه يه كم مشكل هست.
1- اولا اگه يه آرايه از كلاسها ايجاد كنيد پس بايد براي مرتب كردن آن هم تابع (sort)شما بايد يه پارامتر ورودي داشته باشه كه آرايه اي از كلاستون رو دريافت كنه نه آرايه اي از عدد. مثل:

#include <iostream>
#include <conio.h>
using namespace std;
#define Max 4

class Student{
public :
int Avg;
};

Student *Array_Of_Stu = new Student[Max];

void Insert();
void Sort(Student *);

int main(void)
{
Insert();
Sort(Array_Of_Stu);
getch();
return 0;
}

void Insert()
{
for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> Array_Of_Stu[i].Avg;
}
}

void Sort(Student* a)
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a[i].Avg>a[j].Avg)
{
x = a[i].Avg;
a[i].Avg = a[j].Avg;
a[j].Avg = x;
}
cout<<a[Max-1].Avg;
}


2- اگه مي خواين كه تابع sort شما آرايه اي از عددها رو بگيره و مرتب كنه كه بايد تعريف كلاستون رو عوض كنيد.مثل:

#include <iostream>
#include <conio.h>
using namespace std;
#define Max 4

class Student{
public :
int Avg[Max];
};

Student list;

void Insert();
void Sort(int[]);

int main(void)
{
Insert();
Sort(list.Avg);
getch();
return 0;
}

void Insert()
{
for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> list.Avg[i];
}
}

void Sort(int a[])
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a.Avg[i]>a.Avg[j])
{
x = a[i].Avg;
a.Avg[i] = a.Avg[j];
a.Avg[j] = x;
}
cout<<a.Avg[Max-1];
}


در برنامه هاي بالا اشتباه شما در موارد زير است:
در خطوط 8و 11 و14و 19و 29 و 33 و 38و 40و 41و 42و 44

هرگاه نمونه ي جديدي از كلاس را ايجاد و به تابع ارسال كنيد تمام اطلاعاتي كه در نمونه ي قبلي ذخيره شده است پاك مي شود.