עזרה בפסקל...

תומר 007

New member
עזרה בפסקל...

כתבתי תוכנית בפסקל.. והיא נתקעת לי באמצע.. התוכנית עברה קומפילציה.. ובכל זאת נתקעת במהלך הריצה.. ומסמנת את השורה הבאה:
if a>b then c:=a​
מתוך הפונקציה שנמצאת בתוך הפרוצדורה הבאה:
procedure zimzom_shever(var shever:fraction); {the procedure is getting a fraction and shrinking it} var a,b,c:integer; function small(a,b:integer):integer; {the function is getting 2 numbers and and returning the smaller one} var c:integer; begin {of small} if a>b then c:=a else c:=b; small:=c; end; begin {of zimzom_shever} a:=shever.numerator; b:=shever.denominator; repeat c:=abs(a-b); a:=small(a,b); b:=c; until c=0; with shever do begin numerator:=numerator div a; denominator:=denominator div a; end; end;​
אני לא ממש מבין מה הבעיה... אם למי יש מושג או משהו... או אם צריך עוד פרטים על התוכנית כדי לדעת.. רק תודיעו לי אני אביא פה.. נ.ב. זה קשור לעבודה שאני צריך להגיש למחר.. אז טובה שעה אחת קודם:) בתודה מראש, תומר.
 

zagzagzag

New member
יש לך טעות ב-small

אם a > b צריך להחזיר את b...
בנוסף, שים לב שהפונקציה שלך אמורה להתקע אם המונה הוא 0 אגב, להבא רצוי לספק את הפרטים שחשובים להבנת הפונקציה (למשל, מה זה fraction)
 

תומר 007

New member
תודה רבה רבה :)

חחח איזה טעות טיפשית יאללה...
ואל תדאג.. זה לא יתקע.. בגלל ההצהרה הבאה:
fraction=record numerator:integer; denominator:1..maxint; end;​
באמת הייתי צריך להוסיף יותר פרטים.. לא נורא להבא אני אוסיף:) שוב תודה
 

zagzagzag

New member
דיברתי על המונה (numerator)

כי הנחתי שיש לך בדיקה למכנה. שים לב שאם numerator הוא 0, יש לך לולאה אינסופית. אולי כדאי להוסיף שם איזה תנאי למקרה הזה. ובבקשה
 

תומר 007

New member
אה נכון...

וואי.. לא שמתי לב

begin {of zimzom_shever} if a<>0 then begin a:=shever.numerator; b:=shever.denominator; repeat c:=abs(a-b); a:=small(a,b); b:=c; until c=0; with shever do begin numerator:=numerator div a; denominator:=denominator div a; end; end;​
אני מאמין שזה ימנע את הכניסה ללולאה אין סופית.. נכון?... אם המונה אפס.. הוא ימנע ממנו להכנס ללולאה... ובעצם הפונקציה לא תתבצע עליו... שוב תודה רבה:)
 

תומר 007

New member
תיקון טעות...

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

תומר 007

New member
שוב תיקון טעות...../images/Emo7.gif

הפעם תיקון בתוכנית...
procedure zimzom_shever(var shever:fraction); {the procedure is getting a fraction and shrinking it} var a,b,c:integer; function small(a,b:integer):integer; {the function is getting 2 numbers and and returning the smaller one} var c:integer; begin {of small} if a>b then c:=b else c:=a; small:=c; end; begin {of zimzom_shever} a:=shever.numerator; b:=shever.denominator; if (a<>0) and (a<>b) then begin repeat c:=abs(a-b); a:=small(a,b); b:=c; until c=0; with shever do begin numerator:=numerator div a; denominator:=denominator div a; end; end; end;​
זה נרהא לי הסופי:)..
 
למעלה