PDA

View Full Version : برنامه لیست نمرات !



Arthes
دوشنبه 02 دی 1387, 21:16 عصر
سلام ، من یه برنامه نوشتم که قرار اسم و نمره سه تا دانشجو رو از قبل داشته باشه ،کاربر با وارد کردن اسم یک دانشجو نمره رو دریافت کنه ! مسئله اینه که من توی آرایه ها و اشاره گر ها به شدت مشکل دارم و کلا نمی تونم نمره و اسم دانشجو رو بهم ربط بدم . یه راه حلی توی ذهنم هست ولی اصلا برنامه ای که نوشتم جواب نمی ده اگه ممکنه به من کمک کنید . ( شرمنده اگه خیلی ابتداییه ) اینم کد من :




#include <iostream>
#include <string>
using namespace std;

//***********************

float gradebook(string student){
int j;
char list[]{"ali","ahmad","saeed"};
float *grades[]{2,12,20};
list=grades;
int i;
for(i=0 ; i<=0 ; i++){
if(student==list[i])
return grades[i];
else{
i++;
j=0;
}
}
}

//***********************

int main(){


int j,z;

string student;
cout<<"Enter Student Name : ";
cin>>student;
gradebook(student);
if(j=0)
cout<<"Invalid name";
else
cout<<gradebook(student);
cin>>z;
return 0;
}

Arthes
سه شنبه 03 دی 1387, 13:13 عصر
کسی نبود منو یه راهنمایی بکنه ؟

Saeed_m_Farid
چهارشنبه 04 دی 1387, 15:01 عصر
سلام دوست عزیز:


شرمنده اگه خیلی ابتداییه
صحبت ابتدایی بودن نیست، شما اگه یه نگاهی به روال این بخش بکنید می بینید که دوستان اکثرا تا اون موقعی که مشکل دارن تو سایت هستن ولی مشکلشون که حل شد دیگه مطالب رو دنبال نمیکنن؛ یا اصلا تا مشکل بعدی دیگه ازشون خبری نیست! واقعیتش ما خودمون بعنوان نمونه 5،6 ماهه دنبال یه C یا ++C کار میگردیم یا کسی نمیاد اگه هم کسی بیاد معمولا توقعات رو برآورده نمیکنه، خواهش میکنم نه از شما بلکه کسایی که بعدا میان و میرن سعی کنیم فقط مشکل رو حل نکنیم؛ باید بتونیم درست کد نوشتن و راه درست رو یاد بگیریم و به دوستان تا جایی که ممکنه کمک کنیم.
با عرض پوزش از مدیرای محترم سایت، من این رویه رو به شما پیشنهاد میکنم:



//---------------------------------------------------------------------------
#define MAX_STUDENTS 1024
typedef struct{
int grade;
char *firstName[64];
char *lastName[64];
char *address[512];
/* and so on ... */
}TSTUDENT, *PSTUDENT;
typedef struct {
TSTUDENT porperties[MAX_STUDENTS];
int count;
}TSTUDENTS, *PSTUDENTS;
//---------------------------------------------------------------------------
int gradebook(PSTUDENTS stdArr, char* stdName){
int iResult = -1;
for(int i=0; i<=stdArr->count; i++)
if(strcmp(stdArr->porperties[i].firstName, stdName) == 0)
iResult = stdArr->porperties[i].grade;
return iResult;
}
//---------------------------------------------------------------------------


بقیه روال رو با همکاری خودتون ادامه میدیم ...
با تشکر

SamaPic
چهارشنبه 04 دی 1387, 15:23 عصر
با سلام خدمت دوست عزيز.
راه حل دوستمان درست است ولي بهتر است از ارايه ي دو بعدي استفاده كرد.تا كمي حجم كار كاهش يابد.
خدانگهدار.

Arthes
چهارشنبه 04 دی 1387, 18:59 عصر
صحبت ابتدایی بودن نیست، شما اگه یه نگاهی به روال این بخش بکنید می بینید که دوستان اکثرا تا اون موقعی که مشکل دارن تو سایت هستن ولی مشکلشون که حل شد دیگه مطالب رو دنبال نمیکنن؛ یا اصلا تا مشکل بعدی دیگه ازشون خبری نیست! واقعیتش ما خودمون بعنوان نمونه 5،6 ماهه دنبال یه C یا ++C کار میگردیم یا کسی نمیاد اگه هم کسی بیاد معمولا توقعات رو برآورده نمیکنه، خواهش میکنم نه از شما بلکه کسایی که بعدا میان و میرن سعی کنیم فقط مشکل رو حل نکنیم؛ باید بتونیم درست کد نوشتن و راه درست رو یاد بگیریم و به دوستان تا جایی که ممکنه کمک کنیم.

یه جورایی حرف شما درسته و قبول دارم اکثرا میان اینجا تا مشکلاتشون حل بشه ، من خودم سعی می کنم یه چیزایی یاد بگیرم درسته که پست نمی دوم ولی از بحث هایی که می کنید استفاده می کنم . یکی از دلایلی که پست نمی دم اینه که کاربران اکثرا سطحشون بالاتر از منه ، اگه جایی باشه که بتونم کمک کنم مطمئن باشید کمک می کنم .

در مورد راه حل :
نمیشه با استفاده از همون عواملی که من نوشتم یه راه حلی بهم پیشنهاد بدید ؟چون خیلی از کدهایی رو که استفاده کردید من نمی شناسم و structure رو هنوز نخوندیم . ممنون میشم بتونید فقط با استفاده از آرایه ها و توابع و اشاره گر ها به من کمک کنید

Saeed_m_Farid
چهارشنبه 04 دی 1387, 21:35 عصر
خوب چون اشاره گر خونديد پس ديگه string هم استفاده نميكنيم، قبوله (اولين قدم) :

#include <iostream>
#include <string>
using namespace std;

//***********************
char *g_StudentsList[] = {"ali","ahmad","saeed"};
float g_grades[] = {2,12,20};

float getStudentGrade(char* nameStr)
{
float fResult=-1;
for(int i=0 ; i<3 ; i++)
if(strcmp(g_StudentsList[i], nameStr)==0)
fResult = g_grades[i];
return fResult;
}

int main()
{
char *stdName=""; // فقط همين = "" {اين قسمت كد تصحيح شد}

cout<<"Enter Student Name : ";
cin>>stdName;
float gResult = getStudentGrade(stdName);
if (gResult > -1)
cout<<gResult;
else
cout<<"Invalid name";
return 0;
}
با تشكر ...

Arthes
شنبه 07 دی 1387, 10:41 صبح
سلام آقا من روی این کد شما خیلی کار کردم ولی هر کاری می کنم کامپایل نمیشه ارور نمی ده ها فقط وسط کامپلیل وای میسه و هیچ تغییری ایجاد نمیشه . میشه شما هم اینو تست کنید ؟

Saeed_m_Farid
شنبه 07 دی 1387, 22:08 عصر
سلام آقا من روی این کد شما خیلی کار کردم ولی هر کاری می کنم کامپایل نمیشه ارور نمی ده ها فقط وسط کامپلیل وای میسه و هیچ تغییری ایجاد نمیشه . میشه شما هم اینو تست کنید ؟
واقعا چقدر كار كرديد! پست رو ويرايش كردم فقط كافي بود *char رو انتساب بديد تا پوينتر بگيره، راستش ميترسم memset اينا بگم شايد نخونده باشين. با انتساب *char اينكار اتوماتيك انجام ميشه؛ اشتباه از من بود، Excuse me!

Arthes
دوشنبه 09 دی 1387, 19:25 عصر
سلام آقا این کد مشکل داره ، نمی دونم مشکلش چیه ولی موقع وارد کردن اسم دانشجو ارور Dont send میده .
این ویرایش شده کد برای خودمه که اسم توابع و یه سری چیزهای دیگه رو تغییر دادم همین مشکل رو هم کد بالا داره ، یکی اگه ممکنه کمک کنه :


#include <iostream>
#include <string>
using namespace std;

//***********************

char *list[] = {"a","ali","ahmad","saeed"};
float grades[] = {12,2,12,20};

float gradebook(char *student){
int j;
int i;
float result=-1;
for(i=0 ; i<=0 ; i++){
if(strcmp (list[i],student) !=0)
result = grades[i];
else
result = -1;
return result ;

}
}
//***********************

int main()

{



int z;
char *student;
cout<<"Enter Student Name : ";
cin>>student;
float result = gradebook(student);

if (result < -1)
cout<<"Invalid name";
else
cout<<result ;

cin>>z;
return 0;
}

Saeed_m_Farid
سه شنبه 10 دی 1387, 23:40 عصر
این ویرایش شده کد برای خودمه که اسم توابع و یه سری چیزهای دیگه رو تغییر دادم همین مشکل رو هم کد بالا دارهسلام
دوست عزيز don't send بخاطر اينه كه شما به student حافظه اختصاص نميدين! تو پست قبلي گفتم... ضمنا ميشه بفرماييد مشکل تو کد بالا منظورتون كدوم كده؟

شما كدتون چند تا غلط داره :
1- اگه نتيجه strcmp مساوي صفر باشه يعني 2 تا رشته برابرند كه شما برعكس عمل كردين.
2- return‌رو گذاشتين توي for و از طرف ديگه لازم نيست تو else تون result رو false كنيد چون پيش فرضش false هست.
3- در نهايت result < -1 ‌رو نبايد چك كنيد چون نمره هيچ كس كمتر از صفر ديگه نميتونه باشه.
4- اين يعني چي؟

for(i=0 ; i<=0 ; i++)

نكته آخر : من واسه اينكه شما با تخصيص حافظه درگير نشين حداكثر اندازه رشته شما رو 32 كاراكتر در نظر گرفتم چون شما بزرگترين اسمتون 5 كاراكتره.

ونكته يه دونه بيشتر از آخر : اگه جدي نگيري لطفا دوباره كد رو شخم نزنين!


char *list[] = {"a","ali","ahmad","saeed"};
float grades[] = {12,2,12,20};

float gradebook(char student[32])
{
int i;
float result=-1;
for(i=0 ; i<4 ; i++)
if(strcmp (list[i],student) == 0)
result = grades[i];

return result;
};

int main(int argc, char* argv[])
{
int z;
char student[32];
cout<<"Enter Student Name : ";
cin>>student;
float result = gradebook(student);

if (result < 0)
cout<<"Invalid name";
else
cout<<result ;

cin>>z;
return 0;
}