לא מבינה

enbar567

New member
לא מבינה

#include<stdio.h> int c=4; void p1(int x,int y void p2(int x,int y main() { int a=5,b=8; p1(a,b printf("%5d %5d% 5d% 5d% 5d\n",a,b,c הפלט הוא: 4- 15 0 3 3- ןאני לא מבינה למה אשמח אם מישהו יוכל להסביר לי​
 

enbar567

New member
הנה הקוד שוב

< dir=ltr>#include<stdio int c=4; void p1(int x,int y); void p2(int x,int y); main() { int a=5,b=8; p1(a,b); printf("%5d %5d% 5d% 5d% 5d\n",a,b,c); } void p1(int x,int y) { int a,b; a=x+y; b=x-y; p2(a,b); c=x+y; printf("%5d%5d%5d%5d%5d\n",a,b,c,x,y); } void p2(int x,int y) { int a,b; x+=2; y--; a=x/y; b=x%y; c=a+b; printf("%5d %5d% 5d% 5d% 5d\n",a,b,c,x,y); }
 

ihovav

New member
תעלי את התכנית כקובץ TXT מצורף

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

ihovav

New member
לא ברור מה את מנסה לעשות פה

1 -> למה את מגדירה משתנים גלובאליים בשם X ו Y ואח"כ מגדירה אותם משתנים בפונקציות ? 2 -> למה את שולחת את הערכים BY VAL ולא BY REF - כפוינטרים ? אולי פספסתי פה משהו...
 

פינצ

New member
2. אולי בגלל

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

פינצ

New member
הפלט של התוכנה

הוא בדיוק מה שאמרת למחשב לעשות. אם ציפית לפלט אחר אז לא כתבת את התוכנה נכון. אם היית משתפת אותנו במה אמורה התוכנה לעשות היינו יכולים להגיד לך למה היא לא עושה את זה. עוד משהוא. הגדרת משתנים גלובליים נחשבת לתכנות מלוכלך וזה מאוד לא מומלץ (למרות שיש מקרים שבהם זה נדרש (בכתיבה לחלונות עם MFC למשל). לקרוא למשתנים a,b ובתוך הפונקציה לקרוא להם x,y ואז להגדיר שם עוד משתנים a,b מאוד מאוד מאוד מבלבל ומקשה על דיבגגינג של תוכנה. מאוד מומלץ שתהיי עקבית בשמות של משתנים.
 

עידית_

New member
חברים, יש לי הרגשה שפספסתם ../images/Emo8.gif

לי זה לא נראה כמו תוכנית שאמורה לעשות משהו, אלא כמו תרגיל שמיועד בדיוק ללמד את הנושא של by ref ו- by val וכל המטרה שלה זה להבין למה הפלט הוא כמו שהוא. אז לשואלת אני מציעה: 1. לעבור שוב על התוכנית שורה שורה ולרשום בצד את ערכי המשתנים הגלובליים, ואת ערכי המשתנים הלוקליים בתוך כל פונקציה. 2. לשים לב לא להתבלבל בין משתנים גלובליים ולוקליים בעלי אותו שם. למשל בתוך הפונקציה p1 , הערך של x הוא 5 והערך של y הוא 8, כי אלה הערכים שהועברו. למעשה בשום מקום בתוכנית אין שינוי (או אפילו אתחול) של המשתנים x,y הגלובליים! המשתנים a,b הם לוקליים בכל פונקציה, ולכן השינוי שלהם בפונקציה אחת לא משפיע על הערך שלהם באחרות. לכן בהדפסה האחרונה (מתוך main) הם נשארים 5 ו-8. רק הערך של c משתנה גם ב-p1 וב-p2. תמיד אם יש משתנה גלובלי, ובתוך פונקציה יש משתנה לוקלי עם אותו השם (גם כזה שמוגדר בפרמטרים שהפונקציה מקבלת) - הפונקציה מכירה רק במשתנה הלוקלי. רק אותו היא משנה, ורק לערך שלו היא מתייחסת. (יש גם דרך לעקוף את זה ולהתייחס לגלובלי, אבל זה לא רלוונטי בשאלה שלך).
 
למעלה