Admin2 12 Report post Posted April 19, 2008 (edited) Soalan dia:You are required to write a program to calculate the grade and print the result slip for each student. This program should have a main() function, average() function, grade() function , and a display() function. All functions must be called from the main() function. You are required to use if..else statements for this question. Use while loop to continue or stop the program. In average() function, get marks from main() and calculate the average, return the average to main().In grade() function, get average value from main() and specify the grade. Return a grade to main(). 49 and below- Fail50 to 69 - C70 to 79 - B80 to 89 - A90 to 100 - A+ In display() function, display name, average, and grade of student. ***********************************STUDENT INFORMATION***********************************Enter Student Name : EricEnter Subject Mark 1 :100Enter Subject Mark 2 :100Enter Subject Mark 3 :100***********************************RESULTS***********************************Student Name : EricAverage Marks : 100.00Grade : A+-----------------------------------Continue ? [ 0 - Exit] : 0Ni yang aku wat tanpa FUNCTION. :#include <stdio.h> float average(float); void grade(); void display(); main() { char name[100], grd[2]; float mark, avgmark, totalmark; int loop, i; totalmark = 0; loop = 1; //printf("Continue ? [0-Exit]: "); //scanf("%d", &loop); while (loop != 0) { //getchar(); // Clearkan char printf("***********************************\n"); printf("STUDENT INFORMATION\n"); printf("***********************************\n"); printf("Enter Student Name: "); gets(name); for (i=1; i<=3; i++) { printf("Enter Subject Mark %d: ", i); scanf("%f",&mark); totalmark = totalmark + mark; } avgmark = average(totalmark); //avgmark = totalmark/3; // send to average function //printf("Total Mark = %.2f", totalmark); printf("***********************************\n"); printf("RESULTS\n"); printf("***********************************\n"); printf("Student Name\t: %s\n", name); printf("Average Marks\t: %.2f\n",avgmark); if (avgmark >=90 && avgmark<=100) puts("Grade\t: A+"); else if(avgmark >=80 && avgmark<=89) puts("Grade\t: A"); else if(avgmark >=70 && avgmark<=79) puts("Grade\t: B"); else if(avgmark >=50 && avgmark<=69) puts("Grade\t: C"); else if(avgmark <49) puts("Grade\t: Fail"); printf("Continue ? [0-Exit]: "); scanf("%d", &loop); getchar(); } // Whilee loop punya end //printf("Grade\t: %s\n",grade); //printf("%s",name); } float average(float totalmark) { float avg; avg = totalmark/3; return (avg); } NI pula aku try wat guna function (IKUT SOALAN TAPI TAK JADI) #include <stdio.h> float average(float); char grade(float); void display(char,float,char); main() { char name[100], grd; // grd[2]; float mark, avgmark, totalmark; int loop, i; totalmark = 0; loop = 1; //printf("Continue ? [0-Exit]: "); //scanf("%d", &loop); while (loop != 0) { //getchar(); // Clearkan char printf("***********************************\n"); printf("STUDENT INFORMATION\n"); printf("***********************************\n"); printf("Enter Student Name: "); gets(name); for (i=1; i<=3; i++) { printf("Enter Subject Mark %d: ", i); scanf("%f",&mark); totalmark = totalmark + mark; } //avgmark = totalmark/3; // send to average function //printf("Total Mark = %.2f", totalmark); printf("***********************************\n"); printf("RESULTS\n"); printf("***********************************\n"); avgmark = average(totalmark); grd = grade(avgmark); display(name,avgmark,grd); printf("Continue ? [0-Exit]: "); scanf("%d", &loop); getchar(); } // Whilee loop punya end //printf("Grade\t: %s\n",grade); //printf("%s",name); } float average(float totalmark) { float avg; avg = totalmark/3; return (avg); } char grade(float avgmark) { char grade[5]; if (avgmark >=90 && avgmark<=100) { grade[5] = "A+" return grade; } else if(avgmark >=80 && avgmark<=89) { grade[5] = "A"; return grade; } else if(avgmark >=70 && avgmark<=79) { grade[5] = "B"; return grade; } else if(avgmark >=50 && avgmark<=69) { grade[5] = "C"; return grade; } else if(avgmark <49) { grade[5] = "Fail"; return grade; } } void display(char name, float avgmark, char grd) { printf("Student Name\t: %s\n", name); printf("Average Marks\t: %.2f\n",avgmark); printf("%s", grd); }ada sesiapa boleh tolong?? betik! i need ur help oso.. huhu Edited April 19, 2008 by afat Quote Share this post Link to post Share on other sites
crazy_labelle 0 Report post Posted April 20, 2008 betik lg.... huhuhuhuhu.... Quote Share this post Link to post Share on other sites
Admin2 12 Report post Posted April 20, 2008 mmm. masalah code tu ialah bila tak pakai function ok. tapi bila pakai function nak returnkan value char tu macam error je. sebab dia dah masukkan 3 markah bg student tiba2 keluar error. rasa nya ada masalah dengan call function. Quote Share this post Link to post Share on other sites
betik 11 Report post Posted April 20, 2008 (edited) string dlm C ni sebenarnya hanyalah character array...so kalu ko nk pass string yg mcm ko buat tu, ko pass mcm ko nk pass array...cth: char name[100]; /// display(name); void display(char name[]) //cam biasa ko nk pass array c0de ko yg kat bwh ni illegal... char grade[5]; if (avgmark >=90 && avgmark<=100) { grade[5] = "A+" //mana bole assign camni... return grade; //array x bole di return...huhu so, utk menyetelkan probelm ko, guna la pointer...huhu cth: char* grade4(float avgmark){ if (avgmark >=90 && avgmark<=100) { return "A+"; } ///////etc Edited April 20, 2008 by betik Quote Share this post Link to post Share on other sites
Admin2 12 Report post Posted April 20, 2008 (edited) bETIK2! hehe punya la terel programming. ni aku dah wat dah pakai pointer. tapi masalahnya program aku loop kali kedua dia error. untuk kali pertama je dia leh tulis A+ tu#include <stdio.h> float average(float); char *grade(float); void display(char[],float,char); main() { char name[100], grd; // grd[2]; float mark, avgmark, totalmark; int loop, i; totalmark = 0; loop = 1; //printf("Continue ? [0-Exit]: "); //scanf("%d", &loop); while (loop != 0) { //getchar(); // Clearkan char printf("***********************************\n"); printf("STUDENT INFORMATION\n"); printf("***********************************\n"); printf("Enter Student Name: "); gets(name); for (i=1; i<=3; i++) { printf("Enter Subject Mark %d: ", i); scanf("%f",&mark); totalmark = totalmark + mark; } //avgmark = totalmark/3; // send to average function //printf("Total Mark = %.2f", totalmark); printf("***********************************\n"); printf("RESULTS\n"); printf("***********************************\n"); avgmark = average(totalmark); grd = grade(avgmark); display(name,avgmark,grd); printf("Continue ? [0-Exit]: "); scanf("%d", &loop); getchar(); } // Whilee loop punya end //printf("Grade\t: %s\n",grade); //printf("%s",name); } float average(float totalmark) { float avg; avg = totalmark/3; return (avg); } char *grade(float avgmark) { if (avgmark >=90 && avgmark<=100) { return "A+"; } else if(avgmark >=80 && avgmark<=89) { return "A"; } else if(avgmark >=70 && avgmark<=79) { return "B"; } else if(avgmark >=50 && avgmark<=69) { return "C"; } else if(avgmark <49) { return "Fail"; } } void display(char name[], float avgmark, char grd[]) { printf("Student Name\t: %s\n", name); printf("Average Marks\t: %.2f\n",avgmark); printf("%s", grd); }ada salah kat mana2 ke? Edited April 20, 2008 by afat Quote Share this post Link to post Share on other sites
betik 11 Report post Posted April 20, 2008 tapi masalahnya program aku loop kali kedua dia error. untuk kali pertama je dia leh tulis A+ tuhuhuh..akupon heran camna c0de ko bole compile ...sbb:char name[100], grd; //grd hanyalah character sedangkan ko perlukan string... grd = grade(avgmark); //ko return pointer, bknnya string...walaopon string, still x bole camni... skang ni ko bole guna 2 cara...samada char array atau char pointer... kalu guna char array (guna strcpy dari string.h):#include <string.h> int main(){ char grd[7]; ////anotehr c0de strcpy(grd,grade(avgmark)); /////enother c0de } ataupon guna pointer:int main(){ char *grd grd = grade(avgmark); } Quote Share this post Link to post Share on other sites
Admin2 12 Report post Posted April 20, 2008 dia memang boleh tapi nape ada error untuk kali kedua loop? aku guna pointer:int main(){ char *grd grd = grade(avgmark); }nape eh? hmmmm Quote Share this post Link to post Share on other sites
OkEsh 1 Report post Posted April 20, 2008 huhu takleh nak tolong baiki le..ak bukan terer sgt guna pointer...ak pernah wat program camni tp guna class & object la Quote Share this post Link to post Share on other sites
betik 11 Report post Posted April 21, 2008 dia memang boleh tapi nape ada error untuk kali kedua loop? aku guna pointer:aku rasa sbb ko punya variable totalmark...sbb while loop ko, bila masuk ke iteration yg ke-2, totalmark ko still hold value yg lama...so, bila ko masuk for loop ni, totalmark ko akan bertambah dgn value yg lama dgn yg baru :for (i=1; i<=3; i++) { printf("Enter Subject Mark %d: ", i); scanf("%f",&mark); totalmark = totalmark + mark; } so, bila ko panggil function float average(float totalmark), ko mungkin akan return value yg melebihi 100...dan, bencana akan menimpa () bila ko panggil funtion char *grade(float avgmark)...sbb dlm funtion ni, ia perlu return sesuatu, tp dlm function tu, tiada satu pon yg memenuhi syarat2 if-else ko dan function tu tergantung disitu(dlm bahsa mudahnya)... so, ko kena wat samaada: 1) initialize totalmark ko dlm scope while loop, bkn kat luar: while (loop != 0){ float totalmark = 0; //initialize kat sini /////etc 2) function utk bg grade tu kena returnkan sesuatu...walaopon tidak memenuhi syarat2 if-else ko: char *grade(float avgmark){ if (avgmark >=90 && avgmark<=100) return "A+"; else if(avgmark >=80 && avgmark<=89) return "A"; else if(avgmark >=70 && avgmark<=79) return "B"; else if(avgmark >=50 && avgmark<=69) return "C"; else if(avgmark <49) return "Fail"; else printf("%f/n", avgmark); //try tengok apakah value dr totalmark..utk testing shj return "NA"; //return sesuatu, Not Applicable misalnya }aku still x sure sbb kat pc aku skang ni cuma ada VB6 je, xde compiler C/C++...tp, aku rasa sbb2 tu la...huhu...kalu xleh gak, elok ko try run in step...tengok kat mana yg sangkut...huhu Quote Share this post Link to post Share on other sites
Admin2 12 Report post Posted April 22, 2008 betik2. camni.. katakan soalan tu diubah nak displaykan grade kat bawah ni49 and below- Fail 50 to 69 - C 70 to 79 - B 80 to 89 - A 90 to 100 - A kira semua satu char je tak ada A+. aku dah wat dah program tu tak perlu pakai pointer. ni code dia. #include <stdio.h> float average(float); char grade(float); void display(char[],float,char); main() { char name[100], grd; // grd[2]; float mark, avgmark, totalmark; int loop, i; totalmark = 0; loop = 1; //printf("Continue ? [0-Exit]: "); //scanf("%d", &loop); while (loop != 0) { //getchar(); // Clearkan char printf("***********************************\n"); printf("STUDENT INFORMATION\n"); printf("***********************************\n"); printf("Enter Student Name: "); gets(name); for (i=1; i<=3; i++) { printf("Enter Subject Mark %d: ", i); scanf("%f",&mark); totalmark = totalmark + mark; } //avgmark = totalmark/3; // send to average function //printf("Total Mark = %.2f", totalmark); printf("***********************************\n"); printf("RESULTS\n"); printf("***********************************\n"); avgmark = average(totalmark); grd = grade(avgmark); display(name,avgmark,grd); printf("\n"); printf("Continue ? [0-Exit]: "); scanf("%d", &loop); getchar(); } // Whilee loop punya end //printf("Grade\t: %s\n",grade); //printf("%s",name); } float average(float totalmark) { float avg; avg = totalmark/3; return (avg); } char grade(float avgmark) { if (avgmark >=90 && avgmark<=100) { return 'A'; } else if(avgmark >=80 && avgmark<=89) { return 'A'; } else if(avgmark >=70 && avgmark<=79) { return 'B'; } else if(avgmark >=50 && avgmark<=69) { return 'C'; } else if(avgmark <49) { return 'F'; } } void display(char name[], float avgmark, char grd) { printf("Student Name\t: %s\n", name); printf("Average Marks\t: %.2f\n",avgmark); printf("Grade\t: %c", grd); } Masalahnya.. kali KEDUA loop dia tak keluar la char lain. contoh output cam kat bawah STUDENT INFORMATION Enter student Name: Putera Enter subject mark 1: 100 Enter subject mark 2: 100 Enter subject mark 3: 100 RESULT Student Name: Putera Average marks : 100 Grade: A Continue ? [0-Exit]: 1 Tapi untuk kali kedua bila continue STUDENT INFORMATION Enter student Name: Putera Enter subject mark 1: 100 Enter subject mark 2: 100 Enter subject mark 3: 100 RESULT Student Name: Putera Average marks : 100 Grade: <- tak keluar apa2!Camne? Quote Share this post Link to post Share on other sites
Admin2 12 Report post Posted April 22, 2008 (edited) ops aku dah dapathuhuhuhuhu... aku kena setkan totalmark = 0;Betik wrote:1) initialize totalmark ko dlm scope while loop, bkn kat luar:while (loop != 0){ float totalmark = 0; //initialize kat sini /////etc #include <stdio.h> float average(float); char grade(float); void display(char[],float,char[]); main() { char name[100], grd; float mark, avgmark, totalmark; int loop, i; loop = 1; while (loop != 0) { totalmark = 0; printf("***********************************\n"); printf("STUDENT INFORMATION\n"); printf("***********************************\n"); printf("Enter Student Name: "); gets(name); for (i=1; i<=3; i++) { printf("Enter Subject Mark %d: ", i); scanf("%f",&mark); totalmark = totalmark + mark; } printf("***********************************\n"); printf("RESULTS\n"); printf("***********************************\n"); avgmark = average(totalmark); grd = grade(avgmark); display(name,avgmark,grd); printf("\n"); printf("Continue ? [0-Exit]: "); scanf("%d", &loop); fflush(stdin); } } float average(float totalmark) { float avg; avg = 0; avg = totalmark/3; return (avg); } char grade(float avgmark) { if (avgmark >=90 && avgmark<=100) return 'A'; else if(avgmark >=80 && avgmark<=89) return 'A'; else if(avgmark >=70 && avgmark<=79) return 'B'; else if(avgmark >=50 && avgmark<=69) return 'C'; else if(avgmark <49) return 'F'; } void display(char name[], float avgmark, char grd) { printf("Student Name\t: %s\n", name); printf("Average Marks\t: %.2f\n",avgmark); printf("Grade\t: %c", grd); } thanx semua thanx all thanx betik thanx putera, huhuhuthanx semua thanx all thanx betik thanx putera, huhuhu Edited May 7, 2008 by afat Quote Share this post Link to post Share on other sites