עזרה בתכנות

Any991

New member
עזרה בתכנות

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

deepspace

New member
אף אחד לא יפתור לך תרגיל שלם...

תראה מה ניסית ואיזה שגיאה או פלט לא נכון קיבלת.
 

BravoMan

Active member
להלן הפתרון המלא:

http://pastebin.com/WgXavkMd
&nbsp
תהנה ובהצלחה!
&nbsp
*חברי הפורום מוזמנים להציע הצעות ייעול, תיקוני באגים, וחוות דעת על הביצוע באופן כללי.
 

Any991

New member
ואו תודה רבה אבל...

שכחתי כמה פרטים: אני כותב בשפת java ולא ב-C וזה תרגיל מהתחלת החומר, מה שאומר שאין שימוש במערכים, אלא רק בuse case, ואולי קצת לולאות אם צריך
 

BravoMan

Active member
גם אני שחכתי לציין משהו:

זה פורום "שפות תכנות", לא פורום "תפתרו לי שעורי בית"

&nbsp
ידעתי שהתרגיל ב-Java מה-PDF, ובוא רק נגיד ששימוש במערכים הוא דווקא אחד הדברים היותר פשוטים שהכנסתי שם

מה שכן - הפתרון הזה באמת עובד, בדקתי אותו עם כל הדוגמאות ב-PDF שלך, כך שאני סבור שהוא נכון ב-100%.
הוא גם עומד בתנאי התרגיל ואינו משתמש ב-&& בשום מקום!
&nbsp
עכשיו יש לך כמה אפשרויות:
1. תגיש אותו ותראה מה קורה.
2. תנסה להבין מה עשיתי ולהעתיק ל-Java.
3. תמשיך לחפש מי יעשה שיעורי בית במקומך.
4. תהיה בן אדם, תראה מה עשית עד עכשיו, תסביר במה אתה מתקשה, ותקבל עזרה אמתית בפורום.
&nbsp
בהצלחה!
 

Guy Yafe

New member
חייב לשאול

איך עלית על זה שזה JAVA?
לי זה נראה ממש כמו תרגיל C להנדסה שסיקסיק אוהב לתת.
 

BravoMan

Active member
הם כתבו שם שאין צורך להשתמש בקבועים final

זו הגדרה של Java בעוד ש-C משתמש ב-const.
בנוסף, הם כל הזמן כותבים Console עם C גדולה, במקום לדבר על "פלט סטנדרטי" אם stdout, שגם זו כמובן גישה "ג'וואית", מה גם שב-C לא צריך להסביר לתלמידים מתחילים לאן מדפיסים טקסט.
&nbsp
במשימה עצמה כמובן אין שום דבר שמחייב מימוש בשפה ספציפית, בהתחלה חשבתי לעשות את זה ב-Python תוך שימוש ב-eval והצפנת חלק מהקוד, אבל כבר השתמשתי בתכסיס הזה לשאלה בנוסח דומה בפורום לינוקס, וזו אובפוסקציה כ"כ בסיסית שהרגשתי שהיא לא תספק לי אימון טוב.
&nbsp
מה שהכי לא ברור לי, זה מה הם מנסים להרוויח ע"י איסור שימוש ב-&&.
מעולם לא אהבתי תרגילים שמתעקשים על עץ if סבוך רק בשביל לראות כמה פעמים התלמיד יכול לכתוב if מכונן בלי להתחרפן...
 

Guy Yafe

New member
צודק פספסתי את השורה הזו

דווקא בגלל השימוש בConsole, חשבתי שהם עובדים בC#. (במיוחד עם אות גדולה).
אגב, אחת הבעיות הגדולות של JAVA בעיניי לעומת C למיניהן, היא שאין שם const.
&nbsp
 

BravoMan

Active member
מה זאת אומרת אין const?

במה בדיוק final שונה ממנו? (למעט יכולת שימוש בו למניעת ירושה של מחלקות כמובן).
&nbsp
תוכל לתת דוגמה למקרה ב-Java שהיית רוצה להשתמש בו ב-const ולהסביר מדוע?
 

