PDA

View Full Version : รบกวนดูโค๊ดcทีคับ



mushachi71
08-05-2007, 07:49 PM
คือว่าไม่ต้องลงความเห็นแล้วนะคับ ขอบคุณทุกท่านที่มาลงความเห็นให้นะคับ


#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
int temp,grade,tgrade,tcredit=0,credit,i,j,sub;
printf("Enter num sub:");
scanf("%d",&sub);
for(i=1;i<=sub;i++)
{
printf("Enter credit %d :",i);
scanf("%d",&credit);
tcredit+=credit;
}
for(j=1;j<=sub;j++)
{
printf("Enter char grade %d :",j);
scanf("%c%c",&grade);
if ((grade == &#39;A&#39;) || (grade == &#39;a&#39;))
{ temp = 4; }
if ((grade == &#39;B&#39;) || (grade == &#39;b&#39;))
{ temp = 3; }
if ((grade == &#39;C&#39;) || (grade == &#39;c&#39;))
{ temp = 2; }
if ((grade == &#39;D&#39;) || (grade == &#39;d&#39;))
{ temp = 1; }
if ((grade == &#39;F&#39;) || (grade == &#39;f&#39;))
{ temp = 0; }

tgrade+=temp;
}
printf("\nTotalcredit:%d",tcredit);
printf("\nTotalgrade :%d",tgrade);
getch();
}[/b]



gradeมันไม่ยอมรวมอะคับ สงสัยว่าจะผิดต้องไหนป่าวไม่แน่ใจ ไม่ได้จับนานสนิทเกาะ :lol: ผมสงสัยว่าtempจะไม่ได้เปลี่ยนค่า โปรแกรมนี้หาค่าเกรดเฉลี่ยคับ กรอกเกรดเป็นตัวอักขระคับรบกวนทีคับ

smith
08-05-2007, 09:32 PM
บรรทัดที่18ทำไมมี %c สองตัวล่ะครับ หรือว่าผมมึน

ลองใช้ case แทนดูรึยังครับ น่าจะเวิร์กกว่านะ เพราะผมก็เคยเขียนทำนองนี้ ใช้caseแทน

mushachi71
08-05-2007, 10:04 PM
บรรทัดที่18ทำไมมี %c สองตัวล่ะครับ หรือว่าผมมึน
[/b]


ผมจำไม่ได้เหมือนกันคับ แต่มันต้องใส่เพราะไม่ใส่มันจะ
printf("Enter credit %d :",i);
ให้กรอกแค่อันเดียวอันที่เหลือมันเล่นข้ามหมดออกloopซะงั้นคับ
ส่วนcase ใช้แล้วคับแต่ไม่ค่อยworkเท่าไรอย่างไรก็ขอบคุณคับที่แนะนำ

pspn.n
09-05-2007, 10:39 AM
ที่คุณใช้ if ((grade == &#39;A&#39;) || (grade == &#39;a&#39;)) มันไม่เข้าเงื่อนไขครับ
ลอง Debug ดูก็ได้ครับ ว่ามันรับค่ามาเป็นอะไร

ผมมีตัวอย่างในการ Compare มาให้ดูครับ แต่ใช้เป็น String แทน ครับ น่าจะประยุคใช้ได้

Example:
[code]/* strcmp example */
#include <stdio.h>
#include <string.h>

int main ()
{

neoclassic
09-05-2007, 12:52 PM
ผมว่า ออกแบบใหม่ เหอะ algo มันแปลกๆ


printf("\nTotalcredit:%d",tcredit);[/b]
อันเนี้ย พอเข้าใจ ว่า เอา credit มา บวกกัน



printf("\nTotalgrade :%d",tgrade);[/b]
งง มันจะแสดงผล ในรูปแบบไหน ?? ทีละบรรทัดเหรอ??


สนุกดี ภาษา c ทำให้นึกถึงสมัยเรียน....

mushachi71
09-05-2007, 01:09 PM
ผมว่า ออกแบบใหม่ เหอะ algo มันแปลกๆ

[/b]
ผมก็ว่าแบบนั้นแหละคับ ขอบคุณทั้ง2ท่านมากนะคับ เอิ้กๆลองคิดเล่นๆดูอ่ะคับ :o

deaizthae
14-07-2007, 06:18 AM
มาเยี่ยมด้วยคน

plioilq
02-08-2007, 06:35 AM
scanf("%c%c",&grade); <----------- ผมว่ามันผิด Syntax มากกว่านะครับ

algo ถึงนะมึนๆ หน่อยแต่ก็ไม่น่าจาเปนปันหาอาไรกะโปรแรม คำนวนแบบนี้

ผมว่า ตัวแปล grade นี่มานต้องเปน char ไม่ใช่หรอครับ

เอ๊ะ หรือว่าเขียนผิดหว่า ชักงงแฮะ

tatjang
16-08-2007, 07:16 PM
loop อันที่สอง ใช้สวิสต์ไม่ดีกว่าเหรอค่ะ = ="

armcstu
27-09-2007, 04:17 AM
ปล. ผมยังไม่ได้ลองไป compile เลย
ตามความคิดผมนะ ลองดูที่อื่นถ้าไม่ ผิด ทามไมไม่ดูที่ if ละ เหงแต่ if แล้วไม่ลองใส่ else if ไปบ้างล่ะครับ เพราะว่าอาจจะมีส่วนก็ได้ เพิ่งเรียนไปเองอ่ะ เคยเจอปัญหาแบบ แก้ไม่ตก เหมือนกานยังไงก็ switch ดีกว่านะง่ายดี
แล้วอีกอย่างนะ ลองอ่าน บรรทัดที่ error อ่ะคับดูว่าเขียนว่าไร ง่ายกว่านะ

ipumu
29-09-2007, 04:45 PM
ถ้าตามที่ผมเข้าใจนะครับ credit คือหน่วยกิจใช่มะครับ ให้เราใส่หน่วยกิจกับเกรดลงไปแล้วให้มันหาเกรดเฉลี่ยให้

#include<stdio.h>
#include<conio.h>
main()
{

int temp,tgrade=0,tcredit=0,credit,i,j,sub;
char grade;
printf("Enter num sub:");
scanf("%d",&sub);

for(j=1;j<=sub;j++)
{
printf("Enter credit %d :",j);
scanf("%d",&credit);
tcredit+=credit;
printf("Enter char grade %d :",j);
fflush(stdin);
grade=getchar();
if ((grade == &#39;A&#39;) || (grade == &#39;a&#39;))
{ temp = 4; }
if ((grade == &#39;B&#39;) || (grade == &#39;b&#39;))
{ temp = 3; }
if ((grade == &#39;C&#39;) || (grade == &#39;c&#39;))
{ temp = 2; }
if ((grade == &#39;D&#39;) || (grade == &#39;d&#39;))
{ temp = 1; }
if ((grade == &#39;F&#39;) || (grade == &#39;f&#39;))
{ temp = 0; }

tgrade+=temp*credit;
}
printf("\nTotalcredit:%d",tcredit);
printf("\nTotalgrade :%g",(float)tgrade/tcredit);
getch();
} [/b]

ถ้าผมเข้าใจผิดก็ขอโทษทีนะครับไม่รู้ว่าไรคือ credit

Unknownx
29-09-2007, 05:45 PM
ถูกค้าบบ credit ในที่นี้คือ หน่วยกิจ , input คือ เกรดที่ได้ A B C D กับเครดิตวิชานั้นๆ output เปน เกรดเฉลี่ย :rolleyes:

ksolomon
29-09-2007, 10:32 PM
ผมว่าตัวแปร tgrade กะ temp มันมั่วอ่ะ เหตุผลก็น่าจะเหมือนกับท่าน pspn ว่า ก็คือมันไม่รุว่ารับค่ามาอะไร

มันเลยใส่ค่า temp มั่วไปเลย แล้วคราวนี้พอเรา printf ออกมามันเลยเป็นค่ามั่วที่loop 2 มานให้ค่ามั่วมาบวกๆกัน

แต่มะรุจริงมะเด้อ สันนิษฐานเอา

แต่อย่างที่ท่าน neo ว่าก็น่าคิดนะครับ มานจะแสดงผลยังไง

ก็ยังคงเปนปัญหาต่อปาย เดี๋ยวพยายามหาวิธีแก้ อิอิ

khawtaan
30-09-2007, 12:01 AM
ผมว่า Code ช่วงนี้เปลี่ยนให้อยู่ใน For ตัวเดี่ยวจะทำให้ทำงานได้ไว้ขึ้นน่ะครับผม และอีกเหตุผมนึ่งก็คือมัน For เหมือนกัน จะทำซ้ำทำไม 2 รอบ

[code]
for(i=1;i<=sub;i++)
{

ipumu
02-10-2007, 06:20 PM
ผมก็เขียนลวกๆให้ดูแหละครับถ้าเขียนแบบนี้ส่งที่ ม. ผมนะครับโดนด่าหัวบวมแน่
เพราะถ้าจะเขียนจริงๆก็ต้องเชคอีกครับว่ากดตัวอักษร แค่ a-f ไม่ได้กดตัวอื่น
หน่วยกิจต้องไม่เป็น 0 และอื่นๆอีกมากมายแล้วผมก็ลองเขียนแบบ switch case มาให้ดูเห็นชอบให้ if กัน
ลองเปลื่ยนแนวบ้าง
**Hidden Content: Check the thread to see hidden data.**

drakengi
02-07-2008, 11:07 AM
ผมก้อว่า algo ดูงง ๆ น่ะ หรือผมไม่เข้าใจโจทย์หว่า จาก algo แล้วไม่น่าจะออกเกรดเฉลี่ยได้ เพราะเมือรับ input เป็น หน่วยกิจ ก้อน่าจะรับ

input เกรดเพื่อนำไปคูณเลย ภายใน for เดวกัน แล้วสร้างตัวแปรมาเก็บ global 2 ตัว 1 ตัวไว้เก็บค่าที่คูณได้ 1 ตัวไว้เก็บหน่วยกิจรวม

นอกนั้นก้อไม่มีอาไร ก้อ output ออกมา โดยนำ ค่าที่คูณได้ / หน่วยกิจ จบ!

ปล. เค้าคิดเกรดกันอย่างนี้ใช่ป่ะ ลืม :mellow:

alcoholic
02-07-2008, 03:07 PM
ถึงจาไม่ให้ตอบแต่อยากลง ไม่ได้เขียน C นานจนลืมไปแล้วถ้าผิดตรงไหนขออภัยด้วยนะครับ
[code]
#include <stdio.h>

int main(int argc, char *argv[])
{

jaeplayboy
18-07-2008, 12:57 PM
เห็นแล้วเลยอยากเขียนบ้าง เลยลองๆ มันก็รันผ่านนะ แต่อาจดูแปลกๆไปบ้าง แล้วแต่ประยุกต์อะ หุหุ




#include<stdio.h>
#include<conio.h>
main()
{

int temp,credit,i,j,sub;
float tgrade,tcredit;
char grade;
printf("Enter num sub:");
scanf("%d",&sub);

for(j=1;j<=sub;j++)
{
printf("Enter credit %d :",j);
scanf("%d",&credit);
tcredit+=credit;
printf("Enter char grade %d :",j);
fflush(stdin);
grade=getchar();
if ((grade == &#39;A&#39;) || (grade == &#39;a&#39;))
{ temp = 4; }
if ((grade == &#39;B&#39;) || (grade == &#39;b&#39;))
{ temp = 3; }
if ((grade == &#39;C&#39;) || (grade == &#39;c&#39;))
{ temp = 2; }
if ((grade == &#39;D&#39;) || (grade == &#39;d&#39;))
{ temp = 1; }
if ((grade == &#39;F&#39;) || (grade == &#39;f&#39;))
{ temp = 0; }

tgrade+=temp*credit;
}
printf("\nTotalcredit:%.0f",tcredit);
printf("\nTotalgrade :%.2f",tgrade/tcredit);
getchar();
}

Hacker_Dark
05-08-2008, 04:46 PM
ขอศึกษาด้วยคนนะครับ :)

PopJ
28-09-2008, 11:16 AM
ผมว่าเปลี่ยนจาก if ไปเรื่อยๆ เป็น else if นะครับ

trekker
09-10-2008, 08:56 AM
คือว่าไม่ต้องลงความเห็นแล้วนะคับ ขอบคุณทุกท่านที่มาลงความเห็นให้นะคับ
gradeมันไม่ยอมรวมอะคับ สงสัยว่าจะผิดต้องไหนป่าวไม่แน่ใจ ไม่ได้จับนานสนิทเกาะ :lol: ผมสงสัยว่าtempจะไม่ได้เปลี่ยนค่า โปรแกรมนี้หาค่าเกรดเฉลี่ยคับ กรอกเกรดเป็นตัวอักขระคับรบกวนทีคับ
[/b]
- ค่า tgrade ในตอนแรก ให้มันมีค่า = 0 ด้วยครับ
- scanf("%c%c",&grade); << ใส่ %c ตัวเดียวพอครับ
- เปลี่ยนจาก if เป็น else if เพื่อไม่ให้โปรแกรมทำงานหนักจนเกินไป