ABA


"צריך קצת עזרה בשפת C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #6314 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 6314
Helpless

   07:55   15.06.03   
אל הפורום  
  צריך קצת עזרה בשפת C  
 
   כידוע לכולם, אנשים בכיתה י"ב שעושים השנה בגרות בשפת C, צריכים לעשות פרוייקט, שזה בדר"כ משחק. בבית ספר שלי יש כמה רמות לימוד של מחשבים, יש לימוד לטכנאות, כלומר מקצוע שאין לו הרבה קשר לתיכנות אלא בעיקר לחומרה ודברים כאלו. יש את הרמה האמצעית שזו רמת תיכנות, שם לומדים VB ועוד שפות אחרות, ויש את הרמה שנחשבת להכי גבוהה, ושם מלמדים שפת C , תורת המחשב וכו'. אני עברתי בתחילת השנה מהרמה האמצעית לרמה ששם מלמדים שפת C, ולפי מה שאמרו לי כל השנה אני לא חייב לעשות את הפרוייקט בשפת C , כי אני לא למדתי בשנה שעברה שפת C. למרות זאת, לפני כמה ימים הודיעו לי שאני בכל זאת אצטרך לעשות את הפרוייקט הזה. מועד ההגשה הוא ביום רביעי, לכן יש לי קצת זמן. אמנם לא למדתי בצורה סדירה שפת C אבל למדתי פסקל וזה די קל לעשות את הטרנספר לשפת C. בקיצור, התחלתי לפני מספר ימים את העבודה, ויש כמה דברים שהם לא אותו דבר כמו בפסקל, ואין מידע עליהם ב Help של התוכנה (אני משתמש בטורבו C). רציתי לדעת אם יש פה מישהו שיכול לעזור לי בכמה דברים קטנים לאורך הפרוייקט, דברים פשוטים מאוד, אני אפרט :

אני מכין משחק הימורים קטן, שבו המשתמש מקבל סכום כספי מסויים, ויש לו את האפשרות להמר על 3-6 משחקים מתוך ששת המשחקים שמשוחקים באותו מחזור. ההימורים הם לא עיוורים, כלומר אם הקבוצה שנמצאת במקום הראשון משחקת מול הקבוצה שבמקום האחרון, הסיכויים שהקבוצה הראשונה תנצח הם בהתאם, למשל 80%. 80% זה אומר שלפי המחשב, הוא מגריל מספר בין 1-100 ואם המספר הוא בין 1 ל 80 אז התוצאה היא ניצחון של הקבוצה הראשונה, אם המספר הוא בין 81 ל 90 אז התוצאה היא תיקו ואם המספר הוא בין 91 ל 100 אז התוצאה היא ניצחון לקבוצה השניה. המשחק גם כולל טבלה שמתעדנת ומוסיפה נקודות לכל קבוצה בהתאם. זה בעצם כל מה שהמשחק כולל , וזה די פשוט.

כל שאר המסכים במשחק הם מסכים סטטיים, כלומר מסכים שבהם יש הוראות, קרדיט, פתיחת של המשחק, הודעת יציאה, מסך זכייה ומסך הפסד. המסכים הפעילים היחידים שיש אלו : מסך בו יש את הטבלה, לוח משחקים, והמסך של שליחת הניחושים.

עכשיו בעיקרון, את כל המסכים הסטטיים כבר התחלתי לעשות ואין לי איתם שום בעיה, גם עם התפריטים למיניהם אין לי שום בעיה. מה שכן, אני צריך לדעת איך ממשים את הדברים הבאים :

1. מערך, מערך מספרים או מערך של CHAR, אני צריך לדעת איך מגדירים אותו ואיך משתמשים בו.

2. פונקציות, זה די דומה לפסקל אבל יש כמה דברים שלא עובדים בצורה זהה, הגדרתי למשל פונקציה ניסיונית :

void test()
{
ובפנים כתבתי סתם פקודות פשוטות
}

ברגע שאני מנסה לקרוא בצורה הבאה לפונקציה הזו מתוך פונקציה אחרת :
test();
הוא כותב לי משהו על זה שאני צריך להגדיר את הפונקציה test בתוך הפונקציה השניה בעזרת prototype, הבעיה היא שאין לי מושג מזה הפרוטוטייפ הזה ולא כתוב עליו שום דבר ב HELP.


כרגע זה כל מה שאני צריך לדעת, אני מניח שכאשר אני איישם את כל זה יהיו לי בעיות נוספות אבל אני מסתדר עם כל הבעיות במידה וכתוב עליהן ב HELP.


אלו דברים מאוד בסיסיים ואני מניח שכל מי שיודע שפת C יודע אותם, אם יש מישהו שיש לו כמה דקות לעזור לי בזה אני אשמח מאוד, אפשר גם לדבר איתי באייסיקיו 46839315 או במסנג'ר [email protected] או כמובן להגיב להודעה הזו\לשלוח הודעה פרטית. אני מוכן אפילו לשלם בעבור פגישה במידה ויש מישהו שגר במרכז.


תודה לראש לכל מי שקרא את ההודעה ותודה רבה למי שמוכן לעזור


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  בקיצור נמרץ: liranr 15.06.03 08:10 1
     קודם כל תודה על התשובה Helpless 15.06.03 08:57 2
         תשובות nevola 15.06.03 09:24 3
             אוקיי הבנתי Helpless 15.06.03 10:24 4
                 דרך אגב יש לי עוד שאלה Helpless 15.06.03 11:58 5
                     ניסיתי לעשות את זה עם char Helpless 16.06.03 15:26 6
                         אחי כנס ... eliran33 17.06.03 01:21 7
                             תודה על התשובה המפורטת Helpless 17.06.03 08:29 8
                                 אוקיי... liranr 17.06.03 09:14 9
                                     הבנתי מצויין Helpless 17.06.03 09:40 10
                                         בעיה קטנה עם זה Helpless 17.06.03 12:01 11
                                             ככה- פוקיפC 17.06.03 12:48 12
                                                 מעולה Helpless 17.06.03 12:56 13
                                             יותר מערך אחד לפונקציה chenke  17.06.03 13:01 14

       
liranr

   08:10   15.06.03   
אל הפורום  
  1. בקיצור נמרץ:  
בתגובה להודעה מספר 0
 
   מערכים ב-C:

int A[10];

מגדיר מערך של מספרים שלמים בגודל 10 בשם A.
שים לב שהמקומות במערך הם 0..9 ולא 1..10

פונקציות:
אם הגדרת פונקציה מתחת ל-main, או בקובץ אחר, אתה צריך להוסיף
מעל הmain את ה-prototype של הפונקציה.
למעשה זה לא יותר מהכותרת של הפונקציה שאחריה ;. כלומר שים את
זה מעל ה-main:


void text();

וזה אמור לעבוד


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   08:57   15.06.03   
אל הפורום  
  2. קודם כל תודה על התשובה  
בתגובה להודעה מספר 1
 
   עבר עריכה לאחרונה בתאריך 15.06.03 בשעה 08:59
 
