עזרה בשפת C

liatbi30

New member
עזרה בשפת C

היי צריכה עזרה בתרגיל :

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


קלט : 6 15 35 (6 שעות, 15 דקות, 35 שניות) 40 (שניות שהטיל באוויר)
פלט: 6 : 16 : 15 (מועד נחיתה)


כתבתי תכנית אבל הוא לא עושה את הפעולה המתימטית אודה למי שיכול לעזור תודה


#include<stdio.h>
int main()
{
int long hour,minutes,secound,air_t;
printf("\nPress dispatch hour, minuts and secound:\n\n");
scanf("%ld%ld%ld",&hour,&minutes,&secound);
printf("\n\nPress air time in secound\n\n");
scanf("%ld",&air_t);
printf("\n\nThe landing time: %ld:%ld:%ld\n\n",hour,minutes,secound+(air_t%60));
return 0;
}
 

liatbi30

New member
הסתדרתי הנה התכנית

#include<stdio.h>
int main()
{
int long hour,minutes,secound,air_t;
printf("\nPress dispatch hour, minutes and secound:\n\n");
scanf("%ld%ld%ld",&hour,&minutes,&secound);
printf("\n\nPress air time in secound\n\n");
scanf("%ld",&air_t);
printf("\n\nThe landing time: %ld:%ld:%ld\n\n",hour+(minutes+(secound+air_t)/60)/60,(minutes+((secound+air_t)/60))%60,(secound+air_t)%60);
return 0;
}
 

liatbi30

New member
למה?

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

BravoMan

Active member
כמה נקודות קטנות:

Press - זה "לחץ" כמו "לחץ על כפתור", לא "הקלד" או "הזן".
Dispatch - אפשר לפרש כ-"שליחה" אבל טיל משגרים לא שולחים (כמו שליח פיצה, מונית או אמבולנס).

ו-Air time זה זמן שידור (זמן בו תוכנית רדיו או טלוויזיה נמצאת "באוויר" או עולה ל-"אוויר"), וגם סלנג עבור ילדים שקופצים על סקייטבורד ופעלולנים, בעוד שלטיל מתאים יותר לכתוב "זמן טיסה".

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

Enter missile launch time (hour, minutes and seconds):
Enter flight time in seconds:


מה שכן, תמיד מומלץ להפריד את לוגיקת החישוב מההדפסה.

אומנם כאן מדובר בתוכנית ממש פשוטה, אבל כשדוחפים את כל החישובים למשפט ה-printf זה מקשה על קריאת הקוד ועבור תוכניות מורכבות יותר יהיה קשה יותר לעלות על טעויות.

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

liatbi30

New member
קודם תודה על התיקון אני...

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

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

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

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


כן אני יודעת שאלה תריגילים פשוטים כי אנחנו בהתחלה הדרך עוד ארוכה חחחח

אשמח אם תשלח לי בפרטי עוד טיפים לגבי שפת סי אם יש


שבת שלום
 

nocgod

New member
מרצה שלך

צריך לחזור ללמוד.
לחסוך שורות בשביל כתיבה יעילה יותר?
אין קשר בין כמות שורות קוד לבין יעילות הקוד
את יכולה לעשות קוד לא יעילו ב 10 שורות ואת אותו הקוד ואותה בעיה לפתור ב100 שורות וזה יהיה פי 2 יותר יעיל
דוגמא: פיבונאצ'י רקורסיבי לעומת פיבונאצ'י רקורסיבי עם memoization וכמובן פיבונאצ'י איטרטיבי.

טיפ ללימוד C: הספר The C Programming language של K&R באגלית (לא בעברית)
 

freak2100

New member
זה לא נכון מכל כך הרבה סיבות...

1. כי קוד קצר יותר הוא לא בהכרח יעיל יותר
2. כי קריאות הקוד יותר חשובה מיעילות, כמעט תמיד (יוצא דופן: קטעי קוד קריטיים, קוד embedded (וגם בו רק חלקים חשובים), קוד real time משמעותי וכן הלאה)
3. כי יותר חשוב שתלמדי לעבוד נכון, כמו שעובדים בעולם, ולא לפי מה שדורשים במבחן (מוזר לי, אגב, שבמבחן דורשים דברים לא הגיוניים שכאלה, יכול להיות שלא הבנת נכון?)
 
אין כללים, ועושה רושם שאת לא יודעת לתאר

מה המרצה אמר לך, וגם אם הוא אמר, אין סיכוי שתביני אותו..

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

בינתיים את צריכה רק לתרגל ולהשתפר..
 

liatbi30

New member
או קיי

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

nocgod

New member
האמת עד כמה שאני יודע

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

אני ראיתי כמה וכמה מרצים בשפות C ו ++C, גם כאלה עם ניסיון רציני מהתעשיה האווירית...להגיד שהם לימדו אותי C או ++C זה יהיה פגיעה בכבודם של Kernighan ו Ritchie ו Strastroup (אני כנראה כתבתי את השם לא נכון)
לפי זה שאת עושה מבחני מה"ט אני מניח שאת לומדת תואר הנדסאי תוכנה באחת המכללות...לא הייתי מצפה שמרצים כמו סיקסיק ילמדו שם...כאלה שיודעים איך לגרום לסטודנטים להפעיל את הראש, ואלה שלא מפעילים אותו נושרים.
 
הכי צרם לי היה ה secounds שניות באנגלית הן seconds.

דבר שני היה ה "press", שנשמע כאילו את מבקשת מהמשתמש לגהץ לך את השעה והתאריך. אם את רוצה שהוא יזין נתונים, המילה היא enter.

לגבי dispatch, זה מינוח נכון באנגלית בריטית ונשמע מאור מוזר באמריקאית.

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