Guy Yafe

New member
final הוא על הreference בלבד

הדוגמה הקלאסית היא אוסף כלשהו. אם הגדרת אותו כfinal אתה לא יכול להחליף אותו באוסף אחר, אבל אם אתה רוצה שהתוכן של האוסף יהיה בלתי ניתן לשינוי, ללא יכולת להוסיף או להסיר ממנו איברים JAVA לא מספקת את האפשרות הזו.
&nbsp
בC++ כמובן שאין את הבעיה הזו.
 

BravoMan

Active member
טוב, נראה ש-++C שלי יותר חלודה מ-C, כי שכחתי

ש-const מפריע גם להפעלת מתודות על אובייקט שאינן const בעצמן.

&nbsp
עבור אוספים ספציפית, ל-Java יש פתרון מוכן משלו, כל אוסף מגיע גם בגרסה Unmodifiable:
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#unmodifiableList(java.util.List)
&nbsp
האם הפתרון הזה אלגנטי כמו const או לא אפשר להתווכח, ואני מניח שזה תלוי לחלוטין בשימוש.
כרגע, השימוש היחיד שעולה לי לאוסף שהוא const זה בהכרזת פרמטר לפונקציה, כמאין "הבטחה" - תיעוד בתוך הקוד שמראה שהפונקציה לא תשנה את האוסף.
&nbsp
Javadoc נורמלי עבור API אמור למנוע את הצורך הזה.
&nbsp
אם אתה כותב מחלקת אוסף משלך, אני מניח שתצטרך לעבוד קצת כדי ליצור אפשרות לגרסה שתואמת const.
מצד שני, עבור מי שמשתמש במחלקה זה כנראה לא ישנה, והמשתמש הוא ששם בד"כ const על משהו.
&nbsp
לי אישית מפריע הרבה יותר שב-Java אין טיפוסים unsigned, מה שיוצר בעיות לא קטנות כשצריך לעבוד עם קבצים בינאריים או מקור מידע בינארי אחר (למשל ערוץ BT).
בכלל, עבודה ברמה של bytes ועבודה עם קבצים די מסורבלת ומתפזרת על פני יותר מידי מחלקות לטעמי.
&nbsp
מנגד, היכולת של ++C לדרוס כמעת את כל האופרטורים, בעוד שנותנת לשפה כוח רב, גם יכולה בקלות להכניס מתכנת לסיוט בלתי נגמר של קוד לא קריא בעליל והתנהגות לא צפויה.
לפעמים פחות זה יותר
 

Guy Yafe

New member
אתה מציג את העובדה שהיתרונות הם גם החסרונות

המון המון עוצמה שבאה עם הרבה מאוד בלבול.
זה מעלה משהו שככל שנכנסתי עומק יותר לJAVA, חשבתי עליו יותר:
C וC++ מורכבות מאוסף המילים השמורות שלהן ומכללי התחביר. אם תשתמש אך ורק במילים שמורות וללא שום ספריות חיצוניות, תוכל לעשות את כל מה שהיית יכול באמצעות הספריות החיצוניות.
JAVA מאוד שונה במובן שכללי התחביר של השפה שזורים בAPI שלה.
דוגמה ראשונה: העמסת אופרטורים קיימת רק על מחלקה מסוג String.
דוגמה שניה: סוגים שונים של חריגות שהן בעצם סוגים שונים של מחלקות, גוררים התנהגות שונה של הקומפיילר.
יש כמובן עוד הרבה דוגמאות.
באופן כללי התקן של JAVA לא מגדיר רק את השפה עצמה אלא את הAPI שלה, את הJVM ואת כלי המוניטורינג שמסביבה.
 

nocgod

New member
ואו - יותר מידי זמן לא ראיתי C הרגת אותי. שאפו על הביצוע


 

BravoMan

Active member
תודה!

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