בקשה- המרת קוד מ JAVA לשפת C/C++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


binyamin1001

Recommended Posts

מצאתי באתר שמישהו נתן פה בפורום, כל-מיני שיטות מיון, כאשר מאחת מהן התלהבתי מאוד-מאוד, 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.

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

תודה רבה!

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

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

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

[/quote']

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

[/quote']

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

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

קישור לתוכן
שתף באתרים אחרים

כי 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, אני צריך לכתוב את הפרוט של הפונקציה, והקומפיילר כבר יקשר בניהם לבד?

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...