ואיך אני ניגש אל המערך ? למשל :
A[9] = 4
או
(if (a[9]==4
וכו' ?

ובקשר לפונקציות, כל הפונקציות שלי מוגדרות מעל ל main, אבל בכל זאת זה מראה לי הודעה שאומרת שאני כן צריך להגדיר פרוטוטייפ, אני קורא לפונקציה מתוך גם פונקציות אחרות ולא בהכרח מ main. בכל מקרה, מזה בדיוק הפרוטוטייפ הזה ? כלומר מה אמורים להגדיר בו ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
nevola

   09:24   15.06.03   
אל הפורום  
  3. תשובות  
בתגובה להודעה מספר 2
 
   1. הגישה אל המערך יכולה להתבצע כמו שכתבת בשורה הראשונה -
A=4
זה השמה למערך, ובלי הסימן שווה זה יהיה שליפה ממנו.

2. אתה יכול רק להצהיר על קיום הפונקציה (זה נקרא פרוטוטייפ) לפני ה-main ואת המימוש שלה לכתוב איפה שאתה רוצה, הדרך הטובה היא לחלק לקבצי h שבהם יש הצהרות וקבצי c שבהם יש מימוש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   10:24   15.06.03   
אל הפורום  
  4. אוקיי הבנתי  
בתגובה להודעה מספר 3
 
   תודה רבה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   11:58   15.06.03   
אל הפורום  
  5. דרך אגב יש לי עוד שאלה  
בתגובה להודעה מספר 4
 
   איך אני עושה מערך של String ?
כלומר מערך שבתוכו יש משתנים שבכל אחד יש מקום ל 255 תווים ולא לתו אחד כמו Char


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   15:26   16.06.03   
אל הפורום  
  6. ניסיתי לעשות את זה עם char  
בתגובה להודעה מספר 5
 
   אבל זה לא עובד כי זה מביא מערך עם משתנים שמכילים רק תו אחד. מישהו יודע איך עושים מערך ב String ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
eliran33

   01:21   17.06.03   
אל הפורום  
  7. אחי כנס ...  
בתגובה להודעה מספר 6
 
   עבר עריכה לאחרונה בתאריך 17.06.03 בשעה 01:26
 
לפי מה שאני רואה המצב שלך בקנטים ...אפילו שזה פרוייקט של חצי שעה אתה פשוט לא יודע ... וזה לא כמו פסקל ... ו.... הכי חשוב ... ה HELP בבורלנד הוא משהו בן זונה וכל מה שאתה רוצה יש שם .

עכשיו לשאלה .... ב C או C++ אין טיפוס מחרוזת (כלומר STRING)
אז מה עושים ?!
אז ככה ...קודם כל מחרוזת ב C זה פשוט מערך של CHAR .
אני יתן לך מילים לחפש ב HELP של דרכים לעשות מערך של מחרוזות .

א . TYPEDEF ... אתה מגדיר בו מערך של CHAR וקורא לו בשם , ואז יוצר מערך של אותו שם . (בקצרה ...)

ב . STRUCT ... אתה יוצר מבנה שבתוכו יש מערך של CHAR ואז יותר מערך של אותו STRUCT . (מאד בקצרה ...)

typedef struct str
{
char str;
}str;

str string1;

ג . POINTER ... זאת הדרך הטובה והיעילה ביותר לעשות את זה אבל גם הקשה ביותר ... אז היא לא ממולצת מכיוון שהיא מערבת הקצאה דינמית .

המלצה שלי ... בזמן שנשאר ... תשלם למישהו שיעשה לך את העבודה .


ניסיתי ... מקווה שזה נותן לך לפחות כיוון .


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   08:29   17.06.03   
אל הפורום  
  8. תודה על התשובה המפורטת  
בתגובה להודעה מספר 7
 
   קודם כל, קנטים או לא קנטים, אני כבר על סף סיום של המשחק.. וזה לא רק דומה לפסקל, זה דומה בצורה בלתי רגילה. כל הפקודות הן אותן פקודות רק עם שינוי קטן, למשל סוגריים במקום = , ודברים כאלו קטנים. יש עוד כמה שינויים שנחשבים קצת יותר גדולים כמו printf ו writeln אבל זה ממש לא רציני.. קראתי ב HELP על הסטרינג והבנתי. עכשיו חסרים לי רק שני דברים לסיום התוכנית :

1. אני צריך לדעת איך מכניסים ערך לפונקציה, כלומר נניח ואני קורא לפונקציה בשם test ואני רוצה להכניס לה את הערך שיש במשתנה i , שהיא תקבל את הערך הזה, תכניס אותו למשתנה משלה, ואז תעבוד איתו.

2. בהדפסה של float, צריכה להיות אפשרות להדפיס רק את הספרות הראשונות, כלומר אם נניח במשתנה של float יש את הערך 3, הוא ידפיס 3.00000, אני רוצה להגביל אותו, ושהוא ידפיס רק ספרה אחת אחרי הנקודה, כלומר שידפיס 3.0.

אם אתה או מישהו אחר יודע איך לעשות את אחד מהשניים אשמח לקבל תשובה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   09:14   17.06.03   
אל הפורום  
  9. אוקיי...  
בתגובה להודעה מספר 8
 
   פונקציות
-=-=-=-=
נגדיר פונקציה כזאת:
int two_times(int x)
{
return 2*x;
}

הפונקציה מקבלת משתנה x , ומחזירה את ערכו כפול 2 (לא משהו מתוחכם במיחד).
כשאנחנו קוראים לה נקרא לה כך לדוגמא:

printf("%d",two_times(34));

זה ידפיס כמובן 68. הרעיון ברור?

דיוק בהדפסה
-=-=-=-=-=-
אם אני זוכר נכון, ואני ממש לא בטוח שזה המצב, תנסה את השורה הבאה:


printf("%.1f",num);

זה אמור להדפיס את num בדיוק של ספרה אחת אחרי הנקודה.
כמובן אתה יכול להחליף את 1 באיזה דיוק שאתה רוצה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   09:40   17.06.03   
אל הפורום  
  10. הבנתי מצויין  
בתגובה להודעה מספר 9
 
   והקטע של ה float באמת עובד
תודה רבה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   12:01   17.06.03   
אל הפורום  
  11. בעיה קטנה עם זה  
בתגובה להודעה מספר 10
 
   כשאני בונה פונקציה ומגדיר לה ערך אחד שנכנס אליה מהפונקציה הראשית, אין שום בעיה. אבל כשאני מנסה להגדיר לפונקציה הזו שני ערכים שנכנסים , כלומר (void test(a,b זה לא עובד, הוא כותב אחרי ה a, את זה : "expected (" כלומר הוא מצפה שאחרי הערך הראשון אני אסגור את הסוגריים והוא לא מקבל בעצם ערך נוסף. איך אפשר להגדיר לו כניסה של שני ערכים ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
פוקיפC
חבר מתאריך 3.11.16
20 הודעות
   12:48   17.06.03   
אל הפורום  
  12. ככה-  
בתגובה להודעה מספר 11
 
  

void test(int a,int b)
{

}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Helpless

   12:56   17.06.03   
אל הפורום  
  13. מעולה  
בתגובה להודעה מספר 12
 
   תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
chenke 
חבר מתאריך 1.7.02
730 הודעות
   13:01   17.06.03   
אל הפורום  
  14. יותר מערך אחד לפונקציה  
בתגובה להודעה מספר 11
 
   מגדירים אותה כך:
void test(int a,int b)

וקורים לה כך test(5,6)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net