עבור לתוכן

בקשה- המרת קוד מ JAVA לשפת C/C++

Featured Replies

פורסם

מצאתי באתר שמישהו נתן פה בפורום, כל-מיני שיטות מיון, כאשר מאחת מהן התלהבתי מאוד-מאוד, Quick Sort.

מצאתי את הקוד של המיון, אבל הבעיה היא שהוא כתוב בשפת JAVA, שאותה אני לא מבין כ"כ.

רציתי לדעת אפ מישהו יכול להנחות אותי איך להמיר את קטע הקוד החמוד הזה לשפה שאני מכיר ומשתמש בה, C/C++ (עם העדפה ל C++).

תודה מראש ^_^

[attachment deleted by admin]

פורסם

Java די דומה ל-++C. אין פה הרבה עבודה:

1. תיפטר מכל ההגדרות המיותרות (אתה לא צריך קלאסים, לא צריך throws וכו').

2. במקום להעביר מערך באמצעות []int a, תעביר מצביע ל-int ואת גודל המערך (כנהוג ב-C) או לחילופין, תשתמש ב-<vector<int (ותזכור להעביר אותו כ-reference לכל הפונקציות).

3. תזכור להפריד את הקוד לקובץ cpp וקובץ h.

פורסם

או שפשוט תחפש מימוש של QSORT בשפה שאתה רוצה..

פורסם
  • מחבר

Java די דומה ל-++C. אין פה הרבה עבודה:

1. תיפטר מכל ההגדרות המיותרות (אתה לא צריך קלאסים, לא צריך throws וכו').

2. במקום להעביר מערך באמצעות []int a, תעביר מצביע ל-int ואת גודל המערך (כנהוג ב-C) או לחילופין, תשתמש ב-<vector<int (ותזכור להעביר אותו כ-reference לכל הפונקציות).

3. תזכור להפריד את הקוד לקובץ cpp וקובץ h.

1-2. תודה, אני אנסה את זה.

3. אין לי שמץ מה בדיוק מתאים לכל חלק, אם תוכל לעזור לי זה יהיה נחמד :) , אחרת אני אנסה בשיטה של ניסוי וטעייה.

פורסם

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

בקובץ cpp אתה שם את הפונקציה עצמה (כולל שורת הכותרת).

פורסם
  • מחבר

תודה רבה!

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

בקובץ h אתה שם הצהרות של הפונקציות (שורת הכותרת - השורה שמכילה את שם הפונקציה' date=' הפרמטרים וערך ההחזרה).

בקובץ cpp אתה שם את הפונקציה עצמה (כולל שורת הכותרת).

[/quote']

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

יש לי רק שאלה על צורת החלוקה:

אם בקובץ ה h אני שם רק את האבטיפוס של הפונקציה, אז איך כשאני קורא לקובץ h, נניח iostream, אני יכול להשתמש בפונקציות, ולא צריך לכתוב אותן?

האם אפשר לכתוב בתוך קובץ ה h את כל הפונקציה?

אני לא אגיב פה במהלך השבת, אז רק רציתי לאחל שבת שלום לכולם ^_^

פורסם

אפשר, לא מומלץ, למעט מקרים ספציפיים (אם אתה כותב template אז אתה חייב).

לא הבנתי מה אתה רוצה לעשות עם iostream, ואיך אתה משתמש בו עכשיו.

פורסם
  • מחבר

אפשר' date=' לא מומלץ, למעט מקרים ספציפיים (אם אתה כותב template אז אתה חייב).

לא הבנתי מה אתה רוצה לעשות עם iostream, ואיך אתה משתמש בו עכשיו.

[/quote']

אני לא משתמש ב iostream עכשיו, אני רק רציתי לשאול, איך זה שכשאני קורא לקובץ iostream (ע"י include), אני יכול להשתמש בפונקציות של הספרייה, ולא צריך לכתוב אותן בעצמי.

רציתי לדעת איך עובד הרעיון הזה.

פורסם

כי iostream זה חלק מספריה מוכנה של המערכת שבה אתה משתמש והמימוש שלו נמצא בה.

פורסם
  • מחבר

כי iostream זה חלק מספריה מוכנה של המערכת שבה אתה משתמש והמימוש שלו נמצא בה.

מה שאומר שאם אני רוצה ליוצר קובץ header, ולהשתמש בו כמו שאני משתמש ב iostream, אני צריך לכלול בו את כל הפונקציה, ולא רק את האבטיפוס שלה, נכון?

פורסם

לא.

העקרון שבו עובדת C (ושפות אחרות) הוא שאתה יכול להפריד את הקוד שלך באופן חופשי לקבצים שונים.

תהליך הבנייה עצמו מורכב משני שלבים - הידור (compile) וקישור (link).

בשלב ההידור, המהדר (compiler) לוקח כל קובץ C והופך את הפונקציות שבו לשפת מכונה (קובץ obj).

בשלב הקישור, המקשר (linker) לוקח את קבצי ה-obj האלה ומחבר אותם לקובץ אחד (שהוא exe או dll).

עכשיו, נניח שיש לך קובץ C אחד (נקרא לו a.c) שמשתמש בפונקציה f הקיימת בקובץ C אחר (נקרא לו b.c).

אז על מנת שהקובץ a.c יתקמפל, הוא רק צריך לדעת איך לקרוא לפונקציה f - הוא לא צריך לדעת מה היא עושה, או בכלל איפה היא ממומשת. בשביל זה, מכניסים את ההגדרה של הפונקציה f בקובץ בשם b.h, ועושים לו אינקלוד ב-a.c.

כשהקומפיילר מקמפל את a.c, הוא יוצר את a.obj, וזוכר שקיימת שם התייחסות לפונקציה חיצונית בשם f, ומסמן אותה.

בשלב הבא, הלינקר עובר על כל קבצי ה-obj, ובודק למי "חסרות" פונקציות. הוא רואה שב-a.obj חסרה פונקציה בשם f, ומוצא שהיא קיימת ב-b.obj - וככה הוא מקשר ביניהן.

(שים לב שאני מפשט קצת, כי ב-++C יכולות להיות פונקציות שונות עם אותו שם)

פורסם
  • מחבר

לא.

העקרון שבו עובדת C (ושפות אחרות) הוא שאתה יכול להפריד את הקוד שלך באופן חופשי לקבצים שונים.

תהליך הבנייה עצמו מורכב משני שלבים - הידור (compile) וקישור (link).

בשלב ההידור, המהדר (compiler) לוקח כל קובץ C והופך את הפונקציות שבו לשפת מכונה (קובץ obj).

בשלב הקישור, המקשר (linker) לוקח את קבצי ה-obj האלה ומחבר אותם לקובץ אחד (שהוא exe או dll).

עכשיו, נניח שיש לך קובץ C אחד (נקרא לו a.c) שמשתמש בפונקציה f הקיימת בקובץ C אחר (נקרא לו b.c).

אז על מנת שהקובץ a.c יתקמפל, הוא רק צריך לדעת איך לקרוא לפונקציה f - הוא לא צריך לדעת מה היא עושה, או בכלל איפה היא ממומשת. בשביל זה, מכניסים את ההגדרה של הפונקציה f בקובץ בשם b.h, ועושים לו אינקלוד ב-a.c.

כשהקומפיילר מקמפל את a.c, הוא יוצר את a.obj, וזוכר שקיימת שם התייחסות לפונקציה חיצונית בשם f, ומסמן אותה.

בשלב הבא, הלינקר עובר על כל קבצי ה-obj, ובודק למי "חסרות" פונקציות. הוא רואה שב-a.obj חסרה פונקציה בשם f, ומוצא שהיא קיימת ב-b.obj - וככה הוא מקשר ביניהן.

(שים לב שאני מפשט קצת, כי ב-++C יכולות להיות פונקציות שונות עם אותו שם)

אז למעשה, כשאני יוצר קובץ header, אני צריך לכתוב בו רק את האבטיפוס של הפונקציה, ובקובץ אחר, עם הסיומת c או cpp, אני צריך לכתוב את הפרוט של הפונקציה, והקומפיילר כבר יקשר בניהם לבד?

פורסם
  • מחבר

תודה, סיימתי, אפשר לנעול אם צריך...

;)